aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--external/common/arch_flash.h6
-rw-r--r--external/common/arch_flash_arm.c12
-rw-r--r--external/common/arch_flash_common.c6
-rw-r--r--external/common/arch_flash_powerpc.c16
-rw-r--r--external/pflash/pflash.c4
5 files changed, 31 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..6f32a00 100644
--- a/external/common/arch_flash_powerpc.c
+++ b/external/common/arch_flash_powerpc.c
@@ -213,10 +213,26 @@ 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;
+
+ return PNOR_MTD;
+}
+
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);