soc: qcom: Optimize minidump collection check and add debug log

This change does additional checks for more imem ToC entries
before invoking minidump.
This change also add few debug logs to ease process of debugging.

Change-Id: Ie70301d70fe85ec9f85573c0167098319c2b1cfe
Signed-off-by: Avaneesh Kumar Dwivedi <akdwived@codeaurora.org>
This commit is contained in:
Avaneesh Kumar Dwivedi 2017-09-08 15:02:47 +05:30 committed by Gerrit - the friendly Code Review server
parent 6f777b2385
commit d0a863a26a

View file

@ -170,6 +170,8 @@ static int pil_do_minidump(struct pil_desc *desc, void *ramdump_dev)
ss_mdump_seg_cnt = readb_relaxed(offset) +
NUM_OF_ENCRYPTED_KEY;
pr_debug("SMEM base to read minidump segments is 0x%x\n",
__raw_readl(priv->minidump));
subsys_smem_base = ioremap(__raw_readl(priv->minidump),
ss_mdump_seg_cnt * sizeof(*region_info));
region_info =
@ -191,6 +193,9 @@ static int pil_do_minidump(struct pil_desc *desc, void *ramdump_dev)
s->address = __raw_readl(offset);
offset = offset + sizeof(region_info->region_base_address);
s->size = __raw_readl(offset);
pr_debug("Dumping segment %s with address %pK and size 0x%x\n",
s->name, (void *)s->address,
(unsigned int)s->size);
s++;
region_info++;
}
@ -199,7 +204,6 @@ static int pil_do_minidump(struct pil_desc *desc, void *ramdump_dev)
if (ret)
pil_err(desc, "%s: Ramdump collection failed for subsys %s rc:%d\n",
__func__, desc->name, ret);
writel_relaxed(0, &priv->minidump->md_ss_smem_regions_baseptr);
writeb_relaxed(1, &priv->minidump->md_ss_ssr_cause);
if (desc->subsys_vmid > 0)
@ -222,10 +226,21 @@ int pil_do_ramdump(struct pil_desc *desc, void *ramdump_dev)
struct pil_seg *seg;
int count = 0, ret;
struct ramdump_segment *ramdump_segs, *s;
void __iomem *offset;
if (priv->minidump && (__raw_readl(priv->minidump) > 0))
memcpy(&offset, &priv->minidump, sizeof(priv->minidump));
/*
* Collect minidump if smem base is initialized,
* ssr cause is 0. No need to check encryption status
*/
if (priv->minidump
&& (__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);
}
pr_debug("Continuing with full SSR dump for %s\n", desc->name);
list_for_each_entry(seg, &priv->segs, list)
count++;