Applied. Thanks! Alex
On Thu, Sep 24, 2026 at 5:05 PM Francisco Beltrán Millalén <[email protected]> wrote: > > On a MacBookPro14,3 with a Radeon Pro 555 (Polaris11), the framebuffer > is at MC address 0 when amdgpu loads after a cold boot, as the firmware > leaves it (MC_VM_FB_LOCATION = 0x007f0000), while the VBIOS ASIC_Init > table places it at 0xF4_0000_0000 (0xf47ff400). amdgpu reads the > location once, at init, so after a re-POST (S3 resume or GPU reset) > the framebuffer has moved and the driver keeps programming the old > one: the SMU is handed a table that was never written and the GPU > does not come back, which leaves the internal panel black. > > Resetting the ASIC on load makes ASIC_Init run before the driver reads > the location, so the driver uses the VBIOS placement from the start and > every later re-POST puts the framebuffer back where it already is. > > Add the Radeon Pro 555 used in this machine to the existing VI reset > quirk table. > > Tested on a MacBookPro14,3 on 6.18.49 with the quirk table backported > (the kernel also carries unrelated local PCI and ACPI patches for this > machine). The framebuffer is at 0x000000F400000000 after both cold and > warm boot, and the GPU survived 9 S3 cycles (lid close and rtcwake, one > of them with the lid closed for about 7.5 minutes and a USB-C disk > attached), each followed by a few minutes of 3D load; no ring timeouts > or VM faults were reported. The reset adds about 0.23 s to amdgpu init. > > Suggested-by: Christian König <[email protected]> > Suggested-by: Alex Deucher <[email protected]> > Link: > https://lore.kernel.org/all/[email protected]/ > Assisted-by: Claude:claude-opus-5-5 > Signed-off-by: Francisco Beltrán Millalén <[email protected]> > --- > v2: new approach, as suggested by Christian and Alex: instead of > rewriting MC_VM_FB_LOCATION after every re-POST in gmc_v8_0 > (v1, withdrawn), reset the ASIC on load through the existing > vi_reset_quirks table. > v1: > https://lore.kernel.org/all/[email protected]/ > > drivers/gpu/drm/amd/amdgpu/vi.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/drivers/gpu/drm/amd/amdgpu/vi.c b/drivers/gpu/drm/amd/amdgpu/vi.c > index 2cd6d7d77..a0435fd55 100644 > --- a/drivers/gpu/drm/amd/amdgpu/vi.c > +++ b/drivers/gpu/drm/amd/amdgpu/vi.c > @@ -1397,6 +1397,7 @@ struct vi_reset_quirk { > static const struct vi_reset_quirk vi_reset_quirks[] = { > { 0x67ef, PCI_VENDOR_ID_APPLE, 0x0190, 0xe3 }, /* Radeon Pro 555X */ > { 0x67ef, PCI_VENDOR_ID_APPLE, 0x018f, 0xc2 }, /* Radeon Pro 560X */ > + { 0x67ef, PCI_VENDOR_ID_APPLE, 0x017a, 0xc7 }, /* Radeon Pro 555 */ > }; > > static bool vi_need_reset_on_init(struct amdgpu_device *adev) > -- > 2.55.0
