[PATCH v3 0/6] I2C framework, reboot Unmatched via PMIC
Alexandre Ghiti
alexandre.ghiti at canonical.com
Tue Nov 9 23:43:45 PST 2021
On Tue, Nov 9, 2021 at 1:41 PM Nikita Shubin <nikita.shubin at maquefel.me> wrote:
>
> From: Nikita Shubin <n.shubin at yadro.com>
>
> This series introduce rebooting via i2c da9063 PMIC, currently on
> SiFive Unmatched board.
>
> "gpio-poweroff", "gpio-reset" remains with default priority of 128 - default priority,
> da9063 is 1 by default the least priority for shutdown and highest priority for
> reset.
>
> da9063 resides in platform/generic code and is used only for sifive_fu740, in case if
> da9063 is found in device tree.
>
> Alexandre, Heinrich and Anup, the reason of "da9063_system_reset: chip is not
> da9063 PMIC" wasn't the initialization, the peripheral clocks are initiated by ZSBL,
> the reason was incorrect timeouts in sifive_i2c_adapter_poll (100ms is really too much,
> my bad), with polling reworked everything is working smooth regardless of
> last reset type.
>
> The RTC ALARM reboot seems working, but implementing it in OpenSBI will require a
> full-scale calendar logic (for day/month correct rollover) which is undesirable, also
> we sacrifice the ability to wake up on ALARM.
>
> I am currently experimentings with TICK ALARM approach which should behave just like
> the ALARM one, but i get wierd results with board being powered off and then preventing
> the onKEY power it back again (turns off shortly after key pressed),
> until cable plugged/unplugged (the BATTERY is missing).
>
> It looks like OTP settings are messing with logic, a comment from SiFive is really
> needed.
>
> So we should currently stick to approuch proposed by Alexandre it hasn't failed
> me so far.
I have tested this on u-boot and linux (with the SRST patchset) and
this seems to work reliably.
Nice you came up with this revision for the openSBI release, well done ;)
Thanks,
Alex
>
> v2->v3:
> - new "lib: utils/reset: separate driver init func" patch
> - dropped separate DT bindings for da9063
> - dropped priority bindings
> - moved fdt_reset_da9063 to generic platform code
> - fdt_reset_da9063 is instatated by sifive_fu740 final init
>
> Alexandre Ghiti:
> - removed fdt_i2c_adapter_driver
> - fixed sifive_i2c_setreg/sifive_i2c_getreg to use uint8_t for reg
> - dropped configure method
> - dropped unneeded register's defines
>
> Nikita Shubin (6):
> lib: utils/reset: add priority to gpio reset
> lib: utils/reset: separate driver init func
> lib: utils/i2c: Add generic I2C configuration library
> lib: utils/i2c: Add simple FDT based I2C framework
> lib: utils/i2c: Add minimal SiFive I2C driver
> platform: sifive_fu740: add platform reset driver
>
> include/sbi_utils/i2c/fdt_i2c.h | 26 +++
> include/sbi_utils/i2c/i2c.h | 85 +++++++++
> include/sbi_utils/reset/fdt_reset.h | 5 +
> lib/utils/i2c/fdt_i2c.c | 90 ++++++++++
> lib/utils/i2c/fdt_i2c_sifive.c | 262 ++++++++++++++++++++++++++++
> lib/utils/i2c/i2c.c | 75 ++++++++
> lib/utils/i2c/objects.mk | 12 ++
> lib/utils/reset/fdt_reset.c | 37 ++--
> lib/utils/reset/fdt_reset_gpio.c | 10 +-
> platform/generic/fdt_reset_da9063.c | 186 ++++++++++++++++++++
> platform/generic/objects.mk | 1 +
> platform/generic/sifive_fu740.c | 22 +++
> 12 files changed, 793 insertions(+), 18 deletions(-)
> create mode 100644 include/sbi_utils/i2c/fdt_i2c.h
> create mode 100644 include/sbi_utils/i2c/i2c.h
> create mode 100644 lib/utils/i2c/fdt_i2c.c
> create mode 100644 lib/utils/i2c/fdt_i2c_sifive.c
> create mode 100644 lib/utils/i2c/i2c.c
> create mode 100644 lib/utils/i2c/objects.mk
> create mode 100644 platform/generic/fdt_reset_da9063.c
>
> --
> 2.31.1
>
More information about the opensbi
mailing list