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

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

UPSTREAM: coresight: tmc-etr: Handle errors enabling CATU



(Upstream commit 1c7995e11cd3252d0db63dad948fc96f05d75b77).

Make sure we honor the errors in CATU device and abort the operation.
While at it, delay setting the etr_buf for the session until we are
sure that we are indeed enabling the ETR.

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: I8115bff427d9d4b5755a0d7e84ab53de76bdc83a
Signed-off-by: default avatarYabin Cui <yabinc@google.com>
parent 2d44cc18
Loading
Loading
Loading
Loading
+12 −7
Original line number Diff line number Diff line
@@ -751,12 +751,14 @@ tmc_etr_get_catu_device(struct tmc_drvdata *drvdata)
	return NULL;
}

static inline void tmc_etr_enable_catu(struct tmc_drvdata *drvdata)
static inline int tmc_etr_enable_catu(struct tmc_drvdata *drvdata,
				      struct etr_buf *etr_buf)
{
	struct coresight_device *catu = tmc_etr_get_catu_device(drvdata);

	if (catu && helper_ops(catu)->enable)
		helper_ops(catu)->enable(catu, drvdata->etr_buf);
		return helper_ops(catu)->enable(catu, etr_buf);
	return 0;
}

static inline void tmc_etr_disable_catu(struct tmc_drvdata *drvdata)
@@ -971,6 +973,8 @@ static void __tmc_etr_enable_hw(struct tmc_drvdata *drvdata)
static int tmc_etr_enable_hw(struct tmc_drvdata *drvdata,
			     struct etr_buf *etr_buf)
{
	int rc;

	/* Callers should provide an appropriate buffer for use */
	if (WARN_ON(!etr_buf))
		return -EINVAL;
@@ -982,16 +986,17 @@ static int tmc_etr_enable_hw(struct tmc_drvdata *drvdata,
	if (WARN_ON(drvdata->etr_buf))
		return -EBUSY;

	/* Set the buffer for the session */
	drvdata->etr_buf = etr_buf;
	/*
	 * If this ETR is connected to a CATU, enable it before we turn
	 * this on.
	 */
	tmc_etr_enable_catu(drvdata);

	rc = tmc_etr_enable_catu(drvdata, etr_buf);
	if (!rc) {
		drvdata->etr_buf = etr_buf;
		__tmc_etr_enable_hw(drvdata);
	return 0;
	}

	return rc;
}

/*