mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-02-17 20:40:33 -05:00
coresight: etm4x: Fix timestamp bit field handling
Timestamps in the trace data appear as all zeros on recent kernels, although the feature works correctly on old kernels (e.g., v6.12). Since commitc382ee674c("arm64/sysreg/tools: Move TRFCR definitions to sysreg"), the TRFCR_ELx_TS_{VIRTUAL|GUEST_PHYSICAL|PHYSICAL} macros were updated to remove the bit shift. As a result, the driver no longer shifts bits when operates the timestamp field. Fix this by using the FIELD_PREP() and FIELD_GET() helpers. Reported-by: Tamas Zsoldos <tamas.zsoldos@arm.com> Fixes:c382ee674c("arm64/sysreg/tools: Move TRFCR definitions to sysreg") Signed-off-by: Leo Yan <leo.yan@arm.com> Reviewed-by: James Clark <james.clark@linaro.org> Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com> Link: https://lore.kernel.org/r/20250519174945.2245271-2-leo.yan@arm.com
This commit is contained in:
committed by
Suzuki K Poulose
parent
d23bc38e8a
commit
ee811bc733
@@ -1237,7 +1237,7 @@ static void cpu_detect_trace_filtering(struct etmv4_drvdata *drvdata)
|
||||
* tracing at the kernel EL and EL0, forcing to use the
|
||||
* virtual time as the timestamp.
|
||||
*/
|
||||
trfcr = (TRFCR_EL1_TS_VIRTUAL |
|
||||
trfcr = (FIELD_PREP(TRFCR_EL1_TS_MASK, TRFCR_EL1_TS_VIRTUAL) |
|
||||
TRFCR_EL1_ExTRE |
|
||||
TRFCR_EL1_E0TRE);
|
||||
|
||||
|
||||
@@ -2320,11 +2320,11 @@ static ssize_t ts_source_show(struct device *dev,
|
||||
goto out;
|
||||
}
|
||||
|
||||
switch (drvdata->trfcr & TRFCR_EL1_TS_MASK) {
|
||||
val = FIELD_GET(TRFCR_EL1_TS_MASK, drvdata->trfcr);
|
||||
switch (val) {
|
||||
case TRFCR_EL1_TS_VIRTUAL:
|
||||
case TRFCR_EL1_TS_GUEST_PHYSICAL:
|
||||
case TRFCR_EL1_TS_PHYSICAL:
|
||||
val = FIELD_GET(TRFCR_EL1_TS_MASK, drvdata->trfcr);
|
||||
break;
|
||||
default:
|
||||
val = -1;
|
||||
|
||||
Reference in New Issue
Block a user