Skip to content

Commit a1cc169

Browse files
paligclement
authored andcommitted
arm64: dts: marvell: armada-37xx: Remap IO space to bus address 0x0
Legacy and old PCI I/O based cards do not support 32-bit I/O addressing. Since commit 64f160e ("PCI: aardvark: Configure PCIe resources from 'ranges' DT property") kernel can set different PCIe address on CPU and different on the bus for the one A37xx address mapping without any firmware support in case the bus address does not conflict with other A37xx mapping. So remap I/O space to the bus address 0x0 to enable support for old legacy I/O port based cards which have hardcoded I/O ports in low address space. Note that DDR on A37xx is mapped to bus address 0x0. And mapping of I/O space can be set to address 0x0 too because MEM space and I/O space are separate and so do not conflict. Remapping IO space on Turris Mox to different address is not possible to due bootloader bug. Signed-off-by: Pali Rohár <pali@kernel.org> Reported-by: Arnd Bergmann <arnd@arndb.de> Fixes: 76f6386 ("arm64: dts: marvell: Add Aardvark PCIe support for Armada 3700") Cc: stable@vger.kernel.org # 64f160e ("PCI: aardvark: Configure PCIe resources from 'ranges' DT property") Cc: stable@vger.kernel.org # 514ef1e ("arm64: dts: marvell: armada-37xx: Extend PCIe MEM space") Reviewed-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Gregory CLEMENT <gregory.clement@bootlin.com>
1 parent e783362 commit a1cc169

2 files changed

Lines changed: 7 additions & 2 deletions

File tree

arch/arm64/boot/dts/marvell/armada-3720-turris-mox.dts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,9 @@
138138
/*
139139
* U-Boot port for Turris Mox has a bug which always expects that "ranges" DT property
140140
* contains exactly 2 ranges with 3 (child) address cells, 2 (parent) address cells and
141-
* 2 size cells and also expects that the second range starts at 16 MB offset. If these
141+
* 2 size cells and also expects that the second range starts at 16 MB offset. Also it
142+
* expects that first range uses same address for PCI (child) and CPU (parent) cells (so
143+
* no remapping) and that this address is the lowest from all specified ranges. If these
142144
* conditions are not met then U-Boot crashes during loading kernel DTB file. PCIe address
143145
* space is 128 MB long, so the best split between MEM and IO is to use fixed 16 MB window
144146
* for IO and the rest 112 MB (64+32+16) for MEM, despite that maximal IO size is just 64 kB.
@@ -147,6 +149,9 @@
147149
* https://source.denx.de/u-boot/u-boot/-/commit/cb2ddb291ee6fcbddd6d8f4ff49089dfe580f5d7
148150
* https://source.denx.de/u-boot/u-boot/-/commit/c64ac3b3185aeb3846297ad7391fc6df8ecd73bf
149151
* https://source.denx.de/u-boot/u-boot/-/commit/4a82fca8e330157081fc132a591ebd99ba02ee33
152+
* Bug related to requirement of same child and parent addresses for first range is fixed
153+
* in U-Boot version 2022.04 by following commit:
154+
* https://source.denx.de/u-boot/u-boot/-/commit/1fd54253bca7d43d046bba4853fe5fafd034bc17
150155
*/
151156
#address-cells = <3>;
152157
#size-cells = <2>;

arch/arm64/boot/dts/marvell/armada-37xx.dtsi

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -499,7 +499,7 @@
499499
* (totaling 127 MiB) for MEM.
500500
*/
501501
ranges = <0x82000000 0 0xe8000000 0 0xe8000000 0 0x07f00000 /* Port 0 MEM */
502-
0x81000000 0 0xefff0000 0 0xefff0000 0 0x00010000>; /* Port 0 IO */
502+
0x81000000 0 0x00000000 0 0xefff0000 0 0x00010000>; /* Port 0 IO */
503503
interrupt-map-mask = <0 0 0 7>;
504504
interrupt-map = <0 0 0 1 &pcie_intc 0>,
505505
<0 0 0 2 &pcie_intc 1>,

0 commit comments

Comments
 (0)