summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2017-02-23 21:35:53 -0800
committerGerrit - the friendly Code Review server <code-review@localhost>2017-02-23 21:35:53 -0800
commit17ec241c6c5bc0cefe27a925be5ab6e665527fb8 (patch)
treeb7d0775a8a3932c6cd66bb208f925453c8a9d7a2 /drivers
parent9c2a8d524129fb39e7b8c9b6b654749b0cee2e23 (diff)
parent7a56b6202d222eaa5490ff09bed82626aae81027 (diff)
Merge "soc: qcom: pil: Clear elf region on authentication failure"
Diffstat (limited to 'drivers')
-rw-r--r--drivers/soc/qcom/peripheral-loader.c27
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;