亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? flash.c

?? u-boot源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
	case (FLASH_WORD_SIZE)AMD_ID_LV320T:		info->flash_id += FLASH_AM320T;		info->sector_count = 67;		info->size = 0x00400000;		break;				/* => 4 MB		*/	case (FLASH_WORD_SIZE)AMD_ID_LV640U:		info->flash_id += FLASH_AM640U;		info->sector_count = 128;		info->size = 0x00800000;		break;				/* => 8 MB		*/#if 0	/* enable when device IDs are available */	case (FLASH_WORD_SIZE)AMD_ID_LV320B:		info->flash_id += FLASH_AM320B;		info->sector_count = 67;		info->size = 0x00400000;		break;				/* => 4 MB		*/#endif	case (FLASH_WORD_SIZE)SST_ID_xF800A:		info->flash_id += FLASH_SST800A;		info->sector_count = 16;		info->size = 0x00100000;		break;				/* => 1 MB		*/	case (FLASH_WORD_SIZE)INTEL_ID_28F320C3T:		info->flash_id += FLASH_INTEL320T;		info->sector_count = 71;		info->size = 0x00400000;		break;				/* => 4 MB		*/	case (FLASH_WORD_SIZE)SST_ID_xF160A:		info->flash_id += FLASH_SST160A;		info->sector_count = 32;		info->size = 0x00200000;		break;				/* => 2 MB		*/	default:		info->flash_id = FLASH_UNKNOWN;		return (0);			/* => no or unknown flash */	}	/* base address calculation */	base=0-info->size;	/* set up sector start address table */	if (((info->flash_id & FLASH_VENDMASK) == FLASH_MAN_SST) ||	     (info->flash_id  == FLASH_AM040) ||	     (info->flash_id  == FLASH_AM640U)){		for (i = 0; i < info->sector_count; i++)			info->start[i] = base + (i * 0x00010000);	}	else {		if (info->flash_id & FLASH_BTYPE) {			/* set sector offsets for bottom boot block type	*/			info->start[0] = base + 0x00000000;			info->start[1] = base + 0x00004000;			info->start[2] = base + 0x00006000;			info->start[3] = base + 0x00008000;			for (i = 4; i < info->sector_count; i++)				info->start[i] = base + (i * 0x00010000) - 0x00030000;		}		else {			/* set sector offsets for top boot block type		*/			i = info->sector_count - 1;			if(info->sector_count==71) {				info->start[i--] = base + info->size - 0x00002000;				info->start[i--] = base + info->size - 0x00004000;				info->start[i--] = base + info->size - 0x00006000;				info->start[i--] = base + info->size - 0x00008000;				info->start[i--] = base + info->size - 0x0000A000;				info->start[i--] = base + info->size - 0x0000C000;				info->start[i--] = base + info->size - 0x0000E000;				for (; i >= 0; i--)					info->start[i] = base + i * 0x000010000;			}			else {				info->start[i--] = base + info->size - 0x00004000;				info->start[i--] = base + info->size - 0x00006000;				info->start[i--] = base + info->size - 0x00008000;				for (; i >= 0; i--)					info->start[i] = base + i * 0x00010000;			}		}	}	/* check for protected sectors */	for (i = 0; i < info->sector_count; i++) {		/* read sector protection at sector address, (A7 .. A0) = 0x02 */		/* D0 = 1 if protected */		addr2 = (volatile FLASH_WORD_SIZE *)(info->start[i]);		if ((info->flash_id & FLASH_VENDMASK) == FLASH_MAN_INTEL)			info->protect[i] = 0;		else			info->protect[i] = addr2[2] & 1;	}	/*	 * Prevent writes to uninitialized FLASH.	 */	if (info->flash_id != FLASH_UNKNOWN) {		addr2 = (FLASH_WORD_SIZE *)info->start[0];		*addr2 = (FLASH_WORD_SIZE)0x00F000F0;	/* reset bank */	}	return (info->size);}int wait_for_DQ7(flash_info_t *info, int sect){	ulong start, now, last;	volatile FLASH_WORD_SIZE *addr = (FLASH_WORD_SIZE *)(info->start[sect]);	start = get_timer (0);	last  = start;	while ((addr[0] & (FLASH_WORD_SIZE)0x00800080) != (FLASH_WORD_SIZE)0x00800080) {		if ((now = get_timer(start)) > CFG_FLASH_ERASE_TOUT) {			printf ("Timeout\n");			return ERR_TIMOUT;		}		/* show that we're waiting */		if ((now - last) > 1000) {  /* every second */			putc ('.');			last = now;		}	}	return ERR_OK;}int intel_wait_for_DQ7(flash_info_t *info, int sect){	ulong start, now, last, status;	volatile FLASH_WORD_SIZE *addr = (FLASH_WORD_SIZE *)(info->start[sect]);	start = get_timer (0);	last  = start;	while ((addr[0] & (FLASH_WORD_SIZE)0x00800080) != (FLASH_WORD_SIZE)0x00800080) {		if ((now = get_timer(start)) > CFG_FLASH_ERASE_TOUT) {			printf ("Timeout\n");			return ERR_TIMOUT;		}		/* show that we're waiting */		if ((now - last) > 1000) {  /* every second */			putc ('.');			last = now;		}	}	status = addr[0] & (FLASH_WORD_SIZE)0x00280028;	/* clear status register */	addr[0] = (FLASH_WORD_SIZE)0x00500050;	/* check status for block erase fail and VPP low */	return (status == 0 ? ERR_OK : ERR_NOT_ERASED);}/*----------------------------------------------------------------------- */int	flash_erase (flash_info_t *info, int s_first, int s_last){	volatile FLASH_WORD_SIZE *addr = (FLASH_WORD_SIZE *)(info->start[0]);	volatile FLASH_WORD_SIZE *addr2;	int flag, prot, sect, l_sect;	int i, rcode = 0;	if ((s_first < 0) || (s_first > s_last)) {		if (info->flash_id == FLASH_UNKNOWN) {			printf ("- missing\n");		} else {			printf ("- no sectors to erase\n");		}		return 1;	}	if (info->flash_id == FLASH_UNKNOWN) {		printf ("Can't erase unknown flash type - aborted\n");		return 1;	}	prot = 0;	for (sect=s_first; sect<=s_last; ++sect) {		if (info->protect[sect]) {			prot++;		}	}	if (prot) {		printf ("- Warning: %d protected sectors will not be erased!\n",			prot);	} else {		printf ("\n");	}	l_sect = -1;	/* Disable interrupts which might cause a timeout here */	flag = disable_interrupts();	/* Start erase on unprotected sectors */	for (sect = s_first; sect<=s_last; sect++) {		if (info->protect[sect] == 0) {	/* not protected */			addr2 = (FLASH_WORD_SIZE *)(info->start[sect]);			/*  printf("Erasing sector %p\n", addr2); */ /* CLH */			if ((info->flash_id & FLASH_VENDMASK) == FLASH_MAN_SST) {				addr[ADDR0] = (FLASH_WORD_SIZE)0x00AA00AA;				addr[ADDR1] = (FLASH_WORD_SIZE)0x00550055;				addr[ADDR0] = (FLASH_WORD_SIZE)0x00800080;				addr[ADDR0] = (FLASH_WORD_SIZE)0x00AA00AA;				addr[ADDR1] = (FLASH_WORD_SIZE)0x00550055;				addr2[0] = (FLASH_WORD_SIZE)0x00500050;  /* block erase */				for (i=0; i<50; i++)					udelay(1000);  /* wait 1 ms */				rcode |= wait_for_DQ7(info, sect);			}			else {				if((info->flash_id & FLASH_VENDMASK) == FLASH_MAN_INTEL){					addr2[0] = (FLASH_WORD_SIZE)0x00600060;  /* unlock sector */					addr2[0] = (FLASH_WORD_SIZE)0x00D000D0;  /* sector erase */					intel_wait_for_DQ7(info, sect);					addr2[0] = (FLASH_WORD_SIZE)0x00200020;  /* sector erase */					addr2[0] = (FLASH_WORD_SIZE)0x00D000D0;  /* sector erase */					rcode |= intel_wait_for_DQ7(info, sect);				}				else {					addr[ADDR0] = (FLASH_WORD_SIZE)0x00AA00AA;					addr[ADDR1] = (FLASH_WORD_SIZE)0x00550055;					addr[ADDR0] = (FLASH_WORD_SIZE)0x00800080;					addr[ADDR0] = (FLASH_WORD_SIZE)0x00AA00AA;					addr[ADDR1] = (FLASH_WORD_SIZE)0x00550055;					addr2[0] = (FLASH_WORD_SIZE)0x00300030;  /* sector erase */					rcode |= wait_for_DQ7(info, sect);				}			}			l_sect = sect;			/*			 * Wait for each sector to complete, it's more			 * reliable.  According to AMD Spec, you must			 * issue all erase commands within a specified			 * timeout.  This has been seen to fail, especially			 * if printf()s are included (for debug)!!			 */			/*   wait_for_DQ7(info, sect); */		}	}	/* re-enable interrupts if necessary */	if (flag)		enable_interrupts();	/* wait at least 80us - let's wait 1 ms */	udelay (1000);#if 0	/*	 * We wait for the last triggered sector	 */	if (l_sect < 0)		goto DONE;	wait_for_DQ7(info, l_sect);DONE:#endif	/* reset to read mode */	addr = (FLASH_WORD_SIZE *)info->start[0];	addr[0] = (FLASH_WORD_SIZE)0x00F000F0;	/* reset bank */	if (!rcode)	    printf (" done\n");	return rcode;}void unlock_intel_sectors(flash_info_t *info,ulong addr,ulong cnt){	int i;	volatile FLASH_WORD_SIZE *addr2;	long c;	c= (long)cnt;	for(i=info->sector_count-1;i>0;i--)	{		if(addr>=info->start[i])			break;	}	do {		addr2 = (FLASH_WORD_SIZE *)(info->start[i]);		addr2[0] = (FLASH_WORD_SIZE)0x00600060;  /* unlock sector setup */		addr2[0] = (FLASH_WORD_SIZE)0x00D000D0;  /* unlock sector */		intel_wait_for_DQ7(info, i);		i++;		c-=(info->start[i]-info->start[i-1]);	}while(c>0);}/*----------------------------------------------------------------------- * Copy memory to flash, returns: * 0 - OK * 1 - write timeout * 2 - Flash not erased */int write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt){	ulong cp, wp, data;	int i, l, rc;	if((info->flash_id & FLASH_VENDMASK) == FLASH_MAN_INTEL){		unlock_intel_sectors(info,addr,cnt);	}	wp = (addr & ~3);	/* get lower word aligned address */	/*	 * handle unaligned start bytes	 */	if ((l = addr - wp) != 0) {		data = 0;		for (i=0, cp=wp; i<l; ++i, ++cp) {			data = (data << 8) | (*(uchar *)cp);		}		for (; i<4 && cnt>0; ++i) {			data = (data << 8) | *src++;			--cnt;			++cp;		}		for (; cnt==0 && i<4; ++i, ++cp) {			data = (data << 8) | (*(uchar *)cp);		}		if ((rc = write_word(info, wp, data)) != 0) {			return (rc);		}		wp += 4;	}	/*	 * handle word aligned part	 */	while (cnt >= 4) {		data = 0;		for (i=0; i<4; ++i) {			data = (data << 8) | *src++;		}		if ((rc = write_word(info, wp, data)) != 0) {			return (rc);		}		wp  += 4;		if((wp % 0x10000)==0)			printf("."); /* show Progress */		cnt -= 4;	}	if (cnt == 0) {		return (0);	}	/*	 * handle unaligned tail bytes	 */	data = 0;	for (i=0, cp=wp; i<4 && cnt>0; ++i, ++cp) {		data = (data << 8) | *src++;		--cnt;	}	for (; i<4; ++i, ++cp) {		data = (data << 8) | (*(uchar *)cp);	}	rc=write_word(info, wp, data);	return rc;}/*----------------------------------------------------------------------- * Write a word to Flash, returns: * 0 - OK * 1 - write timeout * 2 - Flash not erased */static FLASH_WORD_SIZE *read_val = (FLASH_WORD_SIZE *)0x200000;static int write_word (flash_info_t *info, ulong dest, ulong data){	volatile FLASH_WORD_SIZE *addr2 = (FLASH_WORD_SIZE *)(info->start[0]);	volatile FLASH_WORD_SIZE *dest2 = (FLASH_WORD_SIZE *)dest;	volatile FLASH_WORD_SIZE *data2 = (FLASH_WORD_SIZE *)&data;	ulong start;	int flag;	int i;	/* Check if Flash is (sufficiently) erased */	if ((*((volatile FLASH_WORD_SIZE *)dest) &		(FLASH_WORD_SIZE)data) != (FLASH_WORD_SIZE)data) {		return (2);	}	/* Disable interrupts which might cause a timeout here */	flag = disable_interrupts();	for (i=0; i<4/sizeof(FLASH_WORD_SIZE); i++)	{		if((info->flash_id & FLASH_VENDMASK) == FLASH_MAN_INTEL){			/* intel style writting */			dest2[i] = (FLASH_WORD_SIZE)0x00500050;			dest2[i] = (FLASH_WORD_SIZE)0x00400040;			*read_val++ = data2[i];			dest2[i] = data2[i];			if (flag)				enable_interrupts();			/* data polling for D7 */			start = get_timer (0);			udelay(10);			while ((dest2[i] & (FLASH_WORD_SIZE)0x00800080) != (FLASH_WORD_SIZE)0x00800080)			{				if (get_timer(start) > CFG_FLASH_WRITE_TOUT)					return (1);			}			dest2[i] = (FLASH_WORD_SIZE)0x00FF00FF; /* return to read mode */			udelay(10);			dest2[i] = (FLASH_WORD_SIZE)0x00FF00FF; /* return to read mode */			if(dest2[i]!=data2[i])				printf("Error at %p 0x%04X != 0x%04X\n",&dest2[i],dest2[i],data2[i]);		}		else {			addr2[ADDR0] = (FLASH_WORD_SIZE)0x00AA00AA;			addr2[ADDR1] = (FLASH_WORD_SIZE)0x00550055;			addr2[ADDR0] = (FLASH_WORD_SIZE)0x00A000A0;			dest2[i] = data2[i];			/* re-enable interrupts if necessary */			if (flag)				enable_interrupts();			/* data polling for D7 */			start = get_timer (0);			while ((dest2[i] & (FLASH_WORD_SIZE)0x00800080) !=				(data2[i] & (FLASH_WORD_SIZE)0x00800080)) {				if (get_timer(start) > CFG_FLASH_WRITE_TOUT) {					return (1);				}			}		}	}	return (0);}/*----------------------------------------------------------------------- */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久久久久图文区 | 亚洲精品成人在线| 4438成人网| 99久免费精品视频在线观看| 奇米精品一区二区三区四区 | 久久综合九色综合97_久久久| eeuss鲁一区二区三区| 蜜桃一区二区三区四区| 亚洲激情第一区| 亚洲国产精品ⅴa在线观看| 日韩一区二区三区在线| 欧美日韩亚洲国产综合| 99精品偷自拍| 成人一级片在线观看| 在线中文字幕一区二区| 国产在线一区观看| 日韩电影免费一区| 一区二区三区鲁丝不卡| 综合激情成人伊人| 国产偷国产偷亚洲高清人白洁| 欧美一区二区三区在线观看| 欧美少妇一区二区| 91美女片黄在线观看91美女| 国产高清精品在线| 国产乱理伦片在线观看夜一区| 麻豆成人免费电影| 免费观看日韩电影| 麻豆成人久久精品二区三区红 | 国产精品―色哟哟| 国产欧美久久久精品影院| xnxx国产精品| 久久久久久久久久久电影| 欧美大片在线观看一区二区| 欧美一区二区三区四区高清| 欧美酷刑日本凌虐凌虐| 欧美亚洲一区三区| 欧美日韩精品一区二区在线播放| 一本色道亚洲精品aⅴ| 91在线视频官网| 91麻豆免费观看| 欧美亚洲精品一区| 欧美蜜桃一区二区三区| 7777精品久久久大香线蕉| 欧美精品黑人性xxxx| 欧美一区午夜视频在线观看 | 国产精品久久久久影院色老大| 国产偷国产偷亚洲高清人白洁| 久久久久国产一区二区三区四区 | 蜜桃在线一区二区三区| 精品一区二区三区蜜桃| 国产一区二区三区黄视频| 国产成人夜色高潮福利影视| 成人激情黄色小说| 色综合天天综合网天天看片| 在线观看网站黄不卡| 91精品国产免费| 久久亚洲捆绑美女| 综合在线观看色| 亚洲成a人片综合在线| 捆绑变态av一区二区三区| 国产成人免费在线视频| 色94色欧美sute亚洲线路一ni | 成人网男人的天堂| 91免费精品国自产拍在线不卡| 欧美亚洲禁片免费| 精品女同一区二区| 亚洲欧美一区二区视频| 99久久精品国产一区二区三区 | 风间由美一区二区av101| 成年人午夜久久久| 欧美日韩久久久久久| wwww国产精品欧美| 亚洲精品日韩一| 久久成人免费网| 99vv1com这只有精品| 欧美一区二区三区播放老司机| 国产欧美一区二区三区沐欲| 亚洲一区二区三区四区在线观看 | 免费看日韩精品| 国产999精品久久| 欧美综合视频在线观看| 久久午夜国产精品| 亚洲一区在线看| 国产精品亚洲第一区在线暖暖韩国 | 久久这里只有精品首页| 亚洲丝袜另类动漫二区| 蓝色福利精品导航| 欧美性高清videossexo| 精品成人一区二区三区四区| 最新国产精品久久精品| 美脚の诱脚舐め脚责91| 色婷婷综合久久久| 久久久久久久久久久久久女国产乱| 一区二区成人在线视频| 国产成人亚洲综合色影视| 777久久久精品| 成人欧美一区二区三区黑人麻豆 | 亚洲第一av色| 不卡视频在线观看| 精品国产乱码久久久久久久久| 亚洲精品成a人| 成人丝袜18视频在线观看| 欧美一级理论片| 亚洲午夜久久久久久久久电影院 | 亚洲精品日日夜夜| 国产福利不卡视频| 日韩欧美国产系列| 午夜国产精品一区| 91久久免费观看| 1区2区3区精品视频| 国精产品一区一区三区mba桃花| 欧美嫩在线观看| 一区二区三区在线视频观看58| 国产精品一区二区在线观看不卡 | 国产清纯在线一区二区www| 午夜视频在线观看一区二区| jizzjizzjizz欧美| 日本一区二区视频在线观看| 国产综合色在线视频区| 337p亚洲精品色噜噜| 亚洲国产综合色| 在线观看视频一区二区欧美日韩| 日韩一区中文字幕| 丁香一区二区三区| 国产日产精品一区| 国产成人免费视频网站高清观看视频 | 亚洲一区二区精品3399| 色久优优欧美色久优优| 亚洲欧美国产高清| 日本高清不卡视频| 一区二区国产视频| 欧美性感一区二区三区| 亚洲国产sm捆绑调教视频| 精品视频1区2区| 一二三区精品视频| 欧美精品丝袜中出| 午夜久久电影网| 欧美美女直播网站| 日本成人中文字幕在线视频| 欧美一级片在线观看| 蜜桃91丨九色丨蝌蚪91桃色| 精品久久国产老人久久综合| 久久国产精品99精品国产| 精品99久久久久久| 国产aⅴ综合色| 中文字幕一区在线观看视频| 91视频91自| 亚洲在线视频一区| 欧美日本在线一区| 美女爽到高潮91| 国产欧美一区二区精品性色超碰| 成人av电影免费在线播放| 亚洲乱码一区二区三区在线观看| 91福利社在线观看| 日本亚洲最大的色成网站www| 欧美tickling网站挠脚心| 国产精品白丝av| 亚洲品质自拍视频网站| 欧美日韩国产免费一区二区| 久久精品国产亚洲一区二区三区| 久久精品人人做人人综合| 99精品欧美一区二区三区小说| 一区二区在线观看视频在线观看| 91精品国产福利在线观看| 国产传媒一区在线| 夜夜操天天操亚洲| 日韩欧美第一区| 99精品在线观看视频| 日精品一区二区三区| 国产网红主播福利一区二区| 日本高清成人免费播放| 麻豆国产一区二区| 综合激情网...| 欧美mv日韩mv| 99精品欧美一区| 久久99国产精品久久99 | 亚洲成人av福利| 久久久久久久久伊人| 欧美在线免费视屏| 国产精品伊人色| 一卡二卡欧美日韩| 国产亚洲女人久久久久毛片| 91精品1区2区| 国产成人鲁色资源国产91色综| 亚洲成人三级小说| 亚洲欧洲在线观看av| 日韩视频一区在线观看| 91色porny| 黄页视频在线91| 高清国产午夜精品久久久久久| 一区av在线播放| 国产日韩在线不卡| 欧美一级免费大片| 色综合久久中文字幕| 国产精品一区二区三区四区| 亚洲第一搞黄网站| 最近中文字幕一区二区三区| 欧美v日韩v国产v| 欧美日韩高清一区二区三区| www.欧美日韩|