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