mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-09 12:17:12 +09:00
UPSTREAM: coresight: etm4x: Add necessary synchronization for sysreg access
As per the specification any update to the TRCPRGCTLR must be synchronized
by a context synchronization event (in our case an explicist ISB) before
the TRCSTATR is checked.
Bug: 174685394
Link: https://lore.kernel.org/r/20210110224850.1880240-22-suzuki.poulose@arm.com
Cc: Mike Leach <mike.leach@linaro.org>
Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Link: https://lore.kernel.org/r/20210201181351.1475223-24-mathieu.poirier@linaro.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 1ab3bb9df5)
Signed-off-by: Qais Yousef <qais.yousef@arm.com>
Change-Id: I21eac5abfc4a683a121208b9de7e1934fcf7c8d0
This commit is contained in:
committed by
Todd Kjos
parent
f0675f6596
commit
7b2b89a818
@@ -284,6 +284,15 @@ static int etm4_enable_hw(struct etmv4_drvdata *drvdata)
|
||||
/* Disable the trace unit before programming trace registers */
|
||||
etm4x_relaxed_write32(csa, 0, TRCPRGCTLR);
|
||||
|
||||
/*
|
||||
* If we use system instructions, we need to synchronize the
|
||||
* write to the TRCPRGCTLR, before accessing the TRCSTATR.
|
||||
* See ARM IHI0064F, section
|
||||
* "4.3.7 Synchronization of register updates"
|
||||
*/
|
||||
if (!csa->io_mem)
|
||||
isb();
|
||||
|
||||
/* wait for TRCSTATR.IDLE to go up */
|
||||
if (coresight_timeout(csa, TRCSTATR, TRCSTATR_IDLE_BIT, 1))
|
||||
dev_err(etm_dev,
|
||||
@@ -362,6 +371,10 @@ static int etm4_enable_hw(struct etmv4_drvdata *drvdata)
|
||||
/* Enable the trace unit */
|
||||
etm4x_relaxed_write32(csa, 1, TRCPRGCTLR);
|
||||
|
||||
/* Synchronize the register updates for sysreg access */
|
||||
if (!csa->io_mem)
|
||||
isb();
|
||||
|
||||
/* wait for TRCSTATR.IDLE to go back down to '0' */
|
||||
if (coresight_timeout(csa, TRCSTATR, TRCSTATR_IDLE_BIT, 0))
|
||||
dev_err(etm_dev,
|
||||
|
||||
Reference in New Issue
Block a user