2023-01-18 13:39:14

by Achal Verma

[permalink] [raw]
Subject: [PATCH v8 0/5] PCI: add 4x lane support for pci-j721e controllers

From: Matt Ranostay <[email protected]>

Adding of additional support to Cadence PCIe controller (i.e. pci-j721e.c)
for up to 4x lanes, and reworking of driver to define maximum lanes per
board configuration.

Changes from v1:
* Reworked 'PCI: j721e: Add PCIe 4x lane selection support' to not cause
regressions on 1-2x lane platforms

Changes from v2:
* Correct dev_warn format string from %d to %u since lane count is a
unsigned integer
* Update CC list

Changes from v3:
* Use the max_lanes setting per chip for the mask size required since
bootloader could have set num_lanes to a higher value that the
device tree which would leave in an undefined state
* Reorder patches do the previous change to not break bisect
* Remove line breaking for dev_warn to allow better grepping and since
no strict 80 columns anymore

Changes from v4:
* Correct invalid settings for j7200 PCIe RC + EP
* Add j784s4 configuration for selection of 4x lanes

Changes from v5:
* Dropped 'PCI: j721e: Add warnings on num-lanes misconfiguration' patch
from series
* Reworded 'PCI: j721e: Add per platform maximum lane settings' commit
message
* Added yaml documentation and schema checks for ti,j721e-pci-* lane
checking

Changes from v6:
* Fix wordwrapping in commit messages from ~65 columns to correct 75
columns
* Re-ran get_maintainers.pl to add missing maintainers in CC

Changes from v7:
* Addressed review comments in ti,j721e-pci-ep.yaml and
ti,j721e-pci-host.yaml from v6
* Added warn message if num-lanes property value is invalid.
* Addressed build issue reported in
https://lore.kernel.org/all/[email protected]/

Matt Ranostay (5):
dt-bindings: PCI: ti,j721e-pci-*: add checks for num-lanes
PCI: j721e: Add per platform maximum lane settings
PCI: j721e: Add PCIe 4x lane selection support
dt-bindings: PCI: ti,j721e-pci-*: add j784s4-pci-* compatible strings
PCI: j721e: add j784s4 PCIe configuration

.../bindings/pci/ti,j721e-pci-ep.yaml | 40 ++++++++++++++--
.../bindings/pci/ti,j721e-pci-host.yaml | 40 ++++++++++++++--
drivers/pci/controller/cadence/pci-j721e.c | 46 +++++++++++++++++--
3 files changed, 115 insertions(+), 11 deletions(-)

--
2.25.1


2023-01-18 13:39:19

by Achal Verma

[permalink] [raw]
Subject: [PATCH v8 4/5] dt-bindings: PCI: ti,j721e-pci-*: add j784s4-pci-* compatible strings

From: Matt Ranostay <[email protected]>

Add definition for j784s4-pci-ep + j784s4-pci-host devices along with
schema checks for num-lanes.

Signed-off-by: Matt Ranostay <[email protected]>
Acked-by: Krzysztof Kozlowski <[email protected]>
Signed-off-by: Achal Verma <[email protected]>
---
.../devicetree/bindings/pci/ti,j721e-pci-ep.yaml | 12 ++++++++++++
.../devicetree/bindings/pci/ti,j721e-pci-host.yaml | 12 ++++++++++++
2 files changed, 24 insertions(+)

diff --git a/Documentation/devicetree/bindings/pci/ti,j721e-pci-ep.yaml b/Documentation/devicetree/bindings/pci/ti,j721e-pci-ep.yaml
index 403cd3ef1177..0c93832e381b 100644
--- a/Documentation/devicetree/bindings/pci/ti,j721e-pci-ep.yaml
+++ b/Documentation/devicetree/bindings/pci/ti,j721e-pci-ep.yaml
@@ -14,6 +14,7 @@ properties:
compatible:
oneOf:
- const: ti,j721e-pcie-ep
+ - const: ti,j784s4-pcie-ep
- description: PCIe EP controller in AM64
items:
- const: ti,am64-pcie-ep
@@ -87,6 +88,17 @@ allOf:
minimum: 1
maximum: 2

+ - if:
+ properties:
+ compatible:
+ enum:
+ - ti,j784s4-pcie-ep
+ then:
+ properties:
+ num-lanes:
+ minimum: 1
+ maximum: 4
+
required:
- compatible
- reg
diff --git a/Documentation/devicetree/bindings/pci/ti,j721e-pci-host.yaml b/Documentation/devicetree/bindings/pci/ti,j721e-pci-host.yaml
index 7bd78cfca845..6b1521c6b607 100644
--- a/Documentation/devicetree/bindings/pci/ti,j721e-pci-host.yaml
+++ b/Documentation/devicetree/bindings/pci/ti,j721e-pci-host.yaml
@@ -14,6 +14,7 @@ properties:
compatible:
oneOf:
- const: ti,j721e-pcie-host
+ - const: ti,j784s4-pcie-host
- description: PCIe controller in AM64
items:
- const: ti,am64-pcie-host
@@ -120,6 +121,17 @@ allOf:
minimum: 1
maximum: 2

+ - if:
+ properties:
+ compatible:
+ enum:
+ - ti,j784s4-pcie-host
+ then:
+ properties:
+ num-lanes:
+ minimum: 1
+ maximum: 4
+
required:
- compatible
- reg
--
2.25.1

2023-01-18 13:39:23

by Achal Verma

[permalink] [raw]
Subject: [PATCH v8 1/5] dt-bindings: PCI: ti,j721e-pci-*: add checks for num-lanes

From: Matt Ranostay <[email protected]>

Add num-lanes schema checks based on compatible string on available lanes
for that platform.

Signed-off-by: Matt Ranostay <[email protected]>
Signed-off-by: Achal Verma <[email protected]>
---
.../bindings/pci/ti,j721e-pci-ep.yaml | 28 +++++++++++++++++--
.../bindings/pci/ti,j721e-pci-host.yaml | 28 +++++++++++++++++--
2 files changed, 50 insertions(+), 6 deletions(-)

diff --git a/Documentation/devicetree/bindings/pci/ti,j721e-pci-ep.yaml b/Documentation/devicetree/bindings/pci/ti,j721e-pci-ep.yaml
index 10e6eabdff53..403cd3ef1177 100644
--- a/Documentation/devicetree/bindings/pci/ti,j721e-pci-ep.yaml
+++ b/Documentation/devicetree/bindings/pci/ti,j721e-pci-ep.yaml
@@ -10,9 +10,6 @@ title: TI J721E PCI EP (PCIe Wrapper)
maintainers:
- Kishon Vijay Abraham I <[email protected]>

-allOf:
- - $ref: "cdns-pcie-ep.yaml#"
-
properties:
compatible:
oneOf:
@@ -65,6 +62,31 @@ properties:
items:
- const: link_state

+allOf:
+ - $ref: cdns-pcie-ep.yaml#
+ - if:
+ properties:
+ compatible:
+ enum:
+ - ti,am64-pcie-ep
+ then:
+ properties:
+ num-lanes:
+ minimum: 1
+ maximum: 1
+
+ - if:
+ properties:
+ compatible:
+ enum:
+ - ti,j7200-pcie-ep
+ - ti,j721e-pcie-ep
+ then:
+ properties:
+ num-lanes:
+ minimum: 1
+ maximum: 2
+
required:
- compatible
- reg
diff --git a/Documentation/devicetree/bindings/pci/ti,j721e-pci-host.yaml b/Documentation/devicetree/bindings/pci/ti,j721e-pci-host.yaml
index b0513b197d08..7bd78cfca845 100644
--- a/Documentation/devicetree/bindings/pci/ti,j721e-pci-host.yaml
+++ b/Documentation/devicetree/bindings/pci/ti,j721e-pci-host.yaml
@@ -10,9 +10,6 @@ title: TI J721E PCI Host (PCIe Wrapper)
maintainers:
- Kishon Vijay Abraham I <[email protected]>

-allOf:
- - $ref: "cdns-pcie-host.yaml#"
-
properties:
compatible:
oneOf:
@@ -98,6 +95,31 @@ properties:
interrupts:
maxItems: 1

+allOf:
+ - $ref: cdns-pcie-host.yaml#
+ - if:
+ properties:
+ compatible:
+ enum:
+ - ti,am64-pcie-host
+ then:
+ properties:
+ num-lanes:
+ minimum: 1
+ maximum: 1
+
+ - if:
+ properties:
+ compatible:
+ enum:
+ - ti,j7200-pcie-host
+ - ti,j721e-pcie-host
+ then:
+ properties:
+ num-lanes:
+ minimum: 1
+ maximum: 2
+
required:
- compatible
- reg
--
2.25.1

2023-01-18 13:39:28

by Achal Verma

[permalink] [raw]
Subject: [PATCH v8 5/5] PCI: j721e: add j784s4 PCIe configuration

From: Matt Ranostay <[email protected]>

Add PCIe configuration for j784s4 platform which has 4x lane support.

Tested-by: Achal Verma <[email protected]>
Signed-off-by: Matt Ranostay <[email protected]>
Reviewed-by: Roger Quadros <[email protected]>
Signed-off-by: Achal Verma <[email protected]>
---
drivers/pci/controller/cadence/pci-j721e.c | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)

diff --git a/drivers/pci/controller/cadence/pci-j721e.c b/drivers/pci/controller/cadence/pci-j721e.c
index 58dcac9021e4..cce7b391f931 100644
--- a/drivers/pci/controller/cadence/pci-j721e.c
+++ b/drivers/pci/controller/cadence/pci-j721e.c
@@ -330,6 +330,20 @@ static const struct j721e_pcie_data am64_pcie_ep_data = {
.max_lanes = 1,
};

+static const struct j721e_pcie_data j784s4_pcie_rc_data = {
+ .mode = PCI_MODE_RC,
+ .quirk_retrain_flag = true,
+ .byte_access_allowed = false,
+ .linkdown_irq_regfield = LINK_DOWN,
+ .max_lanes = 4,
+};
+
+static const struct j721e_pcie_data j784s4_pcie_ep_data = {
+ .mode = PCI_MODE_EP,
+ .linkdown_irq_regfield = LINK_DOWN,
+ .max_lanes = 4,
+};
+
static const struct of_device_id of_j721e_pcie_match[] = {
{
.compatible = "ti,j721e-pcie-host",
@@ -355,6 +369,14 @@ static const struct of_device_id of_j721e_pcie_match[] = {
.compatible = "ti,am64-pcie-ep",
.data = &am64_pcie_ep_data,
},
+ {
+ .compatible = "ti,j784s4-pcie-host",
+ .data = &j784s4_pcie_rc_data,
+ },
+ {
+ .compatible = "ti,j784s4-pcie-ep",
+ .data = &j784s4_pcie_ep_data,
+ },
{},
};

--
2.25.1

2023-01-18 13:41:36

by Achal Verma

[permalink] [raw]
Subject: [PATCH v8 2/5] PCI: j721e: Add per platform maximum lane settings

From: Matt Ranostay <[email protected]>

Various platforms have different maximum amount of lanes that can be
selected. Add max_lanes to struct j721e_pcie to allow for detection of this
which is needed to calculate the needed bitmask size for the possible lane
count.

Signed-off-by: Matt Ranostay <[email protected]>
Signed-off-by: Vignesh Raghavendra <[email protected]>
Signed-off-by: Achal Verma <[email protected]>
---
drivers/pci/controller/cadence/pci-j721e.c | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/drivers/pci/controller/cadence/pci-j721e.c b/drivers/pci/controller/cadence/pci-j721e.c
index cc83a8925ce0..f4dc2c5abedb 100644
--- a/drivers/pci/controller/cadence/pci-j721e.c
+++ b/drivers/pci/controller/cadence/pci-j721e.c
@@ -47,8 +47,6 @@ enum link_status {

#define GENERATION_SEL_MASK GENMASK(1, 0)

-#define MAX_LANES 2
-
struct j721e_pcie {
struct cdns_pcie *cdns_pcie;
struct clk *refclk;
@@ -71,6 +69,7 @@ struct j721e_pcie_data {
unsigned int quirk_disable_flr:1;
u32 linkdown_irq_regfield;
unsigned int byte_access_allowed:1;
+ unsigned int max_lanes;
};

static inline u32 j721e_pcie_user_readl(struct j721e_pcie *pcie, u32 offset)
@@ -290,11 +289,13 @@ static const struct j721e_pcie_data j721e_pcie_rc_data = {
.quirk_retrain_flag = true,
.byte_access_allowed = false,
.linkdown_irq_regfield = LINK_DOWN,
+ .max_lanes = 2,
};

static const struct j721e_pcie_data j721e_pcie_ep_data = {
.mode = PCI_MODE_EP,
.linkdown_irq_regfield = LINK_DOWN,
+ .max_lanes = 2,
};

static const struct j721e_pcie_data j7200_pcie_rc_data = {
@@ -302,23 +303,27 @@ static const struct j721e_pcie_data j7200_pcie_rc_data = {
.quirk_detect_quiet_flag = true,
.linkdown_irq_regfield = J7200_LINK_DOWN,
.byte_access_allowed = true,
+ .max_lanes = 2,
};

static const struct j721e_pcie_data j7200_pcie_ep_data = {
.mode = PCI_MODE_EP,
.quirk_detect_quiet_flag = true,
.quirk_disable_flr = true,
+ .max_lanes = 2,
};

static const struct j721e_pcie_data am64_pcie_rc_data = {
.mode = PCI_MODE_RC,
.linkdown_irq_regfield = J7200_LINK_DOWN,
.byte_access_allowed = true,
+ .max_lanes = 1,
};

static const struct j721e_pcie_data am64_pcie_ep_data = {
.mode = PCI_MODE_EP,
.linkdown_irq_regfield = J7200_LINK_DOWN,
+ .max_lanes = 1,
};

static const struct of_device_id of_j721e_pcie_match[] = {
@@ -432,8 +437,10 @@ static int j721e_pcie_probe(struct platform_device *pdev)
pcie->user_cfg_base = base;

ret = of_property_read_u32(node, "num-lanes", &num_lanes);
- if (ret || num_lanes > MAX_LANES)
+ if (ret || num_lanes > data->max_lanes) {
+ dev_warn(dev, "num-lanes property not provided or invalid, setting num-lanes to 1\n");
num_lanes = 1;
+ }
pcie->num_lanes = num_lanes;

if (dma_set_mask_and_coherent(dev, DMA_BIT_MASK(48)))
--
2.25.1

2023-01-18 17:19:19

by Bjorn Helgaas

[permalink] [raw]
Subject: Re: [PATCH v8 5/5] PCI: j721e: add j784s4 PCIe configuration

If you repost for some other reason, fix the subject typo ("Add ..."
to match the others). Otherwise, Lorenzo may fix it up while
applying.

On Wed, Jan 18, 2023 at 06:29:36PM +0530, Achal Verma wrote:
> From: Matt Ranostay <[email protected]>
>
> Add PCIe configuration for j784s4 platform which has 4x lane support.
>
> Tested-by: Achal Verma <[email protected]>
> Signed-off-by: Matt Ranostay <[email protected]>
> Reviewed-by: Roger Quadros <[email protected]>
> Signed-off-by: Achal Verma <[email protected]>

2023-01-19 16:05:34

by Krzysztof Kozlowski

[permalink] [raw]
Subject: Re: [PATCH v8 1/5] dt-bindings: PCI: ti,j721e-pci-*: add checks for num-lanes

On 18/01/2023 13:59, Achal Verma wrote:
> From: Matt Ranostay <[email protected]>
>
> Add num-lanes schema checks based on compatible string on available lanes
> for that platform.
>
> Signed-off-by: Matt Ranostay <[email protected]>
> Signed-off-by: Achal Verma <[email protected]>
> ---
> .../bindings/pci/ti,j721e-pci-ep.yaml | 28 +++++++++++++++++--
> .../bindings/pci/ti,j721e-pci-host.yaml | 28 +++++++++++++++++--
> 2 files changed, 50 insertions(+), 6 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/pci/ti,j721e-pci-ep.yaml b/Documentation/devicetree/bindings/pci/ti,j721e-pci-ep.yaml
> index 10e6eabdff53..403cd3ef1177 100644
> --- a/Documentation/devicetree/bindings/pci/ti,j721e-pci-ep.yaml
> +++ b/Documentation/devicetree/bindings/pci/ti,j721e-pci-ep.yaml
> @@ -10,9 +10,6 @@ title: TI J721E PCI EP (PCIe Wrapper)
> maintainers:
> - Kishon Vijay Abraham I <[email protected]>
>
> -allOf:
> - - $ref: "cdns-pcie-ep.yaml#"
> -
> properties:
> compatible:
> oneOf:
> @@ -65,6 +62,31 @@ properties:
> items:
> - const: link_state
>
> +allOf:
> + - $ref: cdns-pcie-ep.yaml#
> + - if:
> + properties:
> + compatible:
> + enum:
> + - ti,am64-pcie-ep
> + then:
> + properties:
> + num-lanes:
> + minimum: 1
> + maximum: 1
> +
> + - if:
> + properties:
> + compatible:
> + enum:
> + - ti,j7200-pcie-ep
> + - ti,j721e-pcie-ep
> + then:
> + properties:
> + num-lanes:
> + minimum: 1
> + maximum: 2
> +
> required:
> - compatible
> - reg
> diff --git a/Documentation/devicetree/bindings/pci/ti,j721e-pci-host.yaml b/Documentation/devicetree/bindings/pci/ti,j721e-pci-host.yaml
> index b0513b197d08..7bd78cfca845 100644
> --- a/Documentation/devicetree/bindings/pci/ti,j721e-pci-host.yaml
> +++ b/Documentation/devicetree/bindings/pci/ti,j721e-pci-host.yaml
> @@ -10,9 +10,6 @@ title: TI J721E PCI Host (PCIe Wrapper)
> maintainers:
> - Kishon Vijay Abraham I <[email protected]>
>
> -allOf:
> - - $ref: "cdns-pcie-host.yaml#"
> -
> properties:
> compatible:
> oneOf:
> @@ -98,6 +95,31 @@ properties:
> interrupts:
> maxItems: 1
>
> +allOf:
> + - $ref: cdns-pcie-host.yaml#
> + - if:
> + properties:
> + compatible:
> + enum:
> + - ti,am64-pcie-host
> + then:
> + properties:
> + num-lanes:
> + minimum: 1
> + maximum: 1

Why not what I asked for?

Best regards,
Krzysztof