Use enum instead of hard coded values. There is no functional change. v2: - Add amdgpu_get_bar_idx() to map BAR roles to PCI BAR indices
Signed-off-by: Harish Kasiviswanathan <[email protected]> --- drivers/gpu/drm/amd/amdgpu/amdgpu.h | 17 ++++++ drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c | 6 +- drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 56 ++++++++++++++----- .../gpu/drm/amd/amdgpu/amdgpu_doorbell_mgr.c | 9 ++- drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c | 6 +- drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c | 6 +- drivers/gpu/drm/amd/amdgpu/gmc_v12_0.c | 6 +- drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c | 6 +- drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c | 6 +- drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c | 6 +- drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c | 9 ++- 11 files changed, 100 insertions(+), 33 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h index 5d7bfa59424a..1944d1bece86 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h @@ -1405,6 +1405,23 @@ bool amdgpu_device_supports_boco(struct amdgpu_device *adev); bool amdgpu_device_supports_smart_shift(struct amdgpu_device *adev); int amdgpu_device_supports_baco(struct amdgpu_device *adev); void amdgpu_device_detect_runtime_pm_mode(struct amdgpu_device *adev); + +/** + * enum amdgpu_pcie_bar - PCIe BAR role identifiers + * @AMDGPU_PCIE_BAR_VRAM: VRAM aperture + * @AMDGPU_PCIE_BAR_DOORBELL: Doorbell aperture (Bonaire+) + * @AMDGPU_PCIE_BAR_MMIO: MMIO register aperture + * + * Use amdgpu_get_bar_idx() to map a role to the PCI BAR index on a given ASIC. + */ +enum amdgpu_pcie_bar { + AMDGPU_PCIE_BAR_VRAM = 0, + AMDGPU_PCIE_BAR_DOORBELL = 2, + AMDGPU_PCIE_BAR_MMIO = 5, +}; + +int amdgpu_get_bar_idx(struct amdgpu_device *adev, enum amdgpu_pcie_bar bar); + bool amdgpu_device_is_peer_accessible(struct amdgpu_device *adev, struct amdgpu_device *peer_adev); int amdgpu_device_baco_enter(struct amdgpu_device *adev); diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c index aa039e148a5e..7e253bb35434 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c @@ -111,11 +111,13 @@ static bool amdgpu_read_bios_from_vram(struct amdgpu_device *adev) return false; /* FB BAR not enabled */ - if (pci_resource_len(adev->pdev, 0) == 0) + if (pci_resource_len(adev->pdev, + amdgpu_get_bar_idx(adev, AMDGPU_PCIE_BAR_VRAM)) == 0) return false; adev->bios = NULL; - vram_base = pci_resource_start(adev->pdev, 0); + vram_base = pci_resource_start(adev->pdev, + amdgpu_get_bar_idx(adev, AMDGPU_PCIE_BAR_VRAM)); adev->bios = kmalloc(size, GFP_KERNEL); if (!adev->bios) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c index 5ff224163bab..2e1e5791f123 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c @@ -1103,6 +1103,34 @@ void amdgpu_device_wb_free(struct amdgpu_device *adev, u32 wb) spin_unlock_irqrestore(&adev->wb.lock, flags); } +/** + * amdgpu_get_bar_idx - map a BAR role to the PCI BAR index + * @adev: amdgpu_device pointer + * @bar: BAR role to look up + * + * Return the PCI BAR index for @bar on @adev. + * + * VRAM is always BAR 0. Doorbells were introduced at Bonaire (CIK): pre-Bonaire + * ASICs have no dedicated doorbell BAR, and BAR 2 is used for MMIO registers. + * Bonaire and newer expose a doorbell aperture at BAR 2 and MMIO at BAR 5. + */ +int amdgpu_get_bar_idx(struct amdgpu_device *adev, enum amdgpu_pcie_bar bar) +{ + switch (bar) { + case AMDGPU_PCIE_BAR_VRAM: + return AMDGPU_PCIE_BAR_VRAM; + case AMDGPU_PCIE_BAR_DOORBELL: + return AMDGPU_PCIE_BAR_DOORBELL; + case AMDGPU_PCIE_BAR_MMIO: + if (adev->asic_type >= CHIP_BONAIRE) + return AMDGPU_PCIE_BAR_MMIO; + return AMDGPU_PCIE_BAR_DOORBELL; + default: + WARN_ON(1); + return -EINVAL; + } +} + /** * amdgpu_device_resize_fb_bar - try to resize FB BAR * @@ -1146,7 +1174,8 @@ int amdgpu_device_resize_fb_bar(struct amdgpu_device *adev) /* skip if the bios has already enabled large BAR */ if (adev->gmc.real_vram_size && - (pci_resource_len(adev->pdev, 0) >= adev->gmc.real_vram_size)) + (pci_resource_len(adev->pdev, + amdgpu_get_bar_idx(adev, AMDGPU_PCIE_BAR_VRAM)) >= adev->gmc.real_vram_size)) return 0; /* Check if the root BUS has 64bit memory resources */ @@ -1165,7 +1194,8 @@ int amdgpu_device_resize_fb_bar(struct amdgpu_device *adev) return 0; /* Limit the BAR size to what is available */ - max_size = pci_rebar_get_max_size(adev->pdev, 0); + max_size = pci_rebar_get_max_size(adev->pdev, + amdgpu_get_bar_idx(adev, AMDGPU_PCIE_BAR_VRAM)); if (max_size < 0) return 0; rbar_size = min(max_size, rbar_size); @@ -1178,9 +1208,11 @@ int amdgpu_device_resize_fb_bar(struct amdgpu_device *adev) /* Tear down doorbell as resizing will release BARs */ amdgpu_doorbell_fini(adev); - r = pci_resize_resource(adev->pdev, 0, rbar_size, - (adev->asic_type >= CHIP_BONAIRE) ? 1 << 5 - : 1 << 2); + /* Resize the VRAM BAR. Exclude the MMIO BAR from being released. */ + r = pci_resize_resource(adev->pdev, + amdgpu_get_bar_idx(adev, AMDGPU_PCIE_BAR_VRAM), + rbar_size, + BIT(amdgpu_get_bar_idx(adev, AMDGPU_PCIE_BAR_MMIO))); if (r == -ENOSPC) dev_info(adev->dev, "Not enough PCI address space for a large BAR."); @@ -1191,7 +1223,8 @@ int amdgpu_device_resize_fb_bar(struct amdgpu_device *adev) * using the device. */ r = amdgpu_doorbell_init(adev); - if (r || (pci_resource_flags(adev->pdev, 0) & IORESOURCE_UNSET)) + if (r || (pci_resource_flags(adev->pdev, + amdgpu_get_bar_idx(adev, AMDGPU_PCIE_BAR_VRAM)) & IORESOURCE_UNSET)) return -ENODEV; pci_write_config_word(adev->pdev, PCI_COMMAND, cmd); @@ -3825,13 +3858,10 @@ int amdgpu_device_init(struct amdgpu_device *adev, /* Registers mapping */ /* TODO: block userspace mapping of io register */ - if (adev->asic_type >= CHIP_BONAIRE) { - adev->rmmio_base = pci_resource_start(adev->pdev, 5); - adev->rmmio_size = pci_resource_len(adev->pdev, 5); - } else { - adev->rmmio_base = pci_resource_start(adev->pdev, 2); - adev->rmmio_size = pci_resource_len(adev->pdev, 2); - } + adev->rmmio_base = pci_resource_start(adev->pdev, + amdgpu_get_bar_idx(adev, AMDGPU_PCIE_BAR_MMIO)); + adev->rmmio_size = pci_resource_len(adev->pdev, + amdgpu_get_bar_idx(adev, AMDGPU_PCIE_BAR_MMIO)); for (i = 0; i < AMD_IP_BLOCK_TYPE_NUM; i++) atomic_set(&adev->pm.pwr_state[i], POWER_STATE_UNKNOWN); diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_doorbell_mgr.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_doorbell_mgr.c index bc7858567321..826b80481908 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_doorbell_mgr.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_doorbell_mgr.c @@ -201,14 +201,17 @@ int amdgpu_doorbell_init(struct amdgpu_device *adev) return 0; } - if (pci_resource_flags(adev->pdev, 2) & IORESOURCE_UNSET) + if (pci_resource_flags(adev->pdev, + amdgpu_get_bar_idx(adev, AMDGPU_PCIE_BAR_DOORBELL)) & IORESOURCE_UNSET) return -EINVAL; amdgpu_asic_init_doorbell_index(adev); /* doorbell bar mapping */ - adev->doorbell.base = pci_resource_start(adev->pdev, 2); - adev->doorbell.size = pci_resource_len(adev->pdev, 2); + adev->doorbell.base = pci_resource_start(adev->pdev, + amdgpu_get_bar_idx(adev, AMDGPU_PCIE_BAR_DOORBELL)); + adev->doorbell.size = pci_resource_len(adev->pdev, + amdgpu_get_bar_idx(adev, AMDGPU_PCIE_BAR_DOORBELL)); adev->doorbell.num_kernel_doorbells = min_t(u32, adev->doorbell.size / sizeof(u32), diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c index 8523833a74fb..728d93e96ea1 100644 --- a/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c @@ -694,8 +694,10 @@ static int gmc_v10_0_mc_init(struct amdgpu_device *adev) if (r) return r; } - adev->gmc.aper_base = pci_resource_start(adev->pdev, 0); - adev->gmc.aper_size = pci_resource_len(adev->pdev, 0); + adev->gmc.aper_base = pci_resource_start(adev->pdev, + amdgpu_get_bar_idx(adev, AMDGPU_PCIE_BAR_VRAM)); + adev->gmc.aper_size = pci_resource_len(adev->pdev, + amdgpu_get_bar_idx(adev, AMDGPU_PCIE_BAR_VRAM)); #ifdef CONFIG_X86_64 if ((adev->flags & AMD_IS_APU) && !amdgpu_passthrough(adev)) { diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c index 16388e3caea3..a16e681b4de0 100644 --- a/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c @@ -694,8 +694,10 @@ static int gmc_v11_0_mc_init(struct amdgpu_device *adev) if (r) return r; } - adev->gmc.aper_base = pci_resource_start(adev->pdev, 0); - adev->gmc.aper_size = pci_resource_len(adev->pdev, 0); + adev->gmc.aper_base = pci_resource_start(adev->pdev, + amdgpu_get_bar_idx(adev, AMDGPU_PCIE_BAR_VRAM)); + adev->gmc.aper_size = pci_resource_len(adev->pdev, + amdgpu_get_bar_idx(adev, AMDGPU_PCIE_BAR_VRAM)); #ifdef CONFIG_X86_64 if ((adev->flags & AMD_IS_APU) && !amdgpu_passthrough(adev)) { diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v12_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v12_0.c index 586703ec0dfa..5c2b4d2f3f16 100644 --- a/drivers/gpu/drm/amd/amdgpu/gmc_v12_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v12_0.c @@ -746,8 +746,10 @@ static int gmc_v12_0_mc_init(struct amdgpu_device *adev) return r; } - adev->gmc.aper_base = pci_resource_start(adev->pdev, 0); - adev->gmc.aper_size = pci_resource_len(adev->pdev, 0); + adev->gmc.aper_base = pci_resource_start(adev->pdev, + amdgpu_get_bar_idx(adev, AMDGPU_PCIE_BAR_VRAM)); + adev->gmc.aper_size = pci_resource_len(adev->pdev, + amdgpu_get_bar_idx(adev, AMDGPU_PCIE_BAR_VRAM)); #ifdef CONFIG_X86_64 if (((adev->flags & AMD_IS_APU) && !amdgpu_passthrough(adev)) || diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c index af6944d2d330..5bdcc276244c 100644 --- a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c @@ -323,8 +323,10 @@ static int gmc_v6_0_mc_init(struct amdgpu_device *adev) if (r) return r; } - adev->gmc.aper_base = pci_resource_start(adev->pdev, 0); - adev->gmc.aper_size = pci_resource_len(adev->pdev, 0); + adev->gmc.aper_base = pci_resource_start(adev->pdev, + amdgpu_get_bar_idx(adev, AMDGPU_PCIE_BAR_VRAM)); + adev->gmc.aper_size = pci_resource_len(adev->pdev, + amdgpu_get_bar_idx(adev, AMDGPU_PCIE_BAR_VRAM)); adev->gmc.visible_vram_size = adev->gmc.aper_size; /* set the gart size */ diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c index 93cf283191fa..d8b81d8ec954 100644 --- a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c @@ -379,8 +379,10 @@ static int gmc_v7_0_mc_init(struct amdgpu_device *adev) if (r) return r; } - adev->gmc.aper_base = pci_resource_start(adev->pdev, 0); - adev->gmc.aper_size = pci_resource_len(adev->pdev, 0); + adev->gmc.aper_base = pci_resource_start(adev->pdev, + amdgpu_get_bar_idx(adev, AMDGPU_PCIE_BAR_VRAM)); + adev->gmc.aper_size = pci_resource_len(adev->pdev, + amdgpu_get_bar_idx(adev, AMDGPU_PCIE_BAR_VRAM)); #ifdef CONFIG_X86_64 if ((adev->flags & AMD_IS_APU) && diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c index 1d3ddffd5a11..99bfd4e42977 100644 --- a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c @@ -572,8 +572,10 @@ static int gmc_v8_0_mc_init(struct amdgpu_device *adev) if (r) return r; } - adev->gmc.aper_base = pci_resource_start(adev->pdev, 0); - adev->gmc.aper_size = pci_resource_len(adev->pdev, 0); + adev->gmc.aper_base = pci_resource_start(adev->pdev, + amdgpu_get_bar_idx(adev, AMDGPU_PCIE_BAR_VRAM)); + adev->gmc.aper_size = pci_resource_len(adev->pdev, + amdgpu_get_bar_idx(adev, AMDGPU_PCIE_BAR_VRAM)); #ifdef CONFIG_X86_64 if ((adev->flags & AMD_IS_APU) && !amdgpu_passthrough(adev)) { diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c index ced0f3941863..774e93590389 100644 --- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c @@ -1588,7 +1588,8 @@ static int gmc_v9_0_early_init(struct amdgpu_ip_block *ip_block) * mode. */ adev->gmc.is_app_apu = (pkg_type == AMDGPU_PKG_TYPE_APU && - !pci_resource_len(adev->pdev, 0)); + !pci_resource_len(adev->pdev, + amdgpu_get_bar_idx(adev, AMDGPU_PCIE_BAR_VRAM))); } gmc_v9_0_set_gmc_funcs(adev); @@ -1700,8 +1701,10 @@ static int gmc_v9_0_mc_init(struct amdgpu_device *adev) if (r) return r; } - adev->gmc.aper_base = pci_resource_start(adev->pdev, 0); - adev->gmc.aper_size = pci_resource_len(adev->pdev, 0); + adev->gmc.aper_base = pci_resource_start(adev->pdev, + amdgpu_get_bar_idx(adev, AMDGPU_PCIE_BAR_VRAM)); + adev->gmc.aper_size = pci_resource_len(adev->pdev, + amdgpu_get_bar_idx(adev, AMDGPU_PCIE_BAR_VRAM)); #ifdef CONFIG_X86_64 /* -- 2.43.0
