diff options
author | Vasant Hegde <hegdevasant@linux.vnet.ibm.com> | 2017-08-09 20:48:17 +0530 |
---|---|---|
committer | Stewart Smith <stewart@linux.vnet.ibm.com> | 2017-08-15 16:37:14 +1000 |
commit | 4eeb60ceef57b01662f61f905930d56a883b634a (patch) | |
tree | d6de48bc7d75c9beac5a056a88f4ec093ad35f08 | |
parent | 0818df625e3539a6aaad025ee6f1d1a441dee4a5 (diff) | |
download | skiboot-4eeb60ceef57b01662f61f905930d56a883b634a.zip skiboot-4eeb60ceef57b01662f61f905930d56a883b634a.tar.gz skiboot-4eeb60ceef57b01662f61f905930d56a883b634a.tar.bz2 |
opal-prd: Disable pnor access interface on FSP system
On FSP system host does not have access to PNOR. Hence disable PNOR
access interfaces.
CC: Jeremy Kerr <jk@ozlabs.org>
CC: Daniel M Crowell <dcrowell@us.ibm.com>
Signed-off-by: Vasant Hegde <hegdevasant@linux.vnet.ibm.com>
Acked-by: Jeremy Kerr <jk@ozlabs.org>
Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
-rw-r--r-- | external/opal-prd/opal-prd.c | 14 | ||||
-rw-r--r-- | external/opal-prd/pnor.c | 19 | ||||
-rw-r--r-- | external/opal-prd/pnor.h | 1 |
3 files changed, 30 insertions, 4 deletions
diff --git a/external/opal-prd/opal-prd.c b/external/opal-prd/opal-prd.c index 798d59c..a09a636 100644 --- a/external/opal-prd/opal-prd.c +++ b/external/opal-prd/opal-prd.c @@ -1949,10 +1949,16 @@ static int run_prd_daemon(struct opal_prd_ctx *ctx) fixup_hinterface_table(); - rc = pnor_init(&ctx->pnor); - if (rc) { - pr_log(LOG_ERR, "PNOR: Failed to open pnor: %m"); - goto out_close; + if (pnor_available(&ctx->pnor)) { + rc = pnor_init(&ctx->pnor); + if (rc) { + pr_log(LOG_ERR, "PNOR: Failed to open pnor: %m"); + goto out_close; + } + } else { + /* Disable PNOR function pointers */ + hinterface.pnor_read = NULL; + hinterface.pnor_write = NULL; } ipmi_init(ctx); diff --git a/external/opal-prd/pnor.c b/external/opal-prd/pnor.c index 0e7e5c0..c032421 100644 --- a/external/opal-prd/pnor.c +++ b/external/opal-prd/pnor.c @@ -32,6 +32,25 @@ #include "pnor.h" #include "opal-prd.h" +#define FDT_FLASH_PATH "/proc/device-tree/chosen/ibm,system-flash" + +bool pnor_available(struct pnor *pnor) +{ + /* --pnor is specified */ + if (pnor->path) { + if (access(pnor->path, R_OK | W_OK) == 0) + return true; + + pr_log(LOG_ERR, "PNOR: Does not have permission to read pnor: %m"); + return false; + } + + if (access(FDT_FLASH_PATH, R_OK) == 0) + return true; + + return false; +} + int pnor_init(struct pnor *pnor) { int rc; diff --git a/external/opal-prd/pnor.h b/external/opal-prd/pnor.h index 4ff449c..28571af 100644 --- a/external/opal-prd/pnor.h +++ b/external/opal-prd/pnor.h @@ -23,5 +23,6 @@ extern int pnor_operation(struct pnor *pnor, const char *name, extern int pnor_init(struct pnor *pnor); extern void pnor_close(struct pnor *pnor); +extern bool pnor_available(struct pnor *pnor); #endif /*PNOR_H*/ |