2 * Catch-all for Orion-specific code that doesn't fit easily elsewhere.
5 #include <linux/config.h>
6 #include <linux/errno.h>
7 #include <linux/hdreg.h>
8 #include <linux/init.h>
9 #include <linux/ioport.h>
10 #include <linux/sched.h>
11 #include <linux/kernel.h>
13 #include <linux/stddef.h>
14 #include <linux/string.h>
15 #include <linux/unistd.h>
16 #include <linux/ptrace.h>
17 #include <linux/malloc.h>
18 #include <linux/user.h>
19 #include <linux/utsname.h>
20 #include <linux/a.out.h>
21 #include <linux/tty.h>
22 #include <linux/interrupt.h>
23 #ifdef CONFIG_BLK_DEV_RAM
24 #include <linux/blk.h>
26 #include <linux/ide.h>
28 #include <linux/timex.h>
32 #include <asm/bootinfo.h>
33 #include <asm/cachectl.h>
35 #include <asm/stackframe.h>
36 #include <asm/system.h>
38 #include <linux/bootmem.h>
39 #include <asm/addrspace.h>
40 #include <asm/mc146818rtc.h>
41 #include <asm/orion.h>
43 char arcs_cmdline
[CL_SIZE
] = { "console=ttyS0,19200" };
46 static unsigned char orion_rtc_read_data(unsigned long addr
)
51 static void orion_rtc_write_data(unsigned char data
, unsigned long addr
)
55 static int orion_rtc_bcd_mode(void)
60 struct rtc_ops orion_rtc_ops
= {
62 &orion_rtc_write_data
,
66 extern void InitCIB(void);
67 extern void InitQpic(void);
68 extern void InitCupid(void);
70 void __init
orion_setup(void)
72 extern void (*board_time_init
)(struct irqaction
*irq
);
73 void orion_time_init(struct irqaction
*);
75 rtc_ops
= &orion_rtc_ops
;
76 board_time_init
= orion_time_init
;
77 mips_io_port_base
= GT64120_BASE
;
84 #define PFN_UP(x) (((x) + PAGE_SIZE-1) >> PAGE_SHIFT)
85 #define PFN_ALIGN(x) (((unsigned long)(x) + (PAGE_SIZE - 1)) & PAGE_MASK)
87 unsigned long mem_size
;
88 int __init
prom_init(int a
, char **b
, char **c
, int *d
)
90 unsigned long free_start
, free_end
, start_pfn
, bootmap_size
;
91 extern unsigned long orion_initrd_start
[], orion_initrd_size
;
93 mips_machgroup
= MACH_GROUP_ORION
;
94 /* 64 MB non-upgradable */
97 free_start
= PHYSADDR(PFN_ALIGN(&_end
));
99 start_pfn
= PFN_UP((unsigned long)&_end
);
101 /* Register all the contiguous memory with the bootmem allocator
102 and free it. Be careful about the bootmem freemap. */
103 bootmap_size
= init_bootmem(start_pfn
, mem_size
>> PAGE_SHIFT
);
105 /* Free the entire available memory after the _end symbol. */
106 free_start
+= bootmap_size
;
107 free_bootmem(free_start
, free_end
-free_start
);
109 initrd_start
= (ulong
)orion_initrd_start
;
110 initrd_end
= (ulong
)orion_initrd_start
+ (ulong
)orion_initrd_size
;
111 initrd_below_start_ok
= 1;
116 void prom_free_prom_memory (void)
120 int page_is_ram(unsigned long pagenr
)
122 if ( pagenr
< (mem_size
>> PAGE_SHIFT
) )