Re: [U-Boot] [PATCH v2 02/14] sysreset: add syscon-reboot driver

2017-04-18 Thread Álvaro Fernández Rojas








I'm not sure, but I can't see any reference to 
uclass_get_device_by_phandle in 
https://github.com/u-boot/u-boot/blob/master/drivers/sysreset/sysreset-uclass.cSo
 I guess that the driver is never probed unless it's flagged as 
u-boot,dm-pre-reloc. Am I correct?
Appart from that, this also happens in bmips cpu driver, in which I had to do 
it in bind because probe was never called unless it was flagged as pre-reloc...
Is dm probing every driver or only specific ones such as serial?
Regards,Álvaro.







On Mon, Apr 17, 2017 at 7:46 PM +0200, "Simon Glass"  wrote:










Hi Alvaro,

On 17 April 2017 at 11:38, Álvaro Fernández Rojas  wrote:
>
> Hi Simon,
>
> El 16/04/2017 a las 21:34, Simon Glass escribió:
> > Hi Alvaro,
> >
> > On 15 April 2017 at 16:03, Álvaro Fernández Rojas  wrote:
> >> 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 
> >> ---
> >>  v2: no changes
> >>
> >>  drivers/sysreset/Kconfig   |  8 +
> >>  drivers/sysreset/Makefile  |  1 +
> >>  drivers/sysreset/sysreset_syscon.c | 60 
> >> ++
> >>  3 files changed, 69 insertions(+)
> >>  create mode 100644 drivers/sysreset/sysreset_syscon.c
> >>
> >> diff --git a/drivers/sysreset/Kconfig b/drivers/sysreset/Kconfig
> >> index 05a37b9..0946c9d 100644
> >> --- a/drivers/sysreset/Kconfig
> >> +++ b/drivers/sysreset/Kconfig
> >> @@ -13,4 +13,12 @@ config SYSRESET
> >>   to effect a reset. The uclass will try all available drivers when
> >>   reset_walk() is called.
> >>
> >> +config SYSRESET_SYSCON
> >> +   bool "Enable support for mfd syscon reboot driver"
> >> +   depends on SYSRESET
> >> +   select REGMAP
> >> +   select SYSCON
> >> +   help
> >> + Description here.
> >
> > Yes please!
> Sure, my fault :P
>
> >
> >> +
> >>  endmenu
> >> diff --git a/drivers/sysreset/Makefile b/drivers/sysreset/Makefile
> >> index 49b8bb6..1205f47 100644
> >> --- a/drivers/sysreset/Makefile
> >> +++ b/drivers/sysreset/Makefile
> >> @@ -18,3 +18,4 @@ obj-$(CONFIG_ARCH_SNAPDRAGON) += sysreset_snapdragon.o
> >>  obj-$(CONFIG_ARCH_STI) += sysreset_sti.o
> >>  obj-$(CONFIG_TARGET_XTFPGA) += sysreset_xtfpga.o
> >>  obj-$(CONFIG_ARCH_ASPEED) += sysreset_ast.o
> >> +obj-$(CONFIG_SYSRESET_SYSCON) += sysreset_syscon.o
> >> diff --git a/drivers/sysreset/sysreset_syscon.c 
> >> b/drivers/sysreset/sysreset_syscon.c
> >> new file mode 100644
> >> index 000..61aeb1d
> >> --- /dev/null
> >> +++ b/drivers/sysreset/sysreset_syscon.c
> >> @@ -0,0 +1,60 @@
> >> +/*
> >> + * Copyright (C) 2017 Álvaro Fernández Rojas 
> >> + *
> >> + * Derived from linux/drivers/power/reset/syscon-reboot.c:
> >> + * Copyright (C) 2013, Applied Micro Circuits Corporation
> >> + * Author: Feng Kan 
> >> + *
> >> + * SPDX-License-Identifier:GPL-2.0+
> >> + */
> >> +
> >> +#include 
> >> +#include 
> >> +#include 
> >> +#include 
> >
> > this should go at the end
> I will fix it.
>
> >
> >> +#include 
> >> +#include 
> >> +
> >> +DECLARE_GLOBAL_DATA_PTR;
> >> +
> >> +static int syscon_reboot_request(struct udevice *dev, enum sysreset_t 
> >> type)
> >> +{
> >> +   struct udevice *syscon;
> >> +   struct regmap *regmap;
> >> +   unsigned int offset, mask;
> >> +   int err;
> >> +
> >> +   err = uclass_get_device_by_phandle(UCLASS_SYSCON, dev,
> >> +  "regmap", );
> >> +   if (err) {
> >> +   error("unable to find syscon device
");
> >> +   return err;
> >> +   }
> >> +
> >> +   regmap = syscon_get_regmap(syscon);
> >> +   if (!regmap) {
> >> +   error("unable to find regmap
");
> >> +   return -ENODEV;
> >> +   }
> >> +
> >> +   offset = fdtdec_get_uint(gd->fdt_blob, dev_of_offset(dev), 
> >> "offset", 0);
> >> +   mask = fdtdec_get_uint(gd->fdt_blob, dev_of_offset(dev), "mask", 
> >> 0);
> >
> > You should do this in ofdata_to_platdata() or probe() and store it in
> > a local struct
> I tried doing it in probe:
> https://github.com/Noltari/u-boot/commit/37f45960f240c3e57fa70afe69d9b5782c9e6f9f
>
> However it looks like probe is never called with my current U_BOOT_DRIVER 
> settings...

That is bad - you should figure out why. The
uclass_get_device_by_phandle() should call probe().

> Then I tried doing it in bind instead of probe and it looks like the syscon 
> device isn't ready when syscon-reboot is binded...
> Any ideas? :$

Figure out why probe() doesn't happen.

>
> >
> >
> >> +
> >> +   return regmap_write(regmap, offset, mask);
> >
> > Check error here, and either return -EINPROGRESS or some other error
> 

Re: [U-Boot] [PATCH v2 02/14] sysreset: add syscon-reboot driver

2017-04-17 Thread Simon Glass
Hi Alvaro,

On 17 April 2017 at 11:38, Álvaro Fernández Rojas  wrote:
>
> Hi Simon,
>
> El 16/04/2017 a las 21:34, Simon Glass escribió:
> > Hi Alvaro,
> >
> > On 15 April 2017 at 16:03, Álvaro Fernández Rojas  wrote:
> >> 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 
> >> ---
> >>  v2: no changes
> >>
> >>  drivers/sysreset/Kconfig   |  8 +
> >>  drivers/sysreset/Makefile  |  1 +
> >>  drivers/sysreset/sysreset_syscon.c | 60 
> >> ++
> >>  3 files changed, 69 insertions(+)
> >>  create mode 100644 drivers/sysreset/sysreset_syscon.c
> >>
> >> diff --git a/drivers/sysreset/Kconfig b/drivers/sysreset/Kconfig
> >> index 05a37b9..0946c9d 100644
> >> --- a/drivers/sysreset/Kconfig
> >> +++ b/drivers/sysreset/Kconfig
> >> @@ -13,4 +13,12 @@ config SYSRESET
> >>   to effect a reset. The uclass will try all available drivers when
> >>   reset_walk() is called.
> >>
> >> +config SYSRESET_SYSCON
> >> +   bool "Enable support for mfd syscon reboot driver"
> >> +   depends on SYSRESET
> >> +   select REGMAP
> >> +   select SYSCON
> >> +   help
> >> + Description here.
> >
> > Yes please!
> Sure, my fault :P
>
> >
> >> +
> >>  endmenu
> >> diff --git a/drivers/sysreset/Makefile b/drivers/sysreset/Makefile
> >> index 49b8bb6..1205f47 100644
> >> --- a/drivers/sysreset/Makefile
> >> +++ b/drivers/sysreset/Makefile
> >> @@ -18,3 +18,4 @@ obj-$(CONFIG_ARCH_SNAPDRAGON) += sysreset_snapdragon.o
> >>  obj-$(CONFIG_ARCH_STI) += sysreset_sti.o
> >>  obj-$(CONFIG_TARGET_XTFPGA) += sysreset_xtfpga.o
> >>  obj-$(CONFIG_ARCH_ASPEED) += sysreset_ast.o
> >> +obj-$(CONFIG_SYSRESET_SYSCON) += sysreset_syscon.o
> >> diff --git a/drivers/sysreset/sysreset_syscon.c 
> >> b/drivers/sysreset/sysreset_syscon.c
> >> new file mode 100644
> >> index 000..61aeb1d
> >> --- /dev/null
> >> +++ b/drivers/sysreset/sysreset_syscon.c
> >> @@ -0,0 +1,60 @@
> >> +/*
> >> + * Copyright (C) 2017 Álvaro Fernández Rojas 
> >> + *
> >> + * Derived from linux/drivers/power/reset/syscon-reboot.c:
> >> + * Copyright (C) 2013, Applied Micro Circuits Corporation
> >> + * Author: Feng Kan 
> >> + *
> >> + * SPDX-License-Identifier:GPL-2.0+
> >> + */
> >> +
> >> +#include 
> >> +#include 
> >> +#include 
> >> +#include 
> >
> > this should go at the end
> I will fix it.
>
> >
> >> +#include 
> >> +#include 
> >> +
> >> +DECLARE_GLOBAL_DATA_PTR;
> >> +
> >> +static int syscon_reboot_request(struct udevice *dev, enum sysreset_t 
> >> type)
> >> +{
> >> +   struct udevice *syscon;
> >> +   struct regmap *regmap;
> >> +   unsigned int offset, mask;
> >> +   int err;
> >> +
> >> +   err = uclass_get_device_by_phandle(UCLASS_SYSCON, dev,
> >> +  "regmap", );
> >> +   if (err) {
> >> +   error("unable to find syscon device\n");
> >> +   return err;
> >> +   }
> >> +
> >> +   regmap = syscon_get_regmap(syscon);
> >> +   if (!regmap) {
> >> +   error("unable to find regmap\n");
> >> +   return -ENODEV;
> >> +   }
> >> +
> >> +   offset = fdtdec_get_uint(gd->fdt_blob, dev_of_offset(dev), 
> >> "offset", 0);
> >> +   mask = fdtdec_get_uint(gd->fdt_blob, dev_of_offset(dev), "mask", 
> >> 0);
> >
> > You should do this in ofdata_to_platdata() or probe() and store it in
> > a local struct
> I tried doing it in probe:
> https://github.com/Noltari/u-boot/commit/37f45960f240c3e57fa70afe69d9b5782c9e6f9f
>
> However it looks like probe is never called with my current U_BOOT_DRIVER 
> settings...

That is bad - you should figure out why. The
uclass_get_device_by_phandle() should call probe().

> Then I tried doing it in bind instead of probe and it looks like the syscon 
> device isn't ready when syscon-reboot is binded...
> Any ideas? :$

Figure out why probe() doesn't happen.

>
> >
> >
> >> +
> >> +   return regmap_write(regmap, offset, mask);
> >
> > Check error here, and either return -EINPROGRESS or some other error
> I will, but regmap_write returns always 0, so there's no error at all to 
> check...

That's fine - you can return -EINPROGRESS if it returns 0, and the
error otherwise. Also please add function docs for regmap_read/write()
while you are there.
>
> >
> >> +}
> >> +
> >> +static struct sysreset_ops syscon_reboot_ops = {
> >> +   .request= syscon_reboot_request,
> >> +};
> >> +
> >> +static const struct udevice_id syscon_reboot_ids[] = {
> >> +   { .compatible = "syscon-reboot" },
> >> +   { /* sentinel */ }
> >> +};
> >> +
> >> +U_BOOT_DRIVER(syscon_reboot) = {
> >> +   .name   = "syscon_reboot",

Re: [U-Boot] [PATCH v2 02/14] sysreset: add syscon-reboot driver

2017-04-17 Thread Álvaro Fernández Rojas
Hi Simon,

El 16/04/2017 a las 21:34, Simon Glass escribió:
> Hi Alvaro,
> 
> On 15 April 2017 at 16:03, Álvaro Fernández Rojas  wrote:
>> 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 
>> ---
>>  v2: no changes
>>
>>  drivers/sysreset/Kconfig   |  8 +
>>  drivers/sysreset/Makefile  |  1 +
>>  drivers/sysreset/sysreset_syscon.c | 60 
>> ++
>>  3 files changed, 69 insertions(+)
>>  create mode 100644 drivers/sysreset/sysreset_syscon.c
>>
>> diff --git a/drivers/sysreset/Kconfig b/drivers/sysreset/Kconfig
>> index 05a37b9..0946c9d 100644
>> --- a/drivers/sysreset/Kconfig
>> +++ b/drivers/sysreset/Kconfig
>> @@ -13,4 +13,12 @@ config SYSRESET
>>   to effect a reset. The uclass will try all available drivers when
>>   reset_walk() is called.
>>
>> +config SYSRESET_SYSCON
>> +   bool "Enable support for mfd syscon reboot driver"
>> +   depends on SYSRESET
>> +   select REGMAP
>> +   select SYSCON
>> +   help
>> + Description here.
> 
> Yes please!
Sure, my fault :P

> 
>> +
>>  endmenu
>> diff --git a/drivers/sysreset/Makefile b/drivers/sysreset/Makefile
>> index 49b8bb6..1205f47 100644
>> --- a/drivers/sysreset/Makefile
>> +++ b/drivers/sysreset/Makefile
>> @@ -18,3 +18,4 @@ obj-$(CONFIG_ARCH_SNAPDRAGON) += sysreset_snapdragon.o
>>  obj-$(CONFIG_ARCH_STI) += sysreset_sti.o
>>  obj-$(CONFIG_TARGET_XTFPGA) += sysreset_xtfpga.o
>>  obj-$(CONFIG_ARCH_ASPEED) += sysreset_ast.o
>> +obj-$(CONFIG_SYSRESET_SYSCON) += sysreset_syscon.o
>> diff --git a/drivers/sysreset/sysreset_syscon.c 
>> b/drivers/sysreset/sysreset_syscon.c
>> new file mode 100644
>> index 000..61aeb1d
>> --- /dev/null
>> +++ b/drivers/sysreset/sysreset_syscon.c
>> @@ -0,0 +1,60 @@
>> +/*
>> + * Copyright (C) 2017 Álvaro Fernández Rojas 
>> + *
>> + * Derived from linux/drivers/power/reset/syscon-reboot.c:
>> + * Copyright (C) 2013, Applied Micro Circuits Corporation
>> + * Author: Feng Kan 
>> + *
>> + * SPDX-License-Identifier:GPL-2.0+
>> + */
>> +
>> +#include 
>> +#include 
>> +#include 
>> +#include 
> 
> this should go at the end
I will fix it.

> 
>> +#include 
>> +#include 
>> +
>> +DECLARE_GLOBAL_DATA_PTR;
>> +
>> +static int syscon_reboot_request(struct udevice *dev, enum sysreset_t type)
>> +{
>> +   struct udevice *syscon;
>> +   struct regmap *regmap;
>> +   unsigned int offset, mask;
>> +   int err;
>> +
>> +   err = uclass_get_device_by_phandle(UCLASS_SYSCON, dev,
>> +  "regmap", );
>> +   if (err) {
>> +   error("unable to find syscon device\n");
>> +   return err;
>> +   }
>> +
>> +   regmap = syscon_get_regmap(syscon);
>> +   if (!regmap) {
>> +   error("unable to find regmap\n");
>> +   return -ENODEV;
>> +   }
>> +
>> +   offset = fdtdec_get_uint(gd->fdt_blob, dev_of_offset(dev), "offset", 
>> 0);
>> +   mask = fdtdec_get_uint(gd->fdt_blob, dev_of_offset(dev), "mask", 0);
> 
> You should do this in ofdata_to_platdata() or probe() and store it in
> a local struct
I tried doing it in probe:
https://github.com/Noltari/u-boot/commit/37f45960f240c3e57fa70afe69d9b5782c9e6f9f

However it looks like probe is never called with my current U_BOOT_DRIVER 
settings...
Then I tried doing it in bind instead of probe and it looks like the syscon 
device isn't ready when syscon-reboot is binded...
Any ideas? :$

> 
> 
>> +
>> +   return regmap_write(regmap, offset, mask);
> 
> Check error here, and either return -EINPROGRESS or some other error
I will, but regmap_write returns always 0, so there's no error at all to 
check...

> 
>> +}
>> +
>> +static struct sysreset_ops syscon_reboot_ops = {
>> +   .request= syscon_reboot_request,
>> +};
>> +
>> +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,
>> +   .ops= _reboot_ops,
>> +};
>> --
>> 2.1.4
>>
> 
> Regards,
> Simon
> 
___
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot


Re: [U-Boot] [PATCH v2 02/14] sysreset: add syscon-reboot driver

2017-04-16 Thread Simon Glass
Hi Alvaro,

On 15 April 2017 at 16:03, Álvaro Fernández Rojas  wrote:
> 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 
> ---
>  v2: no changes
>
>  drivers/sysreset/Kconfig   |  8 +
>  drivers/sysreset/Makefile  |  1 +
>  drivers/sysreset/sysreset_syscon.c | 60 
> ++
>  3 files changed, 69 insertions(+)
>  create mode 100644 drivers/sysreset/sysreset_syscon.c
>
> diff --git a/drivers/sysreset/Kconfig b/drivers/sysreset/Kconfig
> index 05a37b9..0946c9d 100644
> --- a/drivers/sysreset/Kconfig
> +++ b/drivers/sysreset/Kconfig
> @@ -13,4 +13,12 @@ config SYSRESET
>   to effect a reset. The uclass will try all available drivers when
>   reset_walk() is called.
>
> +config SYSRESET_SYSCON
> +   bool "Enable support for mfd syscon reboot driver"
> +   depends on SYSRESET
> +   select REGMAP
> +   select SYSCON
> +   help
> + Description here.

Yes please!

> +
>  endmenu
> diff --git a/drivers/sysreset/Makefile b/drivers/sysreset/Makefile
> index 49b8bb6..1205f47 100644
> --- a/drivers/sysreset/Makefile
> +++ b/drivers/sysreset/Makefile
> @@ -18,3 +18,4 @@ obj-$(CONFIG_ARCH_SNAPDRAGON) += sysreset_snapdragon.o
>  obj-$(CONFIG_ARCH_STI) += sysreset_sti.o
>  obj-$(CONFIG_TARGET_XTFPGA) += sysreset_xtfpga.o
>  obj-$(CONFIG_ARCH_ASPEED) += sysreset_ast.o
> +obj-$(CONFIG_SYSRESET_SYSCON) += sysreset_syscon.o
> diff --git a/drivers/sysreset/sysreset_syscon.c 
> b/drivers/sysreset/sysreset_syscon.c
> new file mode 100644
> index 000..61aeb1d
> --- /dev/null
> +++ b/drivers/sysreset/sysreset_syscon.c
> @@ -0,0 +1,60 @@
> +/*
> + * Copyright (C) 2017 Álvaro Fernández Rojas 
> + *
> + * Derived from linux/drivers/power/reset/syscon-reboot.c:
> + * Copyright (C) 2013, Applied Micro Circuits Corporation
> + * Author: Feng Kan 
> + *
> + * SPDX-License-Identifier:GPL-2.0+
> + */
> +
> +#include 
> +#include 
> +#include 
> +#include 

this should go at the end

> +#include 
> +#include 
> +
> +DECLARE_GLOBAL_DATA_PTR;
> +
> +static int syscon_reboot_request(struct udevice *dev, enum sysreset_t type)
> +{
> +   struct udevice *syscon;
> +   struct regmap *regmap;
> +   unsigned int offset, mask;
> +   int err;
> +
> +   err = uclass_get_device_by_phandle(UCLASS_SYSCON, dev,
> +  "regmap", );
> +   if (err) {
> +   error("unable to find syscon device\n");
> +   return err;
> +   }
> +
> +   regmap = syscon_get_regmap(syscon);
> +   if (!regmap) {
> +   error("unable to find regmap\n");
> +   return -ENODEV;
> +   }
> +
> +   offset = fdtdec_get_uint(gd->fdt_blob, dev_of_offset(dev), "offset", 
> 0);
> +   mask = fdtdec_get_uint(gd->fdt_blob, dev_of_offset(dev), "mask", 0);

You should do this in ofdata_to_platdata() or probe() and store it in
a local struct


> +
> +   return regmap_write(regmap, offset, mask);

Check error here, and either return -EINPROGRESS or some other error

> +}
> +
> +static struct sysreset_ops syscon_reboot_ops = {
> +   .request= syscon_reboot_request,
> +};
> +
> +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,
> +   .ops= _reboot_ops,
> +};
> --
> 2.1.4
>

Regards,
Simon
___
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot


[U-Boot] [PATCH v2 02/14] sysreset: add syscon-reboot driver

2017-04-15 Thread Á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 
---
 v2: no changes

 drivers/sysreset/Kconfig   |  8 +
 drivers/sysreset/Makefile  |  1 +
 drivers/sysreset/sysreset_syscon.c | 60 ++
 3 files changed, 69 insertions(+)
 create mode 100644 drivers/sysreset/sysreset_syscon.c

diff --git a/drivers/sysreset/Kconfig b/drivers/sysreset/Kconfig
index 05a37b9..0946c9d 100644
--- a/drivers/sysreset/Kconfig
+++ b/drivers/sysreset/Kconfig
@@ -13,4 +13,12 @@ config SYSRESET
  to effect a reset. The uclass will try all available drivers when
  reset_walk() is called.
 
+config SYSRESET_SYSCON
+   bool "Enable support for mfd syscon reboot driver"
+   depends on SYSRESET
+   select REGMAP
+   select SYSCON
+   help
+ Description here.
+
 endmenu
diff --git a/drivers/sysreset/Makefile b/drivers/sysreset/Makefile
index 49b8bb6..1205f47 100644
--- a/drivers/sysreset/Makefile
+++ b/drivers/sysreset/Makefile
@@ -18,3 +18,4 @@ obj-$(CONFIG_ARCH_SNAPDRAGON) += sysreset_snapdragon.o
 obj-$(CONFIG_ARCH_STI) += sysreset_sti.o
 obj-$(CONFIG_TARGET_XTFPGA) += sysreset_xtfpga.o
 obj-$(CONFIG_ARCH_ASPEED) += sysreset_ast.o
+obj-$(CONFIG_SYSRESET_SYSCON) += sysreset_syscon.o
diff --git a/drivers/sysreset/sysreset_syscon.c 
b/drivers/sysreset/sysreset_syscon.c
new file mode 100644
index 000..61aeb1d
--- /dev/null
+++ b/drivers/sysreset/sysreset_syscon.c
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2017 Álvaro Fernández Rojas 
+ *
+ * Derived from linux/drivers/power/reset/syscon-reboot.c:
+ * Copyright (C) 2013, Applied Micro Circuits Corporation
+ * Author: Feng Kan 
+ *
+ * SPDX-License-Identifier:GPL-2.0+
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+DECLARE_GLOBAL_DATA_PTR;
+
+static int syscon_reboot_request(struct udevice *dev, enum sysreset_t type)
+{
+   struct udevice *syscon;
+   struct regmap *regmap;
+   unsigned int offset, mask;
+   int err;
+
+   err = uclass_get_device_by_phandle(UCLASS_SYSCON, dev,
+  "regmap", );
+   if (err) {
+   error("unable to find syscon device\n");
+   return err;
+   }
+
+   regmap = syscon_get_regmap(syscon);
+   if (!regmap) {
+   error("unable to find regmap\n");
+   return -ENODEV;
+   }
+
+   offset = fdtdec_get_uint(gd->fdt_blob, dev_of_offset(dev), "offset", 0);
+   mask = fdtdec_get_uint(gd->fdt_blob, dev_of_offset(dev), "mask", 0);
+
+   return regmap_write(regmap, offset, mask);
+}
+
+static struct sysreset_ops syscon_reboot_ops = {
+   .request= syscon_reboot_request,
+};
+
+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,
+   .ops= _reboot_ops,
+};
-- 
2.1.4

___
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot