Skip to content

Commit

Permalink
cvc: allow BE cvc code to be called from LE context
Browse files Browse the repository at this point in the history
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Oliver O'Halloran <oohall@gmail.com>
  • Loading branch information
npiggin authored and oohal committed Dec 16, 2019
1 parent 0880124 commit b5c2213
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 30 deletions.
42 changes: 18 additions & 24 deletions asm/cvc_entry.S
@@ -1,28 +1,9 @@
# SPDX-License-Identifier: Apache-2.0
# 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"

# Derived from automatically generated HostBoot rom_entry.S

#include <asm-utils.h>
#include <processor.h>

# Updated hostboot location is src/securerom/rom_entry.S.
# This also has a fix for TOC save frame pointer.
Expand All @@ -49,7 +30,20 @@ call_rom_entry:
mr %r5, %r6
mr %r6, %r7
mr %r7, %r8
#if HAVE_BIG_ENDIAN
bctrl
#else
bl $+4
1: mflr %r9
addi %r9,%r9,2f - 1b
mtspr SPR_HSRR0, %r9
mfmsr %r9
xori %r9,%r9,MSR_LE
mtspr SPR_HSRR1, %r9
hrfid
2: .long 0x2104804e /* bctrl */
FIXUP_ENDIAN
#endif
ld %r2, STACK_TOC_OFFSET(%r1)
addi %r1, %r1, 128
ld %r0, 16(%r1)
Expand Down
16 changes: 11 additions & 5 deletions libstb/cvc.c
Expand Up @@ -324,16 +324,19 @@ int call_cvc_sha512(const uint8_t *data, size_t data_len, uint8_t *digest,
if (!service)
return OPAL_UNSUPPORTED;

if (service->version == 1)
if (service->version == 1) {
unsigned long msr = mfmsr();
__cvc_sha512_v1((void*) service->addr, data, data_len, digest);
else
assert(msr == mfmsr());
} else {
return OPAL_UNSUPPORTED;
}

return OPAL_SUCCESS;
}

int call_cvc_verify(void *container, size_t len, const void *hw_key_hash,
size_t hw_key_hash_size, uint64_t *log)
size_t hw_key_hash_size, __be64 *log)
{
ROM_hw_params hw_params;
ROM_response rc;
Expand All @@ -354,12 +357,15 @@ int call_cvc_verify(void *container, size_t len, const void *hw_key_hash,
memset(&hw_params, 0, sizeof(ROM_hw_params));
memcpy(&hw_params.hw_key_hash, hw_key_hash, hw_key_hash_size);

if (service->version == 1)
if (service->version == 1) {
unsigned long msr = mfmsr();
rc = __cvc_verify_v1((void*) service->addr,
(ROM_container_raw*) container,
&hw_params);
else
assert(msr == mfmsr());
} else {
return OPAL_UNSUPPORTED;
}

if (log)
*log = hw_params.log;
Expand Down
2 changes: 1 addition & 1 deletion libstb/cvc.h
Expand Up @@ -30,7 +30,7 @@ int cvc_init(void);
*
*/
int call_cvc_verify(void *buf, size_t size, const void *hw_key_hash,
size_t hw_key_hash_size, uint64_t *log);
size_t hw_key_hash_size, __be64 *log);

/*
* call_cvc_sha512 - Call the CVC-sha512 service to calculate a sha512 hash.
Expand Down

0 comments on commit b5c2213

Please sign in to comment.