pci: Add mask parameter to dm_pci_map_bar()

Add a mask parameter to control the lookup of the PCI region from which
the mapping can be made.

Signed-off-by: Andrew Scull <ascull@google.com>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
This commit is contained in:
Andrew Scull 2022-04-21 16:11:13 +00:00 committed by Tom Rini
parent a822d1dee4
commit 2635e3b50f
33 changed files with 61 additions and 47 deletions

View File

@ -56,7 +56,7 @@ static int baytrail_uart_init(void *ctx, struct event *event)
for (i = 0; i < 2; i++) { for (i = 0; i < 2; i++) {
ret = dm_pci_bus_find_bdf(PCI_BDF(0, 0x1e, 3 + i), &dev); ret = dm_pci_bus_find_bdf(PCI_BDF(0, 0x1e, 3 + i), &dev);
if (!ret) { if (!ret) {
base = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, 0, 0, base = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, 0, 0, PCI_REGION_TYPE,
PCI_REGION_MEM); PCI_REGION_MEM);
hsuart_clock_set(base); hsuart_clock_set(base);
} }

View File

@ -417,7 +417,7 @@ static int ahci_init_one(struct ahci_uc_priv *uc_priv, struct udevice *dev)
#if !defined(CONFIG_DM_SCSI) #if !defined(CONFIG_DM_SCSI)
uc_priv->mmio_base = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_5, 0, 0, uc_priv->mmio_base = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_5, 0, 0,
PCI_REGION_MEM); PCI_REGION_TYPE, PCI_REGION_MEM);
/* Take from kernel: /* Take from kernel:
* JMicron-specific fixup: * JMicron-specific fixup:
@ -1149,7 +1149,7 @@ int ahci_probe_scsi_pci(struct udevice *ahci_dev)
u16 vendor, device; u16 vendor, device;
base = (ulong)dm_pci_map_bar(ahci_dev, PCI_BASE_ADDRESS_5, 0, 0, base = (ulong)dm_pci_map_bar(ahci_dev, PCI_BASE_ADDRESS_5, 0, 0,
PCI_REGION_MEM); PCI_REGION_TYPE, PCI_REGION_MEM);
/* /*
* Note: * Note:
@ -1163,7 +1163,8 @@ int ahci_probe_scsi_pci(struct udevice *ahci_dev)
if (vendor == PCI_VENDOR_ID_CAVIUM && if (vendor == PCI_VENDOR_ID_CAVIUM &&
device == PCI_DEVICE_ID_CAVIUM_SATA) device == PCI_DEVICE_ID_CAVIUM_SATA)
base = (uintptr_t)dm_pci_map_bar(ahci_dev, PCI_BASE_ADDRESS_0, 0, 0, base = (uintptr_t)dm_pci_map_bar(ahci_dev, PCI_BASE_ADDRESS_0,
0, 0, PCI_REGION_TYPE,
PCI_REGION_MEM); PCI_REGION_MEM);
return ahci_probe_scsi(ahci_dev, base); return ahci_probe_scsi(ahci_dev, base);
} }

View File

@ -699,9 +699,11 @@ static int sil_pci_probe(struct udevice *dev)
/* Read out all BARs */ /* Read out all BARs */
sata_info.iobase[0] = (ulong)dm_pci_map_bar(dev, sata_info.iobase[0] = (ulong)dm_pci_map_bar(dev,
PCI_BASE_ADDRESS_0, 0, 0, PCI_REGION_MEM); PCI_BASE_ADDRESS_0, 0, 0, PCI_REGION_TYPE,
PCI_REGION_MEM);
sata_info.iobase[1] = (ulong)dm_pci_map_bar(dev, sata_info.iobase[1] = (ulong)dm_pci_map_bar(dev,
PCI_BASE_ADDRESS_2, 0, 0, PCI_REGION_MEM); PCI_BASE_ADDRESS_2, 0, 0, PCI_REGION_TYPE,
PCI_REGION_MEM);
/* mask out the unused bits */ /* mask out the unused bits */
sata_info.iobase[0] &= 0xffffff80; sata_info.iobase[0] &= 0xffffff80;

View File

@ -183,7 +183,7 @@ static int octeon_gpio_probe(struct udevice *dev)
priv->data = (const struct octeon_gpio_data *)dev_get_driver_data(dev); priv->data = (const struct octeon_gpio_data *)dev_get_driver_data(dev);
if (priv->data->probe == PROBE_PCI) { if (priv->data->probe == PROBE_PCI) {
priv->base = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, 0, 0, priv->base = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, 0, 0, PCI_REGION_TYPE,
PCI_REGION_MEM); PCI_REGION_MEM);
uc_priv->gpio_count = readq(priv->base + uc_priv->gpio_count = readq(priv->base +
priv->data->reg_offs + GPIO_CONST) & priv->data->reg_offs + GPIO_CONST) &

View File

@ -59,7 +59,8 @@ static int designware_i2c_pci_of_to_plat(struct udevice *dev)
priv->regs = (struct i2c_regs *)dm_pci_read_bar32(dev, 0); priv->regs = (struct i2c_regs *)dm_pci_read_bar32(dev, 0);
} else { } else {
priv->regs = (struct i2c_regs *) priv->regs = (struct i2c_regs *)
dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, 0, 0, PCI_REGION_MEM); dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, 0, 0,
PCI_REGION_TYPE, PCI_REGION_MEM);
} }
if (!priv->regs) if (!priv->regs)
return -EINVAL; return -EINVAL;

View File

@ -251,7 +251,7 @@ static int intel_i2c_probe(struct udevice *dev)
ulong base; ulong base;
/* Save base address from PCI BAR */ /* Save base address from PCI BAR */
priv->base = (ulong)dm_pci_map_bar(dev, PCI_BASE_ADDRESS_4, 0, 0, priv->base = (ulong)dm_pci_map_bar(dev, PCI_BASE_ADDRESS_4, 0, 0, PCI_REGION_TYPE,
PCI_REGION_IO); PCI_REGION_IO);
base = priv->base; base = priv->base;

View File

@ -792,7 +792,7 @@ static int octeon_i2c_probe(struct udevice *dev)
debug("TWSI PCI device: %x\n", bdf); debug("TWSI PCI device: %x\n", bdf);
twsi->base = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, 0, 0, twsi->base = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, 0, 0, PCI_REGION_TYPE,
PCI_REGION_MEM); PCI_REGION_MEM);
} else { } else {
twsi->base = dev_remap_addr(dev); twsi->base = dev_remap_addr(dev);

View File

@ -3822,7 +3822,7 @@ static int octeontx_mmc_host_probe(struct udevice *dev)
/* Octeon TX & TX2 use PCI based probing */ /* Octeon TX & TX2 use PCI based probing */
if (device_is_compatible(dev, "cavium,thunder-8890-mmc")) { if (device_is_compatible(dev, "cavium,thunder-8890-mmc")) {
host->base_addr = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, 0, 0, host->base_addr = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, 0, 0, PCI_REGION_TYPE,
PCI_REGION_MEM); PCI_REGION_MEM);
if (!host->base_addr) { if (!host->base_addr) {
pr_err("%s: Error: MMC base address not found\n", pr_err("%s: Error: MMC base address not found\n",

View File

@ -50,7 +50,7 @@ static int pci_mmc_probe(struct udevice *dev)
desc = mmc_get_blk_desc(&plat->mmc); desc = mmc_get_blk_desc(&plat->mmc);
desc->removable = !(plat->cfg.host_caps & MMC_CAP_NONREMOVABLE); desc->removable = !(plat->cfg.host_caps & MMC_CAP_NONREMOVABLE);
host->ioaddr = (void *)dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, 0, 0, host->ioaddr = (void *)dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, 0, 0, PCI_REGION_TYPE,
PCI_REGION_MEM); PCI_REGION_MEM);
host->name = dev->name; host->name = dev->name;
host->cd_gpio = priv->cd_gpio; host->cd_gpio = priv->cd_gpio;

View File

@ -176,7 +176,8 @@ static int octeontx_pci_bchpf_probe(struct udevice *dev)
if (!bch) if (!bch)
return -ENOMEM; return -ENOMEM;
bch->reg_base = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, 0, 0, PCI_REGION_MEM); bch->reg_base = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, 0, 0,
PCI_REGION_TYPE, PCI_REGION_MEM);
bch->dev = dev; bch->dev = dev;
debug("%s: base address: %p\n", __func__, bch->reg_base); debug("%s: base address: %p\n", __func__, bch->reg_base);
@ -361,7 +362,8 @@ static int octeontx_pci_bchvf_probe(struct udevice *dev)
vf->dev = dev; vf->dev = dev;
/* Map PF's configuration registers */ /* Map PF's configuration registers */
vf->reg_base = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, 0, 0, PCI_REGION_MEM); vf->reg_base = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, 0, 0,
PCI_REGION_TYPE, PCI_REGION_MEM);
debug("%s: reg base: %p\n", __func__, vf->reg_base); debug("%s: reg base: %p\n", __func__, vf->reg_base);
err = octeontx_cmd_queue_initialize(dev, QID_BCH, QDEPTH - 1, 0, err = octeontx_cmd_queue_initialize(dev, QID_BCH, QDEPTH - 1, 0,

View File

@ -2098,7 +2098,7 @@ static int octeontx_pci_nand_probe(struct udevice *dev)
tn->dev = dev; tn->dev = dev;
INIT_LIST_HEAD(&tn->chips); INIT_LIST_HEAD(&tn->chips);
tn->base = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, 0, 0, PCI_REGION_MEM); tn->base = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, 0, 0, PCI_REGION_TYPE, PCI_REGION_MEM);
if (!tn->base) { if (!tn->base) {
ret = -EINVAL; ret = -EINVAL;
goto release; goto release;

View File

@ -28,9 +28,12 @@ static void bnxt_bring_pci(struct bnxt *bp)
dm_pci_read_config16(bp->pdev, PCI_SUBSYSTEM_ID, &bp->subsystem_device); dm_pci_read_config16(bp->pdev, PCI_SUBSYSTEM_ID, &bp->subsystem_device);
dm_pci_read_config16(bp->pdev, PCI_COMMAND, &bp->cmd_reg); dm_pci_read_config16(bp->pdev, PCI_COMMAND, &bp->cmd_reg);
dm_pci_read_config8(bp->pdev, PCI_INTERRUPT_LINE, &bp->irq); dm_pci_read_config8(bp->pdev, PCI_INTERRUPT_LINE, &bp->irq);
bp->bar0 = dm_pci_map_bar(bp->pdev, PCI_BASE_ADDRESS_0, 0, 0, PCI_REGION_MEM); bp->bar0 = dm_pci_map_bar(bp->pdev, PCI_BASE_ADDRESS_0, 0, 0,
bp->bar1 = dm_pci_map_bar(bp->pdev, PCI_BASE_ADDRESS_2, 0, 0, PCI_REGION_MEM); PCI_REGION_TYPE, PCI_REGION_MEM);
bp->bar2 = dm_pci_map_bar(bp->pdev, PCI_BASE_ADDRESS_4, 0, 0, PCI_REGION_MEM); bp->bar1 = dm_pci_map_bar(bp->pdev, PCI_BASE_ADDRESS_2, 0, 0,
PCI_REGION_TYPE, PCI_REGION_MEM);
bp->bar2 = dm_pci_map_bar(bp->pdev, PCI_BASE_ADDRESS_4, 0, 0,
PCI_REGION_TYPE, PCI_REGION_MEM);
cmd_reg = bp->cmd_reg | PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER; cmd_reg = bp->cmd_reg | PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER;
cmd_reg |= PCI_COMMAND_INTX_DISABLE; /* disable intr */ cmd_reg |= PCI_COMMAND_INTX_DISABLE; /* disable intr */
dm_pci_write_config16(bp->pdev, PCI_COMMAND, cmd_reg); dm_pci_write_config16(bp->pdev, PCI_COMMAND, cmd_reg);

View File

@ -5550,7 +5550,7 @@ static int e1000_init_one(struct e1000_hw *hw, int cardnum, pci_dev_t devno,
#endif #endif
#ifdef CONFIG_DM_ETH #ifdef CONFIG_DM_ETH
hw->hw_addr = dm_pci_map_bar(devno, PCI_BASE_ADDRESS_0, 0, 0, hw->hw_addr = dm_pci_map_bar(devno, PCI_BASE_ADDRESS_0, 0, 0,
PCI_REGION_MEM); PCI_REGION_TYPE, PCI_REGION_MEM);
#else #else
hw->hw_addr = pci_map_bar(devno, PCI_BASE_ADDRESS_0, hw->hw_addr = pci_map_bar(devno, PCI_BASE_ADDRESS_0,
PCI_REGION_MEM); PCI_REGION_MEM);

View File

@ -339,7 +339,7 @@ static int enetc_probe(struct udevice *dev)
} }
/* initialize register */ /* initialize register */
priv->regs_base = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, 0, 0, 0); priv->regs_base = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, 0, 0, PCI_REGION_TYPE, 0);
if (!priv->regs_base) { if (!priv->regs_base) {
enetc_dbg(dev, "failed to map BAR0\n"); enetc_dbg(dev, "failed to map BAR0\n");
return -EINVAL; return -EINVAL;

View File

@ -125,7 +125,7 @@ static int enetc_mdio_probe(struct udevice *dev)
{ {
struct enetc_mdio_priv *priv = dev_get_priv(dev); struct enetc_mdio_priv *priv = dev_get_priv(dev);
priv->regs_base = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, 0, 0, 0); priv->regs_base = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, 0, 0, PCI_REGION_TYPE, 0);
if (!priv->regs_base) { if (!priv->regs_base) {
enetc_dbg(dev, "failed to map BAR0\n"); enetc_dbg(dev, "failed to map BAR0\n");
return -EINVAL; return -EINVAL;

View File

@ -292,13 +292,13 @@ static int felix_probe(struct udevice *dev)
return -ENODEV; return -ENODEV;
} }
priv->imdio_base = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, 0, 0, 0); priv->imdio_base = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, 0, 0, PCI_REGION_TYPE, 0);
if (!priv->imdio_base) { if (!priv->imdio_base) {
dev_err(dev, "failed to map BAR0\n"); dev_err(dev, "failed to map BAR0\n");
return -EINVAL; return -EINVAL;
} }
priv->regs_base = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_4, 0, 0, 0); priv->regs_base = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_4, 0, 0, PCI_REGION_TYPE, 0);
if (!priv->regs_base) { if (!priv->regs_base) {
dev_err(dev, "failed to map BAR4\n"); dev_err(dev, "failed to map BAR4\n");
return -EINVAL; return -EINVAL;

View File

@ -1458,7 +1458,7 @@ int octeontx_bgx_probe(struct udevice *dev)
int bgx_idx, node; int bgx_idx, node;
int inc = 1; int inc = 1;
bgx->reg_base = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, 0, 0, bgx->reg_base = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, 0, 0, PCI_REGION_TYPE,
PCI_REGION_MEM); PCI_REGION_MEM);
if (!bgx->reg_base) { if (!bgx->reg_base) {
debug("No PCI region found\n"); debug("No PCI region found\n");

View File

@ -713,7 +713,7 @@ int nic_initialize(struct udevice *dev)
return -ENOMEM; return -ENOMEM;
/* MAP PF's configuration registers */ /* MAP PF's configuration registers */
nic->reg_base = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, 0, 0, nic->reg_base = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, 0, 0, PCI_REGION_TYPE,
PCI_REGION_MEM); PCI_REGION_MEM);
if (!nic->reg_base) { if (!nic->reg_base) {
printf("Cannot map config register space, aborting\n"); printf("Cannot map config register space, aborting\n");

View File

@ -509,7 +509,7 @@ int nicvf_initialize(struct udevice *dev)
/* Enable TSO support */ /* Enable TSO support */
nicvf->hw_tso = true; nicvf->hw_tso = true;
nicvf->reg_base = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, 0, 0, nicvf->reg_base = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, 0, 0, PCI_REGION_TYPE,
PCI_REGION_MEM); PCI_REGION_MEM);
debug("nicvf->reg_base: %p\n", nicvf->reg_base); debug("nicvf->reg_base: %p\n", nicvf->reg_base);

View File

@ -322,7 +322,7 @@ int octeontx_smi_probe(struct udevice *dev)
u64 baseaddr; u64 baseaddr;
debug("SMI PCI device: %x\n", bdf); debug("SMI PCI device: %x\n", bdf);
if (!dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, 0, 0, PCI_REGION_MEM)) { if (!dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, 0, 0, PCI_REGION_TYPE, PCI_REGION_MEM)) {
printf("Failed to map PCI region for bdf %x\n", bdf); printf("Failed to map PCI region for bdf %x\n", bdf);
return -1; return -1;
} }

View File

@ -253,7 +253,7 @@ int cgx_probe(struct udevice *dev)
struct cgx *cgx = dev_get_priv(dev); struct cgx *cgx = dev_get_priv(dev);
int err; int err;
cgx->reg_base = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, 0, 0, cgx->reg_base = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, 0, 0, PCI_REGION_TYPE,
PCI_REGION_MEM); PCI_REGION_MEM);
cgx->dev = dev; cgx->dev = dev;
cgx->cgx_id = ((u64)(cgx->reg_base) >> 24) & 0x7; cgx->cgx_id = ((u64)(cgx->reg_base) >> 24) & 0x7;

View File

@ -127,7 +127,7 @@ int rvu_af_probe(struct udevice *dev)
{ {
struct rvu_af *af_ptr = dev_get_priv(dev); struct rvu_af *af_ptr = dev_get_priv(dev);
af_ptr->af_base = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, 0, 0, af_ptr->af_base = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, 0, 0, PCI_REGION_TYPE,
PCI_REGION_MEM); PCI_REGION_MEM);
debug("%s RVU AF BAR %p\n", __func__, af_ptr->af_base); debug("%s RVU AF BAR %p\n", __func__, af_ptr->af_base);
af_ptr->dev = dev; af_ptr->dev = dev;

View File

@ -58,7 +58,8 @@ int rvu_pf_probe(struct udevice *dev)
debug("%s: name: %s\n", __func__, dev->name); debug("%s: name: %s\n", __func__, dev->name);
rvu->pf_base = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_2, 0, 0, PCI_REGION_MEM); rvu->pf_base = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_2, 0, 0,
PCI_REGION_TYPE, PCI_REGION_MEM);
rvu->pfid = dev_seq(dev) + 1; // RVU PF's start from 1; rvu->pfid = dev_seq(dev) + 1; // RVU PF's start from 1;
rvu->dev = dev; rvu->dev = dev;
if (!rvu_af_dev) { if (!rvu_af_dev) {

View File

@ -449,7 +449,7 @@ static int pch_gbe_probe(struct udevice *dev)
priv->dev = dev; priv->dev = dev;
iobase = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_1, 0, 0, PCI_REGION_MEM); iobase = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_1, 0, 0, PCI_REGION_TYPE, PCI_REGION_MEM);
plat->iobase = (ulong)iobase; plat->iobase = (ulong)iobase;
priv->mac_regs = (struct pch_gbe_regs *)iobase; priv->mac_regs = (struct pch_gbe_regs *)iobase;

View File

@ -29,7 +29,7 @@ static int nvme_probe(struct udevice *udev)
ndev->instance = trailing_strtol(udev->name); ndev->instance = trailing_strtol(udev->name);
ndev->bar = dm_pci_map_bar(udev, PCI_BASE_ADDRESS_0, 0, 0, ndev->bar = dm_pci_map_bar(udev, PCI_BASE_ADDRESS_0, 0, 0,
PCI_REGION_MEM); PCI_REGION_TYPE, PCI_REGION_MEM);
return nvme_init(udev); return nvme_init(udev);
} }

View File

@ -1556,7 +1556,7 @@ static void *dm_pci_map_ea_bar(struct udevice *dev, int bar, size_t offset,
} }
void *dm_pci_map_bar(struct udevice *dev, int bar, size_t offset, size_t len, void *dm_pci_map_bar(struct udevice *dev, int bar, size_t offset, size_t len,
unsigned long flags) unsigned long mask, unsigned long flags)
{ {
struct pci_child_plat *pdata = dev_get_parent_plat(dev); struct pci_child_plat *pdata = dev_get_parent_plat(dev);
struct udevice *udev = dev; struct udevice *udev = dev;
@ -1596,8 +1596,8 @@ void *dm_pci_map_bar(struct udevice *dev, int bar, size_t offset, size_t len,
* a PCI range, but a better check would be to probe for the size of * a PCI range, but a better check would be to probe for the size of
* the bar and prevent overflow more locally. * the bar and prevent overflow more locally.
*/ */
return dm_pci_bus_to_virt(udev, pci_bus_addr + offset, len, return dm_pci_bus_to_virt(udev, pci_bus_addr + offset, len, mask, flags,
PCI_REGION_TYPE, flags, MAP_NOCACHE); MAP_NOCACHE);
} }
static int _dm_pci_find_next_capability(struct udevice *dev, u8 pos, int cap) static int _dm_pci_find_next_capability(struct udevice *dev, u8 pos, int cap)

View File

@ -568,7 +568,7 @@ static int octeon_spi_probe(struct udevice *dev)
pci_dev_t bdf = dm_pci_get_bdf(dev); pci_dev_t bdf = dm_pci_get_bdf(dev);
debug("SPI PCI device: %x\n", bdf); debug("SPI PCI device: %x\n", bdf);
priv->base = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, 0, 0, priv->base = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, 0, 0, PCI_REGION_TYPE,
PCI_REGION_MEM); PCI_REGION_MEM);
/* Add base offset */ /* Add base offset */
priv->base += 0x1000; priv->base += 0x1000;

View File

@ -36,7 +36,8 @@ static int ehci_pci_init(struct udevice *dev, struct ehci_hccr **ret_hccr,
return ret; return ret;
hccr = (struct ehci_hccr *)dm_pci_map_bar(dev, hccr = (struct ehci_hccr *)dm_pci_map_bar(dev,
PCI_BASE_ADDRESS_0, 0, 0, PCI_REGION_MEM); PCI_BASE_ADDRESS_0, 0, 0, PCI_REGION_TYPE,
PCI_REGION_MEM);
hcor = (struct ehci_hcor *)((uintptr_t) hccr + hcor = (struct ehci_hcor *)((uintptr_t) hccr +
HC_LENGTH(ehci_readl(&hccr->cr_capbase))); HC_LENGTH(ehci_readl(&hccr->cr_capbase)));

View File

@ -18,7 +18,7 @@ static int ohci_pci_probe(struct udevice *dev)
{ {
struct ohci_regs *regs; struct ohci_regs *regs;
regs = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, 0, 0, PCI_REGION_MEM); regs = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, 0, 0, PCI_REGION_TYPE, PCI_REGION_MEM);
return ohci_register(dev, regs); return ohci_register(dev, regs);
} }

View File

@ -27,7 +27,8 @@ static int xhci_pci_init(struct udevice *dev, struct xhci_hccr **ret_hccr,
u32 cmd; u32 cmd;
hccr = (struct xhci_hccr *)dm_pci_map_bar(dev, hccr = (struct xhci_hccr *)dm_pci_map_bar(dev,
PCI_BASE_ADDRESS_0, 0, 0, PCI_REGION_MEM); PCI_BASE_ADDRESS_0, 0, 0, PCI_REGION_TYPE,
PCI_REGION_MEM);
if (!hccr) { if (!hccr) {
printf("xhci-pci init cannot map PCI mem bar\n"); printf("xhci-pci init cannot map PCI mem bar\n");
return -EIO; return -EIO;

View File

@ -319,7 +319,8 @@ static int virtio_pci_probe(struct udevice *udev)
uc_priv->device = subdevice; uc_priv->device = subdevice;
uc_priv->vendor = subvendor; uc_priv->vendor = subvendor;
priv->ioaddr = dm_pci_map_bar(udev, PCI_BASE_ADDRESS_0, 0, 0, PCI_REGION_IO); priv->ioaddr = dm_pci_map_bar(udev, PCI_BASE_ADDRESS_0, 0, 0,
PCI_REGION_TYPE, PCI_REGION_IO);
if (!priv->ioaddr) if (!priv->ioaddr)
return -ENXIO; return -ENXIO;
debug("(%s): virtio legacy device reg base %04lx\n", debug("(%s): virtio legacy device reg base %04lx\n",

View File

@ -1352,11 +1352,12 @@ pci_addr_t dm_pci_phys_to_bus(struct udevice *dev, phys_addr_t addr, size_t len,
* @bar: Bar register offset (PCI_BASE_ADDRESS_...) * @bar: Bar register offset (PCI_BASE_ADDRESS_...)
* @offset: Offset from the base to map * @offset: Offset from the base to map
* @len: Length to map * @len: Length to map
* @mask: Mask to match flags for the region type
* @flags: Flags for the region type (PCI_REGION_...) * @flags: Flags for the region type (PCI_REGION_...)
* @return: pointer to the virtual address to use or 0 on error * @return: pointer to the virtual address to use or 0 on error
*/ */
void *dm_pci_map_bar(struct udevice *dev, int bar, size_t offset, size_t len, void *dm_pci_map_bar(struct udevice *dev, int bar, size_t offset, size_t len,
unsigned long flags); unsigned long mask, unsigned long flags);
/** /**
* dm_pci_find_next_capability() - find a capability starting from an offset * dm_pci_find_next_capability() - find a capability starting from an offset

View File

@ -268,27 +268,27 @@ static int dm_test_pci_ea(struct unit_test_state *uts)
ut_asserteq(PCI_CAP_ID_EA_OFFSET, cap); ut_asserteq(PCI_CAP_ID_EA_OFFSET, cap);
/* test swap case in BAR 1 */ /* test swap case in BAR 1 */
bar = dm_pci_map_bar(swap, PCI_BASE_ADDRESS_0, 0, 0, 0); bar = dm_pci_map_bar(swap, PCI_BASE_ADDRESS_0, 0, 0, PCI_REGION_TYPE, 0);
ut_assertnonnull(bar); ut_assertnonnull(bar);
*(int *)bar = 2; /* swap upper/lower */ *(int *)bar = 2; /* swap upper/lower */
bar = dm_pci_map_bar(swap, PCI_BASE_ADDRESS_1, 0, 0, 0); bar = dm_pci_map_bar(swap, PCI_BASE_ADDRESS_1, 0, 0, PCI_REGION_TYPE, 0);
ut_assertnonnull(bar); ut_assertnonnull(bar);
strcpy(bar, "ea TEST"); strcpy(bar, "ea TEST");
unmap_sysmem(bar); unmap_sysmem(bar);
bar = dm_pci_map_bar(swap, PCI_BASE_ADDRESS_1, 0, 0, 0); bar = dm_pci_map_bar(swap, PCI_BASE_ADDRESS_1, 0, 0, PCI_REGION_TYPE, 0);
ut_assertnonnull(bar); ut_assertnonnull(bar);
ut_asserteq_str("EA test", bar); ut_asserteq_str("EA test", bar);
/* test magic values in BARs2, 4; BAR 3 is n/a */ /* test magic values in BARs2, 4; BAR 3 is n/a */
bar = dm_pci_map_bar(swap, PCI_BASE_ADDRESS_2, 0, 0, 0); bar = dm_pci_map_bar(swap, PCI_BASE_ADDRESS_2, 0, 0, PCI_REGION_TYPE, 0);
ut_assertnonnull(bar); ut_assertnonnull(bar);
ut_asserteq(PCI_EA_BAR2_MAGIC, *(u32 *)bar); ut_asserteq(PCI_EA_BAR2_MAGIC, *(u32 *)bar);
bar = dm_pci_map_bar(swap, PCI_BASE_ADDRESS_3, 0, 0, 0); bar = dm_pci_map_bar(swap, PCI_BASE_ADDRESS_3, 0, 0, PCI_REGION_TYPE, 0);
ut_assertnull(bar); ut_assertnull(bar);
bar = dm_pci_map_bar(swap, PCI_BASE_ADDRESS_4, 0, 0, 0); bar = dm_pci_map_bar(swap, PCI_BASE_ADDRESS_4, 0, 0, PCI_REGION_TYPE, 0);
ut_assertnonnull(bar); ut_assertnonnull(bar);
ut_asserteq(PCI_EA_BAR4_MAGIC, *(u32 *)bar); ut_asserteq(PCI_EA_BAR4_MAGIC, *(u32 *)bar);