> -----Original Message----- > From: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] On Behalf Of Kumar > Gala > Sent: Thursday, July 20, 2006 4:09 AM > To: Li Yang-r58472 > Cc: [EMAIL PROTECTED]; linux-usb-devel@lists.sourceforge.net > Subject: Re: [PATCH] Add USB to MPC8349 PB platform support > > > On Jul 14, 2006, at 6:52 AM, Li Yang wrote: > > > This adds USB platform support to MPC8349 PB. It works with the > > fsl_usb2_udc driver. > > > > Signed-off-by: Li Yang <[EMAIL PROTECTED]> > > --- > > > > arch/powerpc/platforms/83xx/Kconfig | 4 ++ > > arch/powerpc/platforms/83xx/mpc834x_sys.c | 72 +++++++++++++++++++ > > ++++++++++ > > arch/powerpc/platforms/83xx/mpc834x_sys.h | 24 ++++++++++ > > 3 files changed, 113 insertions(+), 0 deletions(-) > > > > diff --git a/arch/powerpc/platforms/83xx/Kconfig b/arch/powerpc/ > > platforms/83xx/Kconfig > > index 7675e67..8404cdf 100644 > > --- a/arch/powerpc/platforms/83xx/Kconfig > > +++ b/arch/powerpc/platforms/83xx/Kconfig > > @@ -24,4 +31,14 @@ config MPC834x > > select PPC_INDIRECT_PCI > > default y if MPC834x_SYS > > > > +config 834x_USB_SUPPORT > > + bool > > + default y if MPC834x_SYS && (USB || USB_GADGET) > > + > > endmenu > > I dont think we need this, we should be able to use the USB, and 834x > CONFIG options in the code. > > > diff --git a/arch/powerpc/platforms/83xx/mpc834x_sys.c b/arch/ > > powerpc/platforms/83xx/mpc834x_sys.c > > index 7e789d2..f10d4ae 100644 > > --- a/arch/powerpc/platforms/83xx/mpc834x_sys.c > > +++ b/arch/powerpc/platforms/83xx/mpc834x_sys.c > > @@ -36,6 +36,7 @@ #include <asm/irq.h> > > #include <asm/prom.h> > > #include <asm/udbg.h> > > #include <sysdev/fsl_soc.h> > > +#include <linux/fsl_devices.h> > > #include "mpc83xx.h" > > @@ -71,6 +72,72 @@ mpc83xx_map_irq(struct pci_dev *dev, uns > > } > > #endif /* CONFIG_PCI */ > > +#ifdef CONFIG_834x_USB_SUPPORT > > Just make it dependent on CONFIG_USB_EHCI_HCD or something like that.
Will need to check EHCI_HCD/GADGET and their _MODULE variations though. Not very neat I think. Anyway, it's your call. > > > +void mpc834x_usb_board_cfg(void) > > +{ > > + unsigned char __iomem *bcsr; > > + volatile unsigned char *bcsr5_p; > > + > > + /* > > + * if SYS board is plug into PIB board, > > + * force to use the PHY on SYS board > > + * */ > > + bcsr = ioremap(BCSR_PHYS_ADDR, BCSR_SIZE); > > + bcsr5_p = bcsr + BCSR5_OFF; > > + if ( (*bcsr5_p & BCSR5_INT_USB) == 0 ) > > + *bcsr5_p = (*bcsr5_p | BCSR5_INT_USB); > > + iounmap(bcsr); > > +} > > + > > +/* Note: This is only for PB, not for PB+PIB > > + * On PB only port0 is connected using ULPI */ > > +static int mpc834x_usb_cfg(void) > > +{ > > + unsigned long sccr, sicrl; > > + volatile unsigned long *p; > > + unsigned long __iomem *immap; > > + struct device_node *np = NULL; > > + int port0_is_dr = 0; > > + > > + if ((np = of_find_compatible_node(np, "usb", "fsl-usb2-dr")) != > > NULL) > > + port0_is_dr = 1; > > + if ((np = of_find_compatible_node(np, "usb", "fsl-usb2-mph")) != > > NULL){ > > + if (port0_is_dr) { > > + printk(KERN_WARNING > > + "There is only one USB port on PB board! \n"); > > + return -1; > > + } else if (!port0_is_dr) > > + /* No usb port enabled */ > > + return -1; > > + } > > + > > + immap = ioremap(get_immrbase(), 0x100000); > > + > > + /* Configure clock */ > > + p = (volatile unsigned long *)((u32)immap + MPC83XX_SCCR_OFFS); > > + sccr = *p; > > + if (port0_is_dr) > > + sccr |= MPC83XX_SCCR_USB_DRCM_11; /* 1:3 */ > > + else > > + sccr |= MPC83XX_SCCR_USB_MPHCM_11; /* 1:3 */ > > + *p = sccr; > > This really needs to take into account the platform frequency. I > guess technically, at 1:3 we will always be below the max 133Mhz. Generally, I assume the user is using a core frequency around the recommended frequency in spec. In some special cases, they do need to use a lower core frequency. But, I think it's too special to be addressed here. Anyway it's easy to change for users. > > > + > > + /* Configure Pin */ > > + p = (volatile unsigned long *)((u32)immap + MPC83XX_SICRL_OFFS); > > + sicrl = *p; > > + /* set port0 only */ > > + if (port0_is_dr) + sicrl |= MPC83XX_SICRL_USB0; > > + else + sicrl &= ~(MPC83XX_SICRL_USB0); > > + *p = sicrl; > > + > > Why dont we just do all this in fsl_usb_of_init It's easier to do in fsl_usb_of_init. But do you think it's ok to put 834x specific code there? > > > + iounmap(immap); > > + return 0; > > +} > > + > > +#endif /* CONFIG_834x_USB_SUPPORT */ > > + > > /* > > ********************************************************************** > > ** > > * > > * Setup the architecture > > @@ -102,6 +169,11 @@ #ifdef CONFIG_PCI > > ppc_md.pci_exclude_device = mpc83xx_exclude_device; > > #endif > > +#ifdef CONFIG_834x_USB_SUPPORT > > + mpc834x_usb_cfg(); > > + mpc834x_usb_board_cfg(); > > +#endif > > + > > #ifdef CONFIG_ROOT_NFS > > ROOT_DEV = Root_NFS; > > #else > > diff --git a/arch/powerpc/platforms/83xx/mpc834x_sys.h b/arch/ > > powerpc/platforms/83xx/mpc834x_sys.h > > index fedecb7..30e45e8 100644 > > --- a/arch/powerpc/platforms/83xx/mpc834x_sys.h > > +++ b/arch/powerpc/platforms/83xx/mpc834x_sys.h > > @@ -20,4 +20,28 @@ #define PIRQB MPC83xx_IRQ_EXT5 > > #define PIRQC MPC83xx_IRQ_EXT6 > > #define PIRQD MPC83xx_IRQ_EXT7 > > +#define BCSR_PHYS_ADDR ((uint)0xf8000000) > > +#define BCSR_SIZE ((uint)(32 * 1024)) > > + +#define BCSR5_OFF 0x05 > > +#define BCSR5_INT_USB 0x02 > > + > > +#define MPC83XX_SCCR_OFFS 0xA08 > > +#define MPC83XX_SCCR_USB_MPHCM_11 0x00c00000 > > +#define MPC83XX_SCCR_USB_MPHCM_01 0x00400000 > > +#define MPC83XX_SCCR_USB_MPHCM_10 0x00800000 > > +#define MPC83XX_SCCR_USB_DRCM_11 0x00300000 > > +#define MPC83XX_SCCR_USB_DRCM_01 0x00100000 > > +#define MPC83XX_SCCR_USB_DRCM_10 0x00200000 > > + > > +/* system i/o configuration register low */ > > +#define MPC83XX_SICRL_OFFS 0x114 > > +#define MPC83XX_SICRL_USB0 0x40000000 > > +#define MPC83XX_SICRL_USB1 0x20000000 > > + > > +/* system i/o configuration register high */ > > +#define MPC83XX_SICRH_OFFS 0x118 > > +#define MPC83XX_SICRH_USB_UTMI 0x00020000 > > Are these really generic to all MPC83XX? We should move these to > include something like asm-ppc/mpc83xx.h No, probably need to change the naming to MPC834x_*. The offsets are generic, but the USB bits are not. If there is an asm/mpc834x.h, it will be better there. > > > + > > + > > #endif /* __MACH_MPC83XX_SYS_H__ */ > > - kumar > _______________________________________________ > Linuxppc-dev mailing list > [EMAIL PROTECTED] > https://ozlabs.org/mailman/listinfo/linuxppc-dev ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys -- and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ linux-usb-devel@lists.sourceforge.net To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel