• Sudeep Holla's avatar
    coresight: always use stashed trace id value in etm4_trace_id · b1149ad9
    Sudeep Holla authored
    etm4_trace_id is not guaranteed to be executed on the CPU whose ETM is
    being accessed. This leads to exception similar to below one if the
    CPU whose ETM is being accessed is in deeper idle states. So it must
    be executed on the CPU whose ETM is being accessed.
    
    Unhandled fault: synchronous external abort (0x96000210) at 0xffff000008db4040
    Internal error: : 96000210 [#1] PREEMPT SMP
    Modules linked in:
    CPU: 5 PID: 5979 Comm: etm.sh Not tainted 4.7.0-rc3 #159
    Hardware name: ARM Juno development board (r2) (DT)
    task: ffff80096dd34b00 ti: ffff80096dfe4000 task.ti: ffff80096dfe4000
    PC is at etm4_trace_id+0x5c/0x90
    LR is at etm4_trace_id+0x3c/0x90
    Call trace:
     etm4_trace_id+0x5c/0x90
     coresight_id_match+0x78/0xa8
     bus_for_each_dev+0x60/0xa0
     coresight_enable+0xc0/0x1b8
     enable_source_store+0x3c/0x70
     dev_attr_store+0x18/0x28
     sysfs_kf_write+0x48/0x58
     kernfs_fop_write+0x14c/0x1e0
     __vfs_write+0x1c/0x100
     vfs_write+0xa0/0x1b8
     SyS_write+0x44/0xa0
     el0_svc_naked+0x24/0x28
    
    However, TRCTRACEIDR is not guaranteed to hold the previous programmed
    trace id if it enters deeper idle states. Further, the trace id that is
    computed in etm4_init_trace_id is programmed into TRCTRACEIDR only in
    etm4_enable_hw which happens much later in the sequence after
    coresight_id_match is executed from enable_source_store.
    
    This patch simplifies etm4_trace_id by returning the stashed trace id
    value similar to etm4_cpu_id.
    
    Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
    Signed-off-by: default avatarSudeep Holla <sudeep.holla@arm.com>
    Signed-off-by: default avatarMathieu Poirier <mathieu.poirier@linaro.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    b1149ad9
coresight-etm4x.c 22.9 KB