* [PATCH v5 0/5] remoteproc: qcom: PIL info support @ 2020-05-13 5:56 Bjorn Andersson 2020-05-13 5:56 ` [PATCH v5 1/5] dt-bindings: remoteproc: Add Qualcomm PIL info binding Bjorn Andersson ` (5 more replies) 0 siblings, 6 replies; 14+ messages in thread From: Bjorn Andersson @ 2020-05-13 5:56 UTC (permalink / raw) To: Andy Gross, Bjorn Andersson, Ohad Ben-Cohen, Rob Herring Cc: linux-arm-msm, linux-remoteproc, devicetree, linux-kernel Introduce support for filling out the relocation information in IMEM, to aid post mortem debug tools to locate the various remoteprocs. Bjorn Andersson (5): dt-bindings: remoteproc: Add Qualcomm PIL info binding remoteproc: qcom: Introduce helper to store pil info in IMEM remoteproc: qcom: Update PIL relocation info on load arm64: dts: qcom: qcs404: Add IMEM and PIL info region arm64: dts: qcom: sdm845: Add IMEM and PIL info region .../bindings/remoteproc/qcom,pil-info.yaml | 44 +++++++ arch/arm64/boot/dts/qcom/qcs404.dtsi | 15 +++ arch/arm64/boot/dts/qcom/sdm845.dtsi | 15 +++ drivers/remoteproc/Kconfig | 6 + drivers/remoteproc/Makefile | 1 + drivers/remoteproc/qcom_pil_info.c | 124 ++++++++++++++++++ drivers/remoteproc/qcom_pil_info.h | 7 + drivers/remoteproc/qcom_q6v5_adsp.c | 16 ++- drivers/remoteproc/qcom_q6v5_mss.c | 3 + drivers/remoteproc/qcom_q6v5_pas.c | 15 ++- drivers/remoteproc/qcom_q6v5_wcss.c | 14 +- drivers/remoteproc/qcom_wcnss.c | 14 +- 12 files changed, 262 insertions(+), 12 deletions(-) create mode 100644 Documentation/devicetree/bindings/remoteproc/qcom,pil-info.yaml create mode 100644 drivers/remoteproc/qcom_pil_info.c create mode 100644 drivers/remoteproc/qcom_pil_info.h -- 2.26.2 ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH v5 1/5] dt-bindings: remoteproc: Add Qualcomm PIL info binding 2020-05-13 5:56 [PATCH v5 0/5] remoteproc: qcom: PIL info support Bjorn Andersson @ 2020-05-13 5:56 ` Bjorn Andersson 2020-05-20 17:59 ` Mathieu Poirier 2020-05-26 22:32 ` Rob Herring 2020-05-13 5:56 ` [PATCH v5 2/5] remoteproc: qcom: Introduce helper to store pil info in IMEM Bjorn Andersson ` (4 subsequent siblings) 5 siblings, 2 replies; 14+ messages in thread From: Bjorn Andersson @ 2020-05-13 5:56 UTC (permalink / raw) To: Andy Gross, Bjorn Andersson, Ohad Ben-Cohen, Rob Herring Cc: linux-arm-msm, linux-remoteproc, devicetree, linux-kernel, Stephen Boyd Add a devicetree binding for the Qualcomm peripheral image loader relocation information region found in the IMEM. Reviewed-by: Stephen Boyd <swboyd@chromium.org> Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org> --- Changes since v4: - Fixed reg in example to make it compile .../bindings/remoteproc/qcom,pil-info.yaml | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 Documentation/devicetree/bindings/remoteproc/qcom,pil-info.yaml diff --git a/Documentation/devicetree/bindings/remoteproc/qcom,pil-info.yaml b/Documentation/devicetree/bindings/remoteproc/qcom,pil-info.yaml new file mode 100644 index 000000000000..87c52316ddbd --- /dev/null +++ b/Documentation/devicetree/bindings/remoteproc/qcom,pil-info.yaml @@ -0,0 +1,44 @@ +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/remoteproc/qcom,pil-info.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Qualcomm peripheral image loader relocation info binding + +maintainers: + - Bjorn Andersson <bjorn.andersson@linaro.org> + +description: + The Qualcomm peripheral image loader relocation memory region, in IMEM, is + used for communicating remoteproc relocation information to post mortem + debugging tools. + +properties: + compatible: + const: qcom,pil-reloc-info + + reg: + maxItems: 1 + +required: + - compatible + - reg + +examples: + - | + imem@146bf000 { + compatible = "syscon", "simple-mfd"; + reg = <0x146bf000 0x1000>; + + #address-cells = <1>; + #size-cells = <1>; + + ranges = <0 0x146bf000 0x1000>; + + pil-reloc@94c { + compatible = "qcom,pil-reloc-info"; + reg = <0x94c 0xc8>; + }; + }; +... -- 2.26.2 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH v5 1/5] dt-bindings: remoteproc: Add Qualcomm PIL info binding 2020-05-13 5:56 ` [PATCH v5 1/5] dt-bindings: remoteproc: Add Qualcomm PIL info binding Bjorn Andersson @ 2020-05-20 17:59 ` Mathieu Poirier 2020-05-26 22:32 ` Rob Herring 1 sibling, 0 replies; 14+ messages in thread From: Mathieu Poirier @ 2020-05-20 17:59 UTC (permalink / raw) To: Bjorn Andersson Cc: Andy Gross, Ohad Ben-Cohen, Rob Herring, linux-arm-msm, linux-remoteproc, devicetree, linux-kernel, Stephen Boyd On Tue, May 12, 2020 at 10:56:37PM -0700, Bjorn Andersson wrote: > Add a devicetree binding for the Qualcomm peripheral image loader > relocation information region found in the IMEM. > > Reviewed-by: Stephen Boyd <swboyd@chromium.org> > Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org> > --- > > Changes since v4: > - Fixed reg in example to make it compile > > .../bindings/remoteproc/qcom,pil-info.yaml | 44 +++++++++++++++++++ > 1 file changed, 44 insertions(+) > create mode 100644 Documentation/devicetree/bindings/remoteproc/qcom,pil-info.yaml Reviewed-by: Mathieu Poirier <mathieu.poirier@linaro.org> > > diff --git a/Documentation/devicetree/bindings/remoteproc/qcom,pil-info.yaml b/Documentation/devicetree/bindings/remoteproc/qcom,pil-info.yaml > new file mode 100644 > index 000000000000..87c52316ddbd > --- /dev/null > +++ b/Documentation/devicetree/bindings/remoteproc/qcom,pil-info.yaml > @@ -0,0 +1,44 @@ > +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/remoteproc/qcom,pil-info.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: Qualcomm peripheral image loader relocation info binding > + > +maintainers: > + - Bjorn Andersson <bjorn.andersson@linaro.org> > + > +description: > + The Qualcomm peripheral image loader relocation memory region, in IMEM, is > + used for communicating remoteproc relocation information to post mortem > + debugging tools. > + > +properties: > + compatible: > + const: qcom,pil-reloc-info > + > + reg: > + maxItems: 1 > + > +required: > + - compatible > + - reg > + > +examples: > + - | > + imem@146bf000 { > + compatible = "syscon", "simple-mfd"; > + reg = <0x146bf000 0x1000>; > + > + #address-cells = <1>; > + #size-cells = <1>; > + > + ranges = <0 0x146bf000 0x1000>; > + > + pil-reloc@94c { > + compatible = "qcom,pil-reloc-info"; > + reg = <0x94c 0xc8>; > + }; > + }; > +... > -- > 2.26.2 > ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v5 1/5] dt-bindings: remoteproc: Add Qualcomm PIL info binding 2020-05-13 5:56 ` [PATCH v5 1/5] dt-bindings: remoteproc: Add Qualcomm PIL info binding Bjorn Andersson 2020-05-20 17:59 ` Mathieu Poirier @ 2020-05-26 22:32 ` Rob Herring 1 sibling, 0 replies; 14+ messages in thread From: Rob Herring @ 2020-05-26 22:32 UTC (permalink / raw) To: Bjorn Andersson Cc: linux-kernel, linux-arm-msm, devicetree, Ohad Ben-Cohen, linux-remoteproc, Stephen Boyd, Andy Gross, Rob Herring On Tue, 12 May 2020 22:56:37 -0700, Bjorn Andersson wrote: > Add a devicetree binding for the Qualcomm peripheral image loader > relocation information region found in the IMEM. > > Reviewed-by: Stephen Boyd <swboyd@chromium.org> > Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org> > --- > > Changes since v4: > - Fixed reg in example to make it compile > > .../bindings/remoteproc/qcom,pil-info.yaml | 44 +++++++++++++++++++ > 1 file changed, 44 insertions(+) > create mode 100644 Documentation/devicetree/bindings/remoteproc/qcom,pil-info.yaml > Reviewed-by: Rob Herring <robh@kernel.org> ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH v5 2/5] remoteproc: qcom: Introduce helper to store pil info in IMEM 2020-05-13 5:56 [PATCH v5 0/5] remoteproc: qcom: PIL info support Bjorn Andersson 2020-05-13 5:56 ` [PATCH v5 1/5] dt-bindings: remoteproc: Add Qualcomm PIL info binding Bjorn Andersson @ 2020-05-13 5:56 ` Bjorn Andersson 2020-05-20 18:00 ` Mathieu Poirier 2020-05-13 5:56 ` [PATCH v5 3/5] remoteproc: qcom: Update PIL relocation info on load Bjorn Andersson ` (3 subsequent siblings) 5 siblings, 1 reply; 14+ messages in thread From: Bjorn Andersson @ 2020-05-13 5:56 UTC (permalink / raw) To: Andy Gross, Bjorn Andersson, Ohad Ben-Cohen, Rob Herring Cc: linux-arm-msm, linux-remoteproc, devicetree, linux-kernel A region in IMEM is used to communicate load addresses of remoteproc to post mortem debug tools. Implement a helper function that can be used to store this information in order to enable these tools to process collected ramdumps. Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org> --- Changes since v4: - Replaced platform_driver by just a single helper function - Lazy initialization of mapping - Cleaned up search loop - Replaced regmap access of IMEM with ioremap and normal accessors drivers/remoteproc/Kconfig | 3 + drivers/remoteproc/Makefile | 1 + drivers/remoteproc/qcom_pil_info.c | 124 +++++++++++++++++++++++++++++ drivers/remoteproc/qcom_pil_info.h | 7 ++ 4 files changed, 135 insertions(+) create mode 100644 drivers/remoteproc/qcom_pil_info.c create mode 100644 drivers/remoteproc/qcom_pil_info.h diff --git a/drivers/remoteproc/Kconfig b/drivers/remoteproc/Kconfig index fbaed079b299..8088ca4dd6dc 100644 --- a/drivers/remoteproc/Kconfig +++ b/drivers/remoteproc/Kconfig @@ -107,6 +107,9 @@ config KEYSTONE_REMOTEPROC It's safe to say N here if you're not interested in the Keystone DSPs or just want to use a bare minimum kernel. +config QCOM_PIL_INFO + tristate + config QCOM_RPROC_COMMON tristate diff --git a/drivers/remoteproc/Makefile b/drivers/remoteproc/Makefile index 0effd3825035..cc0f631adb3b 100644 --- a/drivers/remoteproc/Makefile +++ b/drivers/remoteproc/Makefile @@ -15,6 +15,7 @@ obj-$(CONFIG_OMAP_REMOTEPROC) += omap_remoteproc.o obj-$(CONFIG_WKUP_M3_RPROC) += wkup_m3_rproc.o obj-$(CONFIG_DA8XX_REMOTEPROC) += da8xx_remoteproc.o obj-$(CONFIG_KEYSTONE_REMOTEPROC) += keystone_remoteproc.o +obj-$(CONFIG_QCOM_PIL_INFO) += qcom_pil_info.o obj-$(CONFIG_QCOM_RPROC_COMMON) += qcom_common.o obj-$(CONFIG_QCOM_Q6V5_COMMON) += qcom_q6v5.o obj-$(CONFIG_QCOM_Q6V5_ADSP) += qcom_q6v5_adsp.o diff --git a/drivers/remoteproc/qcom_pil_info.c b/drivers/remoteproc/qcom_pil_info.c new file mode 100644 index 000000000000..0785c7cde2d3 --- /dev/null +++ b/drivers/remoteproc/qcom_pil_info.c @@ -0,0 +1,124 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (c) 2019-2020 Linaro Ltd. + */ +#include <linux/kernel.h> +#include <linux/module.h> +#include <linux/mutex.h> +#include <linux/of_address.h> + +#define PIL_RELOC_NAME_LEN 8 + +struct pil_reloc_entry { + char name[PIL_RELOC_NAME_LEN]; + __le64 base; + __le32 size; +} __packed; + +struct pil_reloc { + struct device *dev; + void __iomem *base; + size_t num_entries; +}; + +static struct pil_reloc _reloc __read_mostly; +static DEFINE_MUTEX(reloc_mutex); + +static int qcom_pil_info_init(void) +{ + struct device_node *np; + struct resource imem; + void __iomem *base; + int ret; + + /* Already initialized? */ + if (_reloc.base) + return 0; + + np = of_find_compatible_node(NULL, NULL, "qcom,pil-reloc-info"); + if (!np) + return -ENOENT; + + ret = of_address_to_resource(np, 0, &imem); + of_node_put(np); + if (ret < 0) + return ret; + + base = ioremap(imem.start, resource_size(&imem)); + if (!base) { + pr_err("failed to map PIL relocation info region\n"); + return -ENOMEM; + } + + memset_io(base, 0, resource_size(&imem)); + + _reloc.base = base; + _reloc.num_entries = resource_size(&imem) / sizeof(struct pil_reloc_entry); + + return 0; +} + +/** + * qcom_pil_info_store() - store PIL information of image in IMEM + * @image: name of the image + * @base: base address of the loaded image + * @size: size of the loaded image + * + * Return: 0 on success, negative errno on failure + */ +int qcom_pil_info_store(const char *image, phys_addr_t base, size_t size) +{ + char buf[PIL_RELOC_NAME_LEN]; + void __iomem *entry; + int ret; + int i; + + mutex_lock(&reloc_mutex); + ret = qcom_pil_info_init(); + if (ret < 0) { + mutex_unlock(&reloc_mutex); + return ret; + } + + for (i = 0; i < _reloc.num_entries; i++) { + entry = _reloc.base + i * sizeof(struct pil_reloc_entry); + + memcpy_fromio(buf, entry, PIL_RELOC_NAME_LEN); + + /* + * An empty record means we didn't find it, given that the + * records are packed. + */ + if (!buf[0]) + goto found_unused; + + if (!strncmp(buf, image, PIL_RELOC_NAME_LEN)) + goto found_existing; + } + + pr_warn("insufficient PIL info slots\n"); + mutex_unlock(&reloc_mutex); + return -ENOMEM; + +found_unused: + memcpy_toio(entry, image, PIL_RELOC_NAME_LEN); +found_existing: + writel(base, entry + offsetof(struct pil_reloc_entry, base)); + writel(size, entry + offsetof(struct pil_reloc_entry, size)); + mutex_unlock(&reloc_mutex); + + return 0; +} +EXPORT_SYMBOL_GPL(qcom_pil_info_store); + +static void __exit pil_reloc_exit(void) +{ + mutex_lock(&reloc_mutex); + iounmap(_reloc.base); + _reloc.base = NULL; + mutex_unlock(&reloc_mutex); +} +module_exit(pil_reloc_exit); + +MODULE_DESCRIPTION("Qualcomm PIL relocation info"); +MODULE_LICENSE("GPL v2"); diff --git a/drivers/remoteproc/qcom_pil_info.h b/drivers/remoteproc/qcom_pil_info.h new file mode 100644 index 000000000000..1b89a63ba82f --- /dev/null +++ b/drivers/remoteproc/qcom_pil_info.h @@ -0,0 +1,7 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __QCOM_PIL_INFO_H__ +#define __QCOM_PIL_INFO_H__ + +int qcom_pil_info_store(const char *image, phys_addr_t base, size_t size); + +#endif -- 2.26.2 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH v5 2/5] remoteproc: qcom: Introduce helper to store pil info in IMEM 2020-05-13 5:56 ` [PATCH v5 2/5] remoteproc: qcom: Introduce helper to store pil info in IMEM Bjorn Andersson @ 2020-05-20 18:00 ` Mathieu Poirier 0 siblings, 0 replies; 14+ messages in thread From: Mathieu Poirier @ 2020-05-20 18:00 UTC (permalink / raw) To: Bjorn Andersson Cc: Andy Gross, Ohad Ben-Cohen, Rob Herring, linux-arm-msm, linux-remoteproc, devicetree, linux-kernel On Tue, May 12, 2020 at 10:56:38PM -0700, Bjorn Andersson wrote: > A region in IMEM is used to communicate load addresses of remoteproc to > post mortem debug tools. Implement a helper function that can be used to > store this information in order to enable these tools to process > collected ramdumps. > > Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org> > --- > > Changes since v4: > - Replaced platform_driver by just a single helper function > - Lazy initialization of mapping > - Cleaned up search loop > - Replaced regmap access of IMEM with ioremap and normal accessors > > drivers/remoteproc/Kconfig | 3 + > drivers/remoteproc/Makefile | 1 + > drivers/remoteproc/qcom_pil_info.c | 124 +++++++++++++++++++++++++++++ > drivers/remoteproc/qcom_pil_info.h | 7 ++ > 4 files changed, 135 insertions(+) > create mode 100644 drivers/remoteproc/qcom_pil_info.c > create mode 100644 drivers/remoteproc/qcom_pil_info.h > > diff --git a/drivers/remoteproc/Kconfig b/drivers/remoteproc/Kconfig > index fbaed079b299..8088ca4dd6dc 100644 > --- a/drivers/remoteproc/Kconfig > +++ b/drivers/remoteproc/Kconfig > @@ -107,6 +107,9 @@ config KEYSTONE_REMOTEPROC > It's safe to say N here if you're not interested in the Keystone > DSPs or just want to use a bare minimum kernel. > > +config QCOM_PIL_INFO > + tristate > + > config QCOM_RPROC_COMMON > tristate > > diff --git a/drivers/remoteproc/Makefile b/drivers/remoteproc/Makefile > index 0effd3825035..cc0f631adb3b 100644 > --- a/drivers/remoteproc/Makefile > +++ b/drivers/remoteproc/Makefile > @@ -15,6 +15,7 @@ obj-$(CONFIG_OMAP_REMOTEPROC) += omap_remoteproc.o > obj-$(CONFIG_WKUP_M3_RPROC) += wkup_m3_rproc.o > obj-$(CONFIG_DA8XX_REMOTEPROC) += da8xx_remoteproc.o > obj-$(CONFIG_KEYSTONE_REMOTEPROC) += keystone_remoteproc.o > +obj-$(CONFIG_QCOM_PIL_INFO) += qcom_pil_info.o > obj-$(CONFIG_QCOM_RPROC_COMMON) += qcom_common.o > obj-$(CONFIG_QCOM_Q6V5_COMMON) += qcom_q6v5.o > obj-$(CONFIG_QCOM_Q6V5_ADSP) += qcom_q6v5_adsp.o > diff --git a/drivers/remoteproc/qcom_pil_info.c b/drivers/remoteproc/qcom_pil_info.c > new file mode 100644 > index 000000000000..0785c7cde2d3 > --- /dev/null > +++ b/drivers/remoteproc/qcom_pil_info.c > @@ -0,0 +1,124 @@ > +// SPDX-License-Identifier: GPL-2.0-only > +/* > + * Copyright (c) 2019-2020 Linaro Ltd. > + */ > +#include <linux/kernel.h> > +#include <linux/module.h> > +#include <linux/mutex.h> > +#include <linux/of_address.h> > + > +#define PIL_RELOC_NAME_LEN 8 > + > +struct pil_reloc_entry { > + char name[PIL_RELOC_NAME_LEN]; > + __le64 base; > + __le32 size; > +} __packed; > + > +struct pil_reloc { > + struct device *dev; > + void __iomem *base; > + size_t num_entries; > +}; > + > +static struct pil_reloc _reloc __read_mostly; > +static DEFINE_MUTEX(reloc_mutex); > + > +static int qcom_pil_info_init(void) > +{ > + struct device_node *np; > + struct resource imem; > + void __iomem *base; > + int ret; > + > + /* Already initialized? */ > + if (_reloc.base) > + return 0; > + > + np = of_find_compatible_node(NULL, NULL, "qcom,pil-reloc-info"); > + if (!np) > + return -ENOENT; > + > + ret = of_address_to_resource(np, 0, &imem); > + of_node_put(np); > + if (ret < 0) > + return ret; > + > + base = ioremap(imem.start, resource_size(&imem)); > + if (!base) { > + pr_err("failed to map PIL relocation info region\n"); > + return -ENOMEM; > + } > + > + memset_io(base, 0, resource_size(&imem)); > + > + _reloc.base = base; > + _reloc.num_entries = resource_size(&imem) / sizeof(struct pil_reloc_entry); > + > + return 0; > +} > + > +/** > + * qcom_pil_info_store() - store PIL information of image in IMEM > + * @image: name of the image > + * @base: base address of the loaded image > + * @size: size of the loaded image > + * > + * Return: 0 on success, negative errno on failure > + */ > +int qcom_pil_info_store(const char *image, phys_addr_t base, size_t size) > +{ > + char buf[PIL_RELOC_NAME_LEN]; > + void __iomem *entry; > + int ret; > + int i; > + > + mutex_lock(&reloc_mutex); > + ret = qcom_pil_info_init(); > + if (ret < 0) { > + mutex_unlock(&reloc_mutex); > + return ret; > + } > + > + for (i = 0; i < _reloc.num_entries; i++) { > + entry = _reloc.base + i * sizeof(struct pil_reloc_entry); > + > + memcpy_fromio(buf, entry, PIL_RELOC_NAME_LEN); > + > + /* > + * An empty record means we didn't find it, given that the > + * records are packed. > + */ > + if (!buf[0]) > + goto found_unused; > + > + if (!strncmp(buf, image, PIL_RELOC_NAME_LEN)) > + goto found_existing; > + } > + > + pr_warn("insufficient PIL info slots\n"); > + mutex_unlock(&reloc_mutex); > + return -ENOMEM; > + > +found_unused: > + memcpy_toio(entry, image, PIL_RELOC_NAME_LEN); > +found_existing: > + writel(base, entry + offsetof(struct pil_reloc_entry, base)); > + writel(size, entry + offsetof(struct pil_reloc_entry, size)); > + mutex_unlock(&reloc_mutex); > + > + return 0; > +} > +EXPORT_SYMBOL_GPL(qcom_pil_info_store); > + > +static void __exit pil_reloc_exit(void) > +{ > + mutex_lock(&reloc_mutex); > + iounmap(_reloc.base); > + _reloc.base = NULL; > + mutex_unlock(&reloc_mutex); > +} > +module_exit(pil_reloc_exit); > + > +MODULE_DESCRIPTION("Qualcomm PIL relocation info"); > +MODULE_LICENSE("GPL v2"); > diff --git a/drivers/remoteproc/qcom_pil_info.h b/drivers/remoteproc/qcom_pil_info.h > new file mode 100644 > index 000000000000..1b89a63ba82f > --- /dev/null > +++ b/drivers/remoteproc/qcom_pil_info.h > @@ -0,0 +1,7 @@ > +/* SPDX-License-Identifier: GPL-2.0 */ > +#ifndef __QCOM_PIL_INFO_H__ > +#define __QCOM_PIL_INFO_H__ > + > +int qcom_pil_info_store(const char *image, phys_addr_t base, size_t size); > + > +#endif Very clean an easy to understand. Reviewed-by: Mathieu Poirier <mathieu.poirier@linaro.org> > -- > 2.26.2 > ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH v5 3/5] remoteproc: qcom: Update PIL relocation info on load 2020-05-13 5:56 [PATCH v5 0/5] remoteproc: qcom: PIL info support Bjorn Andersson 2020-05-13 5:56 ` [PATCH v5 1/5] dt-bindings: remoteproc: Add Qualcomm PIL info binding Bjorn Andersson 2020-05-13 5:56 ` [PATCH v5 2/5] remoteproc: qcom: Introduce helper to store pil info in IMEM Bjorn Andersson @ 2020-05-13 5:56 ` Bjorn Andersson 2020-05-14 18:48 ` kbuild test robot 2020-05-19 18:14 ` rishabhb 2020-05-13 5:56 ` [PATCH v5 4/5] arm64: dts: qcom: qcs404: Add IMEM and PIL info region Bjorn Andersson ` (2 subsequent siblings) 5 siblings, 2 replies; 14+ messages in thread From: Bjorn Andersson @ 2020-05-13 5:56 UTC (permalink / raw) To: Andy Gross, Bjorn Andersson, Ohad Ben-Cohen, Rob Herring Cc: linux-arm-msm, linux-remoteproc, devicetree, linux-kernel Update the PIL relocation information in IMEM with information about where the firmware for various remoteprocs are loaded. Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org> --- Changes since v4: - Dropped unnecessary comment about ignoring return value. drivers/remoteproc/Kconfig | 3 +++ drivers/remoteproc/qcom_q6v5_adsp.c | 16 +++++++++++++--- drivers/remoteproc/qcom_q6v5_mss.c | 3 +++ drivers/remoteproc/qcom_q6v5_pas.c | 15 ++++++++++++--- drivers/remoteproc/qcom_q6v5_wcss.c | 14 +++++++++++--- drivers/remoteproc/qcom_wcnss.c | 14 +++++++++++--- 6 files changed, 53 insertions(+), 12 deletions(-) diff --git a/drivers/remoteproc/Kconfig b/drivers/remoteproc/Kconfig index 8088ca4dd6dc..6bd42a411ca8 100644 --- a/drivers/remoteproc/Kconfig +++ b/drivers/remoteproc/Kconfig @@ -126,6 +126,7 @@ config QCOM_Q6V5_ADSP depends on RPMSG_QCOM_GLINK_SMEM || RPMSG_QCOM_GLINK_SMEM=n depends on QCOM_SYSMON || QCOM_SYSMON=n select MFD_SYSCON + select QCOM_PIL_INFO select QCOM_MDT_LOADER select QCOM_Q6V5_COMMON select QCOM_RPROC_COMMON @@ -158,6 +159,7 @@ config QCOM_Q6V5_PAS depends on RPMSG_QCOM_GLINK_SMEM || RPMSG_QCOM_GLINK_SMEM=n depends on QCOM_SYSMON || QCOM_SYSMON=n select MFD_SYSCON + select QCOM_PIL_INFO select QCOM_MDT_LOADER select QCOM_Q6V5_COMMON select QCOM_RPROC_COMMON @@ -209,6 +211,7 @@ config QCOM_WCNSS_PIL depends on QCOM_SMEM depends on QCOM_SYSMON || QCOM_SYSMON=n select QCOM_MDT_LOADER + select QCOM_PIL_INFO select QCOM_RPROC_COMMON select QCOM_SCM help diff --git a/drivers/remoteproc/qcom_q6v5_adsp.c b/drivers/remoteproc/qcom_q6v5_adsp.c index d2a2574dcf35..c539e89664cb 100644 --- a/drivers/remoteproc/qcom_q6v5_adsp.c +++ b/drivers/remoteproc/qcom_q6v5_adsp.c @@ -26,6 +26,7 @@ #include <linux/soc/qcom/smem_state.h> #include "qcom_common.h" +#include "qcom_pil_info.h" #include "qcom_q6v5.h" #include "remoteproc_internal.h" @@ -82,6 +83,7 @@ struct qcom_adsp { unsigned int halt_lpass; int crash_reason_smem; + const char *info_name; struct completion start_done; struct completion stop_done; @@ -164,10 +166,17 @@ static int qcom_adsp_shutdown(struct qcom_adsp *adsp) static int adsp_load(struct rproc *rproc, const struct firmware *fw) { struct qcom_adsp *adsp = (struct qcom_adsp *)rproc->priv; + int ret; + + ret = qcom_mdt_load_no_init(adsp->dev, fw, rproc->firmware, 0, + adsp->mem_region, adsp->mem_phys, + adsp->mem_size, &adsp->mem_reloc); + if (ret) + return ret; + + qcom_pil_info_store(adsp->info_name, adsp->mem_reloc, adsp->mem_size); - return qcom_mdt_load_no_init(adsp->dev, fw, rproc->firmware, 0, - adsp->mem_region, adsp->mem_phys, adsp->mem_size, - &adsp->mem_reloc); + return 0; } static int adsp_start(struct rproc *rproc) @@ -436,6 +445,7 @@ static int adsp_probe(struct platform_device *pdev) adsp = (struct qcom_adsp *)rproc->priv; adsp->dev = &pdev->dev; adsp->rproc = rproc; + adsp->info_name = desc->sysmon_name; platform_set_drvdata(pdev, adsp); ret = adsp_alloc_memory_region(adsp); diff --git a/drivers/remoteproc/qcom_q6v5_mss.c b/drivers/remoteproc/qcom_q6v5_mss.c index c4936f4d1e80..fdbcae11ae64 100644 --- a/drivers/remoteproc/qcom_q6v5_mss.c +++ b/drivers/remoteproc/qcom_q6v5_mss.c @@ -29,6 +29,7 @@ #include "remoteproc_internal.h" #include "qcom_common.h" +#include "qcom_pil_info.h" #include "qcom_q6v5.h" #include <linux/qcom_scm.h> @@ -1221,6 +1222,8 @@ static int q6v5_mpss_load(struct q6v5 *qproc) else if (ret < 0) dev_err(qproc->dev, "MPSS authentication failed: %d\n", ret); + qcom_pil_info_store("modem", mpss_reloc, qproc->mpss_size); + release_firmware: release_firmware(fw); out: diff --git a/drivers/remoteproc/qcom_q6v5_pas.c b/drivers/remoteproc/qcom_q6v5_pas.c index 3bb69f58e086..84cb19231c35 100644 --- a/drivers/remoteproc/qcom_q6v5_pas.c +++ b/drivers/remoteproc/qcom_q6v5_pas.c @@ -25,6 +25,7 @@ #include <linux/soc/qcom/smem_state.h> #include "qcom_common.h" +#include "qcom_pil_info.h" #include "qcom_q6v5.h" #include "remoteproc_internal.h" @@ -64,6 +65,7 @@ struct qcom_adsp { int pas_id; int crash_reason_smem; bool has_aggre2_clk; + const char *info_name; struct completion start_done; struct completion stop_done; @@ -117,11 +119,17 @@ static void adsp_pds_disable(struct qcom_adsp *adsp, struct device **pds, static int adsp_load(struct rproc *rproc, const struct firmware *fw) { struct qcom_adsp *adsp = (struct qcom_adsp *)rproc->priv; + int ret; - return qcom_mdt_load(adsp->dev, fw, rproc->firmware, adsp->pas_id, - adsp->mem_region, adsp->mem_phys, adsp->mem_size, - &adsp->mem_reloc); + ret = qcom_mdt_load(adsp->dev, fw, rproc->firmware, adsp->pas_id, + adsp->mem_region, adsp->mem_phys, adsp->mem_size, + &adsp->mem_reloc); + if (ret) + return ret; + qcom_pil_info_store(adsp->info_name, adsp->mem_reloc, adsp->mem_size); + + return 0; } static int adsp_start(struct rproc *rproc) @@ -405,6 +413,7 @@ static int adsp_probe(struct platform_device *pdev) adsp->rproc = rproc; adsp->pas_id = desc->pas_id; adsp->has_aggre2_clk = desc->has_aggre2_clk; + adsp->info_name = desc->sysmon_name; platform_set_drvdata(pdev, adsp); ret = adsp_alloc_memory_region(adsp); diff --git a/drivers/remoteproc/qcom_q6v5_wcss.c b/drivers/remoteproc/qcom_q6v5_wcss.c index f1924b740a10..962e37a86b8b 100644 --- a/drivers/remoteproc/qcom_q6v5_wcss.c +++ b/drivers/remoteproc/qcom_q6v5_wcss.c @@ -421,10 +421,18 @@ static void *q6v5_wcss_da_to_va(struct rproc *rproc, u64 da, size_t len) static int q6v5_wcss_load(struct rproc *rproc, const struct firmware *fw) { struct q6v5_wcss *wcss = rproc->priv; + int ret; + + ret = qcom_mdt_load_no_init(wcss->dev, fw, rproc->firmware, + 0, wcss->mem_region, wcss->mem_phys, + wcss->mem_size, &wcss->mem_reloc); + if (ret) + return ret; + + /* Failures only affect post mortem debugging, so ignore return value */ + qcom_pil_info_store("wcnss", wcss->mem_reloc, wcss->mem_size); - return qcom_mdt_load_no_init(wcss->dev, fw, rproc->firmware, - 0, wcss->mem_region, wcss->mem_phys, - wcss->mem_size, &wcss->mem_reloc); + return ret; } static const struct rproc_ops q6v5_wcss_ops = { diff --git a/drivers/remoteproc/qcom_wcnss.c b/drivers/remoteproc/qcom_wcnss.c index 5d65e1a9329a..229482b3231f 100644 --- a/drivers/remoteproc/qcom_wcnss.c +++ b/drivers/remoteproc/qcom_wcnss.c @@ -27,6 +27,7 @@ #include "qcom_common.h" #include "remoteproc_internal.h" +#include "qcom_pil_info.h" #include "qcom_wcnss.h" #define WCNSS_CRASH_REASON_SMEM 422 @@ -145,10 +146,17 @@ void qcom_wcnss_assign_iris(struct qcom_wcnss *wcnss, static int wcnss_load(struct rproc *rproc, const struct firmware *fw) { struct qcom_wcnss *wcnss = (struct qcom_wcnss *)rproc->priv; + int ret; + + ret = qcom_mdt_load(wcnss->dev, fw, rproc->firmware, WCNSS_PAS_ID, + wcnss->mem_region, wcnss->mem_phys, + wcnss->mem_size, &wcnss->mem_reloc); + if (ret) + return ret; + + qcom_pil_info_store("wcnss", wcnss->mem_reloc, wcnss->mem_size); - return qcom_mdt_load(wcnss->dev, fw, rproc->firmware, WCNSS_PAS_ID, - wcnss->mem_region, wcnss->mem_phys, - wcnss->mem_size, &wcnss->mem_reloc); + return 0; } static void wcnss_indicate_nv_download(struct qcom_wcnss *wcnss) -- 2.26.2 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH v5 3/5] remoteproc: qcom: Update PIL relocation info on load 2020-05-13 5:56 ` [PATCH v5 3/5] remoteproc: qcom: Update PIL relocation info on load Bjorn Andersson @ 2020-05-14 18:48 ` kbuild test robot 2020-05-19 18:14 ` rishabhb 1 sibling, 0 replies; 14+ messages in thread From: kbuild test robot @ 2020-05-14 18:48 UTC (permalink / raw) To: Bjorn Andersson, Andy Gross, Ohad Ben-Cohen, Rob Herring Cc: kbuild-all, linux-arm-msm, linux-remoteproc, devicetree, linux-kernel [-- Attachment #1: Type: text/plain, Size: 2336 bytes --] Hi Bjorn, I love your patch! Yet something to improve: [auto build test ERROR on robh/for-next] [also build test ERROR on linus/master v5.7-rc5 next-20200514] [cannot apply to agross-msm/qcom/for-next remoteproc/for-next rpmsg/for-next hwspinlock/for-next] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system. BTW, we also suggest to use '--base' option to specify the base tree in git format-patch, please see https://stackoverflow.com/a/37406982] url: https://github.com/0day-ci/linux/commits/Bjorn-Andersson/remoteproc-qcom-PIL-info-support/20200514-161851 base: https://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git for-next config: arm64-allyesconfig (attached as .config) compiler: aarch64-linux-gcc (GCC) 9.3.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day GCC_VERSION=9.3.0 make.cross ARCH=arm64 If you fix the issue, kindly add following tag as appropriate Reported-by: kbuild test robot <lkp@intel.com> All errors (new ones prefixed by >>): drivers/remoteproc/qcom_q6v5_wcss.c: In function 'q6v5_wcss_load': >> drivers/remoteproc/qcom_q6v5_wcss.c:433:2: error: implicit declaration of function 'qcom_pil_info_store' [-Werror=implicit-function-declaration] 433 | qcom_pil_info_store("wcnss", wcss->mem_reloc, wcss->mem_size); | ^~~~~~~~~~~~~~~~~~~ cc1: some warnings being treated as errors vim +/qcom_pil_info_store +433 drivers/remoteproc/qcom_q6v5_wcss.c 420 421 static int q6v5_wcss_load(struct rproc *rproc, const struct firmware *fw) 422 { 423 struct q6v5_wcss *wcss = rproc->priv; 424 int ret; 425 426 ret = qcom_mdt_load_no_init(wcss->dev, fw, rproc->firmware, 427 0, wcss->mem_region, wcss->mem_phys, 428 wcss->mem_size, &wcss->mem_reloc); 429 if (ret) 430 return ret; 431 432 /* Failures only affect post mortem debugging, so ignore return value */ > 433 qcom_pil_info_store("wcnss", wcss->mem_reloc, wcss->mem_size); 434 435 return ret; 436 } 437 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org [-- Attachment #2: .config.gz --] [-- Type: application/gzip, Size: 71781 bytes --] ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v5 3/5] remoteproc: qcom: Update PIL relocation info on load @ 2020-05-14 18:48 ` kbuild test robot 0 siblings, 0 replies; 14+ messages in thread From: kbuild test robot @ 2020-05-14 18:48 UTC (permalink / raw) To: kbuild-all [-- Attachment #1: Type: text/plain, Size: 2394 bytes --] Hi Bjorn, I love your patch! Yet something to improve: [auto build test ERROR on robh/for-next] [also build test ERROR on linus/master v5.7-rc5 next-20200514] [cannot apply to agross-msm/qcom/for-next remoteproc/for-next rpmsg/for-next hwspinlock/for-next] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system. BTW, we also suggest to use '--base' option to specify the base tree in git format-patch, please see https://stackoverflow.com/a/37406982] url: https://github.com/0day-ci/linux/commits/Bjorn-Andersson/remoteproc-qcom-PIL-info-support/20200514-161851 base: https://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git for-next config: arm64-allyesconfig (attached as .config) compiler: aarch64-linux-gcc (GCC) 9.3.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day GCC_VERSION=9.3.0 make.cross ARCH=arm64 If you fix the issue, kindly add following tag as appropriate Reported-by: kbuild test robot <lkp@intel.com> All errors (new ones prefixed by >>): drivers/remoteproc/qcom_q6v5_wcss.c: In function 'q6v5_wcss_load': >> drivers/remoteproc/qcom_q6v5_wcss.c:433:2: error: implicit declaration of function 'qcom_pil_info_store' [-Werror=implicit-function-declaration] 433 | qcom_pil_info_store("wcnss", wcss->mem_reloc, wcss->mem_size); | ^~~~~~~~~~~~~~~~~~~ cc1: some warnings being treated as errors vim +/qcom_pil_info_store +433 drivers/remoteproc/qcom_q6v5_wcss.c 420 421 static int q6v5_wcss_load(struct rproc *rproc, const struct firmware *fw) 422 { 423 struct q6v5_wcss *wcss = rproc->priv; 424 int ret; 425 426 ret = qcom_mdt_load_no_init(wcss->dev, fw, rproc->firmware, 427 0, wcss->mem_region, wcss->mem_phys, 428 wcss->mem_size, &wcss->mem_reloc); 429 if (ret) 430 return ret; 431 432 /* Failures only affect post mortem debugging, so ignore return value */ > 433 qcom_pil_info_store("wcnss", wcss->mem_reloc, wcss->mem_size); 434 435 return ret; 436 } 437 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org [-- Attachment #2: config.gz --] [-- Type: application/gzip, Size: 71781 bytes --] ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v5 3/5] remoteproc: qcom: Update PIL relocation info on load 2020-05-13 5:56 ` [PATCH v5 3/5] remoteproc: qcom: Update PIL relocation info on load Bjorn Andersson 2020-05-14 18:48 ` kbuild test robot @ 2020-05-19 18:14 ` rishabhb 2020-05-19 23:07 ` Bjorn Andersson 1 sibling, 1 reply; 14+ messages in thread From: rishabhb @ 2020-05-19 18:14 UTC (permalink / raw) To: Bjorn Andersson Cc: Andy Gross, Ohad Ben-Cohen, Rob Herring, linux-arm-msm, linux-remoteproc, devicetree, linux-kernel, linux-remoteproc-owner On 2020-05-12 22:56, Bjorn Andersson wrote: > Update the PIL relocation information in IMEM with information about > where the firmware for various remoteprocs are loaded. > > Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org> > --- > > Changes since v4: > - Dropped unnecessary comment about ignoring return value. > > drivers/remoteproc/Kconfig | 3 +++ > drivers/remoteproc/qcom_q6v5_adsp.c | 16 +++++++++++++--- > drivers/remoteproc/qcom_q6v5_mss.c | 3 +++ > drivers/remoteproc/qcom_q6v5_pas.c | 15 ++++++++++++--- > drivers/remoteproc/qcom_q6v5_wcss.c | 14 +++++++++++--- > drivers/remoteproc/qcom_wcnss.c | 14 +++++++++++--- > 6 files changed, 53 insertions(+), 12 deletions(-) > > diff --git a/drivers/remoteproc/Kconfig b/drivers/remoteproc/Kconfig > index 8088ca4dd6dc..6bd42a411ca8 100644 > --- a/drivers/remoteproc/Kconfig > +++ b/drivers/remoteproc/Kconfig > @@ -126,6 +126,7 @@ config QCOM_Q6V5_ADSP > depends on RPMSG_QCOM_GLINK_SMEM || RPMSG_QCOM_GLINK_SMEM=n > depends on QCOM_SYSMON || QCOM_SYSMON=n > select MFD_SYSCON > + select QCOM_PIL_INFO > select QCOM_MDT_LOADER > select QCOM_Q6V5_COMMON > select QCOM_RPROC_COMMON > @@ -158,6 +159,7 @@ config QCOM_Q6V5_PAS > depends on RPMSG_QCOM_GLINK_SMEM || RPMSG_QCOM_GLINK_SMEM=n > depends on QCOM_SYSMON || QCOM_SYSMON=n > select MFD_SYSCON > + select QCOM_PIL_INFO > select QCOM_MDT_LOADER > select QCOM_Q6V5_COMMON > select QCOM_RPROC_COMMON > @@ -209,6 +211,7 @@ config QCOM_WCNSS_PIL > depends on QCOM_SMEM > depends on QCOM_SYSMON || QCOM_SYSMON=n > select QCOM_MDT_LOADER > + select QCOM_PIL_INFO > select QCOM_RPROC_COMMON > select QCOM_SCM > help > diff --git a/drivers/remoteproc/qcom_q6v5_adsp.c > b/drivers/remoteproc/qcom_q6v5_adsp.c > index d2a2574dcf35..c539e89664cb 100644 > --- a/drivers/remoteproc/qcom_q6v5_adsp.c > +++ b/drivers/remoteproc/qcom_q6v5_adsp.c > @@ -26,6 +26,7 @@ > #include <linux/soc/qcom/smem_state.h> > > #include "qcom_common.h" > +#include "qcom_pil_info.h" > #include "qcom_q6v5.h" > #include "remoteproc_internal.h" > > @@ -82,6 +83,7 @@ struct qcom_adsp { > unsigned int halt_lpass; > > int crash_reason_smem; > + const char *info_name; > > struct completion start_done; > struct completion stop_done; > @@ -164,10 +166,17 @@ static int qcom_adsp_shutdown(struct qcom_adsp > *adsp) > static int adsp_load(struct rproc *rproc, const struct firmware *fw) > { > struct qcom_adsp *adsp = (struct qcom_adsp *)rproc->priv; > + int ret; > + > + ret = qcom_mdt_load_no_init(adsp->dev, fw, rproc->firmware, 0, > + adsp->mem_region, adsp->mem_phys, > + adsp->mem_size, &adsp->mem_reloc); > + if (ret) > + return ret; > + > + qcom_pil_info_store(adsp->info_name, adsp->mem_reloc, > adsp->mem_size); > > - return qcom_mdt_load_no_init(adsp->dev, fw, rproc->firmware, 0, > - adsp->mem_region, adsp->mem_phys, adsp->mem_size, > - &adsp->mem_reloc); > + return 0; > } > > static int adsp_start(struct rproc *rproc) > @@ -436,6 +445,7 @@ static int adsp_probe(struct platform_device *pdev) > adsp = (struct qcom_adsp *)rproc->priv; > adsp->dev = &pdev->dev; > adsp->rproc = rproc; > + adsp->info_name = desc->sysmon_name; > platform_set_drvdata(pdev, adsp); > > ret = adsp_alloc_memory_region(adsp); > diff --git a/drivers/remoteproc/qcom_q6v5_mss.c > b/drivers/remoteproc/qcom_q6v5_mss.c > index c4936f4d1e80..fdbcae11ae64 100644 > --- a/drivers/remoteproc/qcom_q6v5_mss.c > +++ b/drivers/remoteproc/qcom_q6v5_mss.c > @@ -29,6 +29,7 @@ > > #include "remoteproc_internal.h" > #include "qcom_common.h" > +#include "qcom_pil_info.h" > #include "qcom_q6v5.h" > > #include <linux/qcom_scm.h> > @@ -1221,6 +1222,8 @@ static int q6v5_mpss_load(struct q6v5 *qproc) > else if (ret < 0) > dev_err(qproc->dev, "MPSS authentication failed: %d\n", ret); > > + qcom_pil_info_store("modem", mpss_reloc, qproc->mpss_size); > + > release_firmware: > release_firmware(fw); > out: > diff --git a/drivers/remoteproc/qcom_q6v5_pas.c > b/drivers/remoteproc/qcom_q6v5_pas.c > index 3bb69f58e086..84cb19231c35 100644 > --- a/drivers/remoteproc/qcom_q6v5_pas.c > +++ b/drivers/remoteproc/qcom_q6v5_pas.c > @@ -25,6 +25,7 @@ > #include <linux/soc/qcom/smem_state.h> > > #include "qcom_common.h" > +#include "qcom_pil_info.h" > #include "qcom_q6v5.h" > #include "remoteproc_internal.h" > > @@ -64,6 +65,7 @@ struct qcom_adsp { > int pas_id; > int crash_reason_smem; > bool has_aggre2_clk; > + const char *info_name; > > struct completion start_done; > struct completion stop_done; > @@ -117,11 +119,17 @@ static void adsp_pds_disable(struct qcom_adsp > *adsp, struct device **pds, > static int adsp_load(struct rproc *rproc, const struct firmware *fw) > { > struct qcom_adsp *adsp = (struct qcom_adsp *)rproc->priv; > + int ret; > > - return qcom_mdt_load(adsp->dev, fw, rproc->firmware, adsp->pas_id, > - adsp->mem_region, adsp->mem_phys, adsp->mem_size, > - &adsp->mem_reloc); > + ret = qcom_mdt_load(adsp->dev, fw, rproc->firmware, adsp->pas_id, > + adsp->mem_region, adsp->mem_phys, adsp->mem_size, > + &adsp->mem_reloc); > + if (ret) > + return ret; > > + qcom_pil_info_store(adsp->info_name, adsp->mem_reloc, > adsp->mem_size); mem_reloc is used to calculate offset and then we again add that offset to the ioremapped region base. So we should pass adsp->mem_phys as start here? > + > + return 0; > } > > static int adsp_start(struct rproc *rproc) > @@ -405,6 +413,7 @@ static int adsp_probe(struct platform_device *pdev) > adsp->rproc = rproc; > adsp->pas_id = desc->pas_id; > adsp->has_aggre2_clk = desc->has_aggre2_clk; > + adsp->info_name = desc->sysmon_name; > platform_set_drvdata(pdev, adsp); > > ret = adsp_alloc_memory_region(adsp); > diff --git a/drivers/remoteproc/qcom_q6v5_wcss.c > b/drivers/remoteproc/qcom_q6v5_wcss.c > index f1924b740a10..962e37a86b8b 100644 > --- a/drivers/remoteproc/qcom_q6v5_wcss.c > +++ b/drivers/remoteproc/qcom_q6v5_wcss.c > @@ -421,10 +421,18 @@ static void *q6v5_wcss_da_to_va(struct rproc > *rproc, u64 da, size_t len) > static int q6v5_wcss_load(struct rproc *rproc, const struct firmware > *fw) > { > struct q6v5_wcss *wcss = rproc->priv; > + int ret; > + > + ret = qcom_mdt_load_no_init(wcss->dev, fw, rproc->firmware, > + 0, wcss->mem_region, wcss->mem_phys, > + wcss->mem_size, &wcss->mem_reloc); > + if (ret) > + return ret; > + > + /* Failures only affect post mortem debugging, so ignore return value > */ > + qcom_pil_info_store("wcnss", wcss->mem_reloc, wcss->mem_size); > > - return qcom_mdt_load_no_init(wcss->dev, fw, rproc->firmware, > - 0, wcss->mem_region, wcss->mem_phys, > - wcss->mem_size, &wcss->mem_reloc); > + return ret; > } > > static const struct rproc_ops q6v5_wcss_ops = { > diff --git a/drivers/remoteproc/qcom_wcnss.c > b/drivers/remoteproc/qcom_wcnss.c > index 5d65e1a9329a..229482b3231f 100644 > --- a/drivers/remoteproc/qcom_wcnss.c > +++ b/drivers/remoteproc/qcom_wcnss.c > @@ -27,6 +27,7 @@ > > #include "qcom_common.h" > #include "remoteproc_internal.h" > +#include "qcom_pil_info.h" > #include "qcom_wcnss.h" > > #define WCNSS_CRASH_REASON_SMEM 422 > @@ -145,10 +146,17 @@ void qcom_wcnss_assign_iris(struct qcom_wcnss > *wcnss, > static int wcnss_load(struct rproc *rproc, const struct firmware *fw) > { > struct qcom_wcnss *wcnss = (struct qcom_wcnss *)rproc->priv; > + int ret; > + > + ret = qcom_mdt_load(wcnss->dev, fw, rproc->firmware, WCNSS_PAS_ID, > + wcnss->mem_region, wcnss->mem_phys, > + wcnss->mem_size, &wcnss->mem_reloc); > + if (ret) > + return ret; > + > + qcom_pil_info_store("wcnss", wcnss->mem_reloc, wcnss->mem_size); > > - return qcom_mdt_load(wcnss->dev, fw, rproc->firmware, WCNSS_PAS_ID, > - wcnss->mem_region, wcnss->mem_phys, > - wcnss->mem_size, &wcnss->mem_reloc); > + return 0; > } > > static void wcnss_indicate_nv_download(struct qcom_wcnss *wcnss) ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v5 3/5] remoteproc: qcom: Update PIL relocation info on load 2020-05-19 18:14 ` rishabhb @ 2020-05-19 23:07 ` Bjorn Andersson 0 siblings, 0 replies; 14+ messages in thread From: Bjorn Andersson @ 2020-05-19 23:07 UTC (permalink / raw) To: rishabhb Cc: Andy Gross, Ohad Ben-Cohen, Rob Herring, linux-arm-msm, linux-remoteproc, devicetree, linux-kernel, linux-remoteproc-owner On Tue 19 May 11:14 PDT 2020, rishabhb@codeaurora.org wrote: > On 2020-05-12 22:56, Bjorn Andersson wrote: > > Update the PIL relocation information in IMEM with information about > > where the firmware for various remoteprocs are loaded. > > > > Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org> > > --- > > > > Changes since v4: > > - Dropped unnecessary comment about ignoring return value. > > > > drivers/remoteproc/Kconfig | 3 +++ > > drivers/remoteproc/qcom_q6v5_adsp.c | 16 +++++++++++++--- > > drivers/remoteproc/qcom_q6v5_mss.c | 3 +++ > > drivers/remoteproc/qcom_q6v5_pas.c | 15 ++++++++++++--- > > drivers/remoteproc/qcom_q6v5_wcss.c | 14 +++++++++++--- > > drivers/remoteproc/qcom_wcnss.c | 14 +++++++++++--- > > 6 files changed, 53 insertions(+), 12 deletions(-) > > > > diff --git a/drivers/remoteproc/Kconfig b/drivers/remoteproc/Kconfig > > index 8088ca4dd6dc..6bd42a411ca8 100644 > > --- a/drivers/remoteproc/Kconfig > > +++ b/drivers/remoteproc/Kconfig > > @@ -126,6 +126,7 @@ config QCOM_Q6V5_ADSP > > depends on RPMSG_QCOM_GLINK_SMEM || RPMSG_QCOM_GLINK_SMEM=n > > depends on QCOM_SYSMON || QCOM_SYSMON=n > > select MFD_SYSCON > > + select QCOM_PIL_INFO > > select QCOM_MDT_LOADER > > select QCOM_Q6V5_COMMON > > select QCOM_RPROC_COMMON > > @@ -158,6 +159,7 @@ config QCOM_Q6V5_PAS > > depends on RPMSG_QCOM_GLINK_SMEM || RPMSG_QCOM_GLINK_SMEM=n > > depends on QCOM_SYSMON || QCOM_SYSMON=n > > select MFD_SYSCON > > + select QCOM_PIL_INFO > > select QCOM_MDT_LOADER > > select QCOM_Q6V5_COMMON > > select QCOM_RPROC_COMMON > > @@ -209,6 +211,7 @@ config QCOM_WCNSS_PIL > > depends on QCOM_SMEM > > depends on QCOM_SYSMON || QCOM_SYSMON=n > > select QCOM_MDT_LOADER > > + select QCOM_PIL_INFO > > select QCOM_RPROC_COMMON > > select QCOM_SCM > > help > > diff --git a/drivers/remoteproc/qcom_q6v5_adsp.c > > b/drivers/remoteproc/qcom_q6v5_adsp.c > > index d2a2574dcf35..c539e89664cb 100644 > > --- a/drivers/remoteproc/qcom_q6v5_adsp.c > > +++ b/drivers/remoteproc/qcom_q6v5_adsp.c > > @@ -26,6 +26,7 @@ > > #include <linux/soc/qcom/smem_state.h> > > > > #include "qcom_common.h" > > +#include "qcom_pil_info.h" > > #include "qcom_q6v5.h" > > #include "remoteproc_internal.h" > > > > @@ -82,6 +83,7 @@ struct qcom_adsp { > > unsigned int halt_lpass; > > > > int crash_reason_smem; > > + const char *info_name; > > > > struct completion start_done; > > struct completion stop_done; > > @@ -164,10 +166,17 @@ static int qcom_adsp_shutdown(struct qcom_adsp > > *adsp) > > static int adsp_load(struct rproc *rproc, const struct firmware *fw) > > { > > struct qcom_adsp *adsp = (struct qcom_adsp *)rproc->priv; > > + int ret; > > + > > + ret = qcom_mdt_load_no_init(adsp->dev, fw, rproc->firmware, 0, > > + adsp->mem_region, adsp->mem_phys, > > + adsp->mem_size, &adsp->mem_reloc); > > + if (ret) > > + return ret; > > + > > + qcom_pil_info_store(adsp->info_name, adsp->mem_reloc, adsp->mem_size); > > > > - return qcom_mdt_load_no_init(adsp->dev, fw, rproc->firmware, 0, > > - adsp->mem_region, adsp->mem_phys, adsp->mem_size, > > - &adsp->mem_reloc); > > + return 0; > > } > > > > static int adsp_start(struct rproc *rproc) > > @@ -436,6 +445,7 @@ static int adsp_probe(struct platform_device *pdev) > > adsp = (struct qcom_adsp *)rproc->priv; > > adsp->dev = &pdev->dev; > > adsp->rproc = rproc; > > + adsp->info_name = desc->sysmon_name; > > platform_set_drvdata(pdev, adsp); > > > > ret = adsp_alloc_memory_region(adsp); > > diff --git a/drivers/remoteproc/qcom_q6v5_mss.c > > b/drivers/remoteproc/qcom_q6v5_mss.c > > index c4936f4d1e80..fdbcae11ae64 100644 > > --- a/drivers/remoteproc/qcom_q6v5_mss.c > > +++ b/drivers/remoteproc/qcom_q6v5_mss.c > > @@ -29,6 +29,7 @@ > > > > #include "remoteproc_internal.h" > > #include "qcom_common.h" > > +#include "qcom_pil_info.h" > > #include "qcom_q6v5.h" > > > > #include <linux/qcom_scm.h> > > @@ -1221,6 +1222,8 @@ static int q6v5_mpss_load(struct q6v5 *qproc) > > else if (ret < 0) > > dev_err(qproc->dev, "MPSS authentication failed: %d\n", ret); > > > > + qcom_pil_info_store("modem", mpss_reloc, qproc->mpss_size); > > + > > release_firmware: > > release_firmware(fw); > > out: > > diff --git a/drivers/remoteproc/qcom_q6v5_pas.c > > b/drivers/remoteproc/qcom_q6v5_pas.c > > index 3bb69f58e086..84cb19231c35 100644 > > --- a/drivers/remoteproc/qcom_q6v5_pas.c > > +++ b/drivers/remoteproc/qcom_q6v5_pas.c > > @@ -25,6 +25,7 @@ > > #include <linux/soc/qcom/smem_state.h> > > > > #include "qcom_common.h" > > +#include "qcom_pil_info.h" > > #include "qcom_q6v5.h" > > #include "remoteproc_internal.h" > > > > @@ -64,6 +65,7 @@ struct qcom_adsp { > > int pas_id; > > int crash_reason_smem; > > bool has_aggre2_clk; > > + const char *info_name; > > > > struct completion start_done; > > struct completion stop_done; > > @@ -117,11 +119,17 @@ static void adsp_pds_disable(struct qcom_adsp > > *adsp, struct device **pds, > > static int adsp_load(struct rproc *rproc, const struct firmware *fw) > > { > > struct qcom_adsp *adsp = (struct qcom_adsp *)rproc->priv; > > + int ret; > > > > - return qcom_mdt_load(adsp->dev, fw, rproc->firmware, adsp->pas_id, > > - adsp->mem_region, adsp->mem_phys, adsp->mem_size, > > - &adsp->mem_reloc); > > + ret = qcom_mdt_load(adsp->dev, fw, rproc->firmware, adsp->pas_id, > > + adsp->mem_region, adsp->mem_phys, adsp->mem_size, > > + &adsp->mem_reloc); > > + if (ret) > > + return ret; > > > > + qcom_pil_info_store(adsp->info_name, adsp->mem_reloc, adsp->mem_size); > mem_reloc is used to calculate offset and then we again add that offset to > the > ioremapped region base. So we should pass adsp->mem_phys as start here? You're correct, I will respin this. Thanks, Bjorn ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH v5 4/5] arm64: dts: qcom: qcs404: Add IMEM and PIL info region 2020-05-13 5:56 [PATCH v5 0/5] remoteproc: qcom: PIL info support Bjorn Andersson ` (2 preceding siblings ...) 2020-05-13 5:56 ` [PATCH v5 3/5] remoteproc: qcom: Update PIL relocation info on load Bjorn Andersson @ 2020-05-13 5:56 ` Bjorn Andersson 2020-05-13 5:56 ` [PATCH v5 5/5] arm64: dts: qcom: sdm845: " Bjorn Andersson 2020-05-14 16:53 ` [PATCH v5 0/5] remoteproc: qcom: PIL info support Vinod Koul 5 siblings, 0 replies; 14+ messages in thread From: Bjorn Andersson @ 2020-05-13 5:56 UTC (permalink / raw) To: Andy Gross, Bjorn Andersson, Ohad Ben-Cohen, Rob Herring Cc: linux-arm-msm, linux-remoteproc, devicetree, linux-kernel, Stephen Boyd Add a simple-mfd representing IMEM on QCS404 and define the PIL relocation info region, so that post mortem tools will be able to locate the loaded remoteprocs. Reviewed-by: Stephen Boyd <swboyd@chromium.org> Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org> --- Changes since v4: - imem is no longer compatible with "syscon" arch/arm64/boot/dts/qcom/qcs404.dtsi | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/arch/arm64/boot/dts/qcom/qcs404.dtsi b/arch/arm64/boot/dts/qcom/qcs404.dtsi index c685a1664810..b654b802e95c 100644 --- a/arch/arm64/boot/dts/qcom/qcs404.dtsi +++ b/arch/arm64/boot/dts/qcom/qcs404.dtsi @@ -1097,6 +1097,21 @@ blsp2_spi0: spi@7af5000 { status = "disabled"; }; + imem@8600000 { + compatible = "simple-mfd"; + reg = <0x08600000 0x1000>; + + #address-cells = <1>; + #size-cells = <1>; + + ranges = <0 0x08600000 0x1000>; + + pil-reloc@94c { + compatible = "qcom,pil-reloc-info"; + reg = <0x94c 0xc8>; + }; + }; + intc: interrupt-controller@b000000 { compatible = "qcom,msm-qgic2"; interrupt-controller; -- 2.26.2 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v5 5/5] arm64: dts: qcom: sdm845: Add IMEM and PIL info region 2020-05-13 5:56 [PATCH v5 0/5] remoteproc: qcom: PIL info support Bjorn Andersson ` (3 preceding siblings ...) 2020-05-13 5:56 ` [PATCH v5 4/5] arm64: dts: qcom: qcs404: Add IMEM and PIL info region Bjorn Andersson @ 2020-05-13 5:56 ` Bjorn Andersson 2020-05-14 16:53 ` [PATCH v5 0/5] remoteproc: qcom: PIL info support Vinod Koul 5 siblings, 0 replies; 14+ messages in thread From: Bjorn Andersson @ 2020-05-13 5:56 UTC (permalink / raw) To: Andy Gross, Bjorn Andersson, Ohad Ben-Cohen, Rob Herring Cc: linux-arm-msm, linux-remoteproc, devicetree, linux-kernel, Stephen Boyd Add a simple-mfd representing IMEM on SDM845 and define the PIL relocation info region, so that post mortem tools will be able to locate the loaded remoteprocs. Reviewed-by: Stephen Boyd <swboyd@chromium.org> Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org> --- Changes since v4: - imem is no longer compatible with "syscon" arch/arm64/boot/dts/qcom/sdm845.dtsi | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/arch/arm64/boot/dts/qcom/sdm845.dtsi b/arch/arm64/boot/dts/qcom/sdm845.dtsi index 7cce6f1b7c9e..1abbbe7a43a0 100644 --- a/arch/arm64/boot/dts/qcom/sdm845.dtsi +++ b/arch/arm64/boot/dts/qcom/sdm845.dtsi @@ -3716,6 +3716,21 @@ spmi_bus: spmi@c440000 { cell-index = <0>; }; + imem@146bf000 { + compatible = "simple-mfd"; + reg = <0 0x146bf000 0 0x1000>; + + #address-cells = <1>; + #size-cells = <1>; + + ranges = <0 0 0x146bf000 0x1000>; + + pil-reloc@94c { + compatible = "qcom,pil-reloc-info"; + reg = <0x94c 0xc8>; + }; + }; + apps_smmu: iommu@15000000 { compatible = "qcom,sdm845-smmu-500", "arm,mmu-500"; reg = <0 0x15000000 0 0x80000>; -- 2.26.2 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH v5 0/5] remoteproc: qcom: PIL info support 2020-05-13 5:56 [PATCH v5 0/5] remoteproc: qcom: PIL info support Bjorn Andersson ` (4 preceding siblings ...) 2020-05-13 5:56 ` [PATCH v5 5/5] arm64: dts: qcom: sdm845: " Bjorn Andersson @ 2020-05-14 16:53 ` Vinod Koul 5 siblings, 0 replies; 14+ messages in thread From: Vinod Koul @ 2020-05-14 16:53 UTC (permalink / raw) To: Bjorn Andersson Cc: Andy Gross, Ohad Ben-Cohen, Rob Herring, linux-arm-msm, linux-remoteproc, devicetree, linux-kernel On 12-05-20, 22:56, Bjorn Andersson wrote: > Introduce support for filling out the relocation information in IMEM, to aid > post mortem debug tools to locate the various remoteprocs. Reviewed-by: Vinod Koul <vkoul@kernel.org> -- ~Vinod ^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2020-05-26 22:32 UTC | newest] Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-05-13 5:56 [PATCH v5 0/5] remoteproc: qcom: PIL info support Bjorn Andersson 2020-05-13 5:56 ` [PATCH v5 1/5] dt-bindings: remoteproc: Add Qualcomm PIL info binding Bjorn Andersson 2020-05-20 17:59 ` Mathieu Poirier 2020-05-26 22:32 ` Rob Herring 2020-05-13 5:56 ` [PATCH v5 2/5] remoteproc: qcom: Introduce helper to store pil info in IMEM Bjorn Andersson 2020-05-20 18:00 ` Mathieu Poirier 2020-05-13 5:56 ` [PATCH v5 3/5] remoteproc: qcom: Update PIL relocation info on load Bjorn Andersson 2020-05-14 18:48 ` kbuild test robot 2020-05-14 18:48 ` kbuild test robot 2020-05-19 18:14 ` rishabhb 2020-05-19 23:07 ` Bjorn Andersson 2020-05-13 5:56 ` [PATCH v5 4/5] arm64: dts: qcom: qcs404: Add IMEM and PIL info region Bjorn Andersson 2020-05-13 5:56 ` [PATCH v5 5/5] arm64: dts: qcom: sdm845: " Bjorn Andersson 2020-05-14 16:53 ` [PATCH v5 0/5] remoteproc: qcom: PIL info support Vinod Koul
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.