diff options
author | Linux Build Service Account <lnxbuild@localhost> | 2017-02-23 21:35:53 -0800 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2017-02-23 21:35:53 -0800 |
commit | 17ec241c6c5bc0cefe27a925be5ab6e665527fb8 (patch) | |
tree | b7d0775a8a3932c6cd66bb208f925453c8a9d7a2 /drivers | |
parent | 9c2a8d524129fb39e7b8c9b6b654749b0cee2e23 (diff) | |
parent | 7a56b6202d222eaa5490ff09bed82626aae81027 (diff) |
Merge "soc: qcom: pil: Clear elf region on authentication failure"
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/soc/qcom/peripheral-loader.c | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/drivers/soc/qcom/peripheral-loader.c b/drivers/soc/qcom/peripheral-loader.c index 4d9767b6f8a3..21e9f17e6a7e 100644 --- a/drivers/soc/qcom/peripheral-loader.c +++ b/drivers/soc/qcom/peripheral-loader.c @@ -595,6 +595,22 @@ static void pil_release_mmap(struct pil_desc *desc) struct pil_priv *priv = desc->priv; struct pil_seg *p, *tmp; u64 zero = 0ULL; + + if (priv->info) { + __iowrite32_copy(&priv->info->start, &zero, + sizeof(zero) / 4); + writel_relaxed(0, &priv->info->size); + } + + list_for_each_entry_safe(p, tmp, &priv->segs, list) { + list_del(&p->list); + kfree(p); + } +} + +static void pil_clear_segment(struct pil_desc *desc) +{ + struct pil_priv *priv = desc->priv; u8 __iomem *buf; struct pil_map_fw_info map_fw_info = { @@ -613,16 +629,6 @@ static void pil_release_mmap(struct pil_desc *desc) desc->unmap_fw_mem(buf, (priv->region_end - priv->region_start), map_data); - if (priv->info) { - __iowrite32_copy(&priv->info->start, &zero, - sizeof(zero) / 4); - writel_relaxed(0, &priv->info->size); - } - - list_for_each_entry_safe(p, tmp, &priv->segs, list) { - list_del(&p->list); - kfree(p); - } } #define IOMAP_SIZE SZ_1M @@ -914,6 +920,7 @@ out: &desc->attrs); priv->region = NULL; } + pil_clear_segment(desc); pil_release_mmap(desc); } return ret; |