[PATCH] [POWERPC] mpc8315: fix USB UTMI Host setup

Kumar Gala galak at kernel.crashing.org
Tue Apr 15 01:22:46 EST 2008


On Apr 9, 2008, at 8:59 AM, Anton Vorontsov wrote:
> Currently USB Host isn't functional on the MPC8315E boards, for two
> reasons as described below.
>
> MPC8315 Reference Manual says:
> "The USB DR unit must have the same clock ratio as the encryption core
> unit, unless one of them has its clock disabled."
>
> The encryption core also drives I2C clock, so it is enabled and is  
> equal
> to 01. That means USBDRCM should be 01 here.
>
> Plus, according to MPC8315E-RDB schematics, USB unit consumes CLK_IN
> clock from the 24.00MHz oscillator, which means we must adjust REFSEL
> bits as well.

Can you add a comment in the code about the fact that part of this fix  
is board specific.

- k

>
>
> p.s.
> Idially we should rework whole 83xx/usb.c code, in two steps:
> 1. Move SCCR code to the U-Boot;
> 2. Implement fsl,usb-clock property in the device tree, so usb.c could
>   decide what clock exactly to use on per-board basis.
>
> Though, today we're not in a hurry since there is just one 8315e board
> out there.
>
> Cc: Kumar Gala <galak at kernel.crashing.org>
> Cc: Kim Phillips <kim.phillips at freescale.com>
> Signed-off-by: Anton Vorontsov <avorontsov at ru.mvista.com>
> ---
>
> arch/powerpc/platforms/83xx/mpc83xx.h |    2 ++
> arch/powerpc/platforms/83xx/usb.c     |   12 +++++++++---
> 2 files changed, 11 insertions(+), 3 deletions(-)
>
>
> diff --git a/arch/powerpc/platforms/83xx/mpc83xx.h b/arch/powerpc/ 
> platforms/83xx/mpc83xx.h
> index 68065e6..88a3b5c 100644
> --- a/arch/powerpc/platforms/83xx/mpc83xx.h
> +++ b/arch/powerpc/platforms/83xx/mpc83xx.h
> @@ -16,6 +16,7 @@
> #define MPC83XX_SCCR_USB_DRCM_10   0x00200000
> #define MPC8315_SCCR_USB_MASK      0x00c00000
> #define MPC8315_SCCR_USB_DRCM_11   0x00c00000
> +#define MPC8315_SCCR_USB_DRCM_01   0x00400000
> #define MPC837X_SCCR_USB_DRCM_11   0x00c00000
>
> /* system i/o configuration register low */
> @@ -37,6 +38,7 @@
> /* USB Control Register */
> #define FSL_USB2_CONTROL_OFFS      0x500
> #define CONTROL_UTMI_PHY_EN        0x00000200
> +#define CONTROL_REFSEL_24MHZ       0x00000040
> #define CONTROL_REFSEL_48MHZ       0x00000080
> #define CONTROL_PHY_CLK_SEL_ULPI   0x00000400
> #define CONTROL_OTG_PORT           0x00000020
> diff --git a/arch/powerpc/platforms/83xx/usb.c b/arch/powerpc/ 
> platforms/83xx/usb.c
> index 471fdd8..64bcf0a 100644
> --- a/arch/powerpc/platforms/83xx/usb.c
> +++ b/arch/powerpc/platforms/83xx/usb.c
> @@ -129,7 +129,7 @@ int mpc831x_usb_cfg(void)
> 	if (immr_node && of_device_is_compatible(immr_node, "fsl,mpc8315- 
> immr"))
> 		clrsetbits_be32(immap + MPC83XX_SCCR_OFFS,
> 		                MPC8315_SCCR_USB_MASK,
> -		                MPC8315_SCCR_USB_DRCM_11);
> +		                MPC8315_SCCR_USB_DRCM_01);
> 	else
> 		clrsetbits_be32(immap + MPC83XX_SCCR_OFFS,
> 		                MPC83XX_SCCR_USB_MASK,
> @@ -164,9 +164,15 @@ int mpc831x_usb_cfg(void)
> 	/* Using on-chip PHY */
> 	if (prop && (!strcmp(prop, "utmi_wide") ||
> 		     !strcmp(prop, "utmi"))) {
> -		/* Set UTMI_PHY_EN, REFSEL to 48MHZ */
> +		u32 refsel;
> +
> +		if (of_device_is_compatible(immr_node, "fsl,mpc8315-immr"))
> +			refsel = CONTROL_REFSEL_24MHZ;
> +		else
> +			refsel = CONTROL_REFSEL_48MHZ;
> +		/* Set UTMI_PHY_EN and REFSEL */
> 		out_be32(usb_regs + FSL_USB2_CONTROL_OFFS,
> -				CONTROL_UTMI_PHY_EN | CONTROL_REFSEL_48MHZ);
> +				CONTROL_UTMI_PHY_EN | refsel);
> 	/* Using external UPLI PHY */
> 	} else if (prop && !strcmp(prop, "ulpi")) {
> 		/* Set PHY_CLK_SEL to ULPI */




More information about the Linuxppc-dev mailing list