diff options
author | Matt Derksen <mderkse1@us.ibm.com> | 2017-06-19 08:07:16 -0500 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2017-07-11 15:52:08 -0400 |
commit | 61f38bd338cfc056cb9e6d4f407b9279c437c4ab (patch) | |
tree | 103586a446f86f5ba2be04989404260d50d8f2c9 /src/include/usr | |
parent | 06b6c5e9291f0f25979e9ee1dbda1c780c9a98f0 (diff) | |
download | talos-hostboot-61f38bd338cfc056cb9e6d4f407b9279c437c4ab.tar.gz talos-hostboot-61f38bd338cfc056cb9e6d4f407b9279c437c4ab.zip |
Enable HDAT HB reserved memory when supported by FSP
Change-Id: Id0b156282e0197c6a8ed32d2e60066cb5c149edd
RTC: 169478
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/42077
Reviewed-by: Martin Gloff <mgloff@us.ibm.com>
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-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>
Reviewed-by: Corey V. Swenson <cswenson@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/include/usr')
-rw-r--r-- | src/include/usr/runtime/runtime.H | 8 | ||||
-rw-r--r-- | src/include/usr/targeting/common/targreasoncodes.H | 1 | ||||
-rw-r--r-- | src/include/usr/util/runtime/util_rt.H | 51 | ||||
-rw-r--r-- | src/include/usr/util/utilrsvdmem.H | 90 | ||||
-rw-r--r-- | src/include/usr/vmmconst.h | 38 | ||||
-rw-r--r-- | src/include/usr/vpd/vpd_if.H | 6 |
6 files changed, 111 insertions, 83 deletions
diff --git a/src/include/usr/runtime/runtime.H b/src/include/usr/runtime/runtime.H index e4b4b4121..df22c23e5 100644 --- a/src/include/usr/runtime/runtime.H +++ b/src/include/usr/runtime/runtime.H @@ -99,14 +99,6 @@ errlHndl_t populate_hbTpmInfo( void ); */ errlHndl_t populate_TpmInfoByNode(); -/** - * @brief Fills in HBRT for given NODE - * - * @param[in] iNodeId : Node number from 0 to 7 ..etc... - * - * @return errlHndl_t NULL on Success - */ -errlHndl_t populate_RtDataByNode(uint64_t iNodeId); // How many pointers/sections there are in HB runtime data #define HBRT_NUM_PTRS 2 diff --git a/src/include/usr/targeting/common/targreasoncodes.H b/src/include/usr/targeting/common/targreasoncodes.H index cf88bc1a9..0652c730d 100644 --- a/src/include/usr/targeting/common/targreasoncodes.H +++ b/src/include/usr/targeting/common/targreasoncodes.H @@ -72,6 +72,7 @@ enum TargetingReasonCode TARG_RC_WRITE_ATTR_OVER_NO_TANK_LAYER = TARG_COMP_ID | 0x12, TARG_RC_MM_BLOCK_MAP_FAIL = TARG_COMP_ID | 0x13, TARG_RC_APPLY_ATTR_OVER_NOT_ALLOWED = TARG_COMP_ID | 0x14, + TARG_RC_MM_BLOCK_UNMAP_FAIL = TARG_COMP_ID | 0x15, }; }; // End TARGETING namespace diff --git a/src/include/usr/util/runtime/util_rt.H b/src/include/usr/util/runtime/util_rt.H index 01aebaf1f..7b4065bbc 100644 --- a/src/include/usr/util/runtime/util_rt.H +++ b/src/include/usr/util/runtime/util_rt.H @@ -23,52 +23,7 @@ /* */ /* IBM_PROLOG_END_TAG */ -#include <limits.h> // for KILOBYTE definition - - -/** - * 8-byte ascii entry labels for hbrt TOC - */ -typedef uint64_t hbrt_mem_label_t; - -// Ascii label "VPD " in hex -constexpr hbrt_mem_label_t HBRT_MEM_LABEL_VPD = 0x5650442020202020; - -// Ascii label "ATTR " in hex -constexpr hbrt_mem_label_t HBRT_MEM_LABEL_ATTR = 0x4154545220202020; - -// Ascii label "ATTROVER" in hex -constexpr hbrt_mem_label_t HBRT_MEM_LABEL_ATTROVER = 0x415454524F564552; - -// Ascii label "PADDING " in hex -constexpr hbrt_mem_label_t HBRT_MEM_LABEL_PADDING = 0x50414444494E4720; - -/** @brief A 32 byte table of contents entry */ -struct hbrtTableOfContentsEntry_t -{ - uint64_t label; // ASCII HBRT_LABEL_x constants - uint64_t size; // data entry size in bytes - uint64_t offset; // offset into section - uint64_t reserved; // incase of future change -} __attribute__ ((packed)); - -// MAX ENTRIES = (4 KB - 64 byte header) / 32 bytes per entry = 126 -#define HBRT_TOC_MAX_ENTRIES \ - (((4*KILOBYTE) - 64) / sizeof(hbrtTableOfContentsEntry_t)) - -/** @brief A 4KB Table of Contents */ -struct hbrtTableOfContents_t -{ - char toc_header[32]; // "Hostboot Table of Contents" - uint8_t toc_version; // version - uint16_t total_entries; // Total entries in TOC - uint64_t total_size; // Total data section size (64k aligned) - uint8_t rsvd[21]; // reserved - hbrtTableOfContentsEntry_t entry[HBRT_TOC_MAX_ENTRIES]; -} __attribute__ ((packed)); - -// Versions of table of contents -const uint8_t HBRT_TOC_VERSION_1 = 0x01; +#include <util/utilrsvdmem.H> /** * @brief Get the address of a reserved hostboot memory region by its label @@ -78,7 +33,9 @@ const uint8_t HBRT_TOC_VERSION_1 = 0x01; * @return virtual address of region or 0 * @platform FSP, OpenPOWER **/ -uint64_t hb_get_rt_rsvd_mem( hbrt_mem_label_t i_label, +uint64_t hb_get_rt_rsvd_mem( Util::hbrt_mem_label_t i_label, uint32_t i_instance, uint64_t & o_size ); + + diff --git a/src/include/usr/util/utilrsvdmem.H b/src/include/usr/util/utilrsvdmem.H new file mode 100644 index 000000000..13632ac5b --- /dev/null +++ b/src/include/usr/util/utilrsvdmem.H @@ -0,0 +1,90 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/include/usr/util/utilrsvdmem.H $ */ +/* */ +/* OpenPOWER HostBoot Project */ +/* */ +/* Contributors Listed Below - COPYRIGHT 2017 */ +/* [+] 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 UTILRSVDMEM_H +#define UTILRSVDMEM_H + +#include <limits.h> // for KILOBYTE definition + +namespace Util +{ + /** + * 8-byte ascii entry labels for hbrt TOC + */ + typedef uint64_t hbrt_mem_label_t; + + // Ascii label "VPD " in hex + constexpr hbrt_mem_label_t HBRT_MEM_LABEL_VPD = 0x5650442020202020; + + // Ascii label "ATTR " in hex + constexpr hbrt_mem_label_t HBRT_MEM_LABEL_ATTR = 0x4154545220202020; + + // Ascii label "ATTROVER" in hex + constexpr hbrt_mem_label_t HBRT_MEM_LABEL_ATTROVER = 0x415454524F564552; + + // Ascii label "PADDING " in hex + constexpr hbrt_mem_label_t HBRT_MEM_LABEL_PADDING = 0x50414444494E4720; + + /** @brief A 32 byte table of contents entry */ + struct hbrtTableOfContentsEntry_t + { + uint64_t label; // ASCII HBRT_LABEL_x constants + uint64_t size; // data entry size in bytes + uint64_t offset; // offset into section + uint64_t reserved; // incase of future change + } __attribute__ ((packed)); + + // MAX ENTRIES = (4 KB - 64 byte header) / 32 bytes per entry = 126 + #define HBRT_TOC_MAX_ENTRIES \ + (((4*KILOBYTE) - 64) / sizeof(hbrtTableOfContentsEntry_t)) + + /** @brief A 4KB Table of Contents */ + struct hbrtTableOfContents_t + { + char toc_header[32]; // "Hostboot Table of Contents" + uint8_t toc_version; // version + uint16_t total_entries; // Total entries in TOC + uint64_t total_size; // Total data section size (64k aligned) + uint8_t rsvd[21]; // reserved + hbrtTableOfContentsEntry_t entry[HBRT_TOC_MAX_ENTRIES]; + } __attribute__ ((packed)); + + // Versions of table of contents + const uint8_t HBRT_TOC_VERSION_1 = 0x01; + + /** + * @brief Get the address of a label's section based on TOC + * @param[in] i_label - HBRT_MEM_LABEL_... constant + * @param[in] i_hb_data_toc_addr - pointer to the table of contents + * @param[out] o_size - size of returned region in bytes + * @return virtual address of region or 0 + * @platform FSP, OpenPOWER + **/ + uint64_t hb_find_rsvd_mem_label(hbrt_mem_label_t i_label, + hbrtTableOfContents_t * i_hb_data_toc_addr, + uint64_t & o_size); + +}; + +#endif // UTILRSVDMEM_H diff --git a/src/include/usr/vmmconst.h b/src/include/usr/vmmconst.h index 3c57c50f4..233d5fe19 100644 --- a/src/include/usr/vmmconst.h +++ b/src/include/usr/vmmconst.h @@ -168,40 +168,30 @@ enum BlockPriority #define VMM_ALL_HOMER_OCC_MEMORY_SIZE \ (VMM_OCC_COMMON_SIZE + VMM_HOMER_REGION_SIZE) -/** Memory offset for runtime VPD image */ -// Given value is number of bytes BELOW the top of memory to store -// the runtime image(s) Currently below the OCC HOMER IMAGE -#define VMM_RT_VPD_OFFSET (VMM_RT_VPD_SIZE + \ - VMM_ALL_HOMER_OCC_MEMORY_SIZE) - -/** Memory for VPD */ -#define VMM_VPD_START_OFFSET VMM_OCC_COMMON_END_OFFSET -#define VMM_MODULE_VPD_SIZE (512*KILOBYTE) /* must be 64KB aligned */ -#define VMM_CENTAUR_VPD_SIZE (256*KILOBYTE) /* must be 64KB aligned */ -#define VMM_DIMM_JEDEC_VPD_SIZE (256*KILOBYTE) /* must be 64KB aligned */ -#define VMM_RT_VPD_SIZE (VMM_MODULE_VPD_SIZE + \ - VMM_CENTAUR_VPD_SIZE + \ - VMM_DIMM_JEDEC_VPD_SIZE) -/** End of VPD Area = 201MB */ - /** Memory for attribute data */ -#define VMM_ATTR_DATA_START_OFFSET \ - (VMM_VPD_START_OFFSET + VMM_RT_VPD_SIZE) +#define VMM_ATTR_DATA_START_OFFSET VMM_OCC_COMMON_END_OFFSET #define VMM_ATTR_DATA_SIZE (1*MEGABYTE) -/** End of Attr Area = 202MB */ +/** End of Attr Area = 201MB */ /** Chunk of physical memory used for Dump Source Table */ #define DUMP_TEST_MEMORY_ADDR \ - (VMM_ATTR_DATA_START_OFFSET + VMM_ATTR_DATA_SIZE) /* currently 202MB */ + (VMM_ATTR_DATA_START_OFFSET + VMM_ATTR_DATA_SIZE) /* currently 201MB */ #define DUMP_TEST_MEMORY_SIZE (4*MEGABYTE) -/** End of Dump Source Table = 206MB */ +/** End of Dump Source Table = 205MB */ /** Memory for hostboot data Table of Contents */ #define VMM_HB_DATA_TOC_START_OFFSET \ - (DUMP_TEST_MEMORY_ADDR + DUMP_TEST_MEMORY_SIZE) /* currently 206MB */ -#define VMM_HB_DATA_TOC_END_OFFSET (VMM_HB_DATA_TOC_START_OFFSET + (4*KILOBYTE)) -/** End of HB DATA TOC Area = 206MB + 4KB */ + (DUMP_TEST_MEMORY_ADDR + DUMP_TEST_MEMORY_SIZE) /* currently 205MB */ +/** Variable Attribute overrides and Attributes memory here **/ + +/** Memory for VPD (1 MB total) */ +#define VMM_MODULE_VPD_SIZE (512*KILOBYTE) /* must be 64KB aligned */ +#define VMM_CENTAUR_VPD_SIZE (256*KILOBYTE) /* must be 64KB aligned */ +#define VMM_DIMM_JEDEC_VPD_SIZE (256*KILOBYTE) /* must be 64KB aligned */ +#define VMM_RT_VPD_SIZE ( VMM_MODULE_VPD_SIZE + \ + VMM_CENTAUR_VPD_SIZE + \ + VMM_DIMM_JEDEC_VPD_SIZE ) /** Internode communication area outside of the HB image. diff --git a/src/include/usr/vpd/vpd_if.H b/src/include/usr/vpd/vpd_if.H index 4162e48bc..0d8cc4a2d 100644 --- a/src/include/usr/vpd/vpd_if.H +++ b/src/include/usr/vpd/vpd_if.H @@ -49,12 +49,10 @@ namespace VPD /** * @brief Load the runtime VPD image into memory - * @param[in/out] The physical or virtual address of the VPD image - * @param[in] Is the address virtual? + * @param[in] The virtual address of the VPD image * @return error handle if there was an error */ - errlHndl_t vpd_load_rt_image(uint64_t & io_vpd_addr, - bool i_virtualAddr = false); + errlHndl_t vpd_load_rt_image(uint64_t & i_vpd_addr); /** * @brief This function checks to see if the given mvpd target |