[U-Boot] [PATCH v3 1/3] EHCI: Exynos: Add fdt support

From: Rajeshwari Shinde rajeshwari.s@samsung.com
Adding fdt support to ehci-exynos in order to parse register base addresses from the device node.
Signed-off-by: Vivek Gautam gautam.vivek@samsung.com Signed-off-by: Rajeshwari Shinde rajeshwari.s@samsung.com ---
Changes in v3: - Using macros for error no. - Using a common function exynos_usb_parse_dt() to parse all DT related data. - Using a global structure "exynos_ehci" to store register base addresses and thereby using it.
Chnages in v2: - Removed checkpatch errors.
drivers/usb/host/ehci-exynos.c | 92 +++++++++++++++++++++++++++++++++++++--- 1 files changed, 85 insertions(+), 7 deletions(-)
diff --git a/drivers/usb/host/ehci-exynos.c b/drivers/usb/host/ehci-exynos.c index 9f0ed06..3ca4c5c 100644 --- a/drivers/usb/host/ehci-exynos.c +++ b/drivers/usb/host/ehci-exynos.c @@ -21,13 +21,71 @@ */
#include <common.h> +#include <fdtdec.h> +#include <libfdt.h> +#include <malloc.h> #include <usb.h> #include <asm/arch/cpu.h> #include <asm/arch/ehci.h> #include <asm/arch/system.h> #include <asm/arch/power.h> +#include <asm-generic/errno.h> +#include <linux/compat.h> #include "ehci.h"
+/* Declare global data pointer */ +DECLARE_GLOBAL_DATA_PTR; + +/** + * Contains pointers to register base addresses + * for the usb controller. + */ +struct exynos_ehci { + struct exynos_usb_phy *usb; + unsigned int *hcd; +}; + +static int exynos_usb_parse_dt(const void *blob, struct exynos_ehci *exynos) +{ + unsigned int node; + int depth; + + node = fdtdec_next_compatible(blob, 0, COMPAT_SAMSUNG_EXYNOS_EHCI); + if (node <= 0) { + debug("EHCI: Can't get device node for ehci\n"); + return -ENODEV; + } + + /* + * Get the base address for EHCI controller from the device node + */ + exynos->hcd = (unsigned int *)fdtdec_get_addr(blob, node, "reg"); + if (exynos->hcd == NULL) { + debug("Can't get the EHCI register address\n"); + return -ENXIO; + } + + depth = 0; + node = fdtdec_next_compatible_subnode(blob, node, + COMPAT_SAMSUNG_EXYNOS_USB_PHY, &depth); + if (node <= 0) { + debug("EHCI: Can't get device node for usb-phy controller\n"); + return -ENODEV; + } + + /* + * Get the base address for usbphy from the device node + */ + exynos->usb = (struct exynos_usb_phy *)fdtdec_get_addr(blob, node, + "reg"); + if (exynos->usb == NULL) { + debug("Can't get the usbphy register address\n"); + return -ENXIO; + } + + return 0; +} + /* Setup the EHCI host controller. */ static void setup_usb_phy(struct exynos_usb_phy *usb) { @@ -86,12 +144,20 @@ static void reset_usb_phy(struct exynos_usb_phy *usb) */ int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor) { - struct exynos_usb_phy *usb; + struct exynos_ehci *exynos = NULL; + + exynos = (struct exynos_ehci *) + kzalloc(sizeof(struct exynos_ehci), GFP_KERNEL); + if (!exynos) { + debug("failed to allocate exynos ehci context\n"); + return -ENOMEM; + }
- usb = (struct exynos_usb_phy *)samsung_get_base_usb_phy(); - setup_usb_phy(usb); + exynos_usb_parse_dt(gd->fdt_blob, exynos);
- *hccr = (struct ehci_hccr *)samsung_get_base_usb_ehci(); + setup_usb_phy(exynos->usb); + + *hccr = (struct ehci_hccr *)(exynos->hcd); *hcor = (struct ehci_hcor *)((uint32_t) *hccr + HC_LENGTH(ehci_readl(&(*hccr)->cr_capbase)));
@@ -99,6 +165,8 @@ int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor) (uint32_t)*hccr, (uint32_t)*hcor, (uint32_t)HC_LENGTH(ehci_readl(&(*hccr)->cr_capbase)));
+ kfree(exynos); + return 0; }
@@ -108,10 +176,20 @@ int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor) */ int ehci_hcd_stop(int index) { - struct exynos_usb_phy *usb; + struct exynos_ehci *exynos = NULL; + + exynos = (struct exynos_ehci *) + kzalloc(sizeof(struct exynos_ehci), GFP_KERNEL); + if (!exynos) { + debug("failed to allocate exynos ehci context\n"); + return -ENOMEM; + } + + exynos_usb_parse_dt(gd->fdt_blob, exynos); + + reset_usb_phy(exynos->usb);
- usb = (struct exynos_usb_phy *)samsung_get_base_usb_phy(); - reset_usb_phy(usb); + kfree(exynos);
return 0; }

From: Rajeshwari Shinde rajeshwari.s@samsung.com
This patch adds the device node required for USB
Signed-off-by: Vivek Gautam gautam.vivek@samsung.com ---
Changes in v3: - Using a sub-node under ehci node for phy which provides "compatible" and "reg" information.
Changes in v2: - None.
arch/arm/dts/exynos5250.dtsi | 13 +++++++++++++ 1 files changed, 13 insertions(+), 0 deletions(-)
diff --git a/arch/arm/dts/exynos5250.dtsi b/arch/arm/dts/exynos5250.dtsi index fa4d498..9179fc9 100644 --- a/arch/arm/dts/exynos5250.dtsi +++ b/arch/arm/dts/exynos5250.dtsi @@ -28,4 +28,17 @@ #address-cells = <1>; #size-cells = <0>; }; + + ehci@12110000 { + compatible = "samsung,exynos-ehci"; + reg = <0x12110000 0x100>; + #address-cells = <1>; + #size-cells = <1>; + + phy { + compatible = "samsung,exynos-usb-phy"; + reg = <0x12130000 0x100>; + }; + }; + };

Dear Vivek Gautam,
From: Rajeshwari Shinde rajeshwari.s@samsung.com
This patch adds the device node required for USB
Signed-off-by: Vivek Gautam gautam.vivek@samsung.com
Please rebase on u-boot-usb/next.
Best regards, Marek Vasut

Hi Marek,
On Tue, Jan 8, 2013 at 12:36 PM, Marek Vasut marex@denx.de wrote:
Dear Vivek Gautam,
From: Rajeshwari Shinde rajeshwari.s@samsung.com
This patch adds the device node required for USB
Signed-off-by: Vivek Gautam gautam.vivek@samsung.com
Please rebase on u-boot-usb/next.
"exynos5250.dtsi" seems to be missing in u-boot-usb tree. :-( I can't find the exynos5250 side basic device tree support which is already been applied on u-boot-samsung-mainline.
Set of five patches from Hatim Ali mentioned below, needs to be pulled for exysno5250 side device tree support. - EXYNOS5: FDT: add initial dts file for EXYNOS5250, SMDK5250 - fdt: exynos5: Add DT node definition for SROM and SMSC9215 - exynos5: Add DT based driver for SMC911X ethernet - exynos5: config: Rename the smdk5250.h to exynos5250-dt.h - SMDK5250: config: Add configuration file for SMDK5250 board
Please suggest.

Dear Vivek Gautam,
Hi Marek,
On Tue, Jan 8, 2013 at 12:36 PM, Marek Vasut marex@denx.de wrote:
Dear Vivek Gautam,
From: Rajeshwari Shinde rajeshwari.s@samsung.com
This patch adds the device node required for USB
Signed-off-by: Vivek Gautam gautam.vivek@samsung.com
Please rebase on u-boot-usb/next.
"exynos5250.dtsi" seems to be missing in u-boot-usb tree. :-( I can't find the exynos5250 side basic device tree support which is already been applied on u-boot-samsung-mainline.
Ok, let's change how to do this then. Apply all four on u-boot-samsung/next.
Set of five patches from Hatim Ali mentioned below, needs to be pulled for exysno5250 side device tree support.
- EXYNOS5: FDT: add initial dts file for EXYNOS5250, SMDK5250
- fdt: exynos5: Add DT node definition for SROM and SMSC9215
- exynos5: Add DT based driver for SMC911X ethernet
- exynos5: config: Rename the smdk5250.h to exynos5250-dt.h
- SMDK5250: config: Add configuration file for SMDK5250 board
Please suggest.
Best regards, Marek Vasut

On Tue, Jan 8, 2013 at 2:20 PM, Marek Vasut marex@denx.de wrote:
Dear Vivek Gautam,
Hi Marek,
On Tue, Jan 8, 2013 at 12:36 PM, Marek Vasut marex@denx.de wrote:
Dear Vivek Gautam,
From: Rajeshwari Shinde rajeshwari.s@samsung.com
This patch adds the device node required for USB
Signed-off-by: Vivek Gautam gautam.vivek@samsung.com
Please rebase on u-boot-usb/next.
"exynos5250.dtsi" seems to be missing in u-boot-usb tree. :-( I can't find the exynos5250 side basic device tree support which is already been applied on u-boot-samsung-mainline.
Ok, let's change how to do this then. Apply all four on u-boot-samsung/next.
Ok, sure. I shall post all 4 patches including 3 for ehci fdt support and 1 patch for usb vbus rebased on top of u-boot-samsung/master.

Dear Vivek Gautam,
On Tue, Jan 8, 2013 at 2:20 PM, Marek Vasut marex@denx.de wrote:
Dear Vivek Gautam,
Hi Marek,
On Tue, Jan 8, 2013 at 12:36 PM, Marek Vasut marex@denx.de wrote:
Dear Vivek Gautam,
From: Rajeshwari Shinde rajeshwari.s@samsung.com
This patch adds the device node required for USB
Signed-off-by: Vivek Gautam gautam.vivek@samsung.com
Please rebase on u-boot-usb/next.
"exynos5250.dtsi" seems to be missing in u-boot-usb tree. :-( I can't find the exynos5250 side basic device tree support which is already been applied on u-boot-samsung-mainline.
Ok, let's change how to do this then. Apply all four on u-boot-samsung/next.
Ok, sure. I shall post all 4 patches including 3 for ehci fdt support and 1 patch for usb vbus rebased on top of u-boot-samsung/master.
I think the -samsung custodian shall just pick your series as is.
Best regards, Marek Vasut

Hello,
On 08/01/13 18:14, Marek Vasut wrote:
Dear Vivek Gautam,
On Tue, Jan 8, 2013 at 2:20 PM, Marek Vasut marex@denx.de wrote:
Dear Vivek Gautam,
Hi Marek,
On Tue, Jan 8, 2013 at 12:36 PM, Marek Vasut marex@denx.de wrote:
Dear Vivek Gautam,
From: Rajeshwari Shinde rajeshwari.s@samsung.com
This patch adds the device node required for USB
Signed-off-by: Vivek Gautam gautam.vivek@samsung.com
Please rebase on u-boot-usb/next.
"exynos5250.dtsi" seems to be missing in u-boot-usb tree. :-( I can't find the exynos5250 side basic device tree support which is already been applied on u-boot-samsung-mainline.
Ok, let's change how to do this then. Apply all four on u-boot-samsung/next.
Ok, sure. I shall post all 4 patches including 3 for ehci fdt support and 1 patch for usb vbus rebased on top of u-boot-samsung/master.
I think the -samsung custodian shall just pick your series as is.
Then, I will pick up following patches.
[U-Boot,v3,1/3] EHCI: Exynos: Add fdt support [U-Boot,v3,2/3] EXYNOS5: Add device node for USB. [U-Boot,v3,3/3] EXYNOS5: FDT: Add compatible strings for USB [U-Boot,v2] SMDK5250: Enable VBus for USB 2.0 controller (V2! not V3)
Is it right?
Thanks, Minkyu Kang.

Dear Minkyu Kang,
Hello,
On 08/01/13 18:14, Marek Vasut wrote:
Dear Vivek Gautam,
On Tue, Jan 8, 2013 at 2:20 PM, Marek Vasut marex@denx.de wrote:
Dear Vivek Gautam,
Hi Marek,
On Tue, Jan 8, 2013 at 12:36 PM, Marek Vasut marex@denx.de wrote:
Dear Vivek Gautam,
> From: Rajeshwari Shinde rajeshwari.s@samsung.com > > This patch adds the device node required for USB > > Signed-off-by: Vivek Gautam gautam.vivek@samsung.com
Please rebase on u-boot-usb/next.
"exynos5250.dtsi" seems to be missing in u-boot-usb tree. :-( I can't find the exynos5250 side basic device tree support which is already been applied on u-boot-samsung-mainline.
Ok, let's change how to do this then. Apply all four on u-boot-samsung/next.
Ok, sure. I shall post all 4 patches including 3 for ehci fdt support and 1 patch for usb vbus rebased on top of u-boot-samsung/master.
I think the -samsung custodian shall just pick your series as is.
Then, I will pick up following patches.
[U-Boot,v3,1/3] EHCI: Exynos: Add fdt support [U-Boot,v3,2/3] EXYNOS5: Add device node for USB. [U-Boot,v3,3/3] EXYNOS5: FDT: Add compatible strings for USB [U-Boot,v2] SMDK5250: Enable VBus for USB 2.0 controller (V2! not V3)
Is it right?
Yes, thanks man!
Thanks, Minkyu Kang.
Best regards, Marek Vasut

Hi Minkyu Kang,
On Tue, Jan 8, 2013 at 3:03 PM, Marek Vasut marex@denx.de wrote:
Dear Minkyu Kang,
Hello,
On 08/01/13 18:14, Marek Vasut wrote:
Dear Vivek Gautam,
On Tue, Jan 8, 2013 at 2:20 PM, Marek Vasut marex@denx.de wrote:
Dear Vivek Gautam,
Hi Marek,
On Tue, Jan 8, 2013 at 12:36 PM, Marek Vasut marex@denx.de wrote: > Dear Vivek Gautam, > >> From: Rajeshwari Shinde rajeshwari.s@samsung.com >> >> This patch adds the device node required for USB >> >> Signed-off-by: Vivek Gautam gautam.vivek@samsung.com > > Please rebase on u-boot-usb/next.
"exynos5250.dtsi" seems to be missing in u-boot-usb tree. :-( I can't find the exynos5250 side basic device tree support which is already been applied on u-boot-samsung-mainline.
Ok, let's change how to do this then. Apply all four on u-boot-samsung/next.
Ok, sure. I shall post all 4 patches including 3 for ehci fdt support and 1 patch for usb vbus rebased on top of u-boot-samsung/master.
I think the -samsung custodian shall just pick your series as is.
Then, I will pick up following patches.
[U-Boot,v3,1/3] EHCI: Exynos: Add fdt support [U-Boot,v3,2/3] EXYNOS5: Add device node for USB. [U-Boot,v3,3/3] EXYNOS5: FDT: Add compatible strings for USB [U-Boot,v2] SMDK5250: Enable VBus for USB 2.0 controller (V2! not V3)
Is it right?
Yes, thanks man!
I have just sent the v4 for these patches.
[U-Boot] [PATCH v4 1/3] EHCI: Exynos: Add fdt support [U-Boot] [PATCH v4 2/3] EXYNOS5: Add device node for USB. [U-Boot] [PATCH v4 3/3] EXYNOS5: FDT: Add compatible strings for USB [U-Boot] [PATCH v4] SMDK5250: Enable VBus for USB 2.0 controller
Please apply the same. these are rebased on top of tree of u-boot-samsung.

From: Rajeshwari Shinde rajeshwari.s@samsung.com
Add required compatible information for USB
Signed-off-by: Vivek Gautam gautam.vivek@samsung.com Acked-by: Simon Glass sjg@chromium.org ---
Changes in v3: - Added compatible string for USB PHY controller.
Changes in v2: - None.
include/fdtdec.h | 2 ++ lib/fdtdec.c | 2 ++ 2 files changed, 4 insertions(+), 0 deletions(-)
diff --git a/include/fdtdec.h b/include/fdtdec.h index 12587f9..c18108e 100644 --- a/include/fdtdec.h +++ b/include/fdtdec.h @@ -72,6 +72,8 @@ enum fdt_compat_id { COMPAT_NVIDIA_TEGRA20_DC, /* Tegra 2 Display controller */ COMPAT_SMSC_LAN9215, /* SMSC 10/100 Ethernet LAN9215 */ COMPAT_SAMSUNG_EXYNOS5_SROMC, /* Exynos5 SROMC */ + COMPAT_SAMSUNG_EXYNOS_EHCI, /* Exynos EHCI controller */ + COMPAT_SAMSUNG_EXYNOS_USB_PHY, /* Exynos phy controller for usb2.0 */
COMPAT_COUNT, }; diff --git a/lib/fdtdec.c b/lib/fdtdec.c index adebd79..4682d1b 100644 --- a/lib/fdtdec.c +++ b/lib/fdtdec.c @@ -47,6 +47,8 @@ static const char * const compat_names[COMPAT_COUNT] = { COMPAT(NVIDIA_TEGRA20_DC, "nvidia,tegra20-dc"), COMPAT(SMSC_LAN9215, "smsc,lan9215"), COMPAT(SAMSUNG_EXYNOS5_SROMC, "samsung,exynos-sromc"), + COMPAT(SAMSUNG_EXYNOS_EHCI, "samsung,exynos-ehci"), + COMPAT(SAMSUNG_EXYNOS_USB_PHY, "samsung,exynos-usb-phy"), };
const char *fdtdec_get_compatible(enum fdt_compat_id id)

Dear Vivek Gautam,
From: Rajeshwari Shinde rajeshwari.s@samsung.com
Add required compatible information for USB
Signed-off-by: Vivek Gautam gautam.vivek@samsung.com Acked-by: Simon Glass sjg@chromium.org
Please rebase on u-boot-usb/next.
Best regards, Marek Vasut

Dear Vivek Gautam,
From: Rajeshwari Shinde rajeshwari.s@samsung.com
Adding fdt support to ehci-exynos in order to parse register base addresses from the device node.
Signed-off-by: Vivek Gautam gautam.vivek@samsung.com Signed-off-by: Rajeshwari Shinde rajeshwari.s@samsung.com
Applied, thanks
Best regards, Marek Vasut
participants (4)
-
Marek Vasut
-
Minkyu Kang
-
Vivek Gautam
-
Vivek Gautam