[U-Boot] [PATCH v2 05/11] x86: quark: Add USB PHY initialization support

Simon Glass sjg at chromium.org
Wed Sep 2 16:05:24 CEST 2015


Hi Bin,

On 2 September 2015 at 03:17, Bin Meng <bmeng.cn at gmail.com> wrote:
> USB PHY needs to be properly initialized per Quark firmware writer
> guide, otherwise the EHCI controller on Quark SoC won't work.
>
> Signed-off-by: Bin Meng <bmeng.cn at gmail.com>
>
> ---
>
> Changes in v2:
> - New patch to add USB PHY initialization support
>
>  arch/x86/cpu/quark/quark.c              | 41 +++++++++++++++++++++++++++++++++
>  arch/x86/include/asm/arch-quark/quark.h |  8 +++++++
>  2 files changed, 49 insertions(+)

Acked-by: Simon Glass <sjg at chromium.org>

But please see below.

>
> diff --git a/arch/x86/cpu/quark/quark.c b/arch/x86/cpu/quark/quark.c
> index dda3c7c..637c370 100644
> --- a/arch/x86/cpu/quark/quark.c
> +++ b/arch/x86/cpu/quark/quark.c
> @@ -125,6 +125,44 @@ static void quark_pcie_early_init(void)
>         msg_port_io_write(MSG_PORT_PCIE_AFE, PCIE_RXPICTRL0_L1, pcie_cfg);
>  }
>
> +static void quark_usb_early_init(void)
> +{
> +       u32 usb;
> +
> +       /* The sequence below comes from Quark firmware writer guide */
> +
> +       usb = msg_port_alt_read(MSG_PORT_USB_AFE, USB2_GLOBAL_PORT);
> +       usb &= ~(1 << 1);
> +       usb |= ((1 << 6) | (1 << 7));
> +       msg_port_alt_write(MSG_PORT_USB_AFE, USB2_GLOBAL_PORT, usb);

How about adding new a function so you can do something like:

msg_port_alt_clrsetbits(MSG_PORT_USB_AFE, USB2_GLOBAL_PORT, 1 << 1, (1
<< 6) | (1 << 7))

We did this with pmic also. It seems like you have enough code doing
this read/write dance that it would be worthwhile, perhaps as a
follow-on patch.

Also these shifts should have enums/#defines.

> +
> +       usb = msg_port_alt_read(MSG_PORT_USB_AFE, USB2_COMPBG);
> +       usb &= ~((1 << 8) | (1 << 9));
> +       usb |= ((1 << 7) | (1 << 10));
> +       msg_port_alt_write(MSG_PORT_USB_AFE, USB2_COMPBG, usb);
> +
> +       usb = msg_port_alt_read(MSG_PORT_USB_AFE, USB2_PLL2);
> +       usb |= (1 << 29);
> +       msg_port_alt_write(MSG_PORT_USB_AFE, USB2_PLL2, usb);
> +
> +       usb = msg_port_alt_read(MSG_PORT_USB_AFE, USB2_PLL1);
> +       usb |= (1 << 1);
> +       msg_port_alt_write(MSG_PORT_USB_AFE, USB2_PLL1, usb);
> +
> +       usb = msg_port_alt_read(MSG_PORT_USB_AFE, USB2_PLL1);
> +       usb &= ~((1 << 3) | (1 << 4) | (1 << 5));
> +       usb |= (1 << 6);
> +       msg_port_alt_write(MSG_PORT_USB_AFE, USB2_PLL1, usb);
> +
> +       usb = msg_port_alt_read(MSG_PORT_USB_AFE, USB2_PLL2);
> +       usb &= ~(1 << 29);
> +       msg_port_alt_write(MSG_PORT_USB_AFE, USB2_PLL2, usb);
> +
> +       usb = msg_port_alt_read(MSG_PORT_USB_AFE, USB2_PLL2);
> +       usb |= (1 << 24);
> +       msg_port_alt_write(MSG_PORT_USB_AFE, USB2_PLL2, usb);
> +}
> +
>  static void quark_enable_legacy_seg(void)
>  {
>         u32 hmisc2;
> @@ -164,6 +202,9 @@ int arch_cpu_init(void)
>          */
>         quark_pcie_early_init();
>
> +       /* Initialize USB2 PHY */
> +       quark_usb_early_init();
> +
>         /* Turn on legacy segments (A/B/E/F) decode to system RAM */
>         quark_enable_legacy_seg();
>
> diff --git a/arch/x86/include/asm/arch-quark/quark.h b/arch/x86/include/asm/arch-quark/quark.h
> index aad7fbe..5d81976 100644
> --- a/arch/x86/include/asm/arch-quark/quark.h
> +++ b/arch/x86/include/asm/arch-quark/quark.h
> @@ -12,6 +12,7 @@
>  #define MSG_PORT_HOST_BRIDGE   0x03
>  #define MSG_PORT_RMU           0x04
>  #define MSG_PORT_MEM_MGR       0x05
> +#define MSG_PORT_USB_AFE       0x14
>  #define MSG_PORT_PCIE_AFE      0x16
>  #define MSG_PORT_SOC_UNIT      0x31
>
> @@ -49,6 +50,13 @@
>  #define ESRAM_BLK_CTRL         0x82
>  #define ESRAM_BLOCK_MODE       0x10000000
>
> +/* Port 0x14: USB2 AFE Unit Port Registers */
> +
> +#define USB2_GLOBAL_PORT       0x4001
> +#define USB2_PLL1              0x7f02
> +#define USB2_PLL2              0x7f03
> +#define USB2_COMPBG            0x7f04
> +
>  /* Port 0x16: PCIe AFE Unit Port Registers */
>
>  #define PCIE_RXPICTRL0_L0      0x2080
> --
> 1.8.2.1
>
Regards,
Simon


More information about the U-Boot mailing list