[PATCH v5 07/11] coresight: etm4x: Remove the redundant DSB
Yeoreum Yun
yeoreum.yun at arm.com
Mon Nov 10 03:47:43 PST 2025
Reviewed-by: Yeoreum Yun <yeoreum.yun at arm.com>
> As recommended in section 4.3.7 "Synchronization when using the
> memory-mapped interface" of ARM IHI0064H.b:
>
> When using the memory-mapped interface to program the trace unit, the
> trace analyzer must ensure that writes have completed, to ensure that
> the trace unit is fully programmed and either enabled or disabled.
>
> To ensure writes have completed, the trace analyzer can do ...
>
> If the memory marked is as Device-nGnRE or stronger, read back the
> value of any register in the trace unit. This relies on peripheral
> coherence order defined in the Arm architecture.
>
> Polling TRCSTATR ensures the previous write has completed. Therefore,
> removes the redundant DSB barrier in the enabling flow.
>
> Update the comment in the disable flow for consistency.
>
> Signed-off-by: Leo Yan <leo.yan at arm.com>
> ---
> drivers/hwtracing/coresight/coresight-etm4x-core.c | 23 +++++++++++++++++-----
> 1 file changed, 18 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/hwtracing/coresight/coresight-etm4x-core.c b/drivers/hwtracing/coresight/coresight-etm4x-core.c
> index fdda924a2c7117a6828e5325d78586b09e75febd..bdf5ab85b2213dfd601391fdcf50960667fa7cea 100644
> --- a/drivers/hwtracing/coresight/coresight-etm4x-core.c
> +++ b/drivers/hwtracing/coresight/coresight-etm4x-core.c
> @@ -475,10 +475,16 @@ static int etm4_enable_trace_unit(struct etmv4_drvdata *drvdata)
> }
>
> /*
> - * As recommended by section 4.3.7 ("Synchronization when using the
> - * memory-mapped interface") of ARM IHI 0064D
> + * As recommended in section 4.3.7 (Synchronization of register updates)
> + * of ARM IHI 0064H.b, the self-hosted trace analyzer always executes an
> + * ISB instruction after programming the trace unit registers.
> + *
> + * For the memory-mapped interface, the registers are mapped as Device
> + * type (Device-nGnRE). Reading back the value of any register in the
> + * trace unit ensures that all writes have completed. Therefore, polling
> + * on TRCSTATR guarantees that the writing TRCPRGCTLR is complete, and
> + * no explicit dsb() is required at here.
> */
> - dsb(sy);
> isb();
>
> return 0;
> @@ -974,8 +980,15 @@ static void etm4_disable_trace_unit(struct etmv4_drvdata *drvdata)
> dev_err(etm_dev,
> "timeout while waiting for PM stable Trace Status\n");
> /*
> - * As recommended by section 4.3.7 (Synchronization of register updates)
> - * of ARM IHI 0064H.b.
> + * As recommended in section 4.3.7 (Synchronization of register updates)
> + * of ARM IHI 0064H.b, the self-hosted trace analyzer always executes an
> + * ISB instruction after programming the trace unit registers.
> + *
> + * For the memory-mapped interface, the registers are mapped as Device
> + * type (Device-nGnRE). Reading back the value of any register in the
> + * trace unit ensures that all writes have completed. Therefore, polling
> + * on TRCSTATR guarantees that the writing TRCPRGCTLR is complete, and
> + * no explicit dsb() is required at here.
> */
> isb();
> }
>
> --
> 2.34.1
>
--
Sincerely,
Yeoreum Yun
More information about the linux-arm-kernel
mailing list