[U-Boot] [PATCH v2 04/19] i2c: Add a mux for GPIO-based I2C bus arbitration

Simon Glass sjg at chromium.org
Sun Aug 9 15:39:52 CEST 2015


On 3 August 2015 at 08:19, Simon Glass <sjg at chromium.org> wrote:
> While I2C supports multi-master buses this is difficult to get right.
> The implementation on the master side in software is quite complex.
> Clock-stretching and the arbitrary time that an I2C transaction can take
> make it difficult to share the bus fairly in the face of high traffic.
> When one or more masters can be reset independently part-way through a
> transaction it is hard to know the state of the bus.
>
> This driver provides a scheme based on two 'claim' GPIOs, one driven by the
> AP (Application Processor, meaning the main CPU) and one driven by the EC
> (Embedded Controller, a small CPU aimed at handling system tasks). With
> these they can communicate and reliably share the bus. This scheme has
> minimal overhead and involves very little code. It is used on snow to
> permit the EC and the AP to share access to the main system PMIC and
> battery. The scheme can survive reboots by either side without difficulty.
> This scheme has been tested in the field with millions of devices.
>
> Since U-Boot runs on the AP, the terminology used is 'our' claim GPIO,
> meaning the AP's, and 'their' claim GPIO, meaning the EC's. This terminology
> is used by the device tree bindings in Linux also.
>
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
>
> Changes in v2:
> - Add a README explaining the algorithm and update the commit message
>
>  doc/README.i2c                             |  60 ++++++++++++
>  drivers/i2c/muxes/Kconfig                  |   9 ++
>  drivers/i2c/muxes/Makefile                 |   1 +
>  drivers/i2c/muxes/i2c-arb-gpio-challenge.c | 147 +++++++++++++++++++++++++++++
>  4 files changed, 217 insertions(+)
>  create mode 100644 doc/README.i2c
>  create mode 100644 drivers/i2c/muxes/i2c-arb-gpio-challenge.c

Applied to u-boot-dm.


More information about the U-Boot mailing list