HI Alex, On 16 August 2016 at 02:55, Alexander Graf <ag...@suse.de> wrote: > The type 4 table generation code is very x86 centric today. Refactor things > out a bit to allow the tables to get generated for other architectures as > well. > > Signed-off-by: Alexander Graf <ag...@suse.de> > --- > include/smbios.h | 3 +++ > lib/smbios.c | 37 +++++++++++++++++++++++++++---------- > 2 files changed, 30 insertions(+), 10 deletions(-) > > diff --git a/include/smbios.h b/include/smbios.h > index 5962d4c..3cbc687 100644 > --- a/include/smbios.h > +++ b/include/smbios.h > @@ -139,6 +139,9 @@ struct __packed smbios_type3 { > #define SMBIOS_PROCESSOR_STATUS_ENABLED 1 > #define SMBIOS_PROCESSOR_UPGRADE_NONE 6 > > +#define SMBIOS_PROCESSOR_FAMILY_OTHER 1 > +#define SMBIOS_PROCESSOR_FAMILY_UNKNOWN 2 > + > struct __packed smbios_type4 { > u8 type; > u8 length; > diff --git a/lib/smbios.c b/lib/smbios.c > index 8dfd486..11cacec 100644 > --- a/lib/smbios.c > +++ b/lib/smbios.c > @@ -10,7 +10,9 @@ > #include <smbios.h> > #include <tables_csum.h> > #include <version.h> > +#ifdef CONFIG_X86 > #include <asm/cpu.h> > +#endif > > DECLARE_GLOBAL_DATA_PTR; > > @@ -152,26 +154,41 @@ static int smbios_write_type3(uintptr_t *current, int > handle) > return len; > } > > -static int smbios_write_type4(uintptr_t *current, int handle) > +static void smbios_write_type4_arch(struct smbios_type4 *t) > { > - struct smbios_type4 *t = (struct smbios_type4 *)*current; > - int len = sizeof(struct smbios_type4); > - const char *vendor; > - char *name; > + u16 processor_family = SMBIOS_PROCESSOR_FAMILY_UNKNOWN; > + const char *vendor = "Unknown"; > + char *name = "Unknown"; > + > +#ifdef CONFIG_X86
This should use the cpu uclass. As mentioned you may need to add a new method, but it should be easy enough. > char processor_name[CPU_MAX_NAME_LEN]; > struct cpuid_result res; > > - memset(t, 0, sizeof(struct smbios_type4)); > - fill_smbios_header(t, SMBIOS_PROCESSOR_INFORMATION, len, handle); > - t->processor_type = SMBIOS_PROCESSOR_TYPE_CENTRAL; > - t->processor_family = gd->arch.x86; > + processor_family = gd->arch.x86; > vendor = cpu_vendor_name(gd->arch.x86_vendor); > - t->processor_manufacturer = smbios_add_string(t->eos, vendor); > res = cpuid(1); > t->processor_id[0] = res.eax; > t->processor_id[1] = res.edx; > name = cpu_get_name(processor_name); > +#elif defined(CONFIG_ARM) > + processor_family = SMBIOS_PROCESSOR_FAMILY_OTHER; > + vendor = "ARM"; > +#endif > + > + t->processor_family = processor_family; > + t->processor_manufacturer = smbios_add_string(t->eos, vendor); > t->processor_version = smbios_add_string(t->eos, name); > +} > + > +static int smbios_write_type4(uintptr_t *current, int handle) > +{ > + struct smbios_type4 *t = (struct smbios_type4 *)*current; > + int len = sizeof(struct smbios_type4); > + > + memset(t, 0, sizeof(struct smbios_type4)); > + fill_smbios_header(t, SMBIOS_PROCESSOR_INFORMATION, len, handle); > + t->processor_type = SMBIOS_PROCESSOR_TYPE_CENTRAL; > + smbios_write_type4_arch(t); > t->status = SMBIOS_PROCESSOR_STATUS_ENABLED; > t->processor_upgrade = SMBIOS_PROCESSOR_UPGRADE_NONE; > t->l1_cache_handle = 0xffff; > -- > 1.8.5.6 > Regards, Simon _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot