[Skiboot] [PATCH 3/5] external/common: Rename arch_flash_bmc() to arch_flash_access()

Cyril Bur cyril.bur at au1.ibm.com
Fri Oct 21 19:52:44 AEDT 2016


Honestly the first name was terrible. Initially this was intended only
to serve for BMC/ARM flash access, however, it should be more generic as
it is in the external/common arch code it should play nice on all
architectures.

This change also paves the way to change the default flash access
methods in pflash.

Signed-off-by: Cyril Bur <cyril.bur at au1.ibm.com>
---
 external/common/arch_flash.h         |  6 +++---
 external/common/arch_flash_arm.c     | 12 ++++++------
 external/common/arch_flash_common.c  |  6 ++++--
 external/common/arch_flash_powerpc.c | 14 ++++++++++++++
 external/pflash/pflash.c             |  4 ++--
 5 files changed, 29 insertions(+), 13 deletions(-)

diff --git a/external/common/arch_flash.h b/external/common/arch_flash.h
index aae9e10..c1be706 100644
--- a/external/common/arch_flash.h
+++ b/external/common/arch_flash.h
@@ -20,7 +20,7 @@
 #include <getopt.h>
 #include <libflash/blocklevel.h>
 
-enum bmc_access {
+enum flash_access {
 	PNOR_DIRECT,
 	PNOR_MTD,
 	BMC_DIRECT,
@@ -40,8 +40,8 @@ void arch_flash_close(struct blocklevel_device *bl, const char *file);
  * accessed.
  * If called AFTER init, then this returns how the flash is being accessed.
  */
-enum bmc_access arch_flash_bmc(struct blocklevel_device *bl,
-		enum bmc_access access);
+enum flash_access arch_flash_access(struct blocklevel_device *bl,
+		enum flash_access access);
 
 int arch_flash_erase_chip(struct blocklevel_device *bl);
 int arch_flash_4b_mode(struct blocklevel_device *bl, int set_4b);
diff --git a/external/common/arch_flash_arm.c b/external/common/arch_flash_arm.c
index 0776436..697609d 100644
--- a/external/common/arch_flash_arm.c
+++ b/external/common/arch_flash_arm.c
@@ -43,7 +43,7 @@ static struct arch_arm_data {
 	size_t ahb_flash_base;
 	size_t ahb_flash_size;
 	void *ahb_flash_map;
-	enum bmc_access access;
+	enum flash_access access;
 	struct flash_chip *flash_chip;
 	struct blocklevel_device *init_bl;
 } arch_data;
@@ -156,7 +156,7 @@ static void close_devs(void)
 	 */
 }
 
-static int open_devs(enum bmc_access access)
+static int open_devs(enum flash_access access)
 {
 	if (access != BMC_DIRECT && access != PNOR_DIRECT)
 		return -1;
@@ -190,7 +190,7 @@ static int open_devs(enum bmc_access access)
 	return 0;
 }
 
-static struct blocklevel_device *flash_setup(enum bmc_access access)
+static struct blocklevel_device *flash_setup(enum flash_access access)
 {
 	int rc;
 	struct blocklevel_device *bl;
@@ -237,7 +237,7 @@ static bool is_pnor_part(const char *str) {
 	return strcasestr(str, "pnor");
 }
 
-static char *get_dev_mtd(enum bmc_access access)
+static char *get_dev_mtd(enum flash_access access)
 {
 	FILE *f;
 	char *ret = NULL, *pos = NULL;
@@ -276,8 +276,8 @@ static char *get_dev_mtd(enum bmc_access access)
 	return ret;
 }
 
-enum bmc_access arch_flash_bmc(struct blocklevel_device *bl,
-		enum bmc_access access)
+enum flash_access arch_flash_access(struct blocklevel_device *bl,
+		enum flash_access access)
 {
 	if (access == ACCESS_INVAL)
 		return ACCESS_INVAL;
diff --git a/external/common/arch_flash_common.c b/external/common/arch_flash_common.c
index ef4669a..ba06fb2 100644
--- a/external/common/arch_flash_common.c
+++ b/external/common/arch_flash_common.c
@@ -16,6 +16,8 @@
 
 #include <libflash/blocklevel.h>
 
+#include "arch_flash.h"
+
 /* Default implmentations */
 int __attribute__((weak)) arch_flash_erase_chip(struct blocklevel_device *bl)
 {
@@ -27,9 +29,9 @@ int __attribute__((weak)) arch_flash_4b_mode(struct blocklevel_device *bl, int s
 	return -1;
 }
 
-int __attribute__((weak)) arch_flash_bmc(struct blocklevel_device *bl, int bmc)
+enum flash_access __attribute__((weak)) arch_flash_access(struct blocklevel_device *bl, enum flash_access access)
 {
-	return -1;
+	return ACCESS_INVAL;
 }
 
 int __attribute__((weak)) arch_flash_set_wrprotect(struct blocklevel_device *bl, int set)
diff --git a/external/common/arch_flash_powerpc.c b/external/common/arch_flash_powerpc.c
index 7ce962e..829d97b 100644
--- a/external/common/arch_flash_powerpc.c
+++ b/external/common/arch_flash_powerpc.c
@@ -213,10 +213,24 @@ int arch_flash_set_wrprotect(struct blocklevel_device *bl, int set)
 	return 0;
 }
 
+enum flash_access arch_flash_access(struct blocklevel_device *bl,
+		enum flash_access access)
+{
+	if (access != PNOR_MTD)
+		return ACCESS_INVAL;
+}
+
 int arch_flash_init(struct blocklevel_device **r_bl, const char *file, bool keep_alive)
 {
 	struct blocklevel_device *new_bl;
 
+	/*
+	 * In theory here we should check that something crazy wasn't
+	 * passed to arch_flash_access() and refuse to init.
+	 * However, arch_flash_access won't accept anything except
+	 * PNOR_MTD, if they want something different then they should
+	 * have checked with arch_flash_access()
+	 */
 	new_bl = arch_init_blocklevel(file, keep_alive);
 	if (!new_bl)
 		return -1;
diff --git a/external/pflash/pflash.c b/external/pflash/pflash.c
index bece12a..002d0dc 100644
--- a/external/pflash/pflash.c
+++ b/external/pflash/pflash.c
@@ -762,14 +762,14 @@ int main(int argc, char *argv[])
 		 * This helps give a more meaningful error messages.
 		 */
 
-		if (arch_flash_bmc(NULL, BMC_DIRECT) == ACCESS_INVAL) {
+		if (arch_flash_access(NULL, BMC_DIRECT) == ACCESS_INVAL) {
 			fprintf(stderr, "Can't access BMC flash on this architecture\n");
 			exit(1);
 		}
 	}
 
 	if (mtd) {
-		if (arch_flash_bmc(NULL, bmc_flash ? BMC_MTD : PNOR_MTD) == ACCESS_INVAL) {
+		if (arch_flash_access(NULL, bmc_flash ? BMC_MTD : PNOR_MTD) == ACCESS_INVAL) {
 			fprintf(stderr, "Can't access %s flash through MTD on this architecture\n",
 			        bmc_flash ? "BMC" : "PNOR");
 			exit(1);
-- 
2.10.0



More information about the Skiboot mailing list