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

📄 ispan.c

📁 嵌入式试验箱S3C2410的bootloader源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
/*************************************************************** * We take some basic Hardware Configuration Parameter from the * Serial EEPROM conected to the PSpan bridge. We keep it as * simple as possible. */#ifdef DEBUGstatic int hwc_flash_size (void){	uchar byte;	if (!seeprom_read (0x40, &byte, sizeof (byte))) {		switch ((byte >> 2) & 0x3) {		case 0x1:			return 0x0400000;			break;		case 0x2:			return 0x0800000;			break;		case 0x3:			return 0x1000000;		default:			return 0x0100000;		}	}	return -1;}static int hwc_local_sdram_size (void){	uchar byte;	if (!seeprom_read (0x40, &byte, sizeof (byte))) {		switch ((byte & 0x03)) {		case 0x1:			return 0x0800000;		case 0x2:			return 0x1000000;		default:			return 0;			/* not present */		}	}	return -1;}#endif	/* DEBUG */static int hwc_main_sdram_size (void){	uchar byte;	if (!seeprom_read (0x41, &byte, sizeof (byte))) {		return 0x1000000 << ((byte >> 5) & 0x7);	}	return -1;}static int hwc_serial_number (void){	int sn = -1;	if (!seeprom_read (0xa0, (uchar *) &sn, sizeof (sn))) {		sn = cpu_to_le32 (sn);	}	return sn;}static int hwc_mac_address (char *str){	char mac[6];	if (!seeprom_read (0xb0, (uchar *)mac, sizeof (mac))) {		sprintf (str, "%02X:%02X:%02X:%02X:%02X:%02X",				 mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);	} else {		strcpy (str, "ERROR");		return -1;	}	return 0;}static int hwc_manufact_date (char *str){	uchar byte;	int value;	if (seeprom_read (0x92, &byte, sizeof (byte)))		goto out;	value = byte;	if (seeprom_read (0x93, &byte, sizeof (byte)))		goto out;	value += byte << 8;	sprintf (str, "%02d/%02d/%04d",			 value & 0x1F, (value >> 5) & 0xF,			 1980 + ((value >> 9) & 0x1FF));	return 0;out:	strcpy (str, "ERROR");	return -1;}static int hwc_board_type (char **str){	ushort id = 0;	if (seeprom_read (7, (uchar *) & id, sizeof (id)) == 0) {		switch (id) {		case 0x9080:			*str = "4532-002";			break;		case 0x9081:			*str = "4532-001";			break;		case 0x9082:			*str = "4532-000";			break;		default:			*str = "Unknown";		}	} else {		*str = "Unknown";	}	return id;}long int initdram (int board_type){	long maxsize = hwc_main_sdram_size();#if !defined(CFG_RAMBOOT) && !defined(CFG_USE_FIRMWARE)	volatile immap_t *immap = (immap_t *) CFG_IMMR;	volatile memctl8260_t *memctl = &immap->im_memctl;	volatile uchar *base;	int i;	immap->im_siu_conf.sc_ppc_acr  = 0x00000026;	immap->im_siu_conf.sc_ppc_alrh = 0x01276345;	immap->im_siu_conf.sc_ppc_alrl = 0x89ABCDEF;	immap->im_siu_conf.sc_lcl_acr  = 0x00000000;	immap->im_siu_conf.sc_lcl_alrh = 0x01234567;	immap->im_siu_conf.sc_lcl_alrl = 0x89ABCDEF;	immap->im_siu_conf.sc_tescr1   = 0x00004000;	immap->im_siu_conf.sc_ltescr1  = 0x00004000;	memctl->memc_mptpr = CFG_MPTPR;	/* Initialise 60x bus SDRAM */	base = (uchar *)(CFG_SDRAM_BASE | 0x110);	memctl->memc_psrt  = CFG_PSRT;	memctl->memc_or1   = CFG_60x_OR;	memctl->memc_br1   = CFG_SDRAM_BASE | CFG_60x_BR;	memctl->memc_psdmr = CFG_PSDMR | 0x28000000;	*base = 0xFF;	memctl->memc_psdmr = CFG_PSDMR | 0x08000000;	for (i = 0; i < 8; i++)		*base = 0xFF;	memctl->memc_psdmr = CFG_PSDMR | 0x18000000;	*base = 0xFF;	memctl->memc_psdmr = CFG_PSDMR | 0x40000000;	/* Initialise local bus SDRAM */	base = (uchar *)CFG_LSDRAM_BASE;	memctl->memc_lsrt  = CFG_LSRT;	memctl->memc_or2   = CFG_LOC_OR;	memctl->memc_br2   = CFG_LSDRAM_BASE | CFG_LOC_BR;	memctl->memc_lsdmr = CFG_LSDMR | 0x28000000;	*base = 0xFF;	memctl->memc_lsdmr = CFG_LSDMR | 0x08000000;	for (i = 0; i < 8; i++)		*base = 0xFF;	memctl->memc_lsdmr = CFG_LSDMR | 0x18000000;	*base = 0xFF;	memctl->memc_lsdmr = CFG_LSDMR | 0x40000000;	/* We must be able to test a location outsize the maximum legal size	 * to find out THAT we are outside; but this address still has to be	 * mapped by the controller. That means, that the initial mapping has	 * to be (at least) twice as large as the maximum expected size.	 */	maxsize = (~(memctl->memc_or1 & BRx_BA_MSK) + 1) / 2;	maxsize = get_ram_size((long *)(memctl->memc_br1 & BRx_BA_MSK), maxsize);	memctl->memc_or1 |= ~(maxsize - 1);	if (maxsize != hwc_main_sdram_size())		puts("Oops: memory test has not found all memory!\n");#endif /* !CFG_RAMBOOT && !CFG_USE_FIRMWARE */	/* Return total RAM size (size of 60x SDRAM) */	return maxsize;}int checkboard(void){	char string[32], *id;	hwc_manufact_date(string);	hwc_board_type(&id);	printf("Board: Interphase iSPAN %s (#%d %s)\n",	       id, hwc_serial_number(), string);#ifdef DEBUG	printf("Manufacturing date: %s\n", string);	printf("Serial number     : %d\n", hwc_serial_number());	printf("FLASH size        : %d MB\n", hwc_flash_size() >> 20);	printf("Main SDRAM size   : %d MB\n", hwc_main_sdram_size() >> 20);	printf("Local SDRAM size  : %d MB\n", hwc_local_sdram_size() >> 20);	hwc_mac_address(string);	printf("MAC address       : %s\n", string);#endif	return 0;}int misc_init_r(void){	char *s, str[32];	int num;	if ((s = getenv("serial#")) == NULL &&	    (num = hwc_serial_number()) != -1) {		sprintf(str, "%06d", num);		setenv("serial#", str);	}	if ((s = getenv("ethaddr")) == NULL && hwc_mac_address(str) == 0) {		setenv("ethaddr", str);	}	return 0;}

⌨️ 快捷键说明

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