[U-Boot] [PATCH 1/2] ARM: image: Add option for ignoring ep bit 3

Marek Vasut marek.vasut at gmail.com
Mon Jun 4 16:27:32 UTC 2018


On 06/04/2018 02:59 AM, Tom Rini wrote:
> On Sat, Jun 02, 2018 at 11:36:00PM +0200, Marek Vasut wrote:
> 
>> Add option to the booti_setup() which indicates to it that the caller
>> requires the image to be relocated to the beginning of the RAM and
>> that the information whether the image can be located anywhere in RAM
>> at 2 MiB aligned boundary or not is to be ignored. This is useful ie.
>> in case the Image is wrapped in another envelope, ie. fitImage and not
>> relocating it but moving it would corrupt the envelope.
>>
>> Signed-off-by: Marek Vasut <marek.vasut+renesas at gmail.com>
>> Cc: Bin Chen <bin.chen at linaro.org>
>> Cc: Masahiro Yamada <yamada.masahiro at socionext.com>
>> Cc: Tom Rini <trini at konsulko.com>
>> ---
>>  arch/arm/lib/image.c | 5 +++--
>>  cmd/booti.c          | 2 +-
>>  include/image.h      | 4 +++-
>>  3 files changed, 7 insertions(+), 4 deletions(-)
>>
>> diff --git a/arch/arm/lib/image.c b/arch/arm/lib/image.c
>> index 1a04e2b875..08c7b8a54f 100644
>> --- a/arch/arm/lib/image.c
>> +++ b/arch/arm/lib/image.c
>> @@ -26,7 +26,8 @@ struct Image_header {
>>  	uint32_t	res5;
>>  };
>>  
>> -int booti_setup(ulong image, ulong *relocated_addr, ulong *size)
>> +int booti_setup(ulong image, ulong *relocated_addr, ulong *size,
>> +		int ignore_ep)
> 
> This should be 'bool' not 'int'.

Which blows up a couple of things, so to keep this patch small, it's int.

>>  {
>>  	struct Image_header *ih;
>>  	uint64_t dst;
>> @@ -63,7 +64,7 @@ int booti_setup(ulong image, ulong *relocated_addr, ulong *size)
>>  	 * images->ep.  Otherwise, relocate the image to the base of RAM
>>  	 * since memory below it is not accessible via the linear mapping.
>>  	 */
>> -	if (le64_to_cpu(ih->flags) & BIT(3))
>> +	if (!ignore_ep && (le64_to_cpu(ih->flags) & BIT(3)))
>>  		dst = image - text_offset;
>>  	else
>>  		dst = gd->bd->bi_dram[0].start;
>> diff --git a/cmd/booti.c b/cmd/booti.c
>> index 45fbb99b68..6d449b1995 100644
>> --- a/cmd/booti.c
>> +++ b/cmd/booti.c
>> @@ -37,7 +37,7 @@ static int booti_start(cmd_tbl_t *cmdtp, int flag, int argc,
>>  		debug("*  kernel: cmdline image address = 0x%08lx\n", ld);
>>  	}
>>  
>> -	ret = booti_setup(ld, &relocated_addr, &image_size);
>> +	ret = booti_setup(ld, &relocated_addr, &image_size, 0);
>>  	if (ret != 0)
>>  		return 1;
>>  
>> diff --git a/include/image.h b/include/image.h
>> index 95d5934344..0f70f2a9d2 100644
>> --- a/include/image.h
>> +++ b/include/image.h
>> @@ -881,9 +881,11 @@ int bootz_setup(ulong image, ulong *start, ulong *end);
>>   * @image: Address of image
>>   * @start: Returns start address of image
>>   * @size : Returns size image
>> + * @ignore_ep: Ignore image->ep field, always place image to RAM start
> 
> First, to quote the kernel doc here:
> " Bit 3:        Kernel physical placement
>                         0 - 2MB aligned base should be as close as possible
>                             to the base of DRAM, since memory below it is not
>                             accessible via the linear mapping
>                         1 - 2MB aligned base may be anywhere in physical
>                             memory"
> 
> maybe call it "force_reloc_to_base" ?  Or at least something about
> "force"

Hummm.

-- 
Best regards,
Marek Vasut


More information about the U-Boot mailing list