2 * (C) Copyright 2000-2004
3 * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
6 * Torsten Demke, FORCE Computers GmbH. torsten.demke@fci.com
8 * SPDX-License-Identifier: GPL-2.0+
13 #include <asm/processor.h>
18 #include <timestamp.h>
24 ulong busfreq
= get_bus_freq (0);
27 printf ("Board: eXalion MPC824x - CHRP (MAP B)\n");
28 printf ("Built: %s at %s\n", U_BOOT_DATE
, U_BOOT_TIME
);
29 printf ("Local Bus: %s MHz\n", strmhz (buf
, busfreq
));
36 printf ("checkflash\n");
41 phys_size_t
initdram (int board_type
)
44 volatile uchar
*base
= CONFIG_SYS_SDRAM_BASE
;
49 for (i
= 0, cnt
= (CONFIG_SYS_MAX_RAM_SIZE
/ sizeof (long)) >> 1; cnt
> 0;
51 addr
= (volatile ulong
*) base
+ cnt
;
56 addr
= (volatile ulong
*) base
;
65 for (cnt
= 1; cnt
<= CONFIG_SYS_MAX_RAM_SIZE
/ sizeof (long); cnt
<<= 1) {
66 addr
= (volatile ulong
*) base
+ cnt
;
70 ulong new_bank0_end
= cnt
* sizeof (long) - 1;
71 ulong mear1
= mpc824x_mpc107_getreg (MEAR1
);
72 ulong emear1
= mpc824x_mpc107_getreg (EMEAR1
);
74 mear1
= (mear1
& 0xFFFFFF00) |
75 ((new_bank0_end
& MICR_ADDR_MASK
) >>
77 emear1
= (emear1
& 0xFFFFFF00) |
78 ((new_bank0_end
& MICR_ADDR_MASK
) >>
80 mpc824x_mpc107_setreg (MEAR1
, mear1
);
81 mpc824x_mpc107_setreg (EMEAR1
, emear1
);
83 ret
= cnt
* sizeof (long);
88 ret
= CONFIG_SYS_MAX_RAM_SIZE
;
93 int misc_init_r (void)
100 bdf
= pci_find_device (PIIX4_VENDOR_ID
, PIIX4_ISA_DEV_ID
, 0);
102 puts ("Unable to find PIIX4 ISA bridge !\n");
106 /* set device for normal ISA instead EIO */
107 pci_read_config_dword (bdf
, PCI_CFG_PIIX4_GENCFG
, &val32
);
109 pci_write_config_dword (bdf
, PCI_CFG_PIIX4_GENCFG
, val32
);
110 printf ("PIIX4 ISA bridge (%d,%d,%d)\n", PCI_BUS (bdf
),
111 PCI_DEV (bdf
), PCI_FUNC (bdf
));
114 bdf
= pci_find_device (PIIX4_VENDOR_ID
, PIIX4_IDE_DEV_ID
, 0);
116 puts ("Unable to find PIIX4 IDE controller !\n");
120 /* Init BMIBA register */
121 /* pci_read_config_dword(bdf, PCI_CFG_PIIX4_BMIBA, &val32); */
122 /* val32 |= 0x1000; */
123 /* pci_write_config_dword(bdf, PCI_CFG_PIIX4_BMIBA, val32); */
125 /* Enable BUS master and IO access */
126 val32
= PCI_COMMAND_MASTER
| PCI_COMMAND_IO
;
127 pci_write_config_dword (bdf
, PCI_COMMAND
, val32
);
130 pci_read_config_byte (bdf
, PCI_LATENCY_TIMER
, &val8
);
132 pci_write_config_byte (bdf
, PCI_LATENCY_TIMER
, val8
);
134 /* Enable Primary ATA/IDE */
135 pci_read_config_dword (bdf
, PCI_CFG_PIIX4_IDETIM
, &val32
);
136 /* val32 = 0xa307a307; */
138 pci_write_config_dword (bdf
, PCI_CFG_PIIX4_IDETIM
, val32
);
141 printf ("PIIX4 IDE controller (%d,%d,%d)\n", PCI_BUS (bdf
),
142 PCI_DEV (bdf
), PCI_FUNC (bdf
));
144 /* Try to get FAT working... */
145 /* fat_register_read(ide_read); */
152 * Show/Init PCI devices on the specified bus number.
155 void pci_eXalion_fixup_irq (struct pci_controller
*hose
, pci_dev_t dev
)
159 switch (PCI_DEV (dev
)) {
172 #if defined (CONFIG_MPC8245)
187 pci_hose_write_config_byte (hose
, dev
, PCI_INTERRUPT_LINE
, line
);
192 * Initialize PCI Devices, report devices found.
194 #ifndef CONFIG_PCI_PNP
195 #if defined (CONFIG_MPC8240)
196 static struct pci_config_table pci_eXalion_config_table
[] = {
198 /* Intel 82559ER ethernet controller */
199 PCI_ANY_ID
, PCI_ANY_ID
, PCI_ANY_ID
, 0x00, 18, 0x00,
200 pci_cfgfunc_config_device
, {PCI_ENET0_IOADDR
,
203 PCI_COMMAND_MASTER
}},
205 /* Intel 82371AB PIIX4 PCI to ISA bridge */
206 PCI_ANY_ID
, PCI_ANY_ID
, PCI_ANY_ID
, 0x00, 20, 0x00,
207 pci_cfgfunc_config_device
, {0,
209 PCI_COMMAND_IO
| PCI_COMMAND_MASTER
}},
211 /* Intel 82371AB PIIX4 IDE controller */
212 PCI_ANY_ID
, PCI_ANY_ID
, PCI_ANY_ID
, 0x00, 20, 0x01,
213 pci_cfgfunc_config_device
, {0,
215 PCI_COMMAND_IO
| PCI_COMMAND_MASTER
}},
218 #elif defined (CONFIG_MPC8245)
219 static struct pci_config_table pci_eXalion_config_table
[] = {
221 /* Intel 82559ER ethernet controller */
222 PCI_ANY_ID
, PCI_ANY_ID
, PCI_ANY_ID
, 0x00, 17, 0x00,
223 pci_cfgfunc_config_device
, {PCI_ENET0_IOADDR
,
226 PCI_COMMAND_MASTER
}},
228 /* Intel 82559ER ethernet controller */
229 PCI_ANY_ID
, PCI_ANY_ID
, PCI_ANY_ID
, 0x00, 18, 0x00,
230 pci_cfgfunc_config_device
, {PCI_ENET1_IOADDR
,
233 PCI_COMMAND_MASTER
}},
235 /* Broadcom BCM5690 Gigabit switch */
236 PCI_ANY_ID
, PCI_ANY_ID
, PCI_ANY_ID
, 0x00, 20, 0x00,
237 pci_cfgfunc_config_device
, {PCI_ENET2_IOADDR
,
240 PCI_COMMAND_MASTER
}},
242 /* Broadcom BCM5690 Gigabit switch */
243 PCI_ANY_ID
, PCI_ANY_ID
, PCI_ANY_ID
, 0x00, 21, 0x00,
244 pci_cfgfunc_config_device
, {PCI_ENET3_IOADDR
,
247 PCI_COMMAND_MASTER
}},
249 /* Intel 82371AB PIIX4 PCI to ISA bridge */
250 PCI_ANY_ID
, PCI_ANY_ID
, PCI_ANY_ID
, 0x00, 22, 0x00,
251 pci_cfgfunc_config_device
, {0,
253 PCI_COMMAND_IO
| PCI_COMMAND_MASTER
}},
255 /* Intel 82371AB PIIX4 IDE controller */
256 PCI_ANY_ID
, PCI_ANY_ID
, PCI_ANY_ID
, 0x00, 22, 0x01,
257 pci_cfgfunc_config_device
, {0,
259 PCI_COMMAND_IO
| PCI_COMMAND_MASTER
}},
263 #error Specific type of MPC824x must be defined (i.e. CONFIG_MPC8240)
266 #endif /* #ifndef CONFIG_PCI_PNP */
268 struct pci_controller hose
= {
269 #ifndef CONFIG_PCI_PNP
270 config_table
:pci_eXalion_config_table
,
271 fixup_irq
:pci_eXalion_fixup_irq
,
275 void pci_init_board (void)
277 pci_mpc824x_init (&hose
);
280 int board_eth_init(bd_t
*bis
)
282 return pci_eth_init(bis
);