* [PATCH v2 0/2] Add modem debug features
@ 2020-07-21 11:29 Sibi Sankar
2020-07-21 11:29 ` [PATCH v2 1/2] remoteproc: qcom_q6v5_mss: Add modem debug policy support Sibi Sankar
2020-07-21 11:29 ` [PATCH v2 2/2] remoteproc: qcom_q6v5_mss: Add MBA log extraction support Sibi Sankar
0 siblings, 2 replies; 6+ messages in thread
From: Sibi Sankar @ 2020-07-21 11:29 UTC (permalink / raw)
To: bjorn.andersson
Cc: agross, linux-arm-msm, linux-remoteproc, linux-kernel, evgreen,
ohad, Sibi Sankar
The series adds support for the following modem debug features:
* Modem debug policy which enables coredumps/live debug on secure devices
* MBA text logs extraction on SC7180 SoCs
V2:
* Use request_firmware_direct [Bjorn]
* Use Bjorn's template to show if debug policy is present
* Add size check to prevent memcpy out of bounds [Bjorn]
* Don't dump logs in mba_reclaim path [Bjorn]
* Move has_mba_logs check to q6v5_dump_mba_logs [Bjorn]
* SDM845 mss was incorrectly marked to support mba logs
* Drop patch 3 where mba text logs are added to imem for now
Sibi Sankar (2):
remoteproc: qcom_q6v5_mss: Add modem debug policy support
remoteproc: qcom_q6v5_mss: Add MBA log extraction support
drivers/remoteproc/qcom_q6v5_mss.c | 54 ++++++++++++++++++++++++++++--
1 file changed, 52 insertions(+), 2 deletions(-)
--
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v2 1/2] remoteproc: qcom_q6v5_mss: Add modem debug policy support
2020-07-21 11:29 [PATCH v2 0/2] Add modem debug features Sibi Sankar
@ 2020-07-21 11:29 ` Sibi Sankar
2020-07-22 3:54 ` Bjorn Andersson
2020-07-21 11:29 ` [PATCH v2 2/2] remoteproc: qcom_q6v5_mss: Add MBA log extraction support Sibi Sankar
1 sibling, 1 reply; 6+ messages in thread
From: Sibi Sankar @ 2020-07-21 11:29 UTC (permalink / raw)
To: bjorn.andersson
Cc: agross, linux-arm-msm, linux-remoteproc, linux-kernel, evgreen,
ohad, Sibi Sankar
Add modem debug policy support which will enable coredumps and live
debug support when the msadp firmware is present on secure devices.
Signed-off-by: Sibi Sankar <sibis@codeaurora.org>
---
v2:
* Use request_firmware_direct [Bjorn]
* Use Bjorn's template to show if debug policy is present
* Add size check to prevent memcpy out of bounds [Bjorn]
drivers/remoteproc/qcom_q6v5_mss.c | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
diff --git a/drivers/remoteproc/qcom_q6v5_mss.c b/drivers/remoteproc/qcom_q6v5_mss.c
index 0b6f260eb5349..49cd16e050533 100644
--- a/drivers/remoteproc/qcom_q6v5_mss.c
+++ b/drivers/remoteproc/qcom_q6v5_mss.c
@@ -189,6 +189,7 @@ struct q6v5 {
phys_addr_t mba_phys;
void *mba_region;
size_t mba_size;
+ size_t dp_size;
phys_addr_t mpss_phys;
phys_addr_t mpss_reloc;
@@ -408,6 +409,14 @@ static int q6v5_xfer_mem_ownership(struct q6v5 *qproc, int *current_perm,
static int q6v5_load(struct rproc *rproc, const struct firmware *fw)
{
struct q6v5 *qproc = rproc->priv;
+ const struct firmware *dp_fw;
+
+ if (!request_firmware_direct(&dp_fw, "msadp", qproc->dev) && fw->size <= SZ_1M &&
+ (SZ_1M + dp_fw->size) <= qproc->mba_size) {
+ memcpy(qproc->mba_region + SZ_1M, dp_fw->data, dp_fw->size);
+ qproc->dp_size = dp_fw->size;
+ release_firmware(dp_fw);
+ }
memcpy(qproc->mba_region, fw->data, fw->size);
@@ -896,6 +905,10 @@ static int q6v5_mba_load(struct q6v5 *qproc)
}
writel(qproc->mba_phys, qproc->rmb_base + RMB_MBA_IMAGE_REG);
+ if (qproc->dp_size) {
+ writel(qproc->mba_phys + SZ_1M, qproc->rmb_base + RMB_PMI_CODE_START_REG);
+ writel(qproc->dp_size, qproc->rmb_base + RMB_PMI_CODE_LENGTH_REG);
+ }
ret = q6v5proc_reset(qproc);
if (ret)
@@ -1257,7 +1270,8 @@ static int q6v5_start(struct rproc *rproc)
if (ret)
return ret;
- dev_info(qproc->dev, "MBA booted, loading mpss\n");
+ dev_info(qproc->dev, "MBA booted with%s debug policy, loading mpss\n",
+ qproc->dp_size ? "" : "out");
ret = q6v5_mpss_load(qproc);
if (ret)
--
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v2 2/2] remoteproc: qcom_q6v5_mss: Add MBA log extraction support
2020-07-21 11:29 [PATCH v2 0/2] Add modem debug features Sibi Sankar
2020-07-21 11:29 ` [PATCH v2 1/2] remoteproc: qcom_q6v5_mss: Add modem debug policy support Sibi Sankar
@ 2020-07-21 11:29 ` Sibi Sankar
2020-07-22 4:23 ` Bjorn Andersson
1 sibling, 1 reply; 6+ messages in thread
From: Sibi Sankar @ 2020-07-21 11:29 UTC (permalink / raw)
To: bjorn.andersson
Cc: agross, linux-arm-msm, linux-remoteproc, linux-kernel, evgreen,
ohad, Sibi Sankar
On SC7180 the MBA firmware stores the bootup text logs in a 4K segment
at the beginning of the MBA region. Add support to extract the logs
which will be useful to debug mba boot/authentication issues.
Signed-off-by: Sibi Sankar <sibis@codeaurora.org>
---
V2:
* Don't dump logs in mba_reclaim path [Bjorn]
* Move has_mba_logs check to q6v5_dump_mba_logs [Bjorn]
* SDM845 mss was incorrectly marked to support mba logs
drivers/remoteproc/qcom_q6v5_mss.c | 38 +++++++++++++++++++++++++++++-
1 file changed, 37 insertions(+), 1 deletion(-)
diff --git a/drivers/remoteproc/qcom_q6v5_mss.c b/drivers/remoteproc/qcom_q6v5_mss.c
index 49cd16e050533..945ca2652e7d6 100644
--- a/drivers/remoteproc/qcom_q6v5_mss.c
+++ b/drivers/remoteproc/qcom_q6v5_mss.c
@@ -9,6 +9,7 @@
#include <linux/clk.h>
#include <linux/delay.h>
+#include <linux/devcoredump.h>
#include <linux/dma-mapping.h>
#include <linux/interrupt.h>
#include <linux/kernel.h>
@@ -37,6 +38,8 @@
#define MPSS_CRASH_REASON_SMEM 421
+#define MBA_LOG_SIZE SZ_4K
+
/* RMB Status Register Values */
#define RMB_PBL_SUCCESS 0x1
@@ -141,6 +144,7 @@ struct rproc_hexagon_res {
int version;
bool need_mem_protection;
bool has_alt_reset;
+ bool has_mba_logs;
bool has_spare_reg;
};
@@ -202,6 +206,7 @@ struct q6v5 {
struct qcom_sysmon *sysmon;
bool need_mem_protection;
bool has_alt_reset;
+ bool has_mba_logs;
bool has_spare_reg;
int mpss_perm;
int mba_perm;
@@ -521,6 +526,26 @@ static int q6v5_rmb_mba_wait(struct q6v5 *qproc, u32 status, int ms)
return val;
}
+static void q6v5_dump_mba_logs(struct q6v5 *qproc)
+{
+ struct rproc *rproc = qproc->rproc;
+ void *data;
+
+ if (!qproc->has_mba_logs)
+ return;
+
+ if (q6v5_xfer_mem_ownership(qproc, &qproc->mba_perm, true, false, qproc->mba_phys,
+ qproc->mba_size))
+ return;
+
+ data = vmalloc(MBA_LOG_SIZE);
+ if (!data)
+ return;
+
+ memcpy(data, qproc->mba_region, MBA_LOG_SIZE);
+ dev_coredumpv(&rproc->dev, data, MBA_LOG_SIZE, GFP_KERNEL);
+}
+
static int q6v5proc_reset(struct q6v5 *qproc)
{
u32 val;
@@ -839,6 +864,7 @@ static int q6v5_mba_load(struct q6v5 *qproc)
{
int ret;
int xfermemop_ret;
+ bool mba_load_err = false;
qcom_q6v5_prepare(&qproc->q6v5);
@@ -932,7 +958,7 @@ static int q6v5_mba_load(struct q6v5 *qproc)
q6v5proc_halt_axi_port(qproc, qproc->halt_map, qproc->halt_q6);
q6v5proc_halt_axi_port(qproc, qproc->halt_map, qproc->halt_modem);
q6v5proc_halt_axi_port(qproc, qproc->halt_map, qproc->halt_nc);
-
+ mba_load_err = true;
reclaim_mba:
xfermemop_ret = q6v5_xfer_mem_ownership(qproc, &qproc->mba_perm, true,
false, qproc->mba_phys,
@@ -940,6 +966,8 @@ static int q6v5_mba_load(struct q6v5 *qproc)
if (xfermemop_ret) {
dev_err(qproc->dev,
"Failed to reclaim mba buffer, system may become unstable\n");
+ } else if (mba_load_err) {
+ q6v5_dump_mba_logs(qproc);
}
disable_active_clks:
@@ -1298,6 +1326,7 @@ static int q6v5_start(struct rproc *rproc)
reclaim_mpss:
q6v5_mba_reclaim(qproc);
+ q6v5_dump_mba_logs(qproc);
return ret;
}
@@ -1717,6 +1746,7 @@ static int q6v5_probe(struct platform_device *pdev)
qproc->version = desc->version;
qproc->need_mem_protection = desc->need_mem_protection;
+ qproc->has_mba_logs = desc->has_mba_logs;
ret = qcom_q6v5_init(&qproc->q6v5, pdev, rproc, MPSS_CRASH_REASON_SMEM,
qcom_msa_handover);
@@ -1808,6 +1838,7 @@ static const struct rproc_hexagon_res sc7180_mss = {
},
.need_mem_protection = true,
.has_alt_reset = false,
+ .has_mba_logs = true,
.has_spare_reg = true,
.version = MSS_SC7180,
};
@@ -1843,6 +1874,7 @@ static const struct rproc_hexagon_res sdm845_mss = {
},
.need_mem_protection = true,
.has_alt_reset = true,
+ .has_mba_logs = false,
.has_spare_reg = false,
.version = MSS_SDM845,
};
@@ -1870,6 +1902,7 @@ static const struct rproc_hexagon_res msm8998_mss = {
},
.need_mem_protection = true,
.has_alt_reset = false,
+ .has_mba_logs = false,
.has_spare_reg = false,
.version = MSS_MSM8998,
};
@@ -1900,6 +1933,7 @@ static const struct rproc_hexagon_res msm8996_mss = {
},
.need_mem_protection = true,
.has_alt_reset = false,
+ .has_mba_logs = false,
.has_spare_reg = false,
.version = MSS_MSM8996,
};
@@ -1933,6 +1967,7 @@ static const struct rproc_hexagon_res msm8916_mss = {
},
.need_mem_protection = false,
.has_alt_reset = false,
+ .has_mba_logs = false,
.has_spare_reg = false,
.version = MSS_MSM8916,
};
@@ -1974,6 +2009,7 @@ static const struct rproc_hexagon_res msm8974_mss = {
},
.need_mem_protection = false,
.has_alt_reset = false,
+ .has_mba_logs = false,
.has_spare_reg = false,
.version = MSS_MSM8974,
};
--
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v2 1/2] remoteproc: qcom_q6v5_mss: Add modem debug policy support
2020-07-21 11:29 ` [PATCH v2 1/2] remoteproc: qcom_q6v5_mss: Add modem debug policy support Sibi Sankar
@ 2020-07-22 3:54 ` Bjorn Andersson
2020-07-22 4:18 ` Sibi Sankar
0 siblings, 1 reply; 6+ messages in thread
From: Bjorn Andersson @ 2020-07-22 3:54 UTC (permalink / raw)
To: Sibi Sankar
Cc: agross, linux-arm-msm, linux-remoteproc, linux-kernel, evgreen, ohad
On Tue 21 Jul 04:29 PDT 2020, Sibi Sankar wrote:
> Add modem debug policy support which will enable coredumps and live
> debug support when the msadp firmware is present on secure devices.
>
> Signed-off-by: Sibi Sankar <sibis@codeaurora.org>
> ---
>
> v2:
> * Use request_firmware_direct [Bjorn]
> * Use Bjorn's template to show if debug policy is present
> * Add size check to prevent memcpy out of bounds [Bjorn]
>
> drivers/remoteproc/qcom_q6v5_mss.c | 16 +++++++++++++++-
> 1 file changed, 15 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/remoteproc/qcom_q6v5_mss.c b/drivers/remoteproc/qcom_q6v5_mss.c
> index 0b6f260eb5349..49cd16e050533 100644
> --- a/drivers/remoteproc/qcom_q6v5_mss.c
> +++ b/drivers/remoteproc/qcom_q6v5_mss.c
> @@ -189,6 +189,7 @@ struct q6v5 {
> phys_addr_t mba_phys;
> void *mba_region;
> size_t mba_size;
> + size_t dp_size;
>
> phys_addr_t mpss_phys;
> phys_addr_t mpss_reloc;
> @@ -408,6 +409,14 @@ static int q6v5_xfer_mem_ownership(struct q6v5 *qproc, int *current_perm,
> static int q6v5_load(struct rproc *rproc, const struct firmware *fw)
> {
> struct q6v5 *qproc = rproc->priv;
> + const struct firmware *dp_fw;
> +
> + if (!request_firmware_direct(&dp_fw, "msadp", qproc->dev) && fw->size <= SZ_1M &&
> + (SZ_1M + dp_fw->size) <= qproc->mba_size) {
> + memcpy(qproc->mba_region + SZ_1M, dp_fw->data, dp_fw->size);
> + qproc->dp_size = dp_fw->size;
> + release_firmware(dp_fw);
If request_firmware_direct() succeeds, but return a firmware blob bigger
than mba_size - SZ_1M you won't get here and will end up leaking dp_fw.
Additionally, there really isn't a need for requesting the firmware in
the first place if fw->size > SZ_1M.
So I think it's better if you break this out in it's own function where
you don't need to squeeze everything into one or two conditionals.
Regards,
Bjorn
> + }
>
> memcpy(qproc->mba_region, fw->data, fw->size);
>
> @@ -896,6 +905,10 @@ static int q6v5_mba_load(struct q6v5 *qproc)
> }
>
> writel(qproc->mba_phys, qproc->rmb_base + RMB_MBA_IMAGE_REG);
> + if (qproc->dp_size) {
> + writel(qproc->mba_phys + SZ_1M, qproc->rmb_base + RMB_PMI_CODE_START_REG);
> + writel(qproc->dp_size, qproc->rmb_base + RMB_PMI_CODE_LENGTH_REG);
> + }
>
> ret = q6v5proc_reset(qproc);
> if (ret)
> @@ -1257,7 +1270,8 @@ static int q6v5_start(struct rproc *rproc)
> if (ret)
> return ret;
>
> - dev_info(qproc->dev, "MBA booted, loading mpss\n");
> + dev_info(qproc->dev, "MBA booted with%s debug policy, loading mpss\n",
> + qproc->dp_size ? "" : "out");
>
> ret = q6v5_mpss_load(qproc);
> if (ret)
> --
> The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
> a Linux Foundation Collaborative Project
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v2 1/2] remoteproc: qcom_q6v5_mss: Add modem debug policy support
2020-07-22 3:54 ` Bjorn Andersson
@ 2020-07-22 4:18 ` Sibi Sankar
0 siblings, 0 replies; 6+ messages in thread
From: Sibi Sankar @ 2020-07-22 4:18 UTC (permalink / raw)
To: Bjorn Andersson
Cc: agross, linux-arm-msm, linux-remoteproc, linux-kernel, evgreen,
ohad, linux-kernel-owner
On 2020-07-22 09:24, Bjorn Andersson wrote:
> On Tue 21 Jul 04:29 PDT 2020, Sibi Sankar wrote:
>
>> Add modem debug policy support which will enable coredumps and live
>> debug support when the msadp firmware is present on secure devices.
>>
>> Signed-off-by: Sibi Sankar <sibis@codeaurora.org>
>> ---
>>
>> v2:
>> * Use request_firmware_direct [Bjorn]
>> * Use Bjorn's template to show if debug policy is present
>> * Add size check to prevent memcpy out of bounds [Bjorn]
>>
>> drivers/remoteproc/qcom_q6v5_mss.c | 16 +++++++++++++++-
>> 1 file changed, 15 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/remoteproc/qcom_q6v5_mss.c
>> b/drivers/remoteproc/qcom_q6v5_mss.c
>> index 0b6f260eb5349..49cd16e050533 100644
>> --- a/drivers/remoteproc/qcom_q6v5_mss.c
>> +++ b/drivers/remoteproc/qcom_q6v5_mss.c
>> @@ -189,6 +189,7 @@ struct q6v5 {
>> phys_addr_t mba_phys;
>> void *mba_region;
>> size_t mba_size;
>> + size_t dp_size;
>>
>> phys_addr_t mpss_phys;
>> phys_addr_t mpss_reloc;
>> @@ -408,6 +409,14 @@ static int q6v5_xfer_mem_ownership(struct q6v5
>> *qproc, int *current_perm,
>> static int q6v5_load(struct rproc *rproc, const struct firmware *fw)
>> {
>> struct q6v5 *qproc = rproc->priv;
>> + const struct firmware *dp_fw;
>> +
>> + if (!request_firmware_direct(&dp_fw, "msadp", qproc->dev) &&
>> fw->size <= SZ_1M &&
>> + (SZ_1M + dp_fw->size) <= qproc->mba_size) {
>> + memcpy(qproc->mba_region + SZ_1M, dp_fw->data, dp_fw->size);
>> + qproc->dp_size = dp_fw->size;
>> + release_firmware(dp_fw);
>
> If request_firmware_direct() succeeds, but return a firmware blob
> bigger
> than mba_size - SZ_1M you won't get here and will end up leaking dp_fw.
>
> Additionally, there really isn't a need for requesting the firmware in
> the first place if fw->size > SZ_1M.
>
> So I think it's better if you break this out in it's own function where
> you don't need to squeeze everything into one or two conditionals.
I'll fix dp_fw leak and move it
to a new func. Thanks for the
review.
>
> Regards,
> Bjorn
>
>> + }
>>
>> memcpy(qproc->mba_region, fw->data, fw->size);
>>
>> @@ -896,6 +905,10 @@ static int q6v5_mba_load(struct q6v5 *qproc)
>> }
>>
>> writel(qproc->mba_phys, qproc->rmb_base + RMB_MBA_IMAGE_REG);
>> + if (qproc->dp_size) {
>> + writel(qproc->mba_phys + SZ_1M, qproc->rmb_base +
>> RMB_PMI_CODE_START_REG);
>> + writel(qproc->dp_size, qproc->rmb_base + RMB_PMI_CODE_LENGTH_REG);
>> + }
>>
>> ret = q6v5proc_reset(qproc);
>> if (ret)
>> @@ -1257,7 +1270,8 @@ static int q6v5_start(struct rproc *rproc)
>> if (ret)
>> return ret;
>>
>> - dev_info(qproc->dev, "MBA booted, loading mpss\n");
>> + dev_info(qproc->dev, "MBA booted with%s debug policy, loading
>> mpss\n",
>> + qproc->dp_size ? "" : "out");
>>
>> ret = q6v5_mpss_load(qproc);
>> if (ret)
>> --
>> The Qualcomm Innovation Center, Inc. is a member of the Code Aurora
>> Forum,
>> a Linux Foundation Collaborative Project
>>
--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v2 2/2] remoteproc: qcom_q6v5_mss: Add MBA log extraction support
2020-07-21 11:29 ` [PATCH v2 2/2] remoteproc: qcom_q6v5_mss: Add MBA log extraction support Sibi Sankar
@ 2020-07-22 4:23 ` Bjorn Andersson
0 siblings, 0 replies; 6+ messages in thread
From: Bjorn Andersson @ 2020-07-22 4:23 UTC (permalink / raw)
To: Sibi Sankar
Cc: agross, linux-arm-msm, linux-remoteproc, linux-kernel, evgreen, ohad
On Tue 21 Jul 04:29 PDT 2020, Sibi Sankar wrote:
> On SC7180 the MBA firmware stores the bootup text logs in a 4K segment
> at the beginning of the MBA region. Add support to extract the logs
> which will be useful to debug mba boot/authentication issues.
>
> Signed-off-by: Sibi Sankar <sibis@codeaurora.org>
Reviewed-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Afaict this is completely independent from the other patch in the
series, so I applied this.
Regards,
Bjorn
> ---
>
> V2:
> * Don't dump logs in mba_reclaim path [Bjorn]
> * Move has_mba_logs check to q6v5_dump_mba_logs [Bjorn]
> * SDM845 mss was incorrectly marked to support mba logs
>
> drivers/remoteproc/qcom_q6v5_mss.c | 38 +++++++++++++++++++++++++++++-
> 1 file changed, 37 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/remoteproc/qcom_q6v5_mss.c b/drivers/remoteproc/qcom_q6v5_mss.c
> index 49cd16e050533..945ca2652e7d6 100644
> --- a/drivers/remoteproc/qcom_q6v5_mss.c
> +++ b/drivers/remoteproc/qcom_q6v5_mss.c
> @@ -9,6 +9,7 @@
>
> #include <linux/clk.h>
> #include <linux/delay.h>
> +#include <linux/devcoredump.h>
> #include <linux/dma-mapping.h>
> #include <linux/interrupt.h>
> #include <linux/kernel.h>
> @@ -37,6 +38,8 @@
>
> #define MPSS_CRASH_REASON_SMEM 421
>
> +#define MBA_LOG_SIZE SZ_4K
> +
> /* RMB Status Register Values */
> #define RMB_PBL_SUCCESS 0x1
>
> @@ -141,6 +144,7 @@ struct rproc_hexagon_res {
> int version;
> bool need_mem_protection;
> bool has_alt_reset;
> + bool has_mba_logs;
> bool has_spare_reg;
> };
>
> @@ -202,6 +206,7 @@ struct q6v5 {
> struct qcom_sysmon *sysmon;
> bool need_mem_protection;
> bool has_alt_reset;
> + bool has_mba_logs;
> bool has_spare_reg;
> int mpss_perm;
> int mba_perm;
> @@ -521,6 +526,26 @@ static int q6v5_rmb_mba_wait(struct q6v5 *qproc, u32 status, int ms)
> return val;
> }
>
> +static void q6v5_dump_mba_logs(struct q6v5 *qproc)
> +{
> + struct rproc *rproc = qproc->rproc;
> + void *data;
> +
> + if (!qproc->has_mba_logs)
> + return;
> +
> + if (q6v5_xfer_mem_ownership(qproc, &qproc->mba_perm, true, false, qproc->mba_phys,
> + qproc->mba_size))
> + return;
> +
> + data = vmalloc(MBA_LOG_SIZE);
> + if (!data)
> + return;
> +
> + memcpy(data, qproc->mba_region, MBA_LOG_SIZE);
> + dev_coredumpv(&rproc->dev, data, MBA_LOG_SIZE, GFP_KERNEL);
> +}
> +
> static int q6v5proc_reset(struct q6v5 *qproc)
> {
> u32 val;
> @@ -839,6 +864,7 @@ static int q6v5_mba_load(struct q6v5 *qproc)
> {
> int ret;
> int xfermemop_ret;
> + bool mba_load_err = false;
>
> qcom_q6v5_prepare(&qproc->q6v5);
>
> @@ -932,7 +958,7 @@ static int q6v5_mba_load(struct q6v5 *qproc)
> q6v5proc_halt_axi_port(qproc, qproc->halt_map, qproc->halt_q6);
> q6v5proc_halt_axi_port(qproc, qproc->halt_map, qproc->halt_modem);
> q6v5proc_halt_axi_port(qproc, qproc->halt_map, qproc->halt_nc);
> -
> + mba_load_err = true;
> reclaim_mba:
> xfermemop_ret = q6v5_xfer_mem_ownership(qproc, &qproc->mba_perm, true,
> false, qproc->mba_phys,
> @@ -940,6 +966,8 @@ static int q6v5_mba_load(struct q6v5 *qproc)
> if (xfermemop_ret) {
> dev_err(qproc->dev,
> "Failed to reclaim mba buffer, system may become unstable\n");
> + } else if (mba_load_err) {
> + q6v5_dump_mba_logs(qproc);
> }
>
> disable_active_clks:
> @@ -1298,6 +1326,7 @@ static int q6v5_start(struct rproc *rproc)
>
> reclaim_mpss:
> q6v5_mba_reclaim(qproc);
> + q6v5_dump_mba_logs(qproc);
>
> return ret;
> }
> @@ -1717,6 +1746,7 @@ static int q6v5_probe(struct platform_device *pdev)
>
> qproc->version = desc->version;
> qproc->need_mem_protection = desc->need_mem_protection;
> + qproc->has_mba_logs = desc->has_mba_logs;
>
> ret = qcom_q6v5_init(&qproc->q6v5, pdev, rproc, MPSS_CRASH_REASON_SMEM,
> qcom_msa_handover);
> @@ -1808,6 +1838,7 @@ static const struct rproc_hexagon_res sc7180_mss = {
> },
> .need_mem_protection = true,
> .has_alt_reset = false,
> + .has_mba_logs = true,
> .has_spare_reg = true,
> .version = MSS_SC7180,
> };
> @@ -1843,6 +1874,7 @@ static const struct rproc_hexagon_res sdm845_mss = {
> },
> .need_mem_protection = true,
> .has_alt_reset = true,
> + .has_mba_logs = false,
> .has_spare_reg = false,
> .version = MSS_SDM845,
> };
> @@ -1870,6 +1902,7 @@ static const struct rproc_hexagon_res msm8998_mss = {
> },
> .need_mem_protection = true,
> .has_alt_reset = false,
> + .has_mba_logs = false,
> .has_spare_reg = false,
> .version = MSS_MSM8998,
> };
> @@ -1900,6 +1933,7 @@ static const struct rproc_hexagon_res msm8996_mss = {
> },
> .need_mem_protection = true,
> .has_alt_reset = false,
> + .has_mba_logs = false,
> .has_spare_reg = false,
> .version = MSS_MSM8996,
> };
> @@ -1933,6 +1967,7 @@ static const struct rproc_hexagon_res msm8916_mss = {
> },
> .need_mem_protection = false,
> .has_alt_reset = false,
> + .has_mba_logs = false,
> .has_spare_reg = false,
> .version = MSS_MSM8916,
> };
> @@ -1974,6 +2009,7 @@ static const struct rproc_hexagon_res msm8974_mss = {
> },
> .need_mem_protection = false,
> .has_alt_reset = false,
> + .has_mba_logs = false,
> .has_spare_reg = false,
> .version = MSS_MSM8974,
> };
> --
> The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
> a Linux Foundation Collaborative Project
>
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2020-07-22 4:25 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-21 11:29 [PATCH v2 0/2] Add modem debug features Sibi Sankar
2020-07-21 11:29 ` [PATCH v2 1/2] remoteproc: qcom_q6v5_mss: Add modem debug policy support Sibi Sankar
2020-07-22 3:54 ` Bjorn Andersson
2020-07-22 4:18 ` Sibi Sankar
2020-07-21 11:29 ` [PATCH v2 2/2] remoteproc: qcom_q6v5_mss: Add MBA log extraction support Sibi Sankar
2020-07-22 4:23 ` Bjorn Andersson
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).