* [PATCH 82/94] USB: ehci-fsl: Fix 'have_sysif_regs' detection [not found] <1325263910-14057-1-git-send-email-Jason.jin@freescale.com> @ 2011-12-30 16:51 ` Jason Jin 2011-12-31 6:43 ` Jason Jin 0 siblings, 1 reply; 2+ messages in thread From: Jason Jin @ 2011-12-30 16:51 UTC (permalink / raw) To: tiejun.chen, kexin.hao, Bo.Liu Cc: b14898, David Brownell, Pan Jiafei, Anatolij Gustschin, linuxppc-dev, b37022 From: Pan Jiafei <Jiafei.Pan@freescale.com> extract from vendor drop QorIQ-DPAA-SDK-20111026-systembuilder.iso Previously a check was done on an ID register at the base of a CPU's internal USB registers to determine if system interface regsiters were present. The check looked for an ID register that had the format ID[0:5] == ~ID[8:13] as described in the MPC5121 User's Manual to determine if a MPC5121 or MPC83xx/85xx was being used. There are two issues with this method: - The ID register is not defined on the MPC83xx/85xx CPUs, so its unclear what is being checked on them. - Newer CPUs such as the P4080 also don't document the ID register, but do share the same format as the MPC5121. Thus the previous code did not set 'have_sysif_regs' properly which results in the P4080 not properly initializing its USB ports. Using the device tree 'compatible' node is a cleaner way to determine if 'have_sysif_regs' should be set and resolves the USB initialization issue seen on the P4080. Tested on a P4080-based system and compile tested on mpc512x_defconfig with Freescale EHCI driver enabled. Cc: Anatolij Gustschin <agust@denx.de> Cc: David Brownell <dbrownell@users.sourceforge.net> Cc: Kumar Gala <galak@kernel.crashing.org> Cc: linuxppc-dev@lists.ozlabs.org Signed-off-by: Peter Tyser <ptyser@xes-inc.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> Integrated-by: Pan Jiafei <Jiafei.Pan@freescale.com> --- drivers/usb/host/ehci-fsl.c | 13 ------------- drivers/usb/host/ehci-fsl.h | 3 --- drivers/usb/host/fsl-mph-dr-of.c | 11 ++++++++--- 3 files changed, 8 insertions(+), 19 deletions(-) diff --git a/drivers/usb/host/ehci-fsl.c b/drivers/usb/host/ehci-fsl.c index ac5f38d..22baaec 100644 --- a/drivers/usb/host/ehci-fsl.c +++ b/drivers/usb/host/ehci-fsl.c @@ -52,7 +52,6 @@ static int usb_hcd_fsl_probe(const struct hc_driver *driver, struct resource *res; int irq; int retval; - unsigned int temp; pr_debug("initializing FSL-SOC USB Controller\n"); @@ -126,18 +125,6 @@ static int usb_hcd_fsl_probe(const struct hc_driver *driver, goto err3; } - /* - * Check if it is MPC5121 SoC, otherwise set pdata->have_sysif_regs - * flag for 83xx or 8536 system interface registers. - */ - if (pdata->big_endian_mmio) - temp = in_be32(hcd->regs + FSL_SOC_USB_ID); - else - temp = in_le32(hcd->regs + FSL_SOC_USB_ID); - - if ((temp & ID_MSK) != (~((temp & NID_MSK) >> 8) & ID_MSK)) - pdata->have_sysif_regs = 1; - /* Enable USB controller, 83xx or 8536 */ if (pdata->have_sysif_regs) setbits32(hcd->regs + FSL_SOC_USB_CTRL, 0x4); diff --git a/drivers/usb/host/ehci-fsl.h b/drivers/usb/host/ehci-fsl.h index 2c83537..3fabed3 100644 --- a/drivers/usb/host/ehci-fsl.h +++ b/drivers/usb/host/ehci-fsl.h @@ -19,9 +19,6 @@ #define _EHCI_FSL_H /* offsets for the non-ehci registers in the FSL SOC USB controller */ -#define FSL_SOC_USB_ID 0x0 -#define ID_MSK 0x3f -#define NID_MSK 0x3f00 #define FSL_SOC_USB_ULPIVP 0x170 #define FSL_SOC_USB_PORTSC1 0x184 #define PORT_PTS_MSK (3<<30) diff --git a/drivers/usb/host/fsl-mph-dr-of.c b/drivers/usb/host/fsl-mph-dr-of.c index 574b99e..79a66d6 100644 --- a/drivers/usb/host/fsl-mph-dr-of.c +++ b/drivers/usb/host/fsl-mph-dr-of.c @@ -262,19 +262,24 @@ static void fsl_usb2_mpc5121_exit(struct platform_device *pdev) } } -struct fsl_usb2_platform_data fsl_usb2_mpc5121_pd = { +static struct fsl_usb2_platform_data fsl_usb2_mpc5121_pd = { .big_endian_desc = 1, .big_endian_mmio = 1, .es = 1, + .have_sysif_regs = 0, .le_setup_buf = 1, .init = fsl_usb2_mpc5121_init, .exit = fsl_usb2_mpc5121_exit, }; #endif /* CONFIG_PPC_MPC512x */ +static struct fsl_usb2_platform_data fsl_usb2_mpc8xxx_pd = { + .have_sysif_regs = 1, +}; + static const struct of_device_id fsl_usb2_mph_dr_of_match[] = { - { .compatible = "fsl-usb2-mph", }, - { .compatible = "fsl-usb2-dr", }, + { .compatible = "fsl-usb2-mph", .data = &fsl_usb2_mpc8xxx_pd, }, + { .compatible = "fsl-usb2-dr", .data = &fsl_usb2_mpc8xxx_pd, }, #ifdef CONFIG_PPC_MPC512x { .compatible = "fsl,mpc5121-usb2-dr", .data = &fsl_usb2_mpc5121_pd, }, #endif -- 1.7.5.1 ^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH 82/94] USB: ehci-fsl: Fix 'have_sysif_regs' detection 2011-12-30 16:51 ` [PATCH 82/94] USB: ehci-fsl: Fix 'have_sysif_regs' detection Jason Jin @ 2011-12-31 6:43 ` Jason Jin 0 siblings, 0 replies; 2+ messages in thread From: Jason Jin @ 2011-12-31 6:43 UTC (permalink / raw) To: linuxppc-dev [-- Attachment #1: Type: text/plain, Size: 4997 bytes --] Please ignore this mail, It's wrongly sent out. Thanks. On Sat, Dec 31, 2011 at 12:51 AM, Jason Jin <Jason.jin@freescale.com> wrote: > From: Pan Jiafei <Jiafei.Pan@freescale.com> > > extract from vendor drop QorIQ-DPAA-SDK-20111026-systembuilder.iso > > Previously a check was done on an ID register at the base of a CPU's > internal USB registers to determine if system interface regsiters were > present. The check looked for an ID register that had the format > ID[0:5] == ~ID[8:13] as described in the MPC5121 User's Manual to > determine if a MPC5121 or MPC83xx/85xx was being used. > > There are two issues with this method: > - The ID register is not defined on the MPC83xx/85xx CPUs, so its > unclear what is being checked on them. > - Newer CPUs such as the P4080 also don't document the ID register, but > do share the same format as the MPC5121. Thus the previous code did > not set 'have_sysif_regs' properly which results in the P4080 not > properly initializing its USB ports. > > Using the device tree 'compatible' node is a cleaner way to determine if > 'have_sysif_regs' should be set and resolves the USB initialization issue > seen on the P4080. > > Tested on a P4080-based system and compile tested on mpc512x_defconfig > with Freescale EHCI driver enabled. > > Cc: Anatolij Gustschin <agust@denx.de> > Cc: David Brownell <dbrownell@users.sourceforge.net> > Cc: Kumar Gala <galak@kernel.crashing.org> > Cc: linuxppc-dev@lists.ozlabs.org > Signed-off-by: Peter Tyser <ptyser@xes-inc.com> > Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> > Integrated-by: Pan Jiafei <Jiafei.Pan@freescale.com> > --- > drivers/usb/host/ehci-fsl.c | 13 ------------- > drivers/usb/host/ehci-fsl.h | 3 --- > drivers/usb/host/fsl-mph-dr-of.c | 11 ++++++++--- > 3 files changed, 8 insertions(+), 19 deletions(-) > > diff --git a/drivers/usb/host/ehci-fsl.c b/drivers/usb/host/ehci-fsl.c > index ac5f38d..22baaec 100644 > --- a/drivers/usb/host/ehci-fsl.c > +++ b/drivers/usb/host/ehci-fsl.c > @@ -52,7 +52,6 @@ static int usb_hcd_fsl_probe(const struct hc_driver > *driver, > struct resource *res; > int irq; > int retval; > - unsigned int temp; > > pr_debug("initializing FSL-SOC USB Controller\n"); > > @@ -126,18 +125,6 @@ static int usb_hcd_fsl_probe(const struct hc_driver > *driver, > goto err3; > } > > - /* > - * Check if it is MPC5121 SoC, otherwise set pdata->have_sysif_regs > - * flag for 83xx or 8536 system interface registers. > - */ > - if (pdata->big_endian_mmio) > - temp = in_be32(hcd->regs + FSL_SOC_USB_ID); > - else > - temp = in_le32(hcd->regs + FSL_SOC_USB_ID); > - > - if ((temp & ID_MSK) != (~((temp & NID_MSK) >> 8) & ID_MSK)) > - pdata->have_sysif_regs = 1; > - > /* Enable USB controller, 83xx or 8536 */ > if (pdata->have_sysif_regs) > setbits32(hcd->regs + FSL_SOC_USB_CTRL, 0x4); > diff --git a/drivers/usb/host/ehci-fsl.h b/drivers/usb/host/ehci-fsl.h > index 2c83537..3fabed3 100644 > --- a/drivers/usb/host/ehci-fsl.h > +++ b/drivers/usb/host/ehci-fsl.h > @@ -19,9 +19,6 @@ > #define _EHCI_FSL_H > > /* offsets for the non-ehci registers in the FSL SOC USB controller */ > -#define FSL_SOC_USB_ID 0x0 > -#define ID_MSK 0x3f > -#define NID_MSK 0x3f00 > #define FSL_SOC_USB_ULPIVP 0x170 > #define FSL_SOC_USB_PORTSC1 0x184 > #define PORT_PTS_MSK (3<<30) > diff --git a/drivers/usb/host/fsl-mph-dr-of.c > b/drivers/usb/host/fsl-mph-dr-of.c > index 574b99e..79a66d6 100644 > --- a/drivers/usb/host/fsl-mph-dr-of.c > +++ b/drivers/usb/host/fsl-mph-dr-of.c > @@ -262,19 +262,24 @@ static void fsl_usb2_mpc5121_exit(struct > platform_device *pdev) > } > } > > -struct fsl_usb2_platform_data fsl_usb2_mpc5121_pd = { > +static struct fsl_usb2_platform_data fsl_usb2_mpc5121_pd = { > .big_endian_desc = 1, > .big_endian_mmio = 1, > .es = 1, > + .have_sysif_regs = 0, > .le_setup_buf = 1, > .init = fsl_usb2_mpc5121_init, > .exit = fsl_usb2_mpc5121_exit, > }; > #endif /* CONFIG_PPC_MPC512x */ > > +static struct fsl_usb2_platform_data fsl_usb2_mpc8xxx_pd = { > + .have_sysif_regs = 1, > +}; > + > static const struct of_device_id fsl_usb2_mph_dr_of_match[] = { > - { .compatible = "fsl-usb2-mph", }, > - { .compatible = "fsl-usb2-dr", }, > + { .compatible = "fsl-usb2-mph", .data = &fsl_usb2_mpc8xxx_pd, }, > + { .compatible = "fsl-usb2-dr", .data = &fsl_usb2_mpc8xxx_pd, }, > #ifdef CONFIG_PPC_MPC512x > { .compatible = "fsl,mpc5121-usb2-dr", .data = > &fsl_usb2_mpc5121_pd, }, > #endif > -- > 1.7.5.1 > > > _______________________________________________ > Linuxppc-dev mailing list > Linuxppc-dev@lists.ozlabs.org > https://lists.ozlabs.org/listinfo/linuxppc-dev > -- Best Regards, Zhengxiong Jin [-- Attachment #2: Type: text/html, Size: 6374 bytes --] ^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2011-12-31 6:43 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <1325263910-14057-1-git-send-email-Jason.jin@freescale.com>
2011-12-30 16:51 ` [PATCH 82/94] USB: ehci-fsl: Fix 'have_sysif_regs' detection Jason Jin
2011-12-31 6:43 ` Jason Jin
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox