Commit 1c7995e1 authored by Suzuki K Poulose's avatar Suzuki K Poulose Committed by Greg Kroah-Hartman

coresight: tmc-etr: Handle errors enabling CATU

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>
parent 6276f9cb
...@@ -751,12 +751,14 @@ tmc_etr_get_catu_device(struct tmc_drvdata *drvdata) ...@@ -751,12 +751,14 @@ tmc_etr_get_catu_device(struct tmc_drvdata *drvdata)
return NULL; 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); struct coresight_device *catu = tmc_etr_get_catu_device(drvdata);
if (catu && helper_ops(catu)->enable) 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) 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) ...@@ -971,6 +973,8 @@ static void __tmc_etr_enable_hw(struct tmc_drvdata *drvdata)
static int tmc_etr_enable_hw(struct tmc_drvdata *drvdata, static int tmc_etr_enable_hw(struct tmc_drvdata *drvdata,
struct etr_buf *etr_buf) struct etr_buf *etr_buf)
{ {
int rc;
/* Callers should provide an appropriate buffer for use */ /* Callers should provide an appropriate buffer for use */
if (WARN_ON(!etr_buf)) if (WARN_ON(!etr_buf))
return -EINVAL; return -EINVAL;
...@@ -982,16 +986,17 @@ static int tmc_etr_enable_hw(struct tmc_drvdata *drvdata, ...@@ -982,16 +986,17 @@ static int tmc_etr_enable_hw(struct tmc_drvdata *drvdata,
if (WARN_ON(drvdata->etr_buf)) if (WARN_ON(drvdata->etr_buf))
return -EBUSY; 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 * If this ETR is connected to a CATU, enable it before we turn
* this on. * 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); __tmc_etr_enable_hw(drvdata);
return 0; }
return rc;
} }
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment