From: wdenk Date: Tue, 10 Apr 2001 19:03:35 +0000 (+0000) Subject: I2C and config update by Stefan Roese, 10 Apr 2001 17:35:44 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=66174dc11156189e5ca5fec7a93a8214866b3a78;p=users%2Frw%2Fppcboot.git I2C and config update by Stefan Roese, 10 Apr 2001 17:35:44 --- diff --git a/board/ar405/flash.c b/board/ar405/flash.c index 55f40e8..2528d55 100644 --- a/board/ar405/flash.c +++ b/board/ar405/flash.c @@ -497,11 +497,13 @@ void flash_erase (flash_info_t *info, int s_first, int s_last) for (i=0; i<50; i++) udelay(1000); /* wait 1 ms */ } else { - addr[ADDR0] = (FLASH_WORD_SIZE)0x00AA00AA; - addr[ADDR1] = (FLASH_WORD_SIZE)0x00550055; - addr[ADDR0] = (FLASH_WORD_SIZE)0x00800080; - addr[ADDR0] = (FLASH_WORD_SIZE)0x00AA00AA; - addr[ADDR1] = (FLASH_WORD_SIZE)0x00550055; + if (sect == s_first) { + addr[ADDR0] = (FLASH_WORD_SIZE)0x00AA00AA; + addr[ADDR1] = (FLASH_WORD_SIZE)0x00550055; + addr[ADDR0] = (FLASH_WORD_SIZE)0x00800080; + addr[ADDR0] = (FLASH_WORD_SIZE)0x00AA00AA; + addr[ADDR1] = (FLASH_WORD_SIZE)0x00550055; + } addr2[0] = (FLASH_WORD_SIZE)0x00300030; /* sector erase */ } l_sect = sect; diff --git a/board/canbt/flash.c b/board/canbt/flash.c index da82bae..91be7c6 100644 --- a/board/canbt/flash.c +++ b/board/canbt/flash.c @@ -509,11 +509,13 @@ void flash_erase (flash_info_t *info, int s_first, int s_last) for (i=0; i<50; i++) udelay(1000); /* wait 1 ms */ } else { - addr[ADDR0] = (FLASH_WORD_SIZE)0x00AA00AA; - addr[ADDR1] = (FLASH_WORD_SIZE)0x00550055; - addr[ADDR0] = (FLASH_WORD_SIZE)0x00800080; - addr[ADDR0] = (FLASH_WORD_SIZE)0x00AA00AA; - addr[ADDR1] = (FLASH_WORD_SIZE)0x00550055; + if (sect == s_first) { + addr[ADDR0] = (FLASH_WORD_SIZE)0x00AA00AA; + addr[ADDR1] = (FLASH_WORD_SIZE)0x00550055; + addr[ADDR0] = (FLASH_WORD_SIZE)0x00800080; + addr[ADDR0] = (FLASH_WORD_SIZE)0x00AA00AA; + addr[ADDR1] = (FLASH_WORD_SIZE)0x00550055; + } addr2[0] = (FLASH_WORD_SIZE)0x00300030; /* sector erase */ } l_sect = sect; diff --git a/board/cpci405/cpci405.c b/board/cpci405/cpci405.c index 1be74a6..f7de49c 100644 --- a/board/cpci405/cpci405.c +++ b/board/cpci405/cpci405.c @@ -196,6 +196,49 @@ int board_pre_init (void) /* ------------------------------------------------------------------------- */ +int ctermm2(void) +{ + if ((*(unsigned char *)0xf0000400 == 0x00) && + (*(unsigned char *)0xf0000401 == 0x01)) + return 0; /* no, board is cpci405 */ + else + return -1; /* yes, board is cterm-m2 */ +} + + +int misc_init_f(void) +{ + return 0; /* dummy implementation */ +} + + +void misc_init_r(bd_t *bd) +{ + /* + * Generate last byte of ip-addr from code-plug @ 0xf0000400 + */ + if (ctermm2()) + { + char str[32]; + unsigned char ipbyte = *(unsigned char *)0xf0000400; + + /* + * Only overwrite ip-addr with allowed values + */ + if ((ipbyte != 0x00) && (ipbyte != 0xff)) + { + bd->bi_ip_addr = (bd->bi_ip_addr & 0xffffff00) | ipbyte; + sprintf(str, "%ld.%ld.%ld.%ld", + (bd->bi_ip_addr & 0xff000000) >> 24, + (bd->bi_ip_addr & 0x00ff0000) >> 16, + (bd->bi_ip_addr & 0x0000ff00) >> 8, + (bd->bi_ip_addr & 0x000000ff)); + setenv("ipaddr", str); + } + } +} + + /* * Check Board Identity: */ @@ -208,7 +251,7 @@ int checkboard (void) int index; int len; - if (!s || strncmp(s, "CPCI405", 7)) + if (!s) { printf ("### No HW ID - assuming CPCI405"); } @@ -224,6 +267,9 @@ int checkboard (void) } } + if (ctermm2()) + printf(" (CTERM-M2 - Id=0x%02x)", *(unsigned char *)0xf0000400); + printf("\n FPGA: "); /* display infos on fpgaimage */ diff --git a/board/cpci405/flash.c b/board/cpci405/flash.c index 4723583..a8edb63 100644 --- a/board/cpci405/flash.c +++ b/board/cpci405/flash.c @@ -497,11 +497,13 @@ void flash_erase (flash_info_t *info, int s_first, int s_last) for (i=0; i<50; i++) udelay(1000); /* wait 1 ms */ } else { - addr[ADDR0] = (FLASH_WORD_SIZE)0x00AA00AA; - addr[ADDR1] = (FLASH_WORD_SIZE)0x00550055; - addr[ADDR0] = (FLASH_WORD_SIZE)0x00800080; - addr[ADDR0] = (FLASH_WORD_SIZE)0x00AA00AA; - addr[ADDR1] = (FLASH_WORD_SIZE)0x00550055; + if (sect == s_first) { + addr[ADDR0] = (FLASH_WORD_SIZE)0x00AA00AA; + addr[ADDR1] = (FLASH_WORD_SIZE)0x00550055; + addr[ADDR0] = (FLASH_WORD_SIZE)0x00800080; + addr[ADDR0] = (FLASH_WORD_SIZE)0x00AA00AA; + addr[ADDR1] = (FLASH_WORD_SIZE)0x00550055; + } addr2[0] = (FLASH_WORD_SIZE)0x00300030; /* sector erase */ } l_sect = sect; diff --git a/board/cpciiser4/flash.c b/board/cpciiser4/flash.c index 9529a8d..fa6940f 100644 --- a/board/cpciiser4/flash.c +++ b/board/cpciiser4/flash.c @@ -497,11 +497,13 @@ void flash_erase (flash_info_t *info, int s_first, int s_last) for (i=0; i<50; i++) udelay(1000); /* wait 1 ms */ } else { - addr[ADDR0] = (FLASH_WORD_SIZE)0x00AA00AA; - addr[ADDR1] = (FLASH_WORD_SIZE)0x00550055; - addr[ADDR0] = (FLASH_WORD_SIZE)0x00800080; - addr[ADDR0] = (FLASH_WORD_SIZE)0x00AA00AA; - addr[ADDR1] = (FLASH_WORD_SIZE)0x00550055; + if (sect == s_first) { + addr[ADDR0] = (FLASH_WORD_SIZE)0x00AA00AA; + addr[ADDR1] = (FLASH_WORD_SIZE)0x00550055; + addr[ADDR0] = (FLASH_WORD_SIZE)0x00800080; + addr[ADDR0] = (FLASH_WORD_SIZE)0x00AA00AA; + addr[ADDR1] = (FLASH_WORD_SIZE)0x00550055; + } addr2[0] = (FLASH_WORD_SIZE)0x00300030; /* sector erase */ } l_sect = sect; diff --git a/common/board.c b/common/board.c index 1485a61..b4bf919 100644 --- a/common/board.c +++ b/common/board.c @@ -488,7 +488,7 @@ void board_init_r (bd_t *bd, ulong dest_addr) /* relocate environment function pointers etc. */ env_relocate (reloc_off); -#if defined(CONFIG_COGENT) || defined(CONFIG_HYMOD) +#if defined(CONFIG_COGENT) || defined(CONFIG_HYMOD) || defined(CONFIG_CPCI405) /* miscellaneous platform dependent initialisations */ misc_init_r(bd); #endif diff --git a/cpu/ppc4xx/i2c.c b/cpu/ppc4xx/i2c.c index 5a9039d..a5ce06f 100644 --- a/cpu/ppc4xx/i2c.c +++ b/cpu/ppc4xx/i2c.c @@ -256,9 +256,6 @@ int i2c_receive(unsigned char address, } - - - int i2c_send(unsigned char address, unsigned short size_to_send, unsigned char dataout[] ) { @@ -293,8 +290,9 @@ void i2c_write (uchar *addr, int alen, uchar *buffer, int len) /* write with ack polling */ /* XXX this should be improved to allow page write mode XXX - wd */ while (len-- > 0) { - xbuf[0] = addr[1]; - xbuf[1] = *buffer++; - i2c_send (addr[0] << 1, 2, xbuf); + xbuf[0] = addr[1]++; /* increase write offset */ + xbuf[1] = *buffer++; + while (i2c_send (addr[0] << 1, 2, xbuf) != 0) /* single write + ack polling */ + udelay(100); } } diff --git a/include/config_ADCIOP.h b/include/config_ADCIOP.h index e2639e5..ef23bd2 100644 --- a/include/config_ADCIOP.h +++ b/include/config_ADCIOP.h @@ -58,7 +58,8 @@ #define CONFIG_PHY_ADDR 0 /* PHY address */ -#define CONFIG_COMMANDS (CONFIG_CMD_DFL & ~CFG_CMD_NET) /* no network on ADCIOP */ +#define CONFIG_COMMANDS \ + ((CONFIG_CMD_DFL | CFG_CMD_ASKENV) & ~CFG_CMD_NET) /* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */ #include diff --git a/include/config_AR405.h b/include/config_AR405.h index d79730f..4990d64 100644 --- a/include/config_AR405.h +++ b/include/config_AR405.h @@ -63,7 +63,8 @@ #define CONFIG_PHY_ADDR 0 /* PHY address */ -#define CONFIG_COMMANDS (CONFIG_CMD_DFL | CFG_CMD_PCI | CFG_CMD_IRQ) +#define CONFIG_COMMANDS \ + (CONFIG_CMD_DFL | CFG_CMD_PCI | CFG_CMD_IRQ | CFG_CMD_ASKENV) /* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */ #include diff --git a/include/config_CANBT.h b/include/config_CANBT.h index 4e4cf26..c515c9a 100644 --- a/include/config_CANBT.h +++ b/include/config_CANBT.h @@ -65,7 +65,8 @@ #define CONFIG_PHY_ADDR 0 /* PHY address */ -#define CONFIG_COMMANDS ((CONFIG_CMD_DFL | CFG_CMD_IRQ) & ~CFG_CMD_NET) +#define CONFIG_COMMANDS ((CONFIG_CMD_DFL | CFG_CMD_IRQ | CFG_CMD_ASKENV) + & ~CFG_CMD_NET) /* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */ #include diff --git a/include/config_CPCI405.h b/include/config_CPCI405.h index b43f058..02f32db 100644 --- a/include/config_CPCI405.h +++ b/include/config_CPCI405.h @@ -63,15 +63,11 @@ #define CONFIG_PHY_ADDR 0 /* PHY address */ -#if 1 #define CONFIG_COMMANDS \ - (CONFIG_CMD_DFL | CFG_CMD_PCI | CFG_CMD_IRQ | CFG_CMD_IDE) + (CONFIG_CMD_DFL | CFG_CMD_PCI | CFG_CMD_IRQ | CFG_CMD_IDE | \ + CFG_CMD_ASKENV | CFG_CMD_EEPROM) #define CONFIG_MAC_PARTITION #define CONFIG_DOS_PARTITION -#else -#define CONFIG_COMMANDS \ - (CONFIG_CMD_DFL | CFG_CMD_PCI | CFG_CMD_IRQ) -#endif /* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */ #include @@ -189,12 +185,13 @@ #define CFG_ENV_OFFSET 0x000 /* environment starts at the beginning of the EEPROM */ #define CFG_ENV_SIZE 0x200 /* 512 bytes may be used for env vars */ /* total size of a CAT24WC08 is 1024 bytes */ +#endif #define CFG_I2C_EEPROM_ADDR 0x50 /* EEPROM CAT28WC08 */ #define CFG_EEPROM_PAGE_WRITE_BITS 4 /* The Catalyst CAT24WC08 has */ /* 16 byte page write mode using*/ /* last 4 bits of the address */ -#endif + /*----------------------------------------------------------------------- * Cache Configuration */ diff --git a/include/config_CPCIISER4.h b/include/config_CPCIISER4.h index efd1668..f57a083 100644 --- a/include/config_CPCIISER4.h +++ b/include/config_CPCIISER4.h @@ -61,13 +61,9 @@ #define CONFIG_PHY_ADDR 0 /* PHY address */ -#if 1 #define CONFIG_COMMANDS \ - (CONFIG_CMD_DFL | CFG_CMD_IRQ | CFG_CMD_PCI) -#else -#define CONFIG_COMMANDS \ - (CONFIG_CMD_DFL | CFG_CMD_PCI | CFG_CMD_IRQ) -#endif + (CONFIG_CMD_DFL | CFG_CMD_IRQ | CFG_CMD_PCI | CFG_CMD_ASKENV | \ + CFG_CMD_EEPROM) /* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */ #include @@ -164,19 +160,6 @@ #define CFG_FLASH_ERASE_TOUT 120000 /* Timeout for Flash Erase (in ms) */ #define CFG_FLASH_WRITE_TOUT 500 /* Timeout for Flash Write (in ms) */ - -#if 0 /* Use NVRAM for environment variables */ -/*----------------------------------------------------------------------- - * NVRAM organization - */ -#define CFG_ENV_IS_IN_NVRAM 1 /* use NVRAM for environment vars */ -#define CFG_NVRAM_BASE_ADDR 0xf0200000 /* NVRAM base address */ -#define CFG_NVRAM_SIZE (32*1024) /* NVRAM size */ -#define CFG_ENV_SIZE 0x1000 /* Size of Environment vars */ -#define CFG_ENV_ADDR \ - (CFG_NVRAM_BASE_ADDR+CFG_NVRAM_SIZE-CFG_ENV_SIZE) /* Env */ - -#else /* Use EEPROM for environment variables */ /*----------------------------------------------------------------------- * I2C EEPROM (CAT24WC08) for environment */ @@ -190,7 +173,7 @@ #define CFG_EEPROM_PAGE_WRITE_BITS 4 /* The Catalyst CAT24WC08 has */ /* 16 byte page write mode using*/ /* last 4 bits of the address */ -#endif + /*----------------------------------------------------------------------- * Cache Configuration */ diff --git a/include/ppcboot.h b/include/ppcboot.h index f6fc8de..71a6aa1 100644 --- a/include/ppcboot.h +++ b/include/ppcboot.h @@ -190,7 +190,8 @@ void pciinfo (int); #endif #if defined(CONFIG_COGENT) || defined(CONFIG_SXNI855T) || \ - defined(CONFIG_RSD_PROTO) || defined(CONFIG_HYMOD) + defined(CONFIG_RSD_PROTO) || defined(CONFIG_HYMOD) || \ + defined(CONFIG_CPCI405) /* cogent - $(BOARD)/mb.c */ /* SXNI855T and HYMOD - $(BOARD)/$(BOARD).c */ int misc_init_f (void);