Patchwork [1/9] pci-rcar-gen2: add devicetree support

login
register
mail settings
Submitter Ben Dooks
Date March 6, 2014, 6:01 p.m.
Message ID <1394128887-4197-2-git-send-email-ben.dooks@codethink.co.uk>
Download mbox | patch
Permalink /patch/327544/
State Changes Requested
Headers show

Comments

Ben Dooks - March 6, 2014, 6:01 p.m.
Add OF match table for pci-rcar-gen2 driver for device tree support.

Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>
---
Updates since v1:
	- moved documentation into patch
	- moved to using bus-range parsing
	- ensured usb phy can be linked to usb devices

Cc: Bjorn Helgaas <bhelgaas@google.com>
Cc: Simon Horman <horms@verge.net.au>
Cc: linux-pci@vger.kernel.org
Cc: linux-sh@vger.kernel.org
Cc: devicetree@vger.kernel.org
---
 .../bindings/pci/renessas,pci-rcar-gen2.txt        | 52 ++++++++++++++++++++++
 drivers/pci/host/pci-rcar-gen2.c                   | 33 +++++++++++++-
 2 files changed, 83 insertions(+), 2 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/pci/renessas,pci-rcar-gen2.txt
Ben Dooks - March 6, 2014, 6:21 p.m.
On 06/03/14 18:01, Ben Dooks wrote:
> Add OF match table for pci-rcar-gen2 driver for device tree support.
>

> diff --git a/drivers/pci/host/pci-rcar-gen2.c b/drivers/pci/host/pci-rcar-gen2.c
> index fd3e3ab..1216784 100644
> --- a/drivers/pci/host/pci-rcar-gen2.c
> +++ b/drivers/pci/host/pci-rcar-gen2.c
> @@ -16,6 +16,7 @@
>   #include <linux/kernel.h>
>   #include <linux/module.h>
>   #include <linux/pci.h>
> +#include <linux/of_pci.h>
>   #include <linux/platform_device.h>
>   #include <linux/pm_runtime.h>
>   #include <linux/sizes.h>

Apologies all, there's a missing include of <linux/of.h> which should
have been added here
Sergei Shtylyov - March 30, 2014, 7:10 p.m.
Hello.

On 03/06/2014 09:21 PM, Ben Dooks wrote:

>> Add OF match table for pci-rcar-gen2 driver for device tree support.
[...]

>> diff --git a/drivers/pci/host/pci-rcar-gen2.c
>> b/drivers/pci/host/pci-rcar-gen2.c
>> index fd3e3ab..1216784 100644
>> --- a/drivers/pci/host/pci-rcar-gen2.c
>> +++ b/drivers/pci/host/pci-rcar-gen2.c
>> @@ -16,6 +16,7 @@
>>   #include <linux/kernel.h>
>>   #include <linux/module.h>
>>   #include <linux/pci.h>
>> +#include <linux/of_pci.h>
>>   #include <linux/platform_device.h>
>>   #include <linux/pm_runtime.h>
>>   #include <linux/sizes.h>

> Apologies all, there's a missing include of <linux/of.h> which should
> have been added here

    Have you ever re-posted this patch fixed? If not, it's not going to be 
merged for 3.15 I guess...

WBR, Sergei

--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Ben Dooks - March 30, 2014, 7:21 p.m.
On 30/03/14 20:10, Sergei Shtylyov wrote:
> Hello.
>
> On 03/06/2014 09:21 PM, Ben Dooks wrote:
>
>>> Add OF match table for pci-rcar-gen2 driver for device tree support.
> [...]
>
>>> diff --git a/drivers/pci/host/pci-rcar-gen2.c
>>> b/drivers/pci/host/pci-rcar-gen2.c
>>> index fd3e3ab..1216784 100644
>>> --- a/drivers/pci/host/pci-rcar-gen2.c
>>> +++ b/drivers/pci/host/pci-rcar-gen2.c
>>> @@ -16,6 +16,7 @@
>>>   #include <linux/kernel.h>
>>>   #include <linux/module.h>
>>>   #include <linux/pci.h>
>>> +#include <linux/of_pci.h>
>>>   #include <linux/platform_device.h>
>>>   #include <linux/pm_runtime.h>
>>>   #include <linux/sizes.h>
>
>> Apologies all, there's a missing include of <linux/of.h> which should
>> have been added here
>
>     Have you ever re-posted this patch fixed? If not, it's not going to
> be merged for 3.15 I guess...

I thought I did. I can have a look a reposting it.
Sergei Shtylyov - March 30, 2014, 7:26 p.m.
Hello.

On 03/30/2014 11:21 PM, Ben Dooks wrote:

>>>> Add OF match table for pci-rcar-gen2 driver for device tree support.
>> [...]

>>>> diff --git a/drivers/pci/host/pci-rcar-gen2.c
>>>> b/drivers/pci/host/pci-rcar-gen2.c
>>>> index fd3e3ab..1216784 100644
>>>> --- a/drivers/pci/host/pci-rcar-gen2.c
>>>> +++ b/drivers/pci/host/pci-rcar-gen2.c
>>>> @@ -16,6 +16,7 @@
>>>>   #include <linux/kernel.h>
>>>>   #include <linux/module.h>
>>>>   #include <linux/pci.h>
>>>> +#include <linux/of_pci.h>
>>>>   #include <linux/platform_device.h>
>>>>   #include <linux/pm_runtime.h>
>>>>   #include <linux/sizes.h>

>>> Apologies all, there's a missing include of <linux/of.h> which should
>>> have been added here

>>     Have you ever re-posted this patch fixed? If not, it's not going to
>> be merged for 3.15 I guess...

> I thought I did.

    I don't see such repost in 'linux-sh'.

> I can have a look a reposting it.

    It doesn't apply to the current renesas.git devel branch. What tree it was 
against?

WBR, Sergei

--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Ben Dooks - March 30, 2014, 7:40 p.m.
On 30/03/14 20:26, Sergei Shtylyov wrote:
> Hello.
>
> On 03/30/2014 11:21 PM, Ben Dooks wrote:
>
>>>>> Add OF match table for pci-rcar-gen2 driver for device tree support.
>>> [...]
>
>>>>> diff --git a/drivers/pci/host/pci-rcar-gen2.c
>>>>> b/drivers/pci/host/pci-rcar-gen2.c
>>>>> index fd3e3ab..1216784 100644
>>>>> --- a/drivers/pci/host/pci-rcar-gen2.c
>>>>> +++ b/drivers/pci/host/pci-rcar-gen2.c
>>>>> @@ -16,6 +16,7 @@
>>>>>   #include <linux/kernel.h>
>>>>>   #include <linux/module.h>
>>>>>   #include <linux/pci.h>
>>>>> +#include <linux/of_pci.h>
>>>>>   #include <linux/platform_device.h>
>>>>>   #include <linux/pm_runtime.h>
>>>>>   #include <linux/sizes.h>
>
>>>> Apologies all, there's a missing include of <linux/of.h> which should
>>>> have been added here
>
>>>     Have you ever re-posted this patch fixed? If not, it's not going to
>>> be merged for 3.15 I guess...
>
>> I thought I did.
>
>     I don't see such repost in 'linux-sh'.
>
>> I can have a look a reposting it.
>
>     It doesn't apply to the current renesas.git devel branch. What tree
> it was against?

 From my records it was against the -rc3 release of Horms' development
tree. I know Simon's tree has been closed for the board bits, but I
could re-send the rcar-pci code.
Sergei Shtylyov - March 30, 2014, 8:10 p.m.
On 03/30/2014 11:40 PM, Ben Dooks wrote:

>>>>>> Add OF match table for pci-rcar-gen2 driver for device tree support.
>>>> [...]

>>>>>> diff --git a/drivers/pci/host/pci-rcar-gen2.c
>>>>>> b/drivers/pci/host/pci-rcar-gen2.c
>>>>>> index fd3e3ab..1216784 100644
>>>>>> --- a/drivers/pci/host/pci-rcar-gen2.c
>>>>>> +++ b/drivers/pci/host/pci-rcar-gen2.c
>>>>>> @@ -16,6 +16,7 @@
>>>>>>   #include <linux/kernel.h>
>>>>>>   #include <linux/module.h>
>>>>>>   #include <linux/pci.h>
>>>>>> +#include <linux/of_pci.h>
>>>>>>   #include <linux/platform_device.h>
>>>>>>   #include <linux/pm_runtime.h>
>>>>>>   #include <linux/sizes.h>

>>>>> Apologies all, there's a missing include of <linux/of.h> which should
>>>>> have been added here

>>>>     Have you ever re-posted this patch fixed? If not, it's not going to
>>>> be merged for 3.15 I guess...

>>> I thought I did.

>>     I don't see such repost in 'linux-sh'.

    And neither do I see it in other lists.

>>> I can have a look a reposting it.

>>     It doesn't apply to the current renesas.git devel branch. What tree
>> it was against?

    Looks like you had some patches to the PCI driver before this one. I've 
just found something in Bjorn's pci.git repo's next branch...

>  From my records it was against the -rc3 release of Horms' development
> tree. I know Simon's tree has been closed for the board bits, but I
> could re-send the rcar-pci code.

    The patch does applies cleanly to pci.git's next branch (it has a trailing 
whitespace though), so no dire need to re-post. I'm not sure if the new 
version of the patch could still be merged there, as Linus was going to 
release 3.14 and so open the merge window this weekend.

WBR, Sergei

--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Sergei Shtylyov - March 30, 2014, 8:28 p.m.
On 03/06/2014 09:01 PM, Ben Dooks wrote:

> Add OF match table for pci-rcar-gen2 driver for device tree support.

> Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>
> ---
> Updates since v1:
> 	- moved documentation into patch
> 	- moved to using bus-range parsing
> 	- ensured usb phy can be linked to usb devices

> Cc: Bjorn Helgaas <bhelgaas@google.com>
> Cc: Simon Horman <horms@verge.net.au>
> Cc: linux-pci@vger.kernel.org
> Cc: linux-sh@vger.kernel.org
> Cc: devicetree@vger.kernel.org
> ---
>   .../bindings/pci/renessas,pci-rcar-gen2.txt        | 52 ++++++++++++++++++++++
>   drivers/pci/host/pci-rcar-gen2.c                   | 33 +++++++++++++-
>   2 files changed, 83 insertions(+), 2 deletions(-)
>   create mode 100644 Documentation/devicetree/bindings/pci/renessas,pci-rcar-gen2.txt

> diff --git a/Documentation/devicetree/bindings/pci/renessas,pci-rcar-gen2.txt b/Documentation/devicetree/bindings/pci/renessas,pci-rcar-gen2.txt
> new file mode 100644
> index 0000000..bd6d291
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/pci/renessas,pci-rcar-gen2.txt
> @@ -0,0 +1,52 @@
> +Renesas AHB to PCI bridge
> +-------------------------

    Perhaps it makes sense to describe PCIe bindings in the same file...

[...]

> +Example SoC configuration:
> +
> +	pci0: pci@ee090000  {
> +		compatible = "renesas,pci-r8a7790";
> +		clocks = <&mstp7_clks R8A7790_CLK_EHCI>;
> +		reg = <0x0 0xee090000 0x0 0xc00>,
> +		      <0x0 0xee080000 0x0 0x1100>;
> +		interrupts = <0 108 IRQ_TYPE_LEVEL_HIGH>;
> +		status = "disabled";
> +
> +		bus-range = <0 0>;
> +		#address-cells = <3>;
> +		#size-cells = <2>;
> +	};
> +
> +Example board setup:
> +
> +&pci1 {
> +	status = "okay";
> +	pinctrl-0 = <&usb1_pins>;
> +	pinctrl-names = "default";
> +
> +	pci@0,1 {
> +		reg = <0x800 0 0 0 0>;
> +		device_type = "pci";
> +		usb-phy = <&usbphy>;
> +	};
> +
> +	pci@0,2 {
> +		reg = <0x1000 0 0 0 0>;
> +		device_type = "pci";
> +		usb-phy = <&usbphy>;
> +	};
> +};

    As I said, these PCI sub-nodes belong to the SoC file.

> diff --git a/drivers/pci/host/pci-rcar-gen2.c b/drivers/pci/host/pci-rcar-gen2.c
> index fd3e3ab..1216784 100644
> --- a/drivers/pci/host/pci-rcar-gen2.c
> +++ b/drivers/pci/host/pci-rcar-gen2.c
[...]
> @@ -377,11 +396,21 @@ static int rcar_pci_probe(struct platform_device *pdev)
>   	return 0;
>   }
>
> +#ifdef CONFIG_OF

    I don't think it's really worth it.

> +static struct of_device_id rcar_pci_of_match[] = {
> +	{ .compatible = "renesas,pci-r8a7790", },
> +	{ },
> +};
> +
> +MODULE_DEVICE_TABLE(of, rcar_pci_of_match);
> +#endif
> +
>   static struct platform_driver rcar_pci_driver = {
>   	.driver = {
>   		.name = "pci-rcar-gen2",
>   		.owner = THIS_MODULE,
>   		.suppress_bind_attrs = true,
> +		.of_match_table = of_match_ptr(rcar_pci_of_match),

    And so, of_match_ptr() is not needed.

WBR, Sergei

--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Sergei Shtylyov - March 31, 2014, 9:23 p.m.
Hello.

On 03/30/2014 11:40 PM, Ben Dooks wrote:

>>>>>> Add OF match table for pci-rcar-gen2 driver for device tree support.
>>>> [...]

>>>>>> diff --git a/drivers/pci/host/pci-rcar-gen2.c
>>>>>> b/drivers/pci/host/pci-rcar-gen2.c
>>>>>> index fd3e3ab..1216784 100644
>>>>>> --- a/drivers/pci/host/pci-rcar-gen2.c
>>>>>> +++ b/drivers/pci/host/pci-rcar-gen2.c
>>>>>> @@ -16,6 +16,7 @@
>>>>>>   #include <linux/kernel.h>
>>>>>>   #include <linux/module.h>
>>>>>>   #include <linux/pci.h>
>>>>>> +#include <linux/of_pci.h>
>>>>>>   #include <linux/platform_device.h>
>>>>>>   #include <linux/pm_runtime.h>
>>>>>>   #include <linux/sizes.h>

>>>>> Apologies all, there's a missing include of <linux/of.h> which should
>>>>> have been added here

>>>>     Have you ever re-posted this patch fixed? If not, it's not going to
>>>> be merged for 3.15 I guess...

>>> I thought I did.

>>     I don't see such repost in 'linux-sh'.

>>> I can have a look a reposting it.

>>     It doesn't apply to the current renesas.git devel branch. What tree
>> it was against?

>  From my records it was against the -rc3 release of Horms' development
> tree. I know Simon's tree has been closed for the board bits, but I
> could re-send the rcar-pci code.

    Could you address my comments and re-send? Or if you don't have time, 
would you mind that I take this patch into my hands?

WBR, Sergei

--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Bjorn Helgaas - April 4, 2014, 5:09 p.m.
On Thu, Mar 06, 2014 at 06:01:19PM +0000, Ben Dooks wrote:
> Add OF match table for pci-rcar-gen2 driver for device tree support.
> 
> Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>

I'm not sure what the status of this is.  I saw comments about a missing
#include, but I didn't see a fixed repost.  Ben, could you please repost
anything you have outstanding for me?

> ---
> Updates since v1:
> 	- moved documentation into patch
> 	- moved to using bus-range parsing
> 	- ensured usb phy can be linked to usb devices
> 
> Cc: Bjorn Helgaas <bhelgaas@google.com>
> Cc: Simon Horman <horms@verge.net.au>
> Cc: linux-pci@vger.kernel.org
> Cc: linux-sh@vger.kernel.org
> Cc: devicetree@vger.kernel.org
> ---
>  .../bindings/pci/renessas,pci-rcar-gen2.txt        | 52 ++++++++++++++++++++++
>  drivers/pci/host/pci-rcar-gen2.c                   | 33 +++++++++++++-
>  2 files changed, 83 insertions(+), 2 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/pci/renessas,pci-rcar-gen2.txt
> 
> diff --git a/Documentation/devicetree/bindings/pci/renessas,pci-rcar-gen2.txt b/Documentation/devicetree/bindings/pci/renessas,pci-rcar-gen2.txt
> new file mode 100644
> index 0000000..bd6d291
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/pci/renessas,pci-rcar-gen2.txt
> @@ -0,0 +1,52 @@
> +Renesas AHB to PCI bridge
> +-------------------------
> +
> +This is the bridge used internally to connect the USB controllers to the
> +AHB. There is one bridge instance per USB port consiting of an internal
> +OHCI and EHCI controller.
> +
> +Required properties:
> + - compatible: "renesas,pci-r8a7790" for the R8A7790 SoC
> + - reg : A list of physical regions to access the device. The first is
> +         the operational registers for the OHCI/EHCI controller and the
> +	 second region is for the bridge configuration and control registers.
> + - interrupts : interrupt for the device
> + - clocks : The reference to the device clock
> + - bus-range: The PCI bus number ranges. As this is a single bus, the range
> +		should be specified as the same value twice.
> +
> +
> +Example SoC configuration:
> +
> +	pci0: pci@ee090000  {
> +		compatible = "renesas,pci-r8a7790";
> +		clocks = <&mstp7_clks R8A7790_CLK_EHCI>;
> +		reg = <0x0 0xee090000 0x0 0xc00>,
> +		      <0x0 0xee080000 0x0 0x1100>;
> +		interrupts = <0 108 IRQ_TYPE_LEVEL_HIGH>;
> +		status = "disabled";
> +
> +		bus-range = <0 0>;
> +		#address-cells = <3>;
> +		#size-cells = <2>;
> +	};
> +
> +Example board setup:
> +
> +&pci1 {
> +	status = "okay";
> +	pinctrl-0 = <&usb1_pins>;
> +	pinctrl-names = "default";
> +
> +	pci@0,1 {
> +		reg = <0x800 0 0 0 0>;
> +		device_type = "pci";
> +		usb-phy = <&usbphy>;
> +	};
> +
> +	pci@0,2 {
> +		reg = <0x1000 0 0 0 0>;
> +		device_type = "pci";
> +		usb-phy = <&usbphy>;
> +	};
> +};
> diff --git a/drivers/pci/host/pci-rcar-gen2.c b/drivers/pci/host/pci-rcar-gen2.c
> index fd3e3ab..1216784 100644
> --- a/drivers/pci/host/pci-rcar-gen2.c
> +++ b/drivers/pci/host/pci-rcar-gen2.c
> @@ -16,6 +16,7 @@
>  #include <linux/kernel.h>
>  #include <linux/module.h>
>  #include <linux/pci.h>
> +#include <linux/of_pci.h>
>  #include <linux/platform_device.h>
>  #include <linux/pm_runtime.h>
>  #include <linux/sizes.h>
> @@ -98,6 +99,7 @@ struct rcar_pci_priv {
>  	struct resource io_res;
>  	struct resource mem_res;
>  	struct resource *cfg_res;
> +	unsigned busnr;
>  	int irq;
>  	unsigned long window_size;
>  };
> @@ -312,8 +314,8 @@ static int rcar_pci_setup(int nr, struct pci_sys_data *sys)
>  	pci_add_resource(&sys->resources, &priv->io_res);
>  	pci_add_resource(&sys->resources, &priv->mem_res);
>  
> -	/* Setup bus number based on platform device id */
> -	sys->busnr = to_platform_device(priv->dev)->id;
> +	/* Setup bus number based on platform device id / of bus-range */
> +	sys->busnr = priv->busnr;
>  	return 1;
>  }
>  
> @@ -366,6 +368,23 @@ static int rcar_pci_probe(struct platform_device *pdev)
>  
>  	priv->window_size = SZ_1G;
>  
> +	if (pdev->dev.of_node) {
> +		struct resource busnr;
> +		int ret;
> +
> +		ret = of_pci_parse_bus_range(pdev->dev.of_node, &busnr);
> +		if (ret < 0) {
> +			dev_err(&pdev->dev, "failed to parse bus-range\n");
> +			return ret;
> +		}
> +		
> +		priv->busnr = busnr.start;
> +		if (busnr.end != busnr.start)
> +			dev_warn(&pdev->dev, "only one bus number supported\n");
> +	} else {
> +		priv->busnr = pdev->id;
> +	}
> +
>  	hw_private[0] = priv;
>  	memset(&hw, 0, sizeof(hw));
>  	hw.nr_controllers = ARRAY_SIZE(hw_private);
> @@ -377,11 +396,21 @@ static int rcar_pci_probe(struct platform_device *pdev)
>  	return 0;
>  }
>  
> +#ifdef CONFIG_OF
> +static struct of_device_id rcar_pci_of_match[] = {
> +	{ .compatible = "renesas,pci-r8a7790", },
> +	{ },
> +};
> +
> +MODULE_DEVICE_TABLE(of, rcar_pci_of_match);
> +#endif
> +
>  static struct platform_driver rcar_pci_driver = {
>  	.driver = {
>  		.name = "pci-rcar-gen2",
>  		.owner = THIS_MODULE,
>  		.suppress_bind_attrs = true,
> +		.of_match_table = of_match_ptr(rcar_pci_of_match),
>  	},
>  	.probe = rcar_pci_probe,
>  };
> -- 
> 1.9.0
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Ben Dooks - April 4, 2014, 5:44 p.m.
On 04/04/14 18:09, Bjorn Helgaas wrote:
> On Thu, Mar 06, 2014 at 06:01:19PM +0000, Ben Dooks wrote:
>> Add OF match table for pci-rcar-gen2 driver for device tree support.
>>
>> Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>
>
> I'm not sure what the status of this is.  I saw comments about a missing
> #include, but I didn't see a fixed repost.  Ben, could you please repost
> anything you have outstanding for me?

Sergei was going to re-post this series. I can have a look at
re-sending this later today if he hasn't already sorted it out.
Sergei Shtylyov - April 4, 2014, 5:46 p.m.
Hello.

On 04/04/2014 09:09 PM, Bjorn Helgaas wrote:

>> Add OF match table for pci-rcar-gen2 driver for device tree support.

>> Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>

> I'm not sure what the status of this is.  I saw comments about a missing
> #include, but I didn't see a fixed repost.

    Since there was none. :-)

> Ben, could you please repost anything you have outstanding for me?

    I took updating this patch into my hands with Ben's consent, so I'll 
repost it soonish.

WBR, Sergei

--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/Documentation/devicetree/bindings/pci/renessas,pci-rcar-gen2.txt b/Documentation/devicetree/bindings/pci/renessas,pci-rcar-gen2.txt
new file mode 100644
index 0000000..bd6d291
--- /dev/null
+++ b/Documentation/devicetree/bindings/pci/renessas,pci-rcar-gen2.txt
@@ -0,0 +1,52 @@ 
+Renesas AHB to PCI bridge
+-------------------------
+
+This is the bridge used internally to connect the USB controllers to the
+AHB. There is one bridge instance per USB port consiting of an internal
+OHCI and EHCI controller.
+
+Required properties:
+ - compatible: "renesas,pci-r8a7790" for the R8A7790 SoC
+ - reg : A list of physical regions to access the device. The first is
+         the operational registers for the OHCI/EHCI controller and the
+	 second region is for the bridge configuration and control registers.
+ - interrupts : interrupt for the device
+ - clocks : The reference to the device clock
+ - bus-range: The PCI bus number ranges. As this is a single bus, the range
+		should be specified as the same value twice.
+
+
+Example SoC configuration:
+
+	pci0: pci@ee090000  {
+		compatible = "renesas,pci-r8a7790";
+		clocks = <&mstp7_clks R8A7790_CLK_EHCI>;
+		reg = <0x0 0xee090000 0x0 0xc00>,
+		      <0x0 0xee080000 0x0 0x1100>;
+		interrupts = <0 108 IRQ_TYPE_LEVEL_HIGH>;
+		status = "disabled";
+
+		bus-range = <0 0>;
+		#address-cells = <3>;
+		#size-cells = <2>;
+	};
+
+Example board setup:
+
+&pci1 {
+	status = "okay";
+	pinctrl-0 = <&usb1_pins>;
+	pinctrl-names = "default";
+
+	pci@0,1 {
+		reg = <0x800 0 0 0 0>;
+		device_type = "pci";
+		usb-phy = <&usbphy>;
+	};
+
+	pci@0,2 {
+		reg = <0x1000 0 0 0 0>;
+		device_type = "pci";
+		usb-phy = <&usbphy>;
+	};
+};
diff --git a/drivers/pci/host/pci-rcar-gen2.c b/drivers/pci/host/pci-rcar-gen2.c
index fd3e3ab..1216784 100644
--- a/drivers/pci/host/pci-rcar-gen2.c
+++ b/drivers/pci/host/pci-rcar-gen2.c
@@ -16,6 +16,7 @@ 
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/pci.h>
+#include <linux/of_pci.h>
 #include <linux/platform_device.h>
 #include <linux/pm_runtime.h>
 #include <linux/sizes.h>
@@ -98,6 +99,7 @@  struct rcar_pci_priv {
 	struct resource io_res;
 	struct resource mem_res;
 	struct resource *cfg_res;
+	unsigned busnr;
 	int irq;
 	unsigned long window_size;
 };
@@ -312,8 +314,8 @@  static int rcar_pci_setup(int nr, struct pci_sys_data *sys)
 	pci_add_resource(&sys->resources, &priv->io_res);
 	pci_add_resource(&sys->resources, &priv->mem_res);
 
-	/* Setup bus number based on platform device id */
-	sys->busnr = to_platform_device(priv->dev)->id;
+	/* Setup bus number based on platform device id / of bus-range */
+	sys->busnr = priv->busnr;
 	return 1;
 }
 
@@ -366,6 +368,23 @@  static int rcar_pci_probe(struct platform_device *pdev)
 
 	priv->window_size = SZ_1G;
 
+	if (pdev->dev.of_node) {
+		struct resource busnr;
+		int ret;
+
+		ret = of_pci_parse_bus_range(pdev->dev.of_node, &busnr);
+		if (ret < 0) {
+			dev_err(&pdev->dev, "failed to parse bus-range\n");
+			return ret;
+		}
+		
+		priv->busnr = busnr.start;
+		if (busnr.end != busnr.start)
+			dev_warn(&pdev->dev, "only one bus number supported\n");
+	} else {
+		priv->busnr = pdev->id;
+	}
+
 	hw_private[0] = priv;
 	memset(&hw, 0, sizeof(hw));
 	hw.nr_controllers = ARRAY_SIZE(hw_private);
@@ -377,11 +396,21 @@  static int rcar_pci_probe(struct platform_device *pdev)
 	return 0;
 }
 
+#ifdef CONFIG_OF
+static struct of_device_id rcar_pci_of_match[] = {
+	{ .compatible = "renesas,pci-r8a7790", },
+	{ },
+};
+
+MODULE_DEVICE_TABLE(of, rcar_pci_of_match);
+#endif
+
 static struct platform_driver rcar_pci_driver = {
 	.driver = {
 		.name = "pci-rcar-gen2",
 		.owner = THIS_MODULE,
 		.suppress_bind_attrs = true,
+		.of_match_table = of_match_ptr(rcar_pci_of_match),
 	},
 	.probe = rcar_pci_probe,
 };