summaryrefslogtreecommitdiffstats
path: root/src/include/usr/pnor/pnor_const.H
blob: c975c684caf9e540cd3f4eec68a514d0f9919516 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
/* IBM_PROLOG_BEGIN_TAG                                                   */
/* This is an automatically generated prolog.                             */
/*                                                                        */
/* $Source: src/include/usr/pnor/pnor_const.H $                           */
/*                                                                        */
/* OpenPOWER HostBoot Project                                             */
/*                                                                        */
/* Contributors Listed Below - COPYRIGHT 2015,2019                        */
/* [+] 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 __PNOR_PNOR_CONST_H
#define __PNOR_PNOR_CONST_H

#include <stdint.h>
#include <builtins.h>

namespace PNOR
{

/**
 * PNOR Sections
 */
enum SectionId
{
    TOC,            /**< Table of Contents */
            // Value of HB_EXT_CODE must be 1 for debug framework.
#ifndef BOOTLOADER
    HB_EXT_CODE,    /**< Hostboot Extended Image */
#endif
    HB_BASE_CODE,   /**< Hostboot Base Image */
#ifndef BOOTLOADER
    SBE_IPL,        /**< Self-Boot Engine IPL image */
    HCODE,          /**< HCODE Reference image */
    PAYLOAD,        /**< HAL/OPAL */
    HB_RUNTIME,     /**< Hostboot Runtime (for Sapphire) */
    HB_DATA,        /**< Hostboot Data */
    GUARD_DATA,     /**< Guard Data */
    HB_ERRLOGS,     /**< Hostboot Error log Repository */
    DIMM_JEDEC_VPD, /**< DIMM JEDEC VPD */
    MODULE_VPD,     /**< Module VPD */
    CENTAUR_VPD,    /**< Centaur VPD */
    NVRAM,          /**< Opal NVRAM */
    OCC,            /**< OCC image */
    FIRDATA,        /**< FIR data for checkstop analysis */
    ATTR_TMP,       /**< Temporary Attribute Override */
    ATTR_PERM,      /**< Permanent Attribute Override */
    CAPP,           /**< CAPP lid */
    VERSION,        /**< PNOR version string section */
    HB_BOOTLOADER,  /**< Hostboot Bootloader image */
    TEST,           /**< Scratch space for PNOR test cases */
    TESTRO,         /**< Scratch space for PNOR ReadOnly test cases */
    BACKUP_PART,    /**< Backup of TOC*/
    POWERVM,        /**< Power VM data */
    RINGOVD,        /**< Ring override data */
    WOFDATA,        /**< VFRT data tables for WOF */
    SBKT,           /**< SecureBoot Key Transition */
    HB_VOLATILE,    /**< Semi volatile partition for reconfig */
    MEMD,           /**< Memory configuration data */
    TESTLOAD,       /**< Secureboot test load */
    CENTAUR_HW_IMG, /**< Centaur HCODE Reference image */
    HDAT,           /**< HDAT data */
    EECACHE,
    OCMBFW,         /**< OCMB image */
    BOOTKERNEL,     /**< Bootkernel -- HB uses for PHYP */
#endif
    NUM_SECTIONS,   /**< Number of defined sections */

    FIRST_SECTION = TOC,  /**< First section (for looping) */
    /**< Used for error cases, initialization */
    INVALID_SECTION = NUM_SECTIONS,
};

enum PnorMode_t {
    MODEL_UNKNOWN,   /**< Invalid */
    MODEL_MEMCPY,    /**< No LPC logic, just do memcpy into cache area */
    MODEL_LPC_MEM,   /**< Break into 32-bit LPC ops but use fake-PNOR */
    MODEL_REAL_CMD,  /**< Code for real HW using Command based reads */
    MODEL_REAL_MMIO, /**< Code for real hardware using MMIO reads */
};

/**
 * Information about a section of PNOR
 */
    // Size and layout of this structure must be maintained for debug framework.
struct SectionInfo_t
{
    SectionInfo_t():
      id(INVALID_SECTION),
      name("INVALID_SECTION"),
      vaddr(0),
      flashAddr(0),
      size(0),
      eccProtected(false),
      sha512Version(false),
      sha512perEC(false),
      readOnly(false),
      reprovision(false),
      Volatile(false),
      secure(false),
      clearOnEccErr(false),
      hasHashTable(false)
      {}
    SectionId id;       /**< Identifier for this section */
    const char* name;   /**< Name of the section */
    uint64_t vaddr;     /**< Virtual address of the start of the section */
    uint32_t flashAddr; /**< Flash address of the start of the section*/
    uint64_t size;      /**< Size of partition in bytes */
    bool eccProtected;  /**< Section is ECC protected */
    bool sha512Version; /**< Version Checking */
    bool sha512perEC;   /**< Version Checking perEC */
    bool readOnly;      /**< Section is read only */
    bool reprovision;   /**< Erase this section during a reprovision */
    bool Volatile;   /**< Section loses contents on non HB reboots */
    bool secure;        /**< Indicates if a section is secure */
    bool clearOnEccErr; /**< Indicates on ECC errors, clear and reboot*/
    bool hasHashTable;  /**< Indicates if there exists a hash page table*/
    size_t secureProtectedPayloadSize; /**< Cache the secure payload size so
                                            that the secure container only
                                            needs to be parsed once */
};

/**
  * Internal information to deal with the sections of PNOR
  */
struct SectionData_t {
    SectionData_t(): secure(false) {}
    PNOR::SectionId id;  /**< Identifier for this section */
    uint64_t virtAddr;  /**< Virtual address for the start of the section */
    uint32_t flashAddr;  /**< Address in flash */
    uint32_t size;/**< Actual size of content in bytes (not including ECC)*/
    uint8_t chip;  /**< Chip Select */
    uint8_t version; /**< Version Checking */
    uint16_t integrity; /**< Data Integrity */
    uint8_t misc; /**< Misc Flags */
    uint8_t secure; /**< Indicates if a section is secure */
} PACKED;

/**
 * PNOR Sides
 */
enum SideId
{
    WORKING = 0,
#ifdef CONFIG_PNOR_TWO_SIDE_SUPPORT
    ALTERNATE = 1,
#endif
    NUM_SIDES,
    INVALID_SIDE = NUM_SIDES,
    FIRST_SIDE   = WORKING,
};

enum
{
    INVALID_OFFSET = 0xFFFFFFF,  // Invalid primary or alternate TOC
    BACKUP_TOC_OFFSET = 0x8000,
    TOC_SIZE = 0x8000,
    TOC_OFFSET_FROM_TOP_OF_FLASH = 0x8FFF,
    INVALID_FLASH_OFFSET = 0xFFFFFFFF,
};

/** @brief PNOR::TEST section offsets for test cases to prevent
 *         concurrency problems
 */
enum TestSectionOffset{
    pnorTestSec_readwrite_offset = 0x100,
    pnorTestSec_smartwrite_offset = 0x120,
    pnorTestSec_rt_readwrite_offset = 0x6000,
};

}

#endif
OpenPOWER on IntegriCloud