diff options
| author | Ilya Smirnov <ismirno@us.ibm.com> | 2018-10-08 15:27:28 -0500 |
|---|---|---|
| committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2018-11-07 20:36:51 -0600 |
| commit | 22134d69a2016dd1ea6d9de858f4e68f732289ae (patch) | |
| tree | 3e6996dc775e869d6643e748f83d728187add2c3 /src/include | |
| parent | beca51100d6ba74914391b2a0baec830f427ec99 (diff) | |
| download | talos-hostboot-22134d69a2016dd1ea6d9de858f4e68f732289ae.tar.gz talos-hostboot-22134d69a2016dd1ea6d9de858f4e68f732289ae.zip | |
SMF: Port NVRAM Reading Logic From Skiboot
As part of SMF secure memory distribution, we need to be able
to read the size of secure memory from NVRAM PNOR partition
(for OpenPOWER). The functionality to read (index into) NVRAM
already exists in skiboot. This commits ports the bare minimum
functionality required to read NVRAM from skiboot to hb.
Change-Id: I17b9014ec3df590bcd8745ae70e0f96e36580117
RTC: 192411
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/67414
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Dean Sanner <dsanner@us.ibm.com>
Reviewed-by: Roland Veloz <rveloz@us.ibm.com>
Reviewed-by: Nicholas E. Bofferding <bofferdn@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/include')
| -rw-r--r-- | src/include/usr/hbotcompid.H | 8 | ||||
| -rw-r--r-- | src/include/usr/isteps/istep07list.H | 3 | ||||
| -rw-r--r-- | src/include/usr/nvram/import/nvram.h | 42 | ||||
| -rw-r--r-- | src/include/usr/nvram/import/skiboot.h | 103 | ||||
| -rw-r--r-- | src/include/usr/nvram/nvram_interface.H | 61 | ||||
| -rw-r--r-- | src/include/usr/nvram/nvram_reasoncodes.H | 45 |
6 files changed, 262 insertions, 0 deletions
diff --git a/src/include/usr/hbotcompid.H b/src/include/usr/hbotcompid.H index d9faaaf5f..6405d0a89 100644 --- a/src/include/usr/hbotcompid.H +++ b/src/include/usr/hbotcompid.H @@ -445,6 +445,14 @@ const compId_t NVDIMM_COMP_ID = 0x3500; const char NVDIMM_COMP_NAME[] = "nvdimm"; //@} +/** @name NVRAM + * NVRAM Support component + */ +//@{ +const compId_t NVRAM_COMP_ID = 0x3900; +const char NVRAM_COMP_NAME[] = "nvram"; +//@} + /** @name HDAT * HDAT component * @Note HDAT_COMP_ID=0x9000 matches with what diff --git a/src/include/usr/isteps/istep07list.H b/src/include/usr/isteps/istep07list.H index a0c591679..e9c03b082 100644 --- a/src/include/usr/isteps/istep07list.H +++ b/src/include/usr/isteps/istep07list.H @@ -167,6 +167,9 @@ const DepModInfo g_istep07Dependancies = { DEP_LIB(libsbe.so), DEP_LIB(libimageprocs.so), DEP_LIB(libcen.so), +#ifndef CONFIG_FSP_BUILD + DEP_LIB(libnvram.so), +#endif NULL } }; diff --git a/src/include/usr/nvram/import/nvram.h b/src/include/usr/nvram/import/nvram.h new file mode 100644 index 000000000..e335b0f4b --- /dev/null +++ b/src/include/usr/nvram/import/nvram.h @@ -0,0 +1,42 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/include/usr/nvram/import/nvram.h $ */ +/* */ +/* OpenPOWER HostBoot Project */ +/* */ +/* Contributors Listed Below - COPYRIGHT 2018 */ +/* [+] International Business Machines Corp. */ +/* */ +/* */ +/* 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 */ +#ifndef __NVRAM_H +#define __NVRAM_H + +#include <stdint.h> + +extern "C" +{ +int nvram_format(void *nvram_image, uint32_t nvram_size); +int nvram_check(void *nvram_image, uint32_t nvram_size); +void nvram_reinit(void); +bool nvram_validate(void); +bool nvram_has_loaded(void); +bool nvram_wait_for_load(void); + +const char *nvram_query(const char *name); +bool nvram_query_eq(const char *key, const char *value); +} +#endif /* __NVRAM_H */ diff --git a/src/include/usr/nvram/import/skiboot.h b/src/include/usr/nvram/import/skiboot.h new file mode 100644 index 000000000..689eef541 --- /dev/null +++ b/src/include/usr/nvram/import/skiboot.h @@ -0,0 +1,103 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/include/usr/nvram/import/skiboot.h $ */ +/* */ +/* OpenPOWER HostBoot Project */ +/* */ +/* Contributors Listed Below - COPYRIGHT 2018 */ +/* [+] International Business Machines Corp. */ +/* */ +/* */ +/* 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 */ +#ifndef __SKIBOOT_H +#define __SKIBOOT_H + +#include <stdio.h> +#include <string.h> +#include <assert.h> +#include <tracinterface.H> +#include <trace/trace.H> +#include <nvram/nvram_interface.H> + +typedef uint16_t beint16_t; +typedef beint16_t be16; + +#define BE16_TO_CPU(le_val) ((uint16_t)(le_val)) + +static inline uint16_t be16_to_cpu(beint16_t be_val) +{ + return BE16_TO_CPU(be_val); +} + +// For console logging +#define PR_EMERG 0 +#define PR_ALERT 1 +#define PR_CRIT 2 +#define PR_ERR 3 +#define PR_WARNING 4 +#define PR_NOTICE 5 +#define PR_PRINTF PR_NOTICE +#define PR_INFO 6 +#define PR_DEBUG 7 +#define PR_TRACE 8 +#define PR_INSANE 9 + +// Skiboot-specific trace plug-in +#define prlog(l, f, args...) \ + do { \ + if(l == PR_TRACE || \ + l <= PR_ERR) \ + { \ + TRACFCOMP(NVRAM_TRACE::g_trac_nvram, f, ##args); \ + } \ + else \ + { \ + TRACDCOMP(NVRAM_TRACE::g_trac_nvram, f, ##args); \ + } \ + } while(0) + +#define prerror(fmt...) do { prlog(PR_ERR, fmt); } while(0) + +#define prlog_once(arg, ...) \ +({ \ + static bool __prlog_once = false; \ + if (!__prlog_once) { \ + __prlog_once = true; \ + prlog(arg, ##__VA_ARGS__); \ + } \ +}) + +extern "C" +{ +// Various stubs for NVRAM checking/manipulation. Note that on hostboot +// side we rely on getSectionInfo to carry out most of these tasks. +bool nvram_has_loaded(void) +{ + return true; +} + +bool nvram_wait_for_load(void) +{ + return true; +} + +bool nvram_validate(void) +{ + return true; +} +} + +#endif diff --git a/src/include/usr/nvram/nvram_interface.H b/src/include/usr/nvram/nvram_interface.H new file mode 100644 index 000000000..d5730e86b --- /dev/null +++ b/src/include/usr/nvram/nvram_interface.H @@ -0,0 +1,61 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/include/usr/nvram/nvram_interface.H $ */ +/* */ +/* OpenPOWER HostBoot Project */ +/* */ +/* Contributors Listed Below - COPYRIGHT 2018 */ +/* [+] International Business Machines Corp. */ +/* */ +/* */ +/* 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 */ +#ifndef __NVRAM_INTERFACE_H +#define __NVRAM_INTERFACE_H + +#include <errl/errlentry.H> + +namespace NVRAM_TRACE +{ + extern trace_desc_t * g_trac_nvram; +} + +namespace NVRAM +{ + +const char TEST_KEY[] = "test"; + +/** + * @brief Utility function to read the i_key from the NVRAM PNOR partition. + * The value of the i_key, if any, will reside in o_val after the + * function returns. The function attempts to readSectionInfo for + * the NVRAM partition and will error if it's unable to read the + * section info. o_val will be nullptr if the key is not found in + * NVRAM. + * + * @param[in] i_key: the key of the key/value pair representing the data + * that needs to be read from NVRAM. + * @pre The key should be a null-terminated string and must not be + * nullptr. The function will assert if i_key is nullptr. + * + * @param[out] o_val: The pointer to the location in NVRAM where the i_key + * is located or nullptr if the key is not found. + * + * @return error handle: nullptr - success; non-nullptr - an error occurred + */ +errlHndl_t nvramRead(const char* i_key, const char*& o_val); + +} +#endif diff --git a/src/include/usr/nvram/nvram_reasoncodes.H b/src/include/usr/nvram/nvram_reasoncodes.H new file mode 100644 index 000000000..985bab349 --- /dev/null +++ b/src/include/usr/nvram/nvram_reasoncodes.H @@ -0,0 +1,45 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/include/usr/nvram/nvram_reasoncodes.H $ */ +/* */ +/* OpenPOWER HostBoot Project */ +/* */ +/* Contributors Listed Below - COPYRIGHT 2018 */ +/* [+] International Business Machines Corp. */ +/* */ +/* */ +/* 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 */ +#ifndef __NVRAM_REASONCODES_H +#define __NVRAM_REASONCODES_H + +#include <hbotcompid.H> + +namespace NVRAM +{ + enum NVRAMModuleId + { + MOD_NVRAM_READ = 0x01, + }; + + enum NVRAMReasonCode + { + RC_NVRAM_CHECK_FAILED = NVRAM_COMP_ID | 0x01, + RC_NVRAM_READ_NULL_KEY = NVRAM_COMP_ID | 0x02, + }; + +} // namespace NVRAM + +#endif |

