]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - drivers/remoteproc/qcom_wcnss.c
Merge tag 'microblaze-v4.19-rc1' of git://git.monstr.eu/linux-2.6-microblaze
[linux.git] / drivers / remoteproc / qcom_wcnss.c
index 3f0609236a769c995f75a411c37b638177254400..b0e07e9f42d5698e64baa7897d75460c28a89690 100644 (file)
@@ -40,6 +40,7 @@
 #define WCNSS_CRASH_REASON_SMEM                422
 #define WCNSS_FIRMWARE_NAME            "wcnss.mdt"
 #define WCNSS_PAS_ID                   6
+#define WCNSS_SSCTL_ID                 0x13
 
 #define WCNSS_SPARE_NVBIN_DLND         BIT(25)
 
@@ -98,6 +99,7 @@ struct qcom_wcnss {
        size_t mem_size;
 
        struct qcom_rproc_subdev smd_subdev;
+       struct qcom_sysmon *sysmon;
 };
 
 static const struct wcnss_data riva_data = {
@@ -153,7 +155,8 @@ static int wcnss_load(struct rproc *rproc, const struct firmware *fw)
        struct qcom_wcnss *wcnss = (struct qcom_wcnss *)rproc->priv;
 
        return qcom_mdt_load(wcnss->dev, fw, rproc->firmware, WCNSS_PAS_ID,
-                            wcnss->mem_region, wcnss->mem_phys, wcnss->mem_size);
+                            wcnss->mem_region, wcnss->mem_phys,
+                            wcnss->mem_size, &wcnss->mem_reloc);
 }
 
 static void wcnss_indicate_nv_download(struct qcom_wcnss *wcnss)
@@ -308,6 +311,7 @@ static const struct rproc_ops wcnss_ops = {
        .start = wcnss_start,
        .stop = wcnss_stop,
        .da_to_va = wcnss_da_to_va,
+       .parse_fw = qcom_register_dump_segments,
        .load = wcnss_load,
 };
 
@@ -332,9 +336,6 @@ static irqreturn_t wcnss_fatal_interrupt(int irq, void *dev)
 
        rproc_report_crash(wcnss->rproc, RPROC_FATAL_ERROR);
 
-       if (!IS_ERR(msg))
-               msg[0] = '\0';
-
        return IRQ_HANDLED;
 }
 
@@ -551,6 +552,7 @@ static int wcnss_probe(struct platform_device *pdev)
        }
 
        qcom_add_smd_subdev(rproc, &wcnss->smd_subdev);
+       wcnss->sysmon = qcom_add_sysmon_subdev(rproc, "wcnss", WCNSS_SSCTL_ID);
 
        ret = rproc_add(rproc);
        if (ret)
@@ -573,6 +575,7 @@ static int wcnss_remove(struct platform_device *pdev)
        qcom_smem_state_put(wcnss->state);
        rproc_del(wcnss->rproc);
 
+       qcom_remove_sysmon_subdev(wcnss->sysmon);
        qcom_remove_smd_subdev(wcnss->rproc, &wcnss->smd_subdev);
        rproc_free(wcnss->rproc);