[Skiboot] [PATCH] init: Perform pstates-init before dt blob creation

Vasant Hegde hegdevasant at linux.vnet.ibm.com
Thu Jul 11 15:26:04 AEST 2019


On 07/11/2019 10:40 AM, Vasant Hegde wrote:
> On 07/10/2019 05:59 PM, Gautham R. Shenoy wrote:
>> From: "Gautham R. Shenoy" <ego at linux.vnet.ibm.com>
>>
>> On FSP based systems (particularly POWER8), we perform
>> occ_pstates_init() late in the boot to allow OCC to be loaded. Hence
>> this was being performed in platform.exit(). occ_pstates_init() would
>> add pstate information into the device-tree.
>>
>> A recent commit 9fc0c1287ada ("Move FSP specific op-panel calls to
>> platform.exit()") moved the invocation of platform.exit() after the
>> creation of device-tree blob. As a result, on FSP based systems, we
>> don't have the pstate information in the device-tree, and thus the
>> Kernel is unable to perform frequency scaling.
>>
>> Fix this by moving occ_pstates_init() out of ibm_fsp_exit() and call
>> it before the creation of the device-tree blob.
>>
>> Fixes: commit 9fc0c1287ada ("Move FSP specific op-panel calls to
>> platform.exit()")
>>
>> Signed-off-by: Gautham R. Shenoy <ego at linux.vnet.ibm.com>
> 
> Thanks for the fix.
> 
>> ---
>>   core/init.c                | 6 ++++++
>>   platforms/ibm-fsp/common.c | 7 -------
>>   2 files changed, 6 insertions(+), 7 deletions(-)
>>
>> diff --git a/core/init.c b/core/init.c
>> index d0f28f2..8eb0729 100644
>> --- a/core/init.c
>> +++ b/core/init.c
>> @@ -557,6 +557,12 @@ void __noreturn load_and_boot_kernel(bool is_reboot)
>>           if (!occ_sensors_init())
>>               dts_sensor_create_nodes(sensor_node);
>>
>> +        /*
>> +         * OCC takes few secs to boot on FSP systems. Call
>> +         * this as late as as possible to avoid delay.
>> +         */
>> +        if (!platform.bmc)
>> +            occ_pstates_init();
> 
> So you will end up calling occ_pstates_init() on simulators as well. Do you 
> really want that?
> Today its occ_pstates, tomorrow we may have something else.
> IMO we should continue to have all those things inside platform.exit() function 
> and move
> platform.exit function just before creating dtb.

Does this work? And we should put fat comment explaining why we should have 
platform.exit before create_dtb().


diff --git a/core/init.c b/core/init.c
index fb55d4a9d..b8c2c05b9 100644
--- a/core/init.c
+++ b/core/init.c
@@ -580,6 +580,9 @@ void __noreturn load_and_boot_kernel(bool is_reboot)

         add_fast_reboot_dt_entries();

+       if (platform.exit)
+               platform.exit();
+
         /* Create the device tree blob to boot OS. */
         fdt = create_dtb(dt_root, false);
         if (!fdt) {
@@ -603,9 +606,6 @@ void __noreturn load_and_boot_kernel(bool is_reboot)
                 assert(0);
         }

-       if (platform.exit)
-               platform.exit();
-
         /* Take processors out of nap */
         cpu_set_sreset_enable(false);
         cpu_set_ipi_enable(false);

-Vasant



More information about the Skiboot mailing list