On Thu, 19 Oct 2006 15:25:55 +0300 (EEST) [EMAIL PROTECTED] wrote: > The SMC and SCC hardware transmitter is enabled at the wrong > place. Simply writing twice to the non-console port, like > > $ echo asdf > /dev/ttyCPM1 > $ echo asdf > /dev/ttyCPM1 > > puts the shell into endless uninterruptible sleep, since the > transmitter is stopped after the first write, and is not enabled > before the shutdown function of the second write. Thus the transmit > buffers are never emptied. > Was about to Ack, but... need one more glance at it on hw. I recall something that might be reason of the current implementation, but had no chance to recover the details.
Thanks for the input. I'll follow-up tomorrow.
> Signed-off-by: Kalle Pokki <[EMAIL PROTECTED]>
> ---
> drivers/serial/cpm_uart/cpm_uart_core.c | 5 ++---
> 1 files changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/serial/cpm_uart/cpm_uart_core.c
> b/drivers/serial/cpm_uart/cpm_uart_core.c index 90ff96e..8f3b3e5
> 100644 --- a/drivers/serial/cpm_uart/cpm_uart_core.c
> +++ b/drivers/serial/cpm_uart/cpm_uart_core.c
> @@ -194,10 +194,8 @@ static void cpm_uart_start_tx(struct uar
> if (cpm_uart_tx_pump(port) != 0) {
> if (IS_SMC(pinfo)) {
> smcp->smc_smcm |= SMCM_TX;
> - smcp->smc_smcmr |= SMCMR_TEN;
> } else {
> sccp->scc_sccm |= UART_SCCM_TX;
> - pinfo->sccp->scc_gsmrl |= SCC_GSMRL_ENT;
> }
> }
> }
> @@ -420,9 +418,10 @@ static int cpm_uart_startup(struct uart_
> /* Startup rx-int */
> if (IS_SMC(pinfo)) {
> pinfo->smcp->smc_smcm |= SMCM_RX;
> - pinfo->smcp->smc_smcmr |= SMCMR_REN;
> + pinfo->smcp->smc_smcmr |= (SMCMR_REN | SMCMR_TEN);
> } else {
> pinfo->sccp->scc_sccm |= UART_SCCM_RX;
> + pinfo->sccp->scc_gsmrl |= (SCC_GSMRL_ENR |
> SCC_GSMRL_ENT); }
>
> if (!(pinfo->flags & FLAG_CONSOLE))
signature.asc
Description: PGP signature
_______________________________________________ Linuxppc-embedded mailing list [email protected] https://ozlabs.org/mailman/listinfo/linuxppc-embedded
