@@ -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);
@@ -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;
@@ -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)
@@ -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;
@@ -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);
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@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 | 16 ++++++++++++++++ external/pflash/pflash.c | 4 ++-- 5 files changed, 31 insertions(+), 13 deletions(-)