CS553x MFD doesn't get registered on Axiomtek SBC84622 (Geode LX) due to a conflict between SystemIO and OpRegion ranges

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,
I have an Axiomtek SBC84622, a board based on AMD Geode LX which uses a CS553x MFD for providing access to the I2C bus master and some GPIO pins (and other stuff). I'm running 4.9.23, and driver/device registration fails on my board due to some conflict in the ACPI data. As a result of that, kernel says that "MFD add devices failed" with EBUSY (-16), and no I2C bus is visible.

I went through the cs5535_mfd_probe -> mfd_add_devices -> mfd_add_device call chain. The function that fails is `acpi_check_resource_conflict` within the `mfd_add_device`. Because I am brave and clueless when it comes to ACPI, I commented out the `goto fail_alias` so that a failed validation of the ACPI data doesn't cause mfd_add_device's failure, and after that, the I2C bus started working and all devices were registered properly as far as I can tell. Here's what gets shown in the dmesg after I added a couple more printks:

[    0.533493] mfd_add_devices: calling mfd_add_device 0
[    0.533796] mfd_add_devices: calling mfd_add_device 1
[ 0.533898] ACPI Warning: SystemIO range 0x0000000000006100-0x00000000000061FF conflicts with OpRegion 0x0000000000006100-0x00000000000061FF (\_SB.GPIO) (20160831/utaddress-247)\x007) [ 0.534232] ACPI: If an ACPI driver is available for this device, you should use it instead of the native driver
[    0.534367] PWN mfd_add_device: acpi_check_resource_conflict failed
[ 0.534670] cs5535-gpio cs5535-gpio: reserved resource region [io 0x6100-0x61ff]
[    0.535145] mfd_add_devices: calling mfd_add_device 2
[ 0.535449] cs5535-mfgpt cs5535-mfgpt: reserved resource region [io 0x6200-0x623f]
[    0.535582] cs5535-mfgpt cs5535-mfgpt: 0 MFGPT timers available
[    0.535673] mfd_add_devices: calling mfd_add_device 3
[    0.535934] mfd_add_devices: calling mfd_add_device 4
[ 0.536073] ACPI Warning: SystemIO range 0x0000000000009C00-0x0000000000009C3F conflicts with OpRegion 0x0000000000009C3C-0x0000000000009C3C (\SCPP) (20160831/utaddress-247)\x007) [ 0.536342] ACPI Warning: SystemIO range 0x0000000000009C00-0x0000000000009C3F conflicts with OpRegion 0x0000000000009C24-0x0000000000009C27 (\VSAB) (20160831/utaddress-247)\x007) [ 0.536604] ACPI: If an ACPI driver is available for this device, you should use it instead of the native driver
[    0.536735] PWN mfd_add_device: acpi_check_resource_conflict failed
[    0.536992] cs5535-mfd 0000:00:0f.0: 5 devices registered.

I.e., registration of subdevices #1 and #4 would fail if the mfd_add_device cared about the acpi_check_resource_conflict.

I've checked the manufacturer's database for an updated BIOS, but it seems that they don't provide anything. The version that I have is "1.0.0" dating back to 2009, so I don't think there are big chances of a fix from the vendor. I'm quite happy that I now have my I2C. I would be even happier if the geode_wdt also started working, but that's for some other time.

What can I do in order to fix this properly? I very quickly glanced through the log of drivers/mfd/mfd-core.c and I see some bits which suggest that maybe this particular board might need some more quirks. I have approximately zero knowledge of ACPI and kernel programming. I'll be happy to test patches which fix this, and I can also provide dumps of ACPI tables or whatever else is needed.

With kind regards,
Jan
--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux