Jump to content

[80% Solved] Iris Xe iGPU on Tiger Lake successfully loaded ICLLP Frambuffer and VRAM also recognizes 1536MB! + However, some issues.


shl628
251 posts in this topic

Recommended Posts

For VoodooI2C to work in Tiger Lake, depending on the chipset, the PCI ID of the I2C Controller must be added to Info.plist.

  • Tiger Lake-LP : 0xa0e88086&0xFFFCFFFF
  • Tiger Lake-H : 0x43e88086&0xFFFCFFFF
  • Like 1
Link to comment
Share on other sites

Posted (edited)

I succeeded in operating the I2C touchpad of my Tiger Lake laptop in Interrupt (GPIO) mode using VoodooI2C built by jalavoui.
Both the touchpad and gestures work well. 🙂

[    1.513685]: VoodooGPIOTigerLakeLP::Loading GPIO Data for TigerLake-LP
[    1.513738]: VoodooGPIOTigerLakeLP::Missing Platform Data! Aborting!
[    1.513844]: VoodooGPIOTigerLakeLP::VoodooGPIO Init!
[    1.513895]: VoodooGPIOTigerLakeLP::VoodooGPIO Initializing Community 0
[    1.514075]: VoodooGPIOTigerLakeLP::VoodooGPIO Initializing Community 1
[    1.514180]: VoodooGPIOTigerLakeLP::VoodooGPIO Initializing Community 2
[    1.514269]: VoodooGPIOTigerLakeLP::VoodooGPIO Initializing Community 3
[    1.514575]: VoodooGPIOTigerLakeLP::GPIO Controller is already awake! Not reinitializing.
[    1.562508]: VoodooI2CPCILakeController::pci8086,a0eb Starting I2C controller
[    1.563223]: VoodooI2CPCILakeController::pci8086,a0e8 Starting I2C controller
[    1.563518]: VoodooI2CPCILakeController::pci8086,a0e8 Set PCI power state D0
[    1.563523]: VoodooI2CPCILakeController::pci8086,a0e8 Current CPU is Comet Lake or Ice Lake, patching...
[    1.563680]: VoodooI2CPCILakeController::pci8086,a0e8 Publishing nub
[    1.563782]: VoodooI2CControllerDriver::pci8086,a0e8 Probing controller
[    1.563797]: VoodooI2CControllerDriver::pci8086,a0e8 Found valid Synopsys component, continuing with initialisation
[    1.563852]: VoodooI2CPCILakeController::pci8086,a0e9 Starting I2C controller
[    1.563868]: VoodooI2CPCILakeController::pci8086,a0e9 Set PCI power state D0
[    1.563871]: VoodooI2CPCILakeController::pci8086,a0e9 Current CPU is Comet Lake or Ice Lake, patching...
[    1.563969]: VoodooI2CPCILakeController::pci8086,a0e9 Publishing nub
[    1.564126]: VoodooI2CControllerDriver::pci8086,a0e9 Probing controller
[    1.564132]: VoodooI2CControllerDriver::pci8086,a0e9 Found valid Synopsys component, continuing with initialisation
[    1.564276]: VoodooI2CControllerDriver::pci8086,a0e8 Got bus configuration values
[    1.564330]: VoodooI2CControllerDriver::pci8086,a0e8 Publishing device nubs
[    1.564332]: VoodooI2CControllerDriver::pci8086,a0e8 Found I2C device: ELAN0B00
[    1.564445]: VoodooI2CDeviceNub::SPTP Found valid resources from _CRS method
[    1.564468]: VoodooI2CControllerDriver::pci8086,a0e9 Got bus configuration values
[    1.564481]: VoodooI2CDeviceNub::SPTP Returned index 0x0 from _DSM or XDSM method is not supported
[    1.564484]: VoodooI2CDeviceNub::SPTP Could not retrieve resources from _DSM or XDSM method
[    1.564488]: VoodooI2CDeviceNub::SPTP Found valid GPIO interrupts
[    1.564493]: VoodooI2CDeviceNub::SPTP Got GPIO Controller! VoodooGPIOTigerLakeLP
[    1.564556]: VoodooI2CControllerDriver::pci8086,a0e9 Publishing device nubs
[    2.066319]: VoodooI2CHIDDevice:0x1000003bc start
[    2.066331]: VoodooGPIOTigerLakeLP::Registering hardware pin 0xB3 for GPIO IRQ pin 0x108
[    2.066335]: VoodooGPIOTigerLakeLP::Successfully registered hardware pin 0xB3 for GPIO IRQ pin 0x108
[    2.168225]: VoodooI2CHIDDevice::ELAN0B00 Device initiated reset accomplished
[    2.281536]: VoodooI2CHIDDevice:0x1000003bc creating interfaces
[    2.283119]: VoodooI2CPrecisionTouchpadHIDEventDriver:0x1000003de start
[    2.283642]: VoodooInputSimulatorDevice:0x1000003e4 start
[    2.315554]: open by VoodooI2CPrecisionTouchpadHIDEventDriver 0x1000003de (0x0)
[    2.315573]: VoodooI2CPrecisionTouchpadHIDEventDriver::ELAN0B00 Putting device into Precision Touchpad Mode
[    2.317524]: VoodooInputActuatorDevice:0x1000003e7 start
[    2.317642]: VoodooInputSimulatorDevice:0x1000003e4 creating interfaces
[    2.318139]: VoodooInputActuatorDevice:0x1000003e7 creating interfaces
[    3.562525]: ApplePS2Controller: Notification consumer published: VoodooI2CPrecisionTouchpadHIDEventDriver
[    4.802203]: VoodooI2CPCILakeController::pci8086,a0eb Set PCI power state D0
[    5.503275]: VoodooI2CPCILakeController::pci8086,a0eb Current CPU is Comet Lake or Ice Lake, patching...
[    5.503325]: VoodooI2CPCILakeController::pci8086,a0eb Publishing nub
[    5.503416]: VoodooI2CControllerDriver::pci8086,a0eb Probing controller
[    5.503432]: VoodooI2CControllerDriver::pci8086,a0eb Found valid Synopsys component, continuing with initialisation
[    5.503704]: VoodooI2CControllerDriver::pci8086,a0eb Got bus configuration values
[    5.503767]: VoodooI2CControllerDriver::pci8086,a0eb Publishing device nubs
[   24.432264]: VoodooI2CHIDDevice:0x1000003bc Matching has vendor DeviceUsagePage : ff0c bundleIdentifier com.apple.AppleUserHIDDrivers ioclass AppleUserHIDEventService but transport and vendorID is missing
[   24.432276]: VoodooInputSimulatorDevice:0x1000003e4 Matching has vendor DeviceUsagePage : ff0c bundleIdentifier com.apple.AppleUserHIDDrivers ioclass AppleUserHIDEventService but transport and vendorID is missing
[   24.450965]: VoodooInputSimulatorDevice:0x1000003e4 Matching has vendor DeviceUsagePage : ff0c bundleIdentifier com.apple.AppleUserHIDDrivers ioclass AppleUserHIDEventService but transport and vendorID is missing
[   24.454410]: VoodooI2CHIDDevice:0x1000003bc Matching has vendor DeviceUsagePage : ff0c bundleIdentifier com.apple.AppleUserHIDDrivers ioclass AppleUserHIDEventService but transport and vendorID is missing
[   32.236556]: Sandbox: systemstats(318) deny(1) mach-lookup com.apple.cmio.registerassistantserviceVoodooInputSimulatorDevice:0x1000003e4 new user client
[   38.357370]: VoodooI2CPrecisionTouchpadHIDEventDriver::setProperties USBMouseStopsTrackpad = 0
[   54.554862]: VoodooInputSimulatorDevice:0x1000003e4 new user client
DefinitionBlock ("", "SSDT", 2, "hack", "SPTP", 0x00000000)
{
    External (_SB_.PC00.I2C0.SPTP, DeviceObj)
    External (_SB_.PC00.I2C0.SPTP.MINT, IntObj)
    External (GPHD, FieldUnitObj)
    External (USTP, FieldUnitObj)

    Scope (\)
    {
        If (_OSI ("Darwin"))
        {
            GPHD = Zero
            USTP = One
            \_SB.PC00.I2C0.SPTP.MINT = Zero
        }
    }
}
Edited by shl628
  • Like 1
Link to comment
Share on other sites

cool i added my device id, following the example you posted, mine is  tigerlake h according to lspci -nn so im trying it also nblue with my laptop's deviceid added, hopefully it works..

Link to comment
Share on other sites

Posted (edited)

@Mastachief

1. Have you patched the _CRS Method to operate in Interrupt (GPIO) mode on devices corresponding to I2C touchpads?
2. How does VoodooI2C's Dmesg log appear?
3. Please attach DSDT.aml

Edited by shl628
Link to comment
Share on other sites

DSDT.aml

 

I have tried by using ssdt time and then trying to edit the below section, see my striped down efi attached as well.

 

OC.zip

 

Not sure if its because its a dell machine and its PC00 instead of PCI0, but the I2C kexts are not showing up in the dmesg log. as being loaded, ioreg reports the device attaching though....

 

image.thumb.png.c830c74ed268f43956c5b7ff8a13b97a.png

 

image.thumb.png.7115f7bc21b3ae5a19f99c25f74b426d.png

 

Big-MacBook-Air ~ % sudo dmesg | grep -i I2C
Password:
[  168.038813]: 1 duplicate report for Sandbox: airportd(219) deny(1) file-read-xattr /usr/sbin/bluetoothdSandbox: com.apple.quicklook.ThumbnailsAg(432) deny(1) file-read-xattr /Users/big/Library/Mobile Documents3 duplicate reports for Sandbox: com.apple.quicklook.ThumbnailsAg(432) deny(1) file-read-xattr /Users/big/Library/Mobile DocumentsSandbox: com.apple.quicklook.ThumbnailsAg(432) deny(1) file-read-xattr /Users/big/Downloads/VoodooI2CHID.kextSandbox: com.apple.quicklook.ThumbnailsAg(432) deny(1) file-read-xattr /Users/big/Downloads/VoodooI2C.kextSandbox apply: CSExattrCryptoService[694] <bytes>LQM-WiFi: BE : Count: 0 avgLatencyMs:0 maxLatencyMs:0 

 

image.png.62e35dab365c63ab3c7f7c466954697e.png

 

I see that the _CRS Method for TPDO is near the end.

 

Scope (_SB.PC00.I2C1)
    {
        Name (I2CN, Zero)
        Name (I2CX, Zero)
        Method (_INI, 0, NotSerialized)  // _INI: Initialize
        {
            I2CN = SDS1 /* \SDS1 */
            I2CX = One
        }

        Device (TPD0)
        {
            Name (HID2, Zero)
            Name (SBFB, ResourceTemplate ()
            {
                I2cSerialBusV2 (0x002C, ControllerInitiated, 0x00061A80,
                    AddressingMode7Bit, "\\_SB.PC00.I2C1",
                    0x00, ResourceConsumer, _Y55, Exclusive,
                    )
            })
            Name (SBFG, ResourceTemplate ()
            {
                GpioInt (Level, ActiveLow, ExclusiveAndWake, PullDefault, 0x0000,
                    "\\_SB.GPI0", 0x00, ResourceConsumer, ,
                    )
                    {   // Pin list
                        0x0000
                    }
            })
            Name (SBFI, ResourceTemplate ()
            {
                Interrupt (ResourceConsumer, Level, ActiveLow, ExclusiveAndWake, ,, _Y56)
                {
                    0x00000000,
                }
            })
            CreateWordField (SBFB, \_SB.PC00.I2C1.TPD0._Y55._ADR, BADR)  // _ADR: Address
            CreateDWordField (SBFB, \_SB.PC00.I2C1.TPD0._Y55._SPE, SPED)  // _SPE: Speed
            CreateWordField (SBFG, 0x17, INT1)
            CreateDWordField (SBFI, \_SB.PC00.I2C1.TPD0._Y56._INT, INT2)  // _INT: Interrupts
            Method (_INI, 0, NotSerialized)  // _INI: Initialize
            {
                If ((OSYS < 0x07DC))
                {
                    SRXO (GPDI, One)
                }

                INT1 = GNUM (GPDI)
                INT2 = INUM (GPDI)
                If ((TPDM == Zero))
                {
                    SHPO (GPDI, One)
                }

                HID2 = TPDH /* \TPDH */
                BADR = TPDB /* \TPDB */
                If ((TPDS == Zero))
                {
                    SPED = 0x000186A0
                }

                If ((TPDS == One))
                {
                    SPED = 0x00061A80
                }

                If ((TPDS == 0x02))
                {
                    SPED = 0x000F4240
                }
            }

            Name (ITPN, "DELL0A21")
            Method (_HID, 0, NotSerialized)  // _HID: Hardware ID
            {
                Return (ITPN) /* \_SB_.PC00.I2C1.TPD0.ITPN */
            }

            Name (_CID, "PNP0C50" /* HID Protocol Device (I2C bus) */)  // _CID: Compatible ID
            Name (_S0W, 0x03)  // _S0W: S0 Device Wake State
            Name (DRDY, Zero)
            Method (_DSM, 4, Serialized)  // _DSM: Device-Specific Method
            {
                If ((DRDY == Zero))
                {
                    If ((Arg0 == HIDG))
                    {
                        DRDY = One
                        EV12 (Zero, Zero)
                    }
                }

                If ((Arg0 == HIDG))
                {
                    Return (HIDD (Arg0, Arg1, Arg2, Arg3, HID2))
                }

                If ((Arg0 == TP7G))
                {
                    Return (TP7D (Arg0, Arg1, Arg2, Arg3, SBFB, SBFG))
                }

                Return (Buffer (One)
                {
                     0x00                                             // .
                })
            }

            Method (_STA, 0, NotSerialized)  // _STA: Status
            {
                If (((TPDT != Zero) && (I2CN & One)))
                {
                    Return (0x0F)
                }

                Return (Zero)
            }

            Method (_CRS, 0, NotSerialized)  // _CRS: Current Resource Settings
            {
                If ((OSYS < 0x07DC))
                {
                    Return (SBFI) /* \_SB_.PC00.I2C1.TPD0.SBFI */
                }

                If ((TPDM == Zero))
                {
                    Return (ConcatenateResTemplate (I2CM (I2CX, BADR, SPED), SBFG))
                }

                Return (ConcatenateResTemplate (I2CM (I2CX, BADR, SPED), SBFI))
            }
        }
    }

 

Edited by Mastachief
kext view
Link to comment
Share on other sites

Posted (edited)

@Mastachief

Try using the SSDT I created below.

SSDT-TPD0.aml

DefinitionBlock ("", "SSDT", 2, "hack", "SPTP", 0x00000000)
{
    External (_SB_.PC00.I2C1, DeviceObj)
    External (FMD0, FieldUnitObj)
    External (FMD1, FieldUnitObj)
    External (FMH0, FieldUnitObj)
    External (FMH1, FieldUnitObj)
    External (FML0, FieldUnitObj)
    External (FML1, FieldUnitObj)
    External (GPHD, FieldUnitObj)
    External (SSD0, FieldUnitObj)
    External (SSD1, FieldUnitObj)
    External (SSH0, FieldUnitObj)
    External (SSH1, FieldUnitObj)
    External (SSL0, FieldUnitObj)
    External (SSL1, FieldUnitObj)
    External (TPDM, FieldUnitObj)

    Scope (\)
    {
        If (_OSI ("Darwin"))
        {
            GPHD = Zero
            TPDM = Zero
        }
    }

    Scope (_SB.PC00.I2C1)
    {
        If (_OSI ("Darwin"))
        {
            Method (PKG3, 3, Serialized)
            {
                Name (PKG, Package (0x03)
                {
                    Zero, 
                    Zero, 
                    Zero
                })
                PKG [Zero] = Arg0
                PKG [One] = Arg1
                PKG [0x02] = Arg2
                Return (PKG) /* \_SB_.PC00.I2C1.PKG3.PKG_ */
            }

            Method (SSCN, 0, NotSerialized)
            {
                Return (PKG3 (SSH1, SSL1, SSD1))
            }

            Method (FMCN, 0, NotSerialized)
            {
                Return (PKG3 (FMH1, FML1, FMD1))
            }
        }
    }
}

 

And, DebugEnhancer.kext is required to print VoodooI2C's Dmesg log on the terminal.
With DebugEnhancer.kext applied, run the command below in the terminal.
sudo dmesg | grep "Voodoo"

Edited by shl628
  • Like 1
Link to comment
Share on other sites

See below;

 

Last login: Tue Apr 30 00:40:07 on console
big@Big-MacBook-Air ~ % sudo dmesg | grep "Voodoo"    
Password:
[    1.557693]: VoodooGPIOTigerLakeLP::Loading GPIO Data for TigerLake-LP
[    1.557696]: VoodooGPIOTigerLakeLP::Missing Platform Data! Aborting!
[    1.557706]: VoodooGPIOTigerLakeLP::VoodooGPIO Init!
[    1.557708]: VoodooGPIOTigerLakeLP::VoodooGPIO Initializing Community 0
[    1.557741]: VoodooGPIOTigerLakeLP::VoodooGPIO Initializing Community 1
[    1.557768]: VoodooGPIOTigerLakeLP::VoodooGPIO Initializing Community 2
[    1.557790]: VoodooGPIOTigerLakeLP::VoodooGPIO Initializing Community 3
[    1.558822]: VoodooGPIOTigerLakeLP::GPIO Controller is already awake! Not reinitializing.
[    1.804204]: VoodooI2CPCILakeController::pci8086,a0e9 Starting I2C controller
[    1.804729]: VoodooI2CPCILakeController::pci8086,a0ea Starting I2C controller
[    1.804757]: VoodooI2CPCILakeController::pci8086,a0ea Set PCI power state D0
[    1.804760]: VoodooI2CPCILakeController::pci8086,a0ea Current CPU is Comet Lake or Ice Lake, patching...
[    1.804829]: VoodooI2CPCILakeController::pci8086,a0ea Publishing nub
[    1.804877]: VoodooI2CPCILakeController::pci8086,a0e8 Starting I2C controller
[    1.804942]: VoodooI2CPCILakeController::pci8086,a0e8 Set PCI power state D0
[    1.804964]: VoodooI2CPCILakeController::pci8086,a0e8 Current CPU is Comet Lake or Ice Lake, patching...
[    1.805012]: VoodooI2CPCILakeController::pci8086,a0e8 Publishing nub
[    1.805979]: VoodooI2CControllerDriver::pci8086,a0ea Probing controller
[    1.805982]: VoodooI2CControllerDriver::pci8086,a0e8 Probing controller
[    1.805984]: VoodooI2CControllerDriver::pci8086,a0ea Found valid Synopsys component, continuing with initialisation
[    1.805990]: VoodooI2CControllerDriver::pci8086,a0e8 Found valid Synopsys component, continuing with initialisation
[    1.806015]: VoodooI2CControllerNub::pci8086,a0ea SSCN not implemented in ACPI tables
[    1.806021]: VoodooI2CControllerNub::pci8086,a0e8 SSCN not implemented in ACPI tables
[    1.806140]: VoodooI2CControllerNub::pci8086,a0ea FMCN not implemented in ACPI tables
[    1.806148]: VoodooI2CControllerDriver::pci8086,a0ea Warning: Error getting bus config, using defaults where necessary
[    1.806209]: VoodooI2CControllerNub::pci8086,a0e8 FMCN not implemented in ACPI tables
[    1.806232]: VoodooI2CControllerDriver::pci8086,a0e8 Warning: Error getting bus config, using defaults where necessary
[    1.806236]: VoodooI2CControllerDriver::pci8086,a0ea Publishing device nubs
[    1.806336]: VoodooI2CControllerDriver::pci8086,a0e8 Publishing device nubs
[    5.184218]: VoodooI2CPCILakeController::pci8086,a0e9 Set PCI power state D0
[    7.013802]: VoodooI2CPCILakeController::pci8086,a0e9 Current CPU is Comet Lake or Ice Lake, patching...
[    7.013831]: VoodooI2CPCILakeController::pci8086,a0e9 Publishing nub
[    7.013942]: VoodooI2CControllerDriver::pci8086,a0e9 Probing controller
[    7.013949]: VoodooI2CControllerDriver::pci8086,a0e9 Found valid Synopsys component, continuing with initialisation
[    7.014154]: VoodooI2CControllerDriver::pci8086,a0e9 Got bus configuration values
[    7.014192]: VoodooI2CControllerDriver::pci8086,a0e9 Publishing device nubs
[    7.014194]: VoodooI2CControllerDriver::pci8086,a0e9 Found I2C device: DELL0A21
[    7.014341]: VoodooI2CDeviceNub::TPD0 Found valid resources from _CRS method
[    7.014480]: VoodooI2CDeviceNub::TPD0 Found valid resources from _DSM or XDSM method
[    7.014482]: VoodooI2CDeviceNub::TPD0 Prefer resources from _DSM or XDSM method
[    7.014487]: VoodooI2CDeviceNub::TPD0 Found valid GPIO interrupts
[    7.014492]: VoodooI2CDeviceNub::TPD0 Got GPIO Controller! VoodooGPIOTigerLakeLP
[    7.517294]: VoodooI2CControllerDriver::pci8086,a0e9 I2C Transaction error details
[    7.517299]: VoodooI2CControllerDriver::pci8086,a0e9 slave address not acknowledged (7bit mode)
[    7.517301]: VoodooI2CControllerDriver::pci8086,a0e9 I2C Transaction error: 0x0f800001 - aborting
[    7.517303]: VoodooI2CHIDDevice::DELL0A21 Request for HID descriptor failed
[    7.517305]: VoodooI2CHIDDevice::DELL0A21 Could not get HID descriptor

 

Link to comment
Share on other sites

shl628

i've add your id to sources

 

i remenber some bios setting related to tpad work mode.

anyway i also added missing binarys from i2c. hope it help

 

Edited by jalavoui
Link to comment
Share on other sites

There are only two major settings I see, aside from force unlock all gpio pads, which I enabled.

 

In the first image, I enabled 0x1 under VarOffset: 0x4F3

20240422_102645.jpg

Currently This is set to APIC interrupt, should I change to GPIO?

 

Does anyone recall what there bios has enabled?

 

20240422_101413.jpg

Edited by Mastachief
Link to comment
Share on other sites

Posted (edited)

@Mastachief

Try using SSDT-TPD0.aml attached below.
I tried modifying SSCN and FMCN corresponding to the I2C Bus Speed variable.

If that doesn't work, try using SSDT-TPD0-2.aml.

SSDT-TPD0.aml

SSDT-TPD0-2.aml

 

I searched and it seems that the error may be related to SSCN and FMCN.

https://github.com/VoodooI2C/VoodooI2C/issues/171

[    7.517294]: VoodooI2CControllerDriver::pci8086,a0e9 I2C Transaction error details
[    7.517299]: VoodooI2CControllerDriver::pci8086,a0e9 slave address not acknowledged (7bit mode)
[    7.517301]: VoodooI2CControllerDriver::pci8086,a0e9 I2C Transaction error: 0x0f800001 - aborting

 

Also, try changing to GPIO Interrupt in BIOS settings.

Edited by shl628
Link to comment
Share on other sites

I think I borked something in my BIOS/UEFI because after using both of the SSDT-TPD0, i receive the same ioreg and dmesg as before with the transaction error.

 

I'll have to reset by bios and redo my dvmt and MSR settings and then try again, i believe i modified some i2c setting by mistake.

 

Dell makes it so hard to reach the disconnect cable for the bios battery.

Edited by Mastachief
Link to comment
Share on other sites

omg don't break you laptop. i think you got the best machine for hacintosh. i got luck with UMAF_BETA cause the config for my machine exists.

 

i just found out no driver attempt was made for this (SOF driver)

 

Apr  7 03:02:39 linuxlite-iMacPro1-1 kernel: [   25.958827] snd_hda_intel 0000:00:1f.3: DSP detected with PCI class/subclass/prog-if info 0x040100
Apr  7 03:02:39 linuxlite-iMacPro1-1 kernel: [   25.958859] snd_hda_intel 0000:00:1f.3: Digital mics found on Skylake+ platform, using SOF driver
Apr  7 03:02:39 linuxlite-iMacPro1-1 kernel: [   26.739183] sof-audio-pci-intel-tgl 0000:00:1f.3: hda codecs found, mask 5
Apr  7 03:02:39 linuxlite-iMacPro1-1 kernel: [   26.739188] sof-audio-pci-intel-tgl 0000:00:1f.3: using HDA machine driver skl_hda_dsp_generic now
Apr  7 03:02:39 linuxlite-iMacPro1-1 kernel: [   27.022979] snd_hda_codec_realtek ehdaudio0D0: autoconfig for ALC255: line_outs=1 (0x14/0x0/0x0/0x0/0x0) type:speaker
Apr  7 03:02:39 linuxlite-iMacPro1-1 kernel: [   27.022983] snd_hda_codec_realtek ehdaudio0D0:    speaker_outs=0 (0x0/0x0/0x0/0x0/0x0)
Apr  7 03:02:39 linuxlite-iMacPro1-1 kernel: [   27.022985] snd_hda_codec_realtek ehdaudio0D0:    hp_outs=1 (0x21/0x0/0x0/0x0/0x0)
Apr  7 03:02:39 linuxlite-iMacPro1-1 kernel: [   27.022986] snd_hda_codec_realtek ehdaudio0D0:    mono: mono_out=0x0
Apr  7 03:02:39 linuxlite-iMacPro1-1 kernel: [   27.022987] snd_hda_codec_realtek ehdaudio0D0:    inputs:
Apr  7 03:02:39 linuxlite-iMacPro1-1 kernel: [   27.068824] snd_hda_codec_realtek ehdaudio0D0: ASoC: sink widget AIF1TX overwritten
Apr  7 03:02:39 linuxlite-iMacPro1-1 kernel: [   27.068831] snd_hda_codec_realtek ehdaudio0D0: ASoC: source widget AIF1RX overwritten
Apr  7 03:02:39 linuxlite-iMacPro1-1 kernel: [   27.068974] skl_hda_dsp_generic skl_hda_dsp_generic: ASoC: sink widget hifi3 overwritten
Apr  7 03:02:39 linuxlite-iMacPro1-1 kernel: [   27.068980] skl_hda_dsp_generic skl_hda_dsp_generic: ASoC: sink widget hifi2 overwritten
Apr  7 03:02:39 linuxlite-iMacPro1-1 kernel: [   27.068984] skl_hda_dsp_generic skl_hda_dsp_generic: ASoC: sink widget hifi1 overwritten
Apr  7 03:02:39 linuxlite-iMacPro1-1 kernel: [   27.068988] skl_hda_dsp_generic skl_hda_dsp_generic: ASoC: source widget Codec Output Pin1 overwritten
Apr  7 03:02:39 linuxlite-iMacPro1-1 kernel: [   27.068992] skl_hda_dsp_generic skl_hda_dsp_generic: ASoC: sink widget Codec Input Pin1 overwritten
Apr  7 03:02:39 linuxlite-iMacPro1-1 kernel: [   27.068998] skl_hda_dsp_generic skl_hda_dsp_generic: ASoC: sink widget Analog Codec Playback overwritten
Apr  7 03:02:39 linuxlite-iMacPro1-1 kernel: [   27.069003] skl_hda_dsp_generic skl_hda_dsp_generic: ASoC: sink widget Digital Codec Playback overwritten
Apr  7 03:02:39 linuxlite-iMacPro1-1 kernel: [   27.069009] skl_hda_dsp_generic skl_hda_dsp_generic: ASoC: sink widget Alt Analog Codec Playback overwritten
Apr  7 03:02:39 linuxlite-iMacPro1-1 kernel: [   27.069015] skl_hda_dsp_generic skl_hda_dsp_generic: ASoC: source widget Analog Codec Capture overwritten
Apr  7 03:02:39 linuxlite-iMacPro1-1 kernel: [   27.069020] skl_hda_dsp_generic skl_hda_dsp_generic: ASoC: source widget Digital Codec Capture overwritten
Apr  7 03:02:39 linuxlite-iMacPro1-1 kernel: [   27.069026] skl_hda_dsp_generic skl_hda_dsp_generic: ASoC: source widget Alt Analog Codec Capture overwritten
Apr  7 03:02:39 linuxlite-iMacPro1-1 kernel: [   27.069036] skl_hda_dsp_generic skl_hda_dsp_generic: hda_dsp_hdmi_build_controls: no PCM in topology for HDMI converter 3
Apr  7 03:02:39 linuxlite-iMacPro1-1 kernel: [   27.085501] input: sof-hda-dsp Front Headphone as /devices/pci0000:00/0000:00:1f.3/skl_hda_dsp_generic/sound/card0/input16
Apr  7 03:02:39 linuxlite-iMacPro1-1 kernel: [   27.085563] input: sof-hda-dsp HDMI/DP,pcm=3 as /devices/pci0000:00/0000:00:1f.3/skl_hda_dsp_generic/sound/card0/input17
Apr  7 03:02:39 linuxlite-iMacPro1-1 kernel: [   27.085615] input: sof-hda-dsp HDMI/DP,pcm=4 as /devices/pci0000:00/0000:00:1f.3/skl_hda_dsp_generic/sound/card0/input18
Apr  7 03:02:39 linuxlite-iMacPro1-1 kernel: [   27.085669] input: sof-hda-dsp HDMI/DP,pcm=5 as /devices/pci0000:00/0000:00:1f.3/skl_hda_dsp_generic/sound/card0/input19

any theory about this ?

 

i'm thinking on something that uses voodohda and https://github.com/qhuyduong/AMDMicrophone

this amd driver is very well written. base is https://github.com/torvalds/linux/blob/master/sound/soc/amd/renoir/rn-pci-acp3x.c

 

this is not the same as linux

image.thumb.png.ba71452655bc3ed22c64a4869fc2ce7b.png

Edited by jalavoui
Link to comment
Share on other sites

Posted (edited)

added the linux code for i2c

 

changed

if (value == ~0u)

            continue;

 

 

i'm not getting the same logs you guys are

 

but i noticed some fields on my dsdt

 

Scope (_SB.PC00.I2C3)
        {
            Device (TPAD)
            {
                Name (_ADR, One)  // _ADR: Address
                Name (_UID, One)  // _UID: Unique ID
                Name (_S0W, 0x03)  // _S0W: S0 Device Wake State
                Name (HID2, Zero)
                Name (TPID, Package (0x12)
                {
                    Package (0x05)
                    {
                        0x10, 
                        0x15, 
                        One, 
                        "ELAN050A", 
                        "PNP0C50"
                    }, 

                    Package (0x05)
                    {
                        0x11, 
                        0x15, 
                        One, 
                        "ELAN050B", 
                        "PNP0C50"
                    }, 

                    Package (0x05)
                    {
                        0x12, 
                        0x15, 
                        One, 
                        "ELAN0514", 
                        "PNP0C50"
                    }, 

                    Package (0x05)
                    {
                        0x13, 
                        0x15, 
                        One, 
                        "ELAN0515", 
                        "PNP0C50"
                    }, 

                    Package (0x05)
                    {
                        0x14, 
                        0x2C, 
                        0x20, 
                        "SYNA7DAB", 
                        "PNP0C50"
                    }, 

                    Package (0x05)
                    {
                        0x15, 
                        0x2C, 
                        0x20, 
                        "SYNA7DB5", 
                        "PNP0C50"
                    }, 

                    Package (0x05)
                    {
                        0x16, 
                        0x15, 
                        One, 
                        "ELAN0521", 
                        "PNP0C50"
                    }, 

                    Package (0x05)
                    {
                        0x17, 
                        0x15, 
                        One, 
                        "ELAN0522", 
                        "PNP0C50"
                    }, 

                    Package (0x05)
                    {
                        0x20, 
                        0xFF, 
                        0xFF, 
                        "ETD0518", 
                        0x130FD041
                    }, 

                    Package (0x05)
                    {
                        0x21, 
                        0xFF, 
                        0xFF, 
                        "ETD0519", 
                        0x130FD041
                    }, 

                    Package (0x05)
                    {
                        0x22, 
                        0xFF, 
                        0xFF, 
                        "ETD051B", 
                        0x130FD041
                    }, 

                    Package (0x05)
                    {
                        0x23, 
                        0xFF, 
                        0xFF, 
                        "ETD051C", 
                        0x130FD041
                    }, 

                    Package (0x05)
                    {
                        0x24, 
                        0xFF, 
                        0xFF, 
                        "SYN1B89", 
                        0x130FD041
                    }, 

                    Package (0x05)
                    {
                        0x25, 
                        0xFF, 
                        0xFF, 
                        "SYN1B8A", 
                        0x130FD041
                    }, 

                    Package (0x05)
                    {
                        0x26, 
                        0xFF, 
                        0xFF, 
                        "ETD0521", 
                        0x130FD041
                    }, 

                    Package (0x05)
                    {
                        0x27, 
                        0xFF, 
                        0xFF, 
                        "ETD0522", 
                        0x130FD041
                    }, 

                    Package (0x05)
                    {
                        0xFE, 
                        0x15, 
                        One, 
                        "ELAN0504", 
                        "PNP0C50"
                    }, 

                    Package (0x05)
                    {
                        0xFF, 
                        0xFF, 
                        0xFF, 
                        "MSFT0003", 
                        0x030FD041
                    }
                })
                Name (SBFB, ResourceTemplate ()
                {
                    I2cSerialBusV2 (0x0000, ControllerInitiated, 0x00061A80,
                        AddressingMode7Bit, "\\_SB.PC00.I2C3",
                        0x00, ResourceConsumer, _Y59, Exclusive,
                        )
                })
                Name (SBFI, ResourceTemplate ()
                {
                    Interrupt (ResourceConsumer, Level, ActiveLow, ExclusiveAndWake, ,, )
                    {
                        0x0000001B,
                    }
                })
                Name (SBFG, ResourceTemplate ()
                {
                    GpioInt (Level, ActiveLow, ExclusiveAndWake, PullUp, 0x0000,
                        "\\_SB.GPI0", 0x00, ResourceConsumer, ,
                        )
                        {   // Pin list
                            0x0003
                        }
                })
                CreateWordField (SBFB, \_SB.PC00.I2C3.TPAD._Y59._ADR, ADR0)  // _ADR: Address
                Method (_HID, 0, Serialized)  // _HID: Hardware ID
                {
                    If (~CondRefOf (TPDF))
                    {
                        Name (TPDF, 0xFE)
                    }

                    Switch (One)
                    {
                        Case (Zero)
                        {
                            TPDF = 0xFE
                        }
                        Case (One)
                        {
                        }
                        Default
                        {
                            TPDF = 0xFE
                        }

                    }

                    Return (TPDS (0x03, 0xFE, TPDF, "MSFT0001"))
                }

                Method (_CID, 0, Serialized)  // _CID: Compatible ID
                {
                    If (~CondRefOf (TPDF))
                    {
                        Name (TPDF, 0xFE)
                    }

                    Switch (One)
                    {
                        Case (Zero)
                        {
                            TPDF = 0xFE
                        }
                        Case (One)
                        {
                        }
                        Default
                        {
                            TPDF = 0xFE
                        }

                    }

                    Return (TPDS (0x04, 0xFE, TPDF, "PNP0C50"))
                }

                Method (TPDS, 4, NotSerialized)
                {
                    Local0 = Zero
                    Local1 = Zero
                    Local1 = DerefOf (DerefOf (TPID [Local0]) [Zero])
                    While (((Local1 != Arg1) && (Local1 != Arg2)))
                    {
                        Local0++
                        If ((Local0 >= SizeOf (TPID)))
                        {
                            Return (Arg3)
                        }

                        Local1 = DerefOf (DerefOf (TPID [Local0]) [Zero])
                    }

                    Return (DerefOf (DerefOf (TPID [Local0]) [Arg0]))
                }

                Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
                {
                    If ((Arg0 == ToUUID ("3cdff6f7-4267-4555-ad05-b30a3d8938de") /* HID I2C Device */))
                    {
                        If ((Arg2 == Zero))
                        {
                            If ((Arg1 == One))
                            {
                                Return (Buffer (One)
                                {
                                     0x03                                             // .
                                })
                            }
                            Else
                            {
                                Return (Buffer (One)
                                {
                                     0x00                                             // .
                                })
                            }
                        }

                        If ((Arg2 == One))
                        {
                            Return (HID2) /* \_SB_.PC00.I2C3.TPAD.HID2 */
                        }
                    }
                    Else
                    {
                        Return (Buffer (One)
                        {
                             0x00                                             // .
                        })
                    }

                    If ((Arg0 == ToUUID ("ef87eb82-f951-46da-84ec-14871ac6f84b") /* Unknown UUID */))
                    {
                        If ((Arg2 == Zero))
                        {
                            If ((Arg1 == One))
                            {
                                Return (Buffer (One)
                                {
                                     0x03                                             // .
                                })
                            }
                            Else
                            {
                                Return (Buffer (One)
                                {
                                     0x00                                             // .
                                })
                            }
                        }

                        If ((Arg2 == One))
                        {
                            Return (ConcatenateResTemplate (SBFB, SBFG))
                        }
                    }
                    Else
                    {
                        Return (Buffer (One)
                        {
                             0x00                                             // .
                        })
                    }

                    Return (Buffer (One)
                    {
                         0x00                                             // .
                    })
                }

                Method (_STA, 0, Serialized)  // _STA: Status
                {
                    If (~CondRefOf (TPDD))
                    {
                        Name (TPDD, Zero)
                    }

                    Switch (TPDD)
                    {
                        Case (Zero)
                        {
                            If (Ones)
                            {
                                Return (0x0F)
                            }
                            Else
                            {
                                Return (Zero)
                            }
                        }
                        Case (One)
                        {
                            Return (Zero)
                        }
                        Case (0x02)
                        {
                            Return (0x0F)
                        }
                        Default
                        {
                            Return (Zero)
                        }

                    }
                }

                Method (_CRS, 0, Serialized)  // _CRS: Current Resource Settings
                {
                    If (~CondRefOf (TPDF))
                    {
                        Name (TPDF, 0xFE)
                    }

                    Local0 = Zero
                    Local1 = Zero
                    Local1 = DerefOf (DerefOf (TPID [Local0]) [Zero])
                    While (((Local1 != 0xFE) && (Local1 != TPDF)))
                    {
                        Local0++
                        If ((Local0 >= SizeOf (TPID)))
                        {
                            Break
                        }

                        Local1 = DerefOf (DerefOf (TPID [Local0]) [Zero])
                    }

                    ADR0 = DerefOf (DerefOf (TPID [Local0]) [One])
                    HID2 = DerefOf (DerefOf (TPID [Local0]) [0x02])
                    If ((OSYS < 0x07DC))
                    {
                        Return (SBFI) /* \_SB_.PC00.I2C3.TPAD.SBFI */
                    }

                    If (Ones)
                    {
                        Return (ConcatenateResTemplate (SBFB, SBFG))
                    }

                    Return (ConcatenateResTemplate (SBFB, SBFI))
                }
            }
        }

 

VoodooI2C-d0b9679f498b0aa90cabb914129ba127a72b2fb3.zipbin.zip

 

this bug is so stupid

a bad rename

Capturadeecra2024-05-02as00_47_47.png.ebee045b03dcebd5c707bc298262454a.png

this break dsdt.aml

always load it in macial to find this kind of mistakes

 

update

tpad  config settings in dsdt.aml are tricky but there are a few posts online about irq setup and pin configs

Edited by jalavoui
Link to comment
Share on other sites

can you get the iclgraph and framebuffer kexts also ?

 

this pic shows gpio but altough its working im not sure about the errors you get on start()

i just cant get those logs during boot

Capturadeecra2024-05-02as01_18_13.png.bf884526752a9dd964ae01236528120a.png

Link to comment
Share on other sites

Posted (edited)

Yes, the iclgraph and framebuffer kexts are in the mfire link on my most recent post. All files are from 14.4.1

 

image.png.dfc35aacc9f73786b9ded4bb20b7bc1c.png

 

 

Only the companion bundles are uploaded here, and those were taken not from kernel cache but from the /System/Library/Extensions folder.

 

I still have not been able to implement GPIO on the TPD0 device for now.

Edited by Mastachief
  • Like 1
Link to comment
Share on other sites

Posted (edited)

tgl dmc vs csr_patch_ax

var3= 0xc91 maybe array size ?

the linux bin as extra bytes that i remove

 

image.thumb.png.d67fd8c269ea82259eec62e1fbf2aeb3.png

 

got it

0xc91 * 0x4 = 0x3244 bytes

that matches the apple file

 

modded tgl bin as 0x4a20 bytes so v3= 0x1288

 

 

 

i doubt this will load on sonoma as the patches are all tested on ventura

and for sure they will fail and give kp

 

btw there's a nice apple firmware loop log if using scheduler 3

boot with -v to check

Edited by jalavoui
Link to comment
Share on other sites

Posted (edited)

i added the bytes to sonoma from the kexts you send

hope it loads for you

 

shl628

the tgl dmc bin is still a test (i think my code it is not well implemented). but you forgot to add _CSR_PATCH_B0plus part

the firmware loop log is just a hack to show apple firmware message

 

updated whatevergreen with sleep patch

at this stage i have 2 goals:

- framebufer load and avoid black screen (might need connector swap patch for some displays because if on frame zero it hangs the display with backlight calls)

- sleep working using internal disk (might need dsdt.aml sleep patch)

 

boot args tested: -v keepsyms=1 debug=0x100 agdpmod=vit9696

 

 

 

Edited by jalavoui
  • Like 1
Link to comment
Share on other sites

Posted (edited)

@jalavoui

I imported the scheduler and TGL DMC-related patches from the most recently uploaded NBlue to WEG and applied them.

And, the part that calls the solveRequest or routeRequest function for getGPUInfo and _CSR_PATCH uses the SYSLOG syntax to output a log to check whether it was applied properly.

// kern_igfx.hpp
const unsigned char tgl_dmc_ver2_12_bin[] = {
	...
};
const long int tgl_dmc_ver2_12_bin_size = sizeof(tgl_dmc_ver2_12_bin);

	...

	class ForceCompleteModeset: public FramebufferModifer {
		...
	public:
		// MARK: Patch Submodule IMP
		const uint8_t *_CSR_PATCH_B0plus;
		const uint8_t *_CSR_PATCH_AX;
		void init() override;
		void processKernel(KernelPatcher &patcher, DeviceInfo *info) override;
		void processFramebufferKext(KernelPatcher &patcher, size_t index, mach_vm_address_t address, size_t size) override;
	} modForceCompleteModeset;
		KernelPatcher::RouteRequest request("__ZN16IntelAccelerator10getGPUInfoEv", getGPUInfo, ogetGPUInfo);
		if (patcher.routeMultiple(index, &request, 1, address, size))
			SYSLOG("igfx", "[TGL+] getGPUInfo: Functions have been routed successfully.");
		else
			SYSLOG("igfx", "[TGL+] getGPUInfo: Failed to route functions.");
	// TGL_DMC_ver2_12.bin
	static const uint8_t f9[] = {0x83, 0xbf, 0x9c, 0x0c, 0x00, 0x00, 0x00, 0x74, 0x1f, 0x4c, 0x8d, 0x35, 0x7c, 0xab, 0x0e, 0x00, 0x41, 0xbf, 0x8b, 0x0c, 0x00, 0x00};
	static const uint8_t r9[] = {0x83, 0xbf, 0x9c, 0x0c, 0x00, 0x00, 0x00, 0x74, 0x1f, 0x4c, 0x8d, 0x35, 0x7c, 0xab, 0x0e, 0x00, 0x41, 0xbf, 0x88, 0x18, 0x00, 0x00};
	static const uint8_t f9b[] = {0x48, 0xff, 0x05, 0xed, 0x28, 0x0b, 0x00, 0x4c, 0x8d, 0x35, 0x06, 0x79, 0x0e, 0x00, 0x41, 0xbf, 0x91, 0x0c, 0x00, 0x00};
	static const uint8_t r9b[] = {0x48, 0xff, 0x05, 0xed, 0x28, 0x0b, 0x00, 0x4c, 0x8d, 0x35, 0x06, 0x79, 0x0e, 0x00, 0x41, 0xbf, 0x88, 0x12, 0x00, 0x00};
	
	KernelPatcher::SolveRequest solveRequest = { "_CSR_PATCH_AX", this->_CSR_PATCH_AX };
	KernelPatcher::SolveRequest solveRequest2 = { "_CSR_PATCH_B0plus", this->_CSR_PATCH_B0plus };
	
	if (patcher.solveMultiple(index, &solveRequest, 1, address, size) && patcher.solveMultiple(index, &solveRequest2, 1, address, size))
		SYSLOG("igfx", "[TGL+] _CSR_PATCH: Functions have been routed successfully.");
	else
		SYSLOG("igfx", "[TGL+] _CSR_PATCH: Failed to route functions.");
	
	this->_CSR_PATCH_AX = tgl_dmc_ver2_12_bin;
	this->_CSR_PATCH_B0plus = tgl_dmc_ver2_12_bin;
	
	KernelPatcher::LookupPatch patch { &kextIntelICLLPFb, f2, r2, sizeof(f2), 1 };
	patcher.applyLookupPatch(&patch);
	
	KernelPatcher::LookupPatch patchb { &kextIntelICLLPFb, f2b, r2b, sizeof(f2b), 1 };
	patcher.applyLookupPatch(&patchb);
	
	KernelPatcher::LookupPatch patch2 { &kextIntelICLLPFb, f1, r1, sizeof(f1), 1 };
	patcher.applyLookupPatch(&patch2);
	
	KernelPatcher::LookupPatch patch3 { &kextIntelICLLPFb, f9, r9, sizeof(f9), 1 };
	patcher.applyLookupPatch(&patch3);
	
	KernelPatcher::LookupPatch patch3b { &kextIntelICLLPFb, f9b, r9b, sizeof(f9b), 1 };
	patcher.applyLookupPatch(&patch3b);

 

Test 1

- NootedBlue : Disabled

- WhenverGreen : Enabled
- IGPU Device Properties : Injected (Platform ID 0x8A5C0002)
- boot-args : -v keepsyms=1 debug=0x100 -wegdbg
- macOS Version : macOS Ventura 13.6.5 (22G621)

 

Result : Booting was successful, but graphics acceleration did not work.

And, I confirmed that the log below was output in the Dmesg log.

WhateverGreen      igfx: @ [TGL+] getGPUInfo: Functions have been routed successfully.
WhateverGreen      igfx: @ [TGL+] _CSR_PATCH: Functions have been routed successfully.

 

Test 2

- NootedBlue : Disabled

- WhenverGreen : Enabled
- IGPU Device Properties : Injected (Platform ID 0x8A5C0002)
- boot-args : -v keepsyms=1 debug=0x100 -wegdbg -allow3d igfxfw=2
- macOS Version : macOS Ventura 13.6.5 (22G621)

 

Result : While trying to accelerate graphics, the log "Gfx Firmware is HUNG" is displayed infinitely.

 

image.thumb.jpeg.b3e0b913b2cde96a806422b8c5aecf9b.jpeg

 

Can someone please check if I modified WhateverGreen correctly?

WhateverGreen.zip

WhateverGreen-Sources.zip

Edited by shl628
Link to comment
Share on other sites

I just tried your modified WhenverGreen without the -allow3d flag and it allows me to boot without the blackscreen issue on 14.4.1, framebuffer is enabled, if using 8a71, you get 2048MB, commands below

 

-v keepsyms=1 debug=0x100 -wegdbg igfxfw=2

 

Screenshot2024-05-04at4_47_14AM.thumb.png.0e6513aa8274ec60bc2c6ee0cbd0c0f9.png

 

The Blackscreen after Sleep issue is still there, i have my correct efis configs on usb's, so i use the internal ssd efi for testing, it doesnt actually enter sleep

 

Screenshot2024-05-04at4_56_38AM.thumb.png.fd3a53ee6ea494c75b13a7c94f85ffc1.png

 

 

 

 

Link to comment
Share on other sites

Posted (edited)

When I use the -allow3d along with the commands above, the screen stops at the below.

 

WhateverGreen igfx: @ FOD: Failed to route function the function getDisplayStatus
WhateverGreen igfx: @ (DBG) platform is snb 0 and list 0XFFFFFF7FAC812C30

 

20240504_050327.jpg

Edited by Mastachief
Link to comment
Share on other sites

×
×
  • Create New...