98de8fb5cc7f680900473c6b7591b289d4c94c0f
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>
9 #include <ifxmips_prom.h>
11 /* for voice cpu (MIPS24K) */
12 unsigned int *prom_cp1_base
;
13 unsigned int prom_cp1_size
;
15 /* for Multithreading (APRP) on MIPS34K */
16 unsigned long physical_memsize
;
19 prom_free_prom_memory(void)
24 prom_get_cp1_base(void)
28 EXPORT_SYMBOL(prom_get_cp1_base
);
31 prom_get_cp1_size(void)
33 /* return size im MB */
34 return prom_cp1_size
>>20;
36 EXPORT_SYMBOL(prom_get_cp1_size
);
38 extern unsigned char ifxmips_ethaddr
[6];
42 ifxmips_set_ethaddr(char *str
)
45 (((x >= '0' && x <= '9') || (x >= 'a' && x <= 'f') \
46 || (x >= 'A' && x <= 'F')) ? (1) : (0))
48 str
= strchr(str
, '=');
52 if (strlen(str
) != 17)
54 for (i
= 0; i
< 6; i
++) {
55 if (!IS_HEX(str
[3 * i
]) || !IS_HEX(str
[(3 * i
) + 1]))
57 if ((i
!= 5) && (str
[(3 * i
) + 2] != ':'))
59 ifxmips_ethaddr
[i
] = simple_strtoul(&str
[3 * i
], NULL
, 16);
61 if (is_valid_ether_addr(ifxmips_ethaddr
))
66 __setup("ethaddr", ifxmips_set_ethaddr
);
72 char **argv
= (char **) fw_arg1
;
73 char **envp
= (char **) fw_arg2
;
75 int memsize
= 16; /* assume 16M as default */
80 argv
= (char **)KSEG1ADDR((unsigned long)argv
);
81 arcs_cmdline
[0] = '\0';
82 for (i
= 1; i
< argc
; i
++)
84 char *a
= (char *)KSEG1ADDR(argv
[i
]);
87 /* for voice cpu on Twinpass/Danube */
88 if (cpu_data
[0].cputype
== CPU_24K
)
89 if (!strncmp(a
, "cp1_size=", 9))
91 prom_cp1_size
= memparse(a
+ 9, &a
);
94 if (strlen(arcs_cmdline
) + strlen(a
+ 1) >= sizeof(arcs_cmdline
))
96 early_printf("cmdline overflow, skipping: %s\n", a
);
99 strcat(arcs_cmdline
, a
);
100 strcat(arcs_cmdline
, " ");
103 strcpy(&(arcs_cmdline
[0]),
104 "console=ttyS0,115200 rootfstype=squashfs,jffs2");
106 envp
= (char **)KSEG1ADDR((unsigned long)envp
);
109 char *e
= (char *)KSEG1ADDR(*envp
);
111 if (!strncmp(e
, "memsize=", 8))
114 memsize
= simple_strtoul(e
, NULL
, 10);
118 memsize
*= 1024 * 1024;
120 /* only on Twinpass/Danube a second CPU is used for Voice */
121 if ((cpu_data
[0].cputype
== CPU_24K
) && (prom_cp1_size
))
123 memsize
-= prom_cp1_size
;
124 prom_cp1_base
= (unsigned int *)KSEG1ADDR(memsize
);
126 early_printf("Using %dMB Ram and reserving %dMB for cp1\n",
127 memsize
>>20, prom_cp1_size
>>20);
130 add_memory_region(0x00000000, memsize
, BOOT_MEM_RAM
);
This page took 0.051951 seconds and 3 git commands to generate.