[v3,2/3] ARM: DRA7: add pdata-quirks to do reset of PCIe
diff mbox

Message ID 1452780672-14339-3-git-send-email-kishon@ti.com
State New
Headers show

Commit Message

Kishon Vijay Abraham I Jan. 14, 2016, 2:11 p.m. UTC
Create platform data for PCIe and populate it with function
pointers to perform assert and deassert of PCIe reset lines.
The PCIe driver can use the callbacks provided here to
reset the PCIe.
This will be removed once the reset contoller driver is
available to reset PCIe.

Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
Signed-off-by: Sekhar Nori <nsekhar@ti.com>
---
 arch/arm/mach-omap2/pdata-quirks.c       |   11 +++++++++++
 include/linux/platform_data/pci-dra7xx.h |   29 +++++++++++++++++++++++++++++
 2 files changed, 40 insertions(+)
 create mode 100644 include/linux/platform_data/pci-dra7xx.h

Comments

Suman Anna Jan. 15, 2016, 7:19 p.m. UTC | #1
On 01/14/2016 08:11 AM, Kishon Vijay Abraham I wrote:
> Create platform data for PCIe and populate it with function
> pointers to perform assert and deassert of PCIe reset lines.
> The PCIe driver can use the callbacks provided here to
> reset the PCIe.
> This will be removed once the reset contoller driver is
> available to reset PCIe.
> 
> Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
> Signed-off-by: Sekhar Nori <nsekhar@ti.com>

Thanks for the revised version, looks much better.

Reviewed-by: Suman Anna <s-anna@ti.com>

> ---
>  arch/arm/mach-omap2/pdata-quirks.c       |   11 +++++++++++
>  include/linux/platform_data/pci-dra7xx.h |   29 +++++++++++++++++++++++++++++
>  2 files changed, 40 insertions(+)
>  create mode 100644 include/linux/platform_data/pci-dra7xx.h
> 
> diff --git a/arch/arm/mach-omap2/pdata-quirks.c b/arch/arm/mach-omap2/pdata-quirks.c
> index 5814477..f5a65fe 100644
> --- a/arch/arm/mach-omap2/pdata-quirks.c
> +++ b/arch/arm/mach-omap2/pdata-quirks.c
> @@ -23,6 +23,7 @@
>  #include <linux/platform_data/pinctrl-single.h>
>  #include <linux/platform_data/iommu-omap.h>
>  #include <linux/platform_data/wkup_m3.h>
> +#include <linux/platform_data/pci-dra7xx.h>
>  
>  #include "common.h"
>  #include "common-board-devices.h"
> @@ -404,6 +405,14 @@ static void __init omap5_uevm_legacy_init(void)
>  }
>  #endif
>  
> +#ifdef CONFIG_SOC_DRA7XX
> +static struct pci_dra7xx_platform_data dra7xx_pci_pdata = {
> +	.reset_name = "pcie",
> +	.assert_reset = omap_device_assert_hardreset,
> +	.deassert_reset = omap_device_deassert_hardreset,
> +};
> +#endif
> +
>  static struct pcs_pdata pcs_pdata;
>  
>  void omap_pcs_legacy_init(int irq, void (*rearm)(void))
> @@ -474,6 +483,8 @@ static struct of_dev_auxdata omap_auxdata_lookup[] __initdata = {
>  #endif
>  #ifdef CONFIG_SOC_DRA7XX
>  	OF_DEV_AUXDATA("ti,dra7-padconf", 0x4a003400, "4a003400.pinmux", &pcs_pdata),
> +	OF_DEV_AUXDATA("ti,dra7-pcie", 0x51000000, "51000000.pcie", &dra7xx_pci_pdata),
> +	OF_DEV_AUXDATA("ti,dra7-pcie", 0x51800000, "51800000.pcie", &dra7xx_pci_pdata),
>  #endif
>  #ifdef CONFIG_SOC_AM43XX
>  	OF_DEV_AUXDATA("ti,am437-padconf", 0x44e10800, "44e10800.pinmux", &pcs_pdata),
> diff --git a/include/linux/platform_data/pci-dra7xx.h b/include/linux/platform_data/pci-dra7xx.h
> new file mode 100644
> index 0000000..a3bab6b
> --- /dev/null
> +++ b/include/linux/platform_data/pci-dra7xx.h
> @@ -0,0 +1,29 @@
> +/*
> + * pcie-dra7xx - Platform data for PCIe controller
> + *
> + * Copyright (C) 2016 Texas Instruments Incorporated - http://www.ti.com/
> + *
> + * Authors: Kishon Vijay Abraham I <kishon@ti.com>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + */
> +
> +#ifndef __PCI_DRA7XX_H
> +#define __PCI_DRA7XX_H
> +
> +/**
> + * struct pci_dra7xx_platform_data - platform data specific to pci in dra7xx
> + * @reset_name: name of the reset line
> + * @assert_reset: callback for performing assert reset operation
> + * @deassert_reset: callback for performing deassert reset operation
> + */
> +struct pci_dra7xx_platform_data {
> +	const char *reset_name;
> +
> +	int (*assert_reset)(struct platform_device *pdev, const char *name);
> +	int (*deassert_reset)(struct platform_device *pdev, const char *name);
> +};
> +
> +#endif /* __PCI_DRA7XX_H */
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Tony Lindgren Jan. 15, 2016, 7:22 p.m. UTC | #2
* Suman Anna <s-anna@ti.com> [160115 11:20]:
> On 01/14/2016 08:11 AM, Kishon Vijay Abraham I wrote:
> > Create platform data for PCIe and populate it with function
> > pointers to perform assert and deassert of PCIe reset lines.
> > The PCIe driver can use the callbacks provided here to
> > reset the PCIe.
> > This will be removed once the reset contoller driver is
> > available to reset PCIe.
...

> > +/**
> > + * struct pci_dra7xx_platform_data - platform data specific to pci in dra7xx
> > + * @reset_name: name of the reset line
> > + * @assert_reset: callback for performing assert reset operation
> > + * @deassert_reset: callback for performing deassert reset operation
> > + */
> > +struct pci_dra7xx_platform_data {
> > +	const char *reset_name;
> > +
> > +	int (*assert_reset)(struct platform_device *pdev, const char *name);
> > +	int (*deassert_reset)(struct platform_device *pdev, const char *name);
> > +};

I doubt this platform_data is dra7 specific. I believe it's
the same PCI controller that has been in the omap variants for
years?

Regards,

Tony
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Suman Anna Jan. 15, 2016, 7:41 p.m. UTC | #3
On 01/15/2016 01:22 PM, Tony Lindgren wrote:
> * Suman Anna <s-anna@ti.com> [160115 11:20]:
>> On 01/14/2016 08:11 AM, Kishon Vijay Abraham I wrote:
>>> Create platform data for PCIe and populate it with function
>>> pointers to perform assert and deassert of PCIe reset lines.
>>> The PCIe driver can use the callbacks provided here to
>>> reset the PCIe.
>>> This will be removed once the reset contoller driver is
>>> available to reset PCIe.
> ...
> 
>>> +/**
>>> + * struct pci_dra7xx_platform_data - platform data specific to pci in dra7xx
>>> + * @reset_name: name of the reset line
>>> + * @assert_reset: callback for performing assert reset operation
>>> + * @deassert_reset: callback for performing deassert reset operation
>>> + */
>>> +struct pci_dra7xx_platform_data {
>>> +	const char *reset_name;
>>> +
>>> +	int (*assert_reset)(struct platform_device *pdev, const char *name);
>>> +	int (*deassert_reset)(struct platform_device *pdev, const char *name);
>>> +};
> 
> I doubt this platform_data is dra7 specific. I believe it's
> the same PCI controller that has been in the omap variants for
> years?

AFAIK, this only applies to DRA7. Sekhar/Kishon can confirm. I did take
a quick look at OMAP3/4/5 TRMs, and didn't find any. Neither did a grep
on current hwmod files other than DRA7. There's a DM81xx related PCI
clock domain, but don't see any corresponding driver/device for the same.

regards
Suman
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Sekhar Nori Jan. 18, 2016, 9:12 a.m. UTC | #4
On Saturday 16 January 2016 01:11 AM, Suman Anna wrote:
> On 01/15/2016 01:22 PM, Tony Lindgren wrote:
>> * Suman Anna <s-anna@ti.com> [160115 11:20]:
>>> On 01/14/2016 08:11 AM, Kishon Vijay Abraham I wrote:
>>>> Create platform data for PCIe and populate it with function
>>>> pointers to perform assert and deassert of PCIe reset lines.
>>>> The PCIe driver can use the callbacks provided here to
>>>> reset the PCIe.
>>>> This will be removed once the reset contoller driver is
>>>> available to reset PCIe.
>> ...
>>
>>>> +/**
>>>> + * struct pci_dra7xx_platform_data - platform data specific to pci in dra7xx
>>>> + * @reset_name: name of the reset line
>>>> + * @assert_reset: callback for performing assert reset operation
>>>> + * @deassert_reset: callback for performing deassert reset operation
>>>> + */
>>>> +struct pci_dra7xx_platform_data {
>>>> +	const char *reset_name;
>>>> +
>>>> +	int (*assert_reset)(struct platform_device *pdev, const char *name);
>>>> +	int (*deassert_reset)(struct platform_device *pdev, const char *name);
>>>> +};
>>
>> I doubt this platform_data is dra7 specific. I believe it's
>> the same PCI controller that has been in the omap variants for
>> years?
> 
> AFAIK, this only applies to DRA7. Sekhar/Kishon can confirm. I did take
> a quick look at OMAP3/4/5 TRMs, and didn't find any. Neither did a grep
> on current hwmod files other than DRA7. There's a DM81xx related PCI
> clock domain, but don't see any corresponding driver/device for the same.

Like Suman, I do not know of any TI SoC that came off the OMAP mobile
business that has PCIe.

DM81xx has a PCIe (but no mainline driver). Both DM81xx and DRA7x use a
designware core. But, the glue layer (which is the subject of interest
here), is completely different. I looked at the DM81xx driver in TI
kernel[1] to confirm this.

I remember talking to Kishon about similarities between the DM81xx and
DRA7x PCIe subsystem and remember that he too mentioned that they are
quite different.

For an IP like PCIeSS, its quite difficult to come-up with unique names
without using the name of the platform they first appeared in. Anyway,
the driver is already called "pci-dra7xx", so I guess there is no harm
in having that name in platform data as well. That in itself should not
preclude its use on other platforms later (although I agree having a
generic name would be ideal).

Thanks,
Sekhar

PS: Kishon is out-of-office till the end of the month

[1]
http://arago-project.org/git/projects/?p=linux-omap3.git;a=blob;f=arch/arm/mach-omap2/pcie-ti81xx.c;h=05ae4f1df85a35e91a770435c50777a31de4f1ca;hb=4f1fb3bea4cc381c76e8e439f8af393c1a698dfc#l70
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Tony Lindgren Jan. 27, 2016, 5:23 p.m. UTC | #5
* Sekhar Nori <nsekhar@ti.com> [160118 01:13]:
> On Saturday 16 January 2016 01:11 AM, Suman Anna wrote:
> > On 01/15/2016 01:22 PM, Tony Lindgren wrote:
> >> I doubt this platform_data is dra7 specific. I believe it's
> >> the same PCI controller that has been in the omap variants for
> >> years?
> > 
> > AFAIK, this only applies to DRA7. Sekhar/Kishon can confirm. I did take
> > a quick look at OMAP3/4/5 TRMs, and didn't find any. Neither did a grep
> > on current hwmod files other than DRA7. There's a DM81xx related PCI
> > clock domain, but don't see any corresponding driver/device for the same.
> 
> Like Suman, I do not know of any TI SoC that came off the OMAP mobile
> business that has PCIe.
> 
> DM81xx has a PCIe (but no mainline driver). Both DM81xx and DRA7x use a
> designware core. But, the glue layer (which is the subject of interest
> here), is completely different. I looked at the DM81xx driver in TI
> kernel[1] to confirm this.

OK thanks for checking.

> I remember talking to Kishon about similarities between the DM81xx and
> DRA7x PCIe subsystem and remember that he too mentioned that they are
> quite different.

OK

> For an IP like PCIeSS, its quite difficult to come-up with unique names
> without using the name of the platform they first appeared in. Anyway,
> the driver is already called "pci-dra7xx", so I guess there is no harm
> in having that name in platform data as well. That in itself should not
> preclude its use on other platforms later (although I agree having a
> generic name would be ideal).

Yeah seems OK to me. I still have some PM runtime related questions
though.. Will reply to the related patch chunk though.

Regards,

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

Patch
diff mbox

diff --git a/arch/arm/mach-omap2/pdata-quirks.c b/arch/arm/mach-omap2/pdata-quirks.c
index 5814477..f5a65fe 100644
--- a/arch/arm/mach-omap2/pdata-quirks.c
+++ b/arch/arm/mach-omap2/pdata-quirks.c
@@ -23,6 +23,7 @@ 
 #include <linux/platform_data/pinctrl-single.h>
 #include <linux/platform_data/iommu-omap.h>
 #include <linux/platform_data/wkup_m3.h>
+#include <linux/platform_data/pci-dra7xx.h>
 
 #include "common.h"
 #include "common-board-devices.h"
@@ -404,6 +405,14 @@  static void __init omap5_uevm_legacy_init(void)
 }
 #endif
 
+#ifdef CONFIG_SOC_DRA7XX
+static struct pci_dra7xx_platform_data dra7xx_pci_pdata = {
+	.reset_name = "pcie",
+	.assert_reset = omap_device_assert_hardreset,
+	.deassert_reset = omap_device_deassert_hardreset,
+};
+#endif
+
 static struct pcs_pdata pcs_pdata;
 
 void omap_pcs_legacy_init(int irq, void (*rearm)(void))
@@ -474,6 +483,8 @@  static struct of_dev_auxdata omap_auxdata_lookup[] __initdata = {
 #endif
 #ifdef CONFIG_SOC_DRA7XX
 	OF_DEV_AUXDATA("ti,dra7-padconf", 0x4a003400, "4a003400.pinmux", &pcs_pdata),
+	OF_DEV_AUXDATA("ti,dra7-pcie", 0x51000000, "51000000.pcie", &dra7xx_pci_pdata),
+	OF_DEV_AUXDATA("ti,dra7-pcie", 0x51800000, "51800000.pcie", &dra7xx_pci_pdata),
 #endif
 #ifdef CONFIG_SOC_AM43XX
 	OF_DEV_AUXDATA("ti,am437-padconf", 0x44e10800, "44e10800.pinmux", &pcs_pdata),
diff --git a/include/linux/platform_data/pci-dra7xx.h b/include/linux/platform_data/pci-dra7xx.h
new file mode 100644
index 0000000..a3bab6b
--- /dev/null
+++ b/include/linux/platform_data/pci-dra7xx.h
@@ -0,0 +1,29 @@ 
+/*
+ * pcie-dra7xx - Platform data for PCIe controller
+ *
+ * Copyright (C) 2016 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ * Authors: Kishon Vijay Abraham I <kishon@ti.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#ifndef __PCI_DRA7XX_H
+#define __PCI_DRA7XX_H
+
+/**
+ * struct pci_dra7xx_platform_data - platform data specific to pci in dra7xx
+ * @reset_name: name of the reset line
+ * @assert_reset: callback for performing assert reset operation
+ * @deassert_reset: callback for performing deassert reset operation
+ */
+struct pci_dra7xx_platform_data {
+	const char *reset_name;
+
+	int (*assert_reset)(struct platform_device *pdev, const char *name);
+	int (*deassert_reset)(struct platform_device *pdev, const char *name);
+};
+
+#endif /* __PCI_DRA7XX_H */