randomuser987987 Posted December 16, 2021 Share Posted December 16, 2021 (edited) Hello everybody, I created a SSDT that does some promising change in the right direction, but it has no effect on the destination device, unfortunately. Does somebody maybe have an idea where to proceed? The goal is to report these device properties to macOS for the device (GPU) at PciRoot(0x1)/Pci(0x1,0x2)/Pci(0x0,0x0), so that some kexts will be loaded for it: "model", Buffer() { "Unknown" }, "device-id", Buffer() { 0xdf, 0x67, 0x00, 0x00 }, "revision-id", Buffer() { 0xc2, 0x00, 0x00, 0x00 }, "no-gfx-spoof", Buffer() { 0x01, 0x00, 0x00, 0x00 }, The output of gfxutil is below. I pruned the output to the relevant entries, which means GPU is connected to PCIe bridge which is connected to PCI-root. What I was able to achieve with the SSDT mentioned above is to rename what was previously pci-bridge@1,2 into BRG2@1,2, which is the PCIe bridge to which the GPU is connected to. The desired GPU is apparently named GFX1 but this was done automatically by macOS. 00:01.2 1b36:000c /PCI0@0/BRG2@1,2 = PciRoot(0x1)/Pci(0x1,0x2) 04:00.0 1002:694c /PCI0@0/BRG2@1,2/GFX1@0 = PciRoot(0x1)/Pci(0x1,0x2)/Pci(0x0,0x0) How did I conceive the SSDT and what is the description? I started by using a SSDT that already solves the problem of macOS not working with the device. The technique is to basically spoof the desired values, and then later use another kext to round off the errors. Since the ACPI tables on my computer are different than on their computer, the SSDT is not a drop-in solution, but must be modified to reflect the differences in the device tree. Using the documentation from the Linux Kernel further at the bottom I was able to gain insight into how to approach this. The GPU is basically a device one layer deeper than the bridge, so first we need to define the bridge. We do this by opening a Device statement and describing inside the address the bridge is at, e.g. 00:01.2 translates to 0x00010002 (but only because the device is directly connected to the PCI-root). The name is given in the parentheses (BRG2). Then, my assumption is, we can inside that Device define another device which would be the target GPU and have all the other methods and variables then just run inside that nested Device statement. I also tried to first define the GPU and the Bridge in another SSDT and then load the corresponding device with the External keyword like below, but it didn't help either. DefinitionBlock ("", "SSDT", 2, "OSY86 ", "DefVEGA", 0x00001000) { External (DTGP, MethodObj) // 5 Arguments External (OSDW, MethodObj) // 0 Arguments External (\_SB.PCI0, DeviceObj) Scope (\_SB.PCI0) { Device (BRG2) // Bridge 1,2 { Name (_ADR, 0x00010002) Device (VEGA) { Name (_ADR, 0x0000) } } } } I also tried DeviceProperties in OpenCore, but that wouldn't solve the problem that the required kext is not loaded. Apparently, the device requires setting the DevieID on a different level. I also tried to use \_SB.PCI0.BRG2.GFX1 as Device and Scope description, but it didn't help either. Anybody some ideas? EDIT Here is the original DSDT of the system. https://pastebin.com/wYNqf1a1 I get AE_NOT_FOUND errors on boot, checkout this log. https://pastebin.com/Tynwr4j7 Edited December 16, 2021 by randomuser987987 Quote Link to comment https://www.insanelymac.com/forum/topic/349989-ssdt-for-changing-deviceid-has-no-effect/ Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.