Subject: Re: SCCx UART status on 8xx

From: Marcelo Tosatti <[email-masked]>
Date: Sat, 11 Mar 2006 16:17:02 -0600

Aris, 

Can you please prepare a detailed description of what the 
patch is doing and why?

Thanks

On Mon, Feb 20, 2006 at 11:18:35AM -0300, Aristeu Sergio Rozanski Filho wrote:
> Index: stable/drivers/serial/cpm_uart/cpm_uart_cpm1.c
> ===================================================================
> --- stable.orig/drivers/serial/cpm_uart/cpm_uart_cpm1.c	2006-02-17 17:11:37.000000000 -0200
> +++ stable/drivers/serial/cpm_uart/cpm_uart_cpm1.c	2006-02-17 17:15:57.000000000 -0200
> @@ -139,24 +139,31 @@
>  void scc1_lineif(struct uart_cpm_port *pinfo)
>  {
>  	/* XXX SCC1: insert port configuration here */
> +	cpmp->cp_sicr &= 0xFFFFFFC0;
>  	pinfo->brg = 1;
>  }
>  
>  void scc2_lineif(struct uart_cpm_port *pinfo)
>  {
>  	/* XXX SCC2: insert port configuration here */
> +	cpmp->cp_sicr &= 0xFFFFC0FF;
> +	cpmp->cp_sicr |= 0x00000900;
>  	pinfo->brg = 2;
>  }
>  
>  void scc3_lineif(struct uart_cpm_port *pinfo)
>  {
>  	/* XXX SCC3: insert port configuration here */
> +	cpmp->cp_sicr &= 0xFFC0FFFF;
> +	cpmp->cp_sicr |= 0x00140000;
>  	pinfo->brg = 3;
>  }
>  
>  void scc4_lineif(struct uart_cpm_port *pinfo)
>  {
>  	/* XXX SCC4: insert port configuration here */
> +	cpmp->cp_sicr &= 0xC0FFFFFF;
> +	cpmp->cp_sicr |= 0x1BFFFFFF;
>  	pinfo->brg = 4;
>  }
>  

> Index: stable/drivers/serial/cpm_uart/cpm_uart_core.c
> ===================================================================
> --- stable.orig/drivers/serial/cpm_uart/cpm_uart_core.c	2005-12-07 15:30:42.000000000 -0200
> +++ stable/drivers/serial/cpm_uart/cpm_uart_core.c	2005-12-08 12:39:11.000000000 -0200
> @@ -467,6 +467,7 @@
>  	/* free interrupt handler */
>  	free_irq(port->irq, port);
>  
> +#if 0
>  	/* If the port is not the console, disable Rx and Tx. */
>  	if (!(pinfo->flags & FLAG_CONSOLE)) {
>  		/* Wait for all the BDs marked sent */
> @@ -492,6 +493,7 @@
>  		/* Shut them really down */
>  		cpm_line_cr_cmd(line, CPM_CR_STOP_TX);
>  	}
> +#endif 
>  }
>  
>  static void cpm_uart_set_termios(struct uart_port *port,
> @@ -896,7 +898,7 @@
>  		pinfo->sccp->scc_gsmrl &= ~(SCC_GSMRL_ENR | SCC_GSMRL_ENT);
>  	}
>  
> -	ret = cpm_uart_allocbuf(pinfo, 0);
> +	ret = cpm_uart_allocbuf(pinfo, 1);
>  
>  	if (ret)
>  		return ret;
> @@ -912,10 +914,12 @@
>  
>  static void cpm_uart_release_port(struct uart_port *port)
>  {
> +#if 0
>  	struct uart_cpm_port *pinfo = (struct uart_cpm_port *)port;
>  
>  	if (!(pinfo->flags & FLAG_CONSOLE))
>  		cpm_uart_freebuf(pinfo);
> +#endif
>  }
>  
>  /*