> -----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

Reply via email to