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

📄 tqm8272.c

📁 uboot200903最新版本的通用uboot
💻 C
📖 第 1 页 / 共 2 页
字号:
		printf ("(60x:9COL - %ld MB, ", psize >> 20);	} else {		psize = try_init (memctl, CONFIG_SYS_PSDMR_8COL, CONFIG_SYS_OR1_8COL,						  (uchar *) CONFIG_SYS_SDRAM_BASE, 8);		printf ("(60x:8COL - %ld MB, ", psize >> 20);	}#endif /* CONFIG_SYS_RAMBOOT */	icache_enable ();	return (psize);}static inline int scanChar (char *p, int len, unsigned long *number){	int	akt = 0;	*number = 0;	while (akt < len) {		if ((*p >= '0') && (*p <= '9')) {			*number *= 10;			*number += *p - '0';			p += 1;		} else {			if (*p == '-')	return akt;			return -1;		}		akt ++;	}	return akt;}static int dump_hwib(void){	HWIB_INFO	*hw = &hwinf;	volatile immap_t *immr = (immap_t *)CONFIG_SYS_IMMR;	char *s = getenv("serial#");	if (hw->OK) {		printf ("HWIB on %x\n", HWIB_INFO_START_ADDR);		printf ("serial : %s\n", s);		printf ("ethaddr: %s\n", hw->ethaddr);		printf ("FLASH	: %x nr:%d\n", hw->flash, hw->flash_nr);		printf ("RAM	: %x cs:%d\n", hw->ram, hw->ram_cs);		printf ("CPU	: %lu\n", hw->cpunr);		printf ("CAN	: %d\n", hw->can);		if (hw->eeprom) printf ("EEprom : %x\n", hw->eeprom);		else printf ("No EEprom\n");		if (hw->nand) {			printf ("NAND	: %x\n", hw->nand);			printf ("NAND CS: %d\n", hw->nand_cs);		} else { printf ("No NAND\n");}		printf ("Bus %s mode.\n", (hw->Bus ? "60x" : "Single PQII"));		printf ("  real : %s\n", (immr->im_siu_conf.sc_bcr & BCR_EBM ? \				 "60x" : "Single PQII"));		printf ("Option : %lx\n", hw->option);		printf ("%s Security Engine\n", (hw->SecEng ? "with" : "no"));		printf ("CPM Clk: %d\n", hw->cpmcl);		printf ("CPU Clk: %d\n", hw->cpucl);		printf ("Bus Clk: %d\n", hw->buscl);		if (hw->busclk_real_ok) {			printf ("  real Clk: %d\n", hw->busclk_real);		}		printf ("CAS	: %d\n", get_cas_latency());	} else {		printf("HWIB @%x not OK\n", HWIB_INFO_START_ADDR);	}	return 0;}static inline int search_real_busclk (int *clk){	int	part = 0, pos = 0;	char *p = (char *) CIB_INFO_START_ADDR;	int	ok = 0;	while ((*p != '\0') && (pos < CIB_INFO_LEN)) {		if (*p < ' ' || *p > '~') { /* ASCII strings! */			return 0;		}		switch (part) {		default:			if (*p == '-') {				++part;			}			break;		case 3:			if (*p == '-') {				++part;				break;			}			if (*p == 'b') {				ok = 1;				p++;				break;			}			if (ok) {				switch (*p) {				case '6':					*clk = 66666666;					return 1;					break;				case '1':					if (p[1] == '3') {						*clk = 133333333;					} else {						*clk = 100000000;					}					return 1;					break;				}			}			break;		}		p++;	}	return 0;}int analyse_hwib (void){	char	*p = (char *) HWIB_INFO_START_ADDR;	int	anz;	int	part = 1, i = 0, pos = 0;	HWIB_INFO	*hw = &hwinf;	deb_printf(" %s pointer: %p\n", __FUNCTION__, p);	/* Head = TQM */	if (*((unsigned long *)p) != (unsigned long)CONFIG_SYS_HWINFO_MAGIC) {		deb_printf("No HWIB\n");		return -1;	}	p += 3;	if (scanChar (p, 4, &hw->cpunr) < 0) {		deb_printf("No CPU\n");		return -2;	}	p +=4;	hw->flash = 0x200000 << (*p - 'A');	p++;	hw->flash_nr = *p - '0';	p++;	hw->ram = 0x2000000 << (*p - 'A');	p++;	if (*p == '2') {		hw->ram_cs = 2;		p++;	}	if (*p == 'A') hw->can = 1;	if (*p == 'B') hw->can = 2;	p +=1;	p +=1;	/* connector */	if (*p != '0') {		hw->eeprom = 0x1000 << (*p - 'A');	}	p++;	if ((*p < '0') || (*p > '9')) {		/* NAND before z-option */		hw->nand = 0x8000000 << (*p - 'A');		p++;		hw->nand_cs = *p - '0';		p += 2;	}	/* z-option */	anz = scanChar (p, 4, &hw->option);	if (anz < 0) {		deb_printf("No option\n");		return -3;	}	if (hw->option & 0x8) hw->Bus = 1;	p += anz;	if (*p != '-') {		deb_printf("No -\n");		return -4;	}	p++;	/* C option */	if (*p == 'E') {		hw->SecEng = 1;		p++;	}	switch (*p) {		case 'M': hw->cpucl = 266666666;			break;		case 'P': hw->cpucl = 300000000;			break;		case 'T': hw->cpucl = 400000000;			break;		default:			deb_printf("No CPU Clk: %c\n", *p);			return -5;			break;	}	p++;	switch (*p) {		case 'I': hw->cpmcl = 200000000;			break;		case 'M': hw->cpmcl = 300000000;			break;		default:			deb_printf("No CPM Clk\n");			return -6;			break;	}	p++;	switch (*p) {		case 'B': hw->buscl = 66666666;			break;		case 'E': hw->buscl = 100000000;			break;		case 'F': hw->buscl = 133333333;			break;		default:			deb_printf("No BUS Clk\n");			return -7;			break;	}	p++;	hw->OK = 1;	/* search MAC Address */	while ((*p != '\0') && (pos < CONFIG_SYS_HWINFO_SIZE)) {		if (*p < ' ' || *p > '~') { /* ASCII strings! */			return 0;		}		switch (part) {		default:			if (*p == ' ') {				++part;				i = 0;			}			break;		case 3:			/* Copy MAC address */			if (*p == ' ') {				++part;				i = 0;				break;			}			hw->ethaddr[i++] = *p;			if ((i % 3) == 2)				hw->ethaddr[i++] = ':';			break;		}		p++;	}	hw->busclk_real_ok = search_real_busclk (&hw->busclk_real);	return 0;}#if defined(CONFIG_GET_CPU_STR_F)/* !! This routine runs from Flash */char get_cpu_str_f (char *buf){	char *p = (char *) HWIB_INFO_START_ADDR;	int	i = 0;	buf[i++] = 'M';	buf[i++] = 'P';	buf[i++] = 'C';	if (*((unsigned long *)p) == (unsigned long)CONFIG_SYS_HWINFO_MAGIC) {		buf[i++] = *&p[3];		buf[i++] = *&p[4];		buf[i++] = *&p[5];		buf[i++] = *&p[6];	} else {		buf[i++] = '8';		buf[i++] = '2';		buf[i++] = '7';		buf[i++] = 'x';	}	buf[i++] = 0;	return 0;}#endif#if defined(CONFIG_BOARD_GET_CPU_CLK_F)/* !! This routine runs from Flash */unsigned long board_get_cpu_clk_f (void){	char *p = (char *) HWIB_INFO_START_ADDR;	int i = 0;	if (*((unsigned long *)p) == (unsigned long)CONFIG_SYS_HWINFO_MAGIC) {		if (search_real_busclk (&i))			return i;	}	return CONFIG_8260_CLKIN;}#endif#if CONFIG_BOARD_EARLY_INIT_Rstatic int can_test (unsigned long off){	volatile unsigned char	*base	= (unsigned char *) (CONFIG_SYS_CAN_BASE + off);	*(base + 0x17) = 'T';	*(base + 0x18) = 'Q';	*(base + 0x19) = 'M';	if ((*(base + 0x17) != 'T') ||	    (*(base + 0x18) != 'Q') ||	    (*(base + 0x19) != 'M')) {		return 0;	}	return 1;}static int can_config_one (unsigned long off){	volatile unsigned char	*ctrl	= (unsigned char *) (CONFIG_SYS_CAN_BASE + off);	volatile unsigned char	*cpu_if = (unsigned char *) (CONFIG_SYS_CAN_BASE + off + 0x02);	volatile unsigned char	*clkout = (unsigned char *) (CONFIG_SYS_CAN_BASE + off + 0x1f);	unsigned char temp;	*cpu_if = 0x45;	temp = *ctrl;	temp |= 0x40;	*ctrl	= temp;	*clkout = 0x20;	temp = *ctrl;	temp &= ~0x40;	*ctrl	= temp;	return 0;}static int can_config (void){	int	ret = 0;	can_config_one (0);	if (hwinf.can == 2) {		can_config_one (0x100);	}	/* make Test if they really there */	ret += can_test (0);	ret += can_test (0x100);	return ret;}static int init_can (void){	volatile immap_t * immr = (immap_t *)CONFIG_SYS_IMMR;	volatile memctl8260_t *memctl = &immr->im_memctl;	int	count = 0;	if ((hwinf.OK) && (hwinf.can)) {		memctl->memc_or4 = CONFIG_SYS_CAN_OR;		memctl->memc_br4 = CONFIG_SYS_CAN_BR;		/* upm Init */		upmconfig (UPMC, (uint *) upmTableFast,			   sizeof (upmTableFast) / sizeof (uint));		memctl->memc_mcmr =	(MxMR_DSx_3_CYCL |					MxMR_GPL_x4DIS |					MxMR_RLFx_2X |					MxMR_WLFx_2X |					MxMR_OP_NORM);		/* can configure */		count = can_config ();		printf ("CAN:	%d @ %x\n", count, CONFIG_SYS_CAN_BASE);		if (hwinf.can != count) printf("!!! difference to HWIB\n");	} else {		printf ("CAN:	No\n");	}	return 0;}int board_early_init_r(void){	analyse_hwib ();	init_can ();	return 0;}#endifint do_hwib_dump (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[]){	dump_hwib ();	return 0;}U_BOOT_CMD(	  hwib, 1,	1,	do_hwib_dump,	  "dump HWIB'",	  "\n");#ifdef CONFIG_SYS_UPDATE_FLASH_SIZEstatic int get_flash_timing (void){	/* get it from the option -tf in CIB */	/* default is 0x00000c84 */	int	ret = 0x00000c84;	int	pos = 0;	int	nr = 0;	char	*p = (char *) CIB_INFO_START_ADDR;	while ((*p != '\0') && (pos < CIB_INFO_LEN)) {		if (*p < ' ' || *p > '~') { /* ASCII strings! */			return ret;		}		if (*p == '-') {			if ((p[1] == 't') && (p[2] == 'f')) {				p += 6;				ret = 0;				while (nr < 8) {				if ((*p >= '0') && (*p <= '9')) {					ret *= 0x10;					ret += *p - '0';					p += 1;					nr ++;				} else if ((*p >= 'A') && (*p <= 'F')) {					ret *= 10;					ret += *p - '7';					p += 1;					nr ++;				} else {					if (nr < 8) return 0x00000c84;					return ret;				}				}			}		}		p++;		pos++;	}	return ret;}/* Update the Flash_Size and the Flash Timing */int update_flash_size (int flash_size){	volatile immap_t * immr = (immap_t *)CONFIG_SYS_IMMR;	volatile memctl8260_t *memctl = &immr->im_memctl;	unsigned long reg;	unsigned long tim;	/* I must use reg, otherwise the board hang */	reg = memctl->memc_or0;	reg &= ~ORxU_AM_MSK;	reg |= MEG_TO_AM(flash_size >> 20);	tim = get_flash_timing ();	reg &= ~0xfff;	reg |= (tim & 0xfff);	memctl->memc_or0 = reg;	return 0;}#endif#ifdef CONFIG_PCIstruct pci_controller hose;int board_early_init_f (void){	volatile immap_t *immap = (immap_t *) CONFIG_SYS_IMMR;	immap->im_clkrst.car_sccr |= M826X_SCCR_PCI_MODE_EN;	return 0;}extern void pci_mpc8250_init(struct pci_controller *);void pci_init_board(void){	pci_mpc8250_init(&hose);}#endifint board_eth_init(bd_t *bis){	return pci_eth_init(bis);}

⌨️ 快捷键说明

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