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

Reply via email to