On 2026. október 15., csütörtök 20:18:36 közép-európai téli idő Maciej 
Kucharek wrote:
> On MacBookPros with switchable graphics, the firmware puts VRAM at MC
> address 0 when the iGPU is enabled.  A later post (S3 resume, GPU
> reset) moves VRAM back to the VBIOS default.  The SI fix resets and
> posts the ASIC at load, so the driver uses the VBIOS layout from the
> start:
> 
>   "drm/amdgpu: reset SI ASIC on MacBookPros with VRAM at 0"
> 
> No MacBookPro has a CIK GPU, and no affected CIK board is known.  Add
> the same test to cik_need_reset_on_init(), so that SI, CIK and VI
> handle this firmware layout in the same way. 

Just a side note: some old iMacs have a Bonaire GPU, which is CI.
Not sure if those boards are affected or not, but it definitely won't hurt.

> gmc_v7_0 reads
> MC_VM_FB_LOCATION once at init and does not reprogram it.  A CIK board
> with VRAM at 0 therefore has the same problem as the SI boards.
> 
> After the reset, FB_BASE is not 0, so the new test does not fire again
> on a module reload.
> 
> Only compile-tested.
> 
> Suggested-by: Alex Deucher <[email protected]>
> Cc: [email protected]
> Assisted-by: Claude:claude-opus-5-5
> Signed-off-by: Maciej Kucharek <[email protected]>
> ---
>  drivers/gpu/drm/amd/amdgpu/cik.c | 10 ++++++++++
>  1 file changed, 10 insertions(+)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/cik.c
> b/drivers/gpu/drm/amd/amdgpu/cik.c index d29991a4a..e1029239b 100644
> --- a/drivers/gpu/drm/amd/amdgpu/cik.c
> +++ b/drivers/gpu/drm/amd/amdgpu/cik.c
> @@ -1927,6 +1927,16 @@ static bool cik_need_reset_on_init(struct
> amdgpu_device *adev) {
>       u32 clock_cntl, pc;
> 
> +     /*
> +      * MacBookPros with switchable graphics put VRAM at 0 when the iGPU
> +      * is enabled.  Any later post (S3 resume, GPU reset) moves it back 
to
> +      * the vbios default, so reset and post on load to start with the
> +      * vbios layout.
> +      */
> +     if (adev->pdev->subsystem_vendor == PCI_VENDOR_ID_APPLE &&
> +         !(RREG32(mmMC_VM_FB_LOCATION) & 
MC_VM_FB_LOCATION__FB_BASE_MASK))
> +             return true;
> +
>       if (adev->flags & AMD_IS_APU)
>               return false;




Reply via email to