[Skiboot] [RFC PATCH 3/3] occ: Add support for Version 0x90 OCC_OPAL shared memory region

Shilpasri G Bhat shilpa.bhat at linux.vnet.ibm.com
Wed Sep 14 05:11:07 AEST 2016


Hi,

On 09/13/2016 11:26 PM, Cédric Le Goater wrote:
> On 09/13/2016 04:50 PM, Shilpasri G Bhat wrote:
>> This patch enables pstate table parsing support for P9. It
>> introduces below device tree changes.
>> - Add a new node per chip in /ibm,opal/power-mgt called occ.
>> 	occ at 3ffd9f8000 {
>> 		reg = <0x3f 0xfd9f8000>;
>> 		ibm,chip-id = <0x0>;
>> 		ibm,pstate-vdds = <0x4e4e4f4f 0x4f505152 0x53545556
>> 		0x5758595a 0x5b5c5d5e 0x5f606162 0x63646565 0x66676868
>> 		0x696a6a6b 0x6c6d6d6e 0x6f6f7071 0x72727374 0x74757677
>> 		0x7778797a 0x7a7b7c7c>;
>> 		ibm,pstate-vcss = <0x4446484a 0x4c4e4f50 0x50515253
>> 		0x54555556 0x5758595a 0x5a5b5c5d 0x5d5e5e5e 0x5e5f5f5f
>> 		0x5f606060 0x61616161 0x62626263 0x63636364 0x64646465
>> 		0x65656666 0x66666767>;
>> 		ibm,pstate-core-max = <0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0>;
>> 		phandle = <0x10000326>;
>> 	};
>> - Move VID (ibm,pstate-vdds, ibm,pstate-vcss) and max pstate for
>>   #n active cores array (ibm,pstate-core-max) in to the new per-chip
>>   /ibm,opal/power-mgt/occ node as these properties are unique to
>>   chip.
>> - WOF is supported from version 0x02. Till now we have been adding
>>   max ultra-turbo pstate(ibm,pstate-ultra-turbo), max turbo pstate
>>   (ibm,pstate-turbo) and max pstate-per-n-core (ibm,pstate-core-max)
>>   only when WOF is enabled. This patch will add these properties
>>   even when WOF is disabled. When WOF is disabled max ultra turbo is
>>   equal to max turbo pstate and max pstate-per-n-core array has all
>>   entries equal to max turbo pstate. So the above three properties
>>   are added whenever WOF is supported to ease the reporting of these
>>   data in host.
>>
>> Signed-off-by: Shilpasri G Bhat <shilpa.bhat at linux.vnet.ibm.com>
>> ---
>>  hw/occ.c | 535 +++++++++++++++++++++++++++++++++++++++++----------------------
>>  1 file changed, 349 insertions(+), 186 deletions(-)
>>
>> diff --git a/hw/occ.c b/hw/occ.c
>> index 1ca338b..cdfe142 100644
>> --- a/hw/occ.c
>> +++ b/hw/occ.c
>> @@ -31,41 +31,105 @@
>>  /* OCC Communication Area for PStates */
>>  
>>  #define P8_HOMER_SAPPHIRE_DATA_OFFSET	0x1F8000
>> -
>> -#define MAX_PSTATES 256
>> +#define P9_HOMER_SAPPHIRE_DATA_OFFSET	0x0E2000
>> +#define MAX_PSTATES			256
>> +#define MAX_P8_CORES			16
> 
> This is 12 only. 

Yup. I will change MAX_P8_CORES to 12 and add extra padding of 4 bytes to the
end of V2 pstate table.

> 
>> +#define MAX_P9_CORES			24
>> +#define MAX_OPAL_CMD_DATA_LENGTH	4090
>> +#define MAX_OCC_RSP_DATA_LENGTH		8698
> 
> [ ... ] 
> 
>> +	/* Dump first 16 bytes of PState table */
>>  	prlog(PR_DEBUG, "OCC: Data (%16llx) = %16llx %16llx\n",
>> -	      occ_data_area,
>> -	      *(uint64_t *)occ_data_area,
>> -	      *(uint64_t *)(occ_data_area+8));
>> -	
>> -	occ_data = (struct occ_pstate_table *)occ_data_area;
>> +	      (uint64_t)occ_data, *(uint64_t *)occ_data,
>> +	      *(((uint64_t *)occ_data) + 1));
> 
> May be introduce a temporary variable ? 

I removed the temporary variable 'occ_data_area' as it was only used in the
above prlog. I will just keep it as is if it hampers readability.

> 
> 
> C.
> 

Thanks and Regards,
Shilpa



More information about the Skiboot mailing list