arm64: dts: Add the status property disable PCIe
Subsystems (7)
PATCH v2 1/6 arm64: dts: Add the status property disable PCIe
From: Bao Xiaowei <[email protected]>
Add the status property disable the PCIe, the property will be enable by bootloader.
---
v2:
- no change
arch/arm64/boot/dts/freescale/fsl-ls1012a.dtsi | 1 + arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 3 +++ arch/arm64/boot/dts/freescale/fsl-ls1046a.dtsi | 3 +++ arch/arm64/boot/dts/freescale/fsl-ls1088a.dtsi | 3 +++ arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi | 4 ++++ 5 files changed, 14 insertions(+), 0 deletions(-)
arch/arm64/boot/dts/freescale/fsl-ls1012a.dtsi +1 -0
@@ -496,6 +496,7 @@ <0000 0 0 2 &gic 0 111 IRQ_TYPE_LEVEL_HIGH>, <0000 0 0 3 &gic 0 112 IRQ_TYPE_LEVEL_HIGH>, <0000 0 0 4 &gic 0 113 IRQ_TYPE_LEVEL_HIGH>; + status = "disabled"; }; };
arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi +3 -0
@@ -683,6 +683,7 @@ <0000 0 0 2 &gic 0 111 0x4>, <0000 0 0 3 &gic 0 112 0x4>, <0000 0 0 4 &gic 0 113 0x4>; + status = "disabled"; }; pcie at 3500000 {
@@ -708,6 +709,7 @@ <0000 0 0 2 &gic 0 121 0x4>, <0000 0 0 3 &gic 0 122 0x4>, <0000 0 0 4 &gic 0 123 0x4>; + status = "disabled"; }; pcie at 3600000 {
@@ -733,6 +735,7 @@ <0000 0 0 2 &gic 0 155 0x4>, <0000 0 0 3 &gic 0 156 0x4>, <0000 0 0 4 &gic 0 157 0x4>; + status = "disabled"; }; };
arch/arm64/boot/dts/freescale/fsl-ls1046a.dtsi +3 -0
@@ -652,6 +652,7 @@ <0000 0 0 2 &gic GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>, <0000 0 0 3 &gic GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>, <0000 0 0 4 &gic GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>; + status = "disabled"; }; pcie at 3500000 {
@@ -677,6 +678,7 @@ <0000 0 0 2 &gic GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>, <0000 0 0 3 &gic GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>, <0000 0 0 4 &gic GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>; + status = "disabled"; }; pcie at 3600000 {
@@ -702,6 +704,7 @@ <0000 0 0 2 &gic GIC_SPI 154 IRQ_TYPE_LEVEL_HIGH>, <0000 0 0 3 &gic GIC_SPI 154 IRQ_TYPE_LEVEL_HIGH>, <0000 0 0 4 &gic GIC_SPI 154 IRQ_TYPE_LEVEL_HIGH>; + status = "disabled"; }; };
arch/arm64/boot/dts/freescale/fsl-ls1088a.dtsi +3 -0
@@ -533,6 +533,7 @@ <0000 0 0 2 &gic 0 0 0 110 IRQ_TYPE_LEVEL_HIGH>, <0000 0 0 3 &gic 0 0 0 111 IRQ_TYPE_LEVEL_HIGH>, <0000 0 0 4 &gic 0 0 0 112 IRQ_TYPE_LEVEL_HIGH>; + status = "disabled"; }; pcie at 3500000 {
@@ -557,6 +558,7 @@ <0000 0 0 2 &gic 0 0 0 115 IRQ_TYPE_LEVEL_HIGH>, <0000 0 0 3 &gic 0 0 0 116 IRQ_TYPE_LEVEL_HIGH>, <0000 0 0 4 &gic 0 0 0 117 IRQ_TYPE_LEVEL_HIGH>; + status = "disabled"; }; pcie at 3600000 {
@@ -581,6 +583,7 @@ <0000 0 0 2 &gic 0 0 0 120 IRQ_TYPE_LEVEL_HIGH>, <0000 0 0 3 &gic 0 0 0 121 IRQ_TYPE_LEVEL_HIGH>, <0000 0 0 4 &gic 0 0 0 122 IRQ_TYPE_LEVEL_HIGH>; + status = "disabled"; }; cluster1_core0_watchdog: wdt at c000000 {
arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi +4 -0
@@ -648,6 +648,7 @@ <0000 0 0 2 &gic 0 0 0 110 4>, <0000 0 0 3 &gic 0 0 0 111 4>, <0000 0 0 4 &gic 0 0 0 112 4>; + status = "disabled"; }; pcie2: pcie at 3500000 {
@@ -669,6 +670,7 @@ <0000 0 0 2 &gic 0 0 0 115 4>, <0000 0 0 3 &gic 0 0 0 116 4>, <0000 0 0 4 &gic 0 0 0 117 4>; + status = "disabled"; }; pcie3: pcie at 3600000 {
@@ -690,6 +692,7 @@ <0000 0 0 2 &gic 0 0 0 120 4>, <0000 0 0 3 &gic 0 0 0 121 4>, <0000 0 0 4 &gic 0 0 0 122 4>; + status = "disabled"; }; pcie4: pcie at 3700000 {
@@ -711,6 +714,7 @@ <0000 0 0 2 &gic 0 0 0 125 4>, <0000 0 0 3 &gic 0 0 0 126 4>, <0000 0 0 4 &gic 0 0 0 127 4>; + status = "disabled"; }; sata0: sata at 3200000 {
Signature · 1 line
1.7.1
PATCH v2 2/6 ARM: dts: ls1021a: Add the status property disable PCIe
Add the status property disable the PCIe, the property will be enable by bootloader.
---
v2:
- no change
arch/arm/boot/dts/ls1021a.dtsi | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-)
arch/arm/boot/dts/ls1021a.dtsi +2 -0
@@ -736,6 +736,7 @@ <0000 0 0 2 &gic GIC_SPI 188 IRQ_TYPE_LEVEL_HIGH>, <0000 0 0 3 &gic GIC_SPI 190 IRQ_TYPE_LEVEL_HIGH>, <0000 0 0 4 &gic GIC_SPI 192 IRQ_TYPE_LEVEL_HIGH>; + status = "disabled"; }; pcie at 3500000 {
@@ -759,6 +760,7 @@ <0000 0 0 2 &gic GIC_SPI 189 IRQ_TYPE_LEVEL_HIGH>, <0000 0 0 3 &gic GIC_SPI 191 IRQ_TYPE_LEVEL_HIGH>, <0000 0 0 4 &gic GIC_SPI 193 IRQ_TYPE_LEVEL_HIGH>; + status = "disabled"; }; can0: can at 2a70000 {
Signature · 1 line
1.7.1
Shawn Guo
AppliedRe: [PATCHv2 2/6] ARM: dts: ls1021a: Add the status property disable PCIe
Quoted 4 lines · Xiaowei Bao
Add the status property disable the PCIe, the property will be enable by bootloader.
Signed-off-by Xiaowei Bao <[email protected]>
Applied, thanks.
Xiaowei Bao
AppliedRE: [PATCHv2 2/6] ARM: dts: ls1021a: Add the status property disable PCIe
Hi Shanwn,
Thanks a lot.
Best regards
Xiaowei
-----Original Message-----
From: Shawn Guo <[email protected]>
Sent: 2018?11?16? 10:51
To: Xiaowei Bao <[email protected]>
Cc: bhelgaas at google.com; robh+dt at kernel.org; mark.rutland at arm.com; Leo Li <[email protected]>; kishon at ti.com; lorenzo.pieralisi at arm.com; arnd at arndb.de; gregkh at linuxfoundation.org; M.h. Lian <[email protected]>; Mingkai Hu <[email protected]>; Roy Zang <[email protected]>; kstewart at linuxfoundation.org; cyrille.pitchen at free-electrons.com; pombredanne at nexb.com; shawn.lin at rock-chips.com; niklas.cassel at axis.com; linux-pci at vger.kernel.org; devicetree at vger.kernel.org; linux-kernel at vger.kernel.org; linux-arm-kernel at lists.infradead.org; linuxppc-dev at lists.ozlabs.org
Subject: Re: [PATCHv2 2/6] ARM: dts: ls1021a: Add the status property disable PCIe
Quoted 4 lines · Xiaowei Bao
Add the status property disable the PCIe, the property will be enable by bootloader.
Signed-off-by Xiaowei Bao <[email protected]>
Applied, thanks.
PATCH v2 3/6 PCI: layerscape: Add the EP mode support
In reply to Xiaowei BaoAdd the EP mode support.
---
v2:
- Add the SoC specific compatibles.
.../devicetree/bindings/pci/layerscape-pci.txt | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-)
Documentation/devicetree/bindings/pci/layerscape-pci.txt +3 -0
@@ -13,12 +13,15 @@ information. Required properties: - compatible: should contain the platform identifier such as: + RC mode: "fsl,ls1021a-pcie", "snps,dw-pcie" "fsl,ls2080a-pcie", "fsl,ls2085a-pcie", "snps,dw-pcie" "fsl,ls2088a-pcie" "fsl,ls1088a-pcie" "fsl,ls1046a-pcie" "fsl,ls1012a-pcie" + EP mode: + "fsl,ls1046a-pcie-ep", "fsl,ls-pcie-ep" - reg: base addresses and lengths of the PCIe controller register blocks. - interrupts: A list of interrupt outputs of the controller. Must contain an entry for each entry in the interrupt-names property.
Signature · 1 line
1.7.1
Re: [PATCHv2 3/6] PCI: layerscape: Add the EP mode support
Quoted 10 lines · Xiaowei Bao
Add the EP mode support.
Signed-off-by Xiaowei Bao <[email protected]>---
v2:
- Add the SoC specific compatibles..../devicetree/bindings/pci/layerscape-pci.txt | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-)
Re: [PATCHv2 3/6] PCI: layerscape: Add the EP mode support
In reply to Xiaowei BaoQuoted 9 lines · Xiaowei Bao
Add the EP mode support.
Signed-off-by Xiaowei Bao <[email protected]>---
v2:
- Add the SoC specific compatibles..../devicetree/bindings/pci/layerscape-pci.txt | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-)
Wrong commit $SUBJECT, this is not PCI code, it is a DT binding update, I will have a look at the rest of the series to see if I can update this patch or you will do it with the next respin.
Lorenzo
Quoted 23 lines
Documentation/devicetree/bindings/pci/layerscape-pci.txt +3
-0@@ -13,12 +13,15 @@ information. Required properties: - compatible: should contain the platform identifier such as: + RC mode: "fsl,ls1021a-pcie", "snps,dw-pcie" "fsl,ls2080a-pcie", "fsl,ls2085a-pcie", "snps,dw-pcie" "fsl,ls2088a-pcie" "fsl,ls1088a-pcie" "fsl,ls1046a-pcie" "fsl,ls1012a-pcie" + EP mode: + "fsl,ls1046a-pcie-ep", "fsl,ls-pcie-ep" - reg: base addresses and lengths of the PCIe controller register blocks. - interrupts: A list of interrupt outputs of the controller. Must contain an entry for each entry in the interrupt-names property.Signature · 1 line
1.7.1
RE: [PATCHv2 3/6] PCI: layerscape: Add the EP mode support
Hi Lorenzo,
-----Original Message-----
From: Lorenzo Pieralisi <[email protected]>
Sent: 2018年11月30日 18:55
To: Xiaowei Bao <[email protected]>
Cc: [email protected]; [email protected]; [email protected]; [email protected]; Leo Li <[email protected]>; [email protected]; [email protected]; [email protected]; M.h. Lian <[email protected]>; Mingkai Hu <[email protected]>; Roy Zang <[email protected]>; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]
Subject: Re: [PATCHv2 3/6] PCI: layerscape: Add the EP mode support
Quoted 9 lines · Xiaowei Bao
Add the EP mode support.
Signed-off-by Xiaowei Bao <[email protected]>---
v2:
- Add the SoC specific compatibles..../devicetree/bindings/pci/layerscape-pci.txt | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-)
Wrong commit $SUBJECT, this is not PCI code, it is a DT binding update, I will have a look at the rest of the series to see if I can update this patch or you will do it with the next respin.
Lorenzo
[Xiaowei Bao] HI Lorenzo, thanks a lot, I will send V3 patch to modify the commits.
Quoted 24 lines
Documentation/devicetree/bindings/pci/layerscape-pci.txt +3
-1@@ -13,12 +13,15 @@ information. Required properties: - compatible: should contain the platform identifier such as: + RC mode: "fsl,ls1021a-pcie", "snps,dw-pcie" "fsl,ls2080a-pcie", "fsl,ls2085a-pcie", "snps,dw-pcie" "fsl,ls2088a-pcie" "fsl,ls1088a-pcie" "fsl,ls1046a-pcie" "fsl,ls1012a-pcie" + EP mode: + "fsl,ls1046a-pcie-ep", "fsl,ls-pcie-ep" - reg: base addresses and lengths of the PCIe controller register blocks. - interrupts: A list of interrupt outputs of the controller. Must contain an entry for each entry in the interrupt-names property. --1.7.1
PATCH v2 4/6 arm64: dts: Add the PCIE EP node in dts
In reply to Xiaowei BaoAdd the PCIE EP node in dts for ls1046a.
---
v2:
- Add the SoC specific compatibles.
arch/arm64/boot/dts/freescale/fsl-ls1046a.dtsi | 32 ++++++++++++++++++++++++ 1 files changed, 32 insertions(+), 0 deletions(-)
arch/arm64/boot/dts/freescale/fsl-ls1046a.dtsi +32 -0
@@ -655,6 +655,17 @@ status = "disabled"; }; + pcie_ep at 3400000 { + compatible = "fsl,ls1046a-pcie-ep","fsl,ls-pcie-ep"; + reg = <0x00 0x03400000 0x0 0x00100000 + 0x40 0x00000000 0x8 0x00000000>; + reg-names = "regs", "addr_space"; + num-ib-windows = <6>; + num-ob-windows = <6>; + num-lanes = <2>; + status = "disabled"; + }; + pcie at 3500000 { compatible = "fsl,ls1046a-pcie", "snps,dw-pcie"; reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */
@@ -681,6 +692,17 @@ status = "disabled"; }; + pcie_ep@3500000 { + compatible = "fsl,ls1046a-pcie-ep","fsl,ls-pcie-ep"; + reg = <0x00 0x03500000 0x0 0x00100000 + 0x48 0x00000000 0x8 0x00000000>; + reg-names = "regs", "addr_space"; + num-ib-windows = <6>; + num-ob-windows = <6>; + num-lanes = <2>; + status = "disabled"; + }; + pcie at 3600000 { compatible = "fsl,ls1046a-pcie", "snps,dw-pcie"; reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */
@@ -707,6 +729,16 @@ status = "disabled"; }; + pcie_ep@3600000 { + compatible = "fsl,ls1046a-pcie-ep", "fsl,ls-pcie-ep"; + reg = <0x00 0x03600000 0x0 0x00100000 + 0x50 0x00000000 0x8 0x00000000>; + reg-names = "regs", "addr_space"; + num-ib-windows = <6>; + num-ob-windows = <6>; + num-lanes = <2>; + status = "disabled"; + }; }; reserved-memory {
Signature · 1 line
1.7.1
PATCH v2 5/6 pci: layerscape: Add the EP mode support.
In reply to Xiaowei BaoAdd the PCIe EP mode support for layerscape platform.
---
v2:
- remove the EP mode check function.
drivers/pci/controller/dwc/Makefile | 2 +- drivers/pci/controller/dwc/pci-layerscape-ep.c | 147 ++++++++++++++++++++++++ 2 files changed, 148 insertions(+), 1 deletions(-) create mode 100644 drivers/pci/controller/dwc/pci-layerscape-ep.c
drivers/pci/controller/dwc/Makefile +1 -1
@@ -8,7 +8,7 @@ obj-$(CONFIG_PCI_EXYNOS) += pci-exynos.o obj-$(CONFIG_PCI_IMX6) += pci-imx6.o obj-$(CONFIG_PCIE_SPEAR13XX) += pcie-spear13xx.o obj-$(CONFIG_PCI_KEYSTONE) += pci-keystone-dw.o pci-keystone.o -obj-$(CONFIG_PCI_LAYERSCAPE) += pci-layerscape.o +obj-$(CONFIG_PCI_LAYERSCAPE) += pci-layerscape.o pci-layerscape-ep.o obj-$(CONFIG_PCIE_QCOM) += pcie-qcom.o obj-$(CONFIG_PCIE_ARMADA_8K) += pcie-armada8k.o obj-$(CONFIG_PCIE_ARTPEC6) += pcie-artpec6.o
drivers/pci/controller/dwc/pci-layerscape-ep.c new file +147 -0
147 lines not on this page · raw message
Signature · 1 line
1.7.1
Re: [PATCHv2 5/6] pci: layerscape: Add the EP mode support.
Quoted 46 lines · Xiaowei Bao
Add the PCIe EP mode support for layerscape platform.
Signed-off-by Xiaowei Bao <[email protected]>---
v2:
- remove the EP mode check function.drivers/pci/controller/dwc/Makefile | 2 +- drivers/pci/controller/dwc/pci-layerscape-ep.c | 147 ++++++++++++++++++++++++ 2 files changed, 148 insertions(+), 1 deletions(-) create mode 100644 drivers/pci/controller/dwc/pci-layerscape-ep.cdrivers/pci/controller/dwc/Makefile +1
-1@@ -8,7 +8,7 @@ obj-$(CONFIG_PCI_EXYNOS) += pci-exynos.o obj-$(CONFIG_PCI_IMX6) += pci-imx6.o obj-$(CONFIG_PCIE_SPEAR13XX) += pcie-spear13xx.o obj-$(CONFIG_PCI_KEYSTONE) += pci-keystone-dw.o pci-keystone.o -obj-$(CONFIG_PCI_LAYERSCAPE) += pci-layerscape.o +obj-$(CONFIG_PCI_LAYERSCAPE) += pci-layerscape.o pci-layerscape-ep.o obj-$(CONFIG_PCIE_QCOM) += pcie-qcom.o obj-$(CONFIG_PCIE_ARMADA_8K) += pcie-armada8k.o obj-$(CONFIG_PCIE_ARTPEC6) += pcie-artpec6.odrivers/pci/controller/dwc/pci-layerscape-ep.c new file +15
-0@@ -0,0 +1,147 @@ +// SPDX-License-Identifier: GPL-2.0 +/* +* PCIe controller EP driver for Freescale Layerscape SoCs +* +* Copyright (C) 2018 NXP Semiconductor. +* +* Author: Xiaowei Bao <[email protected]> +*/ + +#include <linux/kernel.h> +#include <linux/init.h> +#include <linux/of_pci.h> +#include <linux/of_platform.h> +#include <linux/of_address.h> +#include <linux/pci.h>
drivers/pci/controller/dwc/pci-layerscape-ep.c line 25
Quoted 10 lines
drivers/pci/controller/dwc/pci-layerscape-ep.c new file +10
-0+#include <linux/platform_device.h> +#include <linux/resource.h> + +#include "pcie-designware.h" + +#define PCIE_DBI2_OFFSET 0x1000/* DBI2 base address*/ + +struct ls_pcie_ep { +struct dw_pcie *pci; +};
I am not really sure why you need an additional struct.
drivers/pci/controller/dwc/pci-layerscape-ep.c line 27
Quoted 1 line
drivers/pci/controller/dwc/pci-layerscape-ep.c new file +1
-0+#define to_ls_pcie_ep (x) dev_get_drvdata((x)->dev)
Unused.
Quoted 34 lines
drivers/pci/controller/dwc/pci-layerscape-ep.c new file +34
-0+ +static int ls_pcie_establish_link (struct dw_pcie *pci) +{ +return 0 ; +} + +static const struct dw_pcie_ops ls_pcie_ep_ops = { + .start_link = ls_pcie_establish_link, +}; + +static const struct of_device_id ls_pcie_ep_of_match[] = { + { .compatible ="fsl,ls-pcie-ep" ,}, + { }, +}; + +static void ls_pcie_ep_init (struct dw_pcie_ep *ep) +{ +struct dw_pcie *pci =to_dw_pcie_from_ep (ep); +struct pci_epc *epc = ep->epc; +enum pci_barno bar; + +for (bar =BAR_0 ; bar <=BAR_5 ; bar++) +dw_pcie_ep_reset_bar (pci, bar); + + epc->features |=EPC_FEATURE_NO_LINKUP_NOTIFIER ; +} + +static int ls_pcie_ep_raise_irq (struct dw_pcie_ep *ep,u8 func_no, +enum pci_epc_irq_type type,u16 interrupt_num) +{ +struct dw_pcie *pci =to_dw_pcie_from_ep (ep); + +switch (type) { +case PCI_EPC_IRQ_LEGACY :
drivers/pci/controller/dwc/pci-layerscape-ep.c line 71
Quoted 10 lines
drivers/pci/controller/dwc/pci-layerscape-ep.c new file +10
-0+return dw_pcie_ep_raise_legacy_irq (ep, func_no); +case PCI_EPC_IRQ_MSI : +return dw_pcie_ep_raise_msi_irq (ep, func_no, interrupt_num); +case PCI_EPC_IRQ_MSIX : +return dw_pcie_ep_raise_msix_irq (ep, func_no, interrupt_num); +default : +dev_err (pci->dev,"UNKNOWN IRQ type\n" ); + } + +return 0 ;
So if it falls through to the default, we log an error but return 0 ? This does not make much sense.
I know you probably copy/pasted code from DWC platform, that code must be fixed too I suppose.
Lorenzo
Quoted 79 lines
drivers/pci/controller/dwc/pci-layerscape-ep.c new file +76
-0+} + +static struct dw_pcie_ep_ops pcie_ep_ops = { + .ep_init = ls_pcie_ep_init, + .raise_irq = ls_pcie_ep_raise_irq, +}; + +static int __init ls_add_pcie_ep (struct ls_pcie_ep *pcie, +struct platform_device *pdev) +{ +struct dw_pcie *pci = pcie->pci; +struct device *dev = pci->dev; +struct dw_pcie_ep *ep; +struct resource *res; +int ret; + + ep = &pci->ep; + ep->ops = &pcie_ep_ops; + + res =platform_get_resource_byname (pdev,IORESOURCE_MEM ,"addr_space" ); +if (!res) +return -EINVAL ; + + ep->phys_base = res->start; + ep->addr_size =resource_size (res); + + ret =dw_pcie_ep_init (ep); +if (ret) { +dev_err (dev,"failed to initialize endpoint\n" ); +return ret; + } + +return 0 ; +} + +static int __init ls_pcie_ep_probe (struct platform_device *pdev) +{ +struct device *dev = &pdev->dev; +struct dw_pcie *pci; +struct ls_pcie_ep *pcie; +struct resource *dbi_base; +int ret; + + pcie =devm_kzalloc (dev,sizeof (*pcie),GFP_KERNEL ); +if (!pcie) +return -ENOMEM ; + + pci =devm_kzalloc (dev,sizeof (*pci),GFP_KERNEL ); +if (!pci) +return -ENOMEM ; + + dbi_base =platform_get_resource_byname (pdev,IORESOURCE_MEM ,"regs" ); + pci->dbi_base =devm_pci_remap_cfg_resource (dev, dbi_base); +if (IS_ERR (pci->dbi_base)) +return PTR_ERR (pci->dbi_base); + + pci->dbi_base2 = pci->dbi_base +PCIE_DBI2_OFFSET ; + pci->dev = dev; + pci->ops = &ls_pcie_ep_ops; + pcie->pci = pci; + +platform_set_drvdata (pdev, pcie); + + ret =ls_add_pcie_ep (pcie, pdev); + +return ret; +} + +static struct platform_driver ls_pcie_ep_driver = { + .driver = { + .name ="layerscape-pcie-ep" , + .of_match_table = ls_pcie_ep_of_match, + .suppress_bind_attrs = true, + }, +}; +builtin_platform_driver_probe (ls_pcie_ep_driver, ls_pcie_ep_probe);Signature · 1 line
1.7.1
RE: [PATCHv2 5/6] pci: layerscape: Add the EP mode support.
Hi Lorenzo,
-----Original Message-----
From: Lorenzo Pieralisi <[email protected]>
Sent: 2018年12月1日 0:22
To: Xiaowei Bao <[email protected]>
Cc: [email protected]; [email protected]; [email protected]; [email protected]; Leo Li <[email protected]>; [email protected]; [email protected]; [email protected]; M.h. Lian <[email protected]>; Mingkai Hu <[email protected]>; Roy Zang <[email protected]>; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]
Subject: Re: [PATCHv2 5/6] pci: layerscape: Add the EP mode support.
Quoted 48 lines · Xiaowei Bao
Add the PCIe EP mode support for layerscape platform.
Signed-off-by Xiaowei Bao <[email protected]>---
v2:
- remove the EP mode check function.drivers/pci/controller/dwc/Makefile | 2 +- drivers/pci/controller/dwc/pci-layerscape-ep.c | 147 ++++++++++++++++++++++++ 2 files changed, 148 insertions(+), 1 deletions(-) create mode100644
drivers/pci/controller/dwc/pci-layerscape-ep.cdrivers/pci/controller/dwc/Makefile +1
-1@@ -8,7 +8,7 @@ obj-$(CONFIG_PCI_EXYNOS) += pci-exynos.o obj-$(CONFIG_PCI_IMX6) += pci-imx6.o obj-$(CONFIG_PCIE_SPEAR13XX) += pcie-spear13xx.o obj-$(CONFIG_PCI_KEYSTONE) += pci-keystone-dw.o pci-keystone.o -obj-$(CONFIG_PCI_LAYERSCAPE) += pci-layerscape.o +obj-$(CONFIG_PCI_LAYERSCAPE) += pci-layerscape.o pci-layerscape-ep.o obj-$(CONFIG_PCIE_QCOM) += pcie-qcom.o obj-$(CONFIG_PCIE_ARMADA_8K) += pcie-armada8k.o obj-$(CONFIG_PCIE_ARTPEC6) += pcie-artpec6.o diff --git
a/drivers/pci/controller/dwc/pci-layerscape-ep.cb/drivers/pci/controller/dwc/pci-layerscape-ep.c
new file mode 100644
index 0000000..289618bdrivers/pci/controller/dwc/pci-layerscape-ep.c new file +14
-0@@ -0,0 +1,147 @@ +// SPDX-License-Identifier: GPL-2.0 +/* +* PCIe controller EP driver for Freescale Layerscape SoCs +* +* Copyright (C) 2018 NXP Semiconductor. +* +* Author: Xiaowei Bao <[email protected]> */ + +#include <linux/kernel.h> +#include <linux/init.h> +#include <linux/of_pci.h> +#include <linux/of_platform.h> +#include <linux/of_address.h> +#include <linux/pci.h>
drivers/pci/controller/dwc/pci-layerscape-ep.c line 24
Quoted 10 lines
drivers/pci/controller/dwc/pci-layerscape-ep.c new file +10
-0+#include <linux/platform_device.h> +#include <linux/resource.h> + +#include "pcie-designware.h" + +#define PCIE_DBI2_OFFSET 0x1000/* DBI2 base address*/ + +struct ls_pcie_ep { +struct dw_pcie *pci; +};
I am not really sure why you need an additional struct.
[Xiaowei Bao] thanks a lot for your comments, I defined this structure in order to add NXP's new chip PCIe EP driver in the future, because other platforms may have some errata to be solved. The structure of defining an LX platform will be more flexible. I can use the driver of the DW platform directly. Just need to modify the DTS, but for the future development of all NXP platform EP drivers, thus adding a new file.
drivers/pci/controller/dwc/pci-layerscape-ep.c line 27
Quoted 1 line
drivers/pci/controller/dwc/pci-layerscape-ep.c new file +1
-0+#define to_ls_pcie_ep (x) dev_get_drvdata((x)->dev)
Unused.
Quoted 29 lines
drivers/pci/controller/dwc/pci-layerscape-ep.c new file +29
-0+ +static int ls_pcie_establish_link (struct dw_pcie *pci) { +return 0 ; +} + +static const struct dw_pcie_ops ls_pcie_ep_ops = { + .start_link = ls_pcie_establish_link, }; + +static const struct of_device_id ls_pcie_ep_of_match[] = { + { .compatible ="fsl,ls-pcie-ep" ,}, + { }, +}; + +static void ls_pcie_ep_init (struct dw_pcie_ep *ep) { +struct dw_pcie *pci =to_dw_pcie_from_ep (ep); +struct pci_epc *epc = ep->epc; +enum pci_barno bar; + +for (bar =BAR_0 ; bar <=BAR_5 ; bar++) +dw_pcie_ep_reset_bar (pci, bar); + + epc->features |=EPC_FEATURE_NO_LINKUP_NOTIFIER ; } + +static int ls_pcie_ep_raise_irq (struct dw_pcie_ep *ep,u8 func_no, +enum pci_epc_irq_type type,u16 interrupt_num) { +struct dw_pcie *pci =to_dw_pcie_from_ep (ep); + +switch (type) { +case PCI_EPC_IRQ_LEGACY :
drivers/pci/controller/dwc/pci-layerscape-ep.c line 71
Quoted 10 lines
drivers/pci/controller/dwc/pci-layerscape-ep.c new file +10
-0+return dw_pcie_ep_raise_legacy_irq (ep, func_no); +case PCI_EPC_IRQ_MSI : +return dw_pcie_ep_raise_msi_irq (ep, func_no, interrupt_num); +case PCI_EPC_IRQ_MSIX : +return dw_pcie_ep_raise_msix_irq (ep, func_no, interrupt_num); +default : +dev_err (pci->dev,"UNKNOWN IRQ type\n" ); + } + +return 0 ;
So if it falls through to the default, we log an error but return 0 ? This does not make much sense.
I know you probably copy/pasted code from DWC platform, that code must be fixed too I suppose.
Lorenzo
[Xiaowei Bao] Thanks a lot for your comments, I will send the v3 patch fix it.
Quoted 78 lines
drivers/pci/controller/dwc/pci-layerscape-ep.c new file +75
-1+} + +static struct dw_pcie_ep_ops pcie_ep_ops = { + .ep_init = ls_pcie_ep_init, + .raise_irq = ls_pcie_ep_raise_irq, +}; + +static int __init ls_add_pcie_ep (struct ls_pcie_ep *pcie, +struct platform_device *pdev) +{ +struct dw_pcie *pci = pcie->pci; +struct device *dev = pci->dev; +struct dw_pcie_ep *ep; +struct resource *res; +int ret; + + ep = &pci->ep; + ep->ops = &pcie_ep_ops; + + res =platform_get_resource_byname (pdev,IORESOURCE_MEM ,"addr_space" ); +if (!res) +return -EINVAL ; + + ep->phys_base = res->start; + ep->addr_size =resource_size (res); + + ret =dw_pcie_ep_init (ep); +if (ret) { +dev_err (dev,"failed to initialize endpoint\n" ); +return ret; + } + +return 0 ; +} + +static int __init ls_pcie_ep_probe (struct platform_device *pdev) { +struct device *dev = &pdev->dev; +struct dw_pcie *pci; +struct ls_pcie_ep *pcie; +struct resource *dbi_base; +int ret; + + pcie =devm_kzalloc (dev,sizeof (*pcie),GFP_KERNEL ); +if (!pcie) +return -ENOMEM ; + + pci =devm_kzalloc (dev,sizeof (*pci),GFP_KERNEL ); +if (!pci) +return -ENOMEM ; + + dbi_base =platform_get_resource_byname (pdev,IORESOURCE_MEM ,"regs" ); + pci->dbi_base =devm_pci_remap_cfg_resource (dev, dbi_base); +if (IS_ERR (pci->dbi_base)) +return PTR_ERR (pci->dbi_base); + + pci->dbi_base2 = pci->dbi_base +PCIE_DBI2_OFFSET ; + pci->dev = dev; + pci->ops = &ls_pcie_ep_ops; + pcie->pci = pci; + +platform_set_drvdata (pdev, pcie); + + ret =ls_add_pcie_ep (pcie, pdev); + +return ret; +} + +static struct platform_driver ls_pcie_ep_driver = { + .driver = { + .name ="layerscape-pcie-ep" , + .of_match_table = ls_pcie_ep_of_match, + .suppress_bind_attrs = true, + }, +}; +builtin_platform_driver_probe (ls_pcie_ep_driver, ls_pcie_ep_probe); --1.7.1
PATCH v2 6/6 misc: pci_endpoint_test: Add the layerscape EP device support
In reply to Xiaowei BaoAdd the layerscape EP device support in pci_endpoint_test driver.
---
v2:
- no change
drivers/misc/pci_endpoint_test.c | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-)
drivers/misc/pci_endpoint_test.c +2 -0
@@ -788,6 +788,8 @@ static void pci_endpoint_test_remove(struct pci_dev *pdev)static const struct pci_device_id pci_endpoint_test_tbl[] = { {PCI_DEVICE (PCI_VENDOR_ID_TI , PCI_DEVICE_ID_TI_DRA74x) }, {PCI_DEVICE (PCI_VENDOR_ID_TI , PCI_DEVICE_ID_TI_DRA72x) }, +/* 0x81c0: The device id of ls1046a in NXP. */ + {PCI_DEVICE (PCI_VENDOR_ID_FREESCALE ,0x81c0 ) }, {PCI_DEVICE (PCI_VENDOR_ID_SYNOPSYS ,0xedda ) }, { } };
Signature · 1 line
1.7.1
Quoted 6 lines · Xiaowei Bao
From: Bao Xiaowei <[email protected]>
Add the status property disable the PCIe, the property will be enable by bootloader.
Signed-off-by Bao Xiaowei <[email protected]>
Changed prefix to 'arm64: dts: fsl: ...' and applied the patch.
Shawn