diff mbox

[v2] ARM: Exynos5250: Enabling dwc3-exynos driver

Message ID 1352363533-14970-2-git-send-email-gautam.vivek@samsung.com (mailing list archive)
State New, archived
Headers show

Commit Message

Vivek Gautam Nov. 8, 2012, 8:32 a.m. UTC
Adding DWC3 device tree node for Exynos5250 along with the
device address and clock support needed for the controller.

Signed-off-by: Vivek Gautam <gautam.vivek@samsung.com>
---
 .../devicetree/bindings/usb/exynos-usb.txt         |   14 +++++++++++
 arch/arm/boot/dts/exynos5250.dtsi                  |    6 +++++
 arch/arm/mach-exynos/Kconfig                       |    1 +
 arch/arm/mach-exynos/clock-exynos5.c               |   24 ++++++++++++++++++++
 arch/arm/mach-exynos/include/mach/map.h            |    1 +
 arch/arm/mach-exynos/mach-exynos5-dt.c             |    2 +
 6 files changed, 48 insertions(+), 0 deletions(-)

Comments

Vivek Gautam Dec. 3, 2012, 1:43 p.m. UTC | #1
Hi Kukjin,

On Thu, Nov 8, 2012 at 2:02 PM, Vivek Gautam <gautam.vivek@samsung.com> wrote:
> Adding DWC3 device tree node for Exynos5250 along with the
> device address and clock support needed for the controller.
>

Does this change needs looks fine?
Any thoughts about this please ?

> Signed-off-by: Vivek Gautam <gautam.vivek@samsung.com>
> ---
>  .../devicetree/bindings/usb/exynos-usb.txt         |   14 +++++++++++
>  arch/arm/boot/dts/exynos5250.dtsi                  |    6 +++++
>  arch/arm/mach-exynos/Kconfig                       |    1 +
>  arch/arm/mach-exynos/clock-exynos5.c               |   24 ++++++++++++++++++++
>  arch/arm/mach-exynos/include/mach/map.h            |    1 +
>  arch/arm/mach-exynos/mach-exynos5-dt.c             |    2 +
>  6 files changed, 48 insertions(+), 0 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/usb/exynos-usb.txt b/Documentation/devicetree/bindings/usb/exynos-usb.txt
> index 5ff3def1..a7e3eaa 100644
> --- a/Documentation/devicetree/bindings/usb/exynos-usb.txt
> +++ b/Documentation/devicetree/bindings/usb/exynos-usb.txt
> @@ -38,3 +38,17 @@ Example:
>                 reg = <0x12120000 0x100>;
>                 interrupts = <0 71 0>;
>         };
> +
> +DWC3
> +Required properties:
> + - compatible: should be "samsung,exynos-dwc3" for USB 3.0 DWC3 controller.
> + - reg: physical base address of the controller and length of memory mapped
> +   region.
> + - interrupts: interrupt number to the cpu.
> +
> +Example:
> +       usb@12000000 {
> +               compatible = "samsung,exynos-dwc3";
> +               reg = <0x12000000 0x10000>;
> +               interrupts = <0 72 0>;
> +       };
> diff --git a/arch/arm/boot/dts/exynos5250.dtsi b/arch/arm/boot/dts/exynos5250.dtsi
> index f18abe0..d349636 100644
> --- a/arch/arm/boot/dts/exynos5250.dtsi
> +++ b/arch/arm/boot/dts/exynos5250.dtsi
> @@ -68,6 +68,12 @@
>                 interrupts = <0 96 0>;
>         };
>
> +       usb@12000000 {
> +               compatible = "samsung,exynos-dwc3";
> +               reg = <0x12000000 0x10000>;
> +               interrupts = <0 72 0>;
> +       };
> +
>         rtc {
>                 compatible = "samsung,s3c6410-rtc";
>                 reg = <0x101E0000 0x100>;
> diff --git a/arch/arm/mach-exynos/Kconfig b/arch/arm/mach-exynos/Kconfig
> index bb3b09a..588814a 100644
> --- a/arch/arm/mach-exynos/Kconfig
> +++ b/arch/arm/mach-exynos/Kconfig
> @@ -422,6 +422,7 @@ config MACH_EXYNOS5_DT
>         select ARM_AMBA
>         select SOC_EXYNOS5250
>         select USE_OF
> +       select USB_ARCH_HAS_XHCI
>         help
>           Machine support for Samsung EXYNOS5 machine with device tree enabled.
>           Select this if a fdt blob is available for the EXYNOS5 SoC based board.
> diff --git a/arch/arm/mach-exynos/clock-exynos5.c b/arch/arm/mach-exynos/clock-exynos5.c
> index a88e0d9..ee094ee 100644
> --- a/arch/arm/mach-exynos/clock-exynos5.c
> +++ b/arch/arm/mach-exynos/clock-exynos5.c
> @@ -740,6 +740,11 @@ static struct clk exynos5_init_clocks_off[] = {
>                 .enable         = exynos5_clk_ip_fsys_ctrl ,
>                 .ctrlbit        = (1 << 18),
>         }, {
> +               .name           = "usbdrd30",
> +               .parent         = &exynos5_clk_aclk_200.clk,
> +               .enable         = exynos5_clk_ip_fsys_ctrl,
> +               .ctrlbit        = (1 << 19),
> +       }, {
>                 .name           = "usbotg",
>                 .enable         = exynos5_clk_ip_fsys_ctrl,
>                 .ctrlbit        = (1 << 7),
> @@ -1004,6 +1009,16 @@ struct clksrc_sources exynos5_clkset_group = {
>         .nr_sources     = ARRAY_SIZE(exynos5_clkset_group_list),
>  };
>
> +struct clk *exynos5_clkset_usbdrd30_list[] = {
> +       [0] = &exynos5_clk_mout_mpll.clk,
> +       [1] = &exynos5_clk_mout_cpll.clk,
> +};
> +
> +struct clksrc_sources exynos5_clkset_usbdrd30 = {
> +       .sources        = exynos5_clkset_usbdrd30_list,
> +       .nr_sources     = ARRAY_SIZE(exynos5_clkset_usbdrd30_list),
> +};
> +
>  /* Possible clock sources for aclk_266_gscl_sub Mux */
>  static struct clk *clk_src_gscl_266_list[] = {
>         [0] = &clk_ext_xtal_mux,
> @@ -1288,6 +1303,15 @@ static struct clksrc_clk exynos5_clksrcs[] = {
>                         .parent         = &exynos5_clk_mout_cpll.clk,
>                 },
>                 .reg_div = { .reg = EXYNOS5_CLKDIV_GEN, .shift = 4, .size = 3 },
> +       }, {
> +               .clk    = {
> +                       .name           = "sclk_usbdrd30",
> +                       .enable         = exynos5_clksrc_mask_fsys_ctrl,
> +                       .ctrlbit        = (1 << 28),
> +               },
> +               .sources = &exynos5_clkset_usbdrd30,
> +               .reg_src = { .reg = EXYNOS5_CLKSRC_FSYS, .shift = 28, .size = 1 },
> +               .reg_div = { .reg = EXYNOS5_CLKDIV_FSYS0, .shift = 24, .size = 4 },
>         },
>  };
>
> diff --git a/arch/arm/mach-exynos/include/mach/map.h b/arch/arm/mach-exynos/include/mach/map.h
> index 471ffaf..064ca1c 100644
> --- a/arch/arm/mach-exynos/include/mach/map.h
> +++ b/arch/arm/mach-exynos/include/mach/map.h
> @@ -197,6 +197,7 @@
>  #define EXYNOS4_PA_EHCI                        0x12580000
>  #define EXYNOS4_PA_OHCI                        0x12590000
>  #define EXYNOS4_PA_HSPHY               0x125B0000
> +#define EXYNOS5_PA_DRD                 0x12000000
>  #define EXYNOS5_PA_EHCI                        0x12110000
>  #define EXYNOS5_PA_OHCI                        0x12120000
>  #define EXYNOS4_PA_MFC                 0x13400000
> diff --git a/arch/arm/mach-exynos/mach-exynos5-dt.c b/arch/arm/mach-exynos/mach-exynos5-dt.c
> index c03f3dd..3032222 100644
> --- a/arch/arm/mach-exynos/mach-exynos5-dt.c
> +++ b/arch/arm/mach-exynos/mach-exynos5-dt.c
> @@ -90,6 +90,8 @@ static const struct of_dev_auxdata exynos5250_auxdata_lookup[] __initconst = {
>                                 "s5p-ehci", NULL),
>         OF_DEV_AUXDATA("samsung,exynos-ohci", EXYNOS5_PA_OHCI,
>                                 "exynos-ohci", NULL),
> +       OF_DEV_AUXDATA("samsung,exynos-dwc3", EXYNOS5_PA_DRD,
> +                               "exynos-dwc3", NULL),
>         {},
>  };
>
> --
> 1.7.6.5
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
Grant Likely Dec. 6, 2012, 10:15 a.m. UTC | #2
On Thu, 08 Nov 2012 14:02:13 +0530, Vivek Gautam <gautam.vivek@samsung.com> wrote:
> Adding DWC3 device tree node for Exynos5250 along with the
> device address and clock support needed for the controller.
> 
> Signed-off-by: Vivek Gautam <gautam.vivek@samsung.com>
> ---
>  .../devicetree/bindings/usb/exynos-usb.txt         |   14 +++++++++++
>  arch/arm/boot/dts/exynos5250.dtsi                  |    6 +++++
>  arch/arm/mach-exynos/Kconfig                       |    1 +
>  arch/arm/mach-exynos/clock-exynos5.c               |   24 ++++++++++++++++++++
>  arch/arm/mach-exynos/include/mach/map.h            |    1 +
>  arch/arm/mach-exynos/mach-exynos5-dt.c             |    2 +
>  6 files changed, 48 insertions(+), 0 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/usb/exynos-usb.txt b/Documentation/devicetree/bindings/usb/exynos-usb.txt
> index 5ff3def1..a7e3eaa 100644
> --- a/Documentation/devicetree/bindings/usb/exynos-usb.txt
> +++ b/Documentation/devicetree/bindings/usb/exynos-usb.txt
> @@ -38,3 +38,17 @@ Example:
>  		reg = <0x12120000 0x100>;
>  		interrupts = <0 71 0>;
>  	};
> +
> +DWC3
> +Required properties:
> + - compatible: should be "samsung,exynos-dwc3" for USB 3.0 DWC3 controller.

Nit: Please use a specific chip in compatible strings. ie.
"samsung,exynos5250-dwc3". Newer parts using the same core can claim
compatibility by including the older string in the compatible list.

> + - reg: physical base address of the controller and length of memory mapped
> +   region.
> + - interrupts: interrupt number to the cpu.
> +
> +Example:
> +	usb@12000000 {
> +		compatible = "samsung,exynos-dwc3";
> +		reg = <0x12000000 0x10000>;
> +		interrupts = <0 72 0>;
> +	};
> diff --git a/arch/arm/boot/dts/exynos5250.dtsi b/arch/arm/boot/dts/exynos5250.dtsi
> index f18abe0..d349636 100644
> --- a/arch/arm/boot/dts/exynos5250.dtsi
> +++ b/arch/arm/boot/dts/exynos5250.dtsi
> @@ -68,6 +68,12 @@
>  		interrupts = <0 96 0>;
>  	};
>  
> +	usb@12000000 {
> +		compatible = "samsung,exynos-dwc3";
> +		reg = <0x12000000 0x10000>;
> +		interrupts = <0 72 0>;
> +	};
> +
>  	rtc {
>  		compatible = "samsung,s3c6410-rtc";
>  		reg = <0x101E0000 0x100>;
> diff --git a/arch/arm/mach-exynos/Kconfig b/arch/arm/mach-exynos/Kconfig
> index bb3b09a..588814a 100644
> --- a/arch/arm/mach-exynos/Kconfig
> +++ b/arch/arm/mach-exynos/Kconfig
> @@ -422,6 +422,7 @@ config MACH_EXYNOS5_DT
>  	select ARM_AMBA
>  	select SOC_EXYNOS5250
>  	select USE_OF
> +	select USB_ARCH_HAS_XHCI
>  	help
>  	  Machine support for Samsung EXYNOS5 machine with device tree enabled.
>  	  Select this if a fdt blob is available for the EXYNOS5 SoC based board.
> diff --git a/arch/arm/mach-exynos/clock-exynos5.c b/arch/arm/mach-exynos/clock-exynos5.c
> index a88e0d9..ee094ee 100644
> --- a/arch/arm/mach-exynos/clock-exynos5.c
> +++ b/arch/arm/mach-exynos/clock-exynos5.c
> @@ -740,6 +740,11 @@ static struct clk exynos5_init_clocks_off[] = {
>  		.enable		= exynos5_clk_ip_fsys_ctrl ,
>  		.ctrlbit	= (1 << 18),
>  	}, {
> +		.name		= "usbdrd30",
> +		.parent		= &exynos5_clk_aclk_200.clk,
> +		.enable		= exynos5_clk_ip_fsys_ctrl,
> +		.ctrlbit	= (1 << 19),
> +	}, {
>  		.name		= "usbotg",
>  		.enable		= exynos5_clk_ip_fsys_ctrl,
>  		.ctrlbit	= (1 << 7),
> @@ -1004,6 +1009,16 @@ struct clksrc_sources exynos5_clkset_group = {
>  	.nr_sources	= ARRAY_SIZE(exynos5_clkset_group_list),
>  };
>  
> +struct clk *exynos5_clkset_usbdrd30_list[] = {
> +	[0] = &exynos5_clk_mout_mpll.clk,
> +	[1] = &exynos5_clk_mout_cpll.clk,
> +};
> +
> +struct clksrc_sources exynos5_clkset_usbdrd30 = {
> +	.sources        = exynos5_clkset_usbdrd30_list,
> +	.nr_sources     = ARRAY_SIZE(exynos5_clkset_usbdrd30_list),
> +};
> +
>  /* Possible clock sources for aclk_266_gscl_sub Mux */
>  static struct clk *clk_src_gscl_266_list[] = {
>  	[0] = &clk_ext_xtal_mux,
> @@ -1288,6 +1303,15 @@ static struct clksrc_clk exynos5_clksrcs[] = {
>  			.parent		= &exynos5_clk_mout_cpll.clk,
>  		},
>  		.reg_div = { .reg = EXYNOS5_CLKDIV_GEN, .shift = 4, .size = 3 },
> +	}, {
> +		.clk    = {
> +			.name           = "sclk_usbdrd30",
> +			.enable         = exynos5_clksrc_mask_fsys_ctrl,
> +			.ctrlbit        = (1 << 28),
> +		},
> +		.sources = &exynos5_clkset_usbdrd30,
> +		.reg_src = { .reg = EXYNOS5_CLKSRC_FSYS, .shift = 28, .size = 1 },
> +		.reg_div = { .reg = EXYNOS5_CLKDIV_FSYS0, .shift = 24, .size = 4 },
>  	},
>  };
>  
> diff --git a/arch/arm/mach-exynos/include/mach/map.h b/arch/arm/mach-exynos/include/mach/map.h
> index 471ffaf..064ca1c 100644
> --- a/arch/arm/mach-exynos/include/mach/map.h
> +++ b/arch/arm/mach-exynos/include/mach/map.h
> @@ -197,6 +197,7 @@
>  #define EXYNOS4_PA_EHCI			0x12580000
>  #define EXYNOS4_PA_OHCI			0x12590000
>  #define EXYNOS4_PA_HSPHY		0x125B0000
> +#define EXYNOS5_PA_DRD			0x12000000
>  #define EXYNOS5_PA_EHCI			0x12110000
>  #define EXYNOS5_PA_OHCI			0x12120000
>  #define EXYNOS4_PA_MFC			0x13400000
> diff --git a/arch/arm/mach-exynos/mach-exynos5-dt.c b/arch/arm/mach-exynos/mach-exynos5-dt.c
> index c03f3dd..3032222 100644
> --- a/arch/arm/mach-exynos/mach-exynos5-dt.c
> +++ b/arch/arm/mach-exynos/mach-exynos5-dt.c
> @@ -90,6 +90,8 @@ static const struct of_dev_auxdata exynos5250_auxdata_lookup[] __initconst = {
>  				"s5p-ehci", NULL),
>  	OF_DEV_AUXDATA("samsung,exynos-ohci", EXYNOS5_PA_OHCI,
>  				"exynos-ohci", NULL),
> +	OF_DEV_AUXDATA("samsung,exynos-dwc3", EXYNOS5_PA_DRD,
> +				"exynos-dwc3", NULL),
>  	{},
>  };
>  
> -- 
> 1.7.6.5
> 
> 
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Vivek Gautam Dec. 6, 2012, 10:33 a.m. UTC | #3
Hi Grant,


On Thu, Dec 6, 2012 at 3:45 PM, Grant Likely <grant.likely@secretlab.ca> wrote:
> On Thu, 08 Nov 2012 14:02:13 +0530, Vivek Gautam <gautam.vivek@samsung.com> wrote:
>> Adding DWC3 device tree node for Exynos5250 along with the
>> device address and clock support needed for the controller.
>>
>> Signed-off-by: Vivek Gautam <gautam.vivek@samsung.com>
>> ---
>>  .../devicetree/bindings/usb/exynos-usb.txt         |   14 +++++++++++
>>  arch/arm/boot/dts/exynos5250.dtsi                  |    6 +++++
>>  arch/arm/mach-exynos/Kconfig                       |    1 +
>>  arch/arm/mach-exynos/clock-exynos5.c               |   24 ++++++++++++++++++++
>>  arch/arm/mach-exynos/include/mach/map.h            |    1 +
>>  arch/arm/mach-exynos/mach-exynos5-dt.c             |    2 +
>>  6 files changed, 48 insertions(+), 0 deletions(-)
>>
>> diff --git a/Documentation/devicetree/bindings/usb/exynos-usb.txt b/Documentation/devicetree/bindings/usb/exynos-usb.txt
>> index 5ff3def1..a7e3eaa 100644
>> --- a/Documentation/devicetree/bindings/usb/exynos-usb.txt
>> +++ b/Documentation/devicetree/bindings/usb/exynos-usb.txt
>> @@ -38,3 +38,17 @@ Example:
>>               reg = <0x12120000 0x100>;
>>               interrupts = <0 71 0>;
>>       };
>> +
>> +DWC3
>> +Required properties:
>> + - compatible: should be "samsung,exynos-dwc3" for USB 3.0 DWC3 controller.
>
> Nit: Please use a specific chip in compatible strings. ie.
> "samsung,exynos5250-dwc3". Newer parts using the same core can claim
> compatibility by including the older string in the compatible list.
>

The compatible string "samsung,exynos-dwc3" is added in accordance
with the driver dt changes
present at drivers "drivers/usb/dwc3/dwc3-exynos.c". Should i be
amending the driver side also likewise ?

>> + - reg: physical base address of the controller and length of memory mapped
>> +   region.
>> + - interrupts: interrupt number to the cpu.
>> +
>> +Example:
>> +     usb@12000000 {
>> +             compatible = "samsung,exynos-dwc3";
>> +             reg = <0x12000000 0x10000>;
>> +             interrupts = <0 72 0>;
>> +     };
>> diff --git a/arch/arm/boot/dts/exynos5250.dtsi b/arch/arm/boot/dts/exynos5250.dtsi
>> index f18abe0..d349636 100644
>> --- a/arch/arm/boot/dts/exynos5250.dtsi
>> +++ b/arch/arm/boot/dts/exynos5250.dtsi
>> @@ -68,6 +68,12 @@
>>               interrupts = <0 96 0>;
>>       };
>>
>> +     usb@12000000 {
>> +             compatible = "samsung,exynos-dwc3";
>> +             reg = <0x12000000 0x10000>;
>> +             interrupts = <0 72 0>;
>> +     };
>> +
>>       rtc {
>>               compatible = "samsung,s3c6410-rtc";
>>               reg = <0x101E0000 0x100>;
>> diff --git a/arch/arm/mach-exynos/Kconfig b/arch/arm/mach-exynos/Kconfig
>> index bb3b09a..588814a 100644
>> --- a/arch/arm/mach-exynos/Kconfig
>> +++ b/arch/arm/mach-exynos/Kconfig
>> @@ -422,6 +422,7 @@ config MACH_EXYNOS5_DT
>>       select ARM_AMBA
>>       select SOC_EXYNOS5250
>>       select USE_OF
>> +     select USB_ARCH_HAS_XHCI
>>       help
>>         Machine support for Samsung EXYNOS5 machine with device tree enabled.
>>         Select this if a fdt blob is available for the EXYNOS5 SoC based board.
>> diff --git a/arch/arm/mach-exynos/clock-exynos5.c b/arch/arm/mach-exynos/clock-exynos5.c
>> index a88e0d9..ee094ee 100644
>> --- a/arch/arm/mach-exynos/clock-exynos5.c
>> +++ b/arch/arm/mach-exynos/clock-exynos5.c
>> @@ -740,6 +740,11 @@ static struct clk exynos5_init_clocks_off[] = {
>>               .enable         = exynos5_clk_ip_fsys_ctrl ,
>>               .ctrlbit        = (1 << 18),
>>       }, {
>> +             .name           = "usbdrd30",
>> +             .parent         = &exynos5_clk_aclk_200.clk,
>> +             .enable         = exynos5_clk_ip_fsys_ctrl,
>> +             .ctrlbit        = (1 << 19),
>> +     }, {
>>               .name           = "usbotg",
>>               .enable         = exynos5_clk_ip_fsys_ctrl,
>>               .ctrlbit        = (1 << 7),
>> @@ -1004,6 +1009,16 @@ struct clksrc_sources exynos5_clkset_group = {
>>       .nr_sources     = ARRAY_SIZE(exynos5_clkset_group_list),
>>  };
>>
>> +struct clk *exynos5_clkset_usbdrd30_list[] = {
>> +     [0] = &exynos5_clk_mout_mpll.clk,
>> +     [1] = &exynos5_clk_mout_cpll.clk,
>> +};
>> +
>> +struct clksrc_sources exynos5_clkset_usbdrd30 = {
>> +     .sources        = exynos5_clkset_usbdrd30_list,
>> +     .nr_sources     = ARRAY_SIZE(exynos5_clkset_usbdrd30_list),
>> +};
>> +
>>  /* Possible clock sources for aclk_266_gscl_sub Mux */
>>  static struct clk *clk_src_gscl_266_list[] = {
>>       [0] = &clk_ext_xtal_mux,
>> @@ -1288,6 +1303,15 @@ static struct clksrc_clk exynos5_clksrcs[] = {
>>                       .parent         = &exynos5_clk_mout_cpll.clk,
>>               },
>>               .reg_div = { .reg = EXYNOS5_CLKDIV_GEN, .shift = 4, .size = 3 },
>> +     }, {
>> +             .clk    = {
>> +                     .name           = "sclk_usbdrd30",
>> +                     .enable         = exynos5_clksrc_mask_fsys_ctrl,
>> +                     .ctrlbit        = (1 << 28),
>> +             },
>> +             .sources = &exynos5_clkset_usbdrd30,
>> +             .reg_src = { .reg = EXYNOS5_CLKSRC_FSYS, .shift = 28, .size = 1 },
>> +             .reg_div = { .reg = EXYNOS5_CLKDIV_FSYS0, .shift = 24, .size = 4 },
>>       },
>>  };
>>
>> diff --git a/arch/arm/mach-exynos/include/mach/map.h b/arch/arm/mach-exynos/include/mach/map.h
>> index 471ffaf..064ca1c 100644
>> --- a/arch/arm/mach-exynos/include/mach/map.h
>> +++ b/arch/arm/mach-exynos/include/mach/map.h
>> @@ -197,6 +197,7 @@
>>  #define EXYNOS4_PA_EHCI                      0x12580000
>>  #define EXYNOS4_PA_OHCI                      0x12590000
>>  #define EXYNOS4_PA_HSPHY             0x125B0000
>> +#define EXYNOS5_PA_DRD                       0x12000000
>>  #define EXYNOS5_PA_EHCI                      0x12110000
>>  #define EXYNOS5_PA_OHCI                      0x12120000
>>  #define EXYNOS4_PA_MFC                       0x13400000
>> diff --git a/arch/arm/mach-exynos/mach-exynos5-dt.c b/arch/arm/mach-exynos/mach-exynos5-dt.c
>> index c03f3dd..3032222 100644
>> --- a/arch/arm/mach-exynos/mach-exynos5-dt.c
>> +++ b/arch/arm/mach-exynos/mach-exynos5-dt.c
>> @@ -90,6 +90,8 @@ static const struct of_dev_auxdata exynos5250_auxdata_lookup[] __initconst = {
>>                               "s5p-ehci", NULL),
>>       OF_DEV_AUXDATA("samsung,exynos-ohci", EXYNOS5_PA_OHCI,
>>                               "exynos-ohci", NULL),
>> +     OF_DEV_AUXDATA("samsung,exynos-dwc3", EXYNOS5_PA_DRD,
>> +                             "exynos-dwc3", NULL),
>>       {},
>>  };
>>
>> --
>> 1.7.6.5
>>
>>
>> _______________________________________________
>> linux-arm-kernel mailing list
>> linux-arm-kernel@lists.infradead.org
>> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
>
> --
> Grant Likely, B.Sc, P.Eng.
> Secret Lab Technologies, Ltd.
> _______________________________________________
> devicetree-discuss mailing list
> devicetree-discuss@lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/devicetree-discuss
diff mbox

Patch

diff --git a/Documentation/devicetree/bindings/usb/exynos-usb.txt b/Documentation/devicetree/bindings/usb/exynos-usb.txt
index 5ff3def1..a7e3eaa 100644
--- a/Documentation/devicetree/bindings/usb/exynos-usb.txt
+++ b/Documentation/devicetree/bindings/usb/exynos-usb.txt
@@ -38,3 +38,17 @@  Example:
 		reg = <0x12120000 0x100>;
 		interrupts = <0 71 0>;
 	};
+
+DWC3
+Required properties:
+ - compatible: should be "samsung,exynos-dwc3" for USB 3.0 DWC3 controller.
+ - reg: physical base address of the controller and length of memory mapped
+   region.
+ - interrupts: interrupt number to the cpu.
+
+Example:
+	usb@12000000 {
+		compatible = "samsung,exynos-dwc3";
+		reg = <0x12000000 0x10000>;
+		interrupts = <0 72 0>;
+	};
diff --git a/arch/arm/boot/dts/exynos5250.dtsi b/arch/arm/boot/dts/exynos5250.dtsi
index f18abe0..d349636 100644
--- a/arch/arm/boot/dts/exynos5250.dtsi
+++ b/arch/arm/boot/dts/exynos5250.dtsi
@@ -68,6 +68,12 @@ 
 		interrupts = <0 96 0>;
 	};
 
+	usb@12000000 {
+		compatible = "samsung,exynos-dwc3";
+		reg = <0x12000000 0x10000>;
+		interrupts = <0 72 0>;
+	};
+
 	rtc {
 		compatible = "samsung,s3c6410-rtc";
 		reg = <0x101E0000 0x100>;
diff --git a/arch/arm/mach-exynos/Kconfig b/arch/arm/mach-exynos/Kconfig
index bb3b09a..588814a 100644
--- a/arch/arm/mach-exynos/Kconfig
+++ b/arch/arm/mach-exynos/Kconfig
@@ -422,6 +422,7 @@  config MACH_EXYNOS5_DT
 	select ARM_AMBA
 	select SOC_EXYNOS5250
 	select USE_OF
+	select USB_ARCH_HAS_XHCI
 	help
 	  Machine support for Samsung EXYNOS5 machine with device tree enabled.
 	  Select this if a fdt blob is available for the EXYNOS5 SoC based board.
diff --git a/arch/arm/mach-exynos/clock-exynos5.c b/arch/arm/mach-exynos/clock-exynos5.c
index a88e0d9..ee094ee 100644
--- a/arch/arm/mach-exynos/clock-exynos5.c
+++ b/arch/arm/mach-exynos/clock-exynos5.c
@@ -740,6 +740,11 @@  static struct clk exynos5_init_clocks_off[] = {
 		.enable		= exynos5_clk_ip_fsys_ctrl ,
 		.ctrlbit	= (1 << 18),
 	}, {
+		.name		= "usbdrd30",
+		.parent		= &exynos5_clk_aclk_200.clk,
+		.enable		= exynos5_clk_ip_fsys_ctrl,
+		.ctrlbit	= (1 << 19),
+	}, {
 		.name		= "usbotg",
 		.enable		= exynos5_clk_ip_fsys_ctrl,
 		.ctrlbit	= (1 << 7),
@@ -1004,6 +1009,16 @@  struct clksrc_sources exynos5_clkset_group = {
 	.nr_sources	= ARRAY_SIZE(exynos5_clkset_group_list),
 };
 
+struct clk *exynos5_clkset_usbdrd30_list[] = {
+	[0] = &exynos5_clk_mout_mpll.clk,
+	[1] = &exynos5_clk_mout_cpll.clk,
+};
+
+struct clksrc_sources exynos5_clkset_usbdrd30 = {
+	.sources        = exynos5_clkset_usbdrd30_list,
+	.nr_sources     = ARRAY_SIZE(exynos5_clkset_usbdrd30_list),
+};
+
 /* Possible clock sources for aclk_266_gscl_sub Mux */
 static struct clk *clk_src_gscl_266_list[] = {
 	[0] = &clk_ext_xtal_mux,
@@ -1288,6 +1303,15 @@  static struct clksrc_clk exynos5_clksrcs[] = {
 			.parent		= &exynos5_clk_mout_cpll.clk,
 		},
 		.reg_div = { .reg = EXYNOS5_CLKDIV_GEN, .shift = 4, .size = 3 },
+	}, {
+		.clk    = {
+			.name           = "sclk_usbdrd30",
+			.enable         = exynos5_clksrc_mask_fsys_ctrl,
+			.ctrlbit        = (1 << 28),
+		},
+		.sources = &exynos5_clkset_usbdrd30,
+		.reg_src = { .reg = EXYNOS5_CLKSRC_FSYS, .shift = 28, .size = 1 },
+		.reg_div = { .reg = EXYNOS5_CLKDIV_FSYS0, .shift = 24, .size = 4 },
 	},
 };
 
diff --git a/arch/arm/mach-exynos/include/mach/map.h b/arch/arm/mach-exynos/include/mach/map.h
index 471ffaf..064ca1c 100644
--- a/arch/arm/mach-exynos/include/mach/map.h
+++ b/arch/arm/mach-exynos/include/mach/map.h
@@ -197,6 +197,7 @@ 
 #define EXYNOS4_PA_EHCI			0x12580000
 #define EXYNOS4_PA_OHCI			0x12590000
 #define EXYNOS4_PA_HSPHY		0x125B0000
+#define EXYNOS5_PA_DRD			0x12000000
 #define EXYNOS5_PA_EHCI			0x12110000
 #define EXYNOS5_PA_OHCI			0x12120000
 #define EXYNOS4_PA_MFC			0x13400000
diff --git a/arch/arm/mach-exynos/mach-exynos5-dt.c b/arch/arm/mach-exynos/mach-exynos5-dt.c
index c03f3dd..3032222 100644
--- a/arch/arm/mach-exynos/mach-exynos5-dt.c
+++ b/arch/arm/mach-exynos/mach-exynos5-dt.c
@@ -90,6 +90,8 @@  static const struct of_dev_auxdata exynos5250_auxdata_lookup[] __initconst = {
 				"s5p-ehci", NULL),
 	OF_DEV_AUXDATA("samsung,exynos-ohci", EXYNOS5_PA_OHCI,
 				"exynos-ohci", NULL),
+	OF_DEV_AUXDATA("samsung,exynos-dwc3", EXYNOS5_PA_DRD,
+				"exynos-dwc3", NULL),
 	{},
 };