cpm_uart non-console problem with write on 2nd open..

2 messages, 2 authors, 2006-09-14 · open the first message on its own page

cpm_uart non-console problem with write on 2nd open..

From: Alexandros Kostopoulos <hidden>
Date: 2006-09-14 13:30:53

I'm experiencing a problem with the 2.6.13 cpm_uart driver. When opening=
  =

the device for the second time after the driver was inserted, if only a =
 =

few bytes are sent for transmission and the device is then closed, the  =

tx_empty routine called by shutdown returns 0 and the latter hangs in th=
e  =

while loop with the call to cpm_uart_tx_empty. No bytes are actually  =

transmitted from the uart.

I found out that the difference between the first and subsequent open  =

calls is that during the first time (and until the first shutdown) the  =

transmitter is enabled in GSMRL. From this point on, the transmitter is =
 =

initially disabled on startup. Thus, if only a few bytes are queued for =
 =

transmission before shutdown and a TX interrupt is not triggered, the  =

bytes are never sent, and thus the shutdown function hangs on the  =

cpm_uart_tx_empty loop.

The fix that works for me is the following:

Index: drivers/serial/cpm_uart/cpm_uart_core.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- drivers/serial/cpm_uart/cpm_uart_core.c     (revision 106)
+++ drivers/serial/cpm_uart/cpm_uart_core.c     (working copy)
@@ -394,7 +394,7 @@ static int cpm_uart_startup(struct uart_
                 pinfo->smcp->smc_smcmr |=3D SMCMR_REN;
         } else {
                 pinfo->sccp->scc_sccm |=3D UART_SCCM_RX;
-        pinfo->sccp->scc_gsmrl |=3D (SCC_GSMRL_ENR);
+        pinfo->sccp->scc_gsmrl |=3D (SCC_GSMRL_ENR | SCC_GSMRL_ENT);

         }
Any comments would be greatly appreciated

thank you

Alex

Re: cpm_uart non-console problem with write on 2nd open..

From: Vitaly Bordug <hidden>
Date: 2006-09-14 13:37:48

On Thu, 14 Sep 2006 16:30:44 +0300
"Alexandros Kostopoulos" [off-list ref] wrote:
I'm experiencing a problem with the 2.6.13 cpm_uart driver. When opening  
the device for the second time after the driver was inserted, if only a  
few bytes are sent for transmission and the device is then closed, the  
tx_empty routine called by shutdown returns 0 and the latter hangs in the  
while loop with the call to cpm_uart_tx_empty. No bytes are actually  
transmitted from the uart.
It was addressed a while ago, fix should be in the latest stable kernel rev. for certain.

The snippet below was not the only thing to get problem completely resolved; 
You may glance at the code within current kernel, if still experiencing problems.

Thanks, Vitaly
quoted hunk
I found out that the difference between the first and subsequent open  
calls is that during the first time (and until the first shutdown) the  
transmitter is enabled in GSMRL. From this point on, the transmitter is  
initially disabled on startup. Thus, if only a few bytes are queued for  
transmission before shutdown and a TX interrupt is not triggered, the  
bytes are never sent, and thus the shutdown function hangs on the  
cpm_uart_tx_empty loop.

The fix that works for me is the following:

Index: drivers/serial/cpm_uart/cpm_uart_core.c
===================================================================
--- drivers/serial/cpm_uart/cpm_uart_core.c     (revision 106)
+++ drivers/serial/cpm_uart/cpm_uart_core.c     (working copy)
@@ -394,7 +394,7 @@ static int cpm_uart_startup(struct uart_
                 pinfo->smcp->smc_smcmr |= SMCMR_REN;
         } else {
                 pinfo->sccp->scc_sccm |= UART_SCCM_RX;
-        pinfo->sccp->scc_gsmrl |= (SCC_GSMRL_ENR);
+        pinfo->sccp->scc_gsmrl |= (SCC_GSMRL_ENR | SCC_GSMRL_ENT);

         }
Any comments would be greatly appreciated

thank you

Alex
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev

-- 
Sincerely, 
Vitaly
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help