On Fri, Jul 15, 2022 at 12:10:47PM -0500, Chris Morgan wrote: > On Thu, Jul 07, 2022 at 10:41:34AM +0200, Michal Suchánek wrote: > > Hello, > > > > this causes regression on pinebook pro: > > > > resetting ... > > System reset not supported on this platform > > ### ERROR ### Please RESET the board ### > > > > Is there something missing in the DT for this board? > > > > Or perhaps a fallback should be provided in absence of the PMIC? > > > > Thanks > > > > Michal > > Sorry Michal, I was busy traveling and then came down with a pretty bad > cold, so I've been a bit away from things. Are you getting this error > when you attempt to reset or to poweroff the Pinebook Pro from U-Boot? > > I tested the code on my RK817, but a cursory reading of the datasheet > suggests every rk8xx known so far should be able to shutdown using the > two methods added here. I'm wondering if there is perhaps a configuration > issue we need to account for, as this routine is only shutting down the > PMIC and not restarting it.
This is trying to restart the system from u-boot. The walk function *seems* to try all methods of all reset providers but maybe there is some catch there. Thanks Michal > > Thank you. > > > > > On Fri, May 27, 2022 at 01:18:19PM -0500, Chris Morgan wrote: > > > From: Chris Morgan <macromor...@hotmail.com> > > > > > > Add support for sysreset shutdown for this PMIC. The values were pulled > > > from the various datasheets, but for now it has only been tested on > > > the rk817 (for an Odroid Go Advance). > > > > > > Signed-off-by: Chris Morgan <macromor...@hotmail.com> > > > Reviewed-by: Jaehoon Chung <jh80.ch...@samsung.com> > > > Reviewed-by: Kever Yang <kever.y...@rock-chips.com> > > > --- > > > drivers/power/pmic/rk8xx.c | 50 +++++++++++++++++++++++++++++++++++++- > > > 1 file changed, 49 insertions(+), 1 deletion(-) > > > > > > diff --git a/drivers/power/pmic/rk8xx.c b/drivers/power/pmic/rk8xx.c > > > index 5f442fea68..1ffbecc02a 100644 > > > --- a/drivers/power/pmic/rk8xx.c > > > +++ b/drivers/power/pmic/rk8xx.c > > > @@ -6,10 +6,50 @@ > > > > > > #include <common.h> > > > #include <dm.h> > > > +#include <dm/lists.h> > > > #include <errno.h> > > > #include <log.h> > > > #include <power/rk8xx_pmic.h> > > > #include <power/pmic.h> > > > +#include <sysreset.h> > > > + > > > +static int rk8xx_sysreset_request(struct udevice *dev, enum sysreset_t > > > type) > > > +{ > > > + struct rk8xx_priv *priv = dev_get_priv(dev->parent); > > > + > > > + if (type != SYSRESET_POWER_OFF) > > > + return -EPROTONOSUPPORT; > > > + > > > + switch (priv->variant) { > > > + case RK805_ID: > > > + case RK808_ID: > > > + case RK816_ID: > > > + case RK818_ID: > > > + pmic_clrsetbits(dev->parent, REG_DEVCTRL, 0, BIT(0)); > > > + break; > > > + case RK809_ID: > > > + case RK817_ID: > > > + pmic_clrsetbits(dev->parent, RK817_REG_SYS_CFG3, 0, > > > + BIT(0)); > > > + break; > > > + default: > > > + printf("Unknown PMIC RK%x: Cannot shutdown\n", > > > + priv->variant); > > > + return -EPROTONOSUPPORT; > > > + }; > > > + > > > + return -EINPROGRESS; > > > +} > > > + > > > +static struct sysreset_ops rk8xx_sysreset_ops = { > > > + .request = rk8xx_sysreset_request, > > > +}; > > > + > > > +U_BOOT_DRIVER(rk8xx_sysreset) = { > > > + .name = "rk8xx_sysreset", > > > + .id = UCLASS_SYSRESET, > > > + .ops = &rk8xx_sysreset_ops, > > > +}; > > > > > > static struct reg_data rk817_init_reg[] = { > > > /* enable the under-voltage protection, > > > @@ -61,7 +101,7 @@ static int rk8xx_read(struct udevice *dev, uint reg, > > > uint8_t *buff, int len) > > > static int rk8xx_bind(struct udevice *dev) > > > { > > > ofnode regulators_node; > > > - int children; > > > + int children, ret; > > > > > > regulators_node = dev_read_subnode(dev, "regulators"); > > > if (!ofnode_valid(regulators_node)) { > > > @@ -72,6 +112,14 @@ static int rk8xx_bind(struct udevice *dev) > > > > > > debug("%s: '%s' - found regulators subnode\n", __func__, dev->name); > > > > > > + if (CONFIG_IS_ENABLED(SYSRESET)) { > > > + ret = device_bind_driver_to_node(dev, "rk8xx_sysreset", > > > + "rk8xx_sysreset", > > > + dev_ofnode(dev), NULL); > > > + if (ret) > > > + return ret; > > > + } > > > + > > > children = pmic_bind_children(dev, regulators_node, pmic_children_info); > > > if (!children) > > > debug("%s: %s - no child found\n", __func__, dev->name); > > > -- > > > 2.25.1 > > >