From: Bjorn Helgaas <bhelgaas@google.com>
To: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
Cc: horms@verge.net.au, devicetree@vger.kernel.org,
robh+dt@kernel.org, pawel.moll@arm.com, mark.rutland@arm.com,
ijc+devicetree@hellion.org.uk, galak@codeaurora.org,
linux-pci@vger.kernel.org, linux-sh@vger.kernel.org,
magnus.damm@gmail.com, linux@arm.linux.org.uk,
linux-arm-kernel@lists.infradead.org, ben.dooks@codethink.co.uk,
linux-doc@vger.kernel.org, rob@landley.net,
grant.likely@linaro.org
Subject: Re: [PATCH] pci-rcar-gen2: add device tree support
Date: Fri, 25 Apr 2014 11:45:35 -0600 [thread overview]
Message-ID: <20140425174535.GF32246@google.com> (raw)
In-Reply-To: <201404080141.21605.sergei.shtylyov@cogentembedded.com>
On Tue, Apr 08, 2014 at 01:41:20AM +0400, Sergei Shtylyov wrote:
> From: Ben Dooks <ben.dooks@codethink.co.uk>
>
> Add device tree probing support to the 'pci-rcar-gen2' driver.
>
> Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>
> [Sergei: numerous fixes/cleanups]
> Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
I'm OK with this, but it needs an ack from Simon.
> ---
> The patch is against the 'next' branch of Bjorn Helgaas' 'pci.git' repo.
>
> Changes in version 3:
> - added "renesas,pci-r8a7791" to the possible "compatible" property values;
> - removed '#ifdef CONFIG_OF' around rcar_pci_of_match[] and hence of_match_ptr()
> invocation too;
> - fixed trailing whitespace in the DT parsing code;
> - removed the wrong "renessas," prefix from the binding document's file name;
> - moved the PCI device sub-nodes from the board example to the SoC example;
> - fixed labels in the board example;
> - fixed grammar and punctuation in the binding document;
> - reworded the changelog, fixed the subject.
>
> Changes in version 2:
> - merged the binding document from a separate patch;
> - moved to the "bus-range" property parsing;
> - added example to the binding document.
>
> Documentation/devicetree/bindings/pci/pci-rcar-gen2.txt | 54 ++++++++++++++++
> drivers/pci/host/pci-rcar-gen2.c | 32 ++++++++-
> 2 files changed, 84 insertions(+), 2 deletions(-)
>
> Index: pci/Documentation/devicetree/bindings/pci/pci-rcar-gen2.txt
> ===================================================================
> --- /dev/null
> +++ pci/Documentation/devicetree/bindings/pci/pci-rcar-gen2.txt
> @@ -0,0 +1,54 @@
> +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 connected to the internal
> +OHCI and EHCI controllers.
> +
> +Required properties:
> +- compatible: "renesas,pci-r8a7790" for the R8A7790 SoC;
> + "renesas,pci-r8a7791" for the R8A7791 SoC.
> +- reg: A list of physical regions to access the device: the first is
> + the operational registers for the OHCI/EHCI controllers and the
> + second 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 range; 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>;
> +
> + pci@0,1 {
> + reg = <0x800 0 0 0 0>;
> + device_type = "pci";
> + phys = <&usbphy 0 0>;
> + phy-names = "usb";
> + };
> +
> + pci@0,2 {
> + reg = <0x1000 0 0 0 0>;
> + device_type = "pci";
> + phys = <&usbphy 0 0>;
> + phy-names = "usb";
> + };
> + };
> +
> +Example board setup:
> +
> +&pci0 {
> + status = "okay";
> + pinctrl-0 = <&usb0_pins>;
> + pinctrl-names = "default";
> +};
> Index: pci/drivers/pci/host/pci-rcar-gen2.c
> ===================================================================
> --- pci.orig/drivers/pci/host/pci-rcar-gen2.c
> +++ pci/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_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 platfor
>
> 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,20 @@ static int rcar_pci_probe(struct platfor
> return 0;
> }
>
> +static struct of_device_id rcar_pci_of_match[] = {
> + { .compatible = "renesas,pci-r8a7790", },
> + { .compatible = "renesas,pci-r8a7791", },
> + { },
> +};
> +
> +MODULE_DEVICE_TABLE(of, rcar_pci_of_match);
> +
> static struct platform_driver rcar_pci_driver = {
> .driver = {
> .name = "pci-rcar-gen2",
> .owner = THIS_MODULE,
> .suppress_bind_attrs = true,
> + .of_match_table = rcar_pci_of_match,
> },
> .probe = rcar_pci_probe,
> };
WARNING: multiple messages have this Message-ID (diff)
From: Bjorn Helgaas <bhelgaas@google.com>
To: linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH] pci-rcar-gen2: add device tree support
Date: Fri, 25 Apr 2014 17:45:35 +0000 [thread overview]
Message-ID: <20140425174535.GF32246@google.com> (raw)
In-Reply-To: <201404080141.21605.sergei.shtylyov@cogentembedded.com>
On Tue, Apr 08, 2014 at 01:41:20AM +0400, Sergei Shtylyov wrote:
> From: Ben Dooks <ben.dooks@codethink.co.uk>
>
> Add device tree probing support to the 'pci-rcar-gen2' driver.
>
> Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>
> [Sergei: numerous fixes/cleanups]
> Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
I'm OK with this, but it needs an ack from Simon.
> ---
> The patch is against the 'next' branch of Bjorn Helgaas' 'pci.git' repo.
>
> Changes in version 3:
> - added "renesas,pci-r8a7791" to the possible "compatible" property values;
> - removed '#ifdef CONFIG_OF' around rcar_pci_of_match[] and hence of_match_ptr()
> invocation too;
> - fixed trailing whitespace in the DT parsing code;
> - removed the wrong "renessas," prefix from the binding document's file name;
> - moved the PCI device sub-nodes from the board example to the SoC example;
> - fixed labels in the board example;
> - fixed grammar and punctuation in the binding document;
> - reworded the changelog, fixed the subject.
>
> Changes in version 2:
> - merged the binding document from a separate patch;
> - moved to the "bus-range" property parsing;
> - added example to the binding document.
>
> Documentation/devicetree/bindings/pci/pci-rcar-gen2.txt | 54 ++++++++++++++++
> drivers/pci/host/pci-rcar-gen2.c | 32 ++++++++-
> 2 files changed, 84 insertions(+), 2 deletions(-)
>
> Index: pci/Documentation/devicetree/bindings/pci/pci-rcar-gen2.txt
> =================================> --- /dev/null
> +++ pci/Documentation/devicetree/bindings/pci/pci-rcar-gen2.txt
> @@ -0,0 +1,54 @@
> +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 connected to the internal
> +OHCI and EHCI controllers.
> +
> +Required properties:
> +- compatible: "renesas,pci-r8a7790" for the R8A7790 SoC;
> + "renesas,pci-r8a7791" for the R8A7791 SoC.
> +- reg: A list of physical regions to access the device: the first is
> + the operational registers for the OHCI/EHCI controllers and the
> + second 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 range; 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>;
> +
> + pci@0,1 {
> + reg = <0x800 0 0 0 0>;
> + device_type = "pci";
> + phys = <&usbphy 0 0>;
> + phy-names = "usb";
> + };
> +
> + pci@0,2 {
> + reg = <0x1000 0 0 0 0>;
> + device_type = "pci";
> + phys = <&usbphy 0 0>;
> + phy-names = "usb";
> + };
> + };
> +
> +Example board setup:
> +
> +&pci0 {
> + status = "okay";
> + pinctrl-0 = <&usb0_pins>;
> + pinctrl-names = "default";
> +};
> Index: pci/drivers/pci/host/pci-rcar-gen2.c
> =================================> --- pci.orig/drivers/pci/host/pci-rcar-gen2.c
> +++ pci/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_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 platfor
>
> 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,20 @@ static int rcar_pci_probe(struct platfor
> return 0;
> }
>
> +static struct of_device_id rcar_pci_of_match[] = {
> + { .compatible = "renesas,pci-r8a7790", },
> + { .compatible = "renesas,pci-r8a7791", },
> + { },
> +};
> +
> +MODULE_DEVICE_TABLE(of, rcar_pci_of_match);
> +
> static struct platform_driver rcar_pci_driver = {
> .driver = {
> .name = "pci-rcar-gen2",
> .owner = THIS_MODULE,
> .suppress_bind_attrs = true,
> + .of_match_table = rcar_pci_of_match,
> },
> .probe = rcar_pci_probe,
> };
WARNING: multiple messages have this Message-ID (diff)
From: bhelgaas@google.com (Bjorn Helgaas)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] pci-rcar-gen2: add device tree support
Date: Fri, 25 Apr 2014 11:45:35 -0600 [thread overview]
Message-ID: <20140425174535.GF32246@google.com> (raw)
In-Reply-To: <201404080141.21605.sergei.shtylyov@cogentembedded.com>
On Tue, Apr 08, 2014 at 01:41:20AM +0400, Sergei Shtylyov wrote:
> From: Ben Dooks <ben.dooks@codethink.co.uk>
>
> Add device tree probing support to the 'pci-rcar-gen2' driver.
>
> Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>
> [Sergei: numerous fixes/cleanups]
> Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
I'm OK with this, but it needs an ack from Simon.
> ---
> The patch is against the 'next' branch of Bjorn Helgaas' 'pci.git' repo.
>
> Changes in version 3:
> - added "renesas,pci-r8a7791" to the possible "compatible" property values;
> - removed '#ifdef CONFIG_OF' around rcar_pci_of_match[] and hence of_match_ptr()
> invocation too;
> - fixed trailing whitespace in the DT parsing code;
> - removed the wrong "renessas," prefix from the binding document's file name;
> - moved the PCI device sub-nodes from the board example to the SoC example;
> - fixed labels in the board example;
> - fixed grammar and punctuation in the binding document;
> - reworded the changelog, fixed the subject.
>
> Changes in version 2:
> - merged the binding document from a separate patch;
> - moved to the "bus-range" property parsing;
> - added example to the binding document.
>
> Documentation/devicetree/bindings/pci/pci-rcar-gen2.txt | 54 ++++++++++++++++
> drivers/pci/host/pci-rcar-gen2.c | 32 ++++++++-
> 2 files changed, 84 insertions(+), 2 deletions(-)
>
> Index: pci/Documentation/devicetree/bindings/pci/pci-rcar-gen2.txt
> ===================================================================
> --- /dev/null
> +++ pci/Documentation/devicetree/bindings/pci/pci-rcar-gen2.txt
> @@ -0,0 +1,54 @@
> +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 connected to the internal
> +OHCI and EHCI controllers.
> +
> +Required properties:
> +- compatible: "renesas,pci-r8a7790" for the R8A7790 SoC;
> + "renesas,pci-r8a7791" for the R8A7791 SoC.
> +- reg: A list of physical regions to access the device: the first is
> + the operational registers for the OHCI/EHCI controllers and the
> + second 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 range; as this is a single bus, the range
> + should be specified as the same value twice.
> +
> +Example SoC configuration:
> +
> + pci0: pci at 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>;
> +
> + pci at 0,1 {
> + reg = <0x800 0 0 0 0>;
> + device_type = "pci";
> + phys = <&usbphy 0 0>;
> + phy-names = "usb";
> + };
> +
> + pci at 0,2 {
> + reg = <0x1000 0 0 0 0>;
> + device_type = "pci";
> + phys = <&usbphy 0 0>;
> + phy-names = "usb";
> + };
> + };
> +
> +Example board setup:
> +
> +&pci0 {
> + status = "okay";
> + pinctrl-0 = <&usb0_pins>;
> + pinctrl-names = "default";
> +};
> Index: pci/drivers/pci/host/pci-rcar-gen2.c
> ===================================================================
> --- pci.orig/drivers/pci/host/pci-rcar-gen2.c
> +++ pci/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_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 platfor
>
> 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,20 @@ static int rcar_pci_probe(struct platfor
> return 0;
> }
>
> +static struct of_device_id rcar_pci_of_match[] = {
> + { .compatible = "renesas,pci-r8a7790", },
> + { .compatible = "renesas,pci-r8a7791", },
> + { },
> +};
> +
> +MODULE_DEVICE_TABLE(of, rcar_pci_of_match);
> +
> static struct platform_driver rcar_pci_driver = {
> .driver = {
> .name = "pci-rcar-gen2",
> .owner = THIS_MODULE,
> .suppress_bind_attrs = true,
> + .of_match_table = rcar_pci_of_match,
> },
> .probe = rcar_pci_probe,
> };
next prev parent reply other threads:[~2014-04-25 17:45 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-07 21:41 [PATCH] pci-rcar-gen2: add device tree support Sergei Shtylyov
2014-04-07 21:41 ` Sergei Shtylyov
2014-04-07 21:41 ` Sergei Shtylyov
2014-04-25 17:45 ` Bjorn Helgaas [this message]
2014-04-25 17:45 ` Bjorn Helgaas
2014-04-25 17:45 ` Bjorn Helgaas
2014-04-25 20:05 ` Arnd Bergmann
2014-04-25 20:05 ` Arnd Bergmann
2014-04-25 20:05 ` Arnd Bergmann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140425174535.GF32246@google.com \
--to=bhelgaas@google.com \
--cc=ben.dooks@codethink.co.uk \
--cc=devicetree@vger.kernel.org \
--cc=galak@codeaurora.org \
--cc=grant.likely@linaro.org \
--cc=horms@verge.net.au \
--cc=ijc+devicetree@hellion.org.uk \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linux-sh@vger.kernel.org \
--cc=linux@arm.linux.org.uk \
--cc=magnus.damm@gmail.com \
--cc=mark.rutland@arm.com \
--cc=pawel.moll@arm.com \
--cc=rob@landley.net \
--cc=robh+dt@kernel.org \
--cc=sergei.shtylyov@cogentembedded.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.