lkml.org 
[lkml]   [2018]   [Mar]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL for 4.15 52/78] coresight: Fix disabling of CoreSight TPIU
    Date
    From: Robert Walker <robert.walker@arm.com>

    [ Upstream commit 11595db8e17faaa05fadc25746c870e31276962f ]

    The CoreSight TPIU should be disabled when tracing to other sinks to allow
    them to operate at full bandwidth.

    This patch fixes tpiu_disable_hw() to correctly disable the TPIU by
    configuring the TPIU to stop on flush, initiating a manual flush, waiting
    for the flush to complete and then waits for the TPIU to indicate it has
    stopped.

    Signed-off-by: Robert Walker <robert.walker@arm.com>
    Tested-by: Mike Leach <mike.leach@linaro.org>
    Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    ---
    drivers/hwtracing/coresight/coresight-tpiu.c | 13 ++++++++++---
    1 file changed, 10 insertions(+), 3 deletions(-)

    diff --git a/drivers/hwtracing/coresight/coresight-tpiu.c b/drivers/hwtracing/coresight/coresight-tpiu.c
    index bef49a3a5ca7..4b46c494be5e 100644
    --- a/drivers/hwtracing/coresight/coresight-tpiu.c
    +++ b/drivers/hwtracing/coresight/coresight-tpiu.c
    @@ -46,8 +46,11 @@
    #define TPIU_ITATBCTR0 0xef8

    /** register definition **/
    +/* FFSR - 0x300 */
    +#define FFSR_FT_STOPPED BIT(1)
    /* FFCR - 0x304 */
    #define FFCR_FON_MAN BIT(6)
    +#define FFCR_STOP_FI BIT(12)

    /**
    * @base: memory mapped base address for this component.
    @@ -85,10 +88,14 @@ static void tpiu_disable_hw(struct tpiu_drvdata *drvdata)
    {
    CS_UNLOCK(drvdata->base);

    - /* Clear formatter controle reg. */
    - writel_relaxed(0x0, drvdata->base + TPIU_FFCR);
    + /* Clear formatter and stop on flush */
    + writel_relaxed(FFCR_STOP_FI, drvdata->base + TPIU_FFCR);
    /* Generate manual flush */
    - writel_relaxed(FFCR_FON_MAN, drvdata->base + TPIU_FFCR);
    + writel_relaxed(FFCR_STOP_FI | FFCR_FON_MAN, drvdata->base + TPIU_FFCR);
    + /* Wait for flush to complete */
    + coresight_timeout(drvdata->base, TPIU_FFCR, FFCR_FON_MAN, 0);
    + /* Wait for formatter to stop */
    + coresight_timeout(drvdata->base, TPIU_FFSR, FFSR_FT_STOPPED, 1);

    CS_LOCK(drvdata->base);
    }
    --
    2.14.1
    \
     
     \ /
      Last update: 2018-03-08 08:02    [W:2.101 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site