arm64: rockchip: Fix PCIe ep-gpios requirement and Add Nanopi M4B
Subsystems (5)
v3 cover arm64: rockchip: Fix PCIe ep-gpios requirement and Add Nanopi M4B
From: Chen-Yu Tsai <[email protected]>
Hi everyone,
This is v3 of my Nanopi M4B series. Changes since v2 include:
- Replaced dev_err() with dev_err_probe() for gpiod_get_optional() error
- Added Reviewed-by tag from Robin Murphy for patch 3
Changes since v1 include:
- Rewrite subject of patch 1 to match existing convention and reference 'ep-gpios' DT property instead of the 'ep_gpio' field
This series mainly adds support for the new Nanopi M4B, which is a newer variant of the Nanopi M4.
The differences against the original Nanopi M4 that are common with the other M4V2 revision include:
- microphone header removed
- power button added
- recovery button added
Additional changes specific to the M4B:
- USB 3.0 hub removed; board now has 2x USB 3.0 type-A ports and 2x USB 2.0 ports
- ADB toggle switch added; this changes the top USB 3.0 host port to a peripheral port
- Type-C port no longer supports data or PD
- WiFi/Bluetooth combo chip switched to AP6256, which supports BT 5.0 but only 1T1R (down from 2T2R) for WiFi
While working on this, I found that for the M4 family, the PCIe reset pin (from the M.2 expansion board) was not wired to the SoC. Only the NanoPC T4 has this wired. This ended up in patches 1 and 3.
Patch 1 makes ep_gpio in the Rockchip PCIe driver optional. This property is optional in the DT binding, so this just makes the driver adhere to the binding.
Patch 2 adds a new compatible string for the new board.
Patch 3 moves the ep-gpios property of the pcie controller from the common nanopi4.dtsi file to the nanopc-t4.dts file.
Patch 4 adds a new device tree file for the new board. It includes the original device tree for the M4, and then lists the differences.
Given that patch 3 would make PCIe unusable without patch 1, I suggest merging patch 1 through the PCI tree as a fix for 5.10, and the rest for 5.11 through the Rockchip tree.
Please have a look. The changes are mostly trivial.
Regards
ChenYu
Chen-Yu Tsai (4):
PCI: rockchip: Make 'ep-gpios' DT property optional
dt-bindings: arm: rockchip: Add FriendlyARM NanoPi M4B
arm64: dts: rockchip: nanopi4: Move ep-gpios property to nanopc-t4
arm64: dts: rockchip: rk3399: Add NanoPi M4B
.../devicetree/bindings/arm/rockchip.yaml | 1 + arch/arm64/boot/dts/rockchip/Makefile | 1 + .../boot/dts/rockchip/rk3399-nanopc-t4.dts | 1 + .../boot/dts/rockchip/rk3399-nanopi-m4b.dts | 52 +++++++++++++++++++ .../boot/dts/rockchip/rk3399-nanopi4.dtsi | 1 - drivers/pci/controller/pcie-rockchip.c | 5 +- 6 files changed, 58 insertions(+), 3 deletions(-) create mode 100644 arch/arm64/boot/dts/rockchip/rk3399-nanopi-m4b.dts
Signature · 7 lines
2.29.2 _______________________________________________ Linux-rockchip mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-rockchip
PATCH v3 1/4 PCI: rockchip: Make 'ep-gpios' DT property optional
From: Chen-Yu Tsai <[email protected]>
The Rockchip PCIe controller DT binding clearly states that 'ep-gpios' is an optional property. And indeed there are boards that don't require it.
Make the driver follow the binding by using devm_gpiod_get_optional() instead of devm_gpiod_get().
---
Heiko, I dropped you reviewed-by due to the error message change
Changes since v2:
- Fix error message for failed GPIO
Changes since v1:
- Rewrite subject to match existing convention and reference 'ep-gpios' DT property instead of the 'ep_gpio' field
--- drivers/pci/controller/pcie-rockchip.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
drivers/pci/controller/pcie-rockchip.c +3 -2
@@ -118,9 +118,10 @@ int rockchip_pcie_parse_dt(struct rockchip_pcie *rockchip) }if (rockchip->is_rc) { - rockchip->ep_gpio =devm_gpiod_get (dev,"ep" ,GPIOD_OUT_HIGH ); + rockchip->ep_gpio =devm_gpiod_get_optional (dev,"ep" ,GPIOD_OUT_HIGH );if (IS_ERR (rockchip->ep_gpio)) { -dev_err (dev,"missing ep-gpios property in node\n" ); +dev_err_probe (dev,PTR_ERR (rockchip->ep_gpio), +"failed to get ep GPIO\n" );return PTR_ERR (rockchip->ep_gpio); } }
Signature · 7 lines
2.29.2 _______________________________________________ Linux-rockchip mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-rockchip
Heiko Stübner
maintainerRe: [PATCH v3 1/4] PCI: rockchip: Make 'ep-gpios' DT property optional
Am Mittwoch, 6. Januar 2021, 14:46:14 CET schrieb Chen-Yu Tsai:
Quoted 30 lines
From: Chen-Yu Tsai <[email protected]>
The Rockchip PCIe controller DT binding clearly states that 'ep-gpios' is an optional property. And indeed there are boards that don't require it.
Make the driver follow the binding by using
devm_gpiod_get_optional()instead ofdevm_gpiod_get().Fixes e77f847df54c ("PCI: rockchip: Add Rockchip PCIe controller support")Fixes 956cd99b35a8 ("PCI: rockchip: Separate common code from RC driver")Fixes 964bac9455be ("PCI: rockchip: Split out rockchip_pcie_parse_dt() to parse DT")Signed-off-by Chen-Yu Tsai <[email protected]>---
Heiko, I dropped you reviewed-by due to the error message changeChanges since v2:
- Fix error message for failed GPIOChanges since v1:
- Rewrite subject to match existing convention and reference 'ep-gpios' DT property instead of the 'ep_gpio' field--- drivers/pci/controller/pcie-rockchip.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)drivers/pci/controller/pcie-rockchip.c +0
-0
drivers/pci/controller/pcie-rockchip.c int rockchip_pcie_parse_dt(struct rockchip_pcie *rockchip) · line 125
Quoted 10 lines
drivers/pci/controller/pcie-rockchip.c +3
-2@@ -118,9 +118,10 @@ int rockchip_pcie_parse_dt(struct rockchip_pcie *rockchip) }if (rockchip->is_rc) { - rockchip->ep_gpio =devm_gpiod_get (dev,"ep" ,GPIOD_OUT_HIGH ); + rockchip->ep_gpio =devm_gpiod_get_optional (dev,"ep" ,GPIOD_OUT_HIGH );if (IS_ERR (rockchip->ep_gpio)) { -dev_err (dev,"missing ep-gpios property in node\n" ); +dev_err_probe (dev,PTR_ERR (rockchip->ep_gpio), +"failed to get ep GPIO\n" );return PTR_ERR (rockchip->ep_gpio);
looking at [0] shouldn't that be just
return dev_err_probe(dev, PTR_ERR(.....)...);
instead of dev_err_probe + additional return?
Heiko
[0] https://elixir.bootlin.com/linux/latest/source/drivers/base/core.c#L4223
drivers/pci/controller/pcie-rockchip.c int rockchip_pcie_parse_dt(struct rockchip_pcie *rockchip) · line 127
Quoted 3 lines
drivers/pci/controller/pcie-rockchip.c +0
-0} }
_______________________________________________
Linux-rockchip mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/linux-rockchip
Re: [PATCH v3 1/4] PCI: rockchip: Make 'ep-gpios' DT property optional
Quoted 44 lines · Heiko Stübner
Am Mittwoch, 6. Januar 2021, 14:46:14 CET schrieb Chen-Yu Tsai:
Quoted 30 lines
From: Chen-Yu Tsai <[email protected]>
The Rockchip PCIe controller DT binding clearly states that 'ep-gpios' is an optional property. And indeed there are boards that don't require it.
Make the driver follow the binding by using
devm_gpiod_get_optional()instead ofdevm_gpiod_get().Fixes e77f847df54c ("PCI: rockchip: Add Rockchip PCIe controller support")Fixes 956cd99b35a8 ("PCI: rockchip: Separate common code from RC driver")Fixes 964bac9455be ("PCI: rockchip: Split out rockchip_pcie_parse_dt() to parse DT")Signed-off-by Chen-Yu Tsai <[email protected]>---
Heiko, I dropped you reviewed-by due to the error message changeChanges since v2:
- Fix error message for failed GPIOChanges since v1:
- Rewrite subject to match existing convention and reference 'ep-gpios' DT property instead of the 'ep_gpio' field--- drivers/pci/controller/pcie-rockchip.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)drivers/pci/controller/pcie-rockchip.c +0
-0drivers/pci/controller/pcie-rockchip.c int rockchip_pcie_parse_dt(struct rockchip_pcie *rockchip) · line 125
Quoted 10 lines
drivers/pci/controller/pcie-rockchip.c +3
-2@@ -118,9 +118,10 @@ int rockchip_pcie_parse_dt(struct rockchip_pcie *rockchip) }if (rockchip->is_rc) { - rockchip->ep_gpio =devm_gpiod_get (dev,"ep" ,GPIOD_OUT_HIGH ); + rockchip->ep_gpio =devm_gpiod_get_optional (dev,"ep" ,GPIOD_OUT_HIGH );if (IS_ERR (rockchip->ep_gpio)) { -dev_err (dev,"missing ep-gpios property in node\n" ); +dev_err_probe (dev,PTR_ERR (rockchip->ep_gpio), +"failed to get ep GPIO\n" );return PTR_ERR (rockchip->ep_gpio);looking at [0] shouldn't that be just
Quoted 2 lines
return dev_err_probe(dev, PTR_ERR(.....)...);instead of
dev_err_probe+ additional return?
You're right. I was only expecting dev_err_probe() to deal with -EPROBE_DEFER. I believe there won't be any future changes that would add any code here, so I'll respin with the proper changes you mentioned.
Thanks!
ChenYu
Quoted 11 lines
Heiko
[0] https://elixir.bootlin.com/linux/latest/source/drivers/base/core.c#L4223
Quoted 3 lines
drivers/pci/controller/pcie-rockchip.c +0
-0} }
_______________________________________________
Linux-rockchip mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/linux-rockchip
PATCH v3 2/4 dt-bindings: arm: rockchip: Add FriendlyARM NanoPi M4B
In reply to Chen-Yu TsaiFrom: Chen-Yu Tsai <[email protected]>
The NanoPi M4B is a minor revision of the original M4.
The differences against the original Nanopi M4 that are common with the other M4V2 revision include:
- microphone header removed
- power button added
- recovery button added
Additional changes specific to the M4B:
- USB 3.0 hub removed; board now has 2x USB 3.0 type-A ports and 2x USB 2.0 ports
- ADB toggle switch added; this changes the top USB 3.0 host port to a peripheral port
- Type-C port no longer supports data or PD
- WiFi/Bluetooth combo chip switched to AP6256, which supports BT 5.0 but only 1T1R (down from 2T2R) for WiFi
Add a compatible string for the new board revision.
--- Documentation/devicetree/bindings/arm/rockchip.yaml | 1 + 1 file changed, 1 insertion(+)
Documentation/devicetree/bindings/arm/rockchip.yaml +1 -0
@@ -132,6 +132,7 @@ properties: - enum: - friendlyarm,nanopc-t4 - friendlyarm,nanopi-m4 + - friendlyarm,nanopi-m4b - friendlyarm,nanopi-neo4 - const: rockchip,rk3399
Signature · 7 lines
2.29.2 _______________________________________________ Linux-rockchip mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-rockchip
Re: [PATCH v3 2/4] dt-bindings: arm: rockchip: Add FriendlyARM NanoPi M4B
Quoted 22 lines · Chen-Yu Tsai
From: Chen-Yu Tsai <[email protected]>
The NanoPi M4B is a minor revision of the original M4.
The differences against the original Nanopi M4 that are common with the other M4V2 revision include:
- microphone header removed
- power button added
- recovery button addedAdditional changes specific to the M4B:
- USB 3.0 hub removed; board now has 2x USB 3.0 type-A ports and 2x USB 2.0 ports
- ADB toggle switch added; this changes the top USB 3.0 host port to a peripheral port
- Type-C port no longer supports data or PD
- WiFi/Bluetooth combo chip switched to AP6256, which supports BT 5.0 but only 1T1R (down from 2T2R) for WiFi
Quoted 3 lines
Add a compatible string for the new board revision.
Signed-off-by Chen-Yu Tsai <[email protected]>
This was
back in v2.
_______________________________________________
Linux-rockchip mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/linux-rockchip
PATCH v3 3/4 arm64: dts: rockchip: nanopi4: Move ep-gpios property to nanopc-t4
In reply to Chen-Yu TsaiFrom: Chen-Yu Tsai <[email protected]>
Only the NanoPC T4 hs the PCIe reset pin routed to the SoC. For the NanoPi M4 family, no such signal is routed to the expansion header on the base board.
As the schematics for the expansion board were not released, it is unclear how this is handled, but the likely answer is that the signal is always pulled high.
Move the ep-gpios property from the common nanopi4.dtsi file to the board level nanopc-t4.dts file. This makes the nanopi-m4 lack ep-gpios, matching the board design.
A companion patch "PCI: rockchip: make ep_gpio optional" for the Linux driver is required, as the driver currently requires the property to be present.
--- arch/arm64/boot/dts/rockchip/rk3399-nanopc-t4.dts | 1 + arch/arm64/boot/dts/rockchip/rk3399-nanopi4.dtsi | 1 - 2 files changed, 1 insertion(+), 1 deletion(-)
arch/arm64/boot/dts/rockchip/rk3399-nanopc-t4.dts +1 -0
@@ -95,6 +95,7 @@ map3 { }; &pcie0 { + ep-gpios = <&gpio2 RK_PA4 GPIO_ACTIVE_HIGH>; num-lanes = <4>; vpcie3v3-supply = <&vcc3v3_sys>; };
arch/arm64/boot/dts/rockchip/rk3399-nanopi4.dtsi +0 -1
@@ -504,7 +504,6 @@ &pcie_phy { }; &pcie0 { - ep-gpios = <&gpio2 RK_PA4 GPIO_ACTIVE_HIGH>; max-link-speed = <2>; num-lanes = <2>; vpcie0v9-supply = <&vcca0v9_s3>;
Signature · 7 lines
2.29.2 _______________________________________________ Linux-rockchip mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-rockchip
PATCH v3 4/4 arm64: dts: rockchip: rk3399: Add NanoPi M4B
In reply to Chen-Yu TsaiFrom: Chen-Yu Tsai <[email protected]>
The NanoPi M4B is a minor revision of the original M4.
The differences against the original Nanopi M4 that are common with the other M4V2 revision include:
- microphone header removed
- power button added
- recovery button added
Additional changes specific to the M4B:
- USB 3.0 hub removed; board now has 2x USB 3.0 type-A ports and 2x USB 2.0 ports
- ADB toggle switch added; this changes the top USB 3.0 host port to a peripheral port
- Type-C port no longer supports data or PD
- WiFi/Bluetooth combo chip switched to AP6256, which supports BT 5.0 but only 1T1R (down from 2T2R) for WiFi
Add a new dts file for the new board revision that shows the difference against the original.
--- arch/arm64/boot/dts/rockchip/Makefile | 1 + .../boot/dts/rockchip/rk3399-nanopi-m4b.dts | 52 +++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 arch/arm64/boot/dts/rockchip/rk3399-nanopi-m4b.dts
arch/arm64/boot/dts/rockchip/Makefile +1 -0
@@ -33,6 +33,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-kobol-helios64.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-leez-p710.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-nanopc-t4.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-nanopi-m4.dtb +dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-nanopi-m4b.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-nanopi-neo4.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-orangepi.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-pinebook-pro.dtb
arch/arm64/boot/dts/rockchip/rk3399-nanopi-m4b.dts new file +52 -0
52 lines not on this page · raw message
Signature · 7 lines
2.29.2 _______________________________________________ Linux-rockchip mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-rockchip
Hi,
Quoted 48 lines · Chen-Yu Tsai
From: Chen-Yu Tsai <[email protected]>
Hi everyone,
This is v3 of my Nanopi M4B series. Changes since v2 include:
- Replaced
dev_err()withdev_err_probe()forgpiod_get_optional()error
- Added Reviewed-by tag from Robin Murphy for patch 3Changes since v1 include:
- Rewrite subject of patch 1 to match existing convention and reference 'ep-gpios' DT property instead of the '
ep_gpio' fieldThis series mainly adds support for the new Nanopi M4B, which is a newer variant of the Nanopi M4.
The differences against the original Nanopi M4 that are common with the other M4V2 revision include:
- microphone header removed
- power button added
- recovery button addedAdditional changes specific to the M4B:
- USB 3.0 hub removed; board now has 2x USB 3.0 type-A ports and 2x USB 2.0 ports
- ADB toggle switch added; this changes the top USB 3.0 host port to a peripheral port
- Type-C port no longer supports data or PD
- WiFi/Bluetooth combo chip switched to AP6256, which supports BT 5.0 but only 1T1R (down from 2T2R) for WiFiWhile working on this, I found that for the M4 family, the PCIe reset pin (from the M.2 expansion board) was not wired to the SoC. Only the NanoPC T4 has this wired. This ended up in patches 1 and 3.
Patch 1 makes
ep_gpioin the Rockchip PCIe driver optional. This property is optional in the DT binding, so this just makes the driver adhere to the binding.Patch 2 adds a new compatible string for the new board.
Patch 3 moves the ep-gpios property of the pcie controller from the common
nanopi4.dtsifile to thenanopc-t4.dtsfile.
Quoted 6 lines
Patch 4 adds a new device tree file for the new board. It includes the original device tree for the M4, and then lists the differences.
Given that patch 3 would make PCIe unusable without patch 1, I suggest merging patch 1 through the PCI tree as a fix for 5.10, and the rest for 5.11 through the Rockchip tree.
Gentle ping. I would really like to get the PCIe controller fix merged before -rc6 (cut-off for arm-soc -next) and be able to get the new board into 5.12. Or we could have all of them merged for 5.12, though depending on the order the PRs are sent and merged by Linus there would be a possible window where PCIe doesn't work for the Nanopi M4's.
Thanks
ChenYu
Quoted 21 lines
Please have a look. The changes are mostly trivial.
Regards
ChenYuChen-Yu Tsai (4):
PCI: rockchip: Make 'ep-gpios' DT property optional
dt-bindings: arm: rockchip: Add FriendlyARM NanoPi M4B
arm64: dts: rockchip: nanopi4: Move ep-gpios property to nanopc-t4
arm64: dts: rockchip: rk3399: Add NanoPi M4B.../devicetree/bindings/arm/rockchip.yaml | 1 + arch/arm64/boot/dts/rockchip/Makefile | 1 + .../boot/dts/rockchip/rk3399-nanopc-t4.dts | 1 + .../boot/dts/rockchip/rk3399-nanopi-m4b.dts | 52 +++++++++++++++++++ .../boot/dts/rockchip/rk3399-nanopi4.dtsi | 1 - drivers/pci/controller/pcie-rockchip.c | 5 +- 6 files changed, 58 insertions(+), 3 deletions(-) create mode 100644 arch/arm64/boot/dts/rockchip/rk3399-nanopi-m4b.dts
Quoted 3 lines
--
2.29.2
_______________________________________________
Linux-rockchip mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/linux-rockchip