Merge "soc: qcom: Create additional ramdump device node for SSR minidump"
This commit is contained in:
commit
c4d72c5677
5 changed files with 24 additions and 6 deletions
|
@ -164,6 +164,9 @@ static int pil_do_minidump(struct pil_desc *desc, void *ramdump_dev)
|
|||
int ss_mdump_seg_cnt;
|
||||
int ret, i;
|
||||
|
||||
if (!ramdump_dev)
|
||||
return -ENODEV;
|
||||
|
||||
memcpy(&offset, &priv->minidump, sizeof(priv->minidump));
|
||||
offset = offset + sizeof(priv->minidump->md_ss_smem_regions_baseptr);
|
||||
/* There are 3 encryption keys which also need to be dumped */
|
||||
|
@ -220,7 +223,8 @@ static int pil_do_minidump(struct pil_desc *desc, void *ramdump_dev)
|
|||
* Calls the ramdump API with a list of segments generated from the addresses
|
||||
* that the descriptor corresponds to.
|
||||
*/
|
||||
int pil_do_ramdump(struct pil_desc *desc, void *ramdump_dev)
|
||||
int pil_do_ramdump(struct pil_desc *desc,
|
||||
void *ramdump_dev, void *minidump_dev)
|
||||
{
|
||||
struct pil_priv *priv = desc->priv;
|
||||
struct pil_seg *seg;
|
||||
|
@ -237,7 +241,7 @@ int pil_do_ramdump(struct pil_desc *desc, void *ramdump_dev)
|
|||
&& (__raw_readl(priv->minidump) != 0)
|
||||
&& (readb_relaxed(offset + sizeof(u32) + 2 * sizeof(u8)) == 0)) {
|
||||
pr_debug("Dumping Minidump for %s\n", desc->name);
|
||||
return pil_do_minidump(desc, ramdump_dev);
|
||||
return pil_do_minidump(desc, minidump_dev);
|
||||
|
||||
}
|
||||
pr_debug("Continuing with full SSR dump for %s\n", desc->name);
|
||||
|
|
|
@ -134,7 +134,8 @@ extern void pil_shutdown(struct pil_desc *desc);
|
|||
extern void pil_free_memory(struct pil_desc *desc);
|
||||
extern void pil_desc_release(struct pil_desc *desc);
|
||||
extern phys_addr_t pil_get_entry_addr(struct pil_desc *desc);
|
||||
extern int pil_do_ramdump(struct pil_desc *desc, void *ramdump_dev);
|
||||
extern int pil_do_ramdump(struct pil_desc *desc, void *ramdump_dev,
|
||||
void *minidump_dev);
|
||||
extern int pil_assign_mem_to_subsys(struct pil_desc *desc, phys_addr_t addr,
|
||||
size_t size);
|
||||
extern int pil_assign_mem_to_linux(struct pil_desc *desc, phys_addr_t addr,
|
||||
|
@ -154,7 +155,8 @@ static inline phys_addr_t pil_get_entry_addr(struct pil_desc *desc)
|
|||
{
|
||||
return 0;
|
||||
}
|
||||
static inline int pil_do_ramdump(struct pil_desc *desc, void *ramdump_dev)
|
||||
static inline int pil_do_ramdump(struct pil_desc *desc,
|
||||
void *ramdump_dev, void *minidump_dev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -24,6 +24,7 @@ struct modem_data {
|
|||
struct subsys_device *subsys;
|
||||
struct subsys_desc subsys_desc;
|
||||
void *ramdump_dev;
|
||||
void *minidump_dev;
|
||||
bool crash_shutdown;
|
||||
u32 pas_id;
|
||||
bool ignore_errors;
|
||||
|
|
|
@ -171,7 +171,8 @@ static int modem_ramdump(int enable, const struct subsys_desc *subsys)
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = pil_do_ramdump(&drv->q6->desc, drv->ramdump_dev);
|
||||
ret = pil_do_ramdump(&drv->q6->desc,
|
||||
drv->ramdump_dev, drv->minidump_dev);
|
||||
if (ret < 0)
|
||||
pr_err("Unable to dump modem fw memory (rc = %d).\n", ret);
|
||||
|
||||
|
@ -230,9 +231,18 @@ static int pil_subsys_init(struct modem_data *drv,
|
|||
ret = -ENOMEM;
|
||||
goto err_ramdump;
|
||||
}
|
||||
drv->minidump_dev = create_ramdump_device("md_modem", &pdev->dev);
|
||||
if (!drv->minidump_dev) {
|
||||
pr_err("%s: Unable to create a modem minidump device.\n",
|
||||
__func__);
|
||||
ret = -ENOMEM;
|
||||
goto err_minidump;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
err_minidump:
|
||||
destroy_ramdump_device(drv->ramdump_dev);
|
||||
err_ramdump:
|
||||
subsys_unregister(drv->subsys);
|
||||
err_subsys:
|
||||
|
@ -414,6 +424,7 @@ static int pil_mss_driver_exit(struct platform_device *pdev)
|
|||
|
||||
subsys_unregister(drv->subsys);
|
||||
destroy_ramdump_device(drv->ramdump_dev);
|
||||
destroy_ramdump_device(drv->minidump_dev);
|
||||
pil_desc_release(&drv->q6->desc);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -850,7 +850,7 @@ static int subsys_ramdump(int enable, const struct subsys_desc *subsys)
|
|||
if (!enable)
|
||||
return 0;
|
||||
|
||||
return pil_do_ramdump(&d->desc, d->ramdump_dev);
|
||||
return pil_do_ramdump(&d->desc, d->ramdump_dev, NULL);
|
||||
}
|
||||
|
||||
static void subsys_free_memory(const struct subsys_desc *subsys)
|
||||
|
|
Loading…
Add table
Reference in a new issue