On Fri, 2018-03-16 at 10:38 -0700, Ivan Gorinov wrote: > On x86 platforms, U-Boot does not provide Device Tree data to the > kernel. > This prevents the kernel from using the same hardware description. > > Make a copy of DTB data with setup_data header and insert new item > into the the setup data linked list.
So, now is the question, what to do with x86 hardware that has DTS in U- Boot, but uses ACPI tables, generated by U-Boot. Would it work properly? I would try to test it on Intel Edison (I hope you may do this yourself as well), though I don't know when, have not much time to work with Edison right now. > Signed-off-by: Ivan Gorinov <ivan.gori...@intel.com> > --- > arch/x86/include/asm/bootparam.h | 1 + > arch/x86/lib/zimage.c | 32 > ++++++++++++++++++++++++++++++++ > 2 files changed, 33 insertions(+) > > diff --git a/arch/x86/include/asm/bootparam.h > b/arch/x86/include/asm/bootparam.h > index 90768a9..ea25cf7 100644 > --- a/arch/x86/include/asm/bootparam.h > +++ b/arch/x86/include/asm/bootparam.h > @@ -12,6 +12,7 @@ > /* setup data types */ > #define SETUP_NONE 0 > #define SETUP_E820_EXT 1 > +#define SETUP_DTB 2 > > /* extensible setup data list node */ > struct setup_data { > diff --git a/arch/x86/lib/zimage.c b/arch/x86/lib/zimage.c > index 2a82bc8..41ad4c7 100644 > --- a/arch/x86/lib/zimage.c > +++ b/arch/x86/lib/zimage.c > @@ -14,6 +14,8 @@ > */ > > #include <common.h> > +#include <malloc.h> > +#include <asm/global_data.h> > #include <asm/acpi_table.h> > #include <asm/io.h> > #include <asm/ptrace.h> > @@ -95,6 +97,35 @@ static int get_boot_protocol(struct setup_header > *hdr) > } > } > > +static int setup_device_tree(struct setup_header *hdr) > +{ > + const void *fdt_blob = gd->fdt_blob; > + struct setup_data *sd; > + int size; > + > + if (!fdt_blob) > + return 0; > + > + size = fdt_totalsize(fdt_blob); > + if (size < 0) > + return -EINVAL; > + > + size += sizeof(struct setup_data); > + sd = (struct setup_data *)malloc(size); > + if (!sd) { > + printf("Not enough memory for DTB setup data\n"); > + return -ENOMEM; > + } > + > + sd->next = hdr->setup_data; > + sd->type = SETUP_DTB; > + sd->len = fdt_totalsize(fdt_blob); > + memcpy(sd->data, fdt_blob, sd->len); > + hdr->setup_data = (unsigned long)sd; > + > + return 0; > +} > + > struct boot_params *load_zimage(char *image, unsigned long > kernel_size, > ulong *load_addressp) > { > @@ -262,6 +293,7 @@ int setup_zimage(struct boot_params *setup_base, > char *cmd_line, int auto_boot, > #endif > > setup_video(&setup_base->screen_info); > + setup_device_tree(hdr); > > return 0; > } -- Andy Shevchenko <andriy.shevche...@linux.intel.com> Intel Finland Oy _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot