AMDGPU_GEM_DOMAIN_VRAM,
                                      &psp->tmr_bo, &psp->tmr_mc_addr, pptr);
 
+       /* workaround the tmr_mc_addr:
+        * PSP requires an address in FB aperture. Right now driver produce
+        * tmr_mc_addr in the GART aperture. Convert it back to FB aperture
+        * for PSP. Will revert it after we get a fix from PSP FW.
+        */
+       if (psp->adev->asic_type == CHIP_ALDEBARAN) {
+               psp->tmr_mc_addr -= psp->adev->gmc.fb_start;
+               psp->tmr_mc_addr += psp->adev->gmc.fb_start_original;
+       }
+
        return ret;
 }
 
 
         * FB aperture and AGP aperture. Disable them.
         */
        if (adev->gmc.pdb0_bo) {
-               WREG32_SOC15(GC, 0, mmMC_VM_FB_LOCATION_TOP, 0);
-               WREG32_SOC15(GC, 0, mmMC_VM_FB_LOCATION_BASE, 0x00FFFFFF);
-               WREG32_SOC15(GC, 0, mmMC_VM_AGP_TOP, 0);
-               WREG32_SOC15(GC, 0, mmMC_VM_AGP_BOT, 0xFFFFFF);
-               WREG32_SOC15(GC, 0, mmMC_VM_SYSTEM_APERTURE_LOW_ADDR, 0x3FFFFFFF);
-               WREG32_SOC15(GC, 0, mmMC_VM_SYSTEM_APERTURE_HIGH_ADDR, 0);
+               if (adev->asic_type == CHIP_ALDEBARAN) {
+                       WREG32_SOC15(GC, 0, mmMC_VM_FB_LOCATION_TOP, adev->gmc.fb_end_original >> 24);
+                       WREG32_SOC15(GC, 0, mmMC_VM_FB_LOCATION_BASE, adev->gmc.fb_start_original >> 24);
+                       WREG32_SOC15(GC, 0, mmMC_VM_AGP_TOP, 0);
+                       WREG32_SOC15(GC, 0, mmMC_VM_AGP_BOT, 0xFFFFFF);
+                       WREG32_SOC15(GC, 0, mmMC_VM_SYSTEM_APERTURE_LOW_ADDR, adev->gmc.fb_start_original >> 18);
+                       WREG32_SOC15(GC, 0, mmMC_VM_SYSTEM_APERTURE_HIGH_ADDR, adev->gmc.fb_end_original >> 18);
+               } else {
+                       WREG32_SOC15(GC, 0, mmMC_VM_FB_LOCATION_TOP, 0);
+                       WREG32_SOC15(GC, 0, mmMC_VM_FB_LOCATION_BASE, 0x00FFFFFF);
+                       WREG32_SOC15(GC, 0, mmMC_VM_AGP_TOP, 0);
+                       WREG32_SOC15(GC, 0, mmMC_VM_AGP_BOT, 0xFFFFFF);
+                       WREG32_SOC15(GC, 0, mmMC_VM_SYSTEM_APERTURE_LOW_ADDR, 0x3FFFFFFF);
+                       WREG32_SOC15(GC, 0, mmMC_VM_SYSTEM_APERTURE_HIGH_ADDR, 0);
+               }
        }
 }
 
 
 
        adev->gmc.fb_start = base;
        adev->gmc.fb_end = top;
+       adev->gmc.fb_start_original = base;
+       adev->gmc.fb_end_original = top;
 
        return base;
 }
        if (adev->gmc.pdb0_bo) {
                WREG32_SOC15(MMHUB, 0, regMC_VM_AGP_BOT, 0xFFFFFF);
                WREG32_SOC15(MMHUB, 0, regMC_VM_AGP_TOP, 0);
-               WREG32_SOC15(MMHUB, 0, regMC_VM_FB_LOCATION_TOP, 0);
-               WREG32_SOC15(MMHUB, 0, regMC_VM_FB_LOCATION_BASE, 0x00FFFFFF);
-               WREG32_SOC15(MMHUB, 0, regMC_VM_SYSTEM_APERTURE_LOW_ADDR, 0x3FFFFFFF);
-               WREG32_SOC15(MMHUB, 0, regMC_VM_SYSTEM_APERTURE_HIGH_ADDR, 0);
+               WREG32_SOC15(MMHUB, 0, regMC_VM_FB_LOCATION_TOP, adev->gmc.fb_end_original >> 24);
+               WREG32_SOC15(MMHUB, 0, regMC_VM_FB_LOCATION_BASE, adev->gmc.fb_start_original >> 24);
+               WREG32_SOC15(MMHUB, 0, regMC_VM_SYSTEM_APERTURE_LOW_ADDR, adev->gmc.fb_start_original >> 18);
+               WREG32_SOC15(MMHUB, 0, regMC_VM_SYSTEM_APERTURE_HIGH_ADDR, adev->gmc.fb_end_original >> 18);
        }
        if (amdgpu_sriov_vf(adev))
                return;