From: s.hauer@pengutronix.de (Sascha Hauer)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCHv4 2.6.34-rc4 5/7] mxc: Add generic USB HWinitialization for MX51
Date: Mon, 19 Apr 2010 17:58:28 +0200 [thread overview]
Message-ID: <20100419155828.GE7882@pengutronix.de> (raw)
In-Reply-To: <86A0E76937111F4C92FABEC0A20988510473395C@az33exm21>
On Mon, Apr 19, 2010 at 08:40:29AM -0700, Nguyen Dinh-R00091 wrote:
>
>
> -----Original Message-----
> From: Sascha Hauer [mailto:s.hauer at pengutronix.de]
> Sent: Saturday, April 17, 2010 9:07 PM
> To: Nguyen Dinh-R00091
> Cc: linux-kernel at vger.kernel.org; linux-arm-kernel at lists.infradead.org;
> linux at arm.linux.org.uk; valentin.longchamp at epfl.ch; daniel at caiaq.de;
> grant.likely at secretlab.ca; bryan.wu at canonical.com;
> amit.kucheria at canonical.com; Herring Robert-RA7055; Li Jun-R65092; Zhang
> Lily-R58066
> Subject: Re: [PATCHv4 2.6.34-rc4 5/7] mxc: Add generic USB
> HWinitialization for MX51
>
> On Fri, Apr 16, 2010 at 02:16:09PM -0500, Dinh.Nguyen at freescale.com
> wrote:
> > From: Dinh Nguyen <Dinh.Nguyen@freescale.com>
> >
> > This patch adds USB HW initializiation code to /plat-mxc/ehci.c.
> > -Stops and resets USB HW
> > -Sets some specific PHY settings
> > -Stop and restart the USB HW.
> > Renames mxc_set_usbcontrol to mxc_initialize_usb_hw.
> >
> > This patch applies to 2.6.34-rc4.
> >
> > Signed-off-by: Dinh Nguyen <Dinh.Nguyen@freescale.com>
> > ---
> > arch/arm/plat-mxc/ehci.c | 128
> ++++++++++++++++++++++++++++-
> > arch/arm/plat-mxc/include/mach/mxc_ehci.h | 2 +-
> > 2 files changed, 127 insertions(+), 3 deletions(-)
> >
> > diff --git a/arch/arm/plat-mxc/ehci.c b/arch/arm/plat-mxc/ehci.c index
>
> > cb0b638..35ff1c1 100644
> > --- a/arch/arm/plat-mxc/ehci.c
> > +++ b/arch/arm/plat-mxc/ehci.c
> > @@ -1,5 +1,6 @@
> > /*
> > * Copyright (c) 2009 Daniel Mack <daniel@caiaq.de>
> > + * Copyright (C) 2010 Freescale Semiconductor, Inc.
> > *
> > * This program is free software; you can redistribute it and/or
> modify it
> > * under the terms of the GNU General Public License as published by
> > the @@ -18,6 +19,7 @@
> >
> > #include <linux/platform_device.h>
> > #include <linux/io.h>
> > +#include <linux/delay.h>
> >
> > #include <mach/hardware.h>
> > #include <mach/mxc_ehci.h>
> > @@ -50,9 +52,14 @@
> > #define MX35_H1_TLL_BIT (1 << 5)
> > #define MX35_H1_USBTE_BIT (1 << 4)
> >
> > -int mxc_set_usbcontrol(int port, unsigned int flags)
> > +int mxc_intialize_usb_hw(int port, unsigned int flags)
> > {
> > unsigned int v;
> > + void __iomem *usb_base;
> > + u32 usbotg_base;
> > + u32 usbother_base;
> > + int timeout;
> > + int ret = 0;
> > #ifdef CONFIG_ARCH_MX3
> > if (cpu_is_mx31()) {
> > v = readl(MX31_IO_ADDRESS(MX31_OTG_BASE_ADDR + @@ -186,9
> +193,126
> > @@ int mxc_set_usbcontrol(int port, unsigned int flags)
> > return 0;
> > }
> > #endif /* CONFIG_MACH_MX27 */
> > +#ifdef CONFIG_ARCH_MX51
> > + if (cpu_is_mx51()) {
> > + usb_base = ioremap(MX51_OTG_BASE_ADDR, SZ_4K);
> > +
> > + switch (port) {
> > + case 0: /* OTG port */
> > + usbotg_base = (u32)usb_base + USBOTG_OFFSET;
> > + break;
> > + case 1: /* Host 1 port */
> > + usbotg_base = (u32)usb_base + USBH1_OFFSET;
> > + break;
> > + default:
> > + printk(KERN_ERR"%s no such port %d\n", __func__,
> port);
> > + ret = -ENOENT;
> > + goto error;
> > + }
> > + usbother_base = (u32)usb_base + USBOTHER_REGS_OFFSET;
> > +
> > + /* Stop then Reset */
> > + v = __raw_readl(usbotg_base + USBCMD_OFFSET);
> > + v &= ~UCMD_RUN_STOP;
> > + __raw_writel(v, usbotg_base + USBCMD_OFFSET);
> > + timeout = 0x100000;
> > + while (--timeout && __raw_readl(usbotg_base +
> USBCMD_OFFSET) & UCMD_RUN_STOP)
> > + cpu_relax();
> > + if (!timeout) {
> > + printk(KERN_ERR "%s could not stop usb
> hardware\n", __func__);
> > + ret = -ETIMEDOUT;
> > + goto error;
> > + }
> > +
> > + v = __raw_readl(usbotg_base + USBCMD_OFFSET);
> > + v |= UCMD_RESET;
> > + __raw_writel(v, usbotg_base + USBCMD_OFFSET);
> > + timeout = 0x100000;
> > + while (--timeout && __raw_readl(usbotg_base +
> USBCMD_OFFSET) & UCMD_RESET)
> > + cpu_relax();
> > + if (!timeout) {
> > + printk(KERN_ERR "%s could not reset usb
> hardware\n", __func__);
> > + ret = -ETIMEDOUT;
> > + goto error;
> > + }
> > +
> > + switch (port) {
> > + case 0: /*OTG port */
> > + v = __raw_readl(usbother_base +
> USB_PHY_CTR_FUNC_OFFSET);
> > + v |= USB_UTMI_PHYCTRL_OC_DIS; /* OC is not used
> */
> > + __raw_writel(v, usbother_base +
> USB_PHY_CTR_FUNC_OFFSET);
> > +
> > + v = __raw_readl(usbother_base + USBCTRL_OFFSET);
> > + v &= ~(UCTRL_OPM | UCTRL_OWIE);/* OTG
> wakeup/power mask disable */
> > + __raw_writel(v, usbother_base + USBCTRL_OFFSET);
> > +
> > + /* Set the PHY clock to 19.2MHz */
> > + v = __raw_readl(usbother_base +
> USB_PHY_CTR_FUNC2_OFFSET);
> > + v &= ~USB_UTMI_PHYCTRL2_PLLDIV_MASK;
> > + v |= 0x01;
> > + __raw_writel(v, usbother_base +
> USB_PHY_CTR_FUNC2_OFFSET);
> > + break;
>
> The sense of this funtion is to make the interface configuration,
> especially the receiver type configurable with the flags parameter to
> this function. This all looks very specific to your board, flags is
> completely unused.
>
> [Dinh] I think you're right Sascha, I think I can move this to the board
> initialization. Do you agree Daniel?
No, and Daniel won't agree either. What I meant is that you should add
support for the different transceiver types in this function. Take
i.MX27/31/35 as an example how to do this: Parse the flag parameter and
do whatever you have to.
Sascha
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
WARNING: multiple messages have this Message-ID (diff)
From: Sascha Hauer <s.hauer@pengutronix.de>
To: Nguyen Dinh-R00091 <R00091@freescale.com>
Cc: linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org, linux@arm.linux.org.uk,
valentin.longchamp@epfl.ch, daniel@caiaq.de,
grant.likely@secretlab.ca, bryan.wu@canonical.com,
amit.kucheria@canonical.com,
Herring Robert-RA7055 <RA7055@freescale.com>,
Li Jun-R65092 <R65092@freescale.com>,
Zhang Lily-R58066 <R58066@freescale.com>
Subject: Re: [PATCHv4 2.6.34-rc4 5/7] mxc: Add generic USB HWinitialization for MX51
Date: Mon, 19 Apr 2010 17:58:28 +0200 [thread overview]
Message-ID: <20100419155828.GE7882@pengutronix.de> (raw)
In-Reply-To: <86A0E76937111F4C92FABEC0A20988510473395C@az33exm21>
On Mon, Apr 19, 2010 at 08:40:29AM -0700, Nguyen Dinh-R00091 wrote:
>
>
> -----Original Message-----
> From: Sascha Hauer [mailto:s.hauer@pengutronix.de]
> Sent: Saturday, April 17, 2010 9:07 PM
> To: Nguyen Dinh-R00091
> Cc: linux-kernel@vger.kernel.org; linux-arm-kernel@lists.infradead.org;
> linux@arm.linux.org.uk; valentin.longchamp@epfl.ch; daniel@caiaq.de;
> grant.likely@secretlab.ca; bryan.wu@canonical.com;
> amit.kucheria@canonical.com; Herring Robert-RA7055; Li Jun-R65092; Zhang
> Lily-R58066
> Subject: Re: [PATCHv4 2.6.34-rc4 5/7] mxc: Add generic USB
> HWinitialization for MX51
>
> On Fri, Apr 16, 2010 at 02:16:09PM -0500, Dinh.Nguyen@freescale.com
> wrote:
> > From: Dinh Nguyen <Dinh.Nguyen@freescale.com>
> >
> > This patch adds USB HW initializiation code to /plat-mxc/ehci.c.
> > -Stops and resets USB HW
> > -Sets some specific PHY settings
> > -Stop and restart the USB HW.
> > Renames mxc_set_usbcontrol to mxc_initialize_usb_hw.
> >
> > This patch applies to 2.6.34-rc4.
> >
> > Signed-off-by: Dinh Nguyen <Dinh.Nguyen@freescale.com>
> > ---
> > arch/arm/plat-mxc/ehci.c | 128
> ++++++++++++++++++++++++++++-
> > arch/arm/plat-mxc/include/mach/mxc_ehci.h | 2 +-
> > 2 files changed, 127 insertions(+), 3 deletions(-)
> >
> > diff --git a/arch/arm/plat-mxc/ehci.c b/arch/arm/plat-mxc/ehci.c index
>
> > cb0b638..35ff1c1 100644
> > --- a/arch/arm/plat-mxc/ehci.c
> > +++ b/arch/arm/plat-mxc/ehci.c
> > @@ -1,5 +1,6 @@
> > /*
> > * Copyright (c) 2009 Daniel Mack <daniel@caiaq.de>
> > + * Copyright (C) 2010 Freescale Semiconductor, Inc.
> > *
> > * This program is free software; you can redistribute it and/or
> modify it
> > * under the terms of the GNU General Public License as published by
> > the @@ -18,6 +19,7 @@
> >
> > #include <linux/platform_device.h>
> > #include <linux/io.h>
> > +#include <linux/delay.h>
> >
> > #include <mach/hardware.h>
> > #include <mach/mxc_ehci.h>
> > @@ -50,9 +52,14 @@
> > #define MX35_H1_TLL_BIT (1 << 5)
> > #define MX35_H1_USBTE_BIT (1 << 4)
> >
> > -int mxc_set_usbcontrol(int port, unsigned int flags)
> > +int mxc_intialize_usb_hw(int port, unsigned int flags)
> > {
> > unsigned int v;
> > + void __iomem *usb_base;
> > + u32 usbotg_base;
> > + u32 usbother_base;
> > + int timeout;
> > + int ret = 0;
> > #ifdef CONFIG_ARCH_MX3
> > if (cpu_is_mx31()) {
> > v = readl(MX31_IO_ADDRESS(MX31_OTG_BASE_ADDR + @@ -186,9
> +193,126
> > @@ int mxc_set_usbcontrol(int port, unsigned int flags)
> > return 0;
> > }
> > #endif /* CONFIG_MACH_MX27 */
> > +#ifdef CONFIG_ARCH_MX51
> > + if (cpu_is_mx51()) {
> > + usb_base = ioremap(MX51_OTG_BASE_ADDR, SZ_4K);
> > +
> > + switch (port) {
> > + case 0: /* OTG port */
> > + usbotg_base = (u32)usb_base + USBOTG_OFFSET;
> > + break;
> > + case 1: /* Host 1 port */
> > + usbotg_base = (u32)usb_base + USBH1_OFFSET;
> > + break;
> > + default:
> > + printk(KERN_ERR"%s no such port %d\n", __func__,
> port);
> > + ret = -ENOENT;
> > + goto error;
> > + }
> > + usbother_base = (u32)usb_base + USBOTHER_REGS_OFFSET;
> > +
> > + /* Stop then Reset */
> > + v = __raw_readl(usbotg_base + USBCMD_OFFSET);
> > + v &= ~UCMD_RUN_STOP;
> > + __raw_writel(v, usbotg_base + USBCMD_OFFSET);
> > + timeout = 0x100000;
> > + while (--timeout && __raw_readl(usbotg_base +
> USBCMD_OFFSET) & UCMD_RUN_STOP)
> > + cpu_relax();
> > + if (!timeout) {
> > + printk(KERN_ERR "%s could not stop usb
> hardware\n", __func__);
> > + ret = -ETIMEDOUT;
> > + goto error;
> > + }
> > +
> > + v = __raw_readl(usbotg_base + USBCMD_OFFSET);
> > + v |= UCMD_RESET;
> > + __raw_writel(v, usbotg_base + USBCMD_OFFSET);
> > + timeout = 0x100000;
> > + while (--timeout && __raw_readl(usbotg_base +
> USBCMD_OFFSET) & UCMD_RESET)
> > + cpu_relax();
> > + if (!timeout) {
> > + printk(KERN_ERR "%s could not reset usb
> hardware\n", __func__);
> > + ret = -ETIMEDOUT;
> > + goto error;
> > + }
> > +
> > + switch (port) {
> > + case 0: /*OTG port */
> > + v = __raw_readl(usbother_base +
> USB_PHY_CTR_FUNC_OFFSET);
> > + v |= USB_UTMI_PHYCTRL_OC_DIS; /* OC is not used
> */
> > + __raw_writel(v, usbother_base +
> USB_PHY_CTR_FUNC_OFFSET);
> > +
> > + v = __raw_readl(usbother_base + USBCTRL_OFFSET);
> > + v &= ~(UCTRL_OPM | UCTRL_OWIE);/* OTG
> wakeup/power mask disable */
> > + __raw_writel(v, usbother_base + USBCTRL_OFFSET);
> > +
> > + /* Set the PHY clock to 19.2MHz */
> > + v = __raw_readl(usbother_base +
> USB_PHY_CTR_FUNC2_OFFSET);
> > + v &= ~USB_UTMI_PHYCTRL2_PLLDIV_MASK;
> > + v |= 0x01;
> > + __raw_writel(v, usbother_base +
> USB_PHY_CTR_FUNC2_OFFSET);
> > + break;
>
> The sense of this funtion is to make the interface configuration,
> especially the receiver type configurable with the flags parameter to
> this function. This all looks very specific to your board, flags is
> completely unused.
>
> [Dinh] I think you're right Sascha, I think I can move this to the board
> initialization. Do you agree Daniel?
No, and Daniel won't agree either. What I meant is that you should add
support for the different transceiver types in this function. Take
i.MX27/31/35 as an example how to do this: Parse the flag parameter and
do whatever you have to.
Sascha
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
next prev parent reply other threads:[~2010-04-19 15:58 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-04-16 19:16 [PATCHv4 2.6.34-rc4 1/7] mxc: Update GPIO for USB support on Freescale MX51 Babbage HW Dinh.Nguyen at freescale.com
2010-04-16 19:16 ` Dinh.Nguyen
2010-04-16 19:16 ` [PATCHv4 2.6.34-rc4 2/7] mx5: Add USB device definitions for " Dinh.Nguyen at freescale.com
2010-04-16 19:16 ` Dinh.Nguyen
2010-04-16 19:16 ` [PATCHv4 2.6.34-rc4 3/7] mxc: Add new defines for USB HW register bits on Freescale SoCs Dinh.Nguyen at freescale.com
2010-04-16 19:16 ` Dinh.Nguyen
2010-04-16 19:16 ` [PATCHv4 2.6.34-rc4 4/7] mx5: Enable board specific functions for enabling USB host on Babbage Dinh.Nguyen at freescale.com
2010-04-16 19:16 ` Dinh.Nguyen
2010-04-16 19:16 ` [PATCHv4 2.6.34-rc4 5/7] mxc: Add generic USB HW initialization for MX51 Dinh.Nguyen at freescale.com
2010-04-16 19:16 ` Dinh.Nguyen
2010-04-16 19:16 ` [PATCHv4 2.6.34-rc4 6/7] mxc-usb: Add call to initialize MXC USB HW registers Dinh.Nguyen at freescale.com
2010-04-16 19:16 ` Dinh.Nguyen
2010-04-16 19:16 ` [PATCHv4 2.6.34-rc4 7/7] mx5: Add USB to Freescale MX51 defconfig Dinh.Nguyen at freescale.com
2010-04-16 19:16 ` Dinh.Nguyen
2010-04-17 17:07 ` [PATCHv4 2.6.34-rc4 5/7] mxc: Add generic USB HW initialization for MX51 Daniel Mack
2010-04-17 17:07 ` Daniel Mack
2010-04-19 1:03 ` Amit Kucheria
2010-04-19 1:03 ` Amit Kucheria
2010-04-19 7:38 ` Daniel Mack
2010-04-19 7:38 ` Daniel Mack
2010-04-18 2:07 ` Sascha Hauer
2010-04-18 2:07 ` Sascha Hauer
2010-04-19 15:40 ` [PATCHv4 2.6.34-rc4 5/7] mxc: Add generic USB HWinitialization " Nguyen Dinh-R00091
2010-04-19 15:40 ` Nguyen Dinh-R00091
2010-04-19 15:58 ` Sascha Hauer [this message]
2010-04-19 15:58 ` Sascha Hauer
2010-04-19 16:59 ` Daniel Mack
2010-04-19 16:59 ` Daniel Mack
2010-04-19 17:04 ` Daniel Mack
2010-04-19 17:04 ` Daniel Mack
2010-04-19 0:32 ` [PATCHv4 2.6.34-rc4 2/7] mx5: Add USB device definitions for Freescale MX51 Babbage HW Amit Kucheria
2010-04-19 0:32 ` Amit Kucheria
2010-04-19 14:48 ` Nguyen Dinh-R00091
2010-04-19 14:48 ` Nguyen Dinh-R00091
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20100419155828.GE7882@pengutronix.de \
--to=s.hauer@pengutronix.de \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.