PCI: Add Intel PCIe Driver and respective dt-binding yaml file
Subsystems (6)
v10 cover PCI: Add Intel PCIe Driver and respective dt-binding yaml file
Intel PCIe is Synopsys based controller. Intel PCIe driver uses DesignWare PCIe framework for host initialization and register configurations.
Changes on v10:
Rebase the patches on mainline v5.4
Squashed the patch that fixes the below issue to this patch series.
WARNING: unmet direct dependencies detected for PCIE_DW_HOST
Depends on [n]: PCI [=y] && PCI_MSI_IRQ_DOMAIN [=n]
Selected by [y]:
- PCIE_INTEL_GW [=y] && PCI [=y] && OF [=y] && (X86 [=y] || COMPILE_TEST [=n])
"reportedby Randy Dunlap <[email protected]>"
Dilip Kota (3):
dt-bindings: PCI: intel: Add YAML schemas for the PCIe RC controller
PCI: dwc: intel: PCIe RC controller driver
PCI: artpec6: Configure FTS with dwc helper function
.../devicetree/bindings/pci/intel-gw-pcie.yaml | 138 ++++++ drivers/pci/controller/dwc/Kconfig | 11 + drivers/pci/controller/dwc/Makefile | 1 + drivers/pci/controller/dwc/pcie-artpec6.c | 8 +- drivers/pci/controller/dwc/pcie-designware.c | 57 +++ drivers/pci/controller/dwc/pcie-designware.h | 12 + drivers/pci/controller/dwc/pcie-intel-gw.c | 545 +++++++++++++++++++++ include/uapi/linux/pci_regs.h | 1 + 8 files changed, 766 insertions(+), 7 deletions(-) create mode 100644 Documentation/devicetree/bindings/pci/intel-gw-pcie.yaml create mode 100644 drivers/pci/controller/dwc/pcie-intel-gw.c
Signature · 1 line
2.11.0
PATCH v10 1/3 dt-bindings: PCI: intel: Add YAML schemas for the PCIe RC controller
Add YAML schemas for PCIe RC controller on Intel Gateway SoCs which is Synopsys DesignWare based PCIe core.
---
Changes on v10:
No change.
.../devicetree/bindings/pci/intel-gw-pcie.yaml | 138 +++++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 Documentation/devicetree/bindings/pci/intel-gw-pcie.yaml
Documentation/devicetree/bindings/pci/intel-gw-pcie.yaml new file +138 -0
@@ -0,0 +1,138 @@ +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/pci/intel-gw-pcie.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: PCIe RC controller on Intel Gateway SoCs + +maintainers: + - Dilip Kota <[email protected]> + +properties: + compatible: + items: + - const: intel,lgm-pcie + - const: snps,dw-pcie + + device_type: + const: pci + + "#address-cells": + const: 3 + + "#size-cells": + const: 2 + + reg: + items: + - description: Controller control and status registers. + - description: PCIe configuration registers. + - description: Controller application registers. + + reg-names: + items: + - const: dbi + - const: config + - const: app + + ranges: + maxItems: 1 + + resets: + maxItems: 1 + + clocks: + maxItems: 1 + + phys: + maxItems: 1 + + phy-names: + const: pcie + + reset-gpios: + maxItems: 1 + + linux,pci-domain: true + + num-lanes: + maximum: 2 + description: Number of lanes to use for this port. + + '#interrupt-cells': + const: 1 + + interrupt-map-mask: + description: Standard PCI IRQ mapping properties. + + interrupt-map: + description: Standard PCI IRQ mapping properties. + + max-link-speed: + description: Specify PCI Gen for link capability. + allOf: + - $ref: /schemas/types.yaml#/definitions/uint32 + - enum: [ 1, 2, 3, 4 ] + - default: 1 + + bus-range: + description: Range of bus numbers associated with this controller. + + reset-assert-ms: + description: | + Delay after asserting reset to the PCIe device. + maximum: 500 + default: 100 + +required: + - compatible + - device_type + - "#address-cells" + - "#size-cells" + - reg + - reg-names + - ranges + - resets + - clocks + - phys + - phy-names + - reset-gpios + - '#interrupt-cells' + - interrupt-map + - interrupt-map-mask + +additionalProperties: false + +examples: + - | + #include <dt-bindings/gpio/gpio.h> + #include <dt-bindings/clock/intel,lgm-clk.h> + pcie10: pcie@d0e00000 { + compatible = "intel,lgm-pcie", "snps,dw-pcie"; + device_type = "pci"; + #address-cells = <3>; + #size-cells = <2>; + reg = <0xd0e00000 0x1000>, + <0xd2000000 0x800000>, + <0xd0a41000 0x1000>; + reg-names = "dbi", "config", "app"; + linux,pci-domain = <0>; + max-link-speed = <4>; + bus-range = <0x00 0x08>; + interrupt-parent = <&ioapic1>; + #interrupt-cells = <1>; + interrupt-map-mask = <0 0 0 0x7>; + interrupt-map = <0 0 0 1 &ioapic1 27 1>, + <0 0 0 2 &ioapic1 28 1>, + <0 0 0 3 &ioapic1 29 1>, + <0 0 0 4 &ioapic1 30 1>; + ranges = <0x02000000 0 0xd4000000 0xd4000000 0 0x04000000>; + resets = <&rcu0 0x50 0>; + clocks = <&cgu0 LGM_GCLK_PCIE10>; + phys = <&cb0phy0>; + phy-names = "pcie"; + reset-assert-ms = <500>; + reset-gpios = <&gpio0 3 GPIO_ACTIVE_LOW>; + num-lanes = <2>; + };
Signature · 1 line
2.11.0
PATCH v10 2/3 PCI: dwc: intel: PCIe RC controller driver
In reply to Dilip KotaAdd support to PCIe RC controller on Intel Gateway SoCs. PCIe controller is based of Synopsys DesignWare PCIe core.
Intel PCIe driver requires Upconfigure support, Fast Training Sequence and link speed configurations. So adding the respective helper functions in the PCIe DesignWare framework.
It also programs hardware autonomous speed during speed configuration so defining it in pci_regs.h.
Also, mark Intel PCIe driver depends on MSI IRQ Domain as Synopsys DesignWare framework depends on the PCI_MSI_IRQ_DOMAIN.
---
Changes on v10:
Squashed the Intel PCIe driver depends on MSI IRQ Domain patch to this patch.
drivers/pci/controller/dwc/Kconfig | 11 + drivers/pci/controller/dwc/Makefile | 1 + drivers/pci/controller/dwc/pcie-designware.c | 57 +++ drivers/pci/controller/dwc/pcie-designware.h | 12 + drivers/pci/controller/dwc/pcie-intel-gw.c | 545 +++++++++++++++++++++++++++ include/uapi/linux/pci_regs.h | 1 + 6 files changed, 627 insertions(+) create mode 100644 drivers/pci/controller/dwc/pcie-intel-gw.c
drivers/pci/controller/dwc/Kconfig +11 -0
@@ -209,6 +209,17 @@ config PCIE_ARTPEC6_EP Enables support for the PCIe controller in the ARTPEC-6 SoC to work in endpoint mode. This uses the DesignWare core. +config PCIE_INTEL_GW + bool "Intel Gateway PCIe host controller support" + depends on OF && (X86 || COMPILE_TEST) + depends on PCI_MSI_IRQ_DOMAIN + select PCIE_DW_HOST + help + Say 'Y' here to enable PCIe Host controller support on Intel + Gateway SoCs. + The PCIe controller uses the DesignWare core plus Intel-specific + hardware wrappers. + config PCIE_KIRIN depends on OF && (ARM64 || COMPILE_TEST) bool "HiSilicon Kirin series SoCs PCIe controllers"
drivers/pci/controller/dwc/Makefile +1 -0
@@ -13,6 +13,7 @@ obj-$(CONFIG_PCI_LAYERSCAPE_EP) += 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 +obj-$(CONFIG_PCIE_INTEL_GW) += pcie-intel-gw.o obj-$(CONFIG_PCIE_KIRIN) += pcie-kirin.o obj-$(CONFIG_PCIE_HISI_STB) += pcie-histb.o obj-$(CONFIG_PCI_MESON) += pci-meson.o
drivers/pci/controller/dwc/pcie-designware.c +57 -0
69 lines not on this page · raw message
drivers/pci/controller/dwc/pcie-designware.h +12 -0
@@ -30,7 +30,12 @@#define LINK_WAIT_IATU 9/* Synopsys-specific PCIe configuration registers */ +#define PCIE_PORT_AFR 0x70C +#define PORT_AFR_N_FTS_MASK GENMASK(15, 8) +#define PORT_AFR_CC_N_FTS_MASK GENMASK(23, 16) +#define PCIE_PORT_LINK_CONTROL 0x710 +#define PORT_LINK_DLL_LINK_EN BIT(5)#define PORT_LINK_MODE_MASK GENMASK(21, 16)#define PORT_LINK_MODE (n) FIELD_PREP(PORT_LINK_MODE_MASK, n)#define PORT_LINK_MODE_1_LANES PORT_LINK_MODE(0x1)
@@ -46,6 +51,7 @@#define PCIE_PORT_DEBUG1_LINK_IN_TRAINING BIT(29)#define PCIE_LINK_WIDTH_SPEED_CONTROL 0x80C +#define PORT_LOGIC_N_FTS_MASK GENMASK(7, 0)#define PORT_LOGIC_SPEED_CHANGE BIT(17)#define PORT_LOGIC_LINK_WIDTH_MASK GENMASK(12, 8)#define PORT_LOGIC_LINK_WIDTH (n) FIELD_PREP(PORT_LOGIC_LINK_WIDTH_MASK, n)
@@ -60,6 +66,9 @@#define PCIE_MSI_INTR0_MASK 0x82C#define PCIE_MSI_INTR0_STATUS 0x830 +#define PCIE_PORT_MULTI_LANE_CTRL 0x8C0 +#define PORT_MLTI_UPCFG_SUPPORT BIT(7) +#define PCIE_ATU_VIEWPORT 0x900#define PCIE_ATU_REGION_INBOUND BIT(31)#define PCIE_ATU_REGION_OUTBOUND 0
@@ -273,6 +282,9 @@ void dw_pcie_write_dbi2(struct dw_pcie *pci, u32 reg, size_t size, u32 val);u32 dw_pcie_read_atu (struct dw_pcie *pci,u32 reg,size_t size);void dw_pcie_write_atu (struct dw_pcie *pci,u32 reg,size_t size,u32 val);int dw_pcie_link_up (struct dw_pcie *pci); +void dw_pcie_upconfig_setup (struct dw_pcie *pci); +void dw_pcie_link_set_max_speed (struct dw_pcie *pci,u32 link_gen); +void dw_pcie_link_set_n_fts (struct dw_pcie *pci,u32 n_fts);int dw_pcie_wait_for_link (struct dw_pcie *pci); void dw_pcie_prog_outbound_atu(struct dw_pcie *pci, int index, int type, u64 cpu_addr, u64 pci_addr,
drivers/pci/controller/dwc/pcie-intel-gw.c new file +545 -0
545 lines not on this page · raw message
include/uapi/linux/pci_regs.h +1 -0
@@ -673,6 +673,7 @@#define PCI_EXP_LNKCTL2_TLS_8_0GT 0x0003/* Supported Speed 8GT/s */ #define PCI_EXP_LNKCTL2_TLS_16_0GT 0x0004/* Supported Speed 16GT/s */ #define PCI_EXP_LNKCTL2_TLS_32_0GT 0x0005/* Supported Speed 32GT/s */ +#define PCI_EXP_LNKCTL2_HASD 0x0020/* HW Autonomous Speed Disable */ #define PCI_EXP_LNKSTA2 50/* Link Status 2 */ #define PCI_CAP_EXP_ENDPOINT_SIZEOF_V2 52/* v2 endpoints with link end here */ #define PCI_EXP_SLTCAP2 52/* Slot Capabilities 2 */
Signature · 1 line
2.11.0
Re: [PATCH v10 2/3] PCI: dwc: intel: PCIe RC controller driver
Quoted 22 lines · Dilip Kota
Add support to PCIe RC controller on Intel Gateway SoCs. PCIe controller is based of Synopsys DesignWare PCIe core.
Intel PCIe driver requires Upconfigure support, Fast Training Sequence and link speed configurations. So adding the respective helper functions in the PCIe DesignWare framework.
It also programs hardware autonomous speed during speed configuration so defining it inpci_regs.h.Also, mark Intel PCIe driver depends on MSI IRQ Domain as Synopsys DesignWare framework depends on the
PCI_MSI_IRQ_DOMAIN.Signed-off-by Dilip Kota <[email protected]>Signed-off-by Lorenzo Pieralisi <[email protected]>Reviewed-by Andrew Murray <[email protected]>Reviewed-by Andy Shevchenko <[email protected]>Acked-by Gustavo Pimentel <[email protected]>
drivers/pci/controller/dwc/pcie-designware.c line 17
Quoted 4 lines
drivers/pci/controller/dwc/pcie-designware.c +1
-0@@ -14,6 +14,8 @@#include "pcie-designware.h" +extern const unsigned char pcie_link_speed[];
This shouldn't be needed; there's a declaration in drivers/pci/pci.h.
drivers/pci/controller/dwc/pcie-designware.c
Quoted 5 lines
drivers/pci/controller/dwc/pcie-designware.c +5
-0+struct intel_pcie_soc { +unsigned int pcie_ver; +unsigned int pcie_atu_offset; +u32 num_viewport; +};
Looks a little strange to have the fields below lined up but the ones above not.
Quoted 14 lines
drivers/pci/controller/dwc/pcie-designware.c +14
-0+struct intel_pcie_port { +struct dw_pcie pci; +void __iomem *app_base; +struct gpio_desc *reset_gpio; +u32 rst_intrvl; +u32 max_speed; +u32 link_gen; +u32 max_width; +u32 n_fts; +struct clk *core_clk; +struct reset_control *core_rst; +struct phy *phy; +u8 pcie_cap_ofst; +};
drivers/pci/controller/dwc/pcie-designware.c
Quoted 10 lines
drivers/pci/controller/dwc/pcie-designware.c +10
-0+ +static void pcie_update_bits (void __iomem *base,u32 ofs,u32 mask,u32 val) +{ +u32 old; + + old =readl (base + ofs); + val = (old & ~mask) | (val & mask); + +if (val != old) +writel (val, base + ofs);
I assume this is never used on registers where the "old & ~mask" part contains RW1C bits? If there are RW1C bits in that part, this will corrupt them.
drivers/pci/controller/dwc/pcie-designware.c
Quoted 5 lines
drivers/pci/controller/dwc/pcie-designware.c +5
-0+if (!lpp->pcie_cap_ofst) { + ret =dw_pcie_find_capability (&lpp->pci,PCI_CAP_ID_EXP ); +if (!ret) { + ret = -ENXIO ; +dev_err (dev,"Invalid PCIe capability offset\n" );
Some of your messages start with a capital letter, others not.
Quoted 1 line
+int
intel_pcie_msi_init(struct pcie_port *pp)
You might add a comment here like the one at ks_pcie_am654_msi_host_init(). Since the users of the .msi_host_init() function pointer only call the function if the pointer is non-NULL, it's not completely obvious why you have this stub function.
drivers/pci/controller/dwc/pcie-designware.c
Quoted 8 lines
drivers/pci/controller/dwc/pcie-designware.c +7
-0+{ +/* PCIe MSI/MSIx is handled by MSI in x86 processor */ +return 0 ; +} +/* +* Intel PCIe doesn't configure IO region, so set viewport +* to not to perform IO region access.
s/to not to/to not/
drivers/pci/controller/dwc/pcie-designware.c
Quoted 4 lines
drivers/pci/controller/dwc/pcie-designware.c +4
-0+*/ + pci->num_viewport = data->num_viewport; + +dev_info (dev,"Intel PCIe Root Complex Port init done\n" );
Probably superfluous.
drivers/pci/controller/dwc/pcie-designware.c
Quoted 2 lines
drivers/pci/controller/dwc/pcie-designware.c +2
-0+ +return ret;
Since the return value is known here:
return 0;
Quoted 1 line
+}
Re: [PATCH v10 2/3] PCI: dwc: intel: PCIe RC controller driver
Quoted 23 lines · Bjorn Helgaas
Quoted 22 lines · Dilip Kota
Add support to PCIe RC controller on Intel Gateway SoCs. PCIe controller is based of Synopsys DesignWare PCIe core.
Intel PCIe driver requires Upconfigure support, Fast Training Sequence and link speed configurations. So adding the respective helper functions in the PCIe DesignWare framework.
It also programs hardware autonomous speed during speed configuration so defining it inpci_regs.h.Also, mark Intel PCIe driver depends on MSI IRQ Domain as Synopsys DesignWare framework depends on the
PCI_MSI_IRQ_DOMAIN.Signed-off-by Dilip Kota <[email protected]>Signed-off-by Lorenzo Pieralisi <[email protected]>Reviewed-by Andrew Murray <[email protected]>Reviewed-by Andy Shevchenko <[email protected]>Acked-by Gustavo Pimentel <[email protected]>drivers/pci/controller/dwc/pcie-designware.c +0
-0@@ -14,6 +14,8 @@
Quoted 4 lines
drivers/pci/controller/dwc/pcie-designware.c line 17
Quoted 3 lines
drivers/pci/controller/dwc/pcie-designware.c +1
-0#include "pcie-designware.h" +extern const unsigned char pcie_link_speed[];This shouldn't be needed; there's a declaration in
drivers/pci/pci.h.
Sure, will do it. Thanks for pointing it.
Quoted 8 lines
drivers/pci/controller/dwc/pcie-designware.c
Quoted 6 lines
drivers/pci/controller/dwc/pcie-designware.c +5
-0+struct intel_pcie_soc { +unsigned int pcie_ver; +unsigned int pcie_atu_offset; +u32 num_viewport; +};Looks a little strange to have the fields below lined up but the ones above not.
My miss, i will update it.
Quoted 20 lines
Quoted 20 lines
drivers/pci/controller/dwc/pcie-designware.c +19
-0+struct intel_pcie_port { +struct dw_pcie pci; +void __iomem *app_base; +struct gpio_desc *reset_gpio; +u32 rst_intrvl; +u32 max_speed; +u32 link_gen; +u32 max_width; +u32 n_fts; +struct clk *core_clk; +struct reset_control *core_rst; +struct phy *phy; +u8 pcie_cap_ofst; +}; + +static void pcie_update_bits (void __iomem *base,u32 ofs,u32 mask,u32 val) +{ +u32 old; +
Quoted 8 lines
drivers/pci/controller/dwc/pcie-designware.c
Quoted 5 lines
drivers/pci/controller/dwc/pcie-designware.c +5
-0+ old =readl (base + ofs); + val = (old & ~mask) | (val & mask); + +if (val != old) +writel (val, base + ofs);I assume this is never used on registers where the "old & ~mask" part contains RW1C bits? If there are RW1C bits in that part, this will corrupt them.
There is no impact because RW1C bits of respective registers are 0s at the time of this function call.
Quoted 7 lines
drivers/pci/controller/dwc/pcie-designware.c
Quoted 6 lines
drivers/pci/controller/dwc/pcie-designware.c +5
-0+if (!lpp->pcie_cap_ofst) { + ret =dw_pcie_find_capability (&lpp->pci,PCI_CAP_ID_EXP ); +if (!ret) { + ret = -ENXIO ; +dev_err (dev,"Invalid PCIe capability offset\n" );Some of your messages start with a capital letter, others not.
I will correct it.
Quoted 7 lines
Quoted 2 lines
+int
intel_pcie_msi_init(struct pcie_port *pp)You might add a comment here like the one at
ks_pcie_am654_msi_host_init(). Since the users of the .msi_host_init() function pointer only call the function if the pointer is non-NULL, it's not completely obvious why you have this stub function.
Ok, i will change it.
Quoted 9 lines
drivers/pci/controller/dwc/pcie-designware.c
Quoted 8 lines
drivers/pci/controller/dwc/pcie-designware.c +7
-0+{ +/* PCIe MSI/MSIx is handled by MSI in x86 processor */ +return 0 ; +} +/* +* Intel PCIe doesn't configure IO region, so set viewport +* to not to perform IO region access. s/to not to/to not/
Ok, i will fix it.
Quoted 6 lines
drivers/pci/controller/dwc/pcie-designware.c
Quoted 5 lines
drivers/pci/controller/dwc/pcie-designware.c +4
-0+*/ + pci->num_viewport = data->num_viewport; + +dev_info (dev,"Intel PCIe Root Complex Port init done\n" );Probably superfluous.
I will remove the print then!
Quoted 6 lines
drivers/pci/controller/dwc/pcie-designware.c
Quoted 3 lines
drivers/pci/controller/dwc/pcie-designware.c +2
-0+ +return ret;Since the return value is known here:
return 0;
Ok, i will update it.
I see, this patch series is merged in the maintainer tree.
Should i need to submit as a separate patch on top of maintainer tree or submit the new version of whole patch series? Please let me know the best practice.
Regards,
Dilip
Quoted 2 lines
Quoted 2 lines
+}
Re: [PATCH v10 2/3] PCI: dwc: intel: PCIe RC controller driver
Quoted 34 lines · Dilip Kota
Quoted 20 lines · Bjorn Helgaas
Quoted 18 lines · Dilip Kota
Add support to PCIe RC controller on Intel Gateway SoCs. PCIe controller is based of Synopsys DesignWare PCIe core.
Intel PCIe driver requires Upconfigure support, Fast Training Sequence and link speed configurations. So adding the respective helper functions in the PCIe DesignWare framework.
It also programs hardware autonomous speed during speed configuration so defining it inpci_regs.h.Also, mark Intel PCIe driver depends on MSI IRQ Domain as Synopsys DesignWare framework depends on the
PCI_MSI_IRQ_DOMAIN.Signed-off-by Dilip Kota <[email protected]>Signed-off-by Lorenzo Pieralisi <[email protected]>Reviewed-by Andrew Murray <[email protected]>Reviewed-by Andy Shevchenko <[email protected]>Acked-by Gustavo Pimentel <[email protected]>Quoted 12 lines
drivers/pci/controller/dwc/pcie-intel-gw.c line 88
Quoted 9 lines
drivers/pci/controller/dwc/pcie-intel-gw.c new file +9
-0+static void pcie_update_bits (void __iomem *base,u32 ofs,u32 mask,u32 val) +{ +u32 old; + + old =readl (base + ofs); + val = (old & ~mask) | (val & mask); + +if (val != old) +writel (val, base + ofs);I assume this is never used on registers where the "old & ~mask" part contains RW1C bits? If there are RW1C bits in that part, this will corrupt them.
Quoted 2 lines
There is no impact because RW1C bits of respective registers are 0s at the time of this function call.
Sounds ... dangerous, but I'll take your word for it.
Quoted 4 lines
I see, this patch series is merged in the maintainer tree. Should i need to submit as a separate patch on top of maintainer tree or submit the new version of whole patch series?
Please let me know the best practice.
Sorry, I didn't realize this had already been merged to Lorenzo's tree. But it's not upstream (in Linus' tree) yet. I don't know how Andrew and Lorenzo want to handle this. None of these are important, so you could just ignore these comments.
What I personally would do is rebase the branch, e.g., lpieralisi/pci/dwc, and apply an incremental patch. But it's up to Andrew and Lorenzo whether they want to do anything.
Bjorn
Re: [PATCH v10 2/3] PCI: dwc: intel: PCIe RC controller driver
Quoted 45 lines · Bjorn Helgaas
Quoted 34 lines · Dilip Kota
Quoted 20 lines · Bjorn Helgaas
Quoted 18 lines · Dilip Kota
Add support to PCIe RC controller on Intel Gateway SoCs. PCIe controller is based of Synopsys DesignWare PCIe core.
Intel PCIe driver requires Upconfigure support, Fast Training Sequence and link speed configurations. So adding the respective helper functions in the PCIe DesignWare framework.
It also programs hardware autonomous speed during speed configuration so defining it inpci_regs.h.Also, mark Intel PCIe driver depends on MSI IRQ Domain as Synopsys DesignWare framework depends on the
PCI_MSI_IRQ_DOMAIN.Signed-off-by Dilip Kota <[email protected]>Signed-off-by Lorenzo Pieralisi <[email protected]>Reviewed-by Andrew Murray <[email protected]>Reviewed-by Andy Shevchenko <[email protected]>Acked-by Gustavo Pimentel <[email protected]>Quoted 12 lines
drivers/pci/controller/dwc/pcie-intel-gw.c line 88
Quoted 9 lines
drivers/pci/controller/dwc/pcie-intel-gw.c new file +9
-0+static void pcie_update_bits (void __iomem *base,u32 ofs,u32 mask,u32 val) +{ +u32 old; + + old =readl (base + ofs); + val = (old & ~mask) | (val & mask); + +if (val != old) +writel (val, base + ofs);I assume this is never used on registers where the "old & ~mask" part contains RW1C bits? If there are RW1C bits in that part, this will corrupt them.
Quoted 2 lines
There is no impact because RW1C bits of respective registers are 0s at the time of this function call.
Sounds ... dangerous, but I'll take your word for it.
Quoted 4 lines
I see, this patch series is merged in the maintainer tree. Should i need to submit as a separate patch on top of maintainer tree or submit the new version of whole patch series?
Please let me know the best practice.
Quoted 8 lines
Sorry, I didn't realize this had already been merged to Lorenzo's tree. But it's not upstream (in Linus' tree) yet. I don't know how Andrew and Lorenzo want to handle this. None of these are important, so you could just ignore these comments.
What I personally would do is rebase the branch, e.g., lpieralisi/pci/dwc, and apply an incremental patch. But it's up to Andrew and Lorenzo whether they want to do anything.
Hi Dilip,
Thanks for taking on this additional feedback.
I'd be happy for you to send an additional patch ontop of your v11 (head of lpieralisi/pci/dwc) and we'll squash it in.
Thanks,
Andrew Murray
Quoted 2 lines
Bjorn
PATCH v10 3/3 PCI: artpec6: Configure FTS with dwc helper function
In reply to Dilip KotaUse DesignWare helper functions to configure Fast Training Sequence. Drop the respective code in the driver.
---
Changes on v10:
No change.
drivers/pci/controller/dwc/pcie-artpec6.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-)
drivers/pci/controller/dwc/pcie-artpec6.c +1 -7
@@ -51,9 +51,6 @@ static const struct of_device_id artpec6_pcie_of_match[];#define ACK_N_FTS_MASK GENMASK(15, 8)#define ACK_N_FTS (x) (((x) << 8) & ACK_N_FTS_MASK) -#define FAST_TRAINING_SEQ_MASK GENMASK(7, 0) -#define FAST_TRAINING_SEQ (x) (((x) << 0) & FAST_TRAINING_SEQ_MASK) -/* ARTPEC-6 specific registers */ #define PCIECFG 0x18#define PCIECFG_DBG_OEN BIT(24)
@@ -313,10 +310,7 @@ static void artpec6_pcie_set_nfts(struct artpec6_pcie *artpec6_pcie)* Set the Number of Fast Training Sequences that the core * advertises as its N_FTS during Gen2 or Gen3 link training. */ - val =dw_pcie_readl_dbi (pci,PCIE_LINK_WIDTH_SPEED_CONTROL ); - val &= ~FAST_TRAINING_SEQ_MASK ; - val |=FAST_TRAINING_SEQ (180 ); -dw_pcie_writel_dbi (pci,PCIE_LINK_WIDTH_SPEED_CONTROL , val); +dw_pcie_link_set_n_fts (pci,180 ); }static void artpec6_pcie_assert_core_reset (struct artpec6_pcie *artpec6_pcie)
Signature · 1 line
2.11.0
Quoted 6 lines · Dilip Kota
Intel PCIe is Synopsys based controller. Intel PCIe driver uses DesignWare PCIe framework for host initialization and register configurations.
Changes on v10:
Rebase the patches on mainline v5.4
I meant current mainline (given that the PCI PR for v5.5 is now merged), not v5.4, patchset does not apply. Given that v5.5-rc1 is coming up, please rebase on top of v5.5-rc1 and repost it I will try to merge it then.
Thanks,
Lorenzo
Quoted 28 lines
Squashed the patch that fixes the below issue to this patch series.
WARNING: unmet direct dependencies detected for
PCIE_DW_HOST
Depends on [n]: PCI [=y] &&PCI_MSI_IRQ_DOMAIN[=n]
Selected by [y]:
-PCIE_INTEL_GW[=y] && PCI [=y] && OF [=y] && (X86 [=y] ||COMPILE_TEST[=n])
"reportedby Randy Dunlap <[email protected]>"Dilip Kota (3):
dt-bindings: PCI: intel: Add YAML schemas for the PCIe RC controller
PCI: dwc: intel: PCIe RC controller driver
PCI: artpec6: Configure FTS with dwc helper function.../devicetree/bindings/pci/intel-gw-pcie.yaml | 138 ++++++ drivers/pci/controller/dwc/Kconfig | 11 + drivers/pci/controller/dwc/Makefile | 1 + drivers/pci/controller/dwc/pcie-artpec6.c | 8 +- drivers/pci/controller/dwc/pcie-designware.c | 57 +++ drivers/pci/controller/dwc/pcie-designware.h | 12 + drivers/pci/controller/dwc/pcie-intel-gw.c | 545 +++++++++++++++++++++ include/uapi/linux/pci_regs.h | 1 + 8 files changed, 766 insertions(+), 7 deletions(-) create mode 100644 Documentation/devicetree/bindings/pci/intel-gw-pcie.yaml create mode 100644 drivers/pci/controller/dwc/pcie-intel-gw.cSignature · 1 line
2.11.0