drm/amd/display: use the proper fb offset for DM
authorAlex Deucher <alexander.deucher@amd.com>
Mon, 28 Nov 2022 15:38:53 +0000 (10:38 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 1 Dec 2022 20:21:34 +0000 (15:21 -0500)
This fixes DMCU initialization in APU GPU passthrough.  The
DMCU needs the GPU physical address, not the CPU physical
address.  This ends up working out on bare metal because
we always use the physical address, but doesn't work in
passthrough because the addresses are different.

Reviewed-by: Huang Rui <ray.huang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c

index 475a63ba50d821b8cf45543ef5b4088aa7b5d54a..3934f370a1c2d13d2ae97b3e891ebb0f0ae62356 100644 (file)
@@ -1096,7 +1096,7 @@ static int dm_dmub_hw_init(struct amdgpu_device *adev)
        /* Initialize hardware. */
        memset(&hw_params, 0, sizeof(hw_params));
        hw_params.fb_base = adev->gmc.fb_start;
-       hw_params.fb_offset = adev->gmc.aper_base;
+       hw_params.fb_offset = adev->vm_manager.vram_base_offset;
 
        /* backdoor load firmware and trigger dmub running */
        if (adev->firmware.load_type != AMDGPU_FW_LOAD_PSP)
@@ -1218,7 +1218,7 @@ static void mmhub_read_system_context(struct amdgpu_device *adev, struct dc_phy_
        pa_config->system_aperture.agp_top = (uint64_t)agp_top << 24;
 
        pa_config->system_aperture.fb_base = adev->gmc.fb_start;
-       pa_config->system_aperture.fb_offset = adev->gmc.aper_base;
+       pa_config->system_aperture.fb_offset = adev->vm_manager.vram_base_offset;
        pa_config->system_aperture.fb_top = adev->gmc.fb_end;
 
        pa_config->gart_config.page_table_start_addr = page_table_start.quad_part << 12;