EHCI: Exynos: Add fdt support
Subsystems (5)
PATCH v4 1/3 EHCI: Exynos: Add fdt support
From: Rajeshwari Shinde <[email protected]>
Adding fdt support to ehci-exynos in order to parse register base addresses from the device node.
---
Changes in v4:
- Rebased on top of u-boot-samsung/master.
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.
Changes in v2:
- Removed checkpatch errors.
drivers/usb/host/ehci-exynos.c | 92 +++++++++++++++++++++++++++++++++++++--- 1 files changed, 85 insertions(+), 7 deletions(-)
drivers/usb/host/ehci-exynos.c +85 -7
@@ -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 ; }
Signature · 1 line
1.7.6.5
PATCH v4 2/3 EXYNOS5: Add device node for USB.
From: Rajeshwari Shinde <[email protected]>
This patch adds the device node required for USB
---
Changes in v4:
- Rebased on top of u-boot-samsung/master.
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(-)
arch/arm/dts/exynos5250.dtsi +13 -0
@@ -138,4 +138,17 @@ reg = <0x131b0000 0x30>; interrupts = <0 130 0>; }; + + ehci at 12110000 { + compatible = "samsung,exynos-ehci"; + reg = <0x12110000 0x100>; + #address-cells = <1>; + #size-cells = <1>; + + phy { + compatible = "samsung,exynos-usb-phy"; + reg = <0x12130000 0x100>; + }; + }; + };
Signature · 1 line
1.7.6.5
PATCH v4 2/3 EXYNOS5: Add device node for USB.
Quoted 14 lines · Vivek Gautam
From: Rajeshwari Shinde <[email protected]>
This patch adds the device node required for USB
Signed-off-by Vivek Gautam <[email protected]>---
Changes in v4:
- Rebased on top of u-boot-samsung/master.Changes in v3:
- Using a sub-node under ehci node for phy which provides "compatible" and "reg" information.
Quoted 6 lines
Changes in v2:
- None.arch/arm/dts/exynos5250.dtsi | 13 +++++++++++++ 1 files changed, 13 insertions(+), 0 deletions(-)
applied to u-boot-samsung.
Thanks,
Minkyu Kang.
PATCH v4 3/3 EXYNOS5: FDT: Add compatible strings for USB
In reply to Vivek GautamFrom: Rajeshwari Shinde <[email protected]>
Add required compatible information for USB
---
Changes in v4:
- Rebased on top of u-boot-samsung/master.
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(-)
include/fdtdec.h +2 -0
@@ -76,6 +76,8 @@ enum fdt_compat_id {COMPAT_SAMSUNG_EXYNOS5_SOUND ,/* Exynos Sound */ COMPAT_WOLFSON_WM8994_CODEC ,/* Wolfson WM8994 Sound Codec */ COMPAT_SAMSUNG_EXYNOS_SPI ,/* Exynos SPI */ +COMPAT_SAMSUNG_EXYNOS_EHCI ,/* Exynos EHCI controller */ +COMPAT_SAMSUNG_EXYNOS_USB_PHY ,/* Exynos phy controller for usb2.0 */ COMPAT_COUNT, };
lib/fdtdec.c +2 -0
@@ -51,6 +51,8 @@ static const char * const compat_names[COMPAT_COUNT] = {COMPAT (SAMSUNG_EXYNOS5_SOUND ,"samsung,exynos-sound" ),COMPAT (WOLFSON_WM8994_CODEC ,"wolfson,wm8994-codec" ),COMPAT (SAMSUNG_EXYNOS_SPI ,"samsung,exynos-spi" ), +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)
Signature · 1 line
1.7.6.5
PATCH v4 3/3 EXYNOS5: FDT: Add compatible strings for USB
Quoted 14 lines · Vivek Gautam
From: Rajeshwari Shinde <[email protected]>
Add required compatible information for USB
Signed-off-by Vivek Gautam <[email protected]>Acked-by Simon Glass <[email protected]>---
Changes in v4:
- Rebased on top of u-boot-samsung/master.Changes in v3:
- Added compatible string for USB PHY controller.
Quoted 7 lines
Changes in v2:
- None.include/fdtdec.h | 2 ++ lib/fdtdec.c | 2 ++ 2 files changed, 4 insertions(+), 0 deletions(-)
applied to u-boot-samsung.
Thanks,
Minkyu Kang.
PATCH v4 1/3 EHCI: Exynos: Add fdt support
In reply to Vivek GautamQuoted 19 lines · Vivek Gautam
From: Rajeshwari Shinde <[email protected]>
Adding fdt support to ehci-exynos in order to parse register base addresses from the device node.
Signed-off-by Vivek Gautam <[email protected]>Signed-off-by Rajeshwari Shinde <[email protected]>---
Changes in v4:
- Rebased on top of u-boot-samsung/master.Changes in v3:
- Using macros for error no.
- Using a common functionexynos_usb_parse_dt()to parse all DT related data.
- Using a global structure "exynos_ehci" to store register base addresses and thereby using it.
Quoted 6 lines
Changes in v2:
- Removed checkpatch errors.drivers/usb/host/ehci-exynos.c | 92 +++++++++++++++++++++++++++++++++++++--- 1 files changed, 85 insertions(+), 7 deletions(-)
applied to u-boot-samsung.
Thanks,
Minkyu Kang.