Skip to content

Commit abe8479

Browse files
premsjhaop-jenkins
authored andcommitted
VDM(Part 2): CME hcode support for per quad VDM.
If per quad VDM is enabled by hcode image build through CME header, CME downloads local pstate parameter block and repair rings in second block copy. If per quad VDM is not enabled CME retains legacy behavior. Key_Cronus_Test=PM_REGRESS Change-Id: I97112b6816657a8201d7b8122bca01909ca20aa5 Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/69971 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: HWSV CI <hwsv-ci+hostboot@us.ibm.com> Tested-by: Cronus HW CI <cronushw-ci+hostboot@us.ibm.com> Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Gregory S. Still <stillgs@us.ibm.com> Reviewed-by: RANGANATHPRASAD G. BRAHMASAMUDRA <prasadbgr@in.ibm.com> Reviewed-by: Jennifer A. Stofer <stofer@us.ibm.com>
1 parent cc0b781 commit abe8479

File tree

4 files changed

+41
-8
lines changed

4 files changed

+41
-8
lines changed

import/chips/p9/procedures/hwp/lib/p9_hcd_memmap_base.H

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646

4747
/// Image Magic Numbers
4848

49-
HCD_CONST64(CPMR_MAGIC_NUMBER, ULL(0x43504d525f312e30)) // CPMR_1.0
49+
HCD_CONST64(CPMR_MAGIC_NUMBER, ULL(0x43504d525f322e30)) // CPMR_2.0
5050
HCD_CONST64(CME_MAGIC_NUMBER , ULL(0x434d455f5f312e30)) // CME__1.0
5151

5252
HCD_CONST64(QPMR_MAGIC_NUMBER, ULL(0x51504d525f312e30)) // QPMR_1.0
@@ -434,6 +434,7 @@ HCD_CONST(CME_QM_FLAG_SYS_WOF_ENABLE, 0x1000)
434434
HCD_CONST(CME_QM_FLAG_SYS_DYN_FMIN_ENABLE, 0x0800)
435435
HCD_CONST(CME_QM_FLAG_SYS_DYN_FMAX_ENABLE, 0x0400)
436436
HCD_CONST(CME_QM_FLAG_SYS_JUMP_PROTECT, 0x0200)
437+
HCD_CONST(CME_QM_FLAG_PER_QUAD_VDM_ENABLE, 0x0100)
437438
HCD_CONST(CME_QM_FLAG_PSTATE_PHANTOM_HALT_EN, 0x0001)
438439

439440
/// CME Hcode

import/chips/p9/procedures/ppe_closed/cme/pstate_cme/p9_cme_thread_db.c

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -386,9 +386,18 @@ void p9_cme_pstate_init()
386386
uint64_t eimr_clr = 0;
387387
uint64_t eimr_or = 0;
388388
uint32_t resclk_data;
389+
uint32_t pstate_offset = 0;
390+
391+
G_cmeHeader = (cmeHeader_t*)(CME_SRAM_HEADER_ADDR);
392+
pstate_offset = G_cmeHeader->g_cme_pstate_region_offset;
393+
394+
if( G_cmeHeader->g_cme_qm_mode_flags & CME_QM_FLAG_PER_QUAD_VDM_ENABLE )
395+
{
396+
pstate_offset = G_cmeHeader->g_cme_pstate_offset << 5;
397+
}
398+
399+
G_lppb = (LocalPstateParmBlock*)(pstate_offset + CME_SRAM_BASE_ADDR);
389400

390-
G_cmeHeader = (cmeHeader_t*)(CME_SRAM_HEADER_ADDR);
391-
G_lppb = (LocalPstateParmBlock*)(G_cmeHeader->g_cme_pstate_region_offset + CME_SRAM_BASE_ADDR);
392401
PK_TRACE_INF("PSTATE: Hdr=0x%x, LPPB=0x%x, Nominal_Freq_Mhz=%d ", (uint32_t)G_cmeHeader, (uint32_t)G_lppb,
393402
G_lppb->operating_points[NOMINAL].frequency_mhz);
394403

import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_cme_img_edit.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include <stdio.h>
2727
#include <stdint.h>
2828
#include <netinet/in.h>
29+
#include <time.h>
2930
#include <stddef.h> /* offsetof */
3031
#include <stdlib.h>
3132

@@ -116,6 +117,18 @@ int main(int narg, char* argv[])
116117
rewind(pSelfRest);
117118
printf(" Self Restore size %s : %d (0x%X)\n", argv[3], selfRestSize, selfRestSize);
118119

120+
time_t buildTime = time(NULL);
121+
struct tm* headerTime = localtime(&buildTime);
122+
uint32_t temp = (((headerTime->tm_year + 1900) << 16) |
123+
((headerTime->tm_mon + 1) << 8) |
124+
(headerTime->tm_mday));
125+
126+
printf(" Build date : %X -> %04d/%02d/%02d (YYYY/MM/DD)\n",
127+
temp, headerTime->tm_year + 1900, headerTime->tm_mon + 1, headerTime->tm_mday);
128+
fseek ( pImage , CPMR_BUILD_DATE_BYTE, SEEK_SET );
129+
temp = htonl( temp );
130+
fwrite(&temp, sizeof(uint32_t), 1, pImage );
131+
119132
fseek ( pImage , CPMR_SELF_RESTORE_OFFSET_BYTE , SEEK_SET );
120133
temp = htonl( SELF_RESTORE_CPMR_OFFSET );
121134
fwrite(&temp, sizeof(uint32_t), 1, pImage );

import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_cme_stop_init.c

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
/* */
66
/* OpenPOWER HCODE Project */
77
/* */
8-
/* COPYRIGHT 2016,2018 */
8+
/* COPYRIGHT 2016,2019 */
99
/* [+] International Business Machines Corp. */
1010
/* */
1111
/* */
@@ -42,6 +42,7 @@ p9_cme_stop_init()
4242
uint32_t exit_first = 0;
4343
uint32_t cme_flags = 0;
4444
uint32_t core_mask = 0;
45+
uint32_t bce_cpy_len = 0;
4546

4647
//--------------------------------------------------------------------------
4748
// Parse CME Flags and Initialize Core States
@@ -104,11 +105,20 @@ p9_cme_stop_init()
104105

105106
cmeHeader_t* pCmeImgHdr = (cmeHeader_t*)(CME_SRAM_HEADER_ADDR);
106107

108+
if( pCmeImgHdr->g_cme_qm_mode_flags & CME_QM_FLAG_PER_QUAD_VDM_ENABLE )
109+
{
110+
bce_cpy_len = pCmeImgHdr->g_cme_custom_length;
111+
}
112+
else
113+
{
114+
bce_cpy_len = pCmeImgHdr->g_cme_max_spec_ring_length;
115+
}
116+
107117
//right now a blocking call. Need to confirm this.
108-
start_cme_block_copy(CME_BCEBAR_1,
109-
(CME_IMAGE_CPMR_OFFSET + (pCmeImgHdr->g_cme_core_spec_ring_offset << 5)),
110-
pCmeImgHdr->g_cme_core_spec_ring_offset,
111-
pCmeImgHdr->g_cme_max_spec_ring_length);
118+
start_cme_block_copy( CME_BCEBAR_1,
119+
(CME_IMAGE_CPMR_OFFSET + (pCmeImgHdr->g_cme_core_spec_ring_offset << 5)),
120+
pCmeImgHdr->g_cme_core_spec_ring_offset,
121+
bce_cpy_len );
112122

113123
PK_TRACE_DBG("Setup: BCE Check for Copy Completed");
114124

0 commit comments

Comments
 (0)