⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exalion.c

📁 Linux2.4.27在AT91RM9200下的U-BOOT代码。可以在Redhat9等版本下使用。适合ARM学习者使用。
💻 C
字号:
/* * (C) Copyright 2000-2004 * Wolfgang Denk, DENX Software Engineering, wd@denx.de. * * (C) Copyright 2002 * Torsten Demke, FORCE Computers GmbH. torsten.demke@fci.com * * See file CREDITS for list of people who contributed to this * project. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA */#include <common.h>#include <mpc824x.h>#include <asm/processor.h>#include <asm/io.h>#include <pci.h>#include <ide.h>#include "piix_pci.h"#include "eXalion.h"int checkboard (void){	ulong busfreq = get_bus_freq (0);	char buf[32];	printf ("Board: eXalion MPC824x - CHRP (MAP B)\n");	printf ("Built: %s at %s\n", __DATE__, __TIME__);	printf ("Local Bus:  %s MHz\n", strmhz (buf, busfreq));	return 0;}int checkflash (void){	printf ("checkflash\n");	flash_init ();	return (0);}long int initdram (int board_type){	int i, cnt;	volatile uchar *base = CFG_SDRAM_BASE;	volatile ulong *addr;	ulong save[32];	ulong val, ret = 0;	for (i = 0, cnt = (CFG_MAX_RAM_SIZE / sizeof (long)) >> 1; cnt > 0;	     cnt >>= 1) {		addr = (volatile ulong *) base + cnt;		save[i++] = *addr;		*addr = ~cnt;	}	addr = (volatile ulong *) base;	save[i] = *addr;	*addr = 0;	if (*addr != 0) {		*addr = save[i];		goto Done;	}	for (cnt = 1; cnt <= CFG_MAX_RAM_SIZE / sizeof (long); cnt <<= 1) {		addr = (volatile ulong *) base + cnt;		val = *addr;		*addr = save[--i];		if (val != ~cnt) {			ulong new_bank0_end = cnt * sizeof (long) - 1;			ulong mear1 = mpc824x_mpc107_getreg (MEAR1);			ulong emear1 = mpc824x_mpc107_getreg (EMEAR1);			mear1 = (mear1 & 0xFFFFFF00) |				((new_bank0_end & MICR_ADDR_MASK) >>				 MICR_ADDR_SHIFT);			emear1 = (emear1 & 0xFFFFFF00) |				((new_bank0_end & MICR_ADDR_MASK) >>				 MICR_EADDR_SHIFT);			mpc824x_mpc107_setreg (MEAR1, mear1);			mpc824x_mpc107_setreg (EMEAR1, emear1);			ret = cnt * sizeof (long);			goto Done;		}	}	ret = CFG_MAX_RAM_SIZE;      Done:	return ret;}int misc_init_r (void){	pci_dev_t bdf;	u32 val32;	u8 val8;	puts ("ISA:   ");	bdf = pci_find_device (PIIX4_VENDOR_ID, PIIX4_ISA_DEV_ID, 0);	if (bdf == -1) {		puts ("Unable to find PIIX4 ISA bridge !\n");		hang ();	}	/* set device for normal ISA instead EIO */	pci_read_config_dword (bdf, PCI_CFG_PIIX4_GENCFG, &val32);	val32 |= 0x00000001;	pci_write_config_dword (bdf, PCI_CFG_PIIX4_GENCFG, val32);	printf ("PIIX4 ISA bridge (%d,%d,%d)\n", PCI_BUS (bdf),		PCI_DEV (bdf), PCI_FUNC (bdf));	puts ("ISA:   ");	bdf = pci_find_device (PIIX4_VENDOR_ID, PIIX4_IDE_DEV_ID, 0);	if (bdf == -1) {		puts ("Unable to find PIIX4 IDE controller !\n");		hang ();	}	/* Init BMIBA register  */	/* pci_read_config_dword(bdf, PCI_CFG_PIIX4_BMIBA, &val32); */	/* val32 |= 0x1000; */	/* pci_write_config_dword(bdf, PCI_CFG_PIIX4_BMIBA, val32); */	/* Enable BUS master and IO access  */	val32 = PCI_COMMAND_MASTER | PCI_COMMAND_IO;	pci_write_config_dword (bdf, PCI_COMMAND, val32);	/* Set latency  */	pci_read_config_byte (bdf, PCI_LATENCY_TIMER, &val8);	val8 = 0x40;	pci_write_config_byte (bdf, PCI_LATENCY_TIMER, val8);	/* Enable Primary ATA/IDE  */	pci_read_config_dword (bdf, PCI_CFG_PIIX4_IDETIM, &val32);	/* val32 = 0xa307a307; */	val32 = 0x00008000;	pci_write_config_dword (bdf, PCI_CFG_PIIX4_IDETIM, val32);	printf ("PIIX4 IDE controller (%d,%d,%d)\n", PCI_BUS (bdf),		PCI_DEV (bdf), PCI_FUNC (bdf));	/* Try to get FAT working... */	/* fat_register_read(ide_read); */	return (0);}/* * Show/Init PCI devices on the specified bus number. */void pci_eXalion_fixup_irq (struct pci_controller *hose, pci_dev_t dev){	unsigned char line;	switch (PCI_DEV (dev)) {	case 16:		line = PCI_INT_A;		break;	case 17:		line = PCI_INT_B;		break;	case 18:		line = PCI_INT_C;		break;	case 19:		line = PCI_INT_D;		break;#if defined (CONFIG_MPC8245)	case 20:		line = PCI_INT_A;		break;	case 21:		line = PCI_INT_B;		break;	case 22:		line = PCI_INT_NA;		break;#endif	default:		line = PCI_INT_A;		break;	}	pci_hose_write_config_byte (hose, dev, PCI_INTERRUPT_LINE, line);}/* * Initialize PCI Devices, report devices found. */#ifndef CONFIG_PCI_PNP#if defined (CONFIG_MPC8240)static struct pci_config_table pci_eXalion_config_table[] = {	{	 /* Intel 82559ER ethernet controller */	 PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, 0x00, 18, 0x00,	 pci_cfgfunc_config_device, {PCI_ENET0_IOADDR,				     PCI_ENET0_MEMADDR,				     PCI_COMMAND_MEMORY |				     PCI_COMMAND_MASTER}},	{	 /* Intel 82371AB PIIX4 PCI to ISA bridge */	 PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, 0x00, 20, 0x00,	 pci_cfgfunc_config_device, {0,				     0,				     PCI_COMMAND_IO | PCI_COMMAND_MASTER}},	{	 /* Intel 82371AB PIIX4 IDE controller */	 PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, 0x00, 20, 0x01,	 pci_cfgfunc_config_device, {0,				     0,				     PCI_COMMAND_IO | PCI_COMMAND_MASTER}},	{}};#elif defined (CONFIG_MPC8245)static struct pci_config_table pci_eXalion_config_table[] = {	{	 /* Intel 82559ER ethernet controller */	 PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, 0x00, 17, 0x00,	 pci_cfgfunc_config_device, {PCI_ENET0_IOADDR,				     PCI_ENET0_MEMADDR,				     PCI_COMMAND_MEMORY |				     PCI_COMMAND_MASTER}},	{	 /* Intel 82559ER ethernet controller */	 PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, 0x00, 18, 0x00,	 pci_cfgfunc_config_device, {PCI_ENET1_IOADDR,				     PCI_ENET1_MEMADDR,				     PCI_COMMAND_MEMORY |				     PCI_COMMAND_MASTER}},	{	 /* Broadcom BCM5690 Gigabit switch */	 PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, 0x00, 20, 0x00,	 pci_cfgfunc_config_device, {PCI_ENET2_IOADDR,				     PCI_ENET2_MEMADDR,				     PCI_COMMAND_MEMORY |				     PCI_COMMAND_MASTER}},	{	 /* Broadcom BCM5690 Gigabit switch */	 PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, 0x00, 21, 0x00,	 pci_cfgfunc_config_device, {PCI_ENET3_IOADDR,				     PCI_ENET3_MEMADDR,				     PCI_COMMAND_MEMORY |				     PCI_COMMAND_MASTER}},	{	 /* Intel 82371AB PIIX4 PCI to ISA bridge */	 PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, 0x00, 22, 0x00,	 pci_cfgfunc_config_device, {0,				     0,				     PCI_COMMAND_IO | PCI_COMMAND_MASTER}},	{	 /* Intel 82371AB PIIX4 IDE controller */	 PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, 0x00, 22, 0x01,	 pci_cfgfunc_config_device, {0,				     0,				     PCI_COMMAND_IO | PCI_COMMAND_MASTER}},	{}};#else#error Specific type of MPC824x must be defined (i.e. CONFIG_MPC8240)#endif#endif /* #ifndef CONFIG_PCI_PNP */struct pci_controller hose = {#ifndef CONFIG_PCI_PNP	config_table:pci_eXalion_config_table,	fixup_irq:pci_eXalion_fixup_irq,#endif};void pci_init_board (void){	pci_mpc824x_init (&hose);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -