2 * linux/arch/arm/kernel/arch.c
4 * Architecture specifics
7 #include <linux/init.h>
10 #include <asm/setup.h>
11 #include <asm/system.h>
15 extern unsigned int system_rev
;
16 extern unsigned int system_serial_low
;
17 extern unsigned int system_serial_high
;
19 unsigned int vram_size
;
20 #ifdef CONFIG_ARCH_ACORN
21 unsigned int memc_ctrl_reg
;
22 unsigned int number_mfm_drives
;
26 * Architecture specific fixups. This is where any
27 * parameters in the params struct are fixed up, or
28 * any additional architecture specific information
29 * is pulled from the params struct.
32 fixup_acorn(struct machine_desc
*desc
, struct param_struct
*params
,
33 char **cmdline
, struct meminfo
*mi
)
35 #ifdef CONFIG_ARCH_ACORN
38 if (machine_is_riscpc()) {
40 * RiscPC can't handle half-word loads and stores
42 elf_hwcap
&= ~HWCAP_HALF
;
44 switch (params
->u1
.s
.pages_in_vram
) {
46 vram_size
+= PAGE_SIZE
* 256;
48 vram_size
+= PAGE_SIZE
* 256;
54 desc
->video_start
= 0x02000000;
55 desc
->video_end
= 0x02000000 + vram_size
;
58 for (i
= 0; i
< 4; i
++) {
59 mi
->bank
[i
].start
= PHYS_OFFSET
+ (i
<< 26);
61 params
->u1
.s
.pages_in_bank
[i
] *
62 params
->u1
.s
.page_size
;
66 memc_ctrl_reg
= params
->u1
.s
.memc_control_reg
;
67 number_mfm_drives
= (params
->u1
.s
.adfsdrives
>> 3) & 3;
72 fixup_ebsa285(struct machine_desc
*desc
, struct param_struct
*params
,
73 char **cmdline
, struct meminfo
*mi
)
75 ORIG_X
= params
->u1
.s
.video_x
;
76 ORIG_Y
= params
->u1
.s
.video_y
;
77 ORIG_VIDEO_COLS
= params
->u1
.s
.video_num_cols
;
78 ORIG_VIDEO_LINES
= params
->u1
.s
.video_num_rows
;
82 * Older NeTTroms either do not provide a parameters
83 * page, or they don't supply correct information in
87 fixup_netwinder(struct machine_desc
*desc
, struct param_struct
*params
,
88 char **cmdline
, struct meminfo
*mi
)
90 if (params
->u1
.s
.nr_pages
!= 0x2000 &&
91 params
->u1
.s
.nr_pages
!= 0x4000) {
92 printk(KERN_WARNING
"Warning: bad NeTTrom parameters "
93 "detected, using defaults\n");
95 params
->u1
.s
.nr_pages
= 0x2000; /* 32MB */
96 params
->u1
.s
.ramdisk_size
= 0;
97 params
->u1
.s
.flags
= FLAG_READONLY
;
98 params
->u1
.s
.initrd_start
= 0;
99 params
->u1
.s
.initrd_size
= 0;
100 params
->u1
.s
.rd_start
= 0;
105 * CATS uses soft-reboot by default, since
106 * hard reboots fail on early boards.
109 fixup_cats(struct machine_desc
*desc
, struct param_struct
*params
,
110 char **cmdline
, struct meminfo
*mi
)
112 ORIG_VIDEO_LINES
= 25;
113 ORIG_VIDEO_POINTS
= 16;
118 fixup_coebsa285(struct machine_desc
*desc
, struct param_struct
*params
,
119 char **cmdline
, struct meminfo
*mi
)
122 extern unsigned long boot_memory_end
;
123 extern char boot_command_line
[];
126 mi
->bank
[0].start
= PHYS_OFFSET
;
127 mi
->bank
[0].size
= boot_memory_end
;
129 *cmdline
= boot_command_line
;
134 fixup_sa1100(struct machine_desc
*desc
, struct param_struct
*params
,
135 char **cmdline
, struct meminfo
*mi
)
137 #ifdef CONFIG_ARCH_SA1100
139 extern struct mem_desc
{
140 unsigned long phys_start
;
141 unsigned long length
;
143 extern unsigned int mem_desc_size
;
145 for( i
= 0; i
< mem_desc_size
; i
++ ) {
146 if( i
>= NR_BANKS
) {
148 ": mem_desc too large for meminfo structure\n");
151 mi
->bank
[i
].start
= mem_desc
[i
].phys_start
;
152 mi
->bank
[i
].size
= mem_desc
[i
].length
;
156 #if defined(CONFIG_SA1100_BRUTUS)
157 ROOT_DEV
= MKDEV(RAMDISK_MAJOR
,0);
158 setup_ramdisk( 1, 0, 0, 8192 );
159 setup_initrd( __phys_to_virt(0xd8000000), 0x00400000 );
160 #elif defined(CONFIG_SA1100_EMPEG)
161 ROOT_DEV
= MKDEV( 3, 1 ); /* /dev/hda1 */
162 setup_ramdisk( 1, 0, 0, 4096 );
163 setup_initrd( 0xd0000000+((1024-320)*1024), (320*1024) );
164 #elif defined(CONFIG_SA1100_TIFON)
165 ROOT_DEV
= MKDEV(UNNAMED_MAJOR
, 0);
166 setup_ramdisk(1, 0, 0, 4096);
167 setup_initrd( 0xd0000000 + 0x1100004, 0x140000 );
168 #elif defined(CONFIG_SA1100_VICTOR)
169 ROOT_DEV
= MKDEV( 60, 2 );
171 /* Get command line parameters passed from the loader (if any) */
172 if( *((char*)0xc0000000) )
173 strcpy( default_command_line
, ((char *)0xc0000000) );
175 /* power off if any problem */
176 strcat( default_command_line
, " panic=1" );
177 #elif defined(CONFIG_SA1100_LART)
178 ROOT_DEV
= MKDEV(RAMDISK_MAJOR
,0);
179 setup_ramdisk(1, 0, 0, 8192);
180 setup_initrd(0xc0400000, 0x00400000);
186 #define NO_VIDEO 0, 0
189 * This is the list of all architectures supported by
190 * this kernel. This should be integrated with the list
193 static struct machine_desc machine_desc
[] __attribute__ ((__section__ (".arch.info"))) = {
203 "Acorn-RiscPC", /* RMK */
217 "FTV/PCI", /* Philip Blundell */
226 0x000a0000, 0x000bffff,
231 "Rebel-NetWinder", /* RMK */
233 0x000a0000, 0x000bffff,
238 "Chalice-CATS", /* Philip Blundell */
240 0x000a0000, 0x000bffff,
245 "unknown-TBOX", /* Philip Blundell */
252 "co-EBSA285", /* Mark van Doesburg */
259 "CL-PS7110", /* Werner Almesberger */
265 MACH_TYPE_ARCHIMEDES
,
266 "Acorn-Archimedes",/* RMK/DAG */
273 "Acorn-A5000", /* RMK/PB */
280 "Etoile", /* Alex de Vries */
287 "LaCie_NAS", /* Benjamin Herrenschmidt */
294 "CL-PS7500", /* Philip Blundell */
301 "Shark", /* Alexander Schulz */
303 0x06000000, 0x06000000+0x001fffff,
308 "SA1100-based", /* Nicolas Pitre */
314 MACH_TYPE_PERSONAL_SERVER
,
315 "Compaq Personal Server",