[U-Boot] [PATCH v2 05/14] mx51: Fix USB PHY clocks
Igor Grinberg
grinberg at compulab.co.il
Fri Sep 28 09:26:38 CEST 2012
Hi Benoît,
please, see a minor #ifdef comment below
On 09/27/12 22:21, Benoît Thébaudeau wrote:
> The i.MX51 has a single USB PHY clock, while the i.MX53 has two. These 3 clocks
> have different clock gate control bit-fields.
>
> The existing code was correct only for i.MX53, so this patch fixes the i.MX51
> use case.
>
> Signed-off-by: Benoît Thébaudeau <benoit.thebaudeau at advansee.com>
> Cc: Stefano Babic <sbabic at denx.de>
> Cc: Marek Vasut <marex at denx.de>
> Cc: Jana Rapava <fermata7 at gmail.com>
> Cc: Wolfgang Grandegger <wg at denx.de>
> Cc: Igor Grinberg <grinberg at compulab.co.il>
> ---
> This patch supersedes http://patchwork.ozlabs.org/patch/177403/ .
> Changes for v2:
> - Split patch into 3 parts (the 3, 4 and 5 from this v2 series).
> - Merge the various set_usb_phy*_clk() functions (they were identical).
>
> .../arch/arm/cpu/armv7/mx5/clock.c | 20 +++++++++++++-------
> .../arch/arm/include/asm/arch-mx5/clock.h | 7 ++++++-
> .../drivers/usb/host/ehci-mx5.c | 6 +++++-
> 3 files changed, 24 insertions(+), 9 deletions(-)
>
> diff --git u-boot-imx-e1eb75b.orig/arch/arm/cpu/armv7/mx5/clock.c u-boot-imx-e1eb75b/arch/arm/cpu/armv7/mx5/clock.c
> index df7e5cd..f727cfa 100644
> --- u-boot-imx-e1eb75b.orig/arch/arm/cpu/armv7/mx5/clock.c
> +++ u-boot-imx-e1eb75b/arch/arm/cpu/armv7/mx5/clock.c
> @@ -126,11 +126,21 @@ int enable_i2c_clk(unsigned char enable, unsigned i2c_num)
> }
> #endif
>
> -void set_usb_phy1_clk(void)
> +void set_usb_phy_clk(void)
> {
> clrbits_le32(&mxc_ccm->cscmr1, MXC_CCM_CSCMR1_USB_PHY_CLK_SEL);
> }
>
> +#if defined(CONFIG_MX51)
> +void enable_usb_phy_clk(unsigned char enable)
I think the same name as the MX53 case will do better, see explanation below.
> +{
> + unsigned int cg = enable ? MXC_CCM_CCGR_CG_ON : MXC_CCM_CCGR_CG_OFF;
> +
> + clrsetbits_le32(&mxc_ccm->CCGR2,
> + MXC_CCM_CCGR2_USB_PHY(MXC_CCM_CCGR_CG_MASK),
> + MXC_CCM_CCGR2_USB_PHY(cg));
> +}
I would add here (again explanation below):
void enable_usb_phy2_clk(unsigned char enable)
{
/* MX51 has a single USB PHY clock, so do nothing here */
}
> +#elif defined(CONFIG_MX53)
> void enable_usb_phy1_clk(unsigned char enable)
> {
> unsigned int cg = enable ? MXC_CCM_CCGR_CG_ON : MXC_CCM_CCGR_CG_OFF;
> @@ -140,11 +150,6 @@ void enable_usb_phy1_clk(unsigned char enable)
> MXC_CCM_CCGR4_USB_PHY1(cg));
> }
>
> -void set_usb_phy2_clk(void)
> -{
> - clrbits_le32(&mxc_ccm->cscmr1, MXC_CCM_CSCMR1_USB_PHY_CLK_SEL);
> -}
> -
> void enable_usb_phy2_clk(unsigned char enable)
> {
> unsigned int cg = enable ? MXC_CCM_CCGR_CG_ON : MXC_CCM_CCGR_CG_OFF;
> @@ -153,6 +158,7 @@ void enable_usb_phy2_clk(unsigned char enable)
> MXC_CCM_CCGR4_USB_PHY2(MXC_CCM_CCGR_CG_MASK),
> MXC_CCM_CCGR4_USB_PHY2(cg));
> }
> +#endif
>
> /*
> * Calculate the frequency of PLLn.
> @@ -803,7 +809,7 @@ void mxc_set_sata_internal_clock(void)
> u32 *tmp_base =
> (u32 *)(IIM_BASE_ADDR + 0x180c);
>
> - set_usb_phy1_clk();
> + set_usb_phy_clk();
>
> clrsetbits_le32(tmp_base, 0x6, 0x4);
> }
> diff --git u-boot-imx-e1eb75b.orig/arch/arm/include/asm/arch-mx5/clock.h u-boot-imx-e1eb75b/arch/arm/include/asm/arch-mx5/clock.h
> index 55e3b51..e4ca417 100644
> --- u-boot-imx-e1eb75b.orig/arch/arm/include/asm/arch-mx5/clock.h
> +++ u-boot-imx-e1eb75b/arch/arm/include/asm/arch-mx5/clock.h
> @@ -56,8 +56,13 @@ u32 imx_get_uartclk(void);
> u32 imx_get_fecclk(void);
> unsigned int mxc_get_clock(enum mxc_clock clk);
> int mxc_set_clock(u32 ref, u32 freq, u32 clk_type);
> -void set_usb_phy2_clk(void);
> +void set_usb_phy_clk(void);
> +#if defined(CONFIG_MX51)
> +void enable_usb_phy_clk(unsigned char enable);
> +#elif defined(CONFIG_MX53)
> +void enable_usb_phy1_clk(unsigned char enable);
> void enable_usb_phy2_clk(unsigned char enable);
> +#endif
If you follow my suggestion above, then here you will only have:
-void set_usb_phy2_clk(void);
+void set_usb_phy_clk(void);
+void enable_usb_phy1_clk(unsigned char enable);
and no complicating with #ifdefs needed.
> void set_usboh3_clk(void);
> void enable_usboh3_clk(unsigned char enable);
> void mxc_set_sata_internal_clock(void);
> diff --git u-boot-imx-e1eb75b.orig/drivers/usb/host/ehci-mx5.c u-boot-imx-e1eb75b/drivers/usb/host/ehci-mx5.c
> index 58cdcbe..5bf89f0 100644
> --- u-boot-imx-e1eb75b.orig/drivers/usb/host/ehci-mx5.c
> +++ u-boot-imx-e1eb75b/drivers/usb/host/ehci-mx5.c
> @@ -221,8 +221,12 @@ int ehci_hcd_init(void)
>
> set_usboh3_clk();
> enable_usboh3_clk(1);
> - set_usb_phy2_clk();
> + set_usb_phy_clk();
> +#if defined(CONFIG_MX51) && CONFIG_MXC_USB_PORT == 0
> + enable_usb_phy_clk(1);
> +#elif defined(CONFIG_MX53)
> enable_usb_phy2_clk(1);
> +#endif
same here, it should be much cleaner.
> mdelay(1);
>
> /* Do board specific initialization */
>
--
Regards,
Igor.
More information about the U-Boot
mailing list