5

I recently got a RPI 3, on which I installed ArchLinux, aarch64 version. I just saw that an I2C error message is flooding the logs. Exact error is:

kernel: i2c-bcm2835 3f805000.i2c: i2c transfer failed: 100

This is logged 5 times every 10 seconds.

What's strange is that RPI 3 Soc is a Broadcom 2837, not 2835. Also I don't have anything plugged in the GPIOs, so I don't know why this happens. Could it be something that's on the board itself? How do I find out, and how can I get rid of it?

3
  • archlinuxarm.org/platforms/armv8/broadcom/raspberry-pi-3 -> "Some of the hardware on the board may not work, or it may perform poorly." You should use a Pi specific distro, not a generic one, particularly if you are unfamiliar with the board. Arch has an ARMv7 distro for the Pi 2/3 which should work.
    – goldilocks
    Commented Jan 8, 2017 at 15:43
  • I know that, but I want to run mongodb on it, of which the 32-bit version is not supported and very impractical.
    – Antoine
    Commented Jan 8, 2017 at 18:00
  • Someone may come along with a solution but don't hold your breath. You might have better luck compiling the Pi branch kernel as 64-bit and using that -- I think this has been done but there are, again, some components which don't work. However, if you don't have much experience compiling the linux kernel, this is probably a rabbit hole.
    – goldilocks
    Commented Jan 8, 2017 at 18:02

2 Answers 2

2

UPDATE: Actually... this doesn't fully resolve the issue. These messages are now in the log:

i2c-bcm2835 3f805000.i2c: i2c transfer timed out

Deeper debugging is necessary to figure out what is hooked up to this particular I2C controller on the board.


Here is what worked for me to resolve this issue. First, I noticed this earlier in the kernel log:

i2c-bcm2835 3f805000.i2c: Could not read clock-frequency property

To fix it, edit the Device Tree Blob to add 'clock-frequency' property to that particular I2C module (the property is already set for the other I2C modules, so not sure why it wasn't for this one). Here is a patch and commands to decompile, patch, and recompile the DTB:

--- /boot/dtbs/broadcom/bcm2837-rpi-3-b.dts     2017-06-10 00:48:48.000000000 -0400
+++ /boot/dtbs/broadcom/bcm2837-rpi-3-b-i2c.dts 2017-06-10 00:30:36.000000000 -0400
@@ -465,20 +465,21 @@
                i2c@7e805000 {
                        compatible = "brcm,bcm2835-i2c";
                        reg = <0x7e805000 0x1000>;
                        interrupts = <0x2 0x15>;
                        clocks = <0x4 0x14>;
                        #address-cells = <0x1>;
                        #size-cells = <0x0>;
                        status = "okay";
                        linux,phandle = <0xd>;
                        phandle = <0xd>;
+                       clock-frequency = <0x186a0>;
                };

                vec@7e806000 {
                        compatible = "brcm,bcm2835-vec";
                        reg = <0x7e806000 0x1000>;
                        clocks = <0x4 0x18>;
                        interrupts = <0x2 0x1b>;
                        status = "okay";
                        power-domains = <0xc 0x7>;
                };

Save the above as /boot/dtbs/broadcom/bcm2837-rpi-3-b-i2c.patch and:

pacman -S dtc
cd /boot/dtbs/broadcom
cp bcm2837-rpi-3-b{,.stock}.dtb
dtc -I dtb -O dts > bcm2837-rpi-3-b.dts
patch -p0 bcm2837-rpi-3-b.dts < bcm2837-rpi-3-b-i2c.patch
dtc -I dts -O dtb > bcm2837-rpi-3-b.dtb
sync

Reboot, and there should be no more error nor the log message flood.

PS. This kind of troubleshooting question might be better for the Arch Linux ARM forum.

1

To add a comment to alexei's answer:

In the peripheral documentation of BCM2835 (looks like it is still valid for RPi 3B+), the device at bus address 0x7e805000 is an i2c controller, Broadcom calls it BSC2. There is also an interesting note:

Note that the BSC2 master is used dedicated with the HDMI interface and should not be accessed by user programs.

Also the commit message here refers to it as i2c2 and it seems special.

From these sources, i2c2 device is used as ddc for hdmi device.

I can't find any reason why clock-frequency for i2c2 is left without a value.

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.