summaryrefslogtreecommitdiffstats
path: root/import/chips/p9/procedures
diff options
context:
space:
mode:
authorRahul Batra <rbatra@us.ibm.com>2017-01-20 14:43:23 -0600
committerJoshua Hunsberger <jahunsbe@us.ibm.com>2017-10-23 17:05:14 -0500
commite38420fa4c65636789b8e2de9646eeb76c1b88aa (patch)
tree627f7594cda0bcb246b648ceadf39e264ad6d253 /import/chips/p9/procedures
parentb6670a83315557c24d345308266742cf3dc17590 (diff)
downloadtalos-hcode-e38420fa4c65636789b8e2de9646eeb76c1b88aa.tar.gz
talos-hcode-e38420fa4c65636789b8e2de9646eeb76c1b88aa.zip
PGPE Boot Fixes
- Setup OCC SRAM pointers - Performed read-mod-write to OCC SCRATCH2 reg - Fixed debug trap insertion - Refined some traces for debug - Added linker script fix for .pgpe_image_header Change-Id: Id49de48d1cb1ca9ffc1cb343f3a8cb99a7803eca Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/35181 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: PPE CI <ppe-ci+hostboot@us.ibm.com> Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com> Reviewed-by: Gregory S. Still <stillgs@us.ibm.com> Reviewed-by: Douglas R. Gilbert <dgilbert@us.ibm.com> Reviewed-by: Jennifer A. Stofer <stofer@us.ibm.com>
Diffstat (limited to 'import/chips/p9/procedures')
-rw-r--r--import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/link.cmd12
-rw-r--r--import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_boot_temp.c34
-rw-r--r--import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_fit.c4
-rw-r--r--import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_gen_pstate_info.c12
-rw-r--r--import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_gppb.c4
-rw-r--r--import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_header.c21
-rw-r--r--import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_header.h31
-rw-r--r--import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_ipc_handlers.c4
-rw-r--r--import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_main.c31
-rw-r--r--import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_pstate.c6
-rw-r--r--import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_thread_actuate_pstates.c8
-rw-r--r--import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_thread_process_requests.c15
-rw-r--r--import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/pk_app_cfg.h2
-rw-r--r--import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/pstate_gpe.mk2
14 files changed, 125 insertions, 61 deletions
diff --git a/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/link.cmd b/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/link.cmd
index 5d686564..5876d922 100644
--- a/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/link.cmd
+++ b/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/link.cmd
@@ -35,7 +35,9 @@ OUTPUT_FORMAT(elf32-powerpc);
// GPE2 is loaded at 0xfff20000
#define SRAM_START 0xfff20000
#define SRAM_LENGTH 0x10000
-#define PPE_DEBUG_PTRS_OFFSET 0x1E0
+#define PGPE_HEADER_OFFSET 0x180
+//debug pointer offset at an offset of 0x200
+#define PPE_DEBUG_PTRS_OFFSET PGPE_HEADER_OFFSET + 0x80
MEMORY
{
@@ -58,6 +60,14 @@ SECTIONS
.vectors _VECTOR_START : { *(.vectors) } > sram
///////////////////////////////////////////////////////////////////////////
+ //
+ // PGPE Image Header
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ _PGPE_IMG_HEADER = _VECTOR_START + PGPE_HEADER_OFFSET;
+ .pgpe_image_header _PGPE_IMG_HEADER : { *(.pgpe_image_header) } > sram
+
+ ///////////////////////////////////////////////////////////////////////////
// Debug Pointers Table
//
// We want the debug pointers table to always appear at
diff --git a/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_boot_temp.c b/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_boot_temp.c
index 789f5b8b..e00ed8f1 100644
--- a/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_boot_temp.c
+++ b/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_boot_temp.c
@@ -26,7 +26,7 @@
#include "p9_pstates_pgpe.h"
#include "p9_pgpe_header.h"
-extern pgpe_header_data_t* G_pgpe_header_data;
+extern PgpeHeader_t* G_pgpe_header_data;
//
//Local function prototypes
@@ -54,23 +54,25 @@ void p9_pgpe_boot_temp()
void p9_pgpe_boot_pgpe_header_init()
{
//fill it in
- G_pgpe_header_data->magic_number[0] = 0x32323232;//magic
- G_pgpe_header_data->_system_reset_addr = (uint32_t*)0xffff2040;//system_reset_address
- G_pgpe_header_data->IVPR_address = (uint32_t*)0xffff2000;//IVPR address
+ G_pgpe_header_data->g_pgpe_magic_number[0] = 0x32323232;//magic
+ G_pgpe_header_data->g_pgpe_sys_reset_addr = (uint32_t*)0xffff2040;//system_reset_address
+ G_pgpe_header_data->g_pgpe_ivpr_addr = (uint32_t*)0xffff2000;//IVPR address
#if !BOOT_TEMP_SET_FULL_OCC_IPC_FUNC
- G_pgpe_header_data->pgpeflags = (uint16_t)(0x0080); //OCC IPC Immediate Response
+ G_pgpe_header_data->g_pgpe_qm_flags = (uint16_t)(0x0080); //OCC IPC Immediate Response
#else
- G_pgpe_header_data->pgpeflags = (uint16_t)(0x0000); //OCC IPC Full Functionality
+ G_pgpe_header_data->g_pgpe_qm_flags = (uint16_t)(0x0000); //OCC IPC Full Functionality
#endif //BOOT_TEMP_SET_FULL_OCC_IPC_FUNC
- G_pgpe_header_data->gppb_sram_addr = (uint32_t*)0xfff27000;//GPPB Sram Offset
- G_pgpe_header_data->gppb_memory_offset = 0;//GPPB Memory Offset
- G_pgpe_header_data->gppb_block_length = 0x2000;//GPPB Block Length
- G_pgpe_header_data->pstate_tbl_mem_offset = (uint32_t*)0x80308000;//Pstate Tables Memory Offset
- G_pgpe_header_data->pstate_tbl_length = 0x6000;//Pstate Tables Length
- G_pgpe_header_data->occ_pstate_tbl_addr = (uint32_t*)0xfff29000;//OCC Pstate table address
- G_pgpe_header_data->occ_pstate_tbl_length = 0x100;//OCC Pstate table length
- G_pgpe_header_data->pgpe_beacon = (uint32_t*)(0xfff26fe0 + 4);
- G_pgpe_header_data->actual_quad_status_addr = (uint32_t*)(0xfff26fe0 + 8);
+ G_pgpe_header_data->g_pgpe_gppb_mem_offset = 0;//GPPB Memory Offset
+ G_pgpe_header_data->g_pgpe_gppb_length = 0x2000;//GPPB Block Length
+ G_pgpe_header_data->g_pgpe_gen_pstables_mem_offset = (uint32_t*)0x80308000;//Pstate Tables Memory Offset
+ G_pgpe_header_data->g_pgpe_gen_pstables_length = 0x6000;//Pstate Tables Length
+
+ /*
+ G_pgpe_header_data->g_pgpe_gppb_sram_addr = (uint32_t*)0xfff27000;//GPPB Sram Offset
+ G_pgpe_header_data->g_pgpe_occ_pstables_sram_addr = (uint32_t*)0xfff29000;//OCC Pstate table address
+ G_pgpe_header_data->g_pgpe_occ_pstables_len = 0x100;//OCC Pstate table length
+ G_pgpe_header_data->g_pgpe_beacon_addr = (uint32_t*)(0xfff26fe0 + 4);
+ G_pgpe_header_data->g_quad_status_addr = (uint32_t*)(0xfff26fe0 + 8);*/
}
//
@@ -83,7 +85,7 @@ void p9_pgpe_boot_gppb_init()
int32_t i;
//read value of symbol pstate_parameter_block
- void* gppb_sram_offset = G_pgpe_header_data->gppb_sram_addr;//GPPB Sram Offset
+ void* gppb_sram_offset = G_pgpe_header_data->g_pgpe_gppb_sram_addr;//GPPB Sram Offset
GlobalPstateParmBlock* gppb = (GlobalPstateParmBlock*)gppb_sram_offset;
gppb->magic = PSTATE_PARMSBLOCK_MAGIC;
diff --git a/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_fit.c b/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_fit.c
index b267c38c..7d4d652a 100644
--- a/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_fit.c
+++ b/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_fit.c
@@ -29,7 +29,7 @@
uint8_t G_fit_count_threshold;
uint8_t G_fit_count;
extern GlobalPstateParmBlock* G_gppb;
-extern pgpe_header_data_t* G_pgpe_header_data;
+extern PgpeHeader_t* G_pgpe_header_data;
//
//Local function declarations
@@ -84,7 +84,7 @@ void p9_pgpe_fit_handler(void* arg, PkIrqId irq)
if (G_fit_count == G_fit_count_threshold)
{
//write to SRAM
- *(G_pgpe_header_data->pgpe_beacon) = *(G_pgpe_header_data->pgpe_beacon) + 1;
+ *(G_pgpe_header_data->g_pgpe_beacon_addr) = *(G_pgpe_header_data->g_pgpe_beacon_addr) + 1;
G_fit_count = 0;
}
else
diff --git a/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_gen_pstate_info.c b/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_gen_pstate_info.c
index 7cb1c9dc..f366fcca 100644
--- a/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_gen_pstate_info.c
+++ b/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_gen_pstate_info.c
@@ -31,7 +31,7 @@
//Generated PState Table in SRAM
GeneratedPstateInfo G_gpi;
-extern pgpe_header_data_t* G_pgpe_header_data;
+extern PgpeHeader_t* G_pgpe_header_data;
extern VpdOperatingPoint G_operating_points[NUM_VPD_PTS_SET][VPD_PV_POINTS];
//
@@ -48,9 +48,9 @@ void p9_pgpe_gen_pstate_info()
{
int p;
//Get GlobalPstateParmBlock offset from pgpe_header
- uint32_t* pstate_tbl_memory_offset = G_pgpe_header_data->pstate_tbl_mem_offset;
- uint32_t pstate_tbl_length = G_pgpe_header_data->pstate_tbl_length;
- void* gppb_sram_offset = G_pgpe_header_data->gppb_sram_addr;//GPPB Sram Offset
+ uint32_t* pstate_tbl_memory_offset = G_pgpe_header_data->g_pgpe_gen_pstables_mem_offset;
+ uint32_t pstate_tbl_length = G_pgpe_header_data->g_pgpe_gen_pstables_length;
+ void* gppb_sram_offset = G_pgpe_header_data->g_pgpe_gppb_sram_addr;//GPPB Sram Offset
GlobalPstateParmBlock* gppb = (GlobalPstateParmBlock*)gppb_sram_offset;
//Fill out GeneratedPstateInfo structure
@@ -153,8 +153,8 @@ void p9_pgpe_gen_biased_pstates(GlobalPstateParmBlock* gppb, GeneratedPstateInfo
void p9_pgpe_gen_occ_pstate_tbl(GeneratedPstateInfo* gpi)
{
int p;
- OCCPstateTable_t* opst = (OCCPstateTable_t*)G_pgpe_header_data->occ_pstate_tbl_addr;
- opst->entries = (G_pgpe_header_data->occ_pstate_tbl_length) / sizeof(OCCPstateTable_entry_t);
+ OCCPstateTable_t* opst = (OCCPstateTable_t*)G_pgpe_header_data->g_pgpe_occ_pstables_sram_addr;
+ opst->entries = (G_pgpe_header_data->g_pgpe_occ_pstables_len) / sizeof(OCCPstateTable_entry_t);
for (p = 0; p <= opst->entries; p++)
{
diff --git a/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_gppb.c b/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_gppb.c
index 0242fd42..177d5875 100644
--- a/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_gppb.c
+++ b/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_gppb.c
@@ -33,7 +33,7 @@ VpdOperatingPoint G_operating_points[NUM_VPD_PTS_SET][VPD_PV_POINTS];
uint8_t G_pstate0_dpll_value;
uint32_t G_ext_vrm_inc_rate_mult_usperus;
uint32_t G_ext_vrm_dec_rate_mult_usperus;
-extern pgpe_header_data_t* G_pgpe_header_data;
+extern PgpeHeader_t* G_pgpe_header_data;
//
//Private function prototypes
@@ -52,7 +52,7 @@ uint8_t p9_pgpe_gppb_get_ps_region(Pstate ps, uint8_t vpt_pt_set);
//Note: In future, the slope calculation might be done offline
void p9_pgpe_gppb_init()
{
- void* gppb_sram_offset = G_pgpe_header_data->gppb_sram_addr;//GPPB Sram Offset
+ void* gppb_sram_offset = G_pgpe_header_data->g_pgpe_gppb_sram_addr;//GPPB Sram Offset
G_gppb = (GlobalPstateParmBlock*)gppb_sram_offset;
//Apply Biases and System Parameters
diff --git a/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_header.c b/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_header.c
index c819b021..5178f0c9 100644
--- a/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_header.c
+++ b/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_header.c
@@ -23,8 +23,13 @@
/* */
/* IBM_PROLOG_END_TAG */
#include "p9_pgpe_header.h"
+#include "pstate_pgpe_occ_api.h"
-pgpe_header_data_t* G_pgpe_header_data;
+//OCC Shared SRAM starts at bottom 2K of PGPE OCC SRAM space
+#define OCC_SHARED_SRAM_ADDR_START (0xfff20000 + 0x10000 - 0x800)
+
+PgpeHeader_t* G_pgpe_header_data;
+extern PgpeHeader_t* _PGPE_IMG_HEADER __attribute__ ((section (".pgpe_image_header")));
//
//Set the pgpe_header_data struct to point to PGPE HEADER in SRAM
@@ -34,5 +39,17 @@ pgpe_header_data_t* G_pgpe_header_data;
//
void p9_pgpe_header_init()
{
- G_pgpe_header_data = (pgpe_header_data_t*)0xfff20180;
+ G_pgpe_header_data = (PgpeHeader_t*)&_PGPE_IMG_HEADER;
+}
+
+void p9_pgpe_header_fill()
+{
+ HcodeOCCSharedData_t* occ_shared_data = (HcodeOCCSharedData_t*)
+ OCC_SHARED_SRAM_ADDR_START; //Bottom 2K of PGPE OCC Sram Space
+ G_pgpe_header_data->g_pgpe_occ_pstables_sram_addr = (uint32_t*)&occ_shared_data->pstate_table;//OCC Pstate table address
+ G_pgpe_header_data->g_pgpe_occ_pstables_len = sizeof(OCCPstateTable_t);//OCC Pstate table length
+ G_pgpe_header_data->g_pgpe_beacon_addr = (uint32_t*)&occ_shared_data->pgpe_beacon;
+ G_pgpe_header_data->g_quad_status_addr = (uint32_t*)&occ_shared_data->quad_pstate_0;
+
+ G_pgpe_header_data->g_pgpe_gppb_sram_addr = (uint32_t*)0xfff27000;//GPPB Sram Offset
}
diff --git a/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_header.h b/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_header.h
index 1c91be93..a39a9910 100644
--- a/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_header.h
+++ b/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_header.h
@@ -32,7 +32,7 @@
//\todo RTC: 164335 Use the structure from p9_hcode_image_defines.H
//when it's updated
//
-typedef struct pgpe_header_data
+/*typedef struct pgpe_header_data
{
uint32_t magic_number[2];
uint32_t* _system_reset_addr;
@@ -55,8 +55,35 @@ typedef struct pgpe_header_data
uint32_t* actual_quad_status_addr;
uint32_t* wof_tbl_addr;
uint32_t wof_tbl_lengh;
-} pgpe_header_data_t;
+} PgpeHeader_t;*/
+
+typedef struct
+{
+ uint32_t g_pgpe_magic_number[2]; // PGPE_1.0
+ uint32_t* g_pgpe_sys_reset_addr; // Fully qualified OCC address where pk_init resides
+ uint32_t* g_pgpe_shared_sram_addr; // SRAM address where shared SRAM begins
+ uint32_t* g_pgpe_ivpr_addr; // Beginning of PGPE region in OCC SRAM
+ uint32_t g_pgpe_shared_sram_len; // Length of shared SRAM area
+ uint32_t g_pgpe_build_date; // Build date for PGPE Image
+ uint32_t g_pgpe_build_ver; // Build Version
+ uint16_t g_pgpe_qm_flags; // QM Flags
+ uint16_t g_pgpe_reserve1; // Reserve field
+ uint32_t g_pgpe_reserve2; // Reserve field
+ uint32_t* g_pgpe_gppb_sram_addr; // Offset to Global P State Parameter Block
+ uint32_t g_pgpe_reserve3; // Reserve field
+ uint32_t* g_pgpe_gppb_mem_offset; // Offset to start of Global PS Param Block wrt start of HOMER.
+ uint32_t g_pgpe_gppb_length; // Length of Global P State Parameter Block
+ uint32_t* g_pgpe_gen_pstables_mem_offset; // Offset to PState Table wrt start of HOMER
+ uint32_t g_pgpe_gen_pstables_length; // Length of P State table
+ uint32_t* g_pgpe_occ_pstables_sram_addr; // Offset to start of OCC P-State table
+ uint32_t g_pgpe_occ_pstables_len; // Length of OCC P-State table
+ uint32_t* g_pgpe_beacon_addr; // SRAM addr where PGPE beacon is located
+ uint32_t* g_quad_status_addr; // Actual Quad address
+ uint32_t* g_wof_table_addr; // WOF Table Address
+ uint32_t g_wof_table_length; // WOF Table Length
+} PgpeHeader_t;
void p9_pgpe_header_init();
+void p9_pgpe_header_fill();
#endif //_P9_PGPE_HEADER_H_
diff --git a/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_ipc_handlers.c b/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_ipc_handlers.c
index c025196e..0540dc26 100644
--- a/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_ipc_handlers.c
+++ b/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_ipc_handlers.c
@@ -49,7 +49,7 @@ extern uint8_t G_pstatesEnabled;
extern PgpePstateRecord G_pgpe_pstate_record;
extern uint32_t G_already_sem_posted;
extern uint8_t G_pmcrOwner;
-extern pgpe_header_data_t* G_pgpe_header_data;
+extern PgpeHeader_t* G_pgpe_header_data;
//
//p9_pgpe_ipc_init
@@ -86,7 +86,7 @@ void p9_pgpe_ipc_405_start_stop(ipc_msg_t* cmd, void* arg)
ipc_async_cmd_t* async_cmd = (ipc_async_cmd_t*)cmd;
ipcmsg_start_stop_t* args = (ipcmsg_start_stop_t*)async_cmd->cmd_data;
- if(G_pgpe_header_data->pgpeflags & OCC_IPC_IMMEDIATE_RESP)
+ if(G_pgpe_header_data->g_pgpe_qm_flags & OCC_IPC_IMMEDIATE_RESP)
{
args->msg_cb.rc = PGPE_RC_SUCCESS;
ipc_send_rsp(cmd, IPC_RC_SUCCESS);
diff --git a/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_main.c b/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_main.c
index df7820f4..70152a19 100644
--- a/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_main.c
+++ b/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_main.c
@@ -78,8 +78,7 @@ IRQ_HANDLER_DEFAULT //OCCHW_IRQ_STRM2_PUSH
IRQ_HANDLER_DEFAULT //OCCHW_IRQ_STRM3_PULL
IRQ_HANDLER_DEFAULT //OCCHW_IRQ_STRM3_PUSH
IRQ_HANDLER_DEFAULT //OCCHW_IRQ_PMC_PCB_INTR_TYPE0_PENDING
-IRQ_HANDLER(p9_pgpe_irq_handler_pcb_type1, (void*) & G_pgpe_pstate_record.sem_process_req)
-//OCCHW_IRQ_PMC_PCB_INTR_TYPE1_PENDING
+IRQ_HANDLER_DEFAULT //OCCHW_IRQ_PMC_PCB_INTR_TYPE1_PENDING
IRQ_HANDLER_DEFAULT //OCCHW_IRQ_PMC_PCB_INTR_TYPE2_PENDING
IRQ_HANDLER_DEFAULT //OCCHW_IRQ_PMC_PCB_INTR_TYPE3_PENDING
IRQ_HANDLER_DEFAULT //OCCHW_IRQ_PMC_PCB_INTR_TYPE4_PENDING
@@ -122,13 +121,6 @@ void __eabi()
int
main(int argc, char** argv)
{
- //Read OCC_SCRATCH[PGPE_DEBUG_TRAP_ENABLE]]
- uint32_t occScr2 = in32(OCB_OCCS2);
-
- if (occScr2 & BIT32(PGPE_DEBUG_TRAP_ENABLE))
- {
- asm volatile ("tw 0, 31, 0");
- }
// Initializes kernel data (stack, threads, timebase, timers, etc.)
pk_initialize((PkAddress)G_kernel_stack,
@@ -136,6 +128,15 @@ main(int argc, char** argv)
0,
PPE_TIMEBASE_HZ);
+ // Read OCC_SCRATCH[PGPE_DEBUG_TRAP_ENABLE]
+ uint32_t occScr2 = in32(OCB_OCCS2);
+
+ if (occScr2 & BIT32(PGPE_DEBUG_TRAP_ENABLE))
+ {
+ PK_TRACE_DBG("MAIN: Debug trap detected");
+ asm volatile ("trap");
+ }
+
// Initialize the thread control block for G_p9_pgpe_thread_process_requests
pk_thread_create(&G_p9_pgpe_thread_process_requests,
(PkThreadRoutine)p9_pgpe_thread_process_requests,
@@ -166,6 +167,10 @@ main(int argc, char** argv)
//Do initialization
p9_pgpe_header_init();
+
+ PK_TRACE_DBG("Update PGPE Header with pertinent OCC SRAM information");
+ p9_pgpe_header_fill();
+
#if USE_BOOT_TEMP
//This is to be used for development and testing/verif
//if Global Pstate Parameter Block is not initialized through other means.
@@ -176,19 +181,21 @@ main(int argc, char** argv)
p9_pgpe_boot_temp(); //This is just temporary
#endif
+ PK_TRACE_DBG("Initializing from Global Pstate Parameter Block");
p9_pgpe_gppb_init();
#if GEN_PSTATE_TBL
+ PK_TRACE_DBG("Generating Pstate Tables to memory");
p9_pgpe_gen_pstate_info();
#endif
- //Setup FIT(Fixed-Interval Timer)
+ PK_TRACE_DBG("Setup FIT(Fixed-Interval Timer)");
p9_pgpe_fit_init();
- //Initialize all pstate related data to some default values
+ PK_TRACE_DBG("Initialize all pstate related data to some default values");
p9_pgpe_pstate_init();
- PK_TRACE_DBG("Starting PK Threads\n");
+ PK_TRACE_DBG("Starting PK Threads");
// Start running the highest priority thread.
// This function never returns
diff --git a/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_pstate.c b/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_pstate.c
index 12c93b9c..f5fc3a3b 100644
--- a/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_pstate.c
+++ b/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_pstate.c
@@ -38,7 +38,7 @@
//
//Global External Data
//
-extern pgpe_header_data_t* G_pgpe_header_data;
+extern PgpeHeader_t* G_pgpe_header_data;
//
//Global Data
@@ -106,8 +106,8 @@ void p9_pgpe_pstate_init()
G_globalPSNext = G_operating_points[VPD_PT_SET_BIASED_SYSP][POWERSAVE].pstate;
}
- G_quadState0 = (quad_state0_t*)G_pgpe_header_data->actual_quad_status_addr;
- G_quadState1 = (quad_state1_t*)(G_pgpe_header_data->actual_quad_status_addr + 2);
+ G_quadState0 = (quad_state0_t*)G_pgpe_header_data->g_quad_status_addr;
+ G_quadState1 = (quad_state1_t*)(G_pgpe_header_data->g_quad_status_addr + 2);
}
//
diff --git a/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_thread_actuate_pstates.c b/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_thread_actuate_pstates.c
index 2bdd43ee..9d20558a 100644
--- a/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_thread_actuate_pstates.c
+++ b/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_thread_actuate_pstates.c
@@ -61,7 +61,6 @@ extern uint8_t G_quadPSNext[MAX_QUADS]; //target Pstate per quad
extern uint8_t G_globalPSNext;
extern uint32_t G_eVidCurr, G_eVidNext;
extern GlobalPstateParmBlock* G_gppb;
-extern pgpe_header_data_t* G_pgpe_header_data;
extern uint8_t G_psClipMax[MAX_QUADS],
G_psClipMin[MAX_QUADS]; //pmin and pmax clips
extern uint8_t G_pmcrOwner;
@@ -94,9 +93,14 @@ void p9_pgpe_thread_actuate_pstates(void* arg)
//Initialize Shared SRAM to a known state
p9_pgpe_thread_actuate_init_actual_quad();
+ // Set OCC Scratch2[PGPE_ACTIVE]
+ uint32_t occScr2 = in32(OCB_OCCS2);
+ occScr2 |= BIT32(PGPE_ACTIVE);
#if PGPE_UNIT_TEST
- out32(OCB_OCCS2, BIT32(30));
+ occScr2 |= BIT32(30);
#endif
+ PK_TRACE_DBG("Setting PGPE_ACTIVE in OCC SCRATCH2 addr %X = %X\n", OCB_OCCS2, occScr2);
+ out32(OCB_OCCS2, occScr2);
//Thread Loop
while(1)
diff --git a/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_thread_process_requests.c b/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_thread_process_requests.c
index a800ab97..ef9896f9 100644
--- a/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_thread_process_requests.c
+++ b/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/p9_pgpe_thread_process_requests.c
@@ -36,8 +36,8 @@
//External Global Data
//
extern PgpePstateRecord G_pgpe_pstate_record;
-extern pgpe_header_data_t* G_pgpe_header_data;
extern uint8_t G_pstatesEnabled; //pstates_enabled/disable
+extern PgpeHeader_t* G_pgpe_header_data;
extern uint8_t G_wofEnabled; //pstates_enabled/disable
extern uint8_t G_wofPending; //wof enable pending
extern VFRT_Hcode_t* G_vfrt_ptr;
@@ -48,7 +48,6 @@ extern uint8_t G_coresPSRequest[MAX_CORES]; //per core requested pstate
extern uint32_t G_already_sem_posted;
extern quad_state0_t* G_quadState0;
extern quad_state1_t* G_quadState1;
-extern pgpe_header_data_t* G_pgpe_header_data;
extern ipc_async_cmd_t G_ipc_msg_pgpe_sgpe;
GPE_BUFFER(extern ipcmsg_p2s_ctrl_stop_updates_t G_sgpe_control_updt);
@@ -78,13 +77,11 @@ void p9_pgpe_thread_process_requests(void* arg)
//IPC Init
p9_pgpe_ipc_init();
- //Set OCC_FLAG[PGPE_ACTIVE]
- out32(OCB_OCCFLG_OR, BIT32(4));
#if EPM_P9_TUNING
asm volatile ("tw 0, 31, 0");
#endif
- PK_TRACE_DBG("PROCTH:Inited\n");
+ PK_TRACE_DBG("PROCTH:Inited; PGPE_ACTIVE set\n");
while(1)
{
@@ -293,7 +290,7 @@ void p9_pgpe_process_clip_updt()
G_ipc_pend_tbl[IPC_PEND_CLIP_UPDT].pending_processing = 0;
- if(G_pgpe_header_data->pgpeflags & OCC_IPC_IMMEDIATE_RESP)
+ if(G_pgpe_header_data->g_pgpe_qm_flags & OCC_IPC_IMMEDIATE_RESP)
{
PK_TRACE_DBG("PROCTH: Clip Updt Imme\n");
G_ipc_pend_tbl[IPC_PEND_CLIP_UPDT].pending_ack = 0;
@@ -343,7 +340,7 @@ void p9_pgpe_process_wof_ctrl()
G_ipc_pend_tbl[IPC_PEND_WOF_CTRL].pending_processing = 0;
- if(G_pgpe_header_data->pgpeflags & OCC_IPC_IMMEDIATE_RESP)
+ if(G_pgpe_header_data->g_pgpe_qm_flags & OCC_IPC_IMMEDIATE_RESP)
{
G_ipc_pend_tbl[IPC_PEND_WOF_CTRL].pending_ack = 0;
args->msg_cb.rc = PGPE_RC_SUCCESS;
@@ -438,7 +435,7 @@ void p9_pgpe_process_wof_vfrt()
G_ipc_pend_tbl[IPC_PEND_WOF_VFRT].pending_processing = 0;
- if(G_pgpe_header_data->pgpeflags & OCC_IPC_IMMEDIATE_RESP)
+ if(G_pgpe_header_data->g_pgpe_qm_flags & OCC_IPC_IMMEDIATE_RESP)
{
G_ipc_pend_tbl[IPC_PEND_WOF_VFRT].pending_ack = 0;
args->msg_cb.rc = PGPE_RC_SUCCESS;
@@ -531,7 +528,7 @@ void p9_pgpe_process_set_pmcr_req()
G_ipc_pend_tbl[IPC_PEND_SET_PMCR_REQ].pending_processing = 0;
- if(G_pgpe_header_data->pgpeflags & OCC_IPC_IMMEDIATE_RESP)
+ if(G_pgpe_header_data->g_pgpe_qm_flags & OCC_IPC_IMMEDIATE_RESP)
{
G_ipc_pend_tbl[IPC_PEND_SET_PMCR_REQ].pending_ack = 0;
args->msg_cb.rc = PGPE_RC_SUCCESS;
diff --git a/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/pk_app_cfg.h b/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/pk_app_cfg.h
index 818abb00..b4e73f1e 100644
--- a/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/pk_app_cfg.h
+++ b/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/pk_app_cfg.h
@@ -38,7 +38,7 @@
#define EPM_P9_TUNING 1
#define SIMICS_TUNING 0
#define GEN_PSTATE_TBL 0
-#define USE_BOOT_TEMP 1
+#define USE_BOOT_TEMP 0
#define BOOT_TEMP_SET_FULL_OCC_IPC_FUNC 1
#define DEV_DEBUG 1
#define PGPE_UNIT_TEST 1
diff --git a/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/pstate_gpe.mk b/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/pstate_gpe.mk
index 73eee021..c878a223 100644
--- a/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/pstate_gpe.mk
+++ b/import/chips/p9/procedures/ppe_closed/pgpe/pstate_gpe/pstate_gpe.mk
@@ -80,7 +80,7 @@ $(IMAGE)_TRACE_HASH_PREFIX := $(shell echo $(IMAGE) | md5sum | cut -c1-4 \
| xargs -i printf "%d" 0x{})
# Options for PK_TRACE
-$(IMAGE)_COMMONFLAGS+= -DPK_TRACE_LEVEL=0
+$(IMAGE)_COMMONFLAGS+= -DPK_TRACE_LEVEL=3
$(IMAGE)_COMMONFLAGS+= -DPK_TRACE_TIMER_OUTPUT=0
OpenPOWER on IntegriCloud