From e4e2aa9cc2cbaab9c6c0ee3a1f4e36292128762a Mon Sep 17 00:00:00 2001 From: Jordan Niethe Date: Fri, 9 Aug 2019 14:12:20 +1000 Subject: [PATCH] pci: Use a macro for accessing PCI BDF Function Number 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 Signed-off-by: Oliver O'Halloran --- core/pci.c | 6 +++--- hw/npu2.c | 6 +++--- hw/npu3-nvlink.c | 8 ++++---- hw/phb3.c | 2 +- include/npu2.h | 2 +- include/pci.h | 8 ++++---- include/skiboot.h | 1 + platforms/astbmc/vesnin.c | 2 +- 8 files changed, 18 insertions(+), 17 deletions(-) diff --git a/core/pci.c b/core/pci.c index c9b262f38b93..cd6b9f3f000c 100644 --- a/core/pci.c +++ b/core/pci.c @@ -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); @@ -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)); diff --git a/hw/npu2.c b/hw/npu2.c index f561386f5865..06eaf4d0481c 100644 --- a/hw/npu2.c +++ b/hw/npu2.c @@ -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); @@ -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; diff --git a/hw/npu3-nvlink.c b/hw/npu3-nvlink.c index c61e1b7b5ba1..3939f2c489b1 100644 --- a/hw/npu3-nvlink.c +++ b/hw/npu3-nvlink.c @@ -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) @@ -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; @@ -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) @@ -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; } diff --git a/hw/phb3.c b/hw/phb3.c index 03bcee8e4f8f..efa8ad179192 100644 --- a/hw/phb3.c +++ b/hw/phb3.c @@ -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 */ diff --git a/include/npu2.h b/include/npu2.h index 282ee8b065c5..aac7e7a58e23 100644 --- a/include/npu2.h +++ b/include/npu2.h @@ -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) diff --git a/include/pci.h b/include/pci.h index f837e0f3fe67..220d6b187f5f 100644 --- a/include/pci.h +++ b/include/pci.h @@ -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; diff --git a/include/skiboot.h b/include/skiboot.h index 7ea17bfb2f60..96d25b83dac3 100644 --- a/include/skiboot.h +++ b/include/skiboot.h @@ -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) diff --git a/platforms/astbmc/vesnin.c b/platforms/astbmc/vesnin.c index 3204bc5a6382..bd412aa8d0a1 100644 --- a/platforms/astbmc/vesnin.c +++ b/platforms/astbmc/vesnin.c @@ -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);