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 ss_mdump_seg_cnt;
|
||||||
int ret, i;
|
int ret, i;
|
||||||
|
|
||||||
|
if (!ramdump_dev)
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
memcpy(&offset, &priv->minidump, sizeof(priv->minidump));
|
memcpy(&offset, &priv->minidump, sizeof(priv->minidump));
|
||||||
offset = offset + sizeof(priv->minidump->md_ss_smem_regions_baseptr);
|
offset = offset + sizeof(priv->minidump->md_ss_smem_regions_baseptr);
|
||||||
/* There are 3 encryption keys which also need to be dumped */
|
/* 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
|
* Calls the ramdump API with a list of segments generated from the addresses
|
||||||
* that the descriptor corresponds to.
|
* 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_priv *priv = desc->priv;
|
||||||
struct pil_seg *seg;
|
struct pil_seg *seg;
|
||||||
|
@ -237,7 +241,7 @@ int pil_do_ramdump(struct pil_desc *desc, void *ramdump_dev)
|
||||||
&& (__raw_readl(priv->minidump) != 0)
|
&& (__raw_readl(priv->minidump) != 0)
|
||||||
&& (readb_relaxed(offset + sizeof(u32) + 2 * sizeof(u8)) == 0)) {
|
&& (readb_relaxed(offset + sizeof(u32) + 2 * sizeof(u8)) == 0)) {
|
||||||
pr_debug("Dumping Minidump for %s\n", desc->name);
|
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);
|
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_free_memory(struct pil_desc *desc);
|
||||||
extern void pil_desc_release(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 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,
|
extern int pil_assign_mem_to_subsys(struct pil_desc *desc, phys_addr_t addr,
|
||||||
size_t size);
|
size_t size);
|
||||||
extern int pil_assign_mem_to_linux(struct pil_desc *desc, phys_addr_t addr,
|
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;
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,6 +24,7 @@ struct modem_data {
|
||||||
struct subsys_device *subsys;
|
struct subsys_device *subsys;
|
||||||
struct subsys_desc subsys_desc;
|
struct subsys_desc subsys_desc;
|
||||||
void *ramdump_dev;
|
void *ramdump_dev;
|
||||||
|
void *minidump_dev;
|
||||||
bool crash_shutdown;
|
bool crash_shutdown;
|
||||||
u32 pas_id;
|
u32 pas_id;
|
||||||
bool ignore_errors;
|
bool ignore_errors;
|
||||||
|
|
|
@ -171,7 +171,8 @@ static int modem_ramdump(int enable, const struct subsys_desc *subsys)
|
||||||
if (ret)
|
if (ret)
|
||||||
return 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)
|
if (ret < 0)
|
||||||
pr_err("Unable to dump modem fw memory (rc = %d).\n", ret);
|
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;
|
ret = -ENOMEM;
|
||||||
goto err_ramdump;
|
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;
|
return 0;
|
||||||
|
|
||||||
|
err_minidump:
|
||||||
|
destroy_ramdump_device(drv->ramdump_dev);
|
||||||
err_ramdump:
|
err_ramdump:
|
||||||
subsys_unregister(drv->subsys);
|
subsys_unregister(drv->subsys);
|
||||||
err_subsys:
|
err_subsys:
|
||||||
|
@ -414,6 +424,7 @@ static int pil_mss_driver_exit(struct platform_device *pdev)
|
||||||
|
|
||||||
subsys_unregister(drv->subsys);
|
subsys_unregister(drv->subsys);
|
||||||
destroy_ramdump_device(drv->ramdump_dev);
|
destroy_ramdump_device(drv->ramdump_dev);
|
||||||
|
destroy_ramdump_device(drv->minidump_dev);
|
||||||
pil_desc_release(&drv->q6->desc);
|
pil_desc_release(&drv->q6->desc);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -850,7 +850,7 @@ static int subsys_ramdump(int enable, const struct subsys_desc *subsys)
|
||||||
if (!enable)
|
if (!enable)
|
||||||
return 0;
|
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)
|
static void subsys_free_memory(const struct subsys_desc *subsys)
|
||||||
|
|
Loading…
Add table
Reference in a new issue