On 12.06.18 07:26, Simon Glass wrote: > At present this code casts addresses to pointers so cannot be used with > sandbox. Update it to use mapmem instead. > > Signed-off-by: Simon Glass <s...@chromium.org> > --- > > Changes in v5: None > Changes in v4: None > Changes in v3: > - Drop incorrect map_sysmem() in write_smbios_table() > > Changes in v2: None > > lib/smbios.c | 32 ++++++++++++++++++++++++-------- > 1 file changed, 24 insertions(+), 8 deletions(-) > > diff --git a/lib/smbios.c b/lib/smbios.c > index df3d26b071..fc3dabcbc1 100644 > --- a/lib/smbios.c > +++ b/lib/smbios.c > @@ -6,6 +6,7 @@ > */ > > #include <common.h> > +#include <mapmem.h> > #include <smbios.h> > #include <tables_csum.h> > #include <version.h> > @@ -72,9 +73,10 @@ static int smbios_string_table_len(char *start) > > static int smbios_write_type0(ulong *current, int handle)
Please change the function argument to indicate that we're no longer dealing with pointers, but instead with "u-boot physical addresses". Same for the other functions obviously :). Alex > { > - struct smbios_type0 *t = (struct smbios_type0 *)*current; > + struct smbios_type0 *t; > int len = sizeof(struct smbios_type0); > > + t = map_sysmem(*current, len); > memset(t, 0, sizeof(struct smbios_type0)); > fill_smbios_header(t, SMBIOS_BIOS_INFORMATION, len, handle); > t->vendor = smbios_add_string(t->eos, "U-Boot"); > @@ -101,16 +103,18 @@ static int smbios_write_type0(ulong *current, int > handle) > > len = t->length + smbios_string_table_len(t->eos); > *current += len; > + unmap_sysmem(t); > > return len; > } > > static int smbios_write_type1(ulong *current, int handle) > { > - struct smbios_type1 *t = (struct smbios_type1 *)*current; > + struct smbios_type1 *t; > int len = sizeof(struct smbios_type1); > char *serial_str = env_get("serial#"); > > + t = map_sysmem(*current, len); > memset(t, 0, sizeof(struct smbios_type1)); > fill_smbios_header(t, SMBIOS_SYSTEM_INFORMATION, len, handle); > t->manufacturer = smbios_add_string(t->eos, CONFIG_SMBIOS_MANUFACTURER); > @@ -122,15 +126,17 @@ static int smbios_write_type1(ulong *current, int > handle) > > len = t->length + smbios_string_table_len(t->eos); > *current += len; > + unmap_sysmem(t); > > return len; > } > > static int smbios_write_type2(ulong *current, int handle) > { > - struct smbios_type2 *t = (struct smbios_type2 *)*current; > + struct smbios_type2 *t; > int len = sizeof(struct smbios_type2); > > + t = map_sysmem(*current, len); > memset(t, 0, sizeof(struct smbios_type2)); > fill_smbios_header(t, SMBIOS_BOARD_INFORMATION, len, handle); > t->manufacturer = smbios_add_string(t->eos, CONFIG_SMBIOS_MANUFACTURER); > @@ -140,15 +146,17 @@ static int smbios_write_type2(ulong *current, int > handle) > > len = t->length + smbios_string_table_len(t->eos); > *current += len; > + unmap_sysmem(t); > > return len; > } > > static int smbios_write_type3(ulong *current, int handle) > { > - struct smbios_type3 *t = (struct smbios_type3 *)*current; > + struct smbios_type3 *t; > int len = sizeof(struct smbios_type3); > > + t = map_sysmem(*current, len); > memset(t, 0, sizeof(struct smbios_type3)); > fill_smbios_header(t, SMBIOS_SYSTEM_ENCLOSURE, len, handle); > t->manufacturer = smbios_add_string(t->eos, CONFIG_SMBIOS_MANUFACTURER); > @@ -160,6 +168,7 @@ static int smbios_write_type3(ulong *current, int handle) > > len = t->length + smbios_string_table_len(t->eos); > *current += len; > + unmap_sysmem(t); > > return len; > } > @@ -198,9 +207,10 @@ static void smbios_write_type4_dm(struct smbios_type4 *t) > > static int smbios_write_type4(ulong *current, int handle) > { > - struct smbios_type4 *t = (struct smbios_type4 *)*current; > + struct smbios_type4 *t; > int len = sizeof(struct smbios_type4); > > + t = map_sysmem(*current, len); > memset(t, 0, sizeof(struct smbios_type4)); > fill_smbios_header(t, SMBIOS_PROCESSOR_INFORMATION, len, handle); > t->processor_type = SMBIOS_PROCESSOR_TYPE_CENTRAL; > @@ -214,32 +224,37 @@ static int smbios_write_type4(ulong *current, int > handle) > > len = t->length + smbios_string_table_len(t->eos); > *current += len; > + unmap_sysmem(t); > > return len; > } > > static int smbios_write_type32(ulong *current, int handle) > { > - struct smbios_type32 *t = (struct smbios_type32 *)*current; > + struct smbios_type32 *t; > int len = sizeof(struct smbios_type32); > > + t = map_sysmem(*current, len); > memset(t, 0, sizeof(struct smbios_type32)); > fill_smbios_header(t, SMBIOS_SYSTEM_BOOT_INFORMATION, len, handle); > > *current += len; > + unmap_sysmem(t); > > return len; > } > > static int smbios_write_type127(ulong *current, int handle) > { > - struct smbios_type127 *t = (struct smbios_type127 *)*current; > + struct smbios_type127 *t; > int len = sizeof(struct smbios_type127); > > + t = map_sysmem(*current, len); > memset(t, 0, sizeof(struct smbios_type127)); > fill_smbios_header(t, SMBIOS_END_OF_TABLE, len, handle); > > *current += len; > + unmap_sysmem(t); > > return len; > } > @@ -268,7 +283,7 @@ ulong write_smbios_table(ulong addr) > /* 16 byte align the table address */ > addr = ALIGN(addr, 16); > > - se = (struct smbios_entry *)(uintptr_t)addr; > + se = map_sysmem(addr, sizeof(struct smbios_entry)); > memset(se, 0, sizeof(struct smbios_entry)); > > addr += sizeof(struct smbios_entry); > @@ -297,6 +312,7 @@ ulong write_smbios_table(ulong addr) > isize = sizeof(struct smbios_entry) - SMBIOS_INTERMEDIATE_OFFSET; > se->intermediate_checksum = table_compute_checksum(istart, isize); > se->checksum = table_compute_checksum(se, sizeof(struct smbios_entry)); > + unmap_sysmem(se); > > return addr; > } > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot