[Very RFC 26/46] powernv/pci: Remove pdn from pnv_pci_cfg_{read|write}
Alexey Kardashevskiy
aik at ozlabs.ru
Wed Nov 27 13:16:32 AEDT 2019
On 20/11/2019 12:28, Oliver O'Halloran wrote:
> Remove the use of pci_dn from the low-level config space access functions.
> These are used by the eeh's config ops and the bus config ops that we
> provide to the PCI core.
>
> Signed-off-by: Oliver O'Halloran <oohall at gmail.com>
> ---
> arch/powerpc/platforms/powernv/eeh-powernv.c | 14 +++--------
> arch/powerpc/platforms/powernv/pci.c | 26 ++++++++------------
> arch/powerpc/platforms/powernv/pci.h | 6 ++---
> 3 files changed, 16 insertions(+), 30 deletions(-)
>
> diff --git a/arch/powerpc/platforms/powernv/eeh-powernv.c b/arch/powerpc/platforms/powernv/eeh-powernv.c
> index 49a932ff092a..8a73bc7517c5 100644
> --- a/arch/powerpc/platforms/powernv/eeh-powernv.c
> +++ b/arch/powerpc/platforms/powernv/eeh-powernv.c
> @@ -331,31 +331,25 @@ static inline bool pnv_eeh_cfg_blocked(struct eeh_dev *edev)
> static int pnv_eeh_read_config(struct eeh_dev *edev,
> int where, int size, u32 *val)
> {
> - struct pci_dn *pdn = eeh_dev_to_pdn(edev);
> -
> - if (!pdn)
> - return PCIBIOS_DEVICE_NOT_FOUND;
> + struct pnv_phb *phb = edev->controller->private_data;
>
> if (pnv_eeh_cfg_blocked(edev)) {
> *val = 0xFFFFFFFF;
> return PCIBIOS_SET_FAILED;
> }
>
> - return pnv_pci_cfg_read(pdn, where, size, val);
> + return pnv_pci_cfg_read(phb, edev->bdfn, where, size, val);
> }
>
> static int pnv_eeh_write_config(struct eeh_dev *edev,
> int where, int size, u32 val)
> {
> - struct pci_dn *pdn = eeh_dev_to_pdn(edev);
> -
> - if (!pdn)
> - return PCIBIOS_DEVICE_NOT_FOUND;
> + struct pnv_phb *phb = edev->controller->private_data;
>
> if (pnv_eeh_cfg_blocked(edev))
> return PCIBIOS_SET_FAILED;
>
> - return pnv_pci_cfg_write(pdn, where, size, val);
> + return pnv_pci_cfg_write(phb, edev->bdfn, where, size, val);
> }
>
> static struct eeh_pe *pnv_eeh_pe_get_parent(struct pci_dev *pdev)
> diff --git a/arch/powerpc/platforms/powernv/pci.c b/arch/powerpc/platforms/powernv/pci.c
> index 50142ff045ac..36eea4bb514c 100644
> --- a/arch/powerpc/platforms/powernv/pci.c
> +++ b/arch/powerpc/platforms/powernv/pci.c
> @@ -654,11 +654,9 @@ static void pnv_pci_config_check_eeh(struct pnv_phb *phb, u16 bdfn)
> }
> }
>
> -int pnv_pci_cfg_read(struct pci_dn *pdn,
> +int pnv_pci_cfg_read(struct pnv_phb *phb, u16 bdfn,
> int where, int size, u32 *val)
> {
> - struct pnv_phb *phb = pdn->phb->private_data;
> - u32 bdfn = (pdn->busno << 8) | pdn->devfn;
> s64 rc;
>
> switch (size) {
> @@ -685,19 +683,16 @@ int pnv_pci_cfg_read(struct pci_dn *pdn,
> return PCIBIOS_FUNC_NOT_SUPPORTED;
> }
>
> - pr_devel("%s: bus: %x devfn: %x +%x/%x -> %08x\n",
> - __func__, pdn->busno, pdn->devfn, where, size, *val);
> + pr_devel("%s: bdfn: %x +%x/%x -> %08x\n",
> + __func__, bdfn, where, size, *val);
> return PCIBIOS_SUCCESSFUL;
> }
>
> -int pnv_pci_cfg_write(struct pci_dn *pdn,
> +int pnv_pci_cfg_write(struct pnv_phb *phb, u16 bdfn,
> int where, int size, u32 val)
> {
> - struct pnv_phb *phb = pdn->phb->private_data;
> - u32 bdfn = (pdn->busno << 8) | pdn->devfn;
> -
> - pr_devel("%s: bus: %x devfn: %x +%x/%x -> %08x\n",
> - __func__, pdn->busno, pdn->devfn, where, size, val);
> + pr_devel("%s: bdfn: %x +%x/%x -> %08x\n",
> + __func__, bdfn, where, size, val);
> switch (size) {
> case 1:
> opal_pci_config_write_byte(phb->opal_id, bdfn, where, val);
> @@ -753,12 +748,11 @@ static int pnv_pci_read_config(struct pci_bus *bus,
> if (!pdn)
> return PCIBIOS_DEVICE_NOT_FOUND;
>
> - edev = pdn_to_eeh_dev(pdn);
> + edev = pnv_eeh_find_edev(phb, bdfn);
> if (!pnv_eeh_pre_cfg_check(edev))
> return PCIBIOS_DEVICE_NOT_FOUND;
>
> - ret = pnv_pci_cfg_read(pdn, where, size, val);
> - phb = pdn->phb->private_data;
> + ret = pnv_pci_cfg_read(phb, bdfn, where, size, val);
> if (phb->flags & PNV_PHB_FLAG_EEH && edev) {
> if (*val == EEH_IO_ERROR_VALUE(size) &&
> eeh_dev_check_failure(edev))
> @@ -784,11 +778,11 @@ static int pnv_pci_write_config(struct pci_bus *bus,
> if (!pdn)
> return PCIBIOS_DEVICE_NOT_FOUND;
>
> - edev = pdn_to_eeh_dev(pdn);
> + edev = pnv_eeh_find_edev(phb, bdfn);
> if (!pnv_eeh_pre_cfg_check(edev))
> return PCIBIOS_DEVICE_NOT_FOUND;
>
> - ret = pnv_pci_cfg_write(pdn, where, size, val);
> + ret = pnv_pci_cfg_write(phb, bdfn, where, size, val);
>
> if (!(phb->flags & PNV_PHB_FLAG_EEH))
> pnv_pci_config_check_eeh(phb, bdfn);
> diff --git a/arch/powerpc/platforms/powernv/pci.h b/arch/powerpc/platforms/powernv/pci.h
> index be435a810d19..52dc4d05eaca 100644
> --- a/arch/powerpc/platforms/powernv/pci.h
> +++ b/arch/powerpc/platforms/powernv/pci.h
> @@ -7,8 +7,6 @@
> #include <asm/iommu.h>
> #include <asm/msi_bitmap.h>
>
> -struct pci_dn;
> -
This is the best bit :)
Reviewed-by: Alexey Kardashevskiy <aik at ozlabs.ru>
> enum pnv_phb_type {
> PNV_PHB_IODA1 = 0,
> PNV_PHB_IODA2 = 1,
> @@ -174,9 +172,9 @@ extern struct pci_ops pnv_pci_ops;
>
> void pnv_pci_dump_phb_diag_data(struct pci_controller *hose,
> unsigned char *log_buff);
> -int pnv_pci_cfg_read(struct pci_dn *pdn,
> +int pnv_pci_cfg_read(struct pnv_phb *phb, u16 bdfn,
> int where, int size, u32 *val);
> -int pnv_pci_cfg_write(struct pci_dn *pdn,
> +int pnv_pci_cfg_write(struct pnv_phb *phb, u16 bdfn,
> int where, int size, u32 val);
> extern struct iommu_table *pnv_pci_table_alloc(int nid);
>
>
--
Alexey
More information about the Linuxppc-dev
mailing list