lkml.org 
[lkml]   [2019]   [Nov]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 349/422] coresight: etm4x: Configure EL2 exception level when kernel is running in HYP
    Date
    From: Tomasz Nowicki <tnowicki@caviumnetworks.com>

    [ Upstream commit b860801e3237ec4c74cf8de0be4816996757ae5c ]

    For non-VHE systems host kernel runs at EL1 and jumps to EL2 whenever
    hypervisor code should be executed. In this case ETM4x driver must
    restrict configuration to EL1 when it setups kernel tracing.
    However, there is no separate hypervisor privilege level when VHE
    is enabled, the host kernel runs at EL2.

    This patch fixes configuration of TRCACATRn register for VHE systems
    so that ETM_EXLEVEL_NS_HYP bit is used instead of ETM_EXLEVEL_NS_OS
    to on/off kernel tracing. At the same time, it moves common code
    to new helper.

    Signed-off-by: Tomasz Nowicki <tnowicki@caviumnetworks.com>
    Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/hwtracing/coresight/coresight-etm4x.c | 40 +++++++++----------
    1 file changed, 20 insertions(+), 20 deletions(-)

    diff --git a/drivers/hwtracing/coresight/coresight-etm4x.c b/drivers/hwtracing/coresight/coresight-etm4x.c
    index e45b5ec2f4512..b7bc08cf90c69 100644
    --- a/drivers/hwtracing/coresight/coresight-etm4x.c
    +++ b/drivers/hwtracing/coresight/coresight-etm4x.c
    @@ -28,6 +28,7 @@
    #include <linux/pm_runtime.h>
    #include <asm/sections.h>
    #include <asm/local.h>
    +#include <asm/virt.h>

    #include "coresight-etm4x.h"
    #include "coresight-etm-perf.h"
    @@ -616,7 +617,7 @@ static void etm4_set_default_config(struct etmv4_config *config)
    config->vinst_ctrl |= BIT(0);
    }

    -static u64 etm4_get_access_type(struct etmv4_config *config)
    +static u64 etm4_get_ns_access_type(struct etmv4_config *config)
    {
    u64 access_type = 0;

    @@ -627,17 +628,26 @@ static u64 etm4_get_access_type(struct etmv4_config *config)
    * Bit[13] Exception level 1 - OS
    * Bit[14] Exception level 2 - Hypervisor
    * Bit[15] Never implemented
    - *
    - * Always stay away from hypervisor mode.
    */
    - access_type = ETM_EXLEVEL_NS_HYP;
    -
    - if (config->mode & ETM_MODE_EXCL_KERN)
    - access_type |= ETM_EXLEVEL_NS_OS;
    + if (!is_kernel_in_hyp_mode()) {
    + /* Stay away from hypervisor mode for non-VHE */
    + access_type = ETM_EXLEVEL_NS_HYP;
    + if (config->mode & ETM_MODE_EXCL_KERN)
    + access_type |= ETM_EXLEVEL_NS_OS;
    + } else if (config->mode & ETM_MODE_EXCL_KERN) {
    + access_type = ETM_EXLEVEL_NS_HYP;
    + }

    if (config->mode & ETM_MODE_EXCL_USER)
    access_type |= ETM_EXLEVEL_NS_APP;

    + return access_type;
    +}
    +
    +static u64 etm4_get_access_type(struct etmv4_config *config)
    +{
    + u64 access_type = etm4_get_ns_access_type(config);
    +
    /*
    * EXLEVEL_S, bits[11:8], don't trace anything happening
    * in secure state.
    @@ -891,20 +901,10 @@ void etm4_config_trace_mode(struct etmv4_config *config)

    addr_acc = config->addr_acc[ETM_DEFAULT_ADDR_COMP];
    /* clear default config */
    - addr_acc &= ~(ETM_EXLEVEL_NS_APP | ETM_EXLEVEL_NS_OS);
    + addr_acc &= ~(ETM_EXLEVEL_NS_APP | ETM_EXLEVEL_NS_OS |
    + ETM_EXLEVEL_NS_HYP);

    - /*
    - * EXLEVEL_NS, bits[15:12]
    - * The Exception levels are:
    - * Bit[12] Exception level 0 - Application
    - * Bit[13] Exception level 1 - OS
    - * Bit[14] Exception level 2 - Hypervisor
    - * Bit[15] Never implemented
    - */
    - if (mode & ETM_MODE_EXCL_KERN)
    - addr_acc |= ETM_EXLEVEL_NS_OS;
    - else
    - addr_acc |= ETM_EXLEVEL_NS_APP;
    + addr_acc |= etm4_get_ns_access_type(config);

    config->addr_acc[ETM_DEFAULT_ADDR_COMP] = addr_acc;
    config->addr_acc[ETM_DEFAULT_ADDR_COMP + 1] = addr_acc;
    --
    2.20.1


    \
     
     \ /
      Last update: 2019-11-19 07:04    [W:4.262 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site