Add a functional test that exercises the AST2600 PCIe RC_H by creating a
root port and an e1000e endpoint behind it. The AST2600/ASPEED driver
treats root bus 0x80 specially: only two device addresses are usable on
the root bus, addr 0 (ASPEED host bridge) and addr 8. To attach endpoints
without code changes, the test places a QEMU PCIe root port at 0x80:08.0
and hangs e1000e behind it so the endpoint enumerates on bus 0x81.

The test appends:
-device pcie-root-port,id=root_port0,slot=1,addr=8,bus=pcie.0
-device e1000e,netdev=net0,bus=root_port0
-netdev user,id=net0

It then verifies enumeration with lspci:
0001:80:00.0 Host bridge: ASPEED Technology, Inc. AST1150 PCI-to-PCI Bridge
0001:80:08.0 PCI bridge: Red Hat, Inc. QEMU PCIe Root port
0001:81:00.0 Ethernet controller: Intel Corporation 82574L Gigabit Network
Connection

This is a temporary solution that allows attaching multiple PCIe
devices while the ASPEED drivers does not support placing endpoints directly
on bus numbers 0x80.

Reference:
https://github.com/AspeedTech-BMC/linux/blob/aspeed-master-v6.6/drivers/pci/controller/pcie-aspeed.c#L309

Signed-off-by: Jamin Lin <jamin_...@aspeedtech.com>
---
 tests/functional/test_arm_aspeed_ast2600.py | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/tests/functional/test_arm_aspeed_ast2600.py 
b/tests/functional/test_arm_aspeed_ast2600.py
index fdae4c939d..9ffcef513d 100755
--- a/tests/functional/test_arm_aspeed_ast2600.py
+++ b/tests/functional/test_arm_aspeed_ast2600.py
@@ -110,6 +110,10 @@ def test_arm_ast2600_evb_sdk(self):
             'tmp105,bus=aspeed.i2c.bus.5,address=0x4d,id=tmp-test')
         self.vm.add_args('-device',
             'ds1338,bus=aspeed.i2c.bus.5,address=0x32')
+        self.vm.add_args('-device',
+            'pcie-root-port,id=root_port0,slot=1,addr=8,bus=pcie.0')
+        self.vm.add_args('-device', 'e1000e,netdev=net0,bus=root_port0')
+        self.vm.add_args('-netdev', 'user,id=net0')
         self.do_test_arm_aspeed_sdk_start(
             self.scratch_file("ast2600-default", "image-bmc"))
 
@@ -136,5 +140,15 @@ def test_arm_ast2600_evb_sdk(self):
         exec_command_and_wait_for_pattern(self,
              '/sbin/hwclock -f /dev/rtc1', year)
 
+        exec_command_and_wait_for_pattern(self,
+            'lspci -s 0001:80:00.0',
+            '0001:80:00.0 Host bridge: ASPEED Technology, Inc. AST1150 
PCI-to-PCI Bridge')
+        exec_command_and_wait_for_pattern(self,
+            'lspci -s 0001:80:08.0',
+            '0001:80:08.0 PCI bridge: Red Hat, Inc. QEMU PCIe Root port')
+        exec_command_and_wait_for_pattern(self,
+            'lspci -s 0001:81:00.0',
+            '0001:81:00.0 Ethernet controller: Intel Corporation 82574L 
Gigabit Network Connection')
+
 if __name__ == '__main__':
     AspeedTest.main()
-- 
2.43.0


Reply via email to