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: Suzuki K Poulose <suzuki.poulose@arm.com> Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
6276f9cba5
commit
1c7995e11c
|
@ -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);
|
||||
}
|
||||
|
||||
__tmc_etr_enable_hw(drvdata);
|
||||
return 0;
|
||||
return rc;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue