Skip to content

Commit

Permalink
pci: Use a macro for accessing PCI BDF Function Number
Browse files Browse the repository at this point in the history
Currently when the Function Number bits of a BDF are needed the bit
operations to get it are free coded. There are many places where the
Function Number is used, so make a macro to use instead of free coding
it everytime.

Signed-off-by: Jordan Niethe <jniethe5@gmail.com>
Signed-off-by: Oliver O'Halloran <oohall@gmail.com>
  • Loading branch information
iamjpn authored and oohal committed Aug 16, 2019
1 parent f68639c commit e4e2aa9
Show file tree
Hide file tree
Showing 8 changed files with 18 additions and 17 deletions.
6 changes: 3 additions & 3 deletions core/pci.c
Expand Up @@ -1470,7 +1470,7 @@ static void pci_add_loc_code(struct dt_node *np, struct pci_device *pd)
}
lcode[pos++] = '-';
lcode[pos++] = 'T';
lcode[pos++] = (char)(pd->bdfn & 0x7) + '1';
lcode[pos++] = (char)PCI_FUNC(pd->bdfn) + '1';
lcode[pos++] = '\0';
dt_add_property_string(np, "ibm,loc-code", lcode);
free(lcode);
Expand Down Expand Up @@ -1574,9 +1574,9 @@ static void __noinline pci_add_one_device_node(struct phb *phb,
rev_class = (rev_class & 0xff) | 0x6040000;
cname = pci_class_name(rev_class >> 8);

if (pd->bdfn & 0x7)
if (PCI_FUNC(pd->bdfn))
snprintf(name, MAX_NAME - 1, "%s@%x,%x",
cname, PCI_DEV(pd->bdfn), pd->bdfn & 0x7);
cname, PCI_DEV(pd->bdfn), PCI_FUNC(pd->bdfn));
else
snprintf(name, MAX_NAME - 1, "%s@%x",
cname, PCI_DEV(pd->bdfn));
Expand Down
6 changes: 3 additions & 3 deletions hw/npu2.c
Expand Up @@ -584,10 +584,10 @@ static int npu2_assign_gmb(struct npu2_dev *ndev)
* the highest bdfn (fn = 6) and count back until we find a
* npu2_dev. */
for (bdfn = (ndev->bdfn & ~0x7) | NPU2_LINKS_PER_CHIP;
(bdfn & 0x7) != 0x7; bdfn = (bdfn & ~0x7) | ((bdfn & 0x7) - 1))
PCI_FUNC(bdfn) != 0x7; bdfn = (bdfn & ~0x7) | (PCI_FUNC(bdfn) - 1))
if (npu2_bdf_to_dev(p, bdfn))
break;
peers = bdfn & 0x7;
peers = PCI_FUNC(bdfn);

npu2_get_gpu_base(ndev, &base, &size);

Expand Down Expand Up @@ -625,7 +625,7 @@ static int npu2_assign_gmb(struct npu2_dev *ndev)
assert(0);
}

mode += ndev->bdfn & 0x7;
mode += PCI_FUNC(ndev->bdfn);
val = SETFIELD(NPU2_MEM_BAR_MODE, val, mode);

gmb = NPU2_GPU0_MEM_BAR;
Expand Down
8 changes: 4 additions & 4 deletions hw/npu3-nvlink.c
Expand Up @@ -30,7 +30,7 @@
(dev)->npu->nvlink.phb.opal_id, \
PCI_BUS_NUM((dev)->nvlink.pvd->bdfn), \
PCI_DEV((dev)->nvlink.pvd->bdfn), \
(dev)->nvlink.pvd->bdfn & 0x7, ##a)
PCI_FUNC((dev)->nvlink.pvd->bdfn), ##a)
#define NPU3DEVDBG(dev, fmt, a...) NPU3DEVLOG(PR_DEBUG, dev, fmt, ##a)
#define NPU3DEVINF(dev, fmt, a...) NPU3DEVLOG(PR_INFO, dev, fmt, ##a)
#define NPU3DEVERR(dev, fmt, a...) NPU3DEVLOG(PR_ERR, dev, fmt, ##a)
Expand Down Expand Up @@ -614,7 +614,7 @@ static void npu3_dev_assign_gmb(struct npu3_dev *dev, uint64_t addr,
assert(0);
}

mode += dev->nvlink.pvd->bdfn & 0x7;
mode += PCI_FUNC(dev->nvlink.pvd->bdfn);

val = NPU3_GPU_MEM_BAR_ENABLE |
NPU3_GPU_MEM_BAR_POISON;
Expand Down Expand Up @@ -1594,7 +1594,7 @@ int64_t npu3_init_context(struct phb *phb, uint64_t msr, uint64_t bdf)

lparshort = GETFIELD(NPU3_XTS_BDF_MAP_LPARSHORT, map);
NPU3DBG(npu, "Found LPARSHORT 0x%x for bdf %02llx:%02llx.%llx\n",
lparshort, PCI_BUS_NUM(bdf), PCI_DEV(bdf), bdf & 0x7);
lparshort, PCI_BUS_NUM(bdf), PCI_DEV(bdf), PCI_FUNC(bdf));

rc = npu3_init_context_pid(npu, lparshort, msr);
if (rc)
Expand Down Expand Up @@ -1711,7 +1711,7 @@ int64_t npu3_map_lpar(struct phb *phb, uint64_t bdf, uint64_t lparid,

if (!dev || dev->nvlink.gpu->bdfn != bdf) {
NPU3ERR(npu, "Can't find a link for bdf %02llx:%02llx.%llx\n",
PCI_BUS_NUM(bdf), PCI_DEV(bdf), bdf & 0x7);
PCI_BUS_NUM(bdf), PCI_DEV(bdf), PCI_FUNC(bdf));
rc = OPAL_PARAMETER;
goto out;
}
Expand Down
2 changes: 1 addition & 1 deletion hw/phb3.c
Expand Up @@ -2146,7 +2146,7 @@ static int64_t phb3_set_pe(struct phb *phb,
all = (all << 1) | 0x1;
else {
mask |= 0x7;
val |= (bdfn & 0x7);
val |= PCI_FUNC(bdfn);
}

/* Map or unmap the RTT range */
Expand Down
2 changes: 1 addition & 1 deletion include/npu2.h
Expand Up @@ -20,7 +20,7 @@
(p)->npu->phb_nvlink.opal_id, \
PCI_BUS_NUM((p)->bdfn), \
PCI_DEV((p)->bdfn), \
(p)->bdfn & 0x7, ##a)
PCI_FUNC((p)->bdfn), ##a)
#define NPU2DEVDBG(p, fmt, a...) NPU2DEVLOG(PR_DEBUG, p, fmt, ##a)
#define NPU2DEVINF(p, fmt, a...) NPU2DEVLOG(PR_INFO, p, fmt, ##a)
#define NPU2DEVERR(p, fmt, a...) NPU2DEVLOG(PR_ERR, p, fmt, ##a)
Expand Down
8 changes: 4 additions & 4 deletions include/pci.h
Expand Up @@ -14,22 +14,22 @@
prlog(PR_TRACE, "PHB#%04x:%02x:%02x.%x " fmt, \
(_p)->opal_id, \
PCI_BUS_NUM(_bdfn), \
PCI_DEV(_bdfn), (_bdfn) & 0x7, ## a)
PCI_DEV(_bdfn), PCI_FUNC(_bdfn), ## a)
#define PCIDBG(_p, _bdfn, fmt, a...) \
prlog(PR_DEBUG, "PHB#%04x:%02x:%02x.%x " fmt, \
(_p)->opal_id, \
PCI_BUS_NUM(_bdfn), \
PCI_DEV(_bdfn), (_bdfn) & 0x7, ## a)
PCI_DEV(_bdfn), PCI_FUNC(_bdfn), ## a)
#define PCINOTICE(_p, _bdfn, fmt, a...) \
prlog(PR_NOTICE, "PHB#%04x:%02x:%02x.%x " fmt, \
(_p)->opal_id, \
PCI_BUS_NUM(_bdfn), \
PCI_DEV(_bdfn), (_bdfn) & 0x7, ## a)
PCI_DEV(_bdfn), PCI_FUNC(_bdfn), ## a)
#define PCIERR(_p, _bdfn, fmt, a...) \
prlog(PR_ERR, "PHB#%04x:%02x:%02x.%x " fmt, \
(_p)->opal_id, \
PCI_BUS_NUM(_bdfn), \
PCI_DEV(_bdfn), (_bdfn) & 0x7, ## a)
PCI_DEV(_bdfn), PCI_FUNC(_bdfn), ## a)

struct pci_device;
struct pci_cfg_reg_filter;
Expand Down
1 change: 1 addition & 0 deletions include/skiboot.h
Expand Up @@ -140,6 +140,7 @@ static inline bool is_pow2(unsigned long val)
/* PCI Geographical Addressing */
#define PCI_BUS_NUM(bdfn) (((bdfn) >> 8) & 0xff)
#define PCI_DEV(bdfn) (((bdfn) >> 3) & 0x1f)
#define PCI_FUNC(bdfn) ((bdfn) & 0x07)

/* Clean the stray high bit which the FSP inserts: we only have 52 bits real */
static inline u64 cleanup_addr(u64 addr)
Expand Down
2 changes: 1 addition & 1 deletion platforms/astbmc/vesnin.c
Expand Up @@ -269,7 +269,7 @@ static int pciinv_walk(struct phb *phb, struct pci_device *pd, void *data)
pack->device.domain_num = cpu_to_be16(phb->opal_id & 0xffff);
pack->device.bus_num = PCI_BUS_NUM(pd->bdfn);
pack->device.device_num = PCI_DEV(pd->bdfn);
pack->device.func_num = pd->bdfn & 0x7;
pack->device.func_num = PCI_FUNC(pd->bdfn);
pack->device.vendor_id = cpu_to_be16(PCI_VENDOR_ID(pd->vdid));
pack->device.device_id = cpu_to_be16(PCI_DEVICE_ID(pd->vdid));
pack->device.class_code = cpu_to_be32(pd->class & 0xffffff);
Expand Down

0 comments on commit e4e2aa9

Please sign in to comment.