[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