[PATCH v2 5/5] lib: utils/reset: Add generic da9063 reset driver

Nikita Shubin nikita.shubin at maquefel.me
Wed Nov 3 00:59:40 PDT 2021


Hello All!

On Tue, 26 Oct 2021 11:40:13 +0200
Heinrich Schuchardt <heinrich.schuchardt at canonical.com> wrote:

> On 10/26/21 10:04, Heinrich Schuchardt wrote:
> > On 10/15/21 15:19, Nikita Shubin wrote:  
> >> From: Nikita Shubin <n.shubin at yadro.com>
> >>
> >> da9063 PMIC can be used to reset/shutdown the
> >> Sifive Unmatched board.
> >>
> >> shutdown is done simply by writing SHUTDOWN bit to
> >> DA9063_REG_CONTROL_F register.
> >>
> >> reset via setting WAKEUP bit in DA9063_REG_CONTROL_F
> >> register followed by masking POWER and POWER1 domains
> >> and setting STANDBY bit in DA9063_REG_CONTROL_A,
> >> originally discovered by Alexandre Ghiti on linux-riscv
> >> maillists.
> >>
> >> Signed-off-by: Nikita Shubin <n.shubin at yadro.com>  
> 
> Alexandre and I had the same finding for the driver:
> 
> Reset works fine after a hard reset (via the reset button) when
> coming from Linux.
> 
> After a poweroff reset in U-Boot does not work.
> 
> Our expectation is that OpenSBI ensures that the SBI system reset 
> extension works upon entry into the next firmware stage without 
> requiring any further initialization by that software.
> 
> When a reset is requested you should make not presumption about the 
> state of the system. Simply fully initialize the da9063 state to 
> guarantee a successful reset.

Heinrich and Alexandre, i have done a small investigation:

The RTC works fine on Unmatched, just had a small issue with PLIC driver
firing IRQ only once, here is a separate patch from Guo Ren:

https://patchwork.kernel.org/project/linux-riscv/patch/20211101131736.3800114-1-guoren@kernel.org/

And a small patch to enable da9063 as a wakeup source:

https://github.com/YADRO-KNS/linux/commit/37c2a5b2031a42af99dd7125f8c93ab71236d3fa

Indeed after power-cycle with RESET button or POWER button, I2C is
unavailable (not initialised by U-Boot):

First boot reset after powercycle with powerdown/reset button:
=> reset
resetting ...
da9063_system_reset: chip is not da9063 PMIC

After rebooting with Linux reboot:
=> reset
resetting ...

All okay and that's means that it's not a full reset, I2C was
initialised by linux, and not resetted.

However if we arm the clock and go shutdown:

sh -c "echo `date '+%s' -d '+ 1 minutes'` >
/sys/class/rtc/rtc0/wakealarm" shutdown
shutdown

We get:
=> reset
resetting ...
da9063_system_reset: chip is not da9063 PMIC

So "reset" with RTC is indeed a full reset...

All above also means that "sacrificing" RTC means sacrificing user
setted wakeup ALARM's.

May be it's worth splitting reset into WARM_REBOOT, COLD_REBOOT with
WARM reboot is going through method proposed by Alexandre and COLD
reboot via RTC, and explicitly specify that COLD reboot WILL overwrite
ALARM setting ?

What do you think about this ?

> 
> Best regards
> 
> Heinrich




More information about the opensbi mailing list