@@ -37,9 +37,7 @@ typedef struct global_data {
bd_t *bd;
unsigned long flags;
unsigned long baudrate;
- unsigned long have_console; /* serial_init() was called */
unsigned long env_addr; /* Address of Environment struct */
- unsigned long env_valid; /* Checksum of Environment valid? */
unsigned long fb_base; /* base address of frame buffer */
#ifdef CONFIG_FSL_ESDHC
unsigned long sdhc_clk;
@@ -88,6 +86,9 @@ typedef struct global_data {
#define GD_FLG_LOGINIT 0x00020 /* Log Buffer has been initialized */
#define GD_FLG_DISABLE_CONSOLE 0x00040 /* Disable console (in & out) */
#define GD_FLG_ENV_READY 0x00080 /* Environment imported into hash table */
+#define GD_FLG_HAVE_CONSOLE 0x00100 /* serial_init() was called */
+#define GD_FLG_PRI_ENV_VALID 0x00200 /* Primary environment valid */
+#define GD_FLG_RED_ENV_VALID 0x00400 /* Redundant environment valid */
#define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("r8")
@@ -37,10 +37,8 @@ typedef struct global_data {
unsigned long flags;
unsigned long baudrate;
unsigned long stack_end; /* highest stack address */
- unsigned long have_console; /* serial_init() was called */
unsigned long reloc_off; /* Relocation Offset */
unsigned long env_addr; /* Address of env struct */
- unsigned long env_valid; /* Checksum of env valid? */
unsigned long cpu_hz; /* cpu core clock frequency */
#if defined(CONFIG_LCD)
void *fb_base; /* framebuffer address */
@@ -60,6 +58,9 @@ typedef struct global_data {
#define GD_FLG_LOGINIT 0x00020 /* Log Buffer has been initialized */
#define GD_FLG_DISABLE_CONSOLE 0x00040 /* Disable console (in & out) */
#define GD_FLG_ENV_READY 0x00080 /* Environment imported into hash table */
+#define GD_FLG_HAVE_CONSOLE 0x00100 /* serial_init() was called */
+#define GD_FLG_PRI_ENV_VALID 0x00200 /* Primary environment valid */
+#define GD_FLG_RED_ENV_VALID 0x00400 /* Redundant environment valid */
#define DECLARE_GLOBAL_DATA_PTR register gd_t *gd asm("r5")
@@ -44,10 +44,8 @@ typedef struct global_data {
unsigned long flags;
unsigned long board_type;
unsigned long baudrate;
- unsigned long have_console; /* serial_init() was called */
phys_size_t ram_size; /* RAM size */
unsigned long env_addr; /* Address of Environment struct */
- unsigned long env_valid; /* Checksum of Environment valid? */
#if defined(CONFIG_POST) || defined(CONFIG_LOGBUFFER)
unsigned long post_log_word; /* Record POST activities */
unsigned long post_init_f_time; /* When post_init_f started */
@@ -68,6 +66,9 @@ typedef struct global_data {
#define GD_FLG_LOGINIT 0x00020 /* Log Buffer has been initialized */
#define GD_FLG_DISABLE_CONSOLE 0x00040 /* Disable console (in & out) */
#define GD_FLG_ENV_READY 0x00080 /* Environment imported into hash table */
+#define GD_FLG_HAVE_CONSOLE 0x00100 /* serial_init() was called */
+#define GD_FLG_PRI_ENV_VALID 0x00200 /* Primary environment valid */
+#define GD_FLG_RED_ENV_VALID 0x00400 /* Redundant environment valid */
#define DECLARE_GLOBAL_DATA_PTR register gd_t * volatile gd asm ("P3")
@@ -83,10 +83,8 @@ static void display_global_data(void)
printf(" |-flags: %lx\n", gd->flags);
printf(" |-board_type: %lx\n", gd->board_type);
printf(" |-baudrate: %lu\n", gd->baudrate);
- printf(" |-have_console: %lx\n", gd->have_console);
printf(" |-ram_size: %lx\n", gd->ram_size);
printf(" |-env_addr: %lx\n", gd->env_addr);
- printf(" |-env_valid: %lx\n", gd->env_valid);
printf(" |-jt(%p): %p\n", gd->jt, *(gd->jt));
printf(" \\-bd: %p\n", gd->bd);
printf(" |-bi_baudrate: %x\n", bd->bi_baudrate);
@@ -55,8 +55,6 @@ typedef struct global_data {
unsigned long reloc_off; /* Relocation Offset */
unsigned long reset_status; /* reset status register at boot */
unsigned long env_addr; /* Address of Environment struct */
- unsigned long env_valid; /* Checksum of Environment valid? */
- unsigned long have_console; /* serial_init() was called */
#if defined(CONFIG_LCD) || defined(CONFIG_VIDEO)
unsigned long fb_base; /* Base addr of framebuffer memory */
#endif
@@ -78,6 +76,9 @@ typedef struct global_data {
#define GD_FLG_LOGINIT 0x00020 /* Log Buffer has been initialized */
#define GD_FLG_DISABLE_CONSOLE 0x00040 /* Disable console (in & out) */
#define GD_FLG_ENV_READY 0x00080 /* Environment imported into hash table */
+#define GD_FLG_HAVE_CONSOLE 0x00100 /* serial_init() was called */
+#define GD_FLG_PRI_ENV_VALID 0x00200 /* Primary environment valid */
+#define GD_FLG_RED_ENV_VALID 0x00400 /* Redundant environment valid */
#if 0
extern gd_t *global_data;
@@ -38,9 +38,7 @@ typedef struct global_data {
bd_t *bd;
unsigned long flags;
unsigned long baudrate;
- unsigned long have_console; /* serial_init() was called */
unsigned long env_addr; /* Address of Environment struct */
- unsigned long env_valid; /* Checksum of Environment valid? */
unsigned long fb_base; /* base address of frame buffer */
void **jt; /* jump table */
char env_buf[32]; /* buffer for getenv() before reloc. */
@@ -57,6 +55,9 @@ typedef struct global_data {
#define GD_FLG_LOGINIT 0x00020 /* Log Buffer has been initialized */
#define GD_FLG_DISABLE_CONSOLE 0x00040 /* Disable console (in & out) */
#define GD_FLG_ENV_READY 0x00080 /* Environment imported into hash table */
+#define GD_FLG_HAVE_CONSOLE 0x00100 /* serial_init() was called */
+#define GD_FLG_PRI_ENV_VALID 0x00200 /* Primary environment valid */
+#define GD_FLG_RED_ENV_VALID 0x00400 /* Redundant environment valid */
#define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("r31")
@@ -40,11 +40,9 @@ typedef struct global_data {
bd_t *bd;
unsigned long flags;
unsigned long baudrate;
- unsigned long have_console; /* serial_init() was called */
phys_size_t ram_size; /* RAM size */
unsigned long reloc_off; /* Relocation Offset */
unsigned long env_addr; /* Address of Environment struct */
- unsigned long env_valid; /* Checksum of Environment valid? */
void **jt; /* jump table */
char env_buf[32]; /* buffer for getenv() before reloc. */
} gd_t;
@@ -60,6 +58,9 @@ typedef struct global_data {
#define GD_FLG_LOGINIT 0x00020 /* Log Buffer has been initialized */
#define GD_FLG_DISABLE_CONSOLE 0x00040 /* Disable console (in & out) */
#define GD_FLG_ENV_READY 0x00080 /* Environment imported into hash table */
+#define GD_FLG_HAVE_CONSOLE 0x00100 /* serial_init() was called */
+#define GD_FLG_PRI_ENV_VALID 0x00200 /* Primary environment valid */
+#define GD_FLG_RED_ENV_VALID 0x00400 /* Redundant environment valid */
#define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("k0")
@@ -28,10 +28,8 @@ typedef struct global_data {
unsigned long flags;
unsigned long baudrate;
unsigned long cpu_clk; /* CPU clock in Hz! */
- unsigned long have_console; /* serial_init() was called */
phys_size_t ram_size; /* RAM size */
unsigned long env_addr; /* Address of Environment struct */
- unsigned long env_valid; /* Checksum of Environment valid */
#if defined(CONFIG_POST) || defined(CONFIG_LOGBUFFER)
unsigned long post_log_word; /* Record POST activities */
unsigned long post_init_f_time; /* When post_init_f started */
@@ -49,6 +47,9 @@ typedef struct global_data {
#define GD_FLG_LOGINIT 0x00020 /* Log Buffer has been initialized */
#define GD_FLG_DISABLE_CONSOLE 0x00040 /* Disable console (in & out) */
#define GD_FLG_ENV_READY 0x00080 /* Environment imported into hash table */
+#define GD_FLG_HAVE_CONSOLE 0x00100 /* serial_init() was called */
+#define GD_FLG_PRI_ENV_VALID 0x00200 /* Primary environment valid */
+#define GD_FLG_RED_ENV_VALID 0x00400 /* Redundant environment valid */
#define DECLARE_GLOBAL_DATA_PTR register gd_t *gd asm ("gp")
@@ -332,7 +332,7 @@ static int mpc_get_fdr(int speed)
if (gd->flags & GD_FLG_RELOC) {
fdr = divider;
} else {
- if (gd->have_console)
+ if (gd->flags & GD_FLG_HAVE_CONSOLE)
printf("%ld kHz, ", best_speed / 1000);
return divider;
}
@@ -374,33 +374,33 @@ int i2c_read(uchar chip, uint addr, int alen, uchar *buf, int len)
xaddr[3] = addr & 0xFF;
if (wait_for_bb()) {
- if (gd->have_console)
+ if (gd->flags & GD_FLG_HAVE_CONSOLE)
printf("i2c_read: bus is busy\n");
goto Done;
}
mpc_reg_out(®s->mcr, I2C_STA, I2C_STA);
if (do_address(chip, 0)) {
- if (gd->have_console)
+ if (gd->flags & GD_FLG_HAVE_CONSOLE)
printf("i2c_read: failed to address chip\n");
goto Done;
}
if (send_bytes(chip, &xaddr[4-alen], alen)) {
- if (gd->have_console)
+ if (gd->flags & GD_FLG_HAVE_CONSOLE)
printf("i2c_read: send_bytes failed\n");
goto Done;
}
mpc_reg_out(®s->mcr, I2C_RSTA, I2C_RSTA);
if (do_address(chip, 1)) {
- if (gd->have_console)
+ if (gd->flags & GD_FLG_HAVE_CONSOLE)
printf("i2c_read: failed to address chip\n");
goto Done;
}
if (receive_bytes(chip, (char *)buf, len)) {
- if (gd->have_console)
+ if (gd->flags & GD_FLG_HAVE_CONSOLE)
printf("i2c_read: receive_bytes failed\n");
goto Done;
}
@@ -423,26 +423,26 @@ int i2c_write(uchar chip, uint addr, int alen, uchar *buf, int len)
xaddr[3] = addr & 0xFF;
if (wait_for_bb()) {
- if (gd->have_console)
+ if (gd->flags & GD_FLG_HAVE_CONSOLE)
printf("i2c_write: bus is busy\n");
goto Done;
}
mpc_reg_out(®s->mcr, I2C_STA, I2C_STA);
if (do_address(chip, 0)) {
- if (gd->have_console)
+ if (gd->flags & GD_FLG_HAVE_CONSOLE)
printf("i2c_write: failed to address chip\n");
goto Done;
}
if (send_bytes(chip, &xaddr[4-alen], alen)) {
- if (gd->have_console)
+ if (gd->flags & GD_FLG_HAVE_CONSOLE)
printf("i2c_write: send_bytes failed\n");
goto Done;
}
if (send_bytes(chip, (char *)buf, len)) {
- if (gd->have_console)
+ if (gd->flags & GD_FLG_HAVE_CONSOLE)
printf("i2c_write: send_bytes failed\n");
goto Done;
}
@@ -633,21 +633,21 @@ int i2c_read(uchar chip, uint addr, int alen, uchar *buffer, int len)
rc = i2c_send(&state, chip, 0, I2CF_START_COND, alen, &xaddr[4-alen]);
if (rc != 0) {
- if (gd->have_console)
+ if (gd->flags & GD_FLG_HAVE_CONSOLE)
printf("i2c_read: i2c_send failed (%d)\n", rc);
return 1;
}
rc = i2c_receive(&state, chip, 0, I2CF_STOP_COND, len, buffer);
if (rc != 0) {
- if (gd->have_console)
+ if (gd->flags & GD_FLG_HAVE_CONSOLE)
printf("i2c_read: i2c_receive failed (%d)\n", rc);
return 1;
}
rc = i2c_doio(&state);
if (rc != 0) {
- if (gd->have_console)
+ if (gd->flags & GD_FLG_HAVE_CONSOLE)
printf("i2c_read: i2c_doio failed (%d)\n", rc);
return 1;
}
@@ -683,21 +683,21 @@ int i2c_write(uchar chip, uint addr, int alen, uchar *buffer, int len)
rc = i2c_send(&state, chip, 0, I2CF_START_COND, alen, &xaddr[4-alen]);
if (rc != 0) {
- if (gd->have_console)
+ if (gd->flags & GD_FLG_HAVE_CONSOLE)
printf("i2c_write: first i2c_send failed (%d)\n", rc);
return 1;
}
rc = i2c_send(&state, 0, 0, I2CF_STOP_COND, len, buffer);
if (rc != 0) {
- if (gd->have_console)
+ if (gd->flags & GD_FLG_HAVE_CONSOLE)
printf("i2c_write: second i2c_send failed (%d)\n", rc);
return 1;
}
rc = i2c_doio(&state);
if (rc != 0) {
- if (gd->have_console)
+ if (gd->flags & GD_FLG_HAVE_CONSOLE)
printf("i2c_write: i2c_doio failed (%d)\n", rc);
return 1;
}
@@ -136,8 +136,6 @@ typedef struct global_data {
unsigned long arbiter_event_address;
#endif
unsigned long env_addr; /* Address of Environment struct */
- unsigned long env_valid; /* Checksum of Environment valid? */
- unsigned long have_console; /* serial_init() was called */
#if defined(CONFIG_SYS_ALLOC_DPRAM) || defined(CONFIG_CPM2)
unsigned int dp_alloc_base;
unsigned int dp_alloc_top;
@@ -193,6 +191,9 @@ typedef struct global_data {
#define GD_FLG_LOGINIT 0x00020 /* Log Buffer has been initialized */
#define GD_FLG_DISABLE_CONSOLE 0x00040 /* Disable console (in & out) */
#define GD_FLG_ENV_READY 0x00080 /* Environment imported into hash table */
+#define GD_FLG_HAVE_CONSOLE 0x00100 /* serial_init() was called */
+#define GD_FLG_PRI_ENV_VALID 0x00200 /* Primary environment valid */
+#define GD_FLG_RED_ENV_VALID 0x00400 /* Redundant environment valid */
#if 1
#define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("r2")
@@ -33,10 +33,8 @@ typedef struct global_data
unsigned long flags;
unsigned long baudrate;
unsigned long cpu_clk; /* CPU clock in Hz! */
- unsigned long have_console; /* serial_init() was called */
phys_size_t ram_size; /* RAM size */
unsigned long env_addr; /* Address of Environment struct */
- unsigned long env_valid; /* Checksum of Environment valid */
void **jt; /* Standalone app jump table */
char env_buf[32]; /* buffer for getenv() before reloc. */
} gd_t;
@@ -49,6 +47,9 @@ typedef struct global_data
#define GD_FLG_LOGINIT 0x00020 /* Log Buffer has been initialized */
#define GD_FLG_DISABLE_CONSOLE 0x00040 /* Disable console (in & out) */
#define GD_FLG_ENV_READY 0x00080 /* Environment imported into hash table */
+#define GD_FLG_HAVE_CONSOLE 0x00100 /* serial_init() was called */
+#define GD_FLG_PRI_ENV_VALID 0x00200 /* Primary environment valid */
+#define GD_FLG_RED_ENV_VALID 0x00400 /* Redundant environment valid */
#define DECLARE_GLOBAL_DATA_PTR register gd_t *gd asm ("r13")
@@ -50,8 +50,6 @@ typedef struct global_data {
unsigned long reloc_off; /* Relocation Offset */
unsigned long reset_status; /* reset status register at boot */
unsigned long env_addr; /* Address of Environment struct */
- unsigned long env_valid; /* Checksum of Environment valid? */
- unsigned long have_console; /* serial_init() was called */
#if defined(CONFIG_LCD) || defined(CONFIG_VIDEO)
unsigned long fb_base; /* Base address of framebuffer memory */
@@ -85,6 +83,9 @@ typedef struct global_data {
#define GD_FLG_LOGINIT 0x00020 /* Log Buffer has been initialized */
#define GD_FLG_DISABLE_CONSOLE 0x00040 /* Disable console (in & out) */
#define GD_FLG_ENV_READY 0x00080 /* Environment imported into hash table */
+#define GD_FLG_HAVE_CONSOLE 0x00100 /* serial_init() was called */
+#define GD_FLG_PRI_ENV_VALID 0x00200 /* Primary environment valid */
+#define GD_FLG_RED_ENV_VALID 0x00400 /* Redundant environment valid */
#define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("%g7")
@@ -39,11 +39,9 @@ typedef struct global_data {
bd_t *bd;
unsigned long flags;
unsigned long baudrate;
- unsigned long have_console; /* serial_init() was called */
unsigned long reloc_off; /* Relocation Offset */
unsigned long load_off; /* Load Offset */
unsigned long env_addr; /* Address of Environment struct */
- unsigned long env_valid; /* Checksum of Environment valid? */
unsigned long cpu_clk; /* CPU clock in Hz! */
unsigned long bus_clk;
unsigned long relocaddr; /* Start address of U-Boot in RAM */
@@ -59,23 +57,21 @@ extern gd_t *gd;
#endif
/* Word Offsets into Global Data - MUST match struct gd_t */
-#define GD_BD 0
-#define GD_FLAGS 1
-#define GD_BAUDRATE 2
-#define GD_HAVE_CONSOLE 3
-#define GD_RELOC_OFF 4
-#define GD_LOAD_OFF 5
-#define GD_ENV_ADDR 6
-#define GD_ENV_VALID 7
-#define GD_CPU_CLK 8
-#define GD_BUS_CLK 9
-#define GD_RELOC_ADDR 10
-#define GD_START_ADDR_SP 11
-#define GD_RAM_SIZE 12
-#define GD_RESET_STATUS 13
-#define GD_JT 14
+#define GD_BD 0
+#define GD_FLAGS 1
+#define GD_BAUDRATE 2
+#define GD_RELOC_OFF 3
+#define GD_LOAD_OFF 4
+#define GD_ENV_ADDR 5
+#define GD_CPU_CLK 6
+#define GD_BUS_CLK 7
+#define GD_RELOC_ADDR 8
+#define GD_START_ADDR_SP 9
+#define GD_RAM_SIZE 10
+#define GD_RESET_STATUS 11
+#define GD_JT 12
-#define GD_SIZE 15
+#define GD_SIZE 13
/*
* Global Data Flags
@@ -90,6 +86,10 @@ extern gd_t *gd;
#define GD_FLG_ENV_READY 0x00080 /* Environment imported into hash table */
#define GD_FLG_COLD_BOOT 0x00100 /* Cold Boot */
#define GD_FLG_WARM_BOOT 0x00200 /* Warm Boot */
+#define GD_FLG_HAVE_CONSOLE 0x00400 /* Warm Boot */
+#define GD_FLG_PRI_ENV_VALID 0x00800 /* Primary environment valid */
+#define GD_FLG_RED_ENV_VALID 0x01000 /* Redundant environment valid */
+
#if 0
#define DECLARE_GLOBAL_DATA_PTR
@@ -77,7 +77,7 @@ int board_init(void)
gd->bd->bi_boot_params = LINUX_BOOT_PARAM_ADDR;
/* We have a console */
- gd->have_console = 1;
+ gd->flags &= GD_FLG_HAVE_CONSOLE;
return 0;
}
@@ -56,7 +56,7 @@ void mv_reset_environment(void)
}
}
- gd->env_valid = 0;
+ SET_NO_ENV_VALID();
env_relocate();
for (i = 0; i < MV_KEEP_ENTRIES; i++) {
@@ -224,7 +224,7 @@ static int restore_default(void)
set_default_env("");
- gd->env_valid = 1;
+ SET_PRIMARY_ENV_VALID();
/*
* Read board specific values from I2C EEPROM
@@ -404,7 +404,7 @@ static int ctrlc_disabled = 0; /* see disable_ctrl() */
static int ctrlc_was_pressed = 0;
int ctrlc(void)
{
- if (!ctrlc_disabled && gd->have_console) {
+ if (!ctrlc_disabled && (gd->flags & GD_FLG_HAVE_CONSOLE)) {
if (tstc()) {
switch (getc()) {
case 0x03: /* ^C - Control C */
@@ -522,7 +522,7 @@ int console_assign(int file, const char *devname)
/* Called before relocation - use serial functions */
int console_init_f(void)
{
- gd->have_console = 1;
+ gd->flags |= GD_FLG_HAVE_CONSOLE;
#ifdef CONFIG_SILENT_CONSOLE
if (getenv("silent") != NULL)
@@ -136,7 +136,7 @@ static uchar env_get_char_init (int index)
uchar c;
/* if crc was bad, use the default environment */
- if (gd->env_valid)
+ if (gd->flags & (GD_FLG_PRI_ENV_VALID | GD_FLG_RED_ENV_VALID))
c = env_get_char_spec(index);
else
c = default_environment[index];
@@ -164,7 +164,7 @@ uchar env_get_char (int index)
const uchar *env_get_addr (int index)
{
- if (gd->env_valid)
+ if (gd->flags & (GD_FLG_PRI_ENV_VALID | GD_FLG_RED_ENV_VALID))
return (uchar *)(gd->env_addr + index);
else
return &default_environment[index];
@@ -234,7 +234,7 @@ void env_relocate (void)
env_reloc();
#endif
- if (gd->env_valid == 0) {
+ if (!(gd->flags & (GD_FLG_PRI_ENV_VALID | GD_FLG_RED_ENV_VALID))) {
#if defined(CONFIG_ENV_IS_NOWHERE) /* Environment not changable */
set_default_env(NULL);
#else
@@ -92,7 +92,7 @@ int env_init(void)
unsigned off;
uchar buf[64];
- if (gd->env_valid)
+ if (gd->flags & (GD_FLG_PRI_ENV_VALID | GD_FLG_RED_ENV_VALID))
return 0;
AT91F_DataflashInit(); /* prepare for DATAFLASH read/write */
@@ -116,10 +116,10 @@ int env_init(void)
if (crc == new) {
gd->env_addr = offsetof(env_t,data);
- gd->env_valid = 1;
+ SET_PRIMARY_ENV_VALID();
} else {
gd->env_addr = (ulong)&default_environment[0];
- gd->env_valid = 0;
+ SET_NO_ENV_VALID();
}
return 0;
@@ -101,7 +101,7 @@ uchar env_get_char_spec (int index)
off = CONFIG_ENV_OFFSET;
#ifdef CONFIG_ENV_OFFSET_REDUND
- if (gd->env_valid == 2)
+ if (gd->flags & GD_FLG_RED_ENV_VALID)
off = CONFIG_ENV_OFFSET_REDUND;
#endif
eeprom_bus_read(CONFIG_SYS_DEF_EEPROM_ADDR,
@@ -117,7 +117,7 @@ void env_relocate_spec (void)
unsigned int off = CONFIG_ENV_OFFSET;
#ifdef CONFIG_ENV_OFFSET_REDUND
- if (gd->env_valid == 2)
+ if (gd->flags & GD_FLG_RED_ENV_VALID)
off = CONFIG_ENV_OFFSET_REDUND;
#endif
eeprom_bus_read(CONFIG_SYS_DEF_EEPROM_ADDR,
@@ -151,7 +151,7 @@ int saveenv(void)
env_new.crc = crc32(0, env_new.data, ENV_SIZE);
#ifdef CONFIG_ENV_OFFSET_REDUND
- if (gd->env_valid == 1) {
+ if (gd->flags & GD_FLG_PRI_ENV_VALID) {
off = CONFIG_ENV_OFFSET_REDUND;
off_red = CONFIG_ENV_OFFSET;
}
@@ -170,10 +170,10 @@ int saveenv(void)
off_red + offsetof(env_t,flags),
(uchar *)&flag_obsolete,
1);
- if (gd->env_valid == 1)
- gd->env_valid = 2;
+ if (gd->flags & GD_FLG_PRI_ENV_VALID)
+ SET_REDUNDANT_ENV_VALID();
else
- gd->env_valid = 1;
+ SET_PRIMARY_ENV_VALID();
}
#endif
@@ -233,31 +233,31 @@ int env_init(void)
if (!crc_ok[0] && !crc_ok[1]) {
gd->env_addr = 0;
- gd->env_valid = 0;
+ SET_NO_ENV_VALID();
return 0;
} else if (crc_ok[0] && !crc_ok[1]) {
- gd->env_valid = 1;
+ SET_PRIMARY_ENV_VALID();
}
else if (!crc_ok[0] && crc_ok[1]) {
- gd->env_valid = 2;
+ SET_REDUNDANT_ENV_VALID();
} else {
/* both ok - check serial */
if (flags[0] == ACTIVE_FLAG && flags[1] == OBSOLETE_FLAG)
- gd->env_valid = 1;
+ SET_PRIMARY_ENV_VALID();
else if (flags[0] == OBSOLETE_FLAG && flags[1] == ACTIVE_FLAG)
- gd->env_valid = 2;
+ SET_REDUNDANT_ENV_VALID();
else if (flags[0] == 0xFF && flags[1] == 0)
- gd->env_valid = 2;
+ SET_REDUNDANT_ENV_VALID();
else if(flags[1] == 0xFF && flags[0] == 0)
- gd->env_valid = 1;
+ SET_PRIMARY_ENV_VALID();
else /* flags are equal - almost impossible */
- gd->env_valid = 1;
+ SET_PRIMARY_ENV_VALID();
}
- if (gd->env_valid == 2)
+ if (gd->flags & GD_FLG_RED_ENV_VALID)
gd->env_addr = off_env[1] + offsetof(env_t,data);
- else if (gd->env_valid == 1)
+ else if (gd->flags & GD_FLG_PRI_ENV_VALID)
gd->env_addr = off_env[0] + offsetof(env_t,data);
return (0);
@@ -292,10 +292,10 @@ int env_init(void)
if (crc == new) {
gd->env_addr = offsetof(env_t,data);
- gd->env_valid = 1;
+ SET_PRIMARY_ENV_VALID();
} else {
gd->env_addr = 0;
- gd->env_valid = 0;
+ SET_NO_ENV_VALID();
}
return (0);
@@ -100,28 +100,28 @@ int env_init(void)
if (crc1_ok && ! crc2_ok) {
gd->env_addr = addr1;
- gd->env_valid = 1;
+ SET_PRIMARY_ENV_VALID();
} else if (! crc1_ok && crc2_ok) {
gd->env_addr = addr2;
- gd->env_valid = 1;
+ SET_PRIMARY_ENV_VALID();
} else if (! crc1_ok && ! crc2_ok) {
gd->env_addr = addr_default;
- gd->env_valid = 0;
+ SET_NO_ENV_VALID();
} else if (flag1 == ACTIVE_FLAG && flag2 == OBSOLETE_FLAG) {
gd->env_addr = addr1;
- gd->env_valid = 1;
+ SET_PRIMARY_ENV_VALID();
} else if (flag1 == OBSOLETE_FLAG && flag2 == ACTIVE_FLAG) {
gd->env_addr = addr2;
- gd->env_valid = 1;
+ SET_PRIMARY_ENV_VALID();
} else if (flag1 == flag2) {
gd->env_addr = addr1;
- gd->env_valid = 2;
+ SET_REDUNDANT_ENV_VALID();
} else if (flag1 == 0xFF) {
gd->env_addr = addr1;
- gd->env_valid = 2;
+ SET_REDUNDANT_ENV_VALID();
} else if (flag2 == 0xFF) {
gd->env_addr = addr2;
- gd->env_valid = 2;
+ SET_REDUNDANT_ENV_VALID();
}
return 0;
@@ -244,12 +244,12 @@ int env_init(void)
{
if (crc32(0, env_ptr->data, ENV_SIZE) == env_ptr->crc) {
gd->env_addr = (ulong)&(env_ptr->data);
- gd->env_valid = 1;
+ SET_PRIMARY_ENV_VALID();
return(0);
}
gd->env_addr = (ulong)&default_environment[0];
- gd->env_valid = 0;
+ SET_NO_ENV_VALID();
return 0;
}
@@ -351,7 +351,7 @@ void env_relocate_spec(void)
flash_addr_new->crc) {
char flag = OBSOLETE_FLAG;
- gd->env_valid = 2;
+ SET_REDUNDANT_ENV_VALID();
flash_sect_protect(0, (ulong)flash_addr_new, end_addr_new);
flash_write(&flag,
(ulong)&(flash_addr_new->flags),
@@ -363,7 +363,7 @@ void env_relocate_spec(void)
(flash_addr->flags & ACTIVE_FLAG) == ACTIVE_FLAG) {
char flag = ACTIVE_FLAG;
- gd->env_valid = 2;
+ SET_REDUNDANT_ENV_VALID();
flash_sect_protect(0, (ulong)flash_addr, end_addr);
flash_write(&flag,
(ulong)&(flash_addr->flags),
@@ -371,7 +371,7 @@ void env_relocate_spec(void)
flash_sect_protect(1, (ulong)flash_addr, end_addr);
}
- if (gd->env_valid == 2)
+ if (gd->flags & GD_FLG_RED_ENV_VALID)
puts ("*** Warning - some problems detected "
"reading environment; recovered successfully\n\n");
#endif /* CONFIG_ENV_ADDR_REDUND */
@@ -78,7 +78,7 @@ int env_init(void)
{
/* use default */
gd->env_addr = (ulong)&default_environment[0];
- gd->env_valid = 1;
+ SET_PRIMARY_ENV_VALID();
return 0;
}
@@ -73,7 +73,7 @@ int env_init(void)
{
/* use default */
gd->env_addr = (ulong)&default_environment[0];
- gd->env_valid = 1;
+ SET_PRIMARY_ENV_VALID();
return 0;
}
@@ -108,41 +108,41 @@ int env_init(void)
if (!crc1_ok && !crc2_ok) {
gd->env_addr = 0;
- gd->env_valid = 0;
+ SET_NO_ENV_VALID();
return 0;
} else if (crc1_ok && !crc2_ok) {
- gd->env_valid = 1;
+ SET_PRIMARY_ENV_VALID();
}
#ifdef CONFIG_ENV_OFFSET_REDUND
else if (!crc1_ok && crc2_ok) {
- gd->env_valid = 2;
+ SET_REDUNDANT_ENV_VALID();
} else {
/* both ok - check serial */
if(tmp_env1->flags == 255 && tmp_env2->flags == 0)
- gd->env_valid = 2;
+ SET_REDUNDANT_ENV_VALID();
else if(tmp_env2->flags == 255 && tmp_env1->flags == 0)
- gd->env_valid = 1;
+ SET_PRIMARY_ENV_VALID();
else if(tmp_env1->flags > tmp_env2->flags)
- gd->env_valid = 1;
+ SET_PRIMARY_ENV_VALID();
else if(tmp_env2->flags > tmp_env1->flags)
- gd->env_valid = 2;
+ SET_REDUNDANT_ENV_VALID();
else /* flags are equal - almost impossible */
- gd->env_valid = 1;
+ SET_PRIMARY_ENV_VALID();
}
- if (gd->env_valid == 2)
+ if (gd->flags & GD_FLG_RED_ENV_VALID)
env_ptr = tmp_env2;
else
#endif
- if (gd->env_valid == 1)
+ if (gd->flags & GD_FLG_PRI_ENV_VALID)
env_ptr = tmp_env1;
gd->env_addr = (ulong)env_ptr->data;
#else /* ENV_IS_EMBEDDED || CONFIG_NAND_ENV_DST */
gd->env_addr = (ulong)&default_environment[0];
- gd->env_valid = 1;
+ SET_PRIMARY_ENV_VALID();
#endif /* ENV_IS_EMBEDDED || CONFIG_NAND_ENV_DST */
return (0);
@@ -208,7 +208,7 @@ int saveenv(void)
env_new.crc = crc32(0, env_new.data, ENV_SIZE);
env_new.flags = ++env_flags; /* increase the serial */
- if(gd->env_valid == 1) {
+ if(gd->flags & GD_FLG_PRI_ENV_VALID) {
puts("Erasing redundant NAND...\n");
nand_erase_options.offset = CONFIG_ENV_OFFSET_REDUND;
if (nand_erase_opts(&nand_info[0], &nand_erase_options))
@@ -234,7 +234,10 @@ int saveenv(void)
puts("done\n");
- gd->env_valid = (gd->env_valid == 2 ? 1 : 2);
+ if (gd->flags & GD_FLG_RED_ENV_VALID)
+ SET_PRIMARY_ENV_VALID();
+ else
+ SET_REDUNDANT_ENV_VALID();
return ret;
}
@@ -373,27 +376,27 @@ void env_relocate_spec(void)
set_default_env("!bad CRC");
return;
} else if (crc1_ok && !crc2_ok) {
- gd->env_valid = 1;
+ SET_PRIMARY_ENV_VALID();
} else if (!crc1_ok && crc2_ok) {
- gd->env_valid = 2;
+ SET_REDUNDANT_ENV_VALID();
} else {
/* both ok - check serial */
if (tmp_env1->flags == 255 && tmp_env2->flags == 0)
- gd->env_valid = 2;
+ SET_REDUNDANT_ENV_VALID();
else if (tmp_env2->flags == 255 && tmp_env1->flags == 0)
- gd->env_valid = 1;
+ SET_PRIMARY_ENV_VALID();
else if (tmp_env1->flags > tmp_env2->flags)
- gd->env_valid = 1;
+ SET_PRIMARY_ENV_VALID();
else if (tmp_env2->flags > tmp_env1->flags)
- gd->env_valid = 2;
+ SET_REDUNDANT_ENV_VALID();
else /* flags are equal - almost impossible */
- gd->env_valid = 1;
+ SET_PRIMARY_ENV_VALID();
}
free(env_ptr);
- if (gd->env_valid == 1)
+ if (gd->flags & GD_FLG_PRI_ENV_VALID)
ep = tmp_env1;
else
ep = tmp_env2;
@@ -52,7 +52,7 @@ uchar env_get_char_spec(int index)
int env_init(void)
{
gd->env_addr = (ulong)&default_environment[0];
- gd->env_valid = 0;
+ SET_NO_ENV_VALID();
return (0);
}
@@ -131,10 +131,10 @@ int env_init(void)
if (crc32(0, env_ptr->data, ENV_SIZE) == env_ptr->crc) {
gd->env_addr = (ulong)&(env_ptr->data);
#endif
- gd->env_valid = 1;
+ SET_PRIMARY_ENV_VALID();
} else {
gd->env_addr = (ulong)&default_environment[0];
- gd->env_valid = 0;
+ SET_NO_ENV_VALID();
}
return (0);
}
@@ -90,7 +90,7 @@ void env_relocate_spec(void)
rc = env_import(buf, 1);
if (rc)
- gd->env_valid = 1;
+ SET_PRIMARY_ENV_VALID();
}
int saveenv(void)
@@ -145,7 +145,7 @@ int env_init(void)
{
/* use default */
gd->env_addr = (ulong) & default_environment[0];
- gd->env_valid = 1;
+ SET_PRIMARY_ENV_VALID();
return 0;
}
@@ -99,7 +99,7 @@ int saveenv(void)
env_new.crc = crc32(0, env_new.data, ENV_SIZE);
env_new.flags = ACTIVE_FLAG;
- if (gd->env_valid == 1) {
+ if (gd->flags & GD_FLG_PRI_ENV_VALID) {
env_new_offset = CONFIG_ENV_OFFSET_REDUND;
env_offset = CONFIG_ENV_OFFSET;
} else {
@@ -156,9 +156,14 @@ int saveenv(void)
puts("done\n");
- gd->env_valid = (gd->env_valid == 2 ? 1 : 2);
+ if (gd->flags & GD_FLG_RED_ENV_VALID) {
+ SET_PRIMARY_ENV_VALID();
+ printf("Valid environment: Primary\n");
+ } else {
+ SET_REDUNDANT_ENV_VALID();
+ printf("Valid environment: Redundant\n");
+ }
- printf("Valid environment: %d\n", (int)gd->env_valid);
done:
if (saved_buffer)
@@ -210,28 +215,28 @@ void env_relocate_spec(void)
set_default_env("!bad CRC");
goto err_read;
} else if (crc1_ok && !crc2_ok) {
- gd->env_valid = 1;
+ SET_PRIMARY_ENV_VALID();
} else if (!crc1_ok && crc2_ok) {
- gd->env_valid = 2;
+ SET_REDUNDANT_ENV_VALID();
} else if (tmp_env1->flags == ACTIVE_FLAG &&
tmp_env2->flags == OBSOLETE_FLAG) {
- gd->env_valid = 1;
+ SET_PRIMARY_ENV_VALID();
} else if (tmp_env1->flags == OBSOLETE_FLAG &&
tmp_env2->flags == ACTIVE_FLAG) {
- gd->env_valid = 2;
+ SET_REDUNDANT_ENV_VALID();
} else if (tmp_env1->flags == tmp_env2->flags) {
- gd->env_valid = 2;
+ SET_REDUNDANT_ENV_VALID();
} else if (tmp_env1->flags == 0xFF) {
- gd->env_valid = 2;
+ SET_REDUNDANT_ENV_VALID();
} else {
/*
* this differs from code in env_flash.c, but I think a sane
* default path is desirable.
*/
- gd->env_valid = 2;
+ SET_REDUNDANT_ENV_VALID();
}
- if (gd->env_valid == 1)
+ if (gd->flags & GD_FLG_PRI_ENV_VALID)
ep = tmp_env1;
else
ep = tmp_env2;
@@ -350,7 +355,7 @@ void env_relocate_spec(void)
ret = env_import(buf, 1);
if (ret)
- gd->env_valid = 1;
+ SET_PRIMARY_ENV_VALID();
out:
spi_flash_free(env_flash);
env_flash = NULL;
@@ -361,7 +366,7 @@ int env_init(void)
{
/* SPI flash isn't usable before relocation */
gd->env_addr = (ulong)&default_environment[0];
- gd->env_valid = 1;
+ SET_PRIMARY_ENV_VALID();
return 0;
}
@@ -396,7 +396,7 @@ static int ppc4xx_i2c_transfer(uchar chip, uint addr, int alen, uchar *buffer,
#endif
if ((ret = i2c_transfer(read, chip << 1, &xaddr[4 - alen], alen,
buffer, len)) != 0) {
- if (gd->have_console) {
+ if (gd->flags & GD_FLG_HAVE_CONSOLE) {
printf("I2C %s: failed %d\n",
read ? "read" : "write", ret);
}
@@ -118,9 +118,9 @@ DECLARE_GLOBAL_DATA_PTR;
#ifdef DEBUG_I2C
-#define PRINTD(fmt,args...) do { \
- if (gd->have_console) \
- printf (fmt ,##args); \
+#define PRINTD(fmt,args...) do { \
+ if (gd->flags & GD_FLG_HAVE_CONSOLE) \
+ printf (fmt ,##args); \
} while (0)
#else
#define PRINTD(fmt,args...)
@@ -152,6 +152,24 @@ typedef struct environment_s {
unsigned char data[ENV_SIZE]; /* Environment data */
} env_t;
+#define SET_NO_ENV_VALID() \
+ do { \
+ gd->flags &= ~(GD_FLG_PRI_ENV_VALID | \
+ GD_FLG_RED_ENV_VALID); \
+ } while (0)
+
+#define SET_PRIMARY_ENV_VALID() \
+ do { \
+ SET_NO_ENV_VALID(); \
+ gd->flags |= GD_FLG_PRI_ENV_VALID; \
+ } while (0)
+
+#define SET_REDUNDANT_ENV_VALID() \
+ do { \
+ SET_NO_ENV_VALID(); \
+ gd->flags |= GD_FLG_RED_ENV_VALID; \
+ } while (0)
+
#ifndef DO_DEPS_ONLY
#include <search.h>
Signed-off-by: Graeme Russ <graeme.russ@gmail.com> --- Changes since V1: - In common/console.c, gd->flags &= GD_FLG_HAVE_CONSOLE change to |= arch/arm/include/asm/global_data.h | 5 ++- arch/avr32/include/asm/global_data.h | 5 ++- arch/blackfin/include/asm/global_data.h | 5 ++- arch/blackfin/lib/board.c | 2 - arch/m68k/include/asm/global_data.h | 5 ++- arch/microblaze/include/asm/global_data.h | 5 ++- arch/mips/include/asm/global_data.h | 5 ++- arch/nios2/include/asm/global_data.h | 5 ++- arch/powerpc/cpu/mpc5xxx/i2c.c | 20 ++++++------ arch/powerpc/cpu/mpc8xx/i2c.c | 12 ++++---- arch/powerpc/include/asm/global_data.h | 5 ++- arch/sh/include/asm/global_data.h | 5 ++- arch/sparc/include/asm/global_data.h | 5 ++- arch/x86/include/asm/global_data.h | 36 +++++++++++----------- board/edb93xx/edb93xx.c | 2 +- board/matrix_vision/common/mv_common.c | 2 +- board/zeus/zeus.c | 2 +- common/console.c | 4 +- common/env_common.c | 6 ++-- common/env_dataflash.c | 6 ++-- common/env_eeprom.c | 36 +++++++++++----------- common/env_flash.c | 26 ++++++++-------- common/env_mgdisk.c | 2 +- common/env_mmc.c | 2 +- common/env_nand.c | 45 +++++++++++++++------------- common/env_nowhere.c | 2 +- common/env_nvram.c | 4 +- common/env_onenand.c | 4 +- common/env_sf.c | 31 +++++++++++-------- drivers/i2c/ppc4xx_i2c.c | 2 +- drivers/i2c/soft_i2c.c | 6 ++-- include/environment.h | 18 +++++++++++ 32 files changed, 177 insertions(+), 143 deletions(-) -- 1.7.5.2.317.g391b14