public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
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, &regs->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

  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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox