aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips/alchemy/devboards/pb1200/board_setup.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2010-02-28 22:23:06 -0500
committerDavid S. Miller <davem@davemloft.net>2010-02-28 22:23:06 -0500
commit47871889c601d8199c51a4086f77eebd77c29b0b (patch)
tree40cdcac3bff0ee40cc33dcca61d0577cdf965f77 /arch/mips/alchemy/devboards/pb1200/board_setup.c
parentc16cc0b464b8876cfd57ce1c1dbcb6f9a6a0bce3 (diff)
parent30ff056c42c665b9ea535d8515890857ae382540 (diff)
Merge branch 'master' of /home/davem/src/GIT/linux-2.6/
Conflicts: drivers/firmware/iscsi_ibft.c
Diffstat (limited to 'arch/mips/alchemy/devboards/pb1200/board_setup.c')
-rw-r--r--arch/mips/alchemy/devboards/pb1200/board_setup.c96
1 files changed, 56 insertions, 40 deletions
diff --git a/arch/mips/alchemy/devboards/pb1200/board_setup.c b/arch/mips/alchemy/devboards/pb1200/board_setup.c
index 94e6b7e7753d..3184063f8042 100644
--- a/arch/mips/alchemy/devboards/pb1200/board_setup.c
+++ b/arch/mips/alchemy/devboards/pb1200/board_setup.c
@@ -25,11 +25,23 @@
25 */ 25 */
26 26
27#include <linux/init.h> 27#include <linux/init.h>
28#include <linux/interrupt.h>
28#include <linux/sched.h> 29#include <linux/sched.h>
29 30
30#include <prom.h> 31#include <asm/mach-au1x00/au1000.h>
31#include <au1xxx.h> 32#include <asm/mach-db1x00/bcsr.h>
33
34#ifdef CONFIG_MIPS_PB1200
35#include <asm/mach-pb1x00/pb1200.h>
36#endif
37
38#ifdef CONFIG_MIPS_DB1200
39#include <asm/mach-db1x00/db1200.h>
40#define PB1200_INT_BEGIN DB1200_INT_BEGIN
41#define PB1200_INT_END DB1200_INT_END
42#endif
32 43
44#include <prom.h>
33 45
34const char *get_system_type(void) 46const char *get_system_type(void)
35{ 47{
@@ -38,25 +50,15 @@ const char *get_system_type(void)
38 50
39void board_reset(void) 51void board_reset(void)
40{ 52{
41 bcsr->resets = 0; 53 bcsr_write(BCSR_RESETS, 0);
42 bcsr->system = 0; 54 bcsr_write(BCSR_SYSTEM, 0);
43} 55}
44 56
45void __init board_setup(void) 57void __init board_setup(void)
46{ 58{
47 char *argptr; 59 printk(KERN_INFO "AMD Alchemy Pb1200 Board\n");
48 60 bcsr_init(PB1200_BCSR_PHYS_ADDR,
49 argptr = prom_getcmdline(); 61 PB1200_BCSR_PHYS_ADDR + PB1200_BCSR_HEXLED_OFS);
50#ifdef CONFIG_SERIAL_8250_CONSOLE
51 argptr = strstr(argptr, "console=");
52 if (argptr == NULL) {
53 argptr = prom_getcmdline();
54 strcat(argptr, " console=ttyS0,115200");
55 }
56#endif
57#ifdef CONFIG_FB_AU1200
58 strcat(argptr, " video=au1200fb:panel:bs");
59#endif
60 62
61#if 0 63#if 0
62 { 64 {
@@ -82,7 +84,7 @@ void __init board_setup(void)
82 u32 pin_func; 84 u32 pin_func;
83 85
84 /* Select SMBus in CPLD */ 86 /* Select SMBus in CPLD */
85 bcsr->resets &= ~BCSR_RESETS_PCS0MUX; 87 bcsr_mod(BCSR_RESETS, BCSR_RESETS_PSC0MUX, 0);
86 88
87 pin_func = au_readl(SYS_PINFUNC); 89 pin_func = au_readl(SYS_PINFUNC);
88 au_sync(); 90 au_sync();
@@ -116,38 +118,54 @@ void __init board_setup(void)
116 118
117 /* 119 /*
118 * The Pb1200 development board uses external MUX for PSC0 to 120 * The Pb1200 development board uses external MUX for PSC0 to
119 * support SMB/SPI. bcsr->resets bit 12: 0=SMB 1=SPI 121 * support SMB/SPI. bcsr_resets bit 12: 0=SMB 1=SPI
120 */ 122 */
121#ifdef CONFIG_I2C_AU1550 123#ifdef CONFIG_I2C_AU1550
122 bcsr->resets &= ~BCSR_RESETS_PCS0MUX; 124 bcsr_mod(BCSR_RESETS, BCSR_RESETS_PSC0MUX, 0);
123#endif 125#endif
124 au_sync(); 126 au_sync();
127}
125 128
126#ifdef CONFIG_MIPS_PB1200 129static int __init pb1200_init_irq(void)
127 printk(KERN_INFO "AMD Alchemy Pb1200 Board\n"); 130{
128#endif 131 /* We have a problem with CPLD rev 3. */
129#ifdef CONFIG_MIPS_DB1200 132 if (BCSR_WHOAMI_CPLD(bcsr_read(BCSR_WHOAMI)) <= 3) {
130 printk(KERN_INFO "AMD Alchemy Db1200 Board\n"); 133 printk(KERN_ERR "WARNING!!!\n");
131#endif 134 printk(KERN_ERR "WARNING!!!\n");
135 printk(KERN_ERR "WARNING!!!\n");
136 printk(KERN_ERR "WARNING!!!\n");
137 printk(KERN_ERR "WARNING!!!\n");
138 printk(KERN_ERR "WARNING!!!\n");
139 printk(KERN_ERR "Pb1200 must be at CPLD rev 4. Please have Pb1200\n");
140 printk(KERN_ERR "updated to latest revision. This software will\n");
141 printk(KERN_ERR "not work on anything less than CPLD rev 4.\n");
142 printk(KERN_ERR "WARNING!!!\n");
143 printk(KERN_ERR "WARNING!!!\n");
144 printk(KERN_ERR "WARNING!!!\n");
145 printk(KERN_ERR "WARNING!!!\n");
146 printk(KERN_ERR "WARNING!!!\n");
147 printk(KERN_ERR "WARNING!!!\n");
148 panic("Game over. Your score is 0.");
149 }
150
151 set_irq_type(AU1200_GPIO7_INT, IRQF_TRIGGER_LOW);
152 bcsr_init_irq(PB1200_INT_BEGIN, PB1200_INT_END, AU1200_GPIO7_INT);
153
154 return 0;
132} 155}
156arch_initcall(pb1200_init_irq);
157
133 158
134int board_au1200fb_panel(void) 159int board_au1200fb_panel(void)
135{ 160{
136 BCSR *bcsr = (BCSR *)BCSR_KSEG1_ADDR; 161 return (bcsr_read(BCSR_SWITCHES) >> 8) & 0x0f;
137 int p;
138
139 p = bcsr->switches;
140 p >>= 8;
141 p &= 0x0F;
142 return p;
143} 162}
144 163
145int board_au1200fb_panel_init(void) 164int board_au1200fb_panel_init(void)
146{ 165{
147 /* Apply power */ 166 /* Apply power */
148 BCSR *bcsr = (BCSR *)BCSR_KSEG1_ADDR; 167 bcsr_mod(BCSR_BOARD, 0, BCSR_BOARD_LCDVEE | BCSR_BOARD_LCDVDD |
149 168 BCSR_BOARD_LCDBL);
150 bcsr->board |= BCSR_BOARD_LCDVEE | BCSR_BOARD_LCDVDD | BCSR_BOARD_LCDBL;
151 /* printk(KERN_DEBUG "board_au1200fb_panel_init()\n"); */ 169 /* printk(KERN_DEBUG "board_au1200fb_panel_init()\n"); */
152 return 0; 170 return 0;
153} 171}
@@ -155,10 +173,8 @@ int board_au1200fb_panel_init(void)
155int board_au1200fb_panel_shutdown(void) 173int board_au1200fb_panel_shutdown(void)
156{ 174{
157 /* Remove power */ 175 /* Remove power */
158 BCSR *bcsr = (BCSR *)BCSR_KSEG1_ADDR; 176 bcsr_mod(BCSR_BOARD, BCSR_BOARD_LCDVEE | BCSR_BOARD_LCDVDD |
159 177 BCSR_BOARD_LCDBL, 0);
160 bcsr->board &= ~(BCSR_BOARD_LCDVEE | BCSR_BOARD_LCDVDD |
161 BCSR_BOARD_LCDBL);
162 /* printk(KERN_DEBUG "board_au1200fb_panel_shutdown()\n"); */ 178 /* printk(KERN_DEBUG "board_au1200fb_panel_shutdown()\n"); */
163 return 0; 179 return 0;
164} 180}