Clean up the prom code / board detection (thanks Gabor), fix some warnings

SVN-Revision: 9136
This commit is contained in:
Florian Fainelli 2007-10-05 11:39:32 +00:00
parent c59593a2df
commit 258843f666
5 changed files with 48 additions and 26 deletions

View file

@ -228,6 +228,8 @@ static int __init rc32434_pci_init(void)
register_pci_controller(&rc32434_controller); register_pci_controller(&rc32434_controller);
rc32434_sync(); rc32434_sync();
return 0;
} }
arch_initcall(rc32434_pci_init); arch_initcall(rc32434_pci_init);

View file

@ -23,6 +23,8 @@
#include <linux/mtd/mtd.h> #include <linux/mtd/mtd.h>
#include <linux/mtd/partitions.h> #include <linux/mtd/partitions.h>
#include <asm/bootinfo.h>
#include <asm/rc32434/rc32434.h> #include <asm/rc32434/rc32434.h>
#include <asm/rc32434/dma.h> #include <asm/rc32434/dma.h>
#include <asm/rc32434/dma_v.h> #include <asm/rc32434/dma_v.h>
@ -230,10 +232,14 @@ static void __init parse_mac_addr(char *macstr)
static void __init rb500_nand_setup(void) static void __init rb500_nand_setup(void)
{ {
if (!strcmp(board_type, "500r5")) switch (mips_machtype) {
case MACH_MIKROTIK_RB532A:
changeLatchU5(LO_FOFF | LO_CEX, LO_ULED | LO_ALE | LO_CLE | LO_WPX); changeLatchU5(LO_FOFF | LO_CEX, LO_ULED | LO_ALE | LO_CLE | LO_WPX);
else break;
default:
changeLatchU5(LO_WPX | LO_FOFF | LO_CEX, LO_ULED | LO_ALE | LO_CLE); changeLatchU5(LO_WPX | LO_FOFF | LO_CEX, LO_ULED | LO_ALE | LO_CLE);
break;
}
/* Setup NAND specific settings */ /* Setup NAND specific settings */
rb500_nand_data.chip.nr_chips = 1; rb500_nand_data.chip.nr_chips = 1;

View file

@ -42,12 +42,9 @@ extern void __init setup_serial_port(void);
unsigned int idt_cpu_freq = 132000000; unsigned int idt_cpu_freq = 132000000;
EXPORT_SYMBOL(idt_cpu_freq); EXPORT_SYMBOL(idt_cpu_freq);
char board_type[11];
EXPORT_SYMBOL(board_type);
unsigned int gpio_bootup_state = 0; unsigned int gpio_bootup_state = 0;
EXPORT_SYMBOL(gpio_bootup_state); EXPORT_SYMBOL(gpio_bootup_state);
char mips_mac_address[18] = "08:00:06:05:40:01"; char mips_mac_address[18] = "08:00:06:05:40:01";
EXPORT_SYMBOL(mips_mac_address); EXPORT_SYMBOL(mips_mac_address);
@ -67,9 +64,6 @@ EXPORT_SYMBOL(soft_reboot);
extern int remote_debug; extern int remote_debug;
#endif #endif
extern unsigned long mips_machgroup;
extern unsigned long mips_machtype;
#define FREQ_TAG "HZ=" #define FREQ_TAG "HZ="
#define GPIO_TAG "gpio=" #define GPIO_TAG "gpio="
#define KMAC_TAG "kmac=" #define KMAC_TAG "kmac="
@ -78,6 +72,9 @@ extern unsigned long mips_machtype;
#define IGNORE_CMDLINE_MEM 1 #define IGNORE_CMDLINE_MEM 1
#define DEBUG_DDR #define DEBUG_DDR
#define BOARD_RB532 "500"
#define BOARD_RB532A "500r5"
void parse_soft_settings(unsigned *ptr, unsigned size); void parse_soft_settings(unsigned *ptr, unsigned size);
void parse_hard_settings(unsigned *ptr, unsigned size); void parse_hard_settings(unsigned *ptr, unsigned size);
@ -108,6 +105,17 @@ void __init prom_free_prom_memory(void)
/* No prom memory to free */ /* No prom memory to free */
} }
static inline int match_tag(char *arg, const char *tag)
{
return (strncmp(arg, tag, strlen(tag)) == 0);
}
static inline unsigned long tag2ul(char *arg, const char *tag)
{
char *num = arg+strlen(tag);
return simple_strtoul(num, 0, 10);
}
extern char _image_cmdline; extern char _image_cmdline;
void __init prom_setup_cmdline(void){ void __init prom_setup_cmdline(void){
char cmd_line[CL_SIZE]; char cmd_line[CL_SIZE];
@ -124,23 +132,27 @@ void __init prom_setup_cmdline(void){
/* Note: it is common that parameters start at argv[1] and not argv[0], /* Note: it is common that parameters start at argv[1] and not argv[0],
however, our elf loader starts at [0] */ however, our elf loader starts at [0] */
for(i=0;i<prom_argc;i++){ for(i=0;i<prom_argc;i++){
if (strncmp(prom_argv[i], FREQ_TAG, sizeof(FREQ_TAG) - 1) == 0) { if (match_tag(prom_argv[i], FREQ_TAG)) {
idt_cpu_freq = simple_strtoul(prom_argv[i] + sizeof(FREQ_TAG) - 1, 0, 10); idt_cpu_freq = tag2ul(prom_argv[i], FREQ_TAG);
continue; continue;
} }
#ifdef IGNORE_CMDLINE_MEM #ifdef IGNORE_CMDLINE_MEM
/* parses out the "mem=xx" arg */ /* parses out the "mem=xx" arg */
if (strncmp(prom_argv[i], MEM_TAG, sizeof(MEM_TAG) - 1) == 0) { if (match_tag(prom_argv[i], MEM_TAG)) {
continue; continue;
} }
#endif #endif
if (i>0) *(cp++) = ' '; if (i>0) *(cp++) = ' ';
if (match_tag(prom_argv[i], BOARD_TAG)) {
if (strncmp(prom_argv[i], BOARD_TAG, sizeof(BOARD_TAG) - 1) == 0) { char *board = prom_argv[i] + strlen(BOARD_TAG);
strcpy(board_type, prom_argv[i] + sizeof(BOARD_TAG) -1); if (match_tag(board, BOARD_RB532A))
mips_machtype = MACH_MIKROTIK_RB532A;
else
mips_machtype = MACH_MIKROTIK_RB532;
} }
if (strncmp(prom_argv[i], GPIO_TAG, sizeof(GPIO_TAG) - 1) == 0) {
gpio_bootup_state = simple_strtoul(prom_argv[i] + sizeof(GPIO_TAG) - 1, 0, 10); if (match_tag(prom_argv[i], GPIO_TAG)) {
gpio_bootup_state = tag2ul(prom_argv[i], GPIO_TAG);
} }
strcpy(cp,prom_argv[i]); strcpy(cp,prom_argv[i]);
cp+=strlen(prom_argv[i]); cp+=strlen(prom_argv[i]);

View file

@ -19,7 +19,7 @@
#include <asm/rc32434/pci.h> #include <asm/rc32434/pci.h>
#ifdef CONFIG_PCI #ifdef CONFIG_PCI
extern void *rc32434_time_init(void); extern void rc32434_time_init(void);
extern int __init rc32434_pcibridge_init(void); extern int __init rc32434_pcibridge_init(void);
#endif #endif

View file

@ -69,11 +69,13 @@ diff -urN linux.old/drivers/pci/Makefile linux.dev/drivers/pci/Makefile
diff -urN linux.old/include/asm-mips/bootinfo.h linux.dev/include/asm-mips/bootinfo.h diff -urN linux.old/include/asm-mips/bootinfo.h linux.dev/include/asm-mips/bootinfo.h
--- linux.old/include/asm-mips/bootinfo.h 2006-11-29 22:57:37.000000000 +0100 --- linux.old/include/asm-mips/bootinfo.h 2006-11-29 22:57:37.000000000 +0100
+++ linux.dev/include/asm-mips/bootinfo.h 2006-12-14 04:09:50.000000000 +0100 +++ linux.dev/include/asm-mips/bootinfo.h 2006-12-14 04:09:50.000000000 +0100
@@ -212,6 +212,8 @@ @@ -212,6 +212,10 @@
#define MACH_GROUP_NEC_EMMA2RH 25 /* NEC EMMA2RH (was 23) */ #define MACH_GROUP_NEC_EMMA2RH 25 /* NEC EMMA2RH (was 23) */
#define MACH_NEC_MARKEINS 0 /* NEC EMMA2RH Mark-eins */ #define MACH_NEC_MARKEINS 0 /* NEC EMMA2RH Mark-eins */
+#define MACH_GROUP_MIKROTIK 24 /* Mikrotik Boards */ +#define MACH_GROUP_MIKROTIK 26 /* Mikrotik Boards */
+#define MACH_MIKROTIK_RB532 0 /* Mikrotik RouterBoard 532 */
+#define MACH_MIKROTIK_RB532A 1 /* Mikrotik RouterBoard 532A */
+ +
#define CL_SIZE COMMAND_LINE_SIZE #define CL_SIZE COMMAND_LINE_SIZE