Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[VoodooI2C 2.6.5] MSFT0001 touchpad is not working #450

Open
mysticfact opened this issue Mar 30, 2021 · 19 comments
Open

[VoodooI2C 2.6.5] MSFT0001 touchpad is not working #450

mysticfact opened this issue Mar 30, 2021 · 19 comments

Comments

@mysticfact
Copy link

mysticfact commented Mar 30, 2021

Describe the bug
MSFT0001 touchpad is not working

Did you read the common errors documentation?
Yes.

Did you read the troubleshooting documentation?
Yes.

Have you searched the issue on Github, Gitter, or Google?
Yes.

System Environment
Please answer:

  1. What is your operating system?
    macOS 10.15.7
  2. What version of the drivers (including drivers) are you using?
    VoodooI2C 2.6.5
  3. What is your hardware configuration?
    Lenovo Yoga S730-13IML, i7-10510U, 16GB LPDDR3, MSFT0001 trackpad (ACPI name: TPD0 under I2C0)

Troubleshooting Archive
Send me YogaS730.zip

Additional context
I already read this issue
#388

So, I set GPHD to Zero and TPDM to Zero.
But, It is not worked.

This is GenI2C screenshot.
01

@zilchulant
Copy link

Make sure your kexts are loaded in the right order: VoodooInput, VoodooI2CServices, VoodooGPIO, VoodooI2C, VoodooI2CHID (also VoodooPS2Controller, VoodooPS2Controller-VoodooPS2Keyboard if you have a PS2 connected Keyboard). I would try -vi2c-force-polling as boot argument to validate if it is possible to get it working.

@mysticfact
Copy link
Author

mysticfact commented Apr 1, 2021

Make sure your kexts are loaded in the right order: VoodooInput, VoodooI2CServices, VoodooGPIO, VoodooI2C, VoodooI2CHID (also VoodooPS2Controller, VoodooPS2Controller-VoodooPS2Keyboard if you have a PS2 connected Keyboard). I would try -vi2c-force-polling as boot argument to validate if it is possible to get it working.

It's working by -vi2c-force-polling as boot argument in polling mode.
Why isn't it working in interrupt mode?
Have I any mistake?

@ben9923
Copy link
Member

ben9923 commented Apr 1, 2021

Probably a user error, but we'll keep it open because it's similar to the one you mentioned.

Kernel logs provided are not full due to some macOS bug/some weird stuff with the logging system.
Please inject DebugEnhancer.kext and attach the output of the dmesg command. Without using polling mode, of course.

@mysticfact
Copy link
Author

Probably a user error, but we'll keep it open because it's similar to the one you mentioned.

Kernel logs provided are not full due to some macOS bug/some weird stuff with the logging system.
Please inject DebugEnhancer.kext and attach the output of the dmesg command. Without using polling mode, of course.

This is my log without polling mode.
log.zip

Thanks for your help.

@ben9923
Copy link
Member

ben9923 commented Apr 1, 2021

@mysticfact It doesn't look like proper dmesg log :/
Missing the same logs, and has no time since startup for each log.

@mysticfact
Copy link
Author

mysticfact commented Apr 1, 2021

@mysticfact It doesn't look like proper dmesg log :/
Missing the same logs, and has no time since startup for each log.

This is the command I ran.
"sudo dmesg > dmesg-log.log"
Is it wrong?

This is new RunMe result file with DebugEnhancer.kext.
Send me YogaS730.zip

@ben9923
Copy link
Member

ben9923 commented Apr 1, 2021

@mysticfact It doesn't look like proper dmesg log :/
Missing the same logs, and has no time since startup for each log.

This is the command I ran.
"sudo dmesg > dmesg-log.log"
Is it wrong?

This is new RunMe result file with DebugEnhancer.kext.
Send me YogaS730.zip

It looks fine... Try rebooting and get another log, or add the msgbuf=1048576 boot arg which should be a sufficient alternative to DebugEnhancer.

BTW, there's no reason to have the other VoodooI2C satellites disabled there, you won't use them. Just delete those altogether from config.plist and Kexts directory.

@mysticfact
Copy link
Author

@ben9923
This is new RunMe result file with DebugEnhancer.kext and msgbuf=1048576 boot arg.
Send me YogaS730.zip

And dmesg log
dmesg-log.txt

@ben9923
Copy link
Member

ben9923 commented Apr 1, 2021

@mysticfact Finally logs fully appear. I believe msgbuf has no effect with DebugEnhancer.kext injected.

Logs look good too. You can see Device initiated reset accomplished meaning an interrupt was fired successfully after reset.
Do you see any input in FingerMgmt.app?

If there's a BIOS update available, apply it.

And there's also a possibility your device just can't work in GPIO interrupts mode.
Please do cleanup your setup, those many unused ACPI files + kexts make it hard to troubleshoot.

@mysticfact
Copy link
Author

mysticfact commented Apr 1, 2021

@ben9923
Do you see any input in FingerMgmt.app?
-> There is no input or event at FingerMgmt.app.

If there's a BIOS update available, apply it.
-> It has latest version.

These are cleaned files.
Send me YogaS730.zip
dmesg-log.txt

Sometimes the touchpad works about 1 second after boot.

@mysticfact
Copy link
Author

mysticfact commented Apr 1, 2021

These are the files after it worked about 1 second.
Send me YogaS730.zip
dmesg-log.txt

@ben9923
Copy link
Member

ben9923 commented Apr 2, 2021

@mysticfact Maybe the GPIO pin provided by ACPI is wrong. Manual pinning might work...
Undo that TPDM = Zero patch to get your APIC pin, then follow the GPIO pinning guide to find matching GPIO pin(s).

@mysticfact
Copy link
Author

mysticfact commented Apr 2, 2021

@ben9923
I think my laptop is root pinned and well-pinned.
스크린샷 2021-04-03 오전 12 48 52

So, I set GPHD to Zero and TPDM to Zero.
But, It is not worked.

So, I try GPIO pinning.

스크린샷 2021-04-03 오전 1 16 03

#define GPP_B3_IRQ 0x33
#define GPP_B3 28
CNL_GPP(1, 25, 50, 32), /* GPP_B */
In this case, GPIO pin number is 0x23

#define GPP_F3_IRQ 0x33
#define GPP_F3 96
CNL_GPP(1, 93, 116, 128), /* GPP_F */
In this case, GPIO pin number is 0x83

스크린샷 2021-04-03 오전 12 48 36

So, I try 0x23, 0x83, 0x17, 0x1B, 0x34, and 0x55.
But, It is not worked.

For all GPIO pin numbers, GenI2C is as below.
스크린샷 2021-04-03 오전 12 57 45

Have I any mistake?

In all cases, my touchpad works about 1 second after boot.

This is my debug files.
debug_6465.zip

@rockguy40
Copy link

rockguy40 commented May 25, 2021

Same problem here with the same touchpad on a Lenovo yoga s940 (ice lake). Someone actually managed to fix it for the yoga s740 (same touchpad, very similar model) at this Github. The GPi0 file, I tried to replicate what he did but failed miserably. Maybe someone more experienced could take a look.

@ricardocosta43
Copy link

ricardocosta43 commented May 30, 2021

Acer Aspire 3 a315-56-569f (ice lake) not working to. OS Big Sur 11.1

@kprinssu
Copy link
Collaborator

@nurdiny13 Please use Gitter for support for general questions.

@VoodooI2C VoodooI2C deleted a comment from nurdiny13 Jun 18, 2021
@WY-WY-W
Copy link

WY-WY-W commented Sep 18, 2021

same problem here with same touchpad on Lenovo s340 14iwl whiskey lake. when using 0x108 as gpio pin, touchpad was driven with slow response.

[    2.088743]: VoodooGPIOCannonLakeLP::VoodooGPIO Init!
[    2.088746]: VoodooGPIOCannonLakeLP::VoodooGPIO Initializing Community 0
[    2.088822]: VoodooGPIOCannonLakeLP::VoodooGPIO Initializing Community 1
[    2.088856]: VoodooGPIOCannonLakeLP::VoodooGPIO Initializing Community 2
[    2.088963]: VoodooGPIOCannonLakeLP::GPIO Controller is already awake! Not reinitializing.
[    3.130800]: VoodooI2CPCIController::pci8086,9dea Starting I2C controller
[    3.130838]: VoodooI2CPCIController::pci8086,9dea Set PCI power state D0
[    3.130859]: VoodooI2CPCIController::pci8086,9dea Publishing nub
[    3.130974]: VoodooI2CPCIController::pci8086,9de9 Starting I2C controller
[    3.131010]: VoodooI2CPCIController::pci8086,9de9 Set PCI power state D0
[    3.131037]: VoodooI2CPCIController::pci8086,9de9 Publishing nub
[    3.132265]: VoodooI2CControllerDriver::pci8086,9dea Probing controller
[    3.132278]: VoodooI2CControllerDriver::pci8086,9dea Found valid Synopsys component, continuing with initialisation
[    3.132353]: VoodooI2CControllerNub::pci8086,9dea SSCN not implemented in ACPI tables
[    3.132365]: VoodooI2CControllerNub::pci8086,9dea FMCN not implemented in ACPI tables
[    3.132371]: VoodooI2CControllerDriver::pci8086,9dea Warning: Error getting bus config, using defaults where necessary
[    3.132514]: VoodooI2CControllerDriver::pci8086,9dea Publishing device nubs
[    3.132866]: VoodooI2CControllerDriver::pci8086,9de9 Probing controller
[    3.132878]: VoodooI2CControllerDriver::pci8086,9de9 Found valid Synopsys component, continuing with initialisation
[    3.135240]: VoodooI2CControllerDriver::pci8086,9de9 Got bus configuration values
[    3.135914]: VoodooI2CControllerDriver::pci8086,9de9 Publishing device nubs
[    3.571155]: VoodooI2CPCIController::pci8086,9de8 Starting I2C controller
[    3.579091]: VoodooI2CPCIController::pci8086,9de8 Set PCI power state D0
[    3.586922]: VoodooI2CPCIController::pci8086,9de8 Publishing nub
[    3.594549]: VoodooI2CControllerDriver::pci8086,9de8 Probing controller
[    3.602357]: VoodooI2CControllerDriver::pci8086,9de8 Found valid Synopsys component, continuing with initialisation

[    4.151855]: VoodooI2CControllerDriver::pci8086,9de8 Got bus configuration values[    4.169456]: VoodooI2CControllerDriver::pci8086,9de8 Publishing device nubs
[    4.179788]: VoodooI2CControllerDriver::pci8086,9de8 Found I2C device: MSFT0001
[    5.173779]: VoodooI2CDeviceNub::TPAD Found valid resources from _CRS method
[    5.185037]: VoodooI2CDeviceNub::TPAD Found valid resources from _DSM or XDSM method
[    5.193167]: VoodooI2CDeviceNub::TPAD Prefer resources from _DSM or XDSM method
[    5.201106]: VoodooI2CDeviceNub::TPAD Warning: Incompatible APIC interrupt pin (0x50 > 0x2f)
[    5.209380]: VoodooI2CDeviceNub::TPAD Found valid GPIO interrupts
[    5.216920]: VoodooI2CDeviceNub::TPAD Got GPIO Controller! VoodooGPIOCannonLakeLP
[    5.730392]: VoodooI2CHIDDevice:0x100000340 start

[    5.730409]: VoodooGPIOCannonLakeLP::Registering hardware pin 0x31 for GPIO IRQ pin 0x38
[    5.741565]: VoodooGPIOCannonLakeLP::Successfully registered hardware pin 0x31 for GPIO IRQ pin 0x38
[    5.750307]: VoodooGPIOCannonLakeLP:: pin 49 cannot be used as IRQ

@ben9923
Copy link
Member

ben9923 commented Sep 18, 2021

@WY-WY-W You'll need to attach a troubleshooting archive.
Like OP who set TPDM = Zero, you might also need to do something similar.


@mysticfact It appears that there were additional BIOS updates since I asked you about that. Could you try another update?
Setting TPDM = Zero is probably still necessary (Removal + manual pinning was only for a test).
BTW, sure you need to set GPHD?

@ghost
Copy link

ghost commented Mar 17, 2022

I have encountered with similar issue with my Lenovo Yoga S740-14IIL as well, and I could confirm that issue is related to firmware.

Yoga S740 is an IceLake-U laptop with 1035G1, and a touchpad with _HID=MSFT0001 and _SUB=SYNA0001, and it works with polling mode with VoodooI2CHID and RMII2C. The default interrupt mode for the touch pad is APIC interrupt with IRQ 48, namely 0x30 for Windows and Linux. With some modification on BIOS settings, the touchpad could obtain the GPIO resource correctly and move but broke the lid sensor on the laptop.

The issue may related to Intel Integrated Sensor Hub, which handles some bus resources (e.g.. I2C, UART or SPI) and GPIO resources to ME, and turns everything related into a blackbox and user have no access from ACPI. It may also related to the debugging serial port setting as well.

In macOS, my attempt was to change return of _CRS into SBFB,SBFG for macOS and GPIO Pin was obtained from _DSM correctly, which is 0x30 as well. Also VoodooI2C logging shows Hardware pin 0x18 is successfully assigned to GPIO pin 0x30 and there is no timeout for resetting the touchpad. The information in IOReg shows success as well. Also, with some tiny luck, I could move the pointer with a small distance and then the touchpad is dead.

Such situation reminded me of some experience on playing with a laptop with touchpad and touchscreen, where both devices are forced to run at GPIO mode and the touchscreen usually dead after a small move. Someone suggest that the situation may related to "GPIO Resource Conflict", for the touchscreen actually works at APIC interrupt for windows while touchpad works at GPIO by default.

I have attempt to change a BIOS setting, Force Unlock on All GPIO Pads to make it enable, which is inspired by the configuration for Lenovo Legion Y530 (Y7000) Link. Then in macOS my touchpad works successfully with GPIO interrupt. However, I could notice that some sensors on my laptop was broken, for example, the sensor for detecting lid open is not working anymore for macOS. After I closed the option in BIOS, things went back again while the lid sensor came back. By checking my BIOS firmware with H2OUVE, I found I2C0 was configured with ISH Configuration for certain sensor though I2C0 is an empty device in DSDT. However, voodooi2c could find and attach to this controller.

I have also read Intel ® 495 Series Chipset Family OnPackage Platform Controller Hub (PCH) Datasheet and found that some GPPs could be assigned to ISH and not presented as well. However the datasheet is full of registers and finding related BIOS settings is hard for a locked BIOS.

Here are just some quick information for what I have found and was written in a hurry. Please tell me if further information is need. Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants