PageRenderTime 20ms CodeModel.GetById 12ms app.highlight 6ms RepoModel.GetById 1ms app.codeStats 0ms

/arch/ppc/platforms/gemini_prom.S

https://bitbucket.org/evzijst/gittest
Assembly | 93 lines | 88 code | 5 blank | 0 comment | 0 complexity | cabd9e8c35c6d2f8a28ac00268976c0e MD5 | raw file
 1/*
 2 *  arch/ppc/platforms/gemini_prom.S
 3 *
 4 *  Not really prom support code (yet), but sort of anti-prom code.  The current
 5 *  bootloader does a number of things it shouldn't and doesn't do things that it
 6 *  should.  The stuff in here is mainly a hodge-podge collection of setup code
 7 *  to get the board up and running.
 8 *    ---Dan
 9 */
10
11#include <linux/config.h>
12#include <asm/reg.h>
13#include <asm/page.h>
14#include <platforms/gemini.h>
15#include <asm/ppc_asm.h>
16
17/*
18 *  On 750's the MMU is on when Linux is booted, so we need to clear out the
19 *  bootloader's BAT settings, make sure we're in supervisor state (gotcha!),
20 *  and turn off the MMU.
21 *
22 */
23
24_GLOBAL(gemini_prom_init)
25#ifdef CONFIG_SMP
26	/* Since the MMU's on, get stuff in rom space that we'll need */
27	lis	r4,GEMINI_CPUSTAT@h
28	ori	r4,r4,GEMINI_CPUSTAT@l
29	lbz	r5,0(r4)
30	andi.	r5,r5,3
31	mr	r24,r5		/* cpu # used later on */
32#endif
33	mfmsr	r4
34	li	r3,MSR_PR	/* ensure supervisor! */
35	ori	r3,r3,MSR_IR|MSR_DR
36	andc	r4,r4,r3
37	mtmsr	r4
38	isync
39#if 0
40	/* zero out the bats now that the MMU is off */
41prom_no_mmu:	
42	li	r3,0
43        mtspr   SPRN_IBAT0U,r3
44        mtspr   SPRN_IBAT0L,r3
45        mtspr   SPRN_IBAT1U,r3
46        mtspr   SPRN_IBAT1L,r3
47        mtspr   SPRN_IBAT2U,r3
48        mtspr   SPRN_IBAT2L,r3
49        mtspr   SPRN_IBAT3U,r3
50        mtspr   SPRN_IBAT3L,r3
51
52        mtspr   SPRN_DBAT0U,r3
53        mtspr   SPRN_DBAT0L,r3
54        mtspr   SPRN_DBAT1U,r3
55        mtspr   SPRN_DBAT1L,r3
56        mtspr   SPRN_DBAT2U,r3
57	mtspr   SPRN_DBAT2L,r3
58        mtspr   SPRN_DBAT3U,r3
59        mtspr   SPRN_DBAT3L,r3
60#endif
61
62	/* the bootloader (as far as I'm currently aware) doesn't mess with page
63	   tables, but since we're already here, might as well zap these, too */
64	li	r4,0
65	mtspr	SPRN_SDR1,r4
66
67	li	r4,16
68	mtctr	r4
69	li	r3,0
70	li	r4,0
713:	mtsrin	r3,r4
72	addi	r3,r3,1
73	bdnz	3b
74
75#ifdef CONFIG_SMP
76	/* The 750 book (and Mot/IBM support) says that this will "assist" snooping
77	   when in SMP.  Not sure yet whether this should stay or leave... */
78	mfspr	r4,SPRN_HID0
79	ori	r4,r4,HID0_ABE
80	mtspr	SPRN_HID0,r4
81	sync
82#endif /* CONFIG_SMP */
83	blr
84
85/*  apparently, SMon doesn't pay attention to HID0[SRST].  Disable the MMU and
86    branch to 0xfff00100 */
87_GLOBAL(_gemini_reboot)
88	lis	r5,GEMINI_BOOT_INIT@h
89	ori	r5,r5,GEMINI_BOOT_INIT@l
90	li	r6,MSR_IP
91	mtspr	SPRN_SRR0,r5
92	mtspr	SPRN_SRR1,r6
93	rfi