diff mbox

[U-Boot] fdt: Pass the board serial number through devicetree

Message ID 1427564083-25805-1-git-send-email-contact@paulk.fr
State Changes Requested
Delegated to: Simon Glass
Headers show

Commit Message

Paul Kocialkowski March 28, 2015, 5:34 p.m. UTC
Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
---
 common/fdt_support.c  | 25 +++++++++++++++++++++++++
 common/image-fdt.c    |  4 ++++
 include/fdt_support.h |  1 +
 3 files changed, 30 insertions(+)

Comments

Simon Glass April 5, 2015, 6:31 p.m. UTC | #1
Hi Paul,

On 28 March 2015 at 11:34, Paul Kocialkowski <contact@paulk.fr> wrote:
> Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
> ---
>  common/fdt_support.c  | 25 +++++++++++++++++++++++++
>  common/image-fdt.c    |  4 ++++
>  include/fdt_support.h |  1 +
>  3 files changed, 30 insertions(+)
>

This needs a commit message and something in
doc/device-tree-binding/root.txt (or similar) about it.

Is there binding documentation for Linux on this?

> diff --git a/common/fdt_support.c b/common/fdt_support.c
> index 8266bca..a97b4f0 100644
> --- a/common/fdt_support.c
> +++ b/common/fdt_support.c
> @@ -194,6 +194,31 @@ static inline int fdt_setprop_uxx(void *fdt, int nodeoffset, const char *name,
>                 return fdt_setprop_u32(fdt, nodeoffset, name, (uint32_t)val);
>  }
>
> +int fdt_root(void *fdt)
> +{
> +       char *serial;
> +       int err;
> +
> +       err = fdt_check_header(fdt);
> +       if (err < 0) {
> +               printf("fdt_root: %s\n", fdt_strerror(err));
> +               return err;
> +       }
> +
> +       serial = getenv("serial#");
> +       if (serial) {
> +               err = fdt_setprop(fdt, 0, "serial-number", serial,
> +                                 strlen(serial) + 1);
> +
> +               if (err < 0) {
> +                       printf("WARNING: could not set serial-number %s.\n",
> +                              fdt_strerror(err));
> +                       return err;
> +               }
> +       }
> +
> +       return 0;
> +}
>
>  int fdt_initrd(void *fdt, ulong initrd_start, ulong initrd_end)
>  {
> diff --git a/common/image-fdt.c b/common/image-fdt.c
> index d9e4728..1600561 100644
> --- a/common/image-fdt.c
> +++ b/common/image-fdt.c
> @@ -470,6 +470,10 @@ int image_setup_libfdt(bootm_headers_t *images, void *blob,
>         int ret = -EPERM;
>         int fdt_ret;
>
> +       if (fdt_root(blob) < 0) {
> +               printf("ERROR: root node setup failed\n");
> +               goto err;
> +       }
>         if (fdt_chosen(blob) < 0) {
>                 printf("ERROR: /chosen node create failed\n");
>                 goto err;
> diff --git a/include/fdt_support.h b/include/fdt_support.h
> index ae5e8a3..8eb5968 100644
> --- a/include/fdt_support.h
> +++ b/include/fdt_support.h
> @@ -16,6 +16,7 @@ u32 fdt_getprop_u32_default_node(const void *fdt, int off, int cell,
>                                 const char *prop, const u32 dflt);
>  u32 fdt_getprop_u32_default(const void *fdt, const char *path,
>                                 const char *prop, const u32 dflt);
> +int fdt_root(void *fdt);
>  int fdt_chosen(void *fdt);
>  int fdt_initrd(void *fdt, ulong initrd_start, ulong initrd_end);
>  void do_fixup_by_path(void *fdt, const char *path, const char *prop,
> --
> 1.9.1
>

Regards,
Simon
Paul Kocialkowski April 5, 2015, 8:49 p.m. UTC | #2
Hi Simon, thanks for the review,

Le dimanche 05 avril 2015 à 12:31 -0600, Simon Glass a écrit :
> Hi Paul,
> 
> On 28 March 2015 at 11:34, Paul Kocialkowski <contact@paulk.fr> wrote:
> > Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
> > ---
> >  common/fdt_support.c  | 25 +++++++++++++++++++++++++
> >  common/image-fdt.c    |  4 ++++
> >  include/fdt_support.h |  1 +
> >  3 files changed, 30 insertions(+)
> >
> 
> This needs a commit message and something in
> doc/device-tree-binding/root.txt (or similar) about it.

Ack

> Is there binding documentation for Linux on this?

I have submitted a patch for documenting this in Linux:
Documentation: devicetree: root node serial-number property
documentation

As well as a patch to show that serial number in /proc/cpuinfo:
arch: arm: Show the serial number from devicetree in cpuinfo

Those were not reviewed yet but I'm hoping to get the discussion started
once the kernel merge window opens.

I'm fine with waiting for the kernel part to be accepted before getting
this into U-Boot.

> > diff --git a/common/fdt_support.c b/common/fdt_support.c
> > index 8266bca..a97b4f0 100644
> > --- a/common/fdt_support.c
> > +++ b/common/fdt_support.c
> > @@ -194,6 +194,31 @@ static inline int fdt_setprop_uxx(void *fdt, int nodeoffset, const char *name,
> >                 return fdt_setprop_u32(fdt, nodeoffset, name, (uint32_t)val);
> >  }
> >
> > +int fdt_root(void *fdt)
> > +{
> > +       char *serial;
> > +       int err;
> > +
> > +       err = fdt_check_header(fdt);
> > +       if (err < 0) {
> > +               printf("fdt_root: %s\n", fdt_strerror(err));
> > +               return err;
> > +       }
> > +
> > +       serial = getenv("serial#");
> > +       if (serial) {
> > +               err = fdt_setprop(fdt, 0, "serial-number", serial,
> > +                                 strlen(serial) + 1);
> > +
> > +               if (err < 0) {
> > +                       printf("WARNING: could not set serial-number %s.\n",
> > +                              fdt_strerror(err));
> > +                       return err;
> > +               }
> > +       }
> > +
> > +       return 0;
> > +}
> >
> >  int fdt_initrd(void *fdt, ulong initrd_start, ulong initrd_end)
> >  {
> > diff --git a/common/image-fdt.c b/common/image-fdt.c
> > index d9e4728..1600561 100644
> > --- a/common/image-fdt.c
> > +++ b/common/image-fdt.c
> > @@ -470,6 +470,10 @@ int image_setup_libfdt(bootm_headers_t *images, void *blob,
> >         int ret = -EPERM;
> >         int fdt_ret;
> >
> > +       if (fdt_root(blob) < 0) {
> > +               printf("ERROR: root node setup failed\n");
> > +               goto err;
> > +       }
> >         if (fdt_chosen(blob) < 0) {
> >                 printf("ERROR: /chosen node create failed\n");
> >                 goto err;
> > diff --git a/include/fdt_support.h b/include/fdt_support.h
> > index ae5e8a3..8eb5968 100644
> > --- a/include/fdt_support.h
> > +++ b/include/fdt_support.h
> > @@ -16,6 +16,7 @@ u32 fdt_getprop_u32_default_node(const void *fdt, int off, int cell,
> >                                 const char *prop, const u32 dflt);
> >  u32 fdt_getprop_u32_default(const void *fdt, const char *path,
> >                                 const char *prop, const u32 dflt);
> > +int fdt_root(void *fdt);
> >  int fdt_chosen(void *fdt);
> >  int fdt_initrd(void *fdt, ulong initrd_start, ulong initrd_end);
> >  void do_fixup_by_path(void *fdt, const char *path, const char *prop,
> > --
> > 1.9.1
> >
> 
> Regards,
> Simon
Simon Glass April 5, 2015, 9:47 p.m. UTC | #3
Hi Paul,

On 5 April 2015 at 14:49, Paul Kocialkowski <contact@paulk.fr> wrote:
> Hi Simon, thanks for the review,
>
> Le dimanche 05 avril 2015 à 12:31 -0600, Simon Glass a écrit :
>> Hi Paul,
>>
>> On 28 March 2015 at 11:34, Paul Kocialkowski <contact@paulk.fr> wrote:
>> > Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
>> > ---
>> >  common/fdt_support.c  | 25 +++++++++++++++++++++++++
>> >  common/image-fdt.c    |  4 ++++
>> >  include/fdt_support.h |  1 +
>> >  3 files changed, 30 insertions(+)
>> >
>>
>> This needs a commit message and something in
>> doc/device-tree-binding/root.txt (or similar) about it.
>
> Ack
>
>> Is there binding documentation for Linux on this?
>
> I have submitted a patch for documenting this in Linux:
> Documentation: devicetree: root node serial-number property
> documentation
>
> As well as a patch to show that serial number in /proc/cpuinfo:
> arch: arm: Show the serial number from devicetree in cpuinfo
>
> Those were not reviewed yet but I'm hoping to get the discussion started
> once the kernel merge window opens.
>
> I'm fine with waiting for the kernel part to be accepted before getting
> this into U-Boot.

OK.

[snip]

Regards,
Simon
diff mbox

Patch

diff --git a/common/fdt_support.c b/common/fdt_support.c
index 8266bca..a97b4f0 100644
--- a/common/fdt_support.c
+++ b/common/fdt_support.c
@@ -194,6 +194,31 @@  static inline int fdt_setprop_uxx(void *fdt, int nodeoffset, const char *name,
 		return fdt_setprop_u32(fdt, nodeoffset, name, (uint32_t)val);
 }
 
+int fdt_root(void *fdt)
+{
+	char *serial;
+	int err;
+
+	err = fdt_check_header(fdt);
+	if (err < 0) {
+		printf("fdt_root: %s\n", fdt_strerror(err));
+		return err;
+	}
+
+	serial = getenv("serial#");
+	if (serial) {
+		err = fdt_setprop(fdt, 0, "serial-number", serial,
+				  strlen(serial) + 1);
+
+		if (err < 0) {
+			printf("WARNING: could not set serial-number %s.\n",
+			       fdt_strerror(err));
+			return err;
+		}
+	}
+
+	return 0;
+}
 
 int fdt_initrd(void *fdt, ulong initrd_start, ulong initrd_end)
 {
diff --git a/common/image-fdt.c b/common/image-fdt.c
index d9e4728..1600561 100644
--- a/common/image-fdt.c
+++ b/common/image-fdt.c
@@ -470,6 +470,10 @@  int image_setup_libfdt(bootm_headers_t *images, void *blob,
 	int ret = -EPERM;
 	int fdt_ret;
 
+	if (fdt_root(blob) < 0) {
+		printf("ERROR: root node setup failed\n");
+		goto err;
+	}
 	if (fdt_chosen(blob) < 0) {
 		printf("ERROR: /chosen node create failed\n");
 		goto err;
diff --git a/include/fdt_support.h b/include/fdt_support.h
index ae5e8a3..8eb5968 100644
--- a/include/fdt_support.h
+++ b/include/fdt_support.h
@@ -16,6 +16,7 @@  u32 fdt_getprop_u32_default_node(const void *fdt, int off, int cell,
 				const char *prop, const u32 dflt);
 u32 fdt_getprop_u32_default(const void *fdt, const char *path,
 				const char *prop, const u32 dflt);
+int fdt_root(void *fdt);
 int fdt_chosen(void *fdt);
 int fdt_initrd(void *fdt, ulong initrd_start, ulong initrd_end);
 void do_fixup_by_path(void *fdt, const char *path, const char *prop,