lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAC-bbXbkt0oYPn+EWLdEYKyj8G_muWGDZWTApyFv3cb591dc0A@mail.gmail.com>
Date:   Wed, 8 Dec 2021 16:33:52 +0200
From:   Nikos Latmos <n.latmos@...psea.ai>
To:     jmaneyrol@...ensense.com, jic23@...nel.org, lars@...afoo.de,
        linux-iio@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: [PROBLEM]: Error during probing process in inv_icm42600_i2c driver

Hello,

I have an ARM device based on the Broadcom BCM2837 processor (quad-core
ARM Cortex-A53, 1.2GHz), which has an Invensense ICM-42605 IMU chip
connected over I2C. I'm running an unmodified Linux 5.4.83 kernel. The I2C
driver for my device is in the following path:
drivers/iio/imu/inv_icm42600/inv_icm42600_i2c.c.

The problem is that the device driver cannot be probed. More specifically,
dmesg returns the following error message:

inv-icm42600-i2c 0-0068: mounting matrix not found: using identity...
inv-icm42600-i2c 0-0068: 0-0068 supply vdd not found, using dummy regulator
inv-icm42600-i2c 0-0068: 0-0068 supply vddio not found, using dummy regulator
inv-icm42600-i2c: probe of 0-0068 failed with error -121

During the debugging procedure, I found out that the failure occurred when
the driver tried to set up the I2C bus parameters. More precisely, by setting
the INV_ICM42600_REG_INTF_CONFIG6 register according to the values described
in the datasheet for the I2C communication, actually caused the probe function
to fail and return the error -121.

After I experimented with different values in the specific register bits,
I came to the conclusion, that the setting of the bit
INV_ICM42600_INTF_CONFIG6_I3C_SDR_EN caused the system to successfully
probe the driver. Any other bit setting combinations failed to do so.

Any hints on why would the driver behave so?

Here is a patch that I have so far and it seems to solve the issue.

Best regards,
Nick Latmos


>From d7b3922cd0182ba880ff729edb4a156b55dfb6f0 Mon Sep 17 00:00:00 2001
From: nicklat <n.latmos@...psea.ai>
Date: Wed, 8 Dec 2021 15:51:28 +0200
Subject: [PATCH] iio: imu: inv_icm42600: enable SDR mode

Add SDR (Single Data Rate) support.
In SDR mode, data is only clocked on one edge of the clock.

Without this option enabled, the probing process fails.

Signed-off-by: nicklat <n.latmos@...psea.ai>
---
 drivers/iio/imu/inv_icm42600/inv_icm42600_i2c.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_i2c.c
b/drivers/iio/imu/inv_icm42600/inv_icm42600_i2c.c
index 85b1934cec60..ea31f102fbca 100644
--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_i2c.c
+++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_i2c.c
@@ -21,7 +21,8 @@ static int inv_icm42600_i2c_bus_setup(struct
inv_icm42600_state *st)
        /* setup interface registers */
        ret = regmap_update_bits(st->map, INV_ICM42600_REG_INTF_CONFIG6,
                                 INV_ICM42600_INTF_CONFIG6_MASK,
-                                INV_ICM42600_INTF_CONFIG6_I3C_EN);
+                                INV_ICM42600_INTF_CONFIG6_I3C_EN |
+                                INV_ICM42600_INTF_CONFIG6_I3C_SDR_EN);
        if (ret)
                return ret;

--
2.25.1

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ