Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e718162c authored by Suzuki K Poulose's avatar Suzuki K Poulose Committed by Yabin Cui
Browse files

UPSTREAM: coresight: dynamic-replicator: Claim device for use



(Upstream commit 4e33d694376e7f57d788e734dc96fdbd3c408768).

Use CLAIM protocol to make sure the device is available for use.

Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
Signed-off-by: default avatarSuzuki K Poulose <suzuki.poulose@arm.com>
Signed-off-by: default avatarMathieu Poirier <mathieu.poirier@linaro.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>

Bug: 140266694
Change-Id: Iad04d371710f781287a530987b83e2c5317fd75d
Signed-off-by: default avatarYabin Cui <yabinc@google.com>
parent 289179cb
Loading
Loading
Loading
Loading
+18 −5
Original line number Diff line number Diff line
@@ -41,8 +41,11 @@ static void replicator_reset(struct replicator_state *drvdata)
{
	CS_UNLOCK(drvdata->base);

	if (!coresight_claim_device_unlocked(drvdata->base)) {
		writel_relaxed(0xff, drvdata->base + REPLICATOR_IDFILTER0);
		writel_relaxed(0xff, drvdata->base + REPLICATOR_IDFILTER1);
		coresight_disclaim_device_unlocked(drvdata->base);
	}

	CS_LOCK(drvdata->base);
}
@@ -50,6 +53,7 @@ static void replicator_reset(struct replicator_state *drvdata)
static int replicator_enable(struct coresight_device *csdev, int inport,
			      int outport)
{
	int rc = 0;
	u32 reg;
	struct replicator_state *drvdata = dev_get_drvdata(csdev->dev.parent);

@@ -67,13 +71,19 @@ static int replicator_enable(struct coresight_device *csdev, int inport,

	CS_UNLOCK(drvdata->base);

	if ((readl_relaxed(drvdata->base + REPLICATOR_IDFILTER0) == 0xff) &&
	    (readl_relaxed(drvdata->base + REPLICATOR_IDFILTER1) == 0xff))
		rc = coresight_claim_device_unlocked(drvdata->base);

	/* Ensure that the outport is enabled. */
	if (!rc) {
		writel_relaxed(0x00, drvdata->base + reg);
		dev_dbg(drvdata->dev, "REPLICATOR enabled\n");
	}

	CS_LOCK(drvdata->base);

	dev_dbg(drvdata->dev, "REPLICATOR enabled\n");
	return 0;
	return rc;
}

static void replicator_disable(struct coresight_device *csdev, int inport,
@@ -99,6 +109,9 @@ static void replicator_disable(struct coresight_device *csdev, int inport,
	/* disable the flow of ATB data through port */
	writel_relaxed(0xff, drvdata->base + reg);

	if ((readl_relaxed(drvdata->base + REPLICATOR_IDFILTER0) == 0xff) &&
	    (readl_relaxed(drvdata->base + REPLICATOR_IDFILTER1) == 0xff))
		coresight_disclaim_device_unlocked(drvdata->base);
	CS_LOCK(drvdata->base);

	dev_dbg(drvdata->dev, "REPLICATOR disabled\n");