[AMD Official Use Only - General] Acked-by: Evan Quan <evan.quan@xxxxxxx> > -----Original Message----- > From: amd-gfx <amd-gfx-bounces@xxxxxxxxxxxxxxxxxxxxx> On Behalf Of Alex > Deucher > Sent: Saturday, November 12, 2022 4:54 AM > To: amd-gfx@xxxxxxxxxxxxxxxxxxxxx > Cc: Deucher, Alexander <Alexander.Deucher@xxxxxxx> > Subject: [PATCH] drm/amdgpu: there is no vbios fb on devices with no > display hw (v2) > > If we enable virtual display functionality on parts with > no display hardware we can end up trying to check for and > reserve the vbios FB area on devices where it doesn't exist. > Check if display hardware is actually present on the hardware > before trying to reserve the memory. > > v2: move the check into common code > > Signed-off-by: Alex Deucher <alexander.deucher@xxxxxxx> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 + > drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 41 > ++++++++++++++++++++++ > drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c | 2 +- > 3 files changed, 43 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h > b/drivers/gpu/drm/amd/amdgpu/amdgpu.h > index 5a4aaf4d9ed1..1f3a4d596d0d 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h > @@ -1298,6 +1298,7 @@ void amdgpu_device_pcie_port_wreg(struct > amdgpu_device *adev, > u32 reg, u32 v); > struct dma_fence *amdgpu_device_switch_gang(struct amdgpu_device > *adev, > struct dma_fence *gang); > +bool amdgpu_device_has_display_hardware(struct amdgpu_device *adev); > > /* atpx handler */ > #if defined(CONFIG_VGA_SWITCHEROO) > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c > b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c > index e039df9fb3dd..148ac2e9f31f 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c > @@ -6045,3 +6045,44 @@ struct dma_fence > *amdgpu_device_switch_gang(struct amdgpu_device *adev, > dma_fence_put(old); > return NULL; > } > + > +bool amdgpu_device_has_display_hardware(struct amdgpu_device *adev) > +{ > + switch (adev->asic_type) { > +#ifdef CONFIG_DRM_AMDGPU_SI > + case CHIP_HAINAN: > +#endif > + case CHIP_TOPAZ: > + /* chips with no display hardware */ > + return false; > +#ifdef CONFIG_DRM_AMDGPU_SI > + case CHIP_TAHITI: > + case CHIP_PITCAIRN: > + case CHIP_VERDE: > + case CHIP_OLAND: > +#endif > +#ifdef CONFIG_DRM_AMDGPU_CIK > + case CHIP_BONAIRE: > + case CHIP_HAWAII: > + case CHIP_KAVERI: > + case CHIP_KABINI: > + case CHIP_MULLINS: > +#endif > + case CHIP_TONGA: > + case CHIP_FIJI: > + case CHIP_POLARIS10: > + case CHIP_POLARIS11: > + case CHIP_POLARIS12: > + case CHIP_VEGAM: > + case CHIP_CARRIZO: > + case CHIP_STONEY: > + /* chips with display hardware */ > + return true; > + default: > + /* IP discovery */ > + if (!adev->ip_versions[DCE_HWIP][0] || > + (adev->harvest_ip_mask & > AMD_HARVEST_IP_DMU_MASK)) > + return false; > + return true; > + } > +} > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c > b/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c > index 9c0d9baab4e2..4365ede42855 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c > @@ -657,7 +657,7 @@ void amdgpu_gmc_get_vbios_allocations(struct > amdgpu_device *adev) > } > > if (amdgpu_sriov_vf(adev) || > - !amdgpu_device_ip_get_ip_block(adev, > AMD_IP_BLOCK_TYPE_DCE)) { > + !amdgpu_device_has_display_hardware(adev)) { > size = 0; > } else { > size = amdgpu_gmc_get_vbios_fb_size(adev); > -- > 2.38.1