From: Marek Vasut <marek.vasut@gmail.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 1/2 v2] USB cleanup for EfikaMX
Date: Mon, 12 Sep 2011 21:25:30 +0200 [thread overview]
Message-ID: <201109122125.30224.marek.vasut@gmail.com> (raw)
In-Reply-To: <1315848040-11962-1-git-send-email-fermata7@gmail.com>
On Monday, September 12, 2011 07:20:40 PM Jana Rapava wrote:
> /board/efikamx/efikamx-usb.c: cleanup
>
> Signed-off-by: Jana Rapava <fermata7@gmail.com>
> ---
> board/efikamx/efikamx-usb.c | 111
> +++++++++++++++++++++++-------------------- include/usb/ehci-fsl.h |
> 49 +++++++++++++++++++
> 2 files changed, 108 insertions(+), 52 deletions(-)
Dear Jana Rapava,
1) PATCH 2/2 is missing.
2) This doesn't apply on mainline, continue as discussed on IRC -- ie. by
merging the patches.
>
> diff --git a/board/efikamx/efikamx-usb.c b/board/efikamx/efikamx-usb.c
> index 70d0daa..a94a64f 100644
> --- a/board/efikamx/efikamx-usb.c
> +++ b/board/efikamx/efikamx-usb.c
> @@ -161,57 +161,70 @@ void control_regs_setup(void)
> {
[...]
> + tmp = readl(OTG_BASE_ADDR + MX51_USB_CTRL_OFFSET);
> + tmp &= ~(MX51_OTG_WUE_BIT | MX51_OTG_PM_BIT | MX51_H1_ULPI_IE_BIT |
> MX51_H1_WUE_BIT); + tmp |= MX51_H1_PM_BIT;
I assume this is ULPI specific, not MX51 specific.
> + writel(tmp, OTG_BASE_ADDR + MX51_USB_CTRL_OFFSET);
Don't use offset-based access, but struct based access, please fix globally.
struct otg_regs {
uint32_t reg1;
uint32_t reg2;
...
};
then
struct otg_regs *regs = (struct otg_regs *)REG_ADDR;
writel(val, ®s->reg1);
[...]
>
> -#define ULPI_VIEWPORT(base) (base + 0x170)
> +
> +#define ULPI_VIEWPORT(base) (base + 0x170)
struct ehci probably already contains the correct offset of the ulpi viewport.
You just need to cast struct ehci to correct offset of the port.
> +
> +/* ULPI viewport control bits */
> +#define MX51_ULPI_WU_BIT (1 << 31)
> +#define MX51_ULPI_SS_BIT (1 << 27)
> +#define MX51_ULPI_RWRUN (1 << 30)
> +#define MX51_ULPI_RWCTRL (1 << 29)
See above.
> +
> +#define shift_to_ulpiaddr(reg) (reg << 16)
#define ULPI_something_ADDR_OFFSET 16 ?
> +#define ulpi_write_mask(value) (value & 0xff)
> +#define ulpi_read_mask(value) ((value >> 8) & 0xff)
Missing parenthesis around value.
> +
>
> void ulpi_write(u32 base, u32 reg, u32 value)
> {
> - if (!(readl(ULPI_VIEWPORT(base)) & (1 << 27))) {
> - writel(1 << 31, ULPI_VIEWPORT(base));
> - while (readl(ULPI_VIEWPORT(base)) & (1 << 31));
> + if (!(readl(ULPI_VIEWPORT(base)) & MX51_ULPI_SS_BIT)) {
See above.
> + writel(MX51_ULPI_WU_BIT, ULPI_VIEWPORT(base));
> + while (readl(ULPI_VIEWPORT(base)) & MX51_ULPI_WU_BIT);
Semicolon should be on the new line. Please fix globally.
> }
> - writel((1 << 30) | (1 << 29) | (reg << 16) | (value & 0xff),
> ULPI_VIEWPORT(base)); - while (readl(ULPI_VIEWPORT(base)) & (1 << 30));
> + writel(MX51_ULPI_RWRUN | MX51_ULPI_RWCTRL | shift_to_ulpiaddr(reg) |
> ulpi_write_mask(value), ULPI_VIEWPORT(base)); +
> + while (readl(ULPI_VIEWPORT(base)) & MX51_ULPI_RWRUN);
> }
>
> u32 ulpi_read(u32 base, u32 reg)
> {
> u32 tmp;
> - if (!(readl(ULPI_VIEWPORT(base)) & (1 << 27))) {
> - writel(1 << 31, ULPI_VIEWPORT(base));
> - while (readl(ULPI_VIEWPORT(base)) & (1 << 31));
> + if (!(readl(ULPI_VIEWPORT(base)) & MX51_ULPI_SS_BIT)) {
> + writel(MX51_ULPI_WU_BIT, ULPI_VIEWPORT(base));
> + while (readl(ULPI_VIEWPORT(base)) & MX51_ULPI_WU_BIT);
> }
> - writel((1 << 30) | (reg << 16), ULPI_VIEWPORT(base));
> + writel(MX51_ULPI_RWRUN | shift_to_ulpiaddr(reg), ULPI_VIEWPORT(base));
> do {
> tmp = readl(ULPI_VIEWPORT(base));
> - } while (tmp & (1 << 30));
> - return (tmp >> 8) & 0xff;
> + } while (tmp & MX51_ULPI_RWRUN);
> + return ulpi_read_mask(tmp);
> }
>
> #define ULPI_CTL_WRITE_OFF 0x00
> @@ -229,8 +242,9 @@ void ehciX_init(u32 base)
> int reg, i;
>
> /* ULPI INIT */
> - for (reg = 3; reg >=0; reg--)
> + for (reg = MX51_USB_HOST_COUNT-1; reg >= 0; reg--)
COUNT-1 missing spaces.
> tmp |= ulpi_read(base, reg) << (reg * 8);
> + /* split ID into first and second half */
debug() ?
What's "first" and "second" half, do you mean vendor and product ID ?
> printf("Found ULPI TX, ID %04x:%04x\n", tmp >> 16, tmp & 0xffff);
>
> /* ULPI check integrity */
> @@ -238,7 +252,6 @@ void ehciX_init(u32 base)
> ulpi_write(base, ULPI_SCRATCH, 0x55 << i);
> tmp = ulpi_read(base, ULPI_SCRATCH);
>
> - // check
> if (tmp != (0x55 << i)) {
> printf("ULPI integrity check failed\n");
> return;
> @@ -264,8 +277,7 @@ void ehciX_init(u32 base)
>
> void ehci0_init(void)
> {
> - /* Set PORTSC to 16b UTMI mode */
> - writel((1 << 28), OTG_BASE_ADDR + 0x184);
> + writel(MX51_16BIT_UTMI_BIT, OTG_BASE_ADDR + MX51_OTG_PORTSC1_OFFSET);
See above.
> }
>
> void ehci1_init(void)
> @@ -284,24 +296,21 @@ void ehci1_init(void)
> mxc_iomux_set_pad(MX51_PIN_USBH1_STP, USB_PAD_CONFIG);
> udelay(10000);
>
> - tmp = readl(OTG_BASE_ADDR + 0x340);
> - tmp &= ~(0xff << 16);
> - writel(tmp, OTG_BASE_ADDR + 0x340);
> + tmp = readl(OTG_BASE_ADDR + MX51_UH1_USBCMD_OFFSET);
> + tmp &= MX51_ITC_IMMEDIATE_MASK;
> + writel(tmp, OTG_BASE_ADDR + MX51_UH1_USBCMD_OFFSET);
Try clrsetbits_le32() and other calls from asm/io.h
>
> udelay(10000);
>
> - /* Set PORTSC to ULPI mode */
> - writel((2 << 30), OTG_BASE_ADDR + 0x384);
> + writel(MX51_ULPI_MODE_MASK, OTG_BASE_ADDR + MX51_UH1_PORTSC1_OFFSET);
> udelay(10000);
>
> - ehciX_init(OTG_BASE_ADDR + 0x200);
> + ehciX_init(OTG_BASE_ADDR + MX51_UH1_ID_OFFSET);
> }
>
>
> void ehci2_init(void)
> {
> - u32 tmp;
> -
> mxc_request_iomux(MX51_PIN_EIM_A26, IOMUX_CONFIG_ALT1);
> mxc_iomux_set_pad(MX51_PIN_EIM_A26, PAD_CTL_DRV_HIGH |
> PAD_CTL_PKE_ENABLE | PAD_CTL_SRE_FAST);
> @@ -313,11 +322,10 @@ void ehci2_init(void)
> mxc_request_iomux(MX51_PIN_EIM_A26, IOMUX_CONFIG_ALT2);
> mxc_iomux_set_pad(MX51_PIN_EIM_A26, USB_PAD_CONFIG);
>
> - /* Set PORTSC to ULPI mode */
> - writel((2 << 30), OTG_BASE_ADDR + 0x584);
> + writel(MX51_ULPI_MODE_MASK, OTG_BASE_ADDR + MX51_UH2_PORTSC1_OFFSET);
I think struct ehci defines this offset.
> udelay(10000);
>
> - ehciX_init(OTG_BASE_ADDR + 0x400);
> + ehciX_init(OTG_BASE_ADDR + MX51_UH2_ID_OFFSET);
> }
>
> int ehci_hcd_init(void)
> @@ -338,10 +346,9 @@ int ehci_hcd_init(void)
> /* EfikaMX USB has issues ... */
> udelay(10000);
>
> -
> /* Init EHCI core */
> ehci = (struct usb_ehci *)(OTG_BASE_ADDR +
> - (0x200 * CONFIG_MXC_USB_PORT));
> + (MX51_REGISTER_LAYOUT_LENGTH * CONFIG_MXC_USB_PORT));
> hccr = (struct ehci_hccr *)((uint32_t)&ehci->caplength);
> hcor = (struct ehci_hcor *)((uint32_t) hccr +
> HC_LENGTH(ehci_readl(&hccr->cr_capbase)));
> diff --git a/include/usb/ehci-fsl.h b/include/usb/ehci-fsl.h
> index 67600ed..5617275 100644
> --- a/include/usb/ehci-fsl.h
> +++ b/include/usb/ehci-fsl.h
> @@ -169,6 +169,55 @@
> #define CONFIG_SYS_FSL_USB_ADDR CONFIG_SYS_MPC512x_USB_ADDR
> #endif
>
> +#define MX51_USB_HOST_COUNT 4
> +#define MX51_REGISTER_LAYOUT_LENGTH 0x200
> +
> +/* Register offsets for MX51 */
> +#define MX51_UH1_ID_OFFSET 0x200
> +#define MX51_UH2_ID_OFFSET 0x400
> +
> +#define MX51_USB_CTRL_OFFSET 0x800
> +#define MX51_PHY_CTRL0_OFFSET 0x808
> +#define MX51_PHY_CTRL1_OFFSET 0x80c
> +#define MX51_USB_CTRL1_OFFSET 0x810
> +#define MX51_UH2_CTRL_OFFSET 0x814
MX5_, not MX51, I think this is valid for MX53 too.
> +
> +#define MX51_OTG_PORTSC1_OFFSET 0x184
> +#define MX51_UH1_PORTSC1_OFFSET 0x384
> +#define MX51_UH2_PORTSC1_OFFSET 0x584
> +
> +#define MX51_UH1_USBCMD_OFFSET 0x340
Use struct ehci where this is used with proper cast.
> +
> +/* USB_CTRL register bits of interest*/
> +#define MX51_OTG_WUE_BIT (1 << 27)
> +#define MX51_OTG_PM_BIT (1 << 24)
> +#define MX51_H1_ULPI_IE_BIT (1 << 12)
> +#define MX51_H1_WUE_BIT (1 << 11)
> +#define MX51_H1_PM_BIT (1 << 8)
> +
> +/* PHY_CTRL_0 register bits of interest */
> +#define MX51_OTG_OVERCURD_BIT (1 << 8)
> +#define MX51_EHCI_POWERPINSE_BIT (1 << 5)
> +
> +/* PHY_CTRL_1 register bits of interest */
> +#define MX51_SYSCLOCK_24_MHZ_BIT (1 << 0)
> +#define MX51_SYSCLOCK_MASK (0xffffffff << 0)
don't use << 0 here. Is this even needed?
> +
> +/* USB_CTRL_1 register bits of interest */
> +#define MX51_H1_EXTCLKE_BIT (1 << 25)
> +
> +/* USB Host 2 CTRL register bits of interest */
> +#define MX51_H2_ULPI_IE_BIT (1 << 8)
> +#define MX51_H2_WUE_BIT (1 << 7)
> +#define MX51_H2_PM_BIT (1 << 4)
> +
> +/* PORTSCx bits of interest */
> +#define MX51_ULPI_MODE_MASK (2 << 30)
> +#define MX51_16BIT_UTMI_BIT (1 << 28)
> +
> +/* USBCMD bits of interest */
> +#define MX51_ITC_IMMEDIATE_MASK (~(0xff << 16))
> +
> /*
> * USB Registers
> */
Cheers
next prev parent reply other threads:[~2011-09-12 19:25 UTC|newest]
Thread overview: 103+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-09-08 21:06 [U-Boot] some USB cleanup on EfikaMX Jana Rapava
2011-09-08 22:32 ` Wolfgang Denk
2011-09-09 10:18 ` Stefano Babic
2011-09-12 17:20 ` [U-Boot] [PATCH 1/2 v2] USB cleanup for EfikaMX Jana Rapava
2011-09-12 19:25 ` Marek Vasut [this message]
2011-09-18 2:19 ` [U-Boot] [PATCH v3] Add USB support for Efika Jana Rapava
2011-09-18 2:33 ` Marek Vasut
2011-09-19 8:43 ` Stefano Babic
2011-09-19 10:30 ` Marek Vasut
2011-09-24 15:57 ` Remy Bohmer
2011-09-24 19:07 ` Fabio Estevam
2011-09-24 19:19 ` Marek Vasut
2011-09-24 21:22 ` Fabio Estevam
2011-09-22 5:18 ` Marek Vasut
2011-09-25 11:55 ` [U-Boot] [PATCH v4 1/5] EHCI: add callback ehci_fixup Jana Rapava
2011-09-25 11:55 ` [U-Boot] [PATCH v4 2/5] Add USB support for Efika Jana Rapava
2011-09-25 11:55 ` [U-Boot] [PATCH v4 3/5] /drivers/usb/host/ehci-mxc.c: naming cleanup Jana Rapava
2011-09-25 11:55 ` [U-Boot] [PATCH v4 4/5] USB: Add usb_event_poll() to get keyboards working with EHCI Jana Rapava
2011-09-25 12:02 ` Marek Vasut
2011-09-25 11:55 ` [U-Boot] [PATCH v4 5/5] USB: move ehci.h and ehci-core.h into /include/usb/ Jana Rapava
2011-09-27 10:45 ` [U-Boot] [PATCH v5 1/4] usb: Move ehci.h and ehci-core.h to include/usb directory Jana Rapava
2011-09-27 10:57 ` Fabio Estevam
2011-09-27 11:01 ` [U-Boot] [PATCH v5 2/4] EHCI: add callback ehci_fixup Jana Rapava
2011-09-27 11:01 ` [U-Boot] [PATCH v5 3/4] EHCI: adjust for mx5 Jana Rapava
2011-09-27 11:01 ` [U-Boot] [PATCH v5 4/4] Add USB support for Efika Jana Rapava
2011-09-27 11:50 ` Marek Vasut
2011-09-27 14:12 ` Jana Rapava
2011-09-27 14:55 ` Marek Vasut
2011-09-27 18:17 ` Jana Rapava
2011-09-27 18:20 ` Marek Vasut
2011-09-28 10:26 ` Stefano Babic
2011-09-28 12:12 ` Jana Rapava
2011-09-27 11:23 ` [U-Boot] [PATCH v5 2/4] EHCI: add callback ehci_fixup Marek Vasut
2011-09-27 11:42 ` Jana Rapava
2011-09-27 19:24 ` [U-Boot] [PATCH v6 " Jana Rapava
2011-09-27 19:24 ` [U-Boot] [PATCH v6 3/4] EHCI: adjust for mx5 Jana Rapava
2011-09-27 19:41 ` Marek Vasut
2011-09-27 20:19 ` Jana Rapava
2011-09-27 20:47 ` Marek Vasut
2011-09-27 19:24 ` [U-Boot] [PATCH v6 4/4] Add USB support for Efika Jana Rapava
2011-09-27 19:47 ` Marek Vasut
2011-09-27 20:40 ` Jana Rapava
2011-09-27 20:50 ` Marek Vasut
2011-09-27 19:40 ` [U-Boot] [PATCH v6 2/4] EHCI: add callback ehci_fixup Marek Vasut
2011-09-27 22:21 ` [U-Boot] [PATCH v7 " Jana Rapava
2011-09-27 22:21 ` [U-Boot] [PATCH v7 3/4] EHCI: adjust for mx5 Jana Rapava
2011-09-27 22:21 ` [U-Boot] [PATCH v7 4/4] Add USB support for Efika Jana Rapava
2011-09-28 0:43 ` Marek Vasut
2011-09-28 12:25 ` Jana Rapava
2011-09-28 12:28 ` Marek Vasut
2011-09-28 0:46 ` [U-Boot] [PATCH v7 2/4] EHCI: add callback ehci_fixup Marek Vasut
2011-09-28 10:54 ` Marek Vasut
2011-09-28 11:52 ` Jana Rapava
2011-09-28 12:13 ` Marek Vasut
2011-09-28 15:02 ` [U-Boot] [PATCH v8 " Jana Rapava
2011-09-28 15:05 ` [U-Boot] [PATCH v8 3/4] EHCI: adjust for mx5 Jana Rapava
2011-09-28 15:07 ` [U-Boot] [PATCH v8 4/4] Add USB support for Efika Jana Rapava
2011-09-28 15:20 ` Marek Vasut
2011-09-28 18:12 ` Jana Rapava
2011-09-28 18:26 ` Marek Vasut
2011-10-06 21:18 ` Wolfgang Denk
2011-10-07 17:16 ` Jana Rapava
2011-09-28 15:21 ` [U-Boot] [PATCH v8 2/4] EHCI: add callback ehci_fixup Marek Vasut
2011-09-27 11:07 ` [U-Boot] [PATCH v5 1/4] usb: Move ehci.h and ehci-core.h to include/usb directory Fabio Estevam
2011-09-27 11:09 ` Fabio Estevam
2011-09-27 11:27 ` Jana Rapava
2011-09-27 18:44 ` [U-Boot] [PATCH v6 " Jana Rapava
2011-09-27 22:06 ` [U-Boot] [PATCH v7 " Jana Rapava
2011-09-28 14:59 ` [U-Boot] [PATCH v8 " Jana Rapava
2011-09-28 19:49 ` [U-Boot] [PATCH v9 " Jana Rapava
2011-09-28 20:36 ` Marek Vasut
2011-09-28 21:10 ` Jana Rapava
2011-09-28 21:43 ` Marek Vasut
2011-09-28 23:04 ` Jana Rapava
2011-09-28 23:05 ` Marek Vasut
2011-09-28 23:22 ` Jana Rapava
2011-09-28 19:51 ` [U-Boot] [PATCH v9 2/4] EHCI: add callback ehci_fixup Jana Rapava
2011-09-28 19:52 ` [U-Boot] [PATCH v9 3/4] EHCI: adjust for mx5 Jana Rapava
2011-09-28 19:54 ` [U-Boot] [PATCH v9 4/4] Add USB support for Efika Jana Rapava
2011-09-28 20:44 ` Marek Vasut
2011-09-28 20:36 ` [U-Boot] [PATCH v9 2/4] EHCI: add callback ehci_fixup Marek Vasut
2011-09-28 21:14 ` Jana Rapava
2011-09-28 21:26 ` Marek Vasut
2011-09-25 12:02 ` [U-Boot] [PATCH v4 1/5] " Marek Vasut
2011-09-25 17:25 ` [U-Boot] [PATCH v4 1/4] USB: move ehci.h and ehci-core.h into /include/usb/ Jana Rapava
2011-09-25 17:25 ` [U-Boot] [PATCH v4 2/4] EHCI: add callback ehci_fixup Jana Rapava
2011-09-25 17:41 ` Marek Vasut
2011-09-25 17:25 ` [U-Boot] [PATCH v4 3/4] EHCI: adjust for mx5 Jana Rapava
2011-09-25 17:38 ` Marek Vasut
2011-09-25 17:25 ` [U-Boot] [PATCH v4 4/4] Add USB support for Efika Jana Rapava
2011-09-25 17:34 ` Marek Vasut
2011-09-26 20:28 ` Jana Rapava
2011-09-26 20:42 ` Marek Vasut
2011-09-26 20:51 ` Marek Vasut
2011-09-27 11:00 ` Jana Rapava
2011-09-25 19:01 ` [U-Boot] [PATCH v4 1/4] USB: move ehci.h and ehci-core.h into /include/usb/ Fabio Estevam
2011-09-26 8:32 ` Jana Rapava
2011-10-09 18:42 ` Marek Vasut
2011-10-09 20:22 ` Jana Rapava
2011-10-14 15:49 ` Fabio Estevam
2011-10-14 16:07 ` Marek Vasut
2011-10-14 15:50 ` Marek Vasut
2011-10-06 21:33 ` [U-Boot] [PATCH 1/2 v2] USB cleanup for EfikaMX Wolfgang Denk
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=201109122125.30224.marek.vasut@gmail.com \
--to=marek.vasut@gmail.com \
--cc=u-boot@lists.denx.de \
/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.