2 * (C) Copyright 2000-2005
3 * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
5 * (C) Copyright 2005-2007
6 * Beijing UD Technology Co., Ltd., taihusupport@amcc.com
8 * See file CREDITS for list of people who contributed to this
11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License as
13 * published by the Free Software Foundation; either version 2 of
14 * the License, or (at your option) any later version.
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
28 #include <asm/processor.h>
33 extern int lcd_init(void);
38 int board_early_init_f(void)
42 mtdcr(uicsr, 0xFFFFFFFF); /* clear all ints */
43 mtdcr(uicer, 0x00000000); /* disable all ints */
44 mtdcr(uiccr, 0x00000000);
45 mtdcr(uicpr, 0xFFFF7F00); /* set int polarities */
46 mtdcr(uictr, 0x00000000); /* set int trigger levels */
47 mtdcr(uicsr, 0xFFFFFFFF); /* clear all ints */
48 mtdcr(uicvcr, 0x00000001); /* set vect base=0,INT0 highest priority */
50 mtebc(pb3ap, CFG_EBC_PB3AP); /* memory bank 3 (CPLD_LCM) initialization */
51 mtebc(pb3cr, CFG_EBC_PB3CR);
57 * Check Board Identity:
61 char *s = getenv("serial#");
63 puts("Board: Taihu - AMCC PPC405EP Evaluation Board");
74 /*************************************************************************
77 ************************************************************************/
78 long int initdram(int board)
80 return CFG_SDRAM_SIZE_PER_BANK * CFG_SDRAM_BANKS; /* 128Mbytes */
83 static int do_sw_stat(cmd_tbl_t* cmd_tp, int flags, int argc, char *argv[])
88 stat = in_8((u8 *) CPLD_REG0_ADDR);
89 printf("SW2 status: ");
90 for (i=0; i<4; i++) /* 4-position */
91 printf("%d:%s ", i, stat & (0x08 >> i)?"on":"off");
97 sw2_stat, 1, 1, do_sw_stat,
98 "sw2_stat - show status of switch 2\n",
102 static int do_led_ctl(cmd_tbl_t* cmd_tp, int flags, int argc, char *argv[])
107 printf("%s", cmd_tp->usage);
111 led_no = simple_strtoul(argv[1], NULL, 16);
112 if (led_no != 1 && led_no != 2) {
113 printf("%s", cmd_tp->usage);
117 if (strcmp(argv[2],"off") == 0x0) {
119 gpio_write_bit(30, 1);
121 gpio_write_bit(31, 1);
122 } else if (strcmp(argv[2],"on") == 0x0) {
124 gpio_write_bit(30, 0);
126 gpio_write_bit(31, 0);
128 printf("%s", cmd_tp->usage);
136 led_ctl, 3, 1, do_led_ctl,
137 "led_ctl - make led 1 or 2 on or off\n",
138 "<led_no> <on/off> - make led <led_no> on/off,\n"
139 "\tled_no is 1 or 2\t"
142 #define SPI_CS_GPIO0 0
143 #define SPI_SCLK_GPIO14 14
144 #define SPI_DIN_GPIO15 15
145 #define SPI_DOUT_GPIO16 16
147 void spi_scl(int bit)
149 gpio_write_bit(SPI_SCLK_GPIO14, bit);
152 void spi_sda(int bit)
154 gpio_write_bit(SPI_DOUT_GPIO16, bit);
157 unsigned char spi_read(void)
159 return (unsigned char)gpio_read_out_bit(SPI_DIN_GPIO15);
162 void taihu_spi_chipsel(int cs)
164 gpio_write_bit(SPI_CS_GPIO0, cs);
167 spi_chipsel_type spi_chipsel[]= {
171 int spi_chipsel_cnt = sizeof(spi_chipsel) / sizeof(spi_chipsel[0]);
174 static unsigned char int_lines[32] = {
175 29, 30, 27, 28, 29, 30, 25, 27,
176 29, 30, 27, 28, 29, 30, 27, 28,
177 29, 30, 27, 28, 29, 30, 27, 28,
178 29, 30, 27, 28, 29, 30, 27, 28};
180 static void taihu_pci_fixup_irq(struct pci_controller *hose, pci_dev_t dev)
182 unsigned char int_line = int_lines[PCI_DEV(dev) & 31];
184 pci_hose_write_config_byte(hose, dev, PCI_INTERRUPT_LINE, int_line);
187 int pci_pre_init(struct pci_controller *hose)
189 hose->fixup_irq = taihu_pci_fixup_irq;
192 #endif /* CONFIG_PCI */
197 unsigned long *mem = (unsigned long *)0;
198 const unsigned long kend = (1024 / sizeof(unsigned long));
201 unsigned long total_kbytes = CFG_SDRAM_SIZE_PER_BANK * CFG_SDRAM_BANKS / 1024;
204 mtmsr(msr & ~(MSR_EE));
206 for (k = 0; k < total_kbytes ;
207 ++k, mem += (1024 / sizeof(unsigned long))) {
209 printf("%3d MB\r", k / 1024);
211 memset(mem, 0xaaaaaaaa, 1024);
212 for (n = 0; n < kend; ++n) {
213 if (mem[n] != 0xaaaaaaaa) {
214 printf("SDRAM test fails at: %08x\n",
220 memset(mem, 0x55555555, 1024);
221 for (n = 0; n < kend; ++n) {
222 if (mem[n] != 0x55555555) {
223 printf("SDRAM test fails at: %08x\n",
229 printf("SDRAM test passes\n");
234 #endif /* CFG_DRAM_TEST */