msm: pil: Allow verify_blob() to be optional
Most pil drivers don't verify blobs until the peripheral is
brought out of reset. The blobs are verified during the
auth_and_reset() callback instead. Make the verify_blob()
callback optional so that drivers don't have to provide dummy
functions.
Change-Id: I183593a224d51db04f3a52a192adddd632ad2306
Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
diff --git a/arch/arm/mach-msm/peripheral-loader.c b/arch/arm/mach-msm/peripheral-loader.c
index 5b505b0..1539487 100644
--- a/arch/arm/mach-msm/peripheral-loader.c
+++ b/arch/arm/mach-msm/peripheral-loader.c
@@ -102,7 +102,7 @@
static int load_segment(const struct elf32_phdr *phdr, unsigned num,
struct pil_device *pil)
{
- int ret, count, paddr;
+ int ret = 0, count, paddr;
char fw_name[30];
const struct firmware *fw = NULL;
const u8 *data;
@@ -173,10 +173,12 @@
paddr += size;
}
- ret = pil->desc->ops->verify_blob(pil->desc, phdr->p_paddr,
+ if (pil->desc->ops->verify_blob) {
+ ret = pil->desc->ops->verify_blob(pil->desc, phdr->p_paddr,
phdr->p_memsz);
- if (ret)
- dev_err(&pil->dev, "Blob %u failed verification\n", num);
+ if (ret)
+ dev_err(&pil->dev, "Blob%u failed verification\n", num);
+ }
release_fw:
release_firmware(fw);
diff --git a/arch/arm/mach-msm/pil-gss.c b/arch/arm/mach-msm/pil-gss.c
index 78a6054..56599ea 100644
--- a/arch/arm/mach-msm/pil-gss.c
+++ b/arch/arm/mach-msm/pil-gss.c
@@ -69,11 +69,6 @@
struct pil_device *pil;
};
-static int nop_verify_blob(struct pil_desc *pil, u32 phy_addr, size_t size)
-{
- return 0;
-}
-
static int pil_gss_init_image(struct pil_desc *pil, const u8 *metadata,
size_t size)
{
@@ -265,7 +260,6 @@
static struct pil_reset_ops pil_gss_ops = {
.init_image = pil_gss_init_image,
- .verify_blob = nop_verify_blob,
.auth_and_reset = pil_gss_reset,
.shutdown = pil_gss_shutdown,
};
@@ -346,7 +340,6 @@
static struct pil_reset_ops pil_gss_ops_trusted = {
.init_image = pil_gss_init_image_trusted,
- .verify_blob = nop_verify_blob,
.auth_and_reset = pil_gss_reset_trusted,
.shutdown = pil_gss_shutdown_trusted,
};
diff --git a/arch/arm/mach-msm/pil-modem.c b/arch/arm/mach-msm/pil-modem.c
index a85d13c..80e0ac9 100644
--- a/arch/arm/mach-msm/pil-modem.c
+++ b/arch/arm/mach-msm/pil-modem.c
@@ -58,11 +58,6 @@
struct delayed_work work;
};
-static int nop_verify_blob(struct pil_desc *pil, u32 phy_addr, size_t size)
-{
- return 0;
-}
-
static int make_modem_proxy_votes(struct device *dev)
{
int ret;
@@ -226,7 +221,6 @@
static struct pil_reset_ops pil_modem_ops = {
.init_image = modem_init_image,
- .verify_blob = nop_verify_blob,
.auth_and_reset = modem_reset,
.shutdown = modem_shutdown,
};
@@ -268,7 +262,6 @@
static struct pil_reset_ops pil_modem_ops_trusted = {
.init_image = modem_init_image_trusted,
- .verify_blob = nop_verify_blob,
.auth_and_reset = modem_reset_trusted,
.shutdown = modem_shutdown_trusted,
};
diff --git a/arch/arm/mach-msm/pil-q6v3.c b/arch/arm/mach-msm/pil-q6v3.c
index 54356b8..6c00ae7 100644
--- a/arch/arm/mach-msm/pil-q6v3.c
+++ b/arch/arm/mach-msm/pil-q6v3.c
@@ -71,11 +71,6 @@
struct delayed_work work;
};
-static int nop_verify_blob(struct pil_desc *pil, u32 phy_addr, size_t size)
-{
- return 0;
-}
-
static int pil_q6v3_init_image(struct pil_desc *pil, const u8 *metadata,
size_t size)
{
@@ -191,7 +186,6 @@
static struct pil_reset_ops pil_q6v3_ops = {
.init_image = pil_q6v3_init_image,
- .verify_blob = nop_verify_blob,
.auth_and_reset = pil_q6v3_reset,
.shutdown = pil_q6v3_shutdown,
};
@@ -227,7 +221,6 @@
static struct pil_reset_ops pil_q6v3_ops_trusted = {
.init_image = pil_q6v3_init_image_trusted,
- .verify_blob = nop_verify_blob,
.auth_and_reset = pil_q6v3_reset_trusted,
.shutdown = pil_q6v3_shutdown_trusted,
};
diff --git a/arch/arm/mach-msm/pil-q6v4.c b/arch/arm/mach-msm/pil-q6v4.c
index 17f5a41..b689846 100644
--- a/arch/arm/mach-msm/pil-q6v4.c
+++ b/arch/arm/mach-msm/pil-q6v4.c
@@ -83,11 +83,6 @@
return 0;
}
-static int nop_verify_blob(struct pil_desc *pil, u32 phy_addr, size_t size)
-{
- return 0;
-}
-
static int pil_q6v4_make_proxy_votes(struct device *dev)
{
struct q6v4_data *drv = dev_get_drvdata(dev);
@@ -307,7 +302,6 @@
static struct pil_reset_ops pil_q6v4_ops = {
.init_image = pil_q6v4_init_image,
- .verify_blob = nop_verify_blob,
.auth_and_reset = pil_q6v4_reset,
.shutdown = pil_q6v4_shutdown,
};
@@ -364,7 +358,6 @@
static struct pil_reset_ops pil_q6v4_ops_trusted = {
.init_image = pil_q6v4_init_image_trusted,
- .verify_blob = nop_verify_blob,
.auth_and_reset = pil_q6v4_reset_trusted,
.shutdown = pil_q6v4_shutdown_trusted,
};
diff --git a/arch/arm/mach-msm/pil-riva.c b/arch/arm/mach-msm/pil-riva.c
index 4449fff..24a78f0 100644
--- a/arch/arm/mach-msm/pil-riva.c
+++ b/arch/arm/mach-msm/pil-riva.c
@@ -132,11 +132,6 @@
flush_delayed_work(&drv->work);
}
-static int nop_verify_blob(struct pil_desc *pil, u32 phy_addr, size_t size)
-{
- return 0;
-}
-
static int pil_riva_init_image(struct pil_desc *pil, const u8 *metadata,
size_t size)
{
@@ -299,7 +294,6 @@
static struct pil_reset_ops pil_riva_ops = {
.init_image = pil_riva_init_image,
- .verify_blob = nop_verify_blob,
.auth_and_reset = pil_riva_reset,
.shutdown = pil_riva_shutdown,
};
@@ -343,7 +337,6 @@
static struct pil_reset_ops pil_riva_ops_trusted = {
.init_image = pil_riva_init_image_trusted,
- .verify_blob = nop_verify_blob,
.auth_and_reset = pil_riva_reset_trusted,
.shutdown = pil_riva_shutdown_trusted,
};
diff --git a/arch/arm/mach-msm/pil-tzapps.c b/arch/arm/mach-msm/pil-tzapps.c
index b6e5343..2345453 100644
--- a/arch/arm/mach-msm/pil-tzapps.c
+++ b/arch/arm/mach-msm/pil-tzapps.c
@@ -19,11 +19,6 @@
#include "peripheral-loader.h"
#include "scm-pas.h"
-static int nop_verify_blob(struct pil_desc *pil, u32 phy_addr, size_t size)
-{
- return 0;
-}
-
static int pil_tzapps_init_image(struct pil_desc *pil, const u8 *metadata,
size_t size)
{
@@ -42,7 +37,6 @@
static struct pil_reset_ops pil_tzapps_ops = {
.init_image = pil_tzapps_init_image,
- .verify_blob = nop_verify_blob,
.auth_and_reset = pil_tzapps_reset,
.shutdown = pil_tzapps_shutdown,
};