Re: [PATCH v5 2/3] i2c: tegra: make reset an optional property

From: Andy Shevchenko
Date: Wed Jul 02 2025 - 11:11:56 EST


On Wed, Jul 02, 2025 at 07:04:48PM +0530, Akhil R wrote:
> For controllers that has an internal software reset, make the reset
> property optional. This provides an option to use Tegra I2C in systems
> that choose to restrict reset control from Linux or not to implement
> the ACPI _RST method.
>
> Internal reset was not required when the reset control was mandatory.
> But on platforms where the resets are outside the control of Linux,
> this had to be implemented by just returning success from BPMP or with
> an empty _RST method in the ACPI table, basically ignoring the reset.
>
> While the internal reset is not identical to the hard reset of the
> controller, this will reset all the internal state of the controller
> including FIFOs. This may slightly alter the behaviour in systems
> which were ignoring the reset but it should not cause any functional
> difference since all the required I2C registers are configured after
> this reset, just as in boot. Considering that this sequence is hit
> during the boot or during the I2C recovery path from an error, the
> internal reset provides a better alternative than just ignoring the
> reset.

...

> +static int tegra_i2c_master_reset(struct tegra_i2c_dev *i2c_dev)
> +{
> + if (!i2c_dev->hw->has_mst_reset)
> + return -EOPNOTSUPP;
> +
> + i2c_writel(i2c_dev, 0x1, I2C_MASTER_RESET_CNTRL);

> + udelay(2);

fsleep()
and perhaps explain why this is needed.

> + i2c_writel(i2c_dev, 0x0, I2C_MASTER_RESET_CNTRL);

> + udelay(2);

Ditto.

> + return 0;
> +}

--
With Best Regards,
Andy Shevchenko