parent
be62105354
commit
21a2fb4a82
@ -1,161 +0,0 @@ |
|||||||
/*
|
|
||||||
* prom.c
|
|
||||||
********************************************************************** |
|
||||||
* P . Sadik Oct 10, 2003 |
|
||||||
* |
|
||||||
* Started change log |
|
||||||
* idt_cpu_freq is make a kernel configuration parameter |
|
||||||
* idt_cpu_freq is exported so that other modules can use it. |
|
||||||
* Code cleanup |
|
||||||
********************************************************************** |
|
||||||
* P. Sadik Oct 20, 2003 |
|
||||||
* |
|
||||||
* Removed NVRAM code from here, since they are already available under |
|
||||||
* nvram directory. |
|
||||||
* Added serial port initialisation. |
|
||||||
********************************************************************** |
|
||||||
********************************************************************** |
|
||||||
* P. Sadik Oct 30, 2003 |
|
||||||
* |
|
||||||
* Added reset_cons_port |
|
||||||
********************************************************************** |
|
||||||
|
|
||||||
P.Christeas, 2005-2006 |
|
||||||
Port to 2.6, add 2.6 cmdline parsing |
|
||||||
|
|
||||||
*/ |
|
||||||
|
|
||||||
#include <linux/autoconf.h> |
|
||||||
#include <linux/init.h> |
|
||||||
#include <linux/mm.h> |
|
||||||
#include <linux/module.h> |
|
||||||
#include <linux/string.h> |
|
||||||
#include <linux/console.h> |
|
||||||
#include <asm/bootinfo.h> |
|
||||||
#include <linux/bootmem.h> |
|
||||||
#include <linux/ioport.h> |
|
||||||
#include <linux/blkdev.h> |
|
||||||
#include <asm/rc32434/ddr.h> |
|
||||||
|
|
||||||
#define PROM_ENTRY(x) (0xbfc00000+((x)*8)) |
|
||||||
extern void __init setup_serial_port(void); |
|
||||||
|
|
||||||
unsigned int idt_cpu_freq = 132000000; |
|
||||||
EXPORT_SYMBOL(idt_cpu_freq); |
|
||||||
unsigned int board_type = 500; |
|
||||||
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); |
|
||||||
|
|
||||||
/* what to append to cmdline when button is [not] pressed */ |
|
||||||
#define GPIO_INIT_NOBUTTON "" |
|
||||||
#define GPIO_INIT_BUTTON " 2" |
|
||||||
|
|
||||||
#ifdef CONFIG_MIKROTIK_RB500 |
|
||||||
unsigned soft_reboot = 0; |
|
||||||
EXPORT_SYMBOL(soft_reboot); |
|
||||||
#endif |
|
||||||
|
|
||||||
#define SR_NMI 0x00180000 /* NMI */ |
|
||||||
#define SERIAL_SPEED_ENTRY 0x00000001 |
|
||||||
|
|
||||||
#ifdef CONFIG_REMOTE_DEBUG |
|
||||||
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=" |
|
||||||
#define MEM_TAG "mem=" |
|
||||||
#define BOARD_TAG "board=" |
|
||||||
#define IGNORE_CMDLINE_MEM 1 |
|
||||||
#define DEBUG_DDR |
|
||||||
|
|
||||||
void parse_soft_settings(unsigned *ptr, unsigned size); |
|
||||||
void parse_hard_settings(unsigned *ptr, unsigned size); |
|
||||||
|
|
||||||
void __init prom_setup_cmdline(void); |
|
||||||
|
|
||||||
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(); |
|
||||||
|
|
||||||
mips_machgroup = MACH_GROUP_MIKROTIK; |
|
||||||
soft_reboot = read_c0_status() & SR_NMI; |
|
||||||
pm_power_off = NULL; |
|
||||||
|
|
||||||
/*
|
|
||||||
* give all RAM to boot allocator, |
|
||||||
* except for the first 0x400 and the last 0x200 bytes |
|
||||||
*/ |
|
||||||
add_memory_region(ddr->ddrbase + 0x400, memsize - 0x600, BOOT_MEM_RAM); |
|
||||||
} |
|
||||||
|
|
||||||
void prom_free_prom_memory(void) |
|
||||||
{ |
|
||||||
/* FIXME: STUB */ |
|
||||||
} |
|
||||||
|
|
||||||
void __init prom_setup_cmdline(void){ |
|
||||||
char cmd_line[CL_SIZE]; |
|
||||||
char *cp; |
|
||||||
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); |
|
||||||
continue; |
|
||||||
} |
|
||||||
#ifdef IGNORE_CMDLINE_MEM |
|
||||||
/* parses out the "mem=xx" arg */ |
|
||||||
if (strncmp(prom_argv[i], MEM_TAG, sizeof(MEM_TAG) - 1) == 0) { |
|
||||||
continue; |
|
||||||
} |
|
||||||
#endif |
|
||||||
if (i>0) *(cp++) = ' '; |
|
||||||
if (strncmp(prom_argv[i], BOARD_TAG, sizeof(BOARD_TAG) - 1) == 0) { |
|
||||||
board_type = simple_strtoul(prom_argv[i] + sizeof(BOARD_TAG) - 1, 0, 10); |
|
||||||
} |
|
||||||
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); |
|
||||||
} |
|
||||||
strcpy(cp,prom_argv[i]); |
|
||||||
cp+=strlen(prom_argv[i]); |
|
||||||
} |
|
||||||
|
|
||||||
i=strlen(arcs_cmdline); |
|
||||||
if (i>0){ |
|
||||||
*(cp++) = ' '; |
|
||||||
strcpy(cp,arcs_cmdline); |
|
||||||
cp+=strlen(arcs_cmdline); |
|
||||||
} |
|
||||||
if (gpio_bootup_state&0x02) |
|
||||||
strcpy(cp,GPIO_INIT_NOBUTTON); |
|
||||||
else |
|
||||||
strcpy(cp,GPIO_INIT_BUTTON); |
|
||||||
cmd_line[CL_SIZE-1] = '\0'; |
|
||||||
|
|
||||||
strcpy(arcs_cmdline,cmd_line); |
|
||||||
} |
|
||||||
|
|
Loading…
Reference in new issue