Activity log for bug #1797772

Date Who What changed Old value New value Message
2018-10-14 13:34:49 TJ bug added bug
2018-10-14 13:41:30 TJ description I've been working with a user that has a Lenovo Legion Y530-15ICH where booting Ubuntu 18.10 (kernel 4.18.0-8) results in the radios being disabled by the platform driver "ideapad-laptop". Unloading or blacklisting the module solves the issue but disables other platform ACPI interfaces. The system has the most recent firmware: [ 0.000000] DMI: LENOVO 81FV/LNVNB161216, BIOS 8JCN44WW 08/13/2018 The wifi device is: 00:14.3 Network controller [0280]: Intel Corporation Wireless-AC 9560 [Jefferson Peak] [8086:a370] (rev 10) Subsystem: Intel Corporation Wireless-AC 9560 [Jefferson Peak] [8086:0034] Kernel driver in use: iwlwifi We investigated the issue extensively and built the module with additional logic without solving the issue. It is well-known that some Lenovo models do not have a separate hardware radio kill switch (this model uses hot-keys Fn + F7) and need to use a DMI match to disable the rfkill logic. We used dmidecode to get the correct Version string: Handle 0x0001, DMI type 1, 27 bytes System Information Manufacturer: LENOVO Product Name: 81FV Version: Lenovo Legion Y530-15ICH Serial Number: PF18CD10 UUID: A44F71C1-5E3D-11E8-9379-8C16458E3F9D Wake-up Type: Power Switch SKU Number: LENOVO_MT_81FV_BU_idea_FM_Legion Y530-15ICH Family: Legion Y530-15ICH and added it to no_hw_rfkill_list[]: { .ident = "Lenovo Legion Y530-15ICH", .matches = { DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Legion Y530-15ICH"), }, }, However, rfkill was still listing the platform devices "ideapad_wlan" and "ideapad_bluetooth": /sys/class/rfkill/rfkill0/hard=1 /sys/class/rfkill/rfkill0/index=0 /sys/class/rfkill/rfkill0/name=ideapad_wlan /sys/class/rfkill/rfkill0/persistent=1 /sys/class/rfkill/rfkill0/soft=0 /sys/class/rfkill/rfkill0/state=2 /sys/class/rfkill/rfkill0/type=wlan /sys/class/rfkill/rfkill0/uevent=RFKILL_NAME=ideapad_wlan RFKILL_TYPE=wlan RFKILL_STATE=2 /sys/class/rfkill/rfkill1/hard=1 /sys/class/rfkill/rfkill1/index=1 /sys/class/rfkill/rfkill1/name=ideapad_bluetooth /sys/class/rfkill/rfkill1/persistent=1 /sys/class/rfkill/rfkill1/soft=1 /sys/class/rfkill/rfkill1/state=2 /sys/class/rfkill/rfkill1/type=bluetooth /sys/class/rfkill/rfkill1/uevent=RFKILL_NAME=ideapad_bluetooth RFKILL_TYPE=bluetooth RFKILL_STATE=2 /sys/class/rfkill/rfkill3/hard=0 /sys/class/rfkill/rfkill3/index=3 /sys/class/rfkill/rfkill3/name=phy0 /sys/class/rfkill/rfkill3/persistent=0 /sys/class/rfkill/rfkill3/soft=0 /sys/class/rfkill/rfkill3/state=1 /sys/class/rfkill/rfkill3/type=wlan /sys/class/rfkill/rfkill3/uevent=RFKILL_NAME=phy0 RFKILL_TYPE=wlan RFKILL_STATE=1 /sys/class/rfkill/rfkill4/hard=0 /sys/class/rfkill/rfkill4/index=4 /sys/class/rfkill/rfkill4/name=hci0 /sys/class/rfkill/rfkill4/persistent=0 /sys/class/rfkill/rfkill4/soft=1 /sys/class/rfkill/rfkill4/state=0 /sys/class/rfkill/rfkill4/type=bluetooth /sys/class/rfkill/rfkill4/uevent=RFKILL_NAME=hci0 RFKILL_TYPE=bluetooth RFKILL_STATE=0 We then added printk(KERN_NOTICE ... in the module's platform_driver.probe function ideapad_acpi_add() both at entry and later to report the DMI and status of the hardware switch control flag: diff -u /home/all/SourceCode/linux/linux/drivers/platform/x86/ideapad-laptop.c ./ideapad-laptop.c --- /home/all/SourceCode/linux/linux/drivers/platform/x86/ideapad-laptop.c 2018-10-14 01:46:49.506088219 +0100 +++ ./ideapad-laptop.c 2018-10-14 06:19:48.843813865 +0100 @@ -1147,6 +1147,13 @@ }, }, { + .ident = "Lenovo Legion Y530-15ICH", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), + DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Legion Y530-15ICH"), + }, + }, + { .ident = "Lenovo Legion Y720-15IKB", .matches = { DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), @@ -1239,6 +1246,7 @@ int cfg; struct ideapad_private *priv; struct acpi_device *adev; + const char *dmi_vendor, *dmi_version; ret = acpi_bus_get_device(ACPI_HANDLE(&pdev->dev), &adev); if (ret) @@ -1257,6 +1265,10 @@ priv->platform_device = pdev; priv->has_hw_rfkill_switch = !dmi_check_system(no_hw_rfkill_list); + dmi_vendor = dmi_get_system_info(DMI_SYS_VENDOR); + dmi_version = dmi_get_system_info(DMI_PRODUCT_VERSION); + printk(KERN_NOTICE "DMI: %s, %s. has_hw_rfkill_switch=%d\n", dmi_vendor, dmi_version, priv->has_hw_rfkill_switch); + ret = ideapad_sysfs_init(priv); if (ret) return ret; And this revealed that the function is not being called - the KERN_NOTICE messages do not appear in 'dmesg' output. This suggests: static const struct acpi_device_id ideapad_device_ids[] = { { "VPC2004", 0}, is not being matched via platform_driver.driver.acpi_match_table = ACPI_PTR(ideapad_device_ids), We then decompiled the ACPI DSDT and confirmed that _HID is being set to VPC2004: grep -C4 VPC2004 dsdt.dsl Scope (\_SB.PCI0.LPCB.EC0) { Device (VPC0) { Name (_HID, "VPC2004") // _HID: Hardware ID Name (_UID, Zero) // _UID: Unique ID Name (_VPC, 0xFC0DF516) Name (VPCD, Zero) Method (_STA, 0, NotSerialized) // _STA: Status At this point we're not sure what the next step should be. Wifi works correctly with the module blacklisted but it would be good to fix this properly. I've been working with a user that has a Lenovo Legion Y530-15ICH where booting Ubuntu 18.10 (kernel 4.18.0-8) results in the radios being disabled by the platform driver "ideapad-laptop". Unloading or blacklisting the module solves the issue but disables other platform ACPI interfaces. The system has the most recent firmware: [ 0.000000] DMI: LENOVO 81FV/LNVNB161216, BIOS 8JCN44WW 08/13/2018 The wifi device is: 00:14.3 Network controller [0280]: Intel Corporation Wireless-AC 9560 [Jefferson Peak] [8086:a370] (rev 10)  Subsystem: Intel Corporation Wireless-AC 9560 [Jefferson Peak] [8086:0034]  Kernel driver in use: iwlwifi We investigated the issue extensively and built the module with additional logic without solving the issue. It is well-known that some Lenovo models do not have a separate hardware radio kill switch (this model uses hot-keys Fn + F7) and need to use a DMI match to disable the rfkill logic. We used dmidecode to get the correct Version string: Handle 0x0001, DMI type 1, 27 bytes System Information  Manufacturer: LENOVO  Product Name: 81FV  Version: Lenovo Legion Y530-15ICH  Serial Number: PF18CD10  UUID: A44F71C1-5E3D-11E8-9379-8C16458E3F9D  Wake-up Type: Power Switch  SKU Number: LENOVO_MT_81FV_BU_idea_FM_Legion Y530-15ICH  Family: Legion Y530-15ICH and added it to no_hw_rfkill_list[]:     {         .ident = "Lenovo Legion Y530-15ICH",         .matches = {             DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),             DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Legion Y530-15ICH"),         },     }, However, rfkill was still listing the platform devices "ideapad_wlan" and "ideapad_bluetooth": 0: ideapad_wlan: Wireless LAN Soft blocked: no Hard blocked: yes 1: ideapad_bluetooth: Bluetooth Soft blocked: yes Hard blocked: yes 3: phy0: Wireless LAN Soft blocked: no Hard blocked: no 4: hci0: Bluetooth Soft blocked: yes Hard blocked: no /sys/class/rfkill/rfkill0/hard=1 /sys/class/rfkill/rfkill0/index=0 /sys/class/rfkill/rfkill0/name=ideapad_wlan /sys/class/rfkill/rfkill0/persistent=1 /sys/class/rfkill/rfkill0/soft=0 /sys/class/rfkill/rfkill0/state=2 /sys/class/rfkill/rfkill0/type=wlan /sys/class/rfkill/rfkill0/uevent=RFKILL_NAME=ideapad_wlan RFKILL_TYPE=wlan RFKILL_STATE=2 /sys/class/rfkill/rfkill1/hard=1 /sys/class/rfkill/rfkill1/index=1 /sys/class/rfkill/rfkill1/name=ideapad_bluetooth /sys/class/rfkill/rfkill1/persistent=1 /sys/class/rfkill/rfkill1/soft=1 /sys/class/rfkill/rfkill1/state=2 /sys/class/rfkill/rfkill1/type=bluetooth /sys/class/rfkill/rfkill1/uevent=RFKILL_NAME=ideapad_bluetooth RFKILL_TYPE=bluetooth RFKILL_STATE=2 /sys/class/rfkill/rfkill3/hard=0 /sys/class/rfkill/rfkill3/index=3 /sys/class/rfkill/rfkill3/name=phy0 /sys/class/rfkill/rfkill3/persistent=0 /sys/class/rfkill/rfkill3/soft=0 /sys/class/rfkill/rfkill3/state=1 /sys/class/rfkill/rfkill3/type=wlan /sys/class/rfkill/rfkill3/uevent=RFKILL_NAME=phy0 RFKILL_TYPE=wlan RFKILL_STATE=1 /sys/class/rfkill/rfkill4/hard=0 /sys/class/rfkill/rfkill4/index=4 /sys/class/rfkill/rfkill4/name=hci0 /sys/class/rfkill/rfkill4/persistent=0 /sys/class/rfkill/rfkill4/soft=1 /sys/class/rfkill/rfkill4/state=0 /sys/class/rfkill/rfkill4/type=bluetooth /sys/class/rfkill/rfkill4/uevent=RFKILL_NAME=hci0 RFKILL_TYPE=bluetooth RFKILL_STATE=0 We then added printk(KERN_NOTICE ... in the module's platform_driver.probe function ideapad_acpi_add() both at entry and later to report the DMI and status of the hardware switch control flag: diff -u /home/all/SourceCode/linux/linux/drivers/platform/x86/ideapad-laptop.c ./ideapad-laptop.c --- /home/all/SourceCode/linux/linux/drivers/platform/x86/ideapad-laptop.c 2018-10-14 01:46:49.506088219 +0100 +++ ./ideapad-laptop.c 2018-10-14 06:19:48.843813865 +0100 @@ -1147,6 +1147,13 @@                 },         },         { + .ident = "Lenovo Legion Y530-15ICH", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), + DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Legion Y530-15ICH"), + }, + }, + {                 .ident = "Lenovo Legion Y720-15IKB",                 .matches = {                         DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), @@ -1239,6 +1246,7 @@         int cfg;         struct ideapad_private *priv;         struct acpi_device *adev; + const char *dmi_vendor, *dmi_version;         ret = acpi_bus_get_device(ACPI_HANDLE(&pdev->dev), &adev);         if (ret) @@ -1257,6 +1265,10 @@         priv->platform_device = pdev;         priv->has_hw_rfkill_switch = !dmi_check_system(no_hw_rfkill_list); + dmi_vendor = dmi_get_system_info(DMI_SYS_VENDOR); + dmi_version = dmi_get_system_info(DMI_PRODUCT_VERSION); + printk(KERN_NOTICE "DMI: %s, %s. has_hw_rfkill_switch=%d\n", dmi_vendor, dmi_version, priv->has_hw_rfkill_switch); +         ret = ideapad_sysfs_init(priv);         if (ret)                 return ret; And this revealed that the function is not being called - the KERN_NOTICE messages do not appear in 'dmesg' output. This suggests: static const struct acpi_device_id ideapad_device_ids[] = {     { "VPC2004", 0}, is not being matched via platform_driver.driver.acpi_match_table = ACPI_PTR(ideapad_device_ids), We then decompiled the ACPI DSDT and confirmed that _HID is being set to VPC2004: grep -C4 VPC2004 dsdt.dsl             Scope (\_SB.PCI0.LPCB.EC0)             {                 Device (VPC0)                 {                     Name (_HID, "VPC2004") // _HID: Hardware ID                     Name (_UID, Zero) // _UID: Unique ID                     Name (_VPC, 0xFC0DF516)                     Name (VPCD, Zero)                     Method (_STA, 0, NotSerialized) // _STA: Status At this point we're not sure what the next step should be. Wifi works correctly with the module blacklisted but it would be good to fix this properly.
2018-10-14 14:00:05 Ubuntu Kernel Bot linux (Ubuntu): status New Incomplete
2018-10-14 14:29:20 TJ description I've been working with a user that has a Lenovo Legion Y530-15ICH where booting Ubuntu 18.10 (kernel 4.18.0-8) results in the radios being disabled by the platform driver "ideapad-laptop". Unloading or blacklisting the module solves the issue but disables other platform ACPI interfaces. The system has the most recent firmware: [ 0.000000] DMI: LENOVO 81FV/LNVNB161216, BIOS 8JCN44WW 08/13/2018 The wifi device is: 00:14.3 Network controller [0280]: Intel Corporation Wireless-AC 9560 [Jefferson Peak] [8086:a370] (rev 10)  Subsystem: Intel Corporation Wireless-AC 9560 [Jefferson Peak] [8086:0034]  Kernel driver in use: iwlwifi We investigated the issue extensively and built the module with additional logic without solving the issue. It is well-known that some Lenovo models do not have a separate hardware radio kill switch (this model uses hot-keys Fn + F7) and need to use a DMI match to disable the rfkill logic. We used dmidecode to get the correct Version string: Handle 0x0001, DMI type 1, 27 bytes System Information  Manufacturer: LENOVO  Product Name: 81FV  Version: Lenovo Legion Y530-15ICH  Serial Number: PF18CD10  UUID: A44F71C1-5E3D-11E8-9379-8C16458E3F9D  Wake-up Type: Power Switch  SKU Number: LENOVO_MT_81FV_BU_idea_FM_Legion Y530-15ICH  Family: Legion Y530-15ICH and added it to no_hw_rfkill_list[]:     {         .ident = "Lenovo Legion Y530-15ICH",         .matches = {             DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),             DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Legion Y530-15ICH"),         },     }, However, rfkill was still listing the platform devices "ideapad_wlan" and "ideapad_bluetooth": 0: ideapad_wlan: Wireless LAN Soft blocked: no Hard blocked: yes 1: ideapad_bluetooth: Bluetooth Soft blocked: yes Hard blocked: yes 3: phy0: Wireless LAN Soft blocked: no Hard blocked: no 4: hci0: Bluetooth Soft blocked: yes Hard blocked: no /sys/class/rfkill/rfkill0/hard=1 /sys/class/rfkill/rfkill0/index=0 /sys/class/rfkill/rfkill0/name=ideapad_wlan /sys/class/rfkill/rfkill0/persistent=1 /sys/class/rfkill/rfkill0/soft=0 /sys/class/rfkill/rfkill0/state=2 /sys/class/rfkill/rfkill0/type=wlan /sys/class/rfkill/rfkill0/uevent=RFKILL_NAME=ideapad_wlan RFKILL_TYPE=wlan RFKILL_STATE=2 /sys/class/rfkill/rfkill1/hard=1 /sys/class/rfkill/rfkill1/index=1 /sys/class/rfkill/rfkill1/name=ideapad_bluetooth /sys/class/rfkill/rfkill1/persistent=1 /sys/class/rfkill/rfkill1/soft=1 /sys/class/rfkill/rfkill1/state=2 /sys/class/rfkill/rfkill1/type=bluetooth /sys/class/rfkill/rfkill1/uevent=RFKILL_NAME=ideapad_bluetooth RFKILL_TYPE=bluetooth RFKILL_STATE=2 /sys/class/rfkill/rfkill3/hard=0 /sys/class/rfkill/rfkill3/index=3 /sys/class/rfkill/rfkill3/name=phy0 /sys/class/rfkill/rfkill3/persistent=0 /sys/class/rfkill/rfkill3/soft=0 /sys/class/rfkill/rfkill3/state=1 /sys/class/rfkill/rfkill3/type=wlan /sys/class/rfkill/rfkill3/uevent=RFKILL_NAME=phy0 RFKILL_TYPE=wlan RFKILL_STATE=1 /sys/class/rfkill/rfkill4/hard=0 /sys/class/rfkill/rfkill4/index=4 /sys/class/rfkill/rfkill4/name=hci0 /sys/class/rfkill/rfkill4/persistent=0 /sys/class/rfkill/rfkill4/soft=1 /sys/class/rfkill/rfkill4/state=0 /sys/class/rfkill/rfkill4/type=bluetooth /sys/class/rfkill/rfkill4/uevent=RFKILL_NAME=hci0 RFKILL_TYPE=bluetooth RFKILL_STATE=0 We then added printk(KERN_NOTICE ... in the module's platform_driver.probe function ideapad_acpi_add() both at entry and later to report the DMI and status of the hardware switch control flag: diff -u /home/all/SourceCode/linux/linux/drivers/platform/x86/ideapad-laptop.c ./ideapad-laptop.c --- /home/all/SourceCode/linux/linux/drivers/platform/x86/ideapad-laptop.c 2018-10-14 01:46:49.506088219 +0100 +++ ./ideapad-laptop.c 2018-10-14 06:19:48.843813865 +0100 @@ -1147,6 +1147,13 @@                 },         },         { + .ident = "Lenovo Legion Y530-15ICH", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), + DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Legion Y530-15ICH"), + }, + }, + {                 .ident = "Lenovo Legion Y720-15IKB",                 .matches = {                         DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), @@ -1239,6 +1246,7 @@         int cfg;         struct ideapad_private *priv;         struct acpi_device *adev; + const char *dmi_vendor, *dmi_version;         ret = acpi_bus_get_device(ACPI_HANDLE(&pdev->dev), &adev);         if (ret) @@ -1257,6 +1265,10 @@         priv->platform_device = pdev;         priv->has_hw_rfkill_switch = !dmi_check_system(no_hw_rfkill_list); + dmi_vendor = dmi_get_system_info(DMI_SYS_VENDOR); + dmi_version = dmi_get_system_info(DMI_PRODUCT_VERSION); + printk(KERN_NOTICE "DMI: %s, %s. has_hw_rfkill_switch=%d\n", dmi_vendor, dmi_version, priv->has_hw_rfkill_switch); +         ret = ideapad_sysfs_init(priv);         if (ret)                 return ret; And this revealed that the function is not being called - the KERN_NOTICE messages do not appear in 'dmesg' output. This suggests: static const struct acpi_device_id ideapad_device_ids[] = {     { "VPC2004", 0}, is not being matched via platform_driver.driver.acpi_match_table = ACPI_PTR(ideapad_device_ids), We then decompiled the ACPI DSDT and confirmed that _HID is being set to VPC2004: grep -C4 VPC2004 dsdt.dsl             Scope (\_SB.PCI0.LPCB.EC0)             {                 Device (VPC0)                 {                     Name (_HID, "VPC2004") // _HID: Hardware ID                     Name (_UID, Zero) // _UID: Unique ID                     Name (_VPC, 0xFC0DF516)                     Name (VPCD, Zero)                     Method (_STA, 0, NotSerialized) // _STA: Status At this point we're not sure what the next step should be. Wifi works correctly with the module blacklisted but it would be good to fix this properly. I've been working with a user that has a Lenovo Legion Y530-15ICH where booting Ubuntu 18.10 (kernel 4.18.0-8) results in the radios being disabled by the platform driver "ideapad-laptop". Unloading or blacklisting the module solves the issue but disables other platform ACPI interfaces: $ sudo tee /etc/modprobe.d/ideapad.conf <<< "blacklist ideapad_laptop" The system has the most recent firmware: [ 0.000000] DMI: LENOVO 81FV/LNVNB161216, BIOS 8JCN44WW 08/13/2018 The wifi device is: 00:14.3 Network controller [0280]: Intel Corporation Wireless-AC 9560 [Jefferson Peak] [8086:a370] (rev 10)  Subsystem: Intel Corporation Wireless-AC 9560 [Jefferson Peak] [8086:0034]  Kernel driver in use: iwlwifi We investigated the issue extensively and built the module with additional logic without solving the issue. It is well-known that some Lenovo models do not have a separate hardware radio kill switch (this model uses hot-keys Fn + F7) and need to use a DMI match to disable the rfkill logic. We used dmidecode to get the correct Version string: Handle 0x0001, DMI type 1, 27 bytes System Information  Manufacturer: LENOVO  Product Name: 81FV  Version: Lenovo Legion Y530-15ICH  Serial Number: PF18CD10  UUID: A44F71C1-5E3D-11E8-9379-8C16458E3F9D  Wake-up Type: Power Switch  SKU Number: LENOVO_MT_81FV_BU_idea_FM_Legion Y530-15ICH  Family: Legion Y530-15ICH and added it to no_hw_rfkill_list[]:     {         .ident = "Lenovo Legion Y530-15ICH",         .matches = {             DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),             DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Legion Y530-15ICH"),         },     }, However, rfkill was still listing the platform devices "ideapad_wlan" and "ideapad_bluetooth": 0: ideapad_wlan: Wireless LAN  Soft blocked: no  Hard blocked: yes 1: ideapad_bluetooth: Bluetooth  Soft blocked: yes  Hard blocked: yes 3: phy0: Wireless LAN  Soft blocked: no  Hard blocked: no 4: hci0: Bluetooth  Soft blocked: yes  Hard blocked: no /sys/class/rfkill/rfkill0/hard=1 /sys/class/rfkill/rfkill0/index=0 /sys/class/rfkill/rfkill0/name=ideapad_wlan /sys/class/rfkill/rfkill0/persistent=1 /sys/class/rfkill/rfkill0/soft=0 /sys/class/rfkill/rfkill0/state=2 /sys/class/rfkill/rfkill0/type=wlan /sys/class/rfkill/rfkill0/uevent=RFKILL_NAME=ideapad_wlan RFKILL_TYPE=wlan RFKILL_STATE=2 /sys/class/rfkill/rfkill1/hard=1 /sys/class/rfkill/rfkill1/index=1 /sys/class/rfkill/rfkill1/name=ideapad_bluetooth /sys/class/rfkill/rfkill1/persistent=1 /sys/class/rfkill/rfkill1/soft=1 /sys/class/rfkill/rfkill1/state=2 /sys/class/rfkill/rfkill1/type=bluetooth /sys/class/rfkill/rfkill1/uevent=RFKILL_NAME=ideapad_bluetooth RFKILL_TYPE=bluetooth RFKILL_STATE=2 /sys/class/rfkill/rfkill3/hard=0 /sys/class/rfkill/rfkill3/index=3 /sys/class/rfkill/rfkill3/name=phy0 /sys/class/rfkill/rfkill3/persistent=0 /sys/class/rfkill/rfkill3/soft=0 /sys/class/rfkill/rfkill3/state=1 /sys/class/rfkill/rfkill3/type=wlan /sys/class/rfkill/rfkill3/uevent=RFKILL_NAME=phy0 RFKILL_TYPE=wlan RFKILL_STATE=1 /sys/class/rfkill/rfkill4/hard=0 /sys/class/rfkill/rfkill4/index=4 /sys/class/rfkill/rfkill4/name=hci0 /sys/class/rfkill/rfkill4/persistent=0 /sys/class/rfkill/rfkill4/soft=1 /sys/class/rfkill/rfkill4/state=0 /sys/class/rfkill/rfkill4/type=bluetooth /sys/class/rfkill/rfkill4/uevent=RFKILL_NAME=hci0 RFKILL_TYPE=bluetooth RFKILL_STATE=0 We then added printk(KERN_NOTICE ... in the module's platform_driver.probe function ideapad_acpi_add() both at entry and later to report the DMI and status of the hardware switch control flag: diff -u /home/all/SourceCode/linux/linux/drivers/platform/x86/ideapad-laptop.c ./ideapad-laptop.c --- /home/all/SourceCode/linux/linux/drivers/platform/x86/ideapad-laptop.c 2018-10-14 01:46:49.506088219 +0100 +++ ./ideapad-laptop.c 2018-10-14 06:19:48.843813865 +0100 @@ -1147,6 +1147,13 @@                 },         },         { + .ident = "Lenovo Legion Y530-15ICH", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), + DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Legion Y530-15ICH"), + }, + }, + {                 .ident = "Lenovo Legion Y720-15IKB",                 .matches = {                         DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), @@ -1239,6 +1246,7 @@         int cfg;         struct ideapad_private *priv;         struct acpi_device *adev; + const char *dmi_vendor, *dmi_version;         ret = acpi_bus_get_device(ACPI_HANDLE(&pdev->dev), &adev);         if (ret) @@ -1257,6 +1265,10 @@         priv->platform_device = pdev;         priv->has_hw_rfkill_switch = !dmi_check_system(no_hw_rfkill_list); + dmi_vendor = dmi_get_system_info(DMI_SYS_VENDOR); + dmi_version = dmi_get_system_info(DMI_PRODUCT_VERSION); + printk(KERN_NOTICE "DMI: %s, %s. has_hw_rfkill_switch=%d\n", dmi_vendor, dmi_version, priv->has_hw_rfkill_switch); +         ret = ideapad_sysfs_init(priv);         if (ret)                 return ret; And this revealed that the function is not being called - the KERN_NOTICE messages do not appear in 'dmesg' output. This suggests: static const struct acpi_device_id ideapad_device_ids[] = {     { "VPC2004", 0}, is not being matched via platform_driver.driver.acpi_match_table = ACPI_PTR(ideapad_device_ids), We then decompiled the ACPI DSDT and confirmed that _HID is being set to VPC2004: grep -C4 VPC2004 dsdt.dsl             Scope (\_SB.PCI0.LPCB.EC0)             {                 Device (VPC0)                 {                     Name (_HID, "VPC2004") // _HID: Hardware ID                     Name (_UID, Zero) // _UID: Unique ID                     Name (_VPC, 0xFC0DF516)                     Name (VPCD, Zero)                     Method (_STA, 0, NotSerialized) // _STA: Status At this point we're not sure what the next step should be. Wifi works correctly with the module blacklisted but it would be good to fix this properly.
2018-10-14 15:33:49 TJ description I've been working with a user that has a Lenovo Legion Y530-15ICH where booting Ubuntu 18.10 (kernel 4.18.0-8) results in the radios being disabled by the platform driver "ideapad-laptop". Unloading or blacklisting the module solves the issue but disables other platform ACPI interfaces: $ sudo tee /etc/modprobe.d/ideapad.conf <<< "blacklist ideapad_laptop" The system has the most recent firmware: [ 0.000000] DMI: LENOVO 81FV/LNVNB161216, BIOS 8JCN44WW 08/13/2018 The wifi device is: 00:14.3 Network controller [0280]: Intel Corporation Wireless-AC 9560 [Jefferson Peak] [8086:a370] (rev 10)  Subsystem: Intel Corporation Wireless-AC 9560 [Jefferson Peak] [8086:0034]  Kernel driver in use: iwlwifi We investigated the issue extensively and built the module with additional logic without solving the issue. It is well-known that some Lenovo models do not have a separate hardware radio kill switch (this model uses hot-keys Fn + F7) and need to use a DMI match to disable the rfkill logic. We used dmidecode to get the correct Version string: Handle 0x0001, DMI type 1, 27 bytes System Information  Manufacturer: LENOVO  Product Name: 81FV  Version: Lenovo Legion Y530-15ICH  Serial Number: PF18CD10  UUID: A44F71C1-5E3D-11E8-9379-8C16458E3F9D  Wake-up Type: Power Switch  SKU Number: LENOVO_MT_81FV_BU_idea_FM_Legion Y530-15ICH  Family: Legion Y530-15ICH and added it to no_hw_rfkill_list[]:     {         .ident = "Lenovo Legion Y530-15ICH",         .matches = {             DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),             DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Legion Y530-15ICH"),         },     }, However, rfkill was still listing the platform devices "ideapad_wlan" and "ideapad_bluetooth": 0: ideapad_wlan: Wireless LAN  Soft blocked: no  Hard blocked: yes 1: ideapad_bluetooth: Bluetooth  Soft blocked: yes  Hard blocked: yes 3: phy0: Wireless LAN  Soft blocked: no  Hard blocked: no 4: hci0: Bluetooth  Soft blocked: yes  Hard blocked: no /sys/class/rfkill/rfkill0/hard=1 /sys/class/rfkill/rfkill0/index=0 /sys/class/rfkill/rfkill0/name=ideapad_wlan /sys/class/rfkill/rfkill0/persistent=1 /sys/class/rfkill/rfkill0/soft=0 /sys/class/rfkill/rfkill0/state=2 /sys/class/rfkill/rfkill0/type=wlan /sys/class/rfkill/rfkill0/uevent=RFKILL_NAME=ideapad_wlan RFKILL_TYPE=wlan RFKILL_STATE=2 /sys/class/rfkill/rfkill1/hard=1 /sys/class/rfkill/rfkill1/index=1 /sys/class/rfkill/rfkill1/name=ideapad_bluetooth /sys/class/rfkill/rfkill1/persistent=1 /sys/class/rfkill/rfkill1/soft=1 /sys/class/rfkill/rfkill1/state=2 /sys/class/rfkill/rfkill1/type=bluetooth /sys/class/rfkill/rfkill1/uevent=RFKILL_NAME=ideapad_bluetooth RFKILL_TYPE=bluetooth RFKILL_STATE=2 /sys/class/rfkill/rfkill3/hard=0 /sys/class/rfkill/rfkill3/index=3 /sys/class/rfkill/rfkill3/name=phy0 /sys/class/rfkill/rfkill3/persistent=0 /sys/class/rfkill/rfkill3/soft=0 /sys/class/rfkill/rfkill3/state=1 /sys/class/rfkill/rfkill3/type=wlan /sys/class/rfkill/rfkill3/uevent=RFKILL_NAME=phy0 RFKILL_TYPE=wlan RFKILL_STATE=1 /sys/class/rfkill/rfkill4/hard=0 /sys/class/rfkill/rfkill4/index=4 /sys/class/rfkill/rfkill4/name=hci0 /sys/class/rfkill/rfkill4/persistent=0 /sys/class/rfkill/rfkill4/soft=1 /sys/class/rfkill/rfkill4/state=0 /sys/class/rfkill/rfkill4/type=bluetooth /sys/class/rfkill/rfkill4/uevent=RFKILL_NAME=hci0 RFKILL_TYPE=bluetooth RFKILL_STATE=0 We then added printk(KERN_NOTICE ... in the module's platform_driver.probe function ideapad_acpi_add() both at entry and later to report the DMI and status of the hardware switch control flag: diff -u /home/all/SourceCode/linux/linux/drivers/platform/x86/ideapad-laptop.c ./ideapad-laptop.c --- /home/all/SourceCode/linux/linux/drivers/platform/x86/ideapad-laptop.c 2018-10-14 01:46:49.506088219 +0100 +++ ./ideapad-laptop.c 2018-10-14 06:19:48.843813865 +0100 @@ -1147,6 +1147,13 @@                 },         },         { + .ident = "Lenovo Legion Y530-15ICH", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), + DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Legion Y530-15ICH"), + }, + }, + {                 .ident = "Lenovo Legion Y720-15IKB",                 .matches = {                         DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), @@ -1239,6 +1246,7 @@         int cfg;         struct ideapad_private *priv;         struct acpi_device *adev; + const char *dmi_vendor, *dmi_version;         ret = acpi_bus_get_device(ACPI_HANDLE(&pdev->dev), &adev);         if (ret) @@ -1257,6 +1265,10 @@         priv->platform_device = pdev;         priv->has_hw_rfkill_switch = !dmi_check_system(no_hw_rfkill_list); + dmi_vendor = dmi_get_system_info(DMI_SYS_VENDOR); + dmi_version = dmi_get_system_info(DMI_PRODUCT_VERSION); + printk(KERN_NOTICE "DMI: %s, %s. has_hw_rfkill_switch=%d\n", dmi_vendor, dmi_version, priv->has_hw_rfkill_switch); +         ret = ideapad_sysfs_init(priv);         if (ret)                 return ret; And this revealed that the function is not being called - the KERN_NOTICE messages do not appear in 'dmesg' output. This suggests: static const struct acpi_device_id ideapad_device_ids[] = {     { "VPC2004", 0}, is not being matched via platform_driver.driver.acpi_match_table = ACPI_PTR(ideapad_device_ids), We then decompiled the ACPI DSDT and confirmed that _HID is being set to VPC2004: grep -C4 VPC2004 dsdt.dsl             Scope (\_SB.PCI0.LPCB.EC0)             {                 Device (VPC0)                 {                     Name (_HID, "VPC2004") // _HID: Hardware ID                     Name (_UID, Zero) // _UID: Unique ID                     Name (_VPC, 0xFC0DF516)                     Name (VPCD, Zero)                     Method (_STA, 0, NotSerialized) // _STA: Status At this point we're not sure what the next step should be. Wifi works correctly with the module blacklisted but it would be good to fix this properly. I've been working with a user that has a Lenovo Legion Y530-15ICH where booting Ubuntu 18.10 (kernel 4.18.0-8) results in the radios being disabled by the platform driver "ideapad-laptop". Unloading or blacklisting the module solves the issue but disables other platform ACPI interfaces: $ sudo tee /etc/modprobe.d/ideapad.conf <<< "blacklist ideapad_laptop" The system has the most recent firmware: [ 0.000000] DMI: LENOVO 81FV/LNVNB161216, BIOS 8JCN44WW 08/13/2018 The wifi device is: 00:14.3 Network controller [0280]: Intel Corporation Wireless-AC 9560 [Jefferson Peak] [8086:a370] (rev 10)  Subsystem: Intel Corporation Wireless-AC 9560 [Jefferson Peak] [8086:0034]  Kernel driver in use: iwlwifi We investigated the issue extensively and built the module with additional logic without solving the issue. It is well-known that some Lenovo models do not have a separate hardware radio kill switch (this model uses hot-keys Fn + F7 for 'Airplane mode') and need to use a DMI match to disable the rfkill logic. We used dmidecode to get the correct Version string: Handle 0x0001, DMI type 1, 27 bytes System Information  Manufacturer: LENOVO  Product Name: 81FV  Version: Lenovo Legion Y530-15ICH  Serial Number: PF18CD10  UUID: A44F71C1-5E3D-11E8-9379-8C16458E3F9D  Wake-up Type: Power Switch  SKU Number: LENOVO_MT_81FV_BU_idea_FM_Legion Y530-15ICH  Family: Legion Y530-15ICH and added it to no_hw_rfkill_list[]:     {         .ident = "Lenovo Legion Y530-15ICH",         .matches = {             DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),             DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Legion Y530-15ICH"),         },     }, However, rfkill was still listing the platform devices "ideapad_wlan" and "ideapad_bluetooth": 0: ideapad_wlan: Wireless LAN  Soft blocked: no  Hard blocked: yes 1: ideapad_bluetooth: Bluetooth  Soft blocked: yes  Hard blocked: yes 3: phy0: Wireless LAN  Soft blocked: no  Hard blocked: no 4: hci0: Bluetooth  Soft blocked: yes  Hard blocked: no /sys/class/rfkill/rfkill0/hard=1 /sys/class/rfkill/rfkill0/index=0 /sys/class/rfkill/rfkill0/name=ideapad_wlan /sys/class/rfkill/rfkill0/persistent=1 /sys/class/rfkill/rfkill0/soft=0 /sys/class/rfkill/rfkill0/state=2 /sys/class/rfkill/rfkill0/type=wlan /sys/class/rfkill/rfkill0/uevent=RFKILL_NAME=ideapad_wlan RFKILL_TYPE=wlan RFKILL_STATE=2 /sys/class/rfkill/rfkill1/hard=1 /sys/class/rfkill/rfkill1/index=1 /sys/class/rfkill/rfkill1/name=ideapad_bluetooth /sys/class/rfkill/rfkill1/persistent=1 /sys/class/rfkill/rfkill1/soft=1 /sys/class/rfkill/rfkill1/state=2 /sys/class/rfkill/rfkill1/type=bluetooth /sys/class/rfkill/rfkill1/uevent=RFKILL_NAME=ideapad_bluetooth RFKILL_TYPE=bluetooth RFKILL_STATE=2 /sys/class/rfkill/rfkill3/hard=0 /sys/class/rfkill/rfkill3/index=3 /sys/class/rfkill/rfkill3/name=phy0 /sys/class/rfkill/rfkill3/persistent=0 /sys/class/rfkill/rfkill3/soft=0 /sys/class/rfkill/rfkill3/state=1 /sys/class/rfkill/rfkill3/type=wlan /sys/class/rfkill/rfkill3/uevent=RFKILL_NAME=phy0 RFKILL_TYPE=wlan RFKILL_STATE=1 /sys/class/rfkill/rfkill4/hard=0 /sys/class/rfkill/rfkill4/index=4 /sys/class/rfkill/rfkill4/name=hci0 /sys/class/rfkill/rfkill4/persistent=0 /sys/class/rfkill/rfkill4/soft=1 /sys/class/rfkill/rfkill4/state=0 /sys/class/rfkill/rfkill4/type=bluetooth /sys/class/rfkill/rfkill4/uevent=RFKILL_NAME=hci0 RFKILL_TYPE=bluetooth RFKILL_STATE=0 We then added printk(KERN_NOTICE ... in the module's platform_driver.probe function ideapad_acpi_add() both at entry and later to report the DMI and status of the hardware switch control flag: diff -u /home/all/SourceCode/linux/linux/drivers/platform/x86/ideapad-laptop.c ./ideapad-laptop.c --- /home/all/SourceCode/linux/linux/drivers/platform/x86/ideapad-laptop.c 2018-10-14 01:46:49.506088219 +0100 +++ ./ideapad-laptop.c 2018-10-14 06:19:48.843813865 +0100 @@ -1147,6 +1147,13 @@                 },         },         { + .ident = "Lenovo Legion Y530-15ICH", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), + DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Legion Y530-15ICH"), + }, + }, + {                 .ident = "Lenovo Legion Y720-15IKB",                 .matches = {                         DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), @@ -1239,6 +1246,7 @@         int cfg;         struct ideapad_private *priv;         struct acpi_device *adev; + const char *dmi_vendor, *dmi_version;         ret = acpi_bus_get_device(ACPI_HANDLE(&pdev->dev), &adev);         if (ret) @@ -1257,6 +1265,10 @@         priv->platform_device = pdev;         priv->has_hw_rfkill_switch = !dmi_check_system(no_hw_rfkill_list); + dmi_vendor = dmi_get_system_info(DMI_SYS_VENDOR); + dmi_version = dmi_get_system_info(DMI_PRODUCT_VERSION); + printk(KERN_NOTICE "DMI: %s, %s. has_hw_rfkill_switch=%d\n", dmi_vendor, dmi_version, priv->has_hw_rfkill_switch); +         ret = ideapad_sysfs_init(priv);         if (ret)                 return ret; And this revealed that the function is not being called - the KERN_NOTICE messages do not appear in 'dmesg' output. This suggests: static const struct acpi_device_id ideapad_device_ids[] = {     { "VPC2004", 0}, is not being matched via platform_driver.driver.acpi_match_table = ACPI_PTR(ideapad_device_ids), We then decompiled the ACPI DSDT and confirmed that _HID is being set to VPC2004: grep -C4 VPC2004 dsdt.dsl             Scope (\_SB.PCI0.LPCB.EC0)             {                 Device (VPC0)                 {                     Name (_HID, "VPC2004") // _HID: Hardware ID                     Name (_UID, Zero) // _UID: Unique ID                     Name (_VPC, 0xFC0DF516)                     Name (VPCD, Zero)                     Method (_STA, 0, NotSerialized) // _STA: Status At this point we're not sure what the next step should be. Wifi works correctly with the module blacklisted but it would be good to fix this properly.
2018-10-14 22:39:41 Nisankh Acharjya linux (Ubuntu): assignee Nisankh Acharjya (nisankhubuntu)
2018-10-14 22:41:33 TJ linux (Ubuntu): assignee Nisankh Acharjya (nisankhubuntu)
2018-10-15 13:17:53 TJ linux (Ubuntu): status Incomplete Confirmed
2018-10-15 17:30:18 Joseph Salisbury linux (Ubuntu): importance Undecided Medium
2018-10-15 17:30:56 Joseph Salisbury linux (Ubuntu): status Confirmed Incomplete
2018-10-15 17:31:07 Joseph Salisbury tags cosmic kernel-da-key
2018-10-20 17:57:10 TJ linux (Ubuntu): status Incomplete Confirmed