[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