• Lorenzo Pieralisi's avatar
    ARM: vexpress: refine MCPM smp operations override criteria · 525d4015
    Lorenzo Pieralisi authored
    Current vexpress smp init code detects whether to override the
    default smp ops with MCPM smp ops by matching the "cci-400"
    compatible string, in that MCPM requires control over CCI ports
    to manage low-power states entry/exit.
    
    The "cci-400" compatible string check is a necessary but not
    sufficient condition for MCPM to work, because the cci-400
    can be made visible to the kernel, but firmware can nonetheless
    disable non-secure CCI ports control, while still allowing PMU
    access; if booted in non-secure world, the kernel would still
    blindly override smp operations with MCPM operations, resulting
    in kernel faults when the CCI ports programming interface is
    accessed from non-secure world.
    
    This means that the "cci-400" compatible string check would
    result in a false positive in systems that eg boot in HYP mode,
    where CCI ports non-secure access is explicitly not allowed,
    and it is reported in the respective device tree nodes with
    CCI ports marked as disabled.
    
    Refactor the smp operations initialization to make sure that
    the kernel is actually allowed to take control over CCI ports
    (by enabling MCPM smp operations) before overriding default
    vexpress smp operations.
    
    Cc: Liviu Dudau <liviu.dudau@arm.com>
    Cc: Marc Zyngier <marc.zyngier@arm.com>
    Acked-by: default avatarNicolas Pitre <nico@linaro.org>
    Tested-by: default avatarJon Medhurst <tixy@linaro.org>
    Signed-off-by: default avatarLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
    Signed-off-by: default avatarSudeep Holla <sudeep.holla@arm.com>
    525d4015
platsmp.c 2.26 KB