Need advice on changing MPC5200B UART prescaler

Grant Likely grant.likely at secretlab.ca
Tue Jan 19 05:36:21 EST 2010


On Thu, Dec 17, 2009 at 8:57 AM, Sylvain Lamontagne
<sylvain.lamontagne at gmail.com> wrote:
> Hi all,
> I would like to be able to set a baud rate of 460800 for modem that we are
> testing. With the actual prescaler of 32 and a IPB frequency of 84MHz
> I got a 5.1% error (437500) vs a 0.9% error (456522) if I could use the
> prescaler of 4. See MPC5200B user manual page 15-46 for the calculation
> formula and page 15-12 for the CSR description.
> Currently the code for the kernel we are using here, (2.6.29.2) seams not to
> take a prescaler of 4 into account.
> Line 249 of
> mpc52xx_uart.c http://lxr.linux.no/linux+v2.6.29.2/drivers/serial/mpc52xx_uart.c#L249
> /* Search for bus-frequency property in this node or a parent */
> static unsigned long mpc52xx_getuartclk(void *p)
> {
>         /*
>          * 5200 UARTs have a / 32 prescaler
>          * but the generic serial code assumes 16
>          * so return ipb freq / 2
>          */
>         return mpc52xx_find_ipb_freq(p) / 2;
> }
> How could I make it use the prescaler of 4 without breaking anything that we
> currently have working ?
> I doubt that simply doing  return mpc52xx_find_ipb_freq(p) / 4 would do the
> trick ...

since 32 prescale is scaled to 16 by dividing by 2, then 4 would be
scaled to 16 by multiplying by 4.  Have you tried
mpc52xx_find_ipb_freq(p) * 4?  You'll need to add some method for the
uart driver to either set the prescaler at boot time or to figure out
on its own which prescaler would be best.

g.

-- 
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.


More information about the Linuxppc-dev mailing list