* [PATCH 0/7] Miscellaneous PAS fixes @ 2022-05-24 13:13 Sibi Sankar 2022-05-24 13:13 ` [PATCH 1/7] remoteproc: qcom: pas: Fixup the elf class for SM8450 remoteprocs Sibi Sankar ` (6 more replies) 0 siblings, 7 replies; 11+ messages in thread From: Sibi Sankar @ 2022-05-24 13:13 UTC (permalink / raw) To: bjorn.andersson Cc: agross, mathieu.poirier, dmitry.baryshkov, linux-arm-msm, linux-remoteproc, linux-kernel, Sibi Sankar A collection of misc. fixes for the remoteproc PAS driver in general and SM8450 remoteprocs in paticular. Sibi Sankar (1): remoteproc: qcom: pas: Add decrypt shutdown support for modem Siddharth Gupta (5): remoteproc: qcom: pas: Mark va as io memory remoteproc: qcom: pas: Mark devices as wakeup capable remoteproc: qcom: pas: Check if coredump is enabled remoteproc: qcom: Check elf class before minidump remoteproc: q6v5: Set q6 state to offline on receiving wdog irq Yogesh Lal (1): remoteproc: qcom: pas: Fixup the elf class for SM8450 remoteprocs drivers/remoteproc/qcom_common.c | 6 +- drivers/remoteproc/qcom_q6v5.c | 4 ++ drivers/remoteproc/qcom_q6v5_pas.c | 127 +++++++++++++++++++++++++++++++++++-- 3 files changed, 131 insertions(+), 6 deletions(-) -- 2.7.4 ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 1/7] remoteproc: qcom: pas: Fixup the elf class for SM8450 remoteprocs 2022-05-24 13:13 [PATCH 0/7] Miscellaneous PAS fixes Sibi Sankar @ 2022-05-24 13:13 ` Sibi Sankar 2022-05-24 21:17 ` Konrad Dybcio 2022-05-24 13:13 ` [PATCH 2/7] remoteproc: qcom: pas: Add decrypt shutdown support for modem Sibi Sankar ` (5 subsequent siblings) 6 siblings, 1 reply; 11+ messages in thread From: Sibi Sankar @ 2022-05-24 13:13 UTC (permalink / raw) To: bjorn.andersson Cc: agross, mathieu.poirier, dmitry.baryshkov, linux-arm-msm, linux-remoteproc, linux-kernel, Yogesh Lal, Sibi Sankar From: Yogesh Lal <quic_ylal@quicinc.com> The coredumps for the ADSP,CDSP and MPSS subsystems will be 64 bit from SM8450 SoCs onward. Update the elf class as elf64 accordingly. Fixes: 5cef9b48458d ("remoteproc: qcom: pas: Add SM8450 remoteproc support") Signed-off-by: Yogesh Lal <quic_ylal@quicinc.com> Signed-off-by: Sibi Sankar <quic_sibis@quicinc.com> --- drivers/remoteproc/qcom_q6v5_pas.c | 68 +++++++++++++++++++++++++++++++++++--- 1 file changed, 64 insertions(+), 4 deletions(-) diff --git a/drivers/remoteproc/qcom_q6v5_pas.c b/drivers/remoteproc/qcom_q6v5_pas.c index 6ae39c5653b1..8ce68d0bb1bc 100644 --- a/drivers/remoteproc/qcom_q6v5_pas.c +++ b/drivers/remoteproc/qcom_q6v5_pas.c @@ -34,6 +34,7 @@ struct adsp_data { const char *firmware_name; int pas_id; unsigned int minidump_id; + bool uses_elf64; bool has_aggre2_clk; bool auto_boot; @@ -450,7 +451,11 @@ static int adsp_probe(struct platform_device *pdev) } rproc->auto_boot = desc->auto_boot; - rproc_coredump_set_elf_info(rproc, ELFCLASS32, EM_NONE); + + if (desc->uses_elf64) + rproc_coredump_set_elf_info(rproc, ELFCLASS64, EM_NONE); + else + rproc_coredump_set_elf_info(rproc, ELFCLASS32, EM_NONE); adsp = (struct qcom_adsp *)rproc->priv; adsp->dev = &pdev->dev; @@ -617,6 +622,24 @@ static const struct adsp_data sm8350_adsp_resource = { .ssctl_id = 0x14, }; +static const struct adsp_data sm8450_adsp_resource = { + .crash_reason_smem = 423, + .firmware_name = "adsp.mdt", + .pas_id = 1, + .uses_elf64 = true, + .has_aggre2_clk = false, + .auto_boot = true, + .proxy_pd_names = (char*[]){ + "lcx", + "lmx", + NULL + }, + .load_state = "adsp", + .ssr_name = "lpass", + .sysmon_name = "adsp", + .ssctl_id = 0x14, +}; + static const struct adsp_data msm8996_adsp_resource = { .crash_reason_smem = 423, .firmware_name = "adsp.mdt", @@ -751,6 +774,24 @@ static const struct adsp_data sm8350_cdsp_resource = { .ssctl_id = 0x17, }; +static const struct adsp_data sm8450_cdsp_resource = { + .crash_reason_smem = 601, + .firmware_name = "cdsp.mdt", + .pas_id = 18, + .uses_elf64 = true, + .has_aggre2_clk = false, + .auto_boot = true, + .proxy_pd_names = (char*[]){ + "cx", + "mxc", + NULL + }, + .load_state = "cdsp", + .ssr_name = "cdsp", + .sysmon_name = "cdsp", + .ssctl_id = 0x17, +}; + static const struct adsp_data mpss_resource_init = { .crash_reason_smem = 421, .firmware_name = "modem.mdt", @@ -785,6 +826,25 @@ static const struct adsp_data sc8180x_mpss_resource = { .ssctl_id = 0x12, }; +static const struct adsp_data sm8450_mpss_resource = { + .crash_reason_smem = 421, + .firmware_name = "modem.mdt", + .pas_id = 4, + .minidump_id = 3, + .uses_elf64 = true, + .has_aggre2_clk = false, + .auto_boot = false, + .proxy_pd_names = (char*[]){ + "cx", + "mss", + NULL + }, + .load_state = "modem", + .ssr_name = "mpss", + .sysmon_name = "modem", + .ssctl_id = 0x12, +}; + static const struct adsp_data slpi_resource_init = { .crash_reason_smem = 424, .firmware_name = "slpi.mdt", @@ -913,10 +973,10 @@ static const struct of_device_id adsp_of_match[] = { { .compatible = "qcom,sm8350-cdsp-pas", .data = &sm8350_cdsp_resource}, { .compatible = "qcom,sm8350-slpi-pas", .data = &sm8350_slpi_resource}, { .compatible = "qcom,sm8350-mpss-pas", .data = &mpss_resource_init}, - { .compatible = "qcom,sm8450-adsp-pas", .data = &sm8350_adsp_resource}, - { .compatible = "qcom,sm8450-cdsp-pas", .data = &sm8350_cdsp_resource}, + { .compatible = "qcom,sm8450-adsp-pas", .data = &sm8450_adsp_resource}, + { .compatible = "qcom,sm8450-cdsp-pas", .data = &sm8450_cdsp_resource}, { .compatible = "qcom,sm8450-slpi-pas", .data = &sm8350_slpi_resource}, - { .compatible = "qcom,sm8450-mpss-pas", .data = &mpss_resource_init}, + { .compatible = "qcom,sm8450-mpss-pas", .data = &sm8450_mpss_resource}, { }, }; MODULE_DEVICE_TABLE(of, adsp_of_match); -- 2.7.4 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 1/7] remoteproc: qcom: pas: Fixup the elf class for SM8450 remoteprocs 2022-05-24 13:13 ` [PATCH 1/7] remoteproc: qcom: pas: Fixup the elf class for SM8450 remoteprocs Sibi Sankar @ 2022-05-24 21:17 ` Konrad Dybcio 2022-05-25 16:04 ` Sibi Sankar 0 siblings, 1 reply; 11+ messages in thread From: Konrad Dybcio @ 2022-05-24 21:17 UTC (permalink / raw) To: Sibi Sankar, bjorn.andersson Cc: agross, mathieu.poirier, dmitry.baryshkov, linux-arm-msm, linux-remoteproc, linux-kernel, Yogesh Lal On 24/05/2022 15:13, Sibi Sankar wrote: > From: Yogesh Lal <quic_ylal@quicinc.com> > > The coredumps for the ADSP,CDSP and MPSS subsystems will be 64 bit from > SM8450 SoCs onward. Update the elf class as elf64 accordingly. Hi, the "will be" got me thinking, whether you meant that SM8450 is the first SoC that features 64-bit coredumps, or it is going to come in a firmware update, but it was 32-bit in an earlier version. If the latter is true, did the consumer-release BSP for hardware vendors include that change? Otherwise it may differ between devices, as some vendors are known not to update their firmwares very often if at all. Konrad > > Fixes: 5cef9b48458d ("remoteproc: qcom: pas: Add SM8450 remoteproc support") > Signed-off-by: Yogesh Lal <quic_ylal@quicinc.com> > Signed-off-by: Sibi Sankar <quic_sibis@quicinc.com> > --- > drivers/remoteproc/qcom_q6v5_pas.c | 68 +++++++++++++++++++++++++++++++++++--- > 1 file changed, 64 insertions(+), 4 deletions(-) > > diff --git a/drivers/remoteproc/qcom_q6v5_pas.c b/drivers/remoteproc/qcom_q6v5_pas.c > index 6ae39c5653b1..8ce68d0bb1bc 100644 > --- a/drivers/remoteproc/qcom_q6v5_pas.c > +++ b/drivers/remoteproc/qcom_q6v5_pas.c > @@ -34,6 +34,7 @@ struct adsp_data { > const char *firmware_name; > int pas_id; > unsigned int minidump_id; > + bool uses_elf64; > bool has_aggre2_clk; > bool auto_boot; > > @@ -450,7 +451,11 @@ static int adsp_probe(struct platform_device *pdev) > } > > rproc->auto_boot = desc->auto_boot; > - rproc_coredump_set_elf_info(rproc, ELFCLASS32, EM_NONE); > + > + if (desc->uses_elf64) > + rproc_coredump_set_elf_info(rproc, ELFCLASS64, EM_NONE); > + else > + rproc_coredump_set_elf_info(rproc, ELFCLASS32, EM_NONE); > > adsp = (struct qcom_adsp *)rproc->priv; > adsp->dev = &pdev->dev; > @@ -617,6 +622,24 @@ static const struct adsp_data sm8350_adsp_resource = { > .ssctl_id = 0x14, > }; > > +static const struct adsp_data sm8450_adsp_resource = { > + .crash_reason_smem = 423, > + .firmware_name = "adsp.mdt", > + .pas_id = 1, > + .uses_elf64 = true, > + .has_aggre2_clk = false, > + .auto_boot = true, > + .proxy_pd_names = (char*[]){ > + "lcx", > + "lmx", > + NULL > + }, > + .load_state = "adsp", > + .ssr_name = "lpass", > + .sysmon_name = "adsp", > + .ssctl_id = 0x14, > +}; > + > static const struct adsp_data msm8996_adsp_resource = { > .crash_reason_smem = 423, > .firmware_name = "adsp.mdt", > @@ -751,6 +774,24 @@ static const struct adsp_data sm8350_cdsp_resource = { > .ssctl_id = 0x17, > }; > > +static const struct adsp_data sm8450_cdsp_resource = { > + .crash_reason_smem = 601, > + .firmware_name = "cdsp.mdt", > + .pas_id = 18, > + .uses_elf64 = true, > + .has_aggre2_clk = false, > + .auto_boot = true, > + .proxy_pd_names = (char*[]){ > + "cx", > + "mxc", > + NULL > + }, > + .load_state = "cdsp", > + .ssr_name = "cdsp", > + .sysmon_name = "cdsp", > + .ssctl_id = 0x17, > +}; > + > static const struct adsp_data mpss_resource_init = { > .crash_reason_smem = 421, > .firmware_name = "modem.mdt", > @@ -785,6 +826,25 @@ static const struct adsp_data sc8180x_mpss_resource = { > .ssctl_id = 0x12, > }; > > +static const struct adsp_data sm8450_mpss_resource = { > + .crash_reason_smem = 421, > + .firmware_name = "modem.mdt", > + .pas_id = 4, > + .minidump_id = 3, > + .uses_elf64 = true, > + .has_aggre2_clk = false, > + .auto_boot = false, > + .proxy_pd_names = (char*[]){ > + "cx", > + "mss", > + NULL > + }, > + .load_state = "modem", > + .ssr_name = "mpss", > + .sysmon_name = "modem", > + .ssctl_id = 0x12, > +}; > + > static const struct adsp_data slpi_resource_init = { > .crash_reason_smem = 424, > .firmware_name = "slpi.mdt", > @@ -913,10 +973,10 @@ static const struct of_device_id adsp_of_match[] = { > { .compatible = "qcom,sm8350-cdsp-pas", .data = &sm8350_cdsp_resource}, > { .compatible = "qcom,sm8350-slpi-pas", .data = &sm8350_slpi_resource}, > { .compatible = "qcom,sm8350-mpss-pas", .data = &mpss_resource_init}, > - { .compatible = "qcom,sm8450-adsp-pas", .data = &sm8350_adsp_resource}, > - { .compatible = "qcom,sm8450-cdsp-pas", .data = &sm8350_cdsp_resource}, > + { .compatible = "qcom,sm8450-adsp-pas", .data = &sm8450_adsp_resource}, > + { .compatible = "qcom,sm8450-cdsp-pas", .data = &sm8450_cdsp_resource}, > { .compatible = "qcom,sm8450-slpi-pas", .data = &sm8350_slpi_resource}, > - { .compatible = "qcom,sm8450-mpss-pas", .data = &mpss_resource_init}, > + { .compatible = "qcom,sm8450-mpss-pas", .data = &sm8450_mpss_resource}, > { }, > }; > MODULE_DEVICE_TABLE(of, adsp_of_match); > ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 1/7] remoteproc: qcom: pas: Fixup the elf class for SM8450 remoteprocs 2022-05-24 21:17 ` Konrad Dybcio @ 2022-05-25 16:04 ` Sibi Sankar 0 siblings, 0 replies; 11+ messages in thread From: Sibi Sankar @ 2022-05-25 16:04 UTC (permalink / raw) To: Konrad Dybcio, bjorn.andersson Cc: agross, mathieu.poirier, dmitry.baryshkov, linux-arm-msm, linux-remoteproc, linux-kernel, Yogesh Lal Hey Konrad, Thanks for taking time to review the patch. On 5/25/22 2:47 AM, Konrad Dybcio wrote: > > On 24/05/2022 15:13, Sibi Sankar wrote: >> From: Yogesh Lal <quic_ylal@quicinc.com> >> >> The coredumps for the ADSP,CDSP and MPSS subsystems will be 64 bit from >> SM8450 SoCs onward. Update the elf class as elf64 accordingly. > > Hi, > > > the "will be" got me thinking, whether you meant that SM8450 is the > first SoC that features 64-bit coredumps, or it is going to come in a > firmware update, but it was 32-bit in an earlier version. > > If the latter is true, did the consumer-release BSP for hardware vendors > include that change? Otherwise it may differ between devices, as some > vendors are known not to update their firmwares very often if at all. Given that you reported ^^ I found it odd that the firmware class would change mid-program. Since I picked up the patch from list I had to dig around for info internally. Looks like all the firmware released were just 32 bit and it's only the tooling that does the decryption of the dumps expects the coredumps elf to be 64 bit. Not sure why this happened though, probably tooling upgraded in anticipation of a future fw upgrade. Couldn't get the full history behind the decision. Anyway the commit message needs an update will fix that in the next re-spin. -Sibi > > > Konrad > >> >> Fixes: 5cef9b48458d ("remoteproc: qcom: pas: Add SM8450 remoteproc >> support") >> Signed-off-by: Yogesh Lal <quic_ylal@quicinc.com> >> Signed-off-by: Sibi Sankar <quic_sibis@quicinc.com> >> --- >> drivers/remoteproc/qcom_q6v5_pas.c | 68 >> +++++++++++++++++++++++++++++++++++--- >> 1 file changed, 64 insertions(+), 4 deletions(-) >> >> diff --git a/drivers/remoteproc/qcom_q6v5_pas.c >> b/drivers/remoteproc/qcom_q6v5_pas.c >> index 6ae39c5653b1..8ce68d0bb1bc 100644 >> --- a/drivers/remoteproc/qcom_q6v5_pas.c >> +++ b/drivers/remoteproc/qcom_q6v5_pas.c >> @@ -34,6 +34,7 @@ struct adsp_data { >> const char *firmware_name; >> int pas_id; >> unsigned int minidump_id; >> + bool uses_elf64; >> bool has_aggre2_clk; >> bool auto_boot; >> @@ -450,7 +451,11 @@ static int adsp_probe(struct platform_device *pdev) >> } >> rproc->auto_boot = desc->auto_boot; >> - rproc_coredump_set_elf_info(rproc, ELFCLASS32, EM_NONE); >> + >> + if (desc->uses_elf64) >> + rproc_coredump_set_elf_info(rproc, ELFCLASS64, EM_NONE); >> + else >> + rproc_coredump_set_elf_info(rproc, ELFCLASS32, EM_NONE); >> adsp = (struct qcom_adsp *)rproc->priv; >> adsp->dev = &pdev->dev; >> @@ -617,6 +622,24 @@ static const struct adsp_data >> sm8350_adsp_resource = { >> .ssctl_id = 0x14, >> }; >> +static const struct adsp_data sm8450_adsp_resource = { >> + .crash_reason_smem = 423, >> + .firmware_name = "adsp.mdt", >> + .pas_id = 1, >> + .uses_elf64 = true, >> + .has_aggre2_clk = false, >> + .auto_boot = true, >> + .proxy_pd_names = (char*[]){ >> + "lcx", >> + "lmx", >> + NULL >> + }, >> + .load_state = "adsp", >> + .ssr_name = "lpass", >> + .sysmon_name = "adsp", >> + .ssctl_id = 0x14, >> +}; >> + >> static const struct adsp_data msm8996_adsp_resource = { >> .crash_reason_smem = 423, >> .firmware_name = "adsp.mdt", >> @@ -751,6 +774,24 @@ static const struct adsp_data >> sm8350_cdsp_resource = { >> .ssctl_id = 0x17, >> }; >> +static const struct adsp_data sm8450_cdsp_resource = { >> + .crash_reason_smem = 601, >> + .firmware_name = "cdsp.mdt", >> + .pas_id = 18, >> + .uses_elf64 = true, >> + .has_aggre2_clk = false, >> + .auto_boot = true, >> + .proxy_pd_names = (char*[]){ >> + "cx", >> + "mxc", >> + NULL >> + }, >> + .load_state = "cdsp", >> + .ssr_name = "cdsp", >> + .sysmon_name = "cdsp", >> + .ssctl_id = 0x17, >> +}; >> + >> static const struct adsp_data mpss_resource_init = { >> .crash_reason_smem = 421, >> .firmware_name = "modem.mdt", >> @@ -785,6 +826,25 @@ static const struct adsp_data >> sc8180x_mpss_resource = { >> .ssctl_id = 0x12, >> }; >> +static const struct adsp_data sm8450_mpss_resource = { >> + .crash_reason_smem = 421, >> + .firmware_name = "modem.mdt", >> + .pas_id = 4, >> + .minidump_id = 3, >> + .uses_elf64 = true, >> + .has_aggre2_clk = false, >> + .auto_boot = false, >> + .proxy_pd_names = (char*[]){ >> + "cx", >> + "mss", >> + NULL >> + }, >> + .load_state = "modem", >> + .ssr_name = "mpss", >> + .sysmon_name = "modem", >> + .ssctl_id = 0x12, >> +}; >> + >> static const struct adsp_data slpi_resource_init = { >> .crash_reason_smem = 424, >> .firmware_name = "slpi.mdt", >> @@ -913,10 +973,10 @@ static const struct of_device_id adsp_of_match[] >> = { >> { .compatible = "qcom,sm8350-cdsp-pas", .data = >> &sm8350_cdsp_resource}, >> { .compatible = "qcom,sm8350-slpi-pas", .data = >> &sm8350_slpi_resource}, >> { .compatible = "qcom,sm8350-mpss-pas", .data = >> &mpss_resource_init}, >> - { .compatible = "qcom,sm8450-adsp-pas", .data = >> &sm8350_adsp_resource}, >> - { .compatible = "qcom,sm8450-cdsp-pas", .data = >> &sm8350_cdsp_resource}, >> + { .compatible = "qcom,sm8450-adsp-pas", .data = >> &sm8450_adsp_resource}, >> + { .compatible = "qcom,sm8450-cdsp-pas", .data = >> &sm8450_cdsp_resource}, >> { .compatible = "qcom,sm8450-slpi-pas", .data = >> &sm8350_slpi_resource}, >> - { .compatible = "qcom,sm8450-mpss-pas", .data = >> &mpss_resource_init}, >> + { .compatible = "qcom,sm8450-mpss-pas", .data = >> &sm8450_mpss_resource}, >> { }, >> }; >> MODULE_DEVICE_TABLE(of, adsp_of_match); >> ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 2/7] remoteproc: qcom: pas: Add decrypt shutdown support for modem 2022-05-24 13:13 [PATCH 0/7] Miscellaneous PAS fixes Sibi Sankar 2022-05-24 13:13 ` [PATCH 1/7] remoteproc: qcom: pas: Fixup the elf class for SM8450 remoteprocs Sibi Sankar @ 2022-05-24 13:13 ` Sibi Sankar 2022-05-24 13:13 ` [PATCH 3/7] remoteproc: qcom: pas: Mark va as io memory Sibi Sankar ` (4 subsequent siblings) 6 siblings, 0 replies; 11+ messages in thread From: Sibi Sankar @ 2022-05-24 13:13 UTC (permalink / raw) To: bjorn.andersson Cc: agross, mathieu.poirier, dmitry.baryshkov, linux-arm-msm, linux-remoteproc, linux-kernel, Sibi Sankar The initial shutdown request to modem on SM8450 SoCs would start the decryption process and will keep returning errors until the modem shutdown is complete. Fix this by retrying shutdowns in fixed intervals. Err Logs on modem shutdown: qcom_q6v5_pas 4080000.remoteproc: failed to shutdown: -22 remoteproc remoteproc3: can't stop rproc: -22 Fixes: 5cef9b48458d ("remoteproc: qcom: pas: Add SM8450 remoteproc support") Signed-off-by: Sibi Sankar <quic_sibis@quicinc.com> --- drivers/remoteproc/qcom_q6v5_pas.c | 49 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/drivers/remoteproc/qcom_q6v5_pas.c b/drivers/remoteproc/qcom_q6v5_pas.c index 8ce68d0bb1bc..7313fc0a3c01 100644 --- a/drivers/remoteproc/qcom_q6v5_pas.c +++ b/drivers/remoteproc/qcom_q6v5_pas.c @@ -8,6 +8,7 @@ */ #include <linux/clk.h> +#include <linux/delay.h> #include <linux/firmware.h> #include <linux/interrupt.h> #include <linux/kernel.h> @@ -29,6 +30,8 @@ #include "qcom_q6v5.h" #include "remoteproc_internal.h" +#define ADSP_DECRYPT_SHUTDOWN_DELAY_MS 100 + struct adsp_data { int crash_reason_smem; const char *firmware_name; @@ -37,6 +40,7 @@ struct adsp_data { bool uses_elf64; bool has_aggre2_clk; bool auto_boot; + bool decrypt_shutdown; char **proxy_pd_names; @@ -66,6 +70,7 @@ struct qcom_adsp { unsigned int minidump_id; int crash_reason_smem; bool has_aggre2_clk; + bool decrypt_shutdown; const char *info_name; struct completion start_done; @@ -129,6 +134,20 @@ static void adsp_pds_disable(struct qcom_adsp *adsp, struct device **pds, } } +static int adsp_decrypt_shutdown(struct qcom_adsp *adsp) +{ + int retry_num = 50; + int ret = -EINVAL; + + while (retry_num && ret) { + msleep(ADSP_DECRYPT_SHUTDOWN_DELAY_MS); + ret = qcom_scm_pas_shutdown(adsp->pas_id); + retry_num--; + } + + return ret; +} + static int adsp_unprepare(struct rproc *rproc) { struct qcom_adsp *adsp = (struct qcom_adsp *)rproc->priv; @@ -250,6 +269,9 @@ static int adsp_stop(struct rproc *rproc) dev_err(adsp->dev, "timed out on wait\n"); ret = qcom_scm_pas_shutdown(adsp->pas_id); + if (ret && adsp->decrypt_shutdown) + ret = adsp_decrypt_shutdown(adsp); + if (ret) dev_err(adsp->dev, "failed to shutdown: %d\n", ret); @@ -464,6 +486,7 @@ static int adsp_probe(struct platform_device *pdev) adsp->pas_id = desc->pas_id; adsp->has_aggre2_clk = desc->has_aggre2_clk; adsp->info_name = desc->sysmon_name; + adsp->decrypt_shutdown = desc->decrypt_shutdown; platform_set_drvdata(pdev, adsp); device_wakeup_enable(adsp->dev); @@ -538,6 +561,7 @@ static const struct adsp_data adsp_resource_init = { .pas_id = 1, .has_aggre2_clk = false, .auto_boot = true, + .decrypt_shutdown = false, .ssr_name = "lpass", .sysmon_name = "adsp", .ssctl_id = 0x14, @@ -549,6 +573,7 @@ static const struct adsp_data sdm845_adsp_resource_init = { .pas_id = 1, .has_aggre2_clk = false, .auto_boot = true, + .decrypt_shutdown = false, .load_state = "adsp", .ssr_name = "lpass", .sysmon_name = "adsp", @@ -561,6 +586,7 @@ static const struct adsp_data sm6350_adsp_resource = { .pas_id = 1, .has_aggre2_clk = false, .auto_boot = true, + .decrypt_shutdown = false, .proxy_pd_names = (char*[]){ "lcx", "lmx", @@ -578,6 +604,7 @@ static const struct adsp_data sm8150_adsp_resource = { .pas_id = 1, .has_aggre2_clk = false, .auto_boot = true, + .decrypt_shutdown = false, .proxy_pd_names = (char*[]){ "cx", NULL @@ -594,6 +621,7 @@ static const struct adsp_data sm8250_adsp_resource = { .pas_id = 1, .has_aggre2_clk = false, .auto_boot = true, + .decrypt_shutdown = false, .proxy_pd_names = (char*[]){ "lcx", "lmx", @@ -611,6 +639,7 @@ static const struct adsp_data sm8350_adsp_resource = { .pas_id = 1, .has_aggre2_clk = false, .auto_boot = true, + .decrypt_shutdown = false, .proxy_pd_names = (char*[]){ "lcx", "lmx", @@ -629,6 +658,7 @@ static const struct adsp_data sm8450_adsp_resource = { .uses_elf64 = true, .has_aggre2_clk = false, .auto_boot = true, + .decrypt_shutdown = false, .proxy_pd_names = (char*[]){ "lcx", "lmx", @@ -646,6 +676,7 @@ static const struct adsp_data msm8996_adsp_resource = { .pas_id = 1, .has_aggre2_clk = false, .auto_boot = true, + .decrypt_shutdown = false, .proxy_pd_names = (char*[]){ "cx", NULL @@ -661,6 +692,7 @@ static const struct adsp_data cdsp_resource_init = { .pas_id = 18, .has_aggre2_clk = false, .auto_boot = true, + .decrypt_shutdown = false, .ssr_name = "cdsp", .sysmon_name = "cdsp", .ssctl_id = 0x17, @@ -672,6 +704,7 @@ static const struct adsp_data sdm845_cdsp_resource_init = { .pas_id = 18, .has_aggre2_clk = false, .auto_boot = true, + .decrypt_shutdown = false, .load_state = "cdsp", .ssr_name = "cdsp", .sysmon_name = "cdsp", @@ -684,6 +717,7 @@ static const struct adsp_data sm6350_cdsp_resource = { .pas_id = 18, .has_aggre2_clk = false, .auto_boot = true, + .decrypt_shutdown = false, .proxy_pd_names = (char*[]){ "cx", "mx", @@ -701,6 +735,7 @@ static const struct adsp_data sm8150_cdsp_resource = { .pas_id = 18, .has_aggre2_clk = false, .auto_boot = true, + .decrypt_shutdown = false, .proxy_pd_names = (char*[]){ "cx", NULL @@ -717,6 +752,7 @@ static const struct adsp_data sm8250_cdsp_resource = { .pas_id = 18, .has_aggre2_clk = false, .auto_boot = true, + .decrypt_shutdown = false, .proxy_pd_names = (char*[]){ "cx", NULL @@ -733,6 +769,7 @@ static const struct adsp_data sc8280xp_nsp0_resource = { .pas_id = 18, .has_aggre2_clk = false, .auto_boot = true, + .decrypt_shutdown = false, .proxy_pd_names = (char*[]){ "nsp", NULL @@ -748,6 +785,7 @@ static const struct adsp_data sc8280xp_nsp1_resource = { .pas_id = 30, .has_aggre2_clk = false, .auto_boot = true, + .decrypt_shutdown = false, .proxy_pd_names = (char*[]){ "nsp", NULL @@ -763,6 +801,7 @@ static const struct adsp_data sm8350_cdsp_resource = { .pas_id = 18, .has_aggre2_clk = false, .auto_boot = true, + .decrypt_shutdown = false, .proxy_pd_names = (char*[]){ "cx", "mxc", @@ -781,6 +820,7 @@ static const struct adsp_data sm8450_cdsp_resource = { .uses_elf64 = true, .has_aggre2_clk = false, .auto_boot = true, + .decrypt_shutdown = false, .proxy_pd_names = (char*[]){ "cx", "mxc", @@ -799,6 +839,7 @@ static const struct adsp_data mpss_resource_init = { .minidump_id = 3, .has_aggre2_clk = false, .auto_boot = false, + .decrypt_shutdown = false, .proxy_pd_names = (char*[]){ "cx", "mss", @@ -816,6 +857,7 @@ static const struct adsp_data sc8180x_mpss_resource = { .pas_id = 4, .has_aggre2_clk = false, .auto_boot = false, + .decrypt_shutdown = false, .proxy_pd_names = (char*[]){ "cx", NULL @@ -834,6 +876,7 @@ static const struct adsp_data sm8450_mpss_resource = { .uses_elf64 = true, .has_aggre2_clk = false, .auto_boot = false, + .decrypt_shutdown = true, .proxy_pd_names = (char*[]){ "cx", "mss", @@ -851,6 +894,7 @@ static const struct adsp_data slpi_resource_init = { .pas_id = 12, .has_aggre2_clk = true, .auto_boot = true, + .decrypt_shutdown = false, .proxy_pd_names = (char*[]){ "ssc_cx", NULL @@ -866,6 +910,7 @@ static const struct adsp_data sm8150_slpi_resource = { .pas_id = 12, .has_aggre2_clk = false, .auto_boot = true, + .decrypt_shutdown = false, .proxy_pd_names = (char*[]){ "lcx", "lmx", @@ -883,6 +928,7 @@ static const struct adsp_data sm8250_slpi_resource = { .pas_id = 12, .has_aggre2_clk = false, .auto_boot = true, + .decrypt_shutdown = false, .proxy_pd_names = (char*[]){ "lcx", "lmx", @@ -900,6 +946,7 @@ static const struct adsp_data sm8350_slpi_resource = { .pas_id = 12, .has_aggre2_clk = false, .auto_boot = true, + .decrypt_shutdown = false, .proxy_pd_names = (char*[]){ "lcx", "lmx", @@ -916,6 +963,7 @@ static const struct adsp_data wcss_resource_init = { .firmware_name = "wcnss.mdt", .pas_id = 6, .auto_boot = true, + .decrypt_shutdown = false, .ssr_name = "mpss", .sysmon_name = "wcnss", .ssctl_id = 0x12, @@ -927,6 +975,7 @@ static const struct adsp_data sdx55_mpss_resource = { .pas_id = 4, .has_aggre2_clk = false, .auto_boot = true, + .decrypt_shutdown = false, .proxy_pd_names = (char*[]){ "cx", "mss", -- 2.7.4 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 3/7] remoteproc: qcom: pas: Mark va as io memory 2022-05-24 13:13 [PATCH 0/7] Miscellaneous PAS fixes Sibi Sankar 2022-05-24 13:13 ` [PATCH 1/7] remoteproc: qcom: pas: Fixup the elf class for SM8450 remoteprocs Sibi Sankar 2022-05-24 13:13 ` [PATCH 2/7] remoteproc: qcom: pas: Add decrypt shutdown support for modem Sibi Sankar @ 2022-05-24 13:13 ` Sibi Sankar 2022-05-24 13:13 ` [PATCH 4/7] remoteproc: qcom: pas: Mark devices as wakeup capable Sibi Sankar ` (3 subsequent siblings) 6 siblings, 0 replies; 11+ messages in thread From: Sibi Sankar @ 2022-05-24 13:13 UTC (permalink / raw) To: bjorn.andersson Cc: agross, mathieu.poirier, dmitry.baryshkov, linux-arm-msm, linux-remoteproc, linux-kernel, Siddharth Gupta, Sibi Sankar From: Siddharth Gupta <sidgup@codeaurora.org> The pas driver remaps the entire carveout region using the dev_ioremap_wc() call, which is then used in the adsp_da_to_va() calls made by the rproc framework. This change marks the va returned by this call as an iomem va. Signed-off-by: Siddharth Gupta <sidgup@codeaurora.org> Signed-off-by: Sibi Sankar <quic_sibis@quicinc.com> --- drivers/remoteproc/qcom_q6v5_pas.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/remoteproc/qcom_q6v5_pas.c b/drivers/remoteproc/qcom_q6v5_pas.c index 7313fc0a3c01..a53f8a04f4af 100644 --- a/drivers/remoteproc/qcom_q6v5_pas.c +++ b/drivers/remoteproc/qcom_q6v5_pas.c @@ -291,6 +291,9 @@ static void *adsp_da_to_va(struct rproc *rproc, u64 da, size_t len, bool *is_iom if (offset < 0 || offset + len > adsp->mem_size) return NULL; + if (is_iomem) + *is_iomem = true; + return adsp->mem_region + offset; } -- 2.7.4 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 4/7] remoteproc: qcom: pas: Mark devices as wakeup capable 2022-05-24 13:13 [PATCH 0/7] Miscellaneous PAS fixes Sibi Sankar ` (2 preceding siblings ...) 2022-05-24 13:13 ` [PATCH 3/7] remoteproc: qcom: pas: Mark va as io memory Sibi Sankar @ 2022-05-24 13:13 ` Sibi Sankar 2022-05-24 13:13 ` [PATCH 5/7] remoteproc: qcom: pas: Check if coredump is enabled Sibi Sankar ` (2 subsequent siblings) 6 siblings, 0 replies; 11+ messages in thread From: Sibi Sankar @ 2022-05-24 13:13 UTC (permalink / raw) To: bjorn.andersson Cc: agross, mathieu.poirier, dmitry.baryshkov, linux-arm-msm, linux-remoteproc, linux-kernel, Siddharth Gupta, Sibi Sankar From: Siddharth Gupta <sidgup@codeaurora.org> device_wakeup_enable() on its own is not capable of setting device as wakeup capable, it needs to be used in conjunction with device_set_wakeup_capable(). The device_init_wakeup() calls both these functions on the device passed. Fixes: a781e5aa5911 ("remoteproc: core: Prevent system suspend during remoteproc recovery") Signed-off-by: Siddharth Gupta <sidgup@codeaurora.org> Signed-off-by: Sibi Sankar <quic_sibis@quicinc.com> --- drivers/remoteproc/qcom_q6v5_pas.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/remoteproc/qcom_q6v5_pas.c b/drivers/remoteproc/qcom_q6v5_pas.c index a53f8a04f4af..e25b9315c26d 100644 --- a/drivers/remoteproc/qcom_q6v5_pas.c +++ b/drivers/remoteproc/qcom_q6v5_pas.c @@ -492,7 +492,9 @@ static int adsp_probe(struct platform_device *pdev) adsp->decrypt_shutdown = desc->decrypt_shutdown; platform_set_drvdata(pdev, adsp); - device_wakeup_enable(adsp->dev); + ret = device_init_wakeup(adsp->dev, true); + if (ret) + goto free_rproc; ret = adsp_alloc_memory_region(adsp); if (ret) -- 2.7.4 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 5/7] remoteproc: qcom: pas: Check if coredump is enabled 2022-05-24 13:13 [PATCH 0/7] Miscellaneous PAS fixes Sibi Sankar ` (3 preceding siblings ...) 2022-05-24 13:13 ` [PATCH 4/7] remoteproc: qcom: pas: Mark devices as wakeup capable Sibi Sankar @ 2022-05-24 13:13 ` Sibi Sankar 2022-05-24 13:13 ` [PATCH 6/7] remoteproc: qcom: Check elf class before minidump Sibi Sankar 2022-05-24 13:13 ` [PATCH 7/7] remoteproc: q6v5: Set q6 state to offline on receiving wdog irq Sibi Sankar 6 siblings, 0 replies; 11+ messages in thread From: Sibi Sankar @ 2022-05-24 13:13 UTC (permalink / raw) To: bjorn.andersson Cc: agross, mathieu.poirier, dmitry.baryshkov, linux-arm-msm, linux-remoteproc, linux-kernel, Siddharth Gupta, Sibi Sankar From: Siddharth Gupta <sidgup@codeaurora.org> Client drivers need to check if coredump is enabled for the rproc before continuing with coredump generation. This change adds a check in the PAS driver. Fixes: 8ed8485c4f05 ("remoteproc: qcom: Add capability to collect minidumps") Signed-off-by: Siddharth Gupta <sidgup@codeaurora.org> Signed-off-by: Sibi Sankar <quic_sibis@quicinc.com> --- drivers/remoteproc/qcom_q6v5_pas.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/remoteproc/qcom_q6v5_pas.c b/drivers/remoteproc/qcom_q6v5_pas.c index e25b9315c26d..815ef2c14475 100644 --- a/drivers/remoteproc/qcom_q6v5_pas.c +++ b/drivers/remoteproc/qcom_q6v5_pas.c @@ -93,6 +93,9 @@ static void adsp_minidump(struct rproc *rproc) { struct qcom_adsp *adsp = rproc->priv; + if (rproc->dump_conf == RPROC_COREDUMP_DISABLED) + return; + qcom_minidump(rproc, adsp->minidump_id); } -- 2.7.4 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 6/7] remoteproc: qcom: Check elf class before minidump 2022-05-24 13:13 [PATCH 0/7] Miscellaneous PAS fixes Sibi Sankar ` (4 preceding siblings ...) 2022-05-24 13:13 ` [PATCH 5/7] remoteproc: qcom: pas: Check if coredump is enabled Sibi Sankar @ 2022-05-24 13:13 ` Sibi Sankar 2022-05-26 5:59 ` kernel test robot 2022-05-24 13:13 ` [PATCH 7/7] remoteproc: q6v5: Set q6 state to offline on receiving wdog irq Sibi Sankar 6 siblings, 1 reply; 11+ messages in thread From: Sibi Sankar @ 2022-05-24 13:13 UTC (permalink / raw) To: bjorn.andersson Cc: agross, mathieu.poirier, dmitry.baryshkov, linux-arm-msm, linux-remoteproc, linux-kernel, Siddharth Gupta, Sibi Sankar From: Siddharth Gupta <sidgup@codeaurora.org> When the minidump is done with the elf64 class we need to create the dumps using the section headers, otherwise we need to default to dump creation using the program headers. Fixes: 8ed8485c4f05 ("remoteproc: qcom: Add capability to collect minidumps") Signed-off-by: Siddharth Gupta <sidgup@codeaurora.org> Signed-off-by: Sibi Sankar <quic_sibis@quicinc.com> --- drivers/remoteproc/qcom_common.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/remoteproc/qcom_common.c b/drivers/remoteproc/qcom_common.c index 4b91e3c9eafa..959fb24d57ec 100644 --- a/drivers/remoteproc/qcom_common.c +++ b/drivers/remoteproc/qcom_common.c @@ -174,7 +174,11 @@ void qcom_minidump(struct rproc *rproc, unsigned int minidump_id) dev_err(&rproc->dev, "Failed with error: %d while adding minidump entries\n", ret); goto clean_minidump; } - rproc_coredump_using_sections(rproc); + + if (rproc->elf_class == ELFCLASS64) + rproc_coredump_using_sections(rproc); + else + rproc_coredump(rproc); clean_minidump: qcom_minidump_cleanup(rproc); } -- 2.7.4 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 6/7] remoteproc: qcom: Check elf class before minidump 2022-05-24 13:13 ` [PATCH 6/7] remoteproc: qcom: Check elf class before minidump Sibi Sankar @ 2022-05-26 5:59 ` kernel test robot 0 siblings, 0 replies; 11+ messages in thread From: kernel test robot @ 2022-05-26 5:59 UTC (permalink / raw) To: Sibi Sankar, bjorn.andersson Cc: kbuild-all, agross, mathieu.poirier, dmitry.baryshkov, linux-arm-msm, linux-remoteproc, linux-kernel, Siddharth Gupta, Sibi Sankar Hi Sibi, Thank you for the patch! Yet something to improve: [auto build test ERROR on remoteproc/rproc-next] [cannot apply to linux/master linus/master v5.18] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/intel-lab-lkp/linux/commits/Sibi-Sankar/Miscellaneous-PAS-fixes/20220524-211743 base: git://git.kernel.org/pub/scm/linux/kernel/git/remoteproc/linux.git rproc-next config: arm-allmodconfig (https://download.01.org/0day-ci/archive/20220526/202205261332.p94yBoKE-lkp@intel.com/config) compiler: arm-linux-gnueabi-gcc (GCC) 11.3.0 reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://github.com/intel-lab-lkp/linux/commit/0db77918ce08718d9dbaadd1ceed8dcfb6488abf git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Sibi-Sankar/Miscellaneous-PAS-fixes/20220524-211743 git checkout 0db77918ce08718d9dbaadd1ceed8dcfb6488abf # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.3.0 make.cross W=1 O=build_dir ARCH=arm SHELL=/bin/bash If you fix the issue, kindly add following tag where applicable Reported-by: kernel test robot <lkp@intel.com> All errors (new ones prefixed by >>, old ones prefixed by <<): >> ERROR: modpost: "rproc_coredump" [drivers/remoteproc/qcom_common.ko] undefined! -- 0-DAY CI Kernel Test Service https://01.org/lkp ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 7/7] remoteproc: q6v5: Set q6 state to offline on receiving wdog irq 2022-05-24 13:13 [PATCH 0/7] Miscellaneous PAS fixes Sibi Sankar ` (5 preceding siblings ...) 2022-05-24 13:13 ` [PATCH 6/7] remoteproc: qcom: Check elf class before minidump Sibi Sankar @ 2022-05-24 13:13 ` Sibi Sankar 6 siblings, 0 replies; 11+ messages in thread From: Sibi Sankar @ 2022-05-24 13:13 UTC (permalink / raw) To: bjorn.andersson Cc: agross, mathieu.poirier, dmitry.baryshkov, linux-arm-msm, linux-remoteproc, linux-kernel, Siddharth Gupta, Sibi Sankar From: Siddharth Gupta <sidgup@codeaurora.org> Due to firmware bugs on the Q6 the hardware watchdog irq can be triggered multiple times. As the remoteproc framework schedules work items for the recovery process, if the other threads do not get a chance to run before recovery is completed the proceeding threads will see the state of the remoteproc as running and kill the remoteproc while it is running. This can result in various SMMU and NOC errors. This change sets the state of the remoteproc to offline whenever a watchdog irq is received. Signed-off-by: Siddharth Gupta <sidgup@codeaurora.org> Signed-off-by: Sibi Sankar <quic_sibis@quicinc.com> --- drivers/remoteproc/qcom_q6v5.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/remoteproc/qcom_q6v5.c b/drivers/remoteproc/qcom_q6v5.c index 5280ec9b5449..497acfb33f8f 100644 --- a/drivers/remoteproc/qcom_q6v5.c +++ b/drivers/remoteproc/qcom_q6v5.c @@ -112,6 +112,7 @@ static irqreturn_t q6v5_wdog_interrupt(int irq, void *data) else dev_err(q6v5->dev, "watchdog without message\n"); + q6v5->running = false; rproc_report_crash(q6v5->rproc, RPROC_WATCHDOG); return IRQ_HANDLED; @@ -123,6 +124,9 @@ static irqreturn_t q6v5_fatal_interrupt(int irq, void *data) size_t len; char *msg; + if (!q6v5->running) + return IRQ_HANDLED; + msg = qcom_smem_get(QCOM_SMEM_HOST_ANY, q6v5->crash_reason, &len); if (!IS_ERR(msg) && len > 0 && msg[0]) dev_err(q6v5->dev, "fatal error received: %s\n", msg); -- 2.7.4 ^ permalink raw reply related [flat|nested] 11+ messages in thread
end of thread, other threads:[~2022-05-26 6:00 UTC | newest] Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2022-05-24 13:13 [PATCH 0/7] Miscellaneous PAS fixes Sibi Sankar 2022-05-24 13:13 ` [PATCH 1/7] remoteproc: qcom: pas: Fixup the elf class for SM8450 remoteprocs Sibi Sankar 2022-05-24 21:17 ` Konrad Dybcio 2022-05-25 16:04 ` Sibi Sankar 2022-05-24 13:13 ` [PATCH 2/7] remoteproc: qcom: pas: Add decrypt shutdown support for modem Sibi Sankar 2022-05-24 13:13 ` [PATCH 3/7] remoteproc: qcom: pas: Mark va as io memory Sibi Sankar 2022-05-24 13:13 ` [PATCH 4/7] remoteproc: qcom: pas: Mark devices as wakeup capable Sibi Sankar 2022-05-24 13:13 ` [PATCH 5/7] remoteproc: qcom: pas: Check if coredump is enabled Sibi Sankar 2022-05-24 13:13 ` [PATCH 6/7] remoteproc: qcom: Check elf class before minidump Sibi Sankar 2022-05-26 5:59 ` kernel test robot 2022-05-24 13:13 ` [PATCH 7/7] remoteproc: q6v5: Set q6 state to offline on receiving wdog irq Sibi Sankar
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.