Merge "soc: qcom: pil: Do not do complete ramdump for minidump elf32"

This commit is contained in:
qctecmdr 2020-07-25 02:58:24 -07:00 • committed by Gerrit - the friendly Code Review server
commit b9028a4dc6
4 changed files with 41 additions and 5 deletions

View file

@ -412,7 +412,11 @@ static int pil_do_minidump(struct pil_desc *desc, void *ramdump_dev)
goto seg_mapping_fail;
}
ret = do_minidump(ramdump_dev, ramdump_segs, ss_valid_seg_cnt);
if (desc->minidump_as_elf32)
ret = do_minidump_elf32(ramdump_dev, ramdump_segs,
ss_valid_seg_cnt);
else
ret = do_minidump(ramdump_dev, ramdump_segs, ss_valid_seg_cnt);
if (ret)
pil_err(desc, "%s: Minidump collection failed for subsys %s rc:%d\n",
__func__, desc->name, ret);
@ -1624,6 +1628,9 @@ int pil_desc_init(struct pil_desc *desc)
if (!desc->unmap_fw_mem)
desc->unmap_fw_mem = unmap_fw_mem;
desc->minidump_as_elf32 = of_property_read_bool(
ofnode, "qcom,minidump-as-elf32");
return 0;
err_parse_dt:
ida_simple_remove(&pil_ida, priv->id);

View file

@ -63,6 +63,7 @@ struct pil_desc {
int *aux_minidump_ids;
int num_aux_minidump_ids;
u32 extra_size;
bool minidump_as_elf32;
};
/**

View file

@ -399,7 +399,7 @@ void destroy_ramdump_device(void *dev)
EXPORT_SYMBOL(destroy_ramdump_device);
static int _do_ramdump(void *handle, struct ramdump_segment *segments,
int nsegments, bool use_elf)
int nsegments, bool use_elf, bool complete_ramdump)
{
int ret, i;
struct ramdump_device *rd_dev = (struct ramdump_device *)handle;
@ -427,7 +427,7 @@ static int _do_ramdump(void *handle, struct ramdump_segment *segments,
return -EPIPE;
}
if (rd_dev->complete_ramdump) {
if (complete_ramdump) {
for (i = 0; i < nsegments-1; i++)
segments[i].size =
segments[i + 1].address - segments[i].address;
@ -628,7 +628,10 @@ static int _do_minidump(void *handle, struct ramdump_segment *segments,
int do_ramdump(void *handle, struct ramdump_segment *segments, int nsegments)
{
return _do_ramdump(handle, segments, nsegments, false);
struct ramdump_device *rd_dev = (struct ramdump_device *)handle;
return _do_ramdump(handle, segments, nsegments, false,
rd_dev->complete_ramdump);
}
EXPORT_SYMBOL(do_ramdump);
@ -638,10 +641,20 @@ int do_minidump(void *handle, struct ramdump_segment *segments, int nsegments)
}
EXPORT_SYMBOL(do_minidump);
int do_minidump_elf32(void *handle, struct ramdump_segment *segments,
int nsegments)
{
return _do_ramdump(handle, segments, nsegments, true, false);
}
EXPORT_SYMBOL(do_minidump_elf32);
int
do_elf_ramdump(void *handle, struct ramdump_segment *segments, int nsegments)
{
return _do_ramdump(handle, segments, nsegments, true);
struct ramdump_device *rd_dev = (struct ramdump_device *)handle;
return _do_ramdump(handle, segments, nsegments, true,
rd_dev->complete_ramdump);
}
EXPORT_SYMBOL(do_elf_ramdump);

View file

@ -39,6 +39,8 @@ extern int do_elf_ramdump(void *handle, struct ramdump_segment *segments,
int nsegments);
extern int do_minidump(void *handle, struct ramdump_segment *segments,
int nsegments);
extern int do_minidump_elf32(void *handle, struct ramdump_segment *segments,
int nsegments);
#else
static inline void *create_ramdump_device(const char *dev_name,
@ -62,6 +64,19 @@ static inline int do_elf_ramdump(void *handle, struct ramdump_segment *segments,
{
return -ENODEV;
}
static inline int do_minidump(void *handle, struct ramdump_segment *segments,
int nsegments)
{
return -ENODEV;
}
static inline int do_minidump_elf32(void *handle,
struct ramdump_segment *segments, int nsegments)
{
return -ENODEV;
}
#endif /* CONFIG_MSM_SUBSYSTEM_RESTART */
#endif