mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2025-04-21 12:27:27 +03:00
Clean up the prom code / board detection (thanks Gabor), fix some warnings
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@9136 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* prom.c
|
||||
* prom.c
|
||||
**********************************************************************
|
||||
* P . Sadik Oct 10, 2003
|
||||
*
|
||||
@@ -42,12 +42,9 @@ extern void __init setup_serial_port(void);
|
||||
|
||||
unsigned int idt_cpu_freq = 132000000;
|
||||
EXPORT_SYMBOL(idt_cpu_freq);
|
||||
char board_type[11];
|
||||
EXPORT_SYMBOL(board_type);
|
||||
unsigned int gpio_bootup_state = 0;
|
||||
EXPORT_SYMBOL(gpio_bootup_state);
|
||||
|
||||
|
||||
char mips_mac_address[18] = "08:00:06:05:40:01";
|
||||
EXPORT_SYMBOL(mips_mac_address);
|
||||
|
||||
@@ -67,9 +64,6 @@ EXPORT_SYMBOL(soft_reboot);
|
||||
extern int remote_debug;
|
||||
#endif
|
||||
|
||||
extern unsigned long mips_machgroup;
|
||||
extern unsigned long mips_machtype;
|
||||
|
||||
#define FREQ_TAG "HZ="
|
||||
#define GPIO_TAG "gpio="
|
||||
#define KMAC_TAG "kmac="
|
||||
@@ -78,6 +72,9 @@ extern unsigned long mips_machtype;
|
||||
#define IGNORE_CMDLINE_MEM 1
|
||||
#define DEBUG_DDR
|
||||
|
||||
#define BOARD_RB532 "500"
|
||||
#define BOARD_RB532A "500r5"
|
||||
|
||||
void parse_soft_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 */
|
||||
phys_t memsize = 0-ddr->ddrmask;
|
||||
|
||||
|
||||
/* this should be the very first message, even before serial is properly initialized */
|
||||
prom_setup_cmdline();
|
||||
setup_serial_port();
|
||||
@@ -108,6 +105,17 @@ void __init prom_free_prom_memory(void)
|
||||
/* 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;
|
||||
void __init prom_setup_cmdline(void){
|
||||
char cmd_line[CL_SIZE];
|
||||
@@ -115,32 +123,36 @@ void __init prom_setup_cmdline(void){
|
||||
int prom_argc;
|
||||
char **prom_argv, **prom_envp;
|
||||
int i;
|
||||
|
||||
|
||||
prom_argc = fw_arg0;
|
||||
prom_argv = (char **) fw_arg1;
|
||||
prom_envp = (char **) fw_arg2;
|
||||
|
||||
|
||||
cp=cmd_line;
|
||||
/* Note: it is common that parameters start at argv[1] and not argv[0],
|
||||
however, our elf loader starts at [0] */
|
||||
for(i=0;i<prom_argc;i++){
|
||||
if (strncmp(prom_argv[i], FREQ_TAG, sizeof(FREQ_TAG) - 1) == 0) {
|
||||
idt_cpu_freq = simple_strtoul(prom_argv[i] + sizeof(FREQ_TAG) - 1, 0, 10);
|
||||
if (match_tag(prom_argv[i], FREQ_TAG)) {
|
||||
idt_cpu_freq = tag2ul(prom_argv[i], FREQ_TAG);
|
||||
continue;
|
||||
}
|
||||
#ifdef IGNORE_CMDLINE_MEM
|
||||
/* 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;
|
||||
}
|
||||
#endif
|
||||
if (i>0) *(cp++) = ' ';
|
||||
|
||||
if (strncmp(prom_argv[i], BOARD_TAG, sizeof(BOARD_TAG) - 1) == 0) {
|
||||
strcpy(board_type, prom_argv[i] + sizeof(BOARD_TAG) -1);
|
||||
if (match_tag(prom_argv[i], BOARD_TAG)) {
|
||||
char *board = prom_argv[i] + strlen(BOARD_TAG);
|
||||
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]);
|
||||
cp+=strlen(prom_argv[i]);
|
||||
@@ -148,7 +160,7 @@ void __init prom_setup_cmdline(void){
|
||||
*(cp++) = ' ';
|
||||
strcpy(cp,(&_image_cmdline + 8));
|
||||
cp += strlen(&_image_cmdline);
|
||||
|
||||
|
||||
i=strlen(arcs_cmdline);
|
||||
if (i>0){
|
||||
*(cp++) = ' ';
|
||||
@@ -160,7 +172,7 @@ void __init prom_setup_cmdline(void){
|
||||
else
|
||||
strcpy(cp,GPIO_INIT_BUTTON);
|
||||
cmd_line[CL_SIZE-1] = '\0';
|
||||
|
||||
|
||||
strcpy(arcs_cmdline,cmd_line);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user