From: Eugen Hristev <[email protected]>

Minidump can collect various memory snippets using Qualcomm boot firmware
support. To determine which snippets should be collected, each snippet
must be registered by the kernel into a shared memory table managed by
the Qualcomm SMEM driver. To instantiate the minidump platform driver,
register its data using platform_device_register_data(). The minidump
driver will later probe the device and retrieve the required memory
snippets from the memory inspection table (meminspect).

Signed-off-by: Eugen Hristev <[email protected]>
Signed-off-by: Mukesh Ojha <[email protected]>
---
 drivers/soc/qcom/smem.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/drivers/soc/qcom/smem.c b/drivers/soc/qcom/smem.c
index d5c94b47f431..65d7b4d99677 100644
--- a/drivers/soc/qcom/smem.c
+++ b/drivers/soc/qcom/smem.c
@@ -270,6 +270,7 @@ struct smem_region {
  * @partitions: list of partitions of current processor/host
  * @item_count: max accepted item number
  * @socinfo:   platform device pointer
+ * @mdinfo:    minidump device pointer
  * @num_regions: number of @regions
  * @regions:   list of the memory regions defining the shared memory
  */
@@ -280,6 +281,7 @@ struct qcom_smem {
 
        u32 item_count;
        struct platform_device *socinfo;
+       struct platform_device *mdinfo;
        struct smem_ptable *ptable;
        struct smem_partition global_partition;
        struct smem_partition partitions[SMEM_HOST_COUNT];
@@ -1242,12 +1244,20 @@ static int qcom_smem_probe(struct platform_device *pdev)
        if (IS_ERR(smem->socinfo))
                dev_dbg(&pdev->dev, "failed to register socinfo device\n");
 
+       smem->mdinfo = platform_device_register_data(&pdev->dev, 
"qcom-minidump",
+                                                    PLATFORM_DEVID_AUTO, NULL,
+                                                    0);
+       if (IS_ERR(smem->mdinfo))
+               dev_err(&pdev->dev, "failed to register platform md device\n");
+
        return 0;
 }
 
 static void qcom_smem_remove(struct platform_device *pdev)
 {
        platform_device_unregister(__smem->socinfo);
+       if (!IS_ERR(__smem->mdinfo))
+               platform_device_unregister(__smem->mdinfo);
 
        /* Set to -EPROBE_DEFER to signal unprobed state */
        __smem = ERR_PTR(-EPROBE_DEFER);

-- 
2.50.1


Reply via email to