summaryrefslogtreecommitdiffstats
path: root/external
diff options
context:
space:
mode:
authorVasant Hegde <hegdevasant@linux.vnet.ibm.com>2017-08-09 20:48:17 +0530
committerStewart Smith <stewart@linux.vnet.ibm.com>2017-08-15 16:37:14 +1000
commit4eeb60ceef57b01662f61f905930d56a883b634a (patch)
treed6de48bc7d75c9beac5a056a88f4ec093ad35f08 /external
parent0818df625e3539a6aaad025ee6f1d1a441dee4a5 (diff)
downloadtalos-skiboot-4eeb60ceef57b01662f61f905930d56a883b634a.tar.gz
talos-skiboot-4eeb60ceef57b01662f61f905930d56a883b634a.zip
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>
Diffstat (limited to 'external')
-rw-r--r--external/opal-prd/opal-prd.c14
-rw-r--r--external/opal-prd/pnor.c19
-rw-r--r--external/opal-prd/pnor.h1
3 files changed, 30 insertions, 4 deletions
diff --git a/external/opal-prd/opal-prd.c b/external/opal-prd/opal-prd.c
index 798d59c9..a09a6366 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 0e7e5c04..c032421d 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 4ff449c8..28571af6 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*/
OpenPOWER on IntegriCloud