Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 92589cbd authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'rproc-v4.17' of git://github.com/andersson/remoteproc

Pull remoteproc updates from Bjorn Andersson:

 - add support for generating coredumps for remoteprocs using
   devcoredump

 - add the Qualcomm sysmon driver for intra-remoteproc crash handling

 - a number of fixes in Qualcomm and IMX drivers

* tag 'rproc-v4.17' of git://github.com/andersson/remoteproc:
  remoteproc: fix null pointer dereference on glink only platforms
  soc: qcom: qmi: add CONFIG_NET dependency
  remoteproc: imx_rproc: Slightly simplify code in 'imx_rproc_probe()'
  remoteproc: imx_rproc: Re-use existing error handling path in 'imx_rproc_probe()'
  remoteproc: imx_rproc: Fix an error handling path in 'imx_rproc_probe()'
  samples: Introduce Qualcomm QMI sample client
  remoteproc: qcom: Introduce sysmon
  remoteproc: Pass type of shutdown to subdev remove
  remoteproc: qcom: Register segments for core dump
  soc: qcom: mdt-loader: Return relocation base
  remoteproc: Rename "load_rsc_table" to "parse_fw"
  remoteproc: Add remote processor coredump support
  remoteproc: Remove null character write of shared mem
parents 9ab89c40 730b2ad8
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -89,14 +89,14 @@ static int zap_shader_load_mdt(struct msm_gpu *gpu, const char *fwname)
	 */
	 */
	if (to_adreno_gpu(gpu)->fwloc == FW_LOCATION_LEGACY) {
	if (to_adreno_gpu(gpu)->fwloc == FW_LOCATION_LEGACY) {
		ret = qcom_mdt_load(dev, fw, fwname, GPU_PAS_ID,
		ret = qcom_mdt_load(dev, fw, fwname, GPU_PAS_ID,
				mem_region, mem_phys, mem_size);
				mem_region, mem_phys, mem_size, NULL);
	} else {
	} else {
		char newname[strlen("qcom/") + strlen(fwname) + 1];
		char newname[strlen("qcom/") + strlen(fwname) + 1];


		sprintf(newname, "qcom/%s", fwname);
		sprintf(newname, "qcom/%s", fwname);


		ret = qcom_mdt_load(dev, fw, newname, GPU_PAS_ID,
		ret = qcom_mdt_load(dev, fw, newname, GPU_PAS_ID,
				mem_region, mem_phys, mem_size);
				mem_region, mem_phys, mem_size, NULL);
	}
	}
	if (ret)
	if (ret)
		goto out;
		goto out;
+1 −1
Original line number Original line Diff line number Diff line
@@ -76,7 +76,7 @@ int venus_boot(struct device *dev, const char *fwname)
	}
	}


	ret = qcom_mdt_load(dev, mdt, fwname, VENUS_PAS_ID, mem_va, mem_phys,
	ret = qcom_mdt_load(dev, mdt, fwname, VENUS_PAS_ID, mem_va, mem_phys,
			    mem_size);
			    mem_size, NULL);


	release_firmware(mdt);
	release_firmware(mdt);


+19 −0
Original line number Original line Diff line number Diff line
@@ -6,6 +6,7 @@ config REMOTEPROC
	select CRC32
	select CRC32
	select FW_LOADER
	select FW_LOADER
	select VIRTIO
	select VIRTIO
	select WANT_DEV_COREDUMP
	help
	help
	  Support for remote processors (such as DSP coprocessors). These
	  Support for remote processors (such as DSP coprocessors). These
	  are mainly used on embedded systems.
	  are mainly used on embedded systems.
@@ -90,6 +91,7 @@ config QCOM_ADSP_PIL
	depends on QCOM_SMEM
	depends on QCOM_SMEM
	depends on RPMSG_QCOM_SMD || (COMPILE_TEST && RPMSG_QCOM_SMD=n)
	depends on RPMSG_QCOM_SMD || (COMPILE_TEST && RPMSG_QCOM_SMD=n)
	depends on RPMSG_QCOM_GLINK_SMEM || RPMSG_QCOM_GLINK_SMEM=n
	depends on RPMSG_QCOM_GLINK_SMEM || RPMSG_QCOM_GLINK_SMEM=n
	depends on QCOM_SYSMON || QCOM_SYSMON=n
	select MFD_SYSCON
	select MFD_SYSCON
	select QCOM_MDT_LOADER
	select QCOM_MDT_LOADER
	select QCOM_RPROC_COMMON
	select QCOM_RPROC_COMMON
@@ -107,6 +109,7 @@ config QCOM_Q6V5_PIL
	depends on QCOM_SMEM
	depends on QCOM_SMEM
	depends on RPMSG_QCOM_SMD || (COMPILE_TEST && RPMSG_QCOM_SMD=n)
	depends on RPMSG_QCOM_SMD || (COMPILE_TEST && RPMSG_QCOM_SMD=n)
	depends on RPMSG_QCOM_GLINK_SMEM || RPMSG_QCOM_GLINK_SMEM=n
	depends on RPMSG_QCOM_GLINK_SMEM || RPMSG_QCOM_GLINK_SMEM=n
	depends on QCOM_SYSMON || QCOM_SYSMON=n
	select MFD_SYSCON
	select MFD_SYSCON
	select QCOM_RPROC_COMMON
	select QCOM_RPROC_COMMON
	select QCOM_SCM
	select QCOM_SCM
@@ -114,12 +117,28 @@ config QCOM_Q6V5_PIL
	  Say y here to support the Qualcomm Peripherial Image Loader for the
	  Say y here to support the Qualcomm Peripherial Image Loader for the
	  Hexagon V5 based remote processors.
	  Hexagon V5 based remote processors.


config QCOM_SYSMON
	tristate "Qualcomm sysmon driver"
	depends on RPMSG
	depends on ARCH_QCOM
	depends on NET
	select QCOM_QMI_HELPERS
	help
	  The sysmon driver implements a sysmon QMI client and a handler for
	  the sys_mon SMD and GLINK channel, which are used for graceful
	  shutdown, retrieving failure information and propagating information
	  about other subsystems being shut down.

	  Say y here if your system runs firmware on any other subsystems, e.g.
	  modem or DSP.

config QCOM_WCNSS_PIL
config QCOM_WCNSS_PIL
	tristate "Qualcomm WCNSS Peripheral Image Loader"
	tristate "Qualcomm WCNSS Peripheral Image Loader"
	depends on OF && ARCH_QCOM
	depends on OF && ARCH_QCOM
	depends on RPMSG_QCOM_SMD || (COMPILE_TEST && RPMSG_QCOM_SMD=n)
	depends on RPMSG_QCOM_SMD || (COMPILE_TEST && RPMSG_QCOM_SMD=n)
	depends on RPMSG_QCOM_GLINK_SMEM || RPMSG_QCOM_GLINK_SMEM=n
	depends on RPMSG_QCOM_GLINK_SMEM || RPMSG_QCOM_GLINK_SMEM=n
	depends on QCOM_SMEM
	depends on QCOM_SMEM
	depends on QCOM_SYSMON || QCOM_SYSMON=n
	select QCOM_MDT_LOADER
	select QCOM_MDT_LOADER
	select QCOM_RPROC_COMMON
	select QCOM_RPROC_COMMON
	select QCOM_SCM
	select QCOM_SCM
+1 −0
Original line number Original line Diff line number Diff line
@@ -17,6 +17,7 @@ obj-$(CONFIG_KEYSTONE_REMOTEPROC) += keystone_remoteproc.o
obj-$(CONFIG_QCOM_ADSP_PIL)		+= qcom_adsp_pil.o
obj-$(CONFIG_QCOM_ADSP_PIL)		+= qcom_adsp_pil.o
obj-$(CONFIG_QCOM_RPROC_COMMON)		+= qcom_common.o
obj-$(CONFIG_QCOM_RPROC_COMMON)		+= qcom_common.o
obj-$(CONFIG_QCOM_Q6V5_PIL)		+= qcom_q6v5_pil.o
obj-$(CONFIG_QCOM_Q6V5_PIL)		+= qcom_q6v5_pil.o
obj-$(CONFIG_QCOM_SYSMON)		+= qcom_sysmon.o
obj-$(CONFIG_QCOM_WCNSS_PIL)		+= qcom_wcnss_pil.o
obj-$(CONFIG_QCOM_WCNSS_PIL)		+= qcom_wcnss_pil.o
qcom_wcnss_pil-y			+= qcom_wcnss.o
qcom_wcnss_pil-y			+= qcom_wcnss.o
qcom_wcnss_pil-y			+= qcom_wcnss_iris.o
qcom_wcnss_pil-y			+= qcom_wcnss_iris.o
+11 −12
Original line number Original line Diff line number Diff line
@@ -333,14 +333,14 @@ static int imx_rproc_probe(struct platform_device *pdev)
	/* set some other name then imx */
	/* set some other name then imx */
	rproc = rproc_alloc(dev, "imx-rproc", &imx_rproc_ops,
	rproc = rproc_alloc(dev, "imx-rproc", &imx_rproc_ops,
			    NULL, sizeof(*priv));
			    NULL, sizeof(*priv));
	if (!rproc) {
	if (!rproc)
		ret = -ENOMEM;
		return -ENOMEM;
		goto err;
	}


	dcfg = of_device_get_match_data(dev);
	dcfg = of_device_get_match_data(dev);
	if (!dcfg)
	if (!dcfg) {
		return -EINVAL;
		ret = -EINVAL;
		goto err_put_rproc;
	}


	priv = rproc->priv;
	priv = rproc->priv;
	priv->rproc = rproc;
	priv->rproc = rproc;
@@ -359,8 +359,8 @@ static int imx_rproc_probe(struct platform_device *pdev)
	priv->clk = devm_clk_get(dev, NULL);
	priv->clk = devm_clk_get(dev, NULL);
	if (IS_ERR(priv->clk)) {
	if (IS_ERR(priv->clk)) {
		dev_err(dev, "Failed to get clock\n");
		dev_err(dev, "Failed to get clock\n");
		rproc_free(rproc);
		ret = PTR_ERR(priv->clk);
		return PTR_ERR(priv->clk);
		goto err_put_rproc;
	}
	}


	/*
	/*
@@ -370,8 +370,7 @@ static int imx_rproc_probe(struct platform_device *pdev)
	ret = clk_prepare_enable(priv->clk);
	ret = clk_prepare_enable(priv->clk);
	if (ret) {
	if (ret) {
		dev_err(&rproc->dev, "Failed to enable clock\n");
		dev_err(&rproc->dev, "Failed to enable clock\n");
		rproc_free(rproc);
		goto err_put_rproc;
		return ret;
	}
	}


	ret = rproc_add(rproc);
	ret = rproc_add(rproc);
@@ -380,13 +379,13 @@ static int imx_rproc_probe(struct platform_device *pdev)
		goto err_put_clk;
		goto err_put_clk;
	}
	}


	return ret;
	return 0;


err_put_clk:
err_put_clk:
	clk_disable_unprepare(priv->clk);
	clk_disable_unprepare(priv->clk);
err_put_rproc:
err_put_rproc:
	rproc_free(rproc);
	rproc_free(rproc);
err:

	return ret;
	return ret;
}
}


Loading