Am 23.04.2017 um 10:43 schrieb Álvaro Fernández Rojas: > Add a new sysreset driver based on linux/drivers/power/reset/syscon-reboot.c, > which provides a generic driver for platforms that only require writing a mask > to a regmap offset. > > Signed-off-by: Álvaro Fernández Rojas <nolt...@gmail.com> > Reviewed-by: Simon Glass <s...@chromium.org> > --- > v5: No chnages. > v4: Rebased. > v3: Introduce changes suggested by Simon Glass: > - Add missing driver description. > - Alphabetically order includes. > - Add priv struct to store regmap during probe. > - Cosmetic fixes. > v2: No changes. > > drivers/sysreset/Kconfig | 8 ++++ > drivers/sysreset/Makefile | 1 + > drivers/sysreset/sysreset_syscon.c | 76 > ++++++++++++++++++++++++++++++++++++++ > 3 files changed, 85 insertions(+) > create mode 100644 drivers/sysreset/sysreset_syscon.c > > diff --git a/drivers/sysreset/Kconfig b/drivers/sysreset/Kconfig > index 9664630..b2f7464 100644 > --- a/drivers/sysreset/Kconfig > +++ b/drivers/sysreset/Kconfig > @@ -23,4 +23,12 @@ config SYSRESET_PSCI > must be running on your system. > > endif > + > +config SYSRESET_SYSCON > + bool "Enable support for mfd syscon reboot driver" > + select REGMAP > + select SYSCON > + help > + Reboot support for generic SYSCON mapped register reset. > + > endmenu > diff --git a/drivers/sysreset/Makefile b/drivers/sysreset/Makefile > index 7bb8406..bd352e7 100644 > --- a/drivers/sysreset/Makefile > +++ b/drivers/sysreset/Makefile > @@ -6,6 +6,7 @@ > > obj-$(CONFIG_SYSRESET) += sysreset-uclass.o > obj-$(CONFIG_SYSRESET_PSCI) += sysreset_psci.o > +obj-$(CONFIG_SYSRESET_SYSCON) += sysreset_syscon.o > > ifndef CONFIG_SPL_BUILD > obj-$(CONFIG_ROCKCHIP_RK3036) += sysreset_rk3036.o > diff --git a/drivers/sysreset/sysreset_syscon.c > b/drivers/sysreset/sysreset_syscon.c > new file mode 100644 > index 0000000..adfddb4 > --- /dev/null > +++ b/drivers/sysreset/sysreset_syscon.c > @@ -0,0 +1,76 @@ > +/* > + * Copyright (C) 2017 Álvaro Fernández Rojas <nolt...@gmail.com> > + * > + * Derived from linux/drivers/power/reset/syscon-reboot.c: > + * Copyright (C) 2013, Applied Micro Circuits Corporation > + * Author: Feng Kan <f...@apm.com> > + * > + * SPDX-License-Identifier: GPL-2.0+ > + */ > + > +#include <common.h> > +#include <dm.h> > +#include <errno.h> > +#include <regmap.h> > +#include <sysreset.h> > +#include <syscon.h> > + > +DECLARE_GLOBAL_DATA_PTR; > + > +struct syscon_reboot_priv { > + struct regmap *regmap; > + unsigned int offset; > + unsigned int mask; > +}; > + > +static int syscon_reboot_request(struct udevice *dev, enum sysreset_t type) > +{ > + struct syscon_reboot_priv *priv = dev_get_priv(dev); > + > + regmap_write(priv->regmap, priv->offset, priv->mask); > + > + return -EINPROGRESS; > +} > + > +static struct sysreset_ops syscon_reboot_ops = { > + .request = syscon_reboot_request, > +}; > + > +int syscon_reboot_probe(struct udevice *dev) > +{ > + struct udevice *syscon; > + struct syscon_reboot_priv *priv = dev_get_priv(dev); > + int err; > + > + err = uclass_get_device_by_phandle(UCLASS_SYSCON, dev, > + "regmap", &syscon); > + if (err) { > + error("unable to find syscon device\n"); > + return err; > + } > + > + priv->regmap = syscon_get_regmap(syscon); > + if (!priv->regmap) { > + error("unable to find regmap\n"); > + return -ENODEV; > + } > + > + priv->offset = fdtdec_get_uint(gd->fdt_blob, dev_of_offset(dev), > "offset", 0); > + priv->mask = fdtdec_get_uint(gd->fdt_blob, dev_of_offset(dev), "mask", > 0);
checkpatch.pl: WARNING: line over 80 characters > + > + return 0; > +} > + > +static const struct udevice_id syscon_reboot_ids[] = { > + { .compatible = "syscon-reboot" }, > + { /* sentinel */ } > +}; > + > +U_BOOT_DRIVER(syscon_reboot) = { > + .name = "syscon_reboot", > + .id = UCLASS_SYSRESET, > + .of_match = syscon_reboot_ids, > + .probe = syscon_reboot_probe, > + .priv_auto_alloc_size = sizeof(struct syscon_reboot_priv), > + .ops = &syscon_reboot_ops, > +}; > -- - Daniel
signature.asc
Description: OpenPGP digital signature
_______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot