From 56882277747caed6530c617bc9ffe53323c06a93 Mon Sep 17 00:00:00 2001 From: Raja Das Date: Sun, 7 Jan 2018 20:59:32 -0600 Subject: Register FFDC call is handled within machine_check_handler Within the PK interrupt vector, if you have a function call from one function to another, it needs branch link instruction, but since the BL is already being used to jump from software context to the PK Vectored Interrupt context, the function call from within will corrupt the Link register. For interrupts like data_storage, instruction_storage, alignment_exception and program_exception, the save-off will capture the LR registers to indicate which interrupt was getting executed when halt happened. For Machine check handler, LR won't be valid. Change-Id: Iee17b37acd438c7bee2c956cac2de3ce64d04441 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/51587 Tested-by: FSP CI Jenkins Tested-by: Jenkins Server Tested-by: PPE CI Reviewed-by: Sachin Gupta Reviewed-by: Soma Bhanutej Reviewed-by: Douglas R. Gilbert Reviewed-by: Jennifer A. Stofer Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/51588 --- src/import/chips/p9/procedures/ppe/pk/ppe42/ppe42_exceptions.S | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/import/chips/p9/procedures/ppe/pk/ppe42/ppe42_exceptions.S b/src/import/chips/p9/procedures/ppe/pk/ppe42/ppe42_exceptions.S index ce463ebb..eaf96a3a 100644 --- a/src/import/chips/p9/procedures/ppe/pk/ppe42/ppe42_exceptions.S +++ b/src/import/chips/p9/procedures/ppe/pk/ppe42/ppe42_exceptions.S @@ -5,7 +5,7 @@ /* */ /* OpenPOWER sbe Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2015,2017 */ +/* Contributors Listed Below - COPYRIGHT 2015,2018 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -58,8 +58,10 @@ __vectors: ### will be forwarded to the program exception handler. __machine_check: - PPE_CAPTURE_INTERRUPT_FFDC - + ### PPE_CAPTURE_INTERRUPT_FFDC is called within machine_check_handler + ### There is a branch issue if the PPE_CAPTURE_INTERRUPT_FFDC is called + ### from outside, so an work around, FFDC is captured within machine + ### check handler. PPE42_MACHINE_CHECK_HANDLER ############################################################ @@ -106,7 +108,6 @@ __instruction_storage: PPE42_INSTRUCTION_STORAGE_HANDLER - ############################################################ # 0x00A0 : External Interrupt ############################################################ -- cgit v1.2.1