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