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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 44x_spd_ddr2.c

?? U-boot源碼 ARM7啟動代碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
	 * Make sure I2C controller is initialized	 * before continuing.	 */	/* switch to correct I2C bus */	I2C_SET_BUS(CFG_SPD_BUS_NUM);	i2c_init(CFG_I2C_SPEED, CFG_I2C_SLAVE);	/*------------------------------------------------------------------	 * Clear out the serial presence detect buffers.	 * Perform IIC reads from the dimm.  Fill in the spds.	 * Check to see if the dimm slots are populated	 *-----------------------------------------------------------------*/	get_spd_info(dimm_populated, iic0_dimm_addr, num_dimm_banks);	/*------------------------------------------------------------------	 * Check the memory type for the dimms plugged.	 *-----------------------------------------------------------------*/	check_mem_type(dimm_populated, iic0_dimm_addr, num_dimm_banks);	/*------------------------------------------------------------------	 * Check the frequency supported for the dimms plugged.	 *-----------------------------------------------------------------*/	check_frequency(dimm_populated, iic0_dimm_addr, num_dimm_banks);	/*------------------------------------------------------------------	 * Check the total rank number.	 *-----------------------------------------------------------------*/	check_rank_number(dimm_populated, iic0_dimm_addr, num_dimm_banks);	/*------------------------------------------------------------------	 * Check the voltage type for the dimms plugged.	 *-----------------------------------------------------------------*/	check_voltage_type(dimm_populated, iic0_dimm_addr, num_dimm_banks);	/*------------------------------------------------------------------	 * Program SDRAM controller options 2 register	 * Except Enabling of the memory controller.	 *-----------------------------------------------------------------*/	mfsdram(SDRAM_MCOPT2, val);	mtsdram(SDRAM_MCOPT2,		(val &		 ~(SDRAM_MCOPT2_SREN_MASK | SDRAM_MCOPT2_PMEN_MASK |		   SDRAM_MCOPT2_IPTR_MASK | SDRAM_MCOPT2_XSRP_MASK |		   SDRAM_MCOPT2_ISIE_MASK))		| (SDRAM_MCOPT2_SREN_ENTER | SDRAM_MCOPT2_PMEN_DISABLE |		   SDRAM_MCOPT2_IPTR_IDLE | SDRAM_MCOPT2_XSRP_ALLOW |		   SDRAM_MCOPT2_ISIE_ENABLE));	/*------------------------------------------------------------------	 * Program SDRAM controller options 1 register	 * Note: Does not enable the memory controller.	 *-----------------------------------------------------------------*/	program_copt1(dimm_populated, iic0_dimm_addr, num_dimm_banks);	/*------------------------------------------------------------------	 * Set the SDRAM Controller On Die Termination Register	 *-----------------------------------------------------------------*/	program_codt(dimm_populated, iic0_dimm_addr, num_dimm_banks);	/*------------------------------------------------------------------	 * Program SDRAM refresh register.	 *-----------------------------------------------------------------*/	program_rtr(dimm_populated, iic0_dimm_addr, num_dimm_banks);	/*------------------------------------------------------------------	 * Program SDRAM mode register.	 *-----------------------------------------------------------------*/	program_mode(dimm_populated, iic0_dimm_addr, num_dimm_banks,		     &selected_cas, &write_recovery);	/*------------------------------------------------------------------	 * Set the SDRAM Write Data/DM/DQS Clock Timing Reg	 *-----------------------------------------------------------------*/	mfsdram(SDRAM_WRDTR, val);	mtsdram(SDRAM_WRDTR, (val & ~(SDRAM_WRDTR_LLWP_MASK | SDRAM_WRDTR_WTR_MASK)) |		ddr_wrdtr(SDRAM_WRDTR_LLWP_1_CYC | SDRAM_WRDTR_WTR_90_DEG_ADV));	/*------------------------------------------------------------------	 * Set the SDRAM Clock Timing Register	 *-----------------------------------------------------------------*/	mfsdram(SDRAM_CLKTR, val);	mtsdram(SDRAM_CLKTR, (val & ~SDRAM_CLKTR_CLKP_MASK) |		ddr_clktr(SDRAM_CLKTR_CLKP_0_DEG));	/*------------------------------------------------------------------	 * Program the BxCF registers.	 *-----------------------------------------------------------------*/	program_bxcf(dimm_populated, iic0_dimm_addr, num_dimm_banks);	/*------------------------------------------------------------------	 * Program SDRAM timing registers.	 *-----------------------------------------------------------------*/	program_tr(dimm_populated, iic0_dimm_addr, num_dimm_banks);	/*------------------------------------------------------------------	 * Set the Extended Mode register	 *-----------------------------------------------------------------*/	mfsdram(SDRAM_MEMODE, val);	mtsdram(SDRAM_MEMODE,		(val & ~(SDRAM_MEMODE_DIC_MASK  | SDRAM_MEMODE_DLL_MASK |			 SDRAM_MEMODE_RTT_MASK | SDRAM_MEMODE_DQS_MASK)) |		(SDRAM_MEMODE_DIC_NORMAL | SDRAM_MEMODE_DLL_ENABLE		 | SDRAM_MEMODE_RTT_150OHM | SDRAM_MEMODE_DQS_ENABLE));	/*------------------------------------------------------------------	 * Program Initialization preload registers.	 *-----------------------------------------------------------------*/	program_initplr(dimm_populated, iic0_dimm_addr, num_dimm_banks,			selected_cas, write_recovery);	/*------------------------------------------------------------------	 * Delay to ensure 200usec have elapsed since reset.	 *-----------------------------------------------------------------*/	udelay(400);	/*------------------------------------------------------------------	 * Set the memory queue core base addr.	 *-----------------------------------------------------------------*/	program_memory_queue(dimm_populated, iic0_dimm_addr, num_dimm_banks);	/*------------------------------------------------------------------	 * Program SDRAM controller options 2 register	 * Enable the memory controller.	 *-----------------------------------------------------------------*/	mfsdram(SDRAM_MCOPT2, val);	mtsdram(SDRAM_MCOPT2,		(val & ~(SDRAM_MCOPT2_SREN_MASK | SDRAM_MCOPT2_DCEN_MASK |			 SDRAM_MCOPT2_IPTR_MASK | SDRAM_MCOPT2_ISIE_MASK)) |		(SDRAM_MCOPT2_DCEN_ENABLE | SDRAM_MCOPT2_IPTR_EXECUTE));	/*------------------------------------------------------------------	 * Wait for SDRAM_CFG0_DC_EN to complete.	 *-----------------------------------------------------------------*/	do {		mfsdram(SDRAM_MCSTAT, val);	} while ((val & SDRAM_MCSTAT_MIC_MASK) == SDRAM_MCSTAT_MIC_NOTCOMP);	/* get installed memory size */	dram_size = sdram_memsize();	/* and program tlb entries for this size (dynamic) */	/*	 * Program TLB entries with caches enabled, for best performace	 * while auto-calibrating and ECC generation	 */	program_tlb(0, 0, dram_size, 0);	/*------------------------------------------------------------------	 * DQS calibration.	 *-----------------------------------------------------------------*/	program_DQS_calibration(dimm_populated, iic0_dimm_addr, num_dimm_banks);#ifdef CONFIG_DDR_ECC	/*------------------------------------------------------------------	 * If ecc is enabled, initialize the parity bits.	 *-----------------------------------------------------------------*/	program_ecc(dimm_populated, iic0_dimm_addr, num_dimm_banks, 0);#endif	/*	 * Now after initialization (auto-calibration and ECC generation)	 * remove the TLB entries with caches enabled and program again with	 * desired cache functionality	 */	remove_tlb(0, dram_size);	program_tlb(0, 0, dram_size, MY_TLB_WORD2_I_ENABLE);	ppc440sp_sdram_register_dump();	return dram_size;}static void get_spd_info(unsigned long *dimm_populated,			 unsigned char *iic0_dimm_addr,			 unsigned long num_dimm_banks){	unsigned long dimm_num;	unsigned long dimm_found;	unsigned char num_of_bytes;	unsigned char total_size;	dimm_found = FALSE;	for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {		num_of_bytes = 0;		total_size = 0;		num_of_bytes = spd_read(iic0_dimm_addr[dimm_num], 0);		debug("\nspd_read(0x%x) returned %d\n",		      iic0_dimm_addr[dimm_num], num_of_bytes);		total_size = spd_read(iic0_dimm_addr[dimm_num], 1);		debug("spd_read(0x%x) returned %d\n",		      iic0_dimm_addr[dimm_num], total_size);		if ((num_of_bytes != 0) && (total_size != 0)) {			dimm_populated[dimm_num] = TRUE;			dimm_found = TRUE;			debug("DIMM slot %lu: populated\n", dimm_num);		} else {			dimm_populated[dimm_num] = FALSE;			debug("DIMM slot %lu: Not populated\n", dimm_num);		}	}	if (dimm_found == FALSE) {		printf("ERROR - No memory installed. Install a DDR-SDRAM DIMM.\n\n");		spd_ddr_init_hang ();	}}void board_add_ram_info(int use_default){	PPC440_SYS_INFO board_cfg;	u32 val;	if (is_ecc_enabled())		puts(" (ECC");	else		puts(" (ECC not");	get_sys_info(&board_cfg);	mfsdr(SDR0_DDR0, val);	val = MULDIV64((board_cfg.freqPLB), SDR0_DDR0_DDRM_DECODE(val), 1);	printf(" enabled, %d MHz", (val * 2) / 1000000);	mfsdram(SDRAM_MMODE, val);	val = (val & SDRAM_MMODE_DCL_MASK) >> 4;	printf(", CL%d)", val);}/*------------------------------------------------------------------ * For the memory DIMMs installed, this routine verifies that they * really are DDR specific DIMMs. *-----------------------------------------------------------------*/static void check_mem_type(unsigned long *dimm_populated,			   unsigned char *iic0_dimm_addr,			   unsigned long num_dimm_banks){	unsigned long dimm_num;	unsigned long dimm_type;	for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {		if (dimm_populated[dimm_num] == TRUE) {			dimm_type = spd_read(iic0_dimm_addr[dimm_num], 2);			switch (dimm_type) {			case 1:				printf("ERROR: Standard Fast Page Mode DRAM DIMM detected in "				       "slot %d.\n", (unsigned int)dimm_num);				printf("Only DDR and DDR2 SDRAM DIMMs are supported.\n");				printf("Replace the DIMM module with a supported DIMM.\n\n");				spd_ddr_init_hang ();				break;			case 2:				printf("ERROR: EDO DIMM detected in slot %d.\n",				       (unsigned int)dimm_num);				printf("Only DDR and DDR2 SDRAM DIMMs are supported.\n");				printf("Replace the DIMM module with a supported DIMM.\n\n");				spd_ddr_init_hang ();				break;			case 3:				printf("ERROR: Pipelined Nibble DIMM detected in slot %d.\n",				       (unsigned int)dimm_num);				printf("Only DDR and DDR2 SDRAM DIMMs are supported.\n");				printf("Replace the DIMM module with a supported DIMM.\n\n");				spd_ddr_init_hang ();				break;			case 4:				printf("ERROR: SDRAM DIMM detected in slot %d.\n",				       (unsigned int)dimm_num);				printf("Only DDR and DDR2 SDRAM DIMMs are supported.\n");				printf("Replace the DIMM module with a supported DIMM.\n\n");				spd_ddr_init_hang ();				break;			case 5:				printf("ERROR: Multiplexed ROM DIMM detected in slot %d.\n",				       (unsigned int)dimm_num);				printf("Only DDR and DDR2 SDRAM DIMMs are supported.\n");				printf("Replace the DIMM module with a supported DIMM.\n\n");				spd_ddr_init_hang ();				break;			case 6:				printf("ERROR: SGRAM DIMM detected in slot %d.\n",				       (unsigned int)dimm_num);				printf("Only DDR and DDR2 SDRAM DIMMs are supported.\n");				printf("Replace the DIMM module with a supported DIMM.\n\n");				spd_ddr_init_hang ();				break;			case 7:				debug("DIMM slot %d: DDR1 SDRAM detected\n", dimm_num);				dimm_populated[dimm_num] = SDRAM_DDR1;				break;			case 8:				debug("DIMM slot %d: DDR2 SDRAM detected\n", dimm_num);				dimm_populated[dimm_num] = SDRAM_DDR2;				break;			default:				printf("ERROR: Unknown DIMM detected in slot %d.\n",				       (unsigned int)dimm_num);				printf("Only DDR1 and DDR2 SDRAM DIMMs are supported.\n");				printf("Replace the DIMM module with a supported DIMM.\n\n");				spd_ddr_init_hang ();				break;			}		}	}	for (dimm_num = 1; dimm_num < num_dimm_banks; dimm_num++) {		if ((dimm_populated[dimm_num-1] != SDRAM_NONE)		    && (dimm_populated[dimm_num]   != SDRAM_NONE)		    && (dimm_populated[dimm_num-1] != dimm_populated[dimm_num])) {			printf("ERROR: DIMM's DDR1 and DDR2 type can not be mixed.\n");			spd_ddr_init_hang ();		}	}}/*------------------------------------------------------------------ * For the memory DIMMs installed, this routine verifies that * frequency previously calculated is supported. *-----------------------------------------------------------------*/static void check_frequency(unsigned long *dimm_populated,			    unsigned char *iic0_dimm_addr,			    unsigned long num_dimm_banks){	unsigned long dimm_num;	unsigned long tcyc_reg;	unsigned long cycle_time;	unsigned long calc_cycle_time;	unsigned long sdram_freq;	unsigned long sdr_ddrpll;	PPC440_SYS_INFO board_cfg;	/*------------------------------------------------------------------	 * Get the board configuration info.	 *-----------------------------------------------------------------*/	get_sys_info(&board_cfg);	mfsdr(SDR0_DDR0, sdr_ddrpll);	sdram_freq = ((board_cfg.freqPLB) * SDR0_DDR0_DDRM_DECODE(sdr_ddrpll));	/*	 * calc_cycle_time is calculated from DDR frequency set by board/chip	 * and is expressed in multiple of 10 picoseconds	 * to match the way DIMM cycle time is calculated below.	 */	calc_cycle_time = MULDIV64(ONE_BILLION, 100, sdram_freq);	for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {		if (dimm_populated[dimm_num] != SDRAM_NONE) {			tcyc_reg = spd_read(iic0_dimm_addr[dimm_num], 9);			/*			 * Byte 9, Cycle time for CAS Latency=X, is split into two nibbles:			 * the higher order nibble (bits 4-7) designates the cycle time			 * to a granularity of 1ns;			 * the value presented by the lower order nibble (bits 0-3)			 * has a granularity of .1ns and is added to the value designated			 * by the higher nibble. In addition, four lines of the lower order			 * nibble are assigned to support +.25,+.33, +.66 and +.75.			 */			 /* Convert from hex to decimal */			if ((tcyc_reg & 0x0F) == 0x0D)				cycle_time = (((tcyc_reg & 0xF0) >> 4) * 100) + 75;			else if ((tcyc_reg & 0x0F) == 0x0C)				cycle_time = (((tcyc_reg & 0xF0) >> 4) * 100) + 66;			else if ((tcyc_reg & 0x0F) == 0x0B)				cycle_time = (((tcyc_reg & 0xF0) >> 4) * 100) + 33;			else if ((tcyc_reg & 0x0F) == 0x0A)				cycle_time = (((tcyc_reg & 0xF0) >> 4) * 100) + 25;			else				cycle_time = (((tcyc_reg & 0xF0) >> 4) * 100) +					((tcyc_reg & 0x0F)*10);			debug("cycle_time=%d [10 picoseconds]\n", cycle_time);			if  (cycle_time > (calc_cycle_time + 10)) {				/*				 * the provided sdram cycle_time is too small				 * for the available DIMM cycle_time.				 * The additionnal 100ps is here to accept a small incertainty.				 */				printf("ERROR: DRAM DIMM detected with cycle_time %d ps in "				       "slot %d \n while calculated cycle time is %d ps.\n",				       (unsigned int)(cycle_time*10),				       (unsigned int)dimm_num,				       (unsigned int)(calc_cycle_time*10));				printf("Replace the DIMM, or change DDR frequency via "				       "strapping bits.\n\n");				spd_ddr_init_hang ();			}		}	}}/*------------------------------------------------------------------ * For the memory DIMMs installed, this routine verifies two * ranks/banks maximum are availables. *-----------------------------------------------------------------*/static void check_rank_number(unsigned long *dimm_populated,			      unsigned char *iic0_dimm_addr,			      unsigned long num_dimm_banks){	unsigned long dimm_num;	unsigned long dimm_rank;	unsigned long total_rank = 0;	for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {		if (dimm_populated[dimm_num] != SDRAM_NONE) {			dimm_rank = spd_read(iic0_dimm_addr[dimm_num], 5);			if (((unsigned long)spd_read(iic0_dimm_addr[dimm_num], 2)) == 0x08)				dimm_rank = (dimm_rank & 0x0F) +1;			else				dimm_rank = dimm_rank & 0x0F;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产精品黑人久久久| 17c精品麻豆一区二区免费| 久久九九久精品国产免费直播| 国产精品国产三级国产| 青青青伊人色综合久久| 色一情一伦一子一伦一区| 久久这里只精品最新地址| 亚洲一区二区三区四区不卡| 成人永久看片免费视频天堂| 日韩一级完整毛片| 亚洲成人在线免费| 99精品久久只有精品| 国产人伦精品一区二区| 久久精品72免费观看| 欧美日韩在线播放一区| 亚洲色图在线看| 99热99精品| 欧美国产一区在线| 国产一区二区三区四区在线观看| 欧美日韩国产一级二级| 一区二区三区日韩欧美| 高清国产一区二区| 国产日韩欧美精品电影三级在线| 激情五月激情综合网| 欧美一区二区人人喊爽| 日日摸夜夜添夜夜添国产精品 | 色综合咪咪久久| 国产精品视频免费看| 国产成人在线视频网站| 国产亚洲欧洲997久久综合 | 亚洲图片你懂的| www.久久精品| 亚洲四区在线观看| 一本一本大道香蕉久在线精品| 国产日产欧美一区| 国产aⅴ精品一区二区三区色成熟| 精品国产91九色蝌蚪| 韩国三级电影一区二区| 久久久亚洲国产美女国产盗摄 | 欧美一区二区免费视频| 日日欢夜夜爽一区| 日韩情涩欧美日韩视频| 激情综合五月婷婷| 国产亚洲精品福利| 99久久精品国产麻豆演员表| 亚洲日本一区二区三区| 91精彩视频在线观看| 亚洲综合在线电影| 欧美一区二区高清| 国产伦理精品不卡| 国产精品毛片久久久久久久| 91电影在线观看| 日本不卡高清视频| 国产日韩欧美不卡在线| 91视频在线看| 日韩国产欧美在线视频| 久久久一区二区三区| 91视频你懂的| 日韩影院精彩在线| 久久精品无码一区二区三区| 91女人视频在线观看| 天天影视涩香欲综合网| 欧美精品一区二区三区高清aⅴ| 国产成人综合自拍| 一区二区三区国产精华| 欧美草草影院在线视频| 99久久99久久精品免费观看| 午夜电影久久久| 国产精品天天摸av网| 欧美日韩在线电影| 丁香激情综合国产| 午夜影视日本亚洲欧洲精品| 久久精品亚洲精品国产欧美| 欧美日韩中文字幕一区| 国产sm精品调教视频网站| 亚洲国产精品久久久久秋霞影院 | 欧美在线视频不卡| 国产乱码精品一区二区三区五月婷| 1区2区3区精品视频| 日韩丝袜美女视频| 在线看一区二区| 国产精品一区二区果冻传媒| 国产一区二区成人久久免费影院 | 欧美xxxxxxxxx| 91在线国内视频| 久久99最新地址| 亚洲自拍偷拍麻豆| 国产精品传媒视频| 国产人久久人人人人爽| 色欧美片视频在线观看| 国产精品一区二区在线播放| 午夜久久久影院| 亚洲欧美日韩国产综合在线| 久久蜜桃一区二区| 欧美一区二区在线播放| 日本高清不卡在线观看| 波多野结衣的一区二区三区| 狠狠色综合日日| 日韩av在线免费观看不卡| 一区在线观看视频| 中文字幕精品三区| 久久九九影视网| 精品国产乱码91久久久久久网站| 欧美精品粉嫩高潮一区二区| 91久久奴性调教| 在线日韩国产精品| 色一情一乱一乱一91av| 99久久精品国产精品久久| 国产成人精品亚洲777人妖| 国模少妇一区二区三区| 精东粉嫩av免费一区二区三区| 日韩综合小视频| 午夜视频在线观看一区| 亚洲成人综合在线| 午夜欧美2019年伦理| 天天色图综合网| 日韩高清不卡一区二区三区| 日本视频一区二区| 另类小说图片综合网| 久久精品国产久精国产| 久久草av在线| 国产精品羞羞答答xxdd| 国产很黄免费观看久久| 福利一区福利二区| 一本到三区不卡视频| 在线观看视频一区二区| 欧美日韩国产在线播放网站| 91精品国产欧美一区二区18| 日韩一区二区免费视频| 精品人伦一区二区色婷婷| 久久综合给合久久狠狠狠97色69| 久久精品一区二区| 亚洲欧美国产毛片在线| 亚洲国产一区二区a毛片| 日本亚洲三级在线| 国产精品香蕉一区二区三区| 99久久精品国产一区二区三区| 日本电影欧美片| 日韩一区二区在线看| 国产日产精品1区| 亚洲一线二线三线视频| 秋霞影院一区二区| 成人午夜短视频| 欧美日韩一区中文字幕| 亚洲精品一区二区三区香蕉| 国产精品久线观看视频| 亚洲h动漫在线| 国产美女精品在线| 日本韩国欧美在线| 欧美精品一区男女天堂| 亚洲欧美国产77777| 男女性色大片免费观看一区二区 | 日本一区二区久久| 高清不卡一区二区在线| 91麻豆国产在线观看| 欧美日韩免费一区二区三区| 精品毛片乱码1区2区3区| 中国av一区二区三区| 午夜精品福利一区二区三区av| 国内成人自拍视频| 色婷婷狠狠综合| 久久精品人人做人人爽人人| 亚洲一区二区三区中文字幕在线| 久久精品国产99久久6| 色天天综合色天天久久| 久久久久亚洲综合| 亚洲成人动漫在线观看| 高清久久久久久| 精品国产伦一区二区三区观看体验| 亚洲色图都市小说| 大胆亚洲人体视频| 日韩一区二区三区四区五区六区| 日韩美女精品在线| 国产成人在线影院| 国产欧美精品一区二区色综合朱莉| 国产欧美日韩一区二区三区在线观看| 午夜精品一区二区三区免费视频 | 欧美在线free| 欧美国产日本韩| 国模冰冰炮一区二区| 在线综合亚洲欧美在线视频| 亚洲欧美经典视频| 国产精品123| 欧美一区二区在线观看| 亚洲国产精品嫩草影院| 91污在线观看| 亚洲欧洲精品一区二区精品久久久| 美腿丝袜亚洲色图| 91精品国产色综合久久不卡电影| 亚洲在线成人精品| 色视频成人在线观看免| 国产精品美女久久久久久2018 | 欧美tickling网站挠脚心| 亚洲超丰满肉感bbw| 欧美私人免费视频| 一区二区久久久| 欧洲一区二区三区在线| 亚洲一二三专区| 欧美日韩美女一区二区| 亚洲国产成人高清精品|