diff options
Diffstat (limited to 'arch/mips/lasat/lasat_board.c')
| -rw-r--r-- | arch/mips/lasat/lasat_board.c | 55 |
1 files changed, 29 insertions, 26 deletions
diff --git a/arch/mips/lasat/lasat_board.c b/arch/mips/lasat/lasat_board.c index fc9b0e2a6be..577bb463a87 100644 --- a/arch/mips/lasat/lasat_board.c +++ b/arch/mips/lasat/lasat_board.c @@ -17,39 +17,39 @@ * * Routines specific to the LASAT boards */ -#include <linux/config.h> #include <linux/types.h> #include <linux/crc32.h> #include <asm/lasat/lasat.h> #include <linux/kernel.h> #include <linux/string.h> #include <linux/ctype.h> -#include <asm/bootinfo.h> +#include <linux/mutex.h> #include <asm/addrspace.h> #include "at93c.h" /* New model description table */ #include "lasat_models.h" -#define EEPROM_CRC(data, len) (~0 ^ crc32(~0, data, len)) +static DEFINE_MUTEX(lasat_eeprom_mutex); -struct lasat_info lasat_board_info; +#define EEPROM_CRC(data, len) (~crc32(~0, data, len)) -void update_bcastaddr(void); +struct lasat_info lasat_board_info; int EEPROMRead(unsigned int pos, unsigned char *data, int len) { int i; - for (i=0; i<len; i++) + for (i = 0; i < len; i++) *data++ = at93c_read(pos++); return 0; } + int EEPROMWrite(unsigned int pos, unsigned char *data, int len) { int i; - for (i=0; i<len; i++) + for (i = 0; i < len; i++) at93c_write(pos++, *data++); return 0; @@ -57,15 +57,15 @@ int EEPROMWrite(unsigned int pos, unsigned char *data, int len) static void init_flash_sizes(void) { - int i; unsigned long *lb = lasat_board_info.li_flashpart_base; unsigned long *ls = lasat_board_info.li_flashpart_size; + int i; ls[LASAT_MTD_BOOTLOADER] = 0x40000; ls[LASAT_MTD_SERVICE] = 0xC0000; ls[LASAT_MTD_NORMAL] = 0x100000; - if (mips_machtype == MACH_LASAT_100) { + if (!IS_LASAT_200()) { lasat_board_info.li_flash_base = 0x1e000000; lb[LASAT_MTD_BOOTLOADER] = 0x1e400000; @@ -80,9 +80,9 @@ static void init_flash_sizes(void) if (lasat_board_info.li_flash_size < 0x1000000) { lb[LASAT_MTD_BOOTLOADER] = 0x10000000; ls[LASAT_MTD_CONFIG] = 0x100000; - if (lasat_board_info.li_flash_size >= 0x400000) { - ls[LASAT_MTD_FS] = lasat_board_info.li_flash_size - 0x300000; - } + if (lasat_board_info.li_flash_size >= 0x400000) + ls[LASAT_MTD_FS] = + lasat_board_info.li_flash_size - 0x300000; } } @@ -95,7 +95,7 @@ int lasat_init_board_info(void) int c; unsigned long crc; unsigned long cfg0, cfg1; - const product_info_t *ppi; + const struct product_info *ppi; int i_n_base_models = N_BASE_MODELS; const char * const * i_txt_base_models = txt_base_models; int i_n_prids = N_PRIDS; @@ -111,12 +111,13 @@ int lasat_init_board_info(void) sizeof(struct lasat_eeprom_struct) - 4); if (crc != lasat_board_info.li_eeprom_info.crc32) { - prom_printf("WARNING...\nWARNING...\nEEPROM CRC does not match calculated, attempting to soldier on...\n"); + printk(KERN_WARNING "WARNING...\nWARNING...\nEEPROM CRC does " + "not match calculated, attempting to soldier on...\n"); } - if (lasat_board_info.li_eeprom_info.version != LASAT_EEPROM_VERSION) - { - prom_printf("WARNING...\nWARNING...\nEEPROM version %d, wanted version %d, attempting to soldier on...\n", + if (lasat_board_info.li_eeprom_info.version != LASAT_EEPROM_VERSION) { + printk(KERN_WARNING "WARNING...\nWARNING...\nEEPROM version " + "%d, wanted version %d, attempting to soldier on...\n", (unsigned int)lasat_board_info.li_eeprom_info.version, LASAT_EEPROM_VERSION); } @@ -124,8 +125,10 @@ int lasat_init_board_info(void) cfg0 = lasat_board_info.li_eeprom_info.cfg[0]; cfg1 = lasat_board_info.li_eeprom_info.cfg[1]; - if ( LASAT_W0_DSCTYPE(cfg0) != 1) { - prom_printf("WARNING...\nWARNING...\nInvalid configuration read from EEPROM, attempting to soldier on..."); + if (LASAT_W0_DSCTYPE(cfg0) != 1) { + printk(KERN_WARNING "WARNING...\nWARNING...\n" + "Invalid configuration read from EEPROM, attempting to " + "soldier on..."); } /* We have a valid configuration */ @@ -238,7 +241,8 @@ int lasat_init_board_info(void) /* Base model stuff */ if (lasat_board_info.li_bmid > i_n_base_models) lasat_board_info.li_bmid = i_n_base_models; - strcpy(lasat_board_info.li_bmstr, i_txt_base_models[lasat_board_info.li_bmid]); + strcpy(lasat_board_info.li_bmstr, + i_txt_base_models[lasat_board_info.li_bmid]); /* Product ID dependent values */ c = lasat_board_info.li_prid; @@ -251,13 +255,9 @@ int lasat_init_board_info(void) if (ppi->pi_type) strcpy(lasat_board_info.li_typestr, ppi->pi_type); else - sprintf(lasat_board_info.li_typestr, "%d",10*c); + sprintf(lasat_board_info.li_typestr, "%d", 10 * c); } -#if defined(CONFIG_INET) && defined(CONFIG_SYSCTL) - update_bcastaddr(); -#endif - return 0; } @@ -265,6 +265,8 @@ void lasat_write_eeprom_info(void) { unsigned long crc; + mutex_lock(&lasat_eeprom_mutex); + /* Generate the CRC */ crc = EEPROM_CRC((unsigned char *)(&lasat_board_info.li_eeprom_info), sizeof(struct lasat_eeprom_struct) - 4); @@ -273,5 +275,6 @@ void lasat_write_eeprom_info(void) /* Write the EEPROM info */ EEPROMWrite(0, (unsigned char *)&lasat_board_info.li_eeprom_info, sizeof(struct lasat_eeprom_struct)); -} + mutex_unlock(&lasat_eeprom_mutex); +} |
