[Skiboot] [PATCH 07/15] asm: Add rom_entry.S

Claudio Carvalho cclaudio at linux.vnet.ibm.com
Tue Sep 13 12:13:46 AEST 2016



On 09/03/2016 12:33 AM, Balbir Singh wrote:
> 
> 
> On 11/08/16 15:23, Claudio Carvalho wrote:
>> This adds the asm used to jump into the verification code copied to memory.
>>
>> Signed-off-by: Claudio Carvalho <cclaudio at linux.vnet.ibm.com>
>> ---
>>  asm/Makefile.inc |  2 +-
>>  asm/rom_entry.S  | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++
>>  2 files changed, 53 insertions(+), 1 deletion(-)
>>  create mode 100644 asm/rom_entry.S
>>
>> diff --git a/asm/Makefile.inc b/asm/Makefile.inc
>> index 4c858e2..2e678fd 100644
>> --- a/asm/Makefile.inc
>> +++ b/asm/Makefile.inc
>> @@ -1,7 +1,7 @@
>>  # -*-Makefile-*-
>>  
>>  SUBDIRS += asm 
>> -ASM_OBJS = head.o lock.o misc.o kernel-wrapper.o
>> +ASM_OBJS = head.o lock.o misc.o kernel-wrapper.o rom_entry.o
>>  ASM=asm/built-in.o
>>  
>>  # Add extra dependency to the kernel wrapper
>> diff --git a/asm/rom_entry.S b/asm/rom_entry.S
>> new file mode 100644
>> index 0000000..26d1b96
>> --- /dev/null
>> +++ b/asm/rom_entry.S
>> @@ -0,0 +1,52 @@
>> +# IBM_PROLOG_BEGIN_TAG
>> +# This is an automatically generated prolog.
>> +#
>> +# $Source: src/usr/secureboot/base/rom_entry.S $
>> +#
>> +# OpenPOWER HostBoot Project
>> +#
>> +# COPYRIGHT International Business Machines Corp. 2013,2016
>> +#
>> +# Licensed under the Apache License, Version 2.0 (the "License");
>> +# you may not use this file except in compliance with the License.
>> +# You may obtain a copy of the License at
>> +#
>> +#     http://www.apache.org/licenses/LICENSE-2.0
>> +#
>> +# Unless required by applicable law or agreed to in writing, software
>> +# distributed under the License is distributed on an "AS IS" BASIS,
>> +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> +# implied. See the License for the specific language governing
>> +# permissions and limitations under the License.
>> +#
>> +# IBM_PROLOG_END_TAG
>> +
>> +#.include "kernel/ppcconsts.S"
>> +
>> +.section .text
>> +
>> +.global call_rom_verify
>> +.global call_rom_SHA512
>> +
>> +call_rom_verify:
>> +call_rom_SHA512:
>> +
>> +call_rom_entry:
>> +    std %r2, 40(%r1)
> 
> Usually storing the r2 is done by the caller.

This code was developed by the hostboot team some time ago. It may need
to be updated.

https://github.com/open-power/hostboot/blob/master/src/usr/secureboot/base/rom_entry.S

Initially, I tried to use function callbacks as opposed to this
rom_entry.S. However, the boot hangs when I call any callback to jump
into the rom code. The assembly code generated by gcc does not seem to
be compatible with the rom code.

rom_verify callback I tried:

// Declaration
ROM_response (*rom_verify)(ROM_container_raw* container, ROM_hw_params*
params);

// Caller
rom_verify = rom_code_base_addr + ROMCODE_VERIFY_OFFSET;
rc = rom_verify(container, params);

> 
>> +    mflr %r0
>> +    std %r0, 16(%r1)
>> +    stdu %r1, -128(%r1)
>> +    li %r2, 0
> 
> Why?

"li r2,0" is probably unneeded.
I need to revisit the ISA and run some experiments.

> 
>> +    mtctr %r3
>> +    mr %r3, %r4
>> +    mr %r4, %r5
>> +    mr %r5, %r6
>> +    mr %r6, %r7
>> +    mr %r7, %r8
>> +    bctrl
>> +    addi %r1, %r1, 128
>> +    ld %r2, 40(%r1)
>> +    ld %r0, 16(%r1)
>> +    mtlr %r0
>> +    blr
>> +
>>
> 
> Balbir Singh.
> 
> 



More information about the Skiboot mailing list