From mboxrd@z Thu Jan 1 00:00:00 1970 From: York Sun Date: Fri, 6 Nov 2015 09:14:46 -0800 Subject: [U-Boot] [PATCH v3] common: Fix load and entry addresses in FIT image In-Reply-To: References: <1441377819-24058-1-git-send-email-yorksun@freescale.com> <562528B0.9050208@freescale.com> <563255A8.3030201@freescale.com> Message-ID: <563CE006.8010705@freescale.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On 11/06/2015 04:06 AM, Simon Glass wrote: > Hi York, > > On 29 October 2015 at 11:21, York Sun wrote: >> >> >> On 10/29/2015 10:16 AM, Simon Glass wrote: >>> Hi York, >>> >>> On 19 October 2015 at 11:30, York Sun wrote: >>>> >>>> >>>> On 10/18/2015 04:15 PM, Simon Glass wrote: >>>>> Hi, >>>>> >>>>> On 18 October 2015 at 06:18, Simon Glass wrote: >>>>>> On 9 September 2015 at 12:07, Simon Glass wrote: >>>>>>> >>>>>>> On Friday, 4 September 2015, York Sun wrote: >>>>>>>> >>>>>>>> FIT image supports more than 32 bits in addresses by using #address-cell >>>>>>>> field. However the address length is not handled when parsing FIT images. >>>>>>>> Beside, the variable used to host address has "ulong" type. It is OK for >>>>>>>> the target, but not always enough for host tools such as mkimage. This >>>>>>>> patch replaces "ulong" with "phys_addr_t" to make sure the address is >>>>>>>> correct for both the target and the host. >>>>>>>> >>>>>>>> Signed-off-by: York Sun >>>>>>>> >>>>>>>> --- >>>>>>>> >>>>>>>> Changes in v3: >>>>>>>> Define PRIpa for host and target in common/image-fit.c so printf works >>>>>>>> properly for 32-, 64-bit targets and host tools. >>>>>>>> >>>>>>>> Changes in v2: >>>>>>>> Make a common function for both load and entry addresses. >>>>>>>> Simplify calculation of addresses in a similar way as fdtdec_get_number() >>>>>>>> fdtdec_get_number() is not used, or too many files need to be included >>>>>>>> and/or twisted for host tool >>>>>>>> Continue to use %08llx for print format for load and entry addresses >>>>>>>> because %pa does not always work for host tool (mkimage) >>>>>>>> >>>>>>>> common/bootm.c | 13 +++++---- >>>>>>>> common/image-fit.c | 81 +++++++++++++++++++++++++++++----------------------- >>>>>>>> include/bootm.h | 6 ++-- >>>>>>>> include/image.h | 12 +++++--- >>>>>>>> 4 files changed, 63 insertions(+), 49 deletions(-) >>>>>>> >>>>>> >>>>>> Acked-by: Simon Glass >>>>> >>>>> Unfortunately this produces lots of warnings on sandbox. Can you >>>>> please take a look? >>>>> >>>>> /usr/local/google/c/cosarm/src/third_party/u-boot/files/common/bootm.c: >>>>> In function ?bootm_find_os?: >>>>> /usr/local/google/c/cosarm/src/third_party/u-boot/files/common/bootm.c:146:12: >>>>> warning: passing argument 3 of ?fit_image_get_load? from incompatible >>>>> pointer type [enabled by default] >>>>> &images.os.load)) { >>>>> ^ >>>>> In file included from >>>>> /usr/local/google/c/cosarm/src/third_party/u-boot/files/include/common.h:82:0, >>>>> from >>>>> /usr/local/google/c/cosarm/src/third_party/u-boot/files/common/bootm.c:9: >>>>> /usr/local/google/c/cosarm/src/third_party/u-boot/files/include/image.h:851:5: >>>>> note: expected ?phys_addr_t *? but argument is of type ?ulong *? >>>>> int fit_image_get_load(const void *fit, int noffset, phys_addr_t *load); >>>>> ^ >>>> >>>> Simon, >>>> >>>> This warning is buried by tons of other warnings when compiling sandbox. I >>>> believe it is caused by the typedef of phys_addr_t for sandbox. How about a fix >>>> like this? >>>> >>>> diff --git a/arch/sandbox/include/asm/types.h b/arch/sandbox/include/asm/types.h >>>> index 42c09e2..c3bb76e 100644 >>>> --- a/arch/sandbox/include/asm/types.h >>>> +++ b/arch/sandbox/include/asm/types.h >>>> @@ -53,8 +53,8 @@ typedef __UINT64_TYPE__ u64; >>>> #define BITS_PER_LONG CONFIG_SANDBOX_BITS_PER_LONG >>>> >>>> typedef unsigned long dma_addr_t; >>>> -typedef u32 phys_addr_t; >>>> -typedef u32 phys_size_t; >>>> +typedef unsigned long phys_addr_t; >>>> +typedef unsigned long phys_size_t; >>> >>> Sandbox is supposed to use a 32-bit memory model regardless of the >>> host. What other warnings do you see? I don't see any when I build it. >>> >> >> Maybe I did something wrong. Here is my log >> >> $ make sandbox_defconfig >> HOSTCC scripts/basic/fixdep >> HOSTCC scripts/kconfig/conf.o >> SHIPPED scripts/kconfig/zconf.tab.c >> SHIPPED scripts/kconfig/zconf.lex.c >> SHIPPED scripts/kconfig/zconf.hash.c >> HOSTCC scripts/kconfig/zconf.tab.o >> HOSTLD scripts/kconfig/conf >> # >> # configuration written to .config >> # >> $ make -s -j8 >> disk/part_efi.c: In function ?alloc_read_gpt_entries?: >> disk/part_efi.c:752:2: warning: format ?%zu? expects argument of type ?size_t?, >> but argument 5 has type ?long unsigned int? [-Wformat] >> disk/part_efi.c:765:4: warning: format ?%zX? expects argument of type ?size_t?, >> but argument 3 has type ?long unsigned int? [-Wformat] >> drivers/mtd/spi/sf.c: In function ?spi_flash_read_write?: >> drivers/mtd/spi/sf.c:30:3: warning: format ?%zu? expects argument of type >> ?size_t?, but argument 2 has type ?long unsigned int? [-Wformat] >> drivers/mtd/spi/sf.c:36:4: warning: format ?%zu? expects argument of type >> ?size_t?, but argument 2 has type ?long unsigned int? [-Wformat] >> drivers/mtd/spi/sf_ops.c: In function ?spi_flash_cmd_write_ops?: >> drivers/mtd/spi/sf_ops.c:343:3: warning: format ?%zu? expects argument of type >> ?size_t?, but argument 7 has type ?long unsigned int? [-Wformat] >> drivers/mtd/spi/sf_ops.c: In function ?sst_write_wp?: >> drivers/mtd/spi/sf_ops.c:538:2: warning: format ?%zu? expects argument of type >> ?size_t?, but argument 3 has type ?long unsigned int? [-Wformat] >> drivers/mtd/spi/sf_ops.c:538:2: warning: format ?%zx? expects argument of type >> ?size_t?, but argument 4 has type ?long unsigned int? [-Wformat] >> drivers/mtd/spi/sf_ops.c: In function ?sst_write_bp?: >> drivers/mtd/spi/sf_ops.c:569:2: warning: format ?%zu? expects argument of type >> ?size_t?, but argument 3 has type ?long unsigned int? [-Wformat] >> drivers/mtd/spi/sf_ops.c:569:2: warning: format ?%zx? expects argument of type >> ?size_t?, but argument 4 has type ?long unsigned int? [-Wformat] >> drivers/tpm/tpm-uclass.c: In function ?tpm_xfer?: >> drivers/tpm/tpm-uclass.c:92:3: warning: format ?%zx? expects argument of type >> ?size_t?, but argument 3 has type ?long unsigned int? [-Wformat] >> drivers/tpm/tpm_tis_sandbox.c: In function ?sandbox_tpm_xfer?: >> drivers/tpm/tpm_tis_sandbox.c:152:9: warning: format ?%zd? expects argument of >> type ?signed size_t?, but argument 2 has type ?size_t? [-Wformat] >> drivers/tpm/tpm_tis_sandbox.c:152:9: warning: format ?%zd? expects argument of >> type ?signed size_t?, but argument 3 has type ?size_t? [-Wformat] >> common/cmd_pxe.c: In function ?format_mac_pxe?: >> common/cmd_pxe.c:68:3: warning: format ?%zd? expects argument of type ?signed >> size_t?, but argument 2 has type ?size_t? [-Wformat] >> common/cmd_pxe.c: In function ?get_bootfile_path?: >> common/cmd_pxe.c:114:5: warning: format ?%zd? expects argument of type ?signed >> size_t?, but argument 2 has type ?size_t? [-Wformat] >> common/cmd_pxe.c:114:5: warning: format ?%zd? expects argument of type ?signed >> size_t?, but argument 3 has type ?size_t? [-Wformat] >> common/cmd_pxe.c: In function ?label_boot?: >> common/cmd_pxe.c:690:11: warning: format ?%zd? expects argument of type ?signed >> size_t?, but argument 2 has type ?__kernel_size_t? [-Wformat] >> common/cmd_pxe.c:690:11: warning: format ?%zd? expects argument of type ?signed >> size_t?, but argument 3 has type ?__kernel_size_t? [-Wformat] >> common/cmd_pxe.c:690:11: warning: format ?%zd? expects argument of type ?signed >> size_t?, but argument 4 has type ?__kernel_size_t? [-Wformat] >> common/cmd_sf.c: In function ?spi_flash_update_block?: >> common/cmd_sf.c:174:2: warning: format ?%zx? expects argument of type ?size_t?, >> but argument 4 has type ?long unsigned int? [-Wformat] >> common/cmd_sf.c:181:3: warning: format ?%zx? expects argument of type ?size_t?, >> but argument 3 has type ?long unsigned int? [-Wformat] >> common/cmd_sf.c: In function ?spi_flash_update?: >> common/cmd_sf.c:236:9: warning: format ?%zu? expects argument of type ?size_t?, >> but argument 2 has type ?long unsigned int? [-Wformat] >> common/cmd_sf.c:254:9: warning: format ?%zu? expects argument of type ?size_t?, >> but argument 2 has type ?long unsigned int? [-Wformat] >> common/cmd_sf.c:254:9: warning: format ?%zu? expects argument of type ?size_t?, >> but argument 3 has type ?long unsigned int? [-Wformat] >> common/cmd_sf.c: In function ?do_spi_flash_read_write?: >> common/cmd_sf.c:307:10: warning: format ?%zu? expects argument of type ?size_t?, >> but argument 2 has type ?long unsigned int? [-Wformat] >> common/cmd_sf.c: In function ?do_spi_flash_erase?: >> common/cmd_sf.c:346:9: warning: format ?%zu? expects argument of type ?size_t?, >> but argument 2 has type ?ulong? [-Wformat] >> common/cmd_nvedit.c: In function ?do_env_export?: >> common/cmd_nvedit.c:929:3: warning: format ?%zX? expects argument of type >> ?size_t?, but argument 3 has type ?long unsigned int? [-Wformat] >> common/cmd_nvedit.c: In function ?do_env_import?: >> common/cmd_nvedit.c:1062:3: warning: format ?%zu? expects argument of type >> ?size_t?, but argument 2 has type ?long unsigned int? [-Wformat] >> common/cmd_nvedit.c:1062:3: warning: format ?%zX? expects argument of type >> ?size_t?, but argument 3 has type ?long unsigned int? [-Wformat] >> common/malloc_simple.c: In function ?malloc_simple?: >> common/malloc_simple.c:22:2: warning: format ?%zx? expects argument of type >> ?size_t?, but argument 3 has type ?long unsigned int? [-Wformat] >> lib/lzma/LzmaTools.c: In function ?lzmaBuffToBuffDecompress?: >> lib/lzma/LzmaTools.c:94:5: warning: format ?%zx? expects argument of type >> ?size_t?, but argument 2 has type ?SizeT? [-Wformat] >> lib/lzma/LzmaTools.c:95:5: warning: format ?%zx? expects argument of type >> ?size_t?, but argument 2 has type ?SizeT? [-Wformat] >> lib/lzma/LzmaTools.c:115:5: warning: format ?%zx? expects argument of type >> ?size_t?, but argument 2 has type ?SizeT? [-Wformat] >> common/cli_simple.c: In function ?cli_simple_process_macros?: >> common/cli_simple.c:73:2: warning: format ?%zd? expects argument of type ?signed >> size_t?, but argument 2 has type ?__kernel_size_t? [-Wformat] >> common/cli_simple.c:162:2: warning: format ?%zd? expects argument of type >> ?signed size_t?, but argument 2 has type ?__kernel_size_t? [-Wformat] >> lib/lz4_wrapper.c: In function ?ulz4fn?: >> lib/lz4_wrapper.c:111:18: warning: comparison of distinct pointer types lacks a >> cast [enabled by default] >> lib/hashtable.c: In function ?hexport_r?: >> lib/hashtable.c:605:2: warning: format ?%zu? expects argument of type ?size_t?, >> but argument 5 has type ?long unsigned int? [-Wformat] >> lib/hashtable.c:661:5: warning: format ?%zu? expects argument of type ?size_t?, >> but argument 2 has type ?long unsigned int? [-Wformat] >> lib/hashtable.c:661:5: warning: format ?%zu? expects argument of type ?size_t?, >> but argument 3 has type ?long unsigned int? [-Wformat] >> lib/hashtable.c: In function ?himport_r?: >> lib/hashtable.c:793:3: warning: format ?%zu? expects argument of type ?size_t?, >> but argument 2 has type ?long unsigned int? [-Wformat] >> >> I don't need to specify ARCH or CROSS_COMPILE to build sandbox, do I? > > No. I just tried the same procedure and get no warnings. I am using a > 64-bit Ubuntu machine. What kind of platform are you using? I am using 32-bit Ubuntu. York