[Skiboot] [PATCH] hw/phb3: Fix crash in phb3_init_hw()

Gavin Shan gwshan at linux.vnet.ibm.com
Tue Jun 16 11:25:55 AEST 2015


On Tue, Jun 16, 2015 at 10:44:09AM +1000, Benjamin Herrenschmidt wrote:
>On Tue, 2015-06-16 at 10:33 +1000, Gavin Shan wrote:
>> phb3_init_hw() is called to do PHB reset in order to recover from
>> fenced PHB. During the time, we shouldn't try to add duplicated
>> property "ibm,32-bit-bypass-supported", which causes abortion.
>
>Just change that "reset" argument to be "first_init".
>
>Also don't use the word "abortion", it means something else ...
>

Ok. Will update in v2 accordingly.

Thanks,
Gavin

>Cheers,
>Ben.
>
>> Reported-by: Chad Larson <clarson at vnet.ibm.com>
>> Signed-off-by: Gavin Shan <gwshan at linux.vnet.ibm.com>
>> Tested-by: Chad Larson <clarson at vnet.ibm.com>
>> ---
>>  hw/phb3.c | 10 +++++-----
>>  1 file changed, 5 insertions(+), 5 deletions(-)
>> 
>> diff --git a/hw/phb3.c b/hw/phb3.c
>> index eb2ed46..3349472 100644
>> --- a/hw/phb3.c
>> +++ b/hw/phb3.c
>> @@ -50,7 +50,7 @@
>>  /* Enable this to disable error interrupts for debug purposes */
>>  #undef DISABLE_ERR_INTS
>>  
>> -static void phb3_init_hw(struct phb3 *p);
>> +static void phb3_init_hw(struct phb3 *p, bool reset);
>>  
>>  #define PHBDBG(p, fmt, a...)	prlog(PR_DEBUG, "PHB%d: " fmt, \
>>  				      (p)->phb.opal_id, ## a)
>> @@ -2386,7 +2386,7 @@ static int64_t phb3_sm_complete_reset(struct phb3 *p)
>>  	case PHB3_STATE_CRESET_REINIT:
>>  		p->flags &= ~PHB3_AIB_FENCED;
>>  		p->flags &= ~PHB3_CAPP_RECOVERY;
>> -		phb3_init_hw(p);
>> +		phb3_init_hw(p, true);
>>  
>>  		p->state = PHB3_STATE_CRESET_FRESET;
>>  		return phb3_set_sm_timeout(p, msecs_to_tb(100));
>> @@ -3793,7 +3793,7 @@ static int64_t phb3_fixup_pec_inits(struct phb3 *p)
>>  	return 0;
>>  }
>>  
>> -static void phb3_init_hw(struct phb3 *p)
>> +static void phb3_init_hw(struct phb3 *p, bool reset)
>>  {
>>  	uint64_t val;
>>  
>> @@ -3905,7 +3905,7 @@ static void phb3_init_hw(struct phb3 *p)
>>  #endif
>>  	if (p->rev >= PHB3_REV_MURANO_DD20)
>>  		val |= 0x0000010000000000;
>> -	if (p->rev >= PHB3_REV_NAPLES_DD10) {
>> +	if (!reset && p->rev >= PHB3_REV_NAPLES_DD10) {
>>  		/* Enable 32-bit bypass support on Naples and tell the OS
>>  		 * about it
>>  		 */
>> @@ -4279,7 +4279,7 @@ static void phb3_create(struct dt_node *np)
>>  			    p->base_lsi + PHB3_LSI_PCIE_INF, 2);
>>  #endif
>>  	/* Get the HW up and running */
>> -	phb3_init_hw(p);
>> +	phb3_init_hw(p, false);
>>  
>>  	/* Load capp microcode into capp unit */
>>  	capp_load_ucode(p);
>
>



More information about the Skiboot mailing list