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

📄 netta.c

📁 u-boot-1.1.6 源码包
💻 C
📖 第 1 页 / 共 2 页
字号:
	p = (unsigned int *)addr;	pv = (unsigned int)p;	for (i = 0; i < size / sizeof(unsigned int); i++, pv += sizeof(unsigned int))		*p++ = pv;	p = (unsigned int *)addr;	for (i = 0; i < size / sizeof(unsigned int); i++) {		v = (unsigned int)p;		vv = *p;		if (vv != v) {			printf("%p: read %08x instead of %08x\n", p, vv, v);			hang();		}		p++;	}	for (j = 0; j < 5; j++) {		switch (j) {			case 0: v = 0x00000000; break;			case 1: v = 0xffffffff; break;			case 2: v = 0x55555555; break;			case 3: v = 0xaaaaaaaa; break;			default:v = 0xdeadbeef; break;		}		p = (unsigned int *)addr;		for (i = 0; i < size / sizeof(unsigned int); i++) {			*p = v;			vv = *p;			if (vv != v) {				printf("%p: read %08x instead of %08x\n", p, vv, v);				hang();			}			*p = ~v;			p++;		}	}}long int initdram(int board_type){	volatile immap_t *immap = (immap_t *) CFG_IMMR;	volatile memctl8xx_t *memctl = &immap->im_memctl;	long int size;	upmconfig(UPMB, (uint *) sdram_table, sizeof(sdram_table) / sizeof(uint));	/*	 * Preliminary prescaler for refresh	 */	memctl->memc_mptpr = MPTPR_PTP_DIV8;	memctl->memc_mar = MAR_SDRAM_INIT;	/* 32-bit address to be output on the address bus if AMX = 0b11 */	/*	 * Map controller bank 3 to the SDRAM bank at preliminary address.	 */	memctl->memc_or3 = CFG_OR3_PRELIM;	memctl->memc_br3 = CFG_BR3_PRELIM;	memctl->memc_mbmr = CFG_MAMR & ~MAMR_PTAE;	/* no refresh yet */	udelay(200);	/* perform SDRAM initialisation sequence */	memctl->memc_mcr = MCR_OP_RUN | MCR_UPM_B | MCR_MB_CS3 | MCR_MLCF(1) | MCR_MAD(0x3C);	/* precharge all		*/	udelay(1);	memctl->memc_mcr = MCR_OP_RUN | MCR_UPM_B | MCR_MB_CS3 | MCR_MLCF(2) | MCR_MAD(0x30);	/* refresh 2 times(0)		*/	udelay(1);	memctl->memc_mcr = MCR_OP_RUN | MCR_UPM_B | MCR_MB_CS3 | MCR_MLCF(1) | MCR_MAD(0x3E);	/* exception program (write mar)*/	udelay(1);	memctl->memc_mbmr |= MAMR_PTAE;	/* enable refresh */	udelay(10000);	{		u32 d1, d2;		d1 = 0xAA55AA55;		*(volatile u32 *)0 = d1;		d2 = *(volatile u32 *)0;		if (d1 != d2) {			printf("DRAM fails: wrote 0x%08x read 0x%08x\n", d1, d2);			hang();		}		d1 = 0x55AA55AA;		*(volatile u32 *)0 = d1;		d2 = *(volatile u32 *)0;		if (d1 != d2) {			printf("DRAM fails: wrote 0x%08x read 0x%08x\n", d1, d2);			hang();		}	}	size = get_ram_size((long *)0, SDRAM_MAX_SIZE);#if 0	printf("check 0\n");	check_ram(( 0 << 20), (2 << 20));	printf("check 16\n");	check_ram((16 << 20), (2 << 20));	printf("check 32\n");	check_ram((32 << 20), (2 << 20));	printf("check 48\n");	check_ram((48 << 20), (2 << 20));#endif	if (size == 0) {		printf("SIZE is zero: LOOP on 0\n");		for (;;) {			*(volatile u32 *)0 = 0;			(void)*(volatile u32 *)0;		}	}	return size;}/* ------------------------------------------------------------------------- */int misc_init_r(void){	return(0);}void reset_phys(void){	int phyno;	unsigned short v;	/* reset the damn phys */	mii_init();	for (phyno = 0; phyno < 32; ++phyno) {		fec8xx_miiphy_read(NULL, phyno, PHY_PHYIDR1, &v);		if (v == 0xFFFF)			continue;		fec8xx_miiphy_write(NULL, phyno, PHY_BMCR, PHY_BMCR_POWD);		udelay(10000);		fec8xx_miiphy_write(NULL, phyno, PHY_BMCR,				PHY_BMCR_RESET | PHY_BMCR_AUTON);		udelay(10000);	}}extern int board_dsp_reset(void);int last_stage_init(void){	int r;	reset_phys();	r = board_dsp_reset();	if (r < 0)		printf("*** WARNING *** DSP reset failed (run diagnostics)\n");	return 0;}/* ------------------------------------------------------------------------- *//* GP = general purpose, SP = special purpose (on chip peripheral) *//* bits that can have a special purpose or can be configured as inputs/outputs */#define PA_GP_INMASK	(_BWR(3) | _BWR(7, 9) | _BW(11))#define PA_GP_OUTMASK	(_BW(6) | _BW(10) | _BWR(12, 15))#define PA_SP_MASK	(_BWR(0, 2) | _BWR(4, 5))#define PA_ODR_VAL	0#define PA_GP_OUTVAL	(_BW(13) | _BWR(14, 15))#define PA_SP_DIRVAL	0#define PB_GP_INMASK	(_B(28) | _B(31))#define PB_GP_OUTMASK	(_BR(15, 19) | _BR(26, 27) | _BR(29, 30))#define PB_SP_MASK	(_BR(22, 25))#define PB_ODR_VAL	0#define PB_GP_OUTVAL	(_BR(15, 19) | _BR(26, 27) | _BR(29, 31))#define PB_SP_DIRVAL	0#define PC_GP_INMASK	(_BW(5) | _BW(7) | _BW(8) | _BWR(9, 11) | _BWR(13, 15))#define PC_GP_OUTMASK	(_BW(6) | _BW(12))#define PC_SP_MASK	(_BW(4) | _BW(8))#define PC_SOVAL	0#define PC_INTVAL	_BW(7)#define PC_GP_OUTVAL	(_BW(6) | _BW(12))#define PC_SP_DIRVAL	0#define PD_GP_INMASK	0#define PD_GP_OUTMASK	_BWR(3, 15)#define PD_SP_MASK	0#if defined(CONFIG_NETTA_6412)#define PD_GP_OUTVAL	(_BWR(5, 7) | _BW(9) | _BW(11) | _BW(15))#else#define PD_GP_OUTVAL	(_BWR(5, 7) | _BW(9) | _BW(11))#endif#define PD_SP_DIRVAL	0int board_early_init_f(void){	volatile immap_t *immap = (immap_t *) CFG_IMMR;	volatile iop8xx_t *ioport = &immap->im_ioport;	volatile cpm8xx_t *cpm = &immap->im_cpm;	volatile memctl8xx_t *memctl = &immap->im_memctl;	/* CS1: NAND chip select */	memctl->memc_or1 = ((0xFFFFFFFFLU & ~(NAND_SIZE - 1)) | OR_BI | OR_SCY_2_CLK | OR_TRLX | OR_ACS_DIV2) ;	memctl->memc_br1 = ((NAND_BASE & BR_BA_MSK) | BR_PS_8 | BR_V);#if !defined(CONFIG_NETTA_6412)	/* CS2: DSP */	memctl->memc_or2 = ((0xFFFFFFFFLU & ~(DSP_SIZE - 1)) | OR_CSNT_SAM | OR_BI | OR_SCY_7_CLK | OR_ACS_DIV2);	memctl->memc_br2 = ((DSP_BASE & BR_BA_MSK) | BR_PS_16 | BR_V);#else	/* CS6: DSP */	memctl->memc_or6 = ((0xFFFFFFFFLU & ~(DSP_SIZE - 1)) | OR_CSNT_SAM | OR_BI | OR_SCY_7_CLK | OR_ACS_DIV2);	memctl->memc_br6 = ((DSP_BASE & BR_BA_MSK) | BR_PS_16 | BR_V);#endif	/* CS4: External register chip select */	memctl->memc_or4 = ((0xFFFFFFFFLU & ~(ER_SIZE - 1)) | OR_BI | OR_SCY_4_CLK);	memctl->memc_br4 = ((ER_BASE & BR_BA_MSK) | BR_PS_32 | BR_V);	/* CS5: dummy for accurate delay */	memctl->memc_or5 = ((0xFFFFFFFFLU & ~(DUMMY_SIZE - 1)) | OR_CSNT_SAM | OR_BI | OR_SCY_0_CLK | OR_ACS_DIV2);	memctl->memc_br5 = ((DUMMY_BASE & BR_BA_MSK) | BR_PS_32 | BR_V);	ioport->iop_padat	= PA_GP_OUTVAL;	ioport->iop_paodr	= PA_ODR_VAL;	ioport->iop_padir	= PA_GP_OUTMASK | PA_SP_DIRVAL;	ioport->iop_papar	= PA_SP_MASK;	cpm->cp_pbdat		= PB_GP_OUTVAL;	cpm->cp_pbodr		= PB_ODR_VAL;	cpm->cp_pbdir		= PB_GP_OUTMASK | PB_SP_DIRVAL;	cpm->cp_pbpar		= PB_SP_MASK;	ioport->iop_pcdat	= PC_GP_OUTVAL;	ioport->iop_pcdir	= PC_GP_OUTMASK | PC_SP_DIRVAL;	ioport->iop_pcso	= PC_SOVAL;	ioport->iop_pcint	= PC_INTVAL;	ioport->iop_pcpar	= PC_SP_MASK;	ioport->iop_pddat	= PD_GP_OUTVAL;	ioport->iop_pddir	= PD_GP_OUTMASK | PD_SP_DIRVAL;	ioport->iop_pdpar	= PD_SP_MASK;	/* ioport->iop_pddat |=  (1 << (15 - 6)) | (1 << (15 - 7)); */	return 0;}#if (CONFIG_COMMANDS & CFG_CMD_NAND) && defined(CFG_NAND_LEGACY)#include <linux/mtd/nand_legacy.h>extern ulong nand_probe(ulong physadr);extern struct nand_chip nand_dev_desc[CFG_MAX_NAND_DEVICE];void nand_init(void){	unsigned long totlen = nand_probe(CFG_NAND_BASE);	printf ("%4lu MB\n", totlen >> 20);}#endif#if (CONFIG_COMMANDS & CFG_CMD_PCMCIA)int pcmcia_init(void){	return 0;}#endif#ifdef CONFIG_POST/* * Returns 1 if keys pressed to start the power-on long-running tests * Called from board_init_f(). */int post_hotkeys_pressed(void){	return 0;	/* No hotkeys supported */}#endif#ifdef CONFIG_HW_WATCHDOGvoid hw_watchdog_reset(void){	/* XXX add here the really funky stuff */}#endif

⌨️ 快捷键说明

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