Good to know it is working!
Understanding everything is not required (I do not understand what these ATIF, ATIB, AF00, etc. are contributing to a working hack…), spotting the key elements goes a good way.
For the sake of teaching to fish rather than providing a fish for the day, I'll use your files for an explanation.
View attachment 580590
At level 1, spot the key path elements, both in External declarations and in Scope (). Under the last valid element in the path (here _SB.PC00.PEGP on Intel, _SB.PCI0.GPP0 on AMD) are the bridge name declarations (template SSDT-BRG0 from Dortania).
A bridge declaration is "Device (NAME)" with a property for the address "Name (_ADR, address)". NAME can be any valid ACPI names (four alphanumeric characters, the first being a letter). The address is not always zero: You see the actual value in IOReg after '@'. If there are multiple bridges, as is the case here, there will be nested declarations.
Then comes the GPU device, generally GFX0 at address zero (could be different…). Indicating its presence completes naming the bridge in between. For spoofing, you further give GFX0 a Method (_DSM) as described in
post #86. Properties in Package() will be injected: The most useful one is 'device-id' for the actual spoof; all other properties are cosmetic and could be defined under DeviceProperties in config.plist, which is easier to edit (at least you don't have to count the length of strings to declare it as buffer size in hexadecimal, taking account of the terminating NULL character for a C-string…).
Here, we already have complet SSDTs for a RX6900 on the Intel motheboard and a RX6950 on an AMD motherboard. All that is needed to have a SSDT for RX6950 on the Intel motherboard is to take the path (and possibly address) elements from SSDT-RX6900 and copy them into the SSDT-RX6950, replacing the AMD paths:
External declaration(s), and the whole bridge structure from Scope (LAST_VALID_ELEMENT) to Device (GFX0).
We can keep everything under GFX0.
At level 2, you can simplify the SSDT by:
- Removing the elements which are not used (External(_SB_.PC00) without a corresponding Scope(_SB.PC00); External(BTRL) where BTRL is not found anywhere.
- Replacing calls to the full DTGP() method in _DSM() by its simplified form (post #86).
- Spots that "Name (_STA, Zero)" (status: not active) disables a valid PEGP so it can be renamed as EGP0 just below. This brings no functional benefit, so we can directly use _SB.PC00.PEG1.PEGP as the last valid element in the ACPI path and name just one bridge (EGP1).
Result in IOReg, with the bridge named and the spoof applied:
View attachment 580595
We see out path elements, with their addresses after '@'.
Initially, EGP1 would have appeared as 'pci-bridge@0' and 'device-id' would have been <a5 73 00 00>.