dm: pci: Add driver model tests for PCI
Add some basic tests to check that things work as expected with sandbox. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
		
							parent
							
								
									aad78d2732
								
							
						
					
					
						commit
						d3b7ff14f4
					
				|  | @ -21,4 +21,5 @@ obj-$(CONFIG_DM_GPIO) += gpio.o | ||||||
| obj-$(CONFIG_DM_SPI) += spi.o | obj-$(CONFIG_DM_SPI) += spi.o | ||||||
| obj-$(CONFIG_DM_SPI_FLASH) += sf.o | obj-$(CONFIG_DM_SPI_FLASH) += sf.o | ||||||
| obj-$(CONFIG_DM_I2C) += i2c.o | obj-$(CONFIG_DM_I2C) += i2c.o | ||||||
|  | obj-$(CONFIG_DM_PCI) += pci.o | ||||||
| endif | endif | ||||||
|  |  | ||||||
|  | @ -0,0 +1,59 @@ | ||||||
|  | /*
 | ||||||
|  |  * Copyright (C) 2015 Google, Inc | ||||||
|  |  * | ||||||
|  |  * SPDX-License-Identifier:	GPL-2.0+ | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #include <common.h> | ||||||
|  | #include <dm.h> | ||||||
|  | #include <asm/io.h> | ||||||
|  | #include <dm/test.h> | ||||||
|  | #include <dm/ut.h> | ||||||
|  | 
 | ||||||
|  | /* Test that sandbox PCI works correctly */ | ||||||
|  | static int dm_test_pci_base(struct dm_test_state *dms) | ||||||
|  | { | ||||||
|  | 	struct udevice *bus; | ||||||
|  | 
 | ||||||
|  | 	ut_assertok(uclass_get_device(UCLASS_PCI, 0, &bus)); | ||||||
|  | 
 | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  | DM_TEST(dm_test_pci_base, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT); | ||||||
|  | 
 | ||||||
|  | /* Test that we can use the swapcase device correctly */ | ||||||
|  | static int dm_test_pci_swapcase(struct dm_test_state *dms) | ||||||
|  | { | ||||||
|  | 	pci_dev_t pci_dev = PCI_BDF(0, 0x1f, 0); | ||||||
|  | 	struct pci_controller *hose; | ||||||
|  | 	struct udevice *bus, *swap; | ||||||
|  | 	ulong io_addr, mem_addr; | ||||||
|  | 	char *ptr; | ||||||
|  | 
 | ||||||
|  | 	/* Check that asking for the device automatically fires up PCI */ | ||||||
|  | 	ut_assertok(uclass_get_device(UCLASS_PCI_EMUL, 0, &swap)); | ||||||
|  | 
 | ||||||
|  | 	ut_assertok(uclass_get_device(UCLASS_PCI, 0, &bus)); | ||||||
|  | 	hose = dev_get_uclass_priv(bus); | ||||||
|  | 
 | ||||||
|  | 	/* First test I/O */ | ||||||
|  | 	io_addr = pci_read_bar32(hose, pci_dev, 0); | ||||||
|  | 	outb(2, io_addr); | ||||||
|  | 	ut_asserteq(2, inb(io_addr)); | ||||||
|  | 
 | ||||||
|  | 	/*
 | ||||||
|  | 	 * Now test memory mapping - note we must unmap and remap to cause | ||||||
|  | 	 * the swapcase emulation to see our data and response. | ||||||
|  | 	 */ | ||||||
|  | 	mem_addr = pci_read_bar32(hose, pci_dev, 1); | ||||||
|  | 	ptr = map_sysmem(mem_addr, 20); | ||||||
|  | 	strcpy(ptr, "This is a TesT"); | ||||||
|  | 	unmap_sysmem(ptr); | ||||||
|  | 
 | ||||||
|  | 	ptr = map_sysmem(mem_addr, 20); | ||||||
|  | 	ut_asserteq_str("tHIS IS A tESt", ptr); | ||||||
|  | 	unmap_sysmem(ptr); | ||||||
|  | 
 | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  | DM_TEST(dm_test_pci_swapcase, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT); | ||||||
|  | @ -10,6 +10,7 @@ | ||||||
| 		console = &uart0; | 		console = &uart0; | ||||||
| 		i2c0 = "/i2c@0"; | 		i2c0 = "/i2c@0"; | ||||||
| 		spi0 = "/spi@0"; | 		spi0 = "/spi@0"; | ||||||
|  | 		pci0 = &pci; | ||||||
| 		testfdt6 = "/e-test"; | 		testfdt6 = "/e-test"; | ||||||
| 		testbus3 = "/some-bus"; | 		testbus3 = "/some-bus"; | ||||||
| 		testfdt0 = "/some-bus/c-test@0"; | 		testfdt0 = "/some-bus/c-test@0"; | ||||||
|  | @ -135,6 +136,22 @@ | ||||||
| 		}; | 		}; | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
|  | 	pci: pci-controller { | ||||||
|  | 		compatible = "sandbox,pci"; | ||||||
|  | 		device_type = "pci"; | ||||||
|  | 		#address-cells = <3>; | ||||||
|  | 		#size-cells = <2>; | ||||||
|  | 		ranges = <0x02000000 0 0x10000000 0x10000000 0 0x2000 | ||||||
|  | 				0x01000000 0 0x20000000 0x20000000 0 0x2000>; | ||||||
|  | 		pci@1f,0 { | ||||||
|  | 			compatible = "pci-generic"; | ||||||
|  | 			reg = <0xf800 0 0 0 0>; | ||||||
|  | 			emul@1f,0 { | ||||||
|  | 				compatible = "sandbox,swap-case"; | ||||||
|  | 			}; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  | 
 | ||||||
| 	spi@0 { | 	spi@0 { | ||||||
| 		#address-cells = <1>; | 		#address-cells = <1>; | ||||||
| 		#size-cells = <0>; | 		#size-cells = <0>; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue