I2C arb lost in communicate to address

Hi Nvidias,

Now we use I2C communication to mount the three devices under his main line, with different addresses. When we read and write these devices frequently, arb lost in communictae to add 0x address will occasionally occur. If this error occurs, the I2C bus will not be able to recover.

We tell you about our I2C topology, tx2-> i2c_switch_bridge-> 9288->96705->ISP, one of our I2C_switch will mount six 9288->96705-> isps.

I see a solution in the kernel that doesn’t seem to work.

static int tegra_i2c_issue_bus_clear(struct tegra_i2c_dev *i2c_dev)
int time_left, err;
u32 reg;

    if (i2c_dev->hw->has_bus_clr_support) {
                  I2C_BC_STOP_COND | I2C_BC_TERMINATE;
            i2c_writel(i2c_dev, reg, I2C_BUS_CLEAR_CNFG);
            if (i2c_dev->hw->has_config_load_reg) {
                    err = tegra_i2c_wait_for_config_load(i2c_dev);
                    if (err)
                            return err;
            reg |= I2C_BC_ENABLE;
            i2c_writel(i2c_dev, reg, I2C_BUS_CLEAR_CNFG);
            tegra_i2c_unmask_irq(i2c_dev, I2C_INT_BUS_CLR_DONE);

            if (i2c_dev->do_polled_io)
                    time_left = wait_polled_io(i2c_dev);
                    time_left =

Moreover, the clock of I2C is normally 400K, and when this arb lost occurs, the clock is abnormal to 300k. It seems that there is something wrong with the I2C controller of TX2. Is there any way we can reset the I2C controller?


Which Tegra I2C instance/controller you are using? Over which port?
Can you share the kernel logs?
I suspect, the slaves are behaving abnormally and holding the line low.
Can you take a scope shot and share?


Hi 840764397,

There is no further update from you for a period, we assume that you have resolved the issue. If still need the support, please open a new one. Thanks