diff --git a/Lilu/Headers/kern_devinfo.hpp b/Lilu/Headers/kern_devinfo.hpp index ce798a4b..eba541fc 100644 --- a/Lilu/Headers/kern_devinfo.hpp +++ b/Lilu/Headers/kern_devinfo.hpp @@ -246,6 +246,41 @@ class DeviceInfo { static constexpr uint32_t ConnectorLessCoffeeLakePlatformId5 {0x9BC50003}; static constexpr uint32_t ConnectorLessCoffeeLakePlatformId6 {0x9BC40003}; + /** + * Kaveri, and also catches the new Granite Ridge rDNA 2 iGPU. + */ + static constexpr uint32_t GenericAMDKvGr = 0x1300; + + /** + * Kabini, Mullins, Carrizo, Stoney Ridge, Wrestler. + */ + static constexpr uint32_t GenericAMDKbMlCzStnWr = 0x9800; + + /** + * Raven/Raven2, Picasso, Barcelo, Phoenix & Phoenix 2 (?) + */ + static constexpr uint32_t GenericAMDRvPcBcPhn = 0x1500; + + /** + * Renoir, Cezanne, Lucienne, Van Gogh, Rembrandt, Raphael. + */ + static constexpr uint32_t GenericAMDRnCznLcVghRmbRph = 0x1600; + + /** + * Trinity + */ + static constexpr uint32_t GenericAMDTrinity = 0x9900; + + /** + * Sumo & Sumo2? + */ + static constexpr uint32_t GenericAMDSumo = 0x9600; + + /** + * Phoenix. + */ + static constexpr uint32_t GenericAMDPhoenix2 = 0x1900; + public: /** * Vesa framebuffer identifier diff --git a/Lilu/Sources/kern_devinfo.cpp b/Lilu/Sources/kern_devinfo.cpp index 5a37ac02..1b0fdc55 100644 --- a/Lilu/Sources/kern_devinfo.cpp +++ b/Lilu/Sources/kern_devinfo.cpp @@ -209,6 +209,14 @@ void DeviceInfo::grabDevicesFromPciRoot(IORegistryEntry *pciRoot) { DBGLOG("dev", "found IGPU device %s", safeString(name)); videoBuiltin = obj; requestedExternalSwitchOff |= videoBuiltin->getProperty(RequestedExternalSwitchOffName) != nullptr; + } else if (vendor == WIOKit::VendorID::ATIAMD && (code == WIOKit::ClassCode::DisplayController || code == WIOKit::ClassCode::VGAController)) { + uint32_t dev = 0; + WIOKit::getOSDataValue(obj, "device-id", dev); + dev = (dev & 0xFF00); + if ((dev == GenericAMDRnCznLcVghRmbRph || dev == GenericAMDRvPcBcPhn) || (dev == GenericAMDKbMlCzStnWr || dev == GenericAMDKvGr) || (dev == GenericAMDTrinity || dev == GenericAMDSumo) || dev == GenericAMDPhoenix2) { + DBGLOG("dev", "found IGPU device %s", safeString(name)); + videoBuiltin = obj; + } } else if (code == WIOKit::ClassCode::HDADevice || code == WIOKit::ClassCode::HDAMmDevice) { if (vendor == WIOKit::VendorID::Intel && name && (!strcmp(name, "HDAU") || !strcmp(name, "B0D3"))) { DBGLOG("dev", "found HDAU device %s", safeString(name)); @@ -272,10 +280,6 @@ void DeviceInfo::grabDevicesFromPciRoot(IORegistryEntry *pciRoot) { // To distinguish the devices we use audio card presence as a marker. DBGLOG("dev", "marking audio device as HDEF at %s", safeString(v.audio->getName())); audioBuiltinAnalog = v.audio; - - if (v.video && v.vendor == WIOKit::VendorID::ATIAMD) { - videoBuiltin = v.video; - } } } }