8eb12c78bf51812708fd4424ba248f46e413e5d0
1 #include <linux/init.h>
2 #include <linux/module.h>
3 #include <linux/bootmem.h>
4 #include <linux/etherdevice.h>
6 #include <asm/bootinfo.h>
10 #include <ifxmips_prom.h>
12 /* for voice cpu (MIPS24K) */
13 unsigned int *prom_cp1_base
;
14 unsigned int prom_cp1_size
;
16 /* for Multithreading (APRP) on MIPS34K */
17 unsigned long physical_memsize
;
20 prom_free_prom_memory(void)
25 prom_get_cp1_base(void)
29 EXPORT_SYMBOL(prom_get_cp1_base
);
32 prom_get_cp1_size(void)
34 /* return size im MB */
35 return prom_cp1_size
>>20;
37 EXPORT_SYMBOL(prom_get_cp1_size
);
39 extern unsigned char ifxmips_ethaddr
[6];
43 ifxmips_set_ethaddr(char *str
)
46 (((x >= '0' && x <= '9') || (x >= 'a' && x <= 'f') \
47 || (x >= 'A' && x <= 'F')) ? (1) : (0))
49 str
= strchr(str
, '=');
53 if (strlen(str
) != 17)
55 for (i
= 0; i
< 6; i
++) {
56 if (!IS_HEX(str
[3 * i
]) || !IS_HEX(str
[(3 * i
) + 1]))
58 if ((i
!= 5) && (str
[(3 * i
) + 2] != ':'))
60 ifxmips_ethaddr
[i
] = simple_strtoul(&str
[3 * i
], NULL
, 16);
62 if (is_valid_ether_addr(ifxmips_ethaddr
))
67 __setup("ethaddr", ifxmips_set_ethaddr
);
69 static void __init
prom_detect_machtype(void)
71 mips_machtype
= IFXMIPS_MACH_EASY50712
;
74 static void __init
prom_init_cmdline(void)
77 char **argv
= (char **) fw_arg1
;
78 char **envp
= (char **) fw_arg2
;
80 int memsize
= 16; /* assume 16M as default */
85 argv
= (char **)KSEG1ADDR((unsigned long)argv
);
86 arcs_cmdline
[0] = '\0';
87 for (i
= 1; i
< argc
; i
++)
89 char *a
= (char *)KSEG1ADDR(argv
[i
]);
92 /* for voice cpu on Twinpass/Danube */
93 if (cpu_data
[0].cputype
== CPU_24K
)
94 if (!strncmp(a
, "cp1_size=", 9))
96 prom_cp1_size
= memparse(a
+ 9, &a
);
99 if (strlen(arcs_cmdline
) + strlen(a
+ 1) >= sizeof(arcs_cmdline
))
101 early_printf("cmdline overflow, skipping: %s\n", a
);
104 strcat(arcs_cmdline
, a
);
105 strcat(arcs_cmdline
, " ");
108 strcpy(&(arcs_cmdline
[0]),
109 "console=ttyS0,115200 rootfstype=squashfs,jffs2");
111 envp
= (char **)KSEG1ADDR((unsigned long)envp
);
114 char *e
= (char *)KSEG1ADDR(*envp
);
116 if (!strncmp(e
, "memsize=", 8))
119 memsize
= simple_strtoul(e
, NULL
, 10);
123 memsize
*= 1024 * 1024;
125 /* only on Twinpass/Danube a second CPU is used for Voice */
126 if ((cpu_data
[0].cputype
== CPU_24K
) && (prom_cp1_size
))
128 memsize
-= prom_cp1_size
;
129 prom_cp1_base
= (unsigned int *)KSEG1ADDR(memsize
);
131 early_printf("Using %dMB Ram and reserving %dMB for cp1\n",
132 memsize
>>20, prom_cp1_size
>>20);
135 add_memory_region(0x00000000, memsize
, BOOT_MEM_RAM
);
141 prom_detect_machtype();
This page took 0.04586 seconds and 3 git commands to generate.