mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-22 07:01:39 +00:00
sandbox: pci: Create a new sandbox_pci_read_bar() function
The code in swapcase can be used by other sandbox drivers. Move it into a common place to allow this. Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: Bin Meng <bmeng.cn@gmail.com> Tested-by: Bin Meng <bmeng.cn@gmail.com> [bmeng: remove inclusion of <asm/test.h> in pci_sandbox.c] Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
This commit is contained in:
parent
594d272cfd
commit
75d8f49481
4 changed files with 39 additions and 16 deletions
|
@ -198,4 +198,19 @@ int sandbox_get_pch_spi_protect(struct udevice *dev);
|
||||||
*/
|
*/
|
||||||
int sandbox_get_pci_ep_irq_count(struct udevice *dev);
|
int sandbox_get_pci_ep_irq_count(struct udevice *dev);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* sandbox_pci_read_bar() - Read the BAR value for a read_config operation
|
||||||
|
*
|
||||||
|
* This is used in PCI emulators to read a base address reset. This has special
|
||||||
|
* rules because when the register is set to 0xffffffff it can be used to
|
||||||
|
* discover the type and size of the BAR.
|
||||||
|
*
|
||||||
|
* @barval: Current value of the BAR
|
||||||
|
* @type: Type of BAR (PCI_BASE_ADDRESS_SPACE_IO or
|
||||||
|
* PCI_BASE_ADDRESS_MEM_TYPE_32)
|
||||||
|
* @size: Size of BAR in bytes
|
||||||
|
* @return BAR value to return from emulator
|
||||||
|
*/
|
||||||
|
uint sandbox_pci_read_bar(u32 barval, int type, uint size);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -12,6 +12,7 @@ obj-$(CONFIG_$(SPL_TPL_)CROS_EC_LPC) += cros_ec_lpc.o
|
||||||
ifndef CONFIG_SPL_BUILD
|
ifndef CONFIG_SPL_BUILD
|
||||||
obj-$(CONFIG_CROS_EC_I2C) += cros_ec_i2c.o
|
obj-$(CONFIG_CROS_EC_I2C) += cros_ec_i2c.o
|
||||||
obj-$(CONFIG_CROS_EC_SPI) += cros_ec_spi.o
|
obj-$(CONFIG_CROS_EC_SPI) += cros_ec_spi.o
|
||||||
|
obj-$(CONFIG_SANDBOX) += swap_case.o
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifdef CONFIG_DM_I2C
|
ifdef CONFIG_DM_I2C
|
||||||
|
@ -52,7 +53,6 @@ obj-$(CONFIG_PCA9551_LED) += pca9551_led.o
|
||||||
obj-$(CONFIG_$(SPL_)PWRSEQ) += pwrseq-uclass.o
|
obj-$(CONFIG_$(SPL_)PWRSEQ) += pwrseq-uclass.o
|
||||||
obj-$(CONFIG_QFW) += qfw.o
|
obj-$(CONFIG_QFW) += qfw.o
|
||||||
obj-$(CONFIG_ROCKCHIP_EFUSE) += rockchip-efuse.o
|
obj-$(CONFIG_ROCKCHIP_EFUSE) += rockchip-efuse.o
|
||||||
obj-$(CONFIG_SANDBOX) += swap_case.o
|
|
||||||
obj-$(CONFIG_SANDBOX) += syscon_sandbox.o misc_sandbox.o
|
obj-$(CONFIG_SANDBOX) += syscon_sandbox.o misc_sandbox.o
|
||||||
obj-$(CONFIG_SMSC_LPC47M) += smsc_lpc47m.o
|
obj-$(CONFIG_SMSC_LPC47M) += smsc_lpc47m.o
|
||||||
obj-$(CONFIG_SMSC_SIO1007) += smsc_sio1007.o
|
obj-$(CONFIG_SMSC_SIO1007) += smsc_sio1007.o
|
||||||
|
|
|
@ -139,25 +139,13 @@ static int sandbox_swap_case_read_config(struct udevice *emul, uint offset,
|
||||||
case PCI_BASE_ADDRESS_4:
|
case PCI_BASE_ADDRESS_4:
|
||||||
case PCI_BASE_ADDRESS_5: {
|
case PCI_BASE_ADDRESS_5: {
|
||||||
int barnum;
|
int barnum;
|
||||||
u32 *bar, result;
|
u32 *bar;
|
||||||
|
|
||||||
barnum = pci_offset_to_barnum(offset);
|
barnum = pci_offset_to_barnum(offset);
|
||||||
bar = &plat->bar[barnum];
|
bar = &plat->bar[barnum];
|
||||||
|
|
||||||
result = *bar;
|
*valuep = sandbox_pci_read_bar(*bar, barinfo[barnum].type,
|
||||||
if (*bar == 0xffffffff) {
|
barinfo[barnum].size);
|
||||||
if (barinfo[barnum].type) {
|
|
||||||
result = (~(barinfo[barnum].size - 1) &
|
|
||||||
PCI_BASE_ADDRESS_IO_MASK) |
|
|
||||||
PCI_BASE_ADDRESS_SPACE_IO;
|
|
||||||
} else {
|
|
||||||
result = (~(barinfo[barnum].size - 1) &
|
|
||||||
PCI_BASE_ADDRESS_MEM_MASK) |
|
|
||||||
PCI_BASE_ADDRESS_MEM_TYPE_32;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
debug("r bar %d=%x\n", barnum, result);
|
|
||||||
*valuep = result;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case PCI_CAPABILITY_LIST:
|
case PCI_CAPABILITY_LIST:
|
||||||
|
|
|
@ -42,6 +42,26 @@ int sandbox_pci_get_emul(struct udevice *bus, pci_dev_t find_devfn,
|
||||||
return *emulp ? 0 : -ENODEV;
|
return *emulp ? 0 : -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint sandbox_pci_read_bar(u32 barval, int type, uint size)
|
||||||
|
{
|
||||||
|
u32 result;
|
||||||
|
|
||||||
|
result = barval;
|
||||||
|
if (result == 0xffffffff) {
|
||||||
|
if (type == PCI_BASE_ADDRESS_SPACE_IO) {
|
||||||
|
result = (~(size - 1) &
|
||||||
|
PCI_BASE_ADDRESS_IO_MASK) |
|
||||||
|
PCI_BASE_ADDRESS_SPACE_IO;
|
||||||
|
} else {
|
||||||
|
result = (~(size - 1) &
|
||||||
|
PCI_BASE_ADDRESS_MEM_MASK) |
|
||||||
|
PCI_BASE_ADDRESS_MEM_TYPE_32;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
static int sandbox_pci_emul_post_probe(struct udevice *dev)
|
static int sandbox_pci_emul_post_probe(struct udevice *dev)
|
||||||
{
|
{
|
||||||
struct sandbox_pci_emul_priv *priv = dev->uclass->priv;
|
struct sandbox_pci_emul_priv *priv = dev->uclass->priv;
|
||||||
|
|
Loading…
Add table
Reference in a new issue