diff options
| author | Avaneesh Kumar Dwivedi <akdwived@codeaurora.org> | 2017-09-08 15:02:47 +0530 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2017-09-19 05:04:56 -0700 |
| commit | d0a863a26ad7aed7b45b7dd244b164de8a1bab1e (patch) | |
| tree | 89a0b446805fff9da194b3d14dc1f08fac64fad5 | |
| parent | 6f777b2385c98a17d69bbeead6edbc7ad7470f72 (diff) | |
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>
| -rw-r--r-- | drivers/soc/qcom/peripheral-loader.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/drivers/soc/qcom/peripheral-loader.c b/drivers/soc/qcom/peripheral-loader.c index d77a12626330..8e0bf64afe0d 100644 --- a/drivers/soc/qcom/peripheral-loader.c +++ b/drivers/soc/qcom/peripheral-loader.c @@ -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++; |
