From: Mukesh Ojha <quic_mojha@quicinc.com> To: <agross@kernel.org>, <andersson@kernel.org>, <konrad.dybcio@linaro.org>, <corbet@lwn.net>, <keescook@chromium.org>, <tony.luck@intel.com>, <gpiccoli@igalia.com>, <catalin.marinas@arm.com>, <will@kernel.org>, <krzysztof.kozlowski+dt@linaro.org>, <robh+dt@kernel.org>, <linus.walleij@linaro.org>, <linux-gpio@vger.kernel.org>, <srinivas.kandagatla@linaro.org> Cc: <linux-arm-msm@vger.kernel.org>, <linux-remoteproc@vger.kernel.org>, <linux-kernel@vger.kernel.org>, <linux-hardening@vger.kernel.org>, <linux-arm-kernel@lists.infradead.org>, <linux-doc@vger.kernel.org>, "Mukesh Ojha" <quic_mojha@quicinc.com> Subject: [PATCH v3 12/18] soc: qcom: Register pstore frontend region with minidump Date: Wed, 3 May 2023 22:32:26 +0530 [thread overview] Message-ID: <1683133352-10046-13-git-send-email-quic_mojha@quicinc.com> (raw) In-Reply-To: <1683133352-10046-1-git-send-email-quic_mojha@quicinc.com> Since qcom_pstore_minidump driver creates platform device for qualcomm devices, so it knows the physical addresses of the frontend region now. Let's register the regions with qcom_minidump driver. Signed-off-by: Mukesh Ojha <quic_mojha@quicinc.com> --- drivers/soc/qcom/qcom_pstore_minidump.c | 80 ++++++++++++++++++++++++++++++++- 1 file changed, 79 insertions(+), 1 deletion(-) diff --git a/drivers/soc/qcom/qcom_pstore_minidump.c b/drivers/soc/qcom/qcom_pstore_minidump.c index 8d58500..c2bba4e 100644 --- a/drivers/soc/qcom/qcom_pstore_minidump.c +++ b/drivers/soc/qcom/qcom_pstore_minidump.c @@ -11,6 +11,8 @@ #include <linux/pstore_ram.h> #include <soc/qcom/qcom_minidump.h> +#define QCOM_PSTORE_TYPE_MAX 4 + struct qcom_ramoops_config { unsigned long record_size; unsigned long console_size; @@ -24,6 +26,11 @@ struct qcom_ramoops_config { struct qcom_ramoops_dd { struct ramoops_platform_data qcom_ramoops_pdata; struct platform_device *ramoops_pdev; + struct device *dev; + struct qcom_apss_minidump_region *record_region; + struct qcom_apss_minidump_region *console_region; + struct qcom_apss_minidump_region *pmsg_region; + struct qcom_apss_minidump_region *ftrace_region; }; static struct qcom_ramoops_config default_ramoops_config = { @@ -35,6 +42,64 @@ static struct qcom_ramoops_config default_ramoops_config = { }; static struct qcom_ramoops_dd *qcom_rdd; + +static int +__qcom_ramoops_minidump_region_register(struct qcom_apss_minidump_region *md_region, + const char *name, phys_addr_t phys_addr, + unsigned long size) +{ + int ret; + + if (!size) + return 0; + + md_region = devm_kzalloc(qcom_rdd->dev, sizeof(*md_region), GFP_KERNEL); + if (!md_region) + return -ENOMEM; + + strlcpy(md_region->name, name, sizeof(md_region->name)); + md_region->phys_addr = phys_addr; + md_region->virt_addr = phys_to_virt(phys_addr); + md_region->size = size; + ret = qcom_apss_minidump_region_register(md_region); + if (ret) + dev_err(qcom_rdd->dev, + "failed to add %s in minidump: err: %d\n", name, ret); + + return ret; +} + +static int +qcom_ramoops_minidump_region_register(struct ramoops_platform_data *qcom_ramoops_data) +{ + phys_addr_t phys_addr; + int ret = 0; + + phys_addr = qcom_ramoops_data->mem_address; + ret = __qcom_ramoops_minidump_region_register(qcom_rdd->record_region, + "KDMESG", phys_addr, qcom_ramoops_data->record_size); + if (ret) + return ret; + + phys_addr += qcom_ramoops_data->record_size; + ret = __qcom_ramoops_minidump_region_register(qcom_rdd->console_region, + "KCONSOLE", phys_addr, qcom_ramoops_data->console_size); + if (ret) + return ret; + + phys_addr += qcom_ramoops_data->console_size; + ret = __qcom_ramoops_minidump_region_register(qcom_rdd->pmsg_region, + "KPMSG", phys_addr, qcom_ramoops_data->pmsg_size); + if (ret) + return ret; + + phys_addr += qcom_ramoops_data->pmsg_size; + ret = __qcom_ramoops_minidump_region_register(qcom_rdd->ftrace_region, + "KFTRACE", phys_addr, qcom_ramoops_data->ftrace_size); + + return ret; +} + static int qcom_ramoops_probe(struct platform_device *pdev) { struct device_node *of_node = pdev->dev.of_node; @@ -59,6 +124,7 @@ static int qcom_ramoops_probe(struct platform_device *pdev) if (!qcom_rdd) return -ENOMEM; + qcom_rdd->dev = &pdev->dev; cfg = of_device_get_match_data(&pdev->dev); if (!cfg) { dev_err(&pdev->dev, "failed to get supported matched data\n"); @@ -81,13 +147,25 @@ static int qcom_ramoops_probe(struct platform_device *pdev) ret = PTR_ERR(qcom_rdd->ramoops_pdev); dev_err(&pdev->dev, "could not create platform device: %ld\n", ret); qcom_rdd->ramoops_pdev = NULL; + return ret; } - return ret; + return qcom_ramoops_minidump_region_register(pdata); } static int qcom_ramoops_remove(struct platform_device *pdev) { + struct ramoops_platform_data *pdata; + + pdata = &qcom_rdd->qcom_ramoops_pdata; + if (pdata->record_size) + qcom_apss_minidump_region_unregister(qcom_rdd->record_region); + if (pdata->console_size) + qcom_apss_minidump_region_unregister(qcom_rdd->console_region); + if (pdata->pmsg_size) + qcom_apss_minidump_region_unregister(qcom_rdd->pmsg_region); + if (pdata->ftrace_size) + qcom_apss_minidump_region_unregister(qcom_rdd->ftrace_region); platform_device_unregister(qcom_rdd->ramoops_pdev); qcom_rdd->ramoops_pdev = NULL; -- 2.7.4 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
WARNING: multiple messages have this Message-ID (diff)
From: Mukesh Ojha <quic_mojha@quicinc.com> To: <agross@kernel.org>, <andersson@kernel.org>, <konrad.dybcio@linaro.org>, <corbet@lwn.net>, <keescook@chromium.org>, <tony.luck@intel.com>, <gpiccoli@igalia.com>, <catalin.marinas@arm.com>, <will@kernel.org>, <krzysztof.kozlowski+dt@linaro.org>, <robh+dt@kernel.org>, <linus.walleij@linaro.org>, <linux-gpio@vger.kernel.org>, <srinivas.kandagatla@linaro.org> Cc: <linux-arm-msm@vger.kernel.org>, <linux-remoteproc@vger.kernel.org>, <linux-kernel@vger.kernel.org>, <linux-hardening@vger.kernel.org>, <linux-arm-kernel@lists.infradead.org>, <linux-doc@vger.kernel.org>, "Mukesh Ojha" <quic_mojha@quicinc.com> Subject: [PATCH v3 12/18] soc: qcom: Register pstore frontend region with minidump Date: Wed, 3 May 2023 22:32:26 +0530 [thread overview] Message-ID: <1683133352-10046-13-git-send-email-quic_mojha@quicinc.com> (raw) In-Reply-To: <1683133352-10046-1-git-send-email-quic_mojha@quicinc.com> Since qcom_pstore_minidump driver creates platform device for qualcomm devices, so it knows the physical addresses of the frontend region now. Let's register the regions with qcom_minidump driver. Signed-off-by: Mukesh Ojha <quic_mojha@quicinc.com> --- drivers/soc/qcom/qcom_pstore_minidump.c | 80 ++++++++++++++++++++++++++++++++- 1 file changed, 79 insertions(+), 1 deletion(-) diff --git a/drivers/soc/qcom/qcom_pstore_minidump.c b/drivers/soc/qcom/qcom_pstore_minidump.c index 8d58500..c2bba4e 100644 --- a/drivers/soc/qcom/qcom_pstore_minidump.c +++ b/drivers/soc/qcom/qcom_pstore_minidump.c @@ -11,6 +11,8 @@ #include <linux/pstore_ram.h> #include <soc/qcom/qcom_minidump.h> +#define QCOM_PSTORE_TYPE_MAX 4 + struct qcom_ramoops_config { unsigned long record_size; unsigned long console_size; @@ -24,6 +26,11 @@ struct qcom_ramoops_config { struct qcom_ramoops_dd { struct ramoops_platform_data qcom_ramoops_pdata; struct platform_device *ramoops_pdev; + struct device *dev; + struct qcom_apss_minidump_region *record_region; + struct qcom_apss_minidump_region *console_region; + struct qcom_apss_minidump_region *pmsg_region; + struct qcom_apss_minidump_region *ftrace_region; }; static struct qcom_ramoops_config default_ramoops_config = { @@ -35,6 +42,64 @@ static struct qcom_ramoops_config default_ramoops_config = { }; static struct qcom_ramoops_dd *qcom_rdd; + +static int +__qcom_ramoops_minidump_region_register(struct qcom_apss_minidump_region *md_region, + const char *name, phys_addr_t phys_addr, + unsigned long size) +{ + int ret; + + if (!size) + return 0; + + md_region = devm_kzalloc(qcom_rdd->dev, sizeof(*md_region), GFP_KERNEL); + if (!md_region) + return -ENOMEM; + + strlcpy(md_region->name, name, sizeof(md_region->name)); + md_region->phys_addr = phys_addr; + md_region->virt_addr = phys_to_virt(phys_addr); + md_region->size = size; + ret = qcom_apss_minidump_region_register(md_region); + if (ret) + dev_err(qcom_rdd->dev, + "failed to add %s in minidump: err: %d\n", name, ret); + + return ret; +} + +static int +qcom_ramoops_minidump_region_register(struct ramoops_platform_data *qcom_ramoops_data) +{ + phys_addr_t phys_addr; + int ret = 0; + + phys_addr = qcom_ramoops_data->mem_address; + ret = __qcom_ramoops_minidump_region_register(qcom_rdd->record_region, + "KDMESG", phys_addr, qcom_ramoops_data->record_size); + if (ret) + return ret; + + phys_addr += qcom_ramoops_data->record_size; + ret = __qcom_ramoops_minidump_region_register(qcom_rdd->console_region, + "KCONSOLE", phys_addr, qcom_ramoops_data->console_size); + if (ret) + return ret; + + phys_addr += qcom_ramoops_data->console_size; + ret = __qcom_ramoops_minidump_region_register(qcom_rdd->pmsg_region, + "KPMSG", phys_addr, qcom_ramoops_data->pmsg_size); + if (ret) + return ret; + + phys_addr += qcom_ramoops_data->pmsg_size; + ret = __qcom_ramoops_minidump_region_register(qcom_rdd->ftrace_region, + "KFTRACE", phys_addr, qcom_ramoops_data->ftrace_size); + + return ret; +} + static int qcom_ramoops_probe(struct platform_device *pdev) { struct device_node *of_node = pdev->dev.of_node; @@ -59,6 +124,7 @@ static int qcom_ramoops_probe(struct platform_device *pdev) if (!qcom_rdd) return -ENOMEM; + qcom_rdd->dev = &pdev->dev; cfg = of_device_get_match_data(&pdev->dev); if (!cfg) { dev_err(&pdev->dev, "failed to get supported matched data\n"); @@ -81,13 +147,25 @@ static int qcom_ramoops_probe(struct platform_device *pdev) ret = PTR_ERR(qcom_rdd->ramoops_pdev); dev_err(&pdev->dev, "could not create platform device: %ld\n", ret); qcom_rdd->ramoops_pdev = NULL; + return ret; } - return ret; + return qcom_ramoops_minidump_region_register(pdata); } static int qcom_ramoops_remove(struct platform_device *pdev) { + struct ramoops_platform_data *pdata; + + pdata = &qcom_rdd->qcom_ramoops_pdata; + if (pdata->record_size) + qcom_apss_minidump_region_unregister(qcom_rdd->record_region); + if (pdata->console_size) + qcom_apss_minidump_region_unregister(qcom_rdd->console_region); + if (pdata->pmsg_size) + qcom_apss_minidump_region_unregister(qcom_rdd->pmsg_region); + if (pdata->ftrace_size) + qcom_apss_minidump_region_unregister(qcom_rdd->ftrace_region); platform_device_unregister(qcom_rdd->ramoops_pdev); qcom_rdd->ramoops_pdev = NULL; -- 2.7.4
next prev parent reply other threads:[~2023-05-03 17:05 UTC|newest] Thread overview: 117+ messages / expand[flat|nested] mbox.gz Atom feed top 2023-05-03 17:02 [PATCH v3 00/18] Add basic Minidump kernel driver support Mukesh Ojha 2023-05-03 17:02 ` Mukesh Ojha 2023-05-03 17:02 ` [PATCH v3 01/18] remoteproc: qcom: Expand MD_* as MINIDUMP_* Mukesh Ojha 2023-05-03 17:02 ` Mukesh Ojha 2023-05-04 12:35 ` Krzysztof Kozlowski 2023-05-04 12:35 ` Krzysztof Kozlowski 2023-05-03 17:02 ` [PATCH v3 02/18] remoteproc: qcom: Move minidump specific data to qcom_minidump.h Mukesh Ojha 2023-05-03 17:02 ` Mukesh Ojha 2023-05-04 11:38 ` Krzysztof Kozlowski 2023-05-04 11:38 ` Krzysztof Kozlowski 2023-05-04 11:58 ` Mukesh Ojha 2023-05-04 11:58 ` Mukesh Ojha 2023-05-04 12:03 ` Krzysztof Kozlowski 2023-05-04 12:03 ` Krzysztof Kozlowski 2023-05-04 12:26 ` Mukesh Ojha 2023-05-04 12:26 ` Mukesh Ojha 2023-05-04 12:36 ` Krzysztof Kozlowski 2023-05-04 12:36 ` Krzysztof Kozlowski 2023-05-04 12:57 ` Mukesh Ojha 2023-05-04 12:57 ` Mukesh Ojha 2023-05-04 15:16 ` Krzysztof Kozlowski 2023-05-04 15:16 ` Krzysztof Kozlowski 2023-05-03 17:02 ` [PATCH v3 03/18] docs: qcom: Add qualcomm minidump guide Mukesh Ojha 2023-05-03 17:02 ` Mukesh Ojha 2023-05-08 10:01 ` Bagas Sanjaya 2023-05-25 16:00 ` Mukesh Ojha 2023-05-25 16:00 ` Mukesh Ojha 2023-05-13 18:46 ` Randy Dunlap 2023-05-25 15:59 ` Mukesh Ojha 2023-05-25 15:59 ` Mukesh Ojha 2023-05-03 17:02 ` [PATCH v3 04/18] soc: qcom: Add Qualcomm minidump kernel driver Mukesh Ojha 2023-05-03 17:02 ` Mukesh Ojha 2023-05-04 11:36 ` Krzysztof Kozlowski 2023-05-04 11:36 ` Krzysztof Kozlowski 2023-05-04 12:38 ` Mukesh Ojha 2023-05-04 12:38 ` Mukesh Ojha 2023-05-04 15:21 ` Krzysztof Kozlowski 2023-05-04 15:21 ` Krzysztof Kozlowski 2023-05-04 16:34 ` Krzysztof Kozlowski 2023-05-04 16:34 ` Krzysztof Kozlowski 2023-05-08 7:10 ` Mukesh Ojha 2023-05-09 7:11 ` Krzysztof Kozlowski 2023-05-28 11:29 ` Mukesh Ojha 2023-05-28 11:29 ` Mukesh Ojha 2023-05-14 4:16 ` Trilok Soni 2023-05-05 5:34 ` Mukesh Ojha 2023-05-05 5:34 ` Mukesh Ojha 2023-06-02 10:43 ` Mukesh Ojha 2023-06-02 10:43 ` Mukesh Ojha 2023-05-03 17:02 ` [PATCH v3 05/18] soc: qcom: minidump: Add pending region registration support Mukesh Ojha 2023-05-03 17:02 ` Mukesh Ojha 2023-05-03 17:02 ` [PATCH v3 06/18] soc: qcom: minidump: Add update region support Mukesh Ojha 2023-05-03 17:02 ` Mukesh Ojha 2023-05-04 11:40 ` Krzysztof Kozlowski 2023-05-04 11:40 ` Krzysztof Kozlowski 2023-05-03 17:02 ` [PATCH v3 07/18] arm64: defconfig: Enable Qualcomm minidump driver Mukesh Ojha 2023-05-03 17:02 ` Mukesh Ojha 2023-05-04 11:23 ` Krzysztof Kozlowski 2023-05-04 11:23 ` Krzysztof Kozlowski 2023-05-04 11:45 ` Mukesh Ojha 2023-05-04 11:45 ` Mukesh Ojha 2023-05-04 12:32 ` Krzysztof Kozlowski 2023-05-04 12:32 ` Krzysztof Kozlowski 2023-05-04 14:43 ` Mukesh Ojha 2023-05-04 14:43 ` Mukesh Ojha 2023-05-04 15:24 ` Krzysztof Kozlowski 2023-05-04 15:24 ` Krzysztof Kozlowski 2023-05-03 17:02 ` [PATCH v3 08/18] remoterproc: qcom: refactor to leverage exported minidump symbol Mukesh Ojha 2023-05-03 17:02 ` Mukesh Ojha 2023-05-03 17:02 ` [PATCH v3 09/18] soc: qcom: Add qcom's pstore minidump driver support Mukesh Ojha 2023-05-03 17:02 ` Mukesh Ojha 2023-05-04 15:35 ` Krzysztof Kozlowski 2023-05-04 15:35 ` Krzysztof Kozlowski 2023-05-09 16:06 ` Luca Stefani 2023-05-16 20:48 ` Kees Cook 2023-05-16 20:48 ` Kees Cook 2023-05-03 17:02 ` [PATCH v3 10/18] dt-bindings: reserved-memory: Add qcom,ramoops-minidump binding Mukesh Ojha 2023-05-03 17:02 ` Mukesh Ojha 2023-05-04 11:22 ` Krzysztof Kozlowski 2023-05-04 11:22 ` Krzysztof Kozlowski 2023-05-03 17:02 ` [PATCH v3 11/18] arm64: dts: qcom: sm8450: Add Qualcomm ramoops minidump node Mukesh Ojha 2023-05-03 17:02 ` Mukesh Ojha 2023-05-04 7:14 ` Konrad Dybcio 2023-05-04 7:14 ` Konrad Dybcio 2023-05-04 11:26 ` Krzysztof Kozlowski 2023-05-04 11:26 ` Krzysztof Kozlowski 2023-05-03 17:02 ` Mukesh Ojha [this message] 2023-05-03 17:02 ` [PATCH v3 12/18] soc: qcom: Register pstore frontend region with minidump Mukesh Ojha 2023-05-09 15:45 ` Luca Stefani 2023-05-16 20:50 ` Kees Cook 2023-05-16 20:50 ` Kees Cook 2023-05-03 17:02 ` [PATCH v3 13/18] arm64: defconfig: Enable Qualcomm pstore minidump client driver Mukesh Ojha 2023-05-03 17:02 ` Mukesh Ojha 2023-05-04 11:23 ` Krzysztof Kozlowski 2023-05-04 11:23 ` Krzysztof Kozlowski 2023-05-03 17:02 ` [PATCH v3 14/18] firmware: qcom_scm: provide a read-modify-write function Mukesh Ojha 2023-05-03 17:02 ` Mukesh Ojha 2023-05-18 18:48 ` Trilok Soni 2023-05-18 18:48 ` Trilok Soni 2023-05-03 17:02 ` [PATCH v3 15/18] pinctrl: qcom: Use qcom_scm_io_update_field() Mukesh Ojha 2023-05-03 17:02 ` Mukesh Ojha 2023-05-03 17:02 ` [PATCH v3 16/18] firmware: scm: Modify only the download bits in TCSR register Mukesh Ojha 2023-05-03 17:02 ` Mukesh Ojha 2023-05-03 17:02 ` [PATCH v3 17/18] firmware: qcom_scm: Refactor code to support multiple download mode Mukesh Ojha 2023-05-03 17:02 ` Mukesh Ojha 2023-05-03 17:02 ` [PATCH v3 18/18] firmware: qcom_scm: Add multiple download mode support Mukesh Ojha 2023-05-03 17:02 ` Mukesh Ojha 2023-05-04 11:26 ` [PATCH v3 00/18] Add basic Minidump kernel driver support Krzysztof Kozlowski 2023-05-04 11:26 ` Krzysztof Kozlowski 2023-07-15 22:13 ` (subset) " Bjorn Andersson 2023-07-15 22:13 ` Bjorn Andersson 2023-07-17 1:15 ` Mathieu Poirier 2023-07-17 1:15 ` Mathieu Poirier 2023-07-17 8:02 ` Krzysztof Kozlowski 2023-07-17 8:02 ` Krzysztof Kozlowski 2023-07-17 16:21 ` Bjorn Andersson 2023-07-17 16:21 ` Bjorn Andersson
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1683133352-10046-13-git-send-email-quic_mojha@quicinc.com \ --to=quic_mojha@quicinc.com \ --cc=agross@kernel.org \ --cc=andersson@kernel.org \ --cc=catalin.marinas@arm.com \ --cc=corbet@lwn.net \ --cc=gpiccoli@igalia.com \ --cc=keescook@chromium.org \ --cc=konrad.dybcio@linaro.org \ --cc=krzysztof.kozlowski+dt@linaro.org \ --cc=linus.walleij@linaro.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-arm-msm@vger.kernel.org \ --cc=linux-doc@vger.kernel.org \ --cc=linux-gpio@vger.kernel.org \ --cc=linux-hardening@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-remoteproc@vger.kernel.org \ --cc=robh+dt@kernel.org \ --cc=srinivas.kandagatla@linaro.org \ --cc=tony.luck@intel.com \ --cc=will@kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
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.