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

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

?? denali_ecc.c

?? U-boot latest tarball
?? C
字號(hào):
/* * (C) Copyright 2007 * Developed for DENX Software Engineering GmbH. * * Author: Pavel Kolesnikov <concord@emcraft.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 *//* define DEBUG for debugging output (obviously ;-)) */#if 0#define DEBUG#endif#include <common.h>#include <watchdog.h>#if defined(CONFIG_440EPX) || defined(CONFIG_440GRX)#include <post.h>#if CONFIG_POST & CONFIG_SYS_POST_ECC/* * MEMORY ECC test * * This test performs the checks ECC facility of memory. */#include <asm/processor.h>#include <asm/mmu.h>#include <asm/io.h>#include <ppc440.h>DECLARE_GLOBAL_DATA_PTR;const static uint8_t syndrome_codes[] = {	0xF4, 0XF1, 0XEC, 0XEA, 0XE9, 0XE6, 0XE5, 0XE3,	0XDC, 0XDA, 0XD9, 0XD6, 0XD5, 0XD3, 0XCE, 0XCB,	0xB5, 0XB0, 0XAD, 0XAB, 0XA8, 0XA7, 0XA4, 0XA2,	0X9D, 0X9B, 0X98, 0X97, 0X94, 0X92, 0X8F, 0X8A,	0x75, 0x70, 0X6D, 0X6B, 0X68, 0X67, 0X64, 0X62,	0X5E, 0X5B, 0X58, 0X57, 0X54, 0X52, 0X4F, 0X4A,	0x34, 0x31, 0X2C, 0X2A, 0X29, 0X26, 0X25, 0X23,	0X1C, 0X1A, 0X19, 0X16, 0X15, 0X13, 0X0E, 0X0B,	0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01};#define ECC_START_ADDR		0x10#define ECC_STOP_ADDR		0x2000#define ECC_PATTERN		0x01010101#define ECC_PATTERN_CORR	0x11010101#define ECC_PATTERN_UNCORR	0x61010101inline static void disable_ecc(void){	uint32_t value;	sync(); /* Wait for any pending memory accesses to complete. */	mfsdram(DDR0_22, value);	mtsdram(DDR0_22, (value & ~DDR0_22_CTRL_RAW_MASK)		| DDR0_22_CTRL_RAW_ECC_DISABLE);}inline static void clear_and_enable_ecc(void){	uint32_t value;	sync(); /* Wait for any pending memory accesses to complete. */	mfsdram(DDR0_00, value);	mtsdram(DDR0_00, value | DDR0_00_INT_ACK_ALL);	mfsdram(DDR0_22, value);	mtsdram(DDR0_22, (value & ~DDR0_22_CTRL_RAW_MASK)		| DDR0_22_CTRL_RAW_ECC_ENABLE);}static uint32_t get_ecc_status(void){	uint32_t int_status;#if defined(DEBUG)	uint8_t syndrome;	uint32_t hdata, ldata, haddr, laddr;	uint32_t value;#endif	mfsdram(DDR0_00, int_status);	int_status &= DDR0_00_INT_STATUS_MASK;#if defined(DEBUG)	if (int_status & (DDR0_00_INT_STATUS_BIT0 | DDR0_00_INT_STATUS_BIT1)) {		mfsdram(DDR0_32, laddr);		mfsdram(DDR0_33, haddr);		haddr &= 0x00000001;		if (int_status & DDR0_00_INT_STATUS_BIT1)			debug("Multiple accesses");		else			debug("A single access");		debug(" outside the defined physical memory space detected\n"		      "        addr = 0x%01x%08x\n", haddr, laddr);	}	if (int_status & (DDR0_00_INT_STATUS_BIT2 | DDR0_00_INT_STATUS_BIT3)) {		unsigned int bit;		mfsdram(DDR0_23, value);		syndrome = (value >> 16) & 0xff;		for (bit = 0; bit < sizeof(syndrome_codes); bit++)			if (syndrome_codes[bit] == syndrome)				break;		mfsdram(DDR0_38, laddr);		mfsdram(DDR0_39, haddr);		haddr &= 0x00000001;		mfsdram(DDR0_40, ldata);		mfsdram(DDR0_41, hdata);		if (int_status & DDR0_00_INT_STATUS_BIT3)			debug("Multiple correctable ECC events");		else			debug("Single correctable ECC event");		debug(" detected\n        0x%01x%08x - 0x%08x%08x, bit - %d\n",		      haddr, laddr, hdata, ldata, bit);	}	if (int_status & (DDR0_00_INT_STATUS_BIT4 | DDR0_00_INT_STATUS_BIT5)) {		mfsdram(DDR0_23, value);		syndrome = (value >> 8) & 0xff;		mfsdram(DDR0_34, laddr);		mfsdram(DDR0_35, haddr);		haddr &= 0x00000001;		mfsdram(DDR0_36, ldata);		mfsdram(DDR0_37, hdata);		if (int_status & DDR0_00_INT_STATUS_BIT5)			debug("Multiple uncorrectable ECC events");		else			debug("Single uncorrectable ECC event");		debug(" detected\n        0x%01x%08x - 0x%08x%08x, "		      "syndrome - 0x%02x\n",		      haddr, laddr, hdata, ldata, syndrome);	}	if (int_status & DDR0_00_INT_STATUS_BIT6)		debug("DRAM initialization complete\n");#endif /* defined(DEBUG) */	return int_status;}static int test_ecc(uint32_t ecc_addr){	uint32_t value;	volatile uint32_t *const ecc_mem = (volatile uint32_t *)ecc_addr;	int ret = 0;	WATCHDOG_RESET();	debug("Entering test_ecc(0x%08x)\n", ecc_addr);	/* Set up correct ECC in memory */	disable_ecc();	clear_and_enable_ecc();	out_be32(ecc_mem, ECC_PATTERN);	out_be32(ecc_mem + 1, ECC_PATTERN);	/* Verify no ECC error reading back */	value = in_be32(ecc_mem);	disable_ecc();	if (ECC_PATTERN != value) {		debug("Data read error (no-error case): "		      "expected 0x%08x, read 0x%08x\n", ECC_PATTERN, value);		ret = 1;	}	value = get_ecc_status();	if (0x00000000 != value) {		/* Expected no ECC status reported */		debug("get_ecc_status(): expected 0x%08x, got 0x%08x\n",		      0x00000000, value);		ret = 1;	}	/* Test for correctable error by creating a one-bit error */	out_be32(ecc_mem, ECC_PATTERN_CORR);	clear_and_enable_ecc();	value = in_be32(ecc_mem);	disable_ecc();	/* Test that the corrected data was read */	if (ECC_PATTERN != value) {		debug("Data read error (correctable-error case): "		      "expected 0x%08x, read 0x%08x\n", ECC_PATTERN, value);		ret = 1;	}	value = get_ecc_status();	if ((DDR0_00_INT_STATUS_BIT2 | DDR0_00_INT_STATUS_BIT7) != value) {		/* Expected a single correctable error reported */		debug("get_ecc_status(): expected 0x%08x, got 0x%08x\n",		      DDR0_00_INT_STATUS_BIT2, value);		ret = 1;	}	/* Test for uncorrectable error by creating a two-bit error */	out_be32(ecc_mem, ECC_PATTERN_UNCORR);	clear_and_enable_ecc();	value = in_be32(ecc_mem);	disable_ecc();	/* Test that the corrected data was read */	if (ECC_PATTERN_UNCORR != value) {		debug("Data read error (uncorrectable-error case): "		      "expected 0x%08x, read 0x%08x\n", ECC_PATTERN_UNCORR,		      value);		ret = 1;	}	value = get_ecc_status();	if ((DDR0_00_INT_STATUS_BIT4 | DDR0_00_INT_STATUS_BIT7) != value) {		/* Expected a single uncorrectable error reported */		debug("get_ecc_status(): expected 0x%08x, got 0x%08x\n",		      DDR0_00_INT_STATUS_BIT4, value);		ret = 1;	}	/* Remove error from SDRAM and enable ECC. */	out_be32(ecc_mem, ECC_PATTERN);	clear_and_enable_ecc();	return ret;}int ecc_post_test(int flags){	int ret = 0;	uint32_t value;	uint32_t iaddr;	mfsdram(DDR0_22, value);	if (0x3 != DDR0_22_CTRL_RAW_DECODE(value)) {		debug("SDRAM ECC not enabled, skipping ECC POST.\n");		return 0;	}	/* Mask all interrupts. */	mfsdram(DDR0_01, value);	mtsdram(DDR0_01, (value & ~DDR0_01_INT_MASK_MASK)		| DDR0_01_INT_MASK_ALL_OFF);	for (iaddr = ECC_START_ADDR; iaddr <= ECC_STOP_ADDR; iaddr += iaddr) {		ret = test_ecc(iaddr);		if (ret)			break;	}	/*	 * Clear possible errors resulting from ECC testing.  (If not done, we	 * we could get an interrupt later on when exceptions are enabled.)	 */	set_mcsr(get_mcsr());	debug("ecc_post_test() returning %d\n", ret);	return ret;}#endif /* CONFIG_POST & CONFIG_SYS_POST_ECC */#endif /* defined(CONFIG_440EPX) || defined(CONFIG_440GRX) */

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久99精品久久久久久| 成人免费看的视频| 中文字幕在线一区| 宅男在线国产精品| 97精品电影院| 国产福利91精品一区| 午夜一区二区三区视频| 中文字幕日韩一区二区| 欧美不卡视频一区| 欧美男男青年gay1069videost| 国v精品久久久网| 麻豆一区二区三| 亚洲第一福利视频在线| 亚洲视频中文字幕| 中文字幕欧美国产| 久久久精品黄色| 久久你懂得1024| 欧美成人a在线| 91精品国产综合久久福利| 色拍拍在线精品视频8848| 波多野结衣在线一区| 国产一区二区伦理| 韩国精品久久久| 久久精品国产精品青草| 日韩成人一级大片| 五月天视频一区| 亚洲国产成人tv| 亚洲综合精品久久| 亚洲一区二区三区中文字幕| 亚洲欧美日韩国产综合在线| 欧美国产精品专区| 国产精品麻豆视频| 国产精品久久久久婷婷| 中文字幕在线播放不卡一区| 中文字幕精品三区| 国产精品高潮呻吟| 怡红院av一区二区三区| 亚洲黄色性网站| 亚洲福中文字幕伊人影院| 精品一区二区三区欧美| 国内外精品视频| 激情深爱一区二区| 国产成人自拍网| 99久久精品免费观看| 色综合久久久久综合体| 欧美在线三级电影| 欧美喷水一区二区| 精品国产一区二区三区久久久蜜月 | 亚洲色图制服丝袜| 一区二区视频在线看| 伊人夜夜躁av伊人久久| 亚洲va欧美va人人爽| 蜜桃av一区二区| 国产成人亚洲综合色影视| 不卡一区二区三区四区| 91极品视觉盛宴| 日韩亚洲欧美在线| 国产女同互慰高潮91漫画| 国产精品无圣光一区二区| 一区二区三区在线观看国产| 首页国产丝袜综合| 国产精品一级片在线观看| 成人不卡免费av| 欧美三级日韩三级| 日韩免费福利电影在线观看| 欧美激情中文不卡| 亚洲一区二区三区自拍| 久久机这里只有精品| www.欧美日韩国产在线| 欧美精选在线播放| 国产欧美日韩在线| 亚洲国产精品欧美一二99| 狠狠色综合色综合网络| 99久久精品国产导航| 日韩亚洲欧美一区| 亚洲天堂网中文字| 久久精品国产99国产| av在线不卡网| 欧美成人aa大片| 亚洲精品视频一区| 国产一区二区三区免费看| 91日韩精品一区| 精品国产乱子伦一区| 亚洲欧美日韩国产综合在线 | 99精品视频在线观看| 欧美精品日日鲁夜夜添| 中文字幕 久热精品 视频在线 | 欧美三电影在线| 久久久精品中文字幕麻豆发布| 亚洲精品国产a久久久久久| 黑人巨大精品欧美一区| 91成人在线免费观看| 国产亚洲精品bt天堂精选| 亚洲成人av一区二区| caoporn国产一区二区| 精品久久人人做人人爰| 性欧美大战久久久久久久久| av在线播放一区二区三区| 一区二区激情视频| 国产精品一区二区无线| 欧美精品自拍偷拍动漫精品| 成人欧美一区二区三区小说| 极品美女销魂一区二区三区免费 | 日韩欧美黄色影院| 亚洲自拍偷拍网站| 99久久婷婷国产| 欧美国产日韩一二三区| 狠狠色丁香婷婷综合久久片| 欧美美女激情18p| 一区二区三区欧美日韩| 岛国一区二区在线观看| 欧美mv日韩mv国产网站app| 午夜亚洲福利老司机| 日本丰满少妇一区二区三区| 中文字幕一区二区三区四区| 国产成人精品影视| 2020日本不卡一区二区视频| 蜜桃一区二区三区四区| 91麻豆精品国产| 五月天中文字幕一区二区| 欧美三级电影网| 亚洲风情在线资源站| 在线欧美小视频| 亚洲自拍偷拍网站| 在线观看av不卡| 亚洲国产日韩精品| 欧美丝袜丝交足nylons| 亚洲国产欧美日韩另类综合 | 欧美色视频一区| 一区二区三国产精华液| 在线免费观看日本欧美| 一区二区三区在线观看网站| 欧美综合天天夜夜久久| 亚洲成人免费观看| 欧美久久久久久久久中文字幕| 丝袜美腿一区二区三区| 69av一区二区三区| 免费在线看成人av| 精品免费一区二区三区| 国产一区免费电影| 中文字幕乱码久久午夜不卡| 99视频超级精品| 一区二区三区在线免费观看| 欧美三级电影精品| 日本免费在线视频不卡一不卡二| 欧美一二三区在线| 国内精品视频一区二区三区八戒| 久久久久青草大香线综合精品| 东方aⅴ免费观看久久av| 国产精品国产三级国产专播品爱网 | 亚洲综合在线观看视频| 在线视频你懂得一区二区三区| 亚洲大片精品永久免费| 欧美一区永久视频免费观看| 蜜桃久久av一区| 亚洲国产精品t66y| 在线观看欧美黄色| 日韩不卡一区二区三区 | 国产精品美女久久久久久| 97超碰欧美中文字幕| 亚洲一区二区不卡免费| 精品视频色一区| 狠狠色狠狠色综合| 中文字幕综合网| 日韩一区二区三区三四区视频在线观看 | 国产精品无码永久免费888| 91美女蜜桃在线| 日韩成人免费看| 亚洲国产精品成人综合| 欧美日韩一区高清| 国产在线不卡一卡二卡三卡四卡| 亚洲欧美一区二区视频| 337p亚洲精品色噜噜狠狠| 国产主播一区二区| 亚洲精品欧美激情| 久久亚洲捆绑美女| 91成人在线免费观看| 国产中文一区二区三区| 亚洲综合小说图片| 国产欧美中文在线| 欧美日韩精品一区二区天天拍小说| 国产一区二区在线观看免费| 亚洲免费色视频| www日韩大片| 欧美亚洲国产一区二区三区| 国产毛片精品视频| 午夜欧美一区二区三区在线播放| 国产日韩欧美在线一区| 欧美日韩综合在线| kk眼镜猥琐国模调教系列一区二区| 日韩黄色小视频| 一区二区三区四区乱视频| 久久久.com| 欧美一级二级三级乱码| 日本精品免费观看高清观看| 国产很黄免费观看久久| 麻豆中文一区二区| 亚洲18女电影在线观看| 亚洲精品免费播放| 国产日韩欧美不卡|