[Skiboot] [RFC PATCH v2 7/8] occ: Disable OCC on UV systems
Oliver O'Halloran
oohall at gmail.com
Mon Nov 18 10:58:48 AEDT 2019
On Sat, Sep 21, 2019 at 12:04 AM Ryan Grimm <grimm at linux.ibm.com> wrote:
>
> On Ultravisor enabled system, temporarily disable OCC irq paths for
> shared memory updates when OCC is up, so as to boot the system.
>
> We also disable the OPAL-OCC command response interface which is
> required for Sensors. This will be enabled at a later point when we
> can read the OCC Common area residing in secure memory region.
>
> Disable stop levels if they are enabled in the SPIRA.
>
> Skip pstates_init and occ_sensor_init as well.
>
> Signed-off-by: Shilpasri G Bhat <shilpa.bhat at linux.vnet.ibm.com>
> Signed-off-by: Gautham R. Shenoy <ego at linux.vnet.ibm.com>
> Signed-off-by: Ryan Grimm <grimm at linux.ibm.com>
Is there any OCC functions that are still enabled? If not, I'd be
happier if we just had a way to disable the OCC entirely rather than
doing S bits checks and playing wack-a-mole.
> ---
> hdata/spira.c | 4 ++++
> hw/occ-sensor.c | 6 ++++++
> hw/occ.c | 25 ++++++++++++++++++++++++-
> 3 files changed, 34 insertions(+), 1 deletion(-)
>
> diff --git a/hdata/spira.c b/hdata/spira.c
> index f6003ea0..5c65b139 100644
> --- a/hdata/spira.c
> +++ b/hdata/spira.c
> @@ -1281,6 +1281,10 @@ static void add_stop_levels(void)
> if (proc_gen < proc_gen_p9)
> return;
>
> + if (is_msr_bit_set(MSR_S)) {
> + prlog(PR_INFO, "SPIRA: Skipping stop levels because S BIT set\n");
> + }
> +
> /*
> * OPAL only exports a single set of flags to indicate the supported
> * STOP modes while the HDAT descibes the support top levels *per chip*
> diff --git a/hw/occ-sensor.c b/hw/occ-sensor.c
> index d06ca725..a0f47610 100644
> --- a/hw/occ-sensor.c
> +++ b/hw/occ-sensor.c
> @@ -12,6 +12,7 @@
> #include <device.h>
> #include <cpu.h>
> #include <occ.h>
> +#include <ultravisor.h>
>
> enum sensor_attr {
> SENSOR_SAMPLE,
> @@ -492,6 +493,11 @@ bool occ_sensors_init(void)
> int occ_num = 0, i;
> bool has_gpu = false;
>
> + if (is_uv_present()) {
> + prlog(PR_DEBUG, "UV HACK: Skipping %s because MSR_S set\n", __func__);
> + return false;
> + }
> +
> /* OCC inband sensors is only supported in P9 */
> if (proc_gen != proc_gen_p9)
> return false;
> diff --git a/hw/occ.c b/hw/occ.c
> index db2744ff..35582c89 100644
> --- a/hw/occ.c
> +++ b/hw/occ.c
> @@ -872,6 +872,11 @@ static void occ_throttle_poll(void *data __unused)
> struct opal_occ_msg occ_msg;
> int rc;
>
> + if (is_uv_present()) {
> + prlog(PR_DEBUG, "OCC: %s currently unsupported on ultravisor\n", __func__);
> + return;
> + }
> +
> if (!try_lock(&occ_lock))
> return;
> if (occ_reset) {
> @@ -1185,6 +1190,11 @@ static void handle_occ_rsp(uint32_t chip_id)
> struct opal_command_buffer *cmd;
> struct occ_response_buffer *rsp;
>
> + if (is_uv_present()) {
> + prlog(PR_DEBUG, "OCC: %s currently unsupported on ultravisor\n", __func__);
> + return;
> + }
> +
> chip = get_chip_cmd_interface(chip_id);
> if (!chip)
> return;
> @@ -1719,6 +1729,11 @@ void occ_pstates_init(void)
> u8 domain_runs_at;
> static bool occ_pstates_initialized;
>
> + if (is_msr_bit_set(MSR_S)) {
> + prlog(PR_DEBUG, "UV HACK: Skipping %s because UV is present\n", __func__);
> + return;
> + }
> +
> /* OCC is supported in P8 and P9 */
> if (proc_gen < proc_gen_p8)
> return;
> @@ -1810,9 +1825,17 @@ void occ_pstates_init(void)
> /* Add opal_poller to poll OCC throttle status of each chip */
> for_each_chip(chip)
> chip->throttle = 0;
> - opal_add_poller(occ_throttle_poll, NULL);
> occ_pstates_initialized = true;
>
> + /*
> + * On Ultravisor systems, we don't yet support
> + * OCC Poller and OPAL-OCC command-response interface.
> + */
> + if (is_uv_present()) {
> + prlog(PR_DEBUG, "OCC: Skipping throttle-poll,CMD-RSP interface on UV\n");
> + return;
> + }
> + opal_add_poller(occ_throttle_poll, NULL);
> /* Init OPAL-OCC command-response interface */
> occ_cmd_interface_init();
>
> --
> 2.21.0
>
> _______________________________________________
> Skiboot mailing list
> Skiboot at lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/skiboot
More information about the Skiboot
mailing list