Clean up the prom code / board detection (thanks Gabor), fix some warnings
SVN-Revision: 9136
This commit is contained in:
parent
c59593a2df
commit
258843f666
5 changed files with 48 additions and 26 deletions
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
@ -258,7 +264,7 @@ static int __init plat_setup_devices(void)
|
||||||
/* Read the NAND resources from the device controller */
|
/* Read the NAND resources from the device controller */
|
||||||
nand_slot0_res[0].start = readl(CFG_DC_DEV2 + CFG_DC_DEVBASE);
|
nand_slot0_res[0].start = readl(CFG_DC_DEV2 + CFG_DC_DEVBASE);
|
||||||
nand_slot0_res[0].end = nand_slot0_res[0].start + 0x1000;
|
nand_slot0_res[0].end = nand_slot0_res[0].start + 0x1000;
|
||||||
|
|
||||||
/* Initialise the NAND device */
|
/* Initialise the NAND device */
|
||||||
rb500_nand_setup();
|
rb500_nand_setup();
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* prom.c
|
* prom.c
|
||||||
**********************************************************************
|
**********************************************************************
|
||||||
* P . Sadik Oct 10, 2003
|
* P . Sadik Oct 10, 2003
|
||||||
*
|
*
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
@ -87,7 +84,7 @@ void __init prom_init(void)
|
||||||
{
|
{
|
||||||
DDR_t ddr = (DDR_t) DDR_VirtualAddress; /* define the pointer to the DDR registers */
|
DDR_t ddr = (DDR_t) DDR_VirtualAddress; /* define the pointer to the DDR registers */
|
||||||
phys_t memsize = 0-ddr->ddrmask;
|
phys_t memsize = 0-ddr->ddrmask;
|
||||||
|
|
||||||
/* this should be the very first message, even before serial is properly initialized */
|
/* this should be the very first message, even before serial is properly initialized */
|
||||||
prom_setup_cmdline();
|
prom_setup_cmdline();
|
||||||
setup_serial_port();
|
setup_serial_port();
|
||||||
|
@ -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];
|
||||||
|
@ -115,32 +123,36 @@ void __init prom_setup_cmdline(void){
|
||||||
int prom_argc;
|
int prom_argc;
|
||||||
char **prom_argv, **prom_envp;
|
char **prom_argv, **prom_envp;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
prom_argc = fw_arg0;
|
prom_argc = fw_arg0;
|
||||||
prom_argv = (char **) fw_arg1;
|
prom_argv = (char **) fw_arg1;
|
||||||
prom_envp = (char **) fw_arg2;
|
prom_envp = (char **) fw_arg2;
|
||||||
|
|
||||||
cp=cmd_line;
|
cp=cmd_line;
|
||||||
/* 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]);
|
||||||
|
@ -148,7 +160,7 @@ void __init prom_setup_cmdline(void){
|
||||||
*(cp++) = ' ';
|
*(cp++) = ' ';
|
||||||
strcpy(cp,(&_image_cmdline + 8));
|
strcpy(cp,(&_image_cmdline + 8));
|
||||||
cp += strlen(&_image_cmdline);
|
cp += strlen(&_image_cmdline);
|
||||||
|
|
||||||
i=strlen(arcs_cmdline);
|
i=strlen(arcs_cmdline);
|
||||||
if (i>0){
|
if (i>0){
|
||||||
*(cp++) = ' ';
|
*(cp++) = ' ';
|
||||||
|
@ -160,7 +172,7 @@ void __init prom_setup_cmdline(void){
|
||||||
else
|
else
|
||||||
strcpy(cp,GPIO_INIT_BUTTON);
|
strcpy(cp,GPIO_INIT_BUTTON);
|
||||||
cmd_line[CL_SIZE-1] = '\0';
|
cmd_line[CL_SIZE-1] = '\0';
|
||||||
|
|
||||||
strcpy(arcs_cmdline,cmd_line);
|
strcpy(arcs_cmdline,cmd_line);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue