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

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

?? 44x_spd_ddr2.c

?? U-boot源碼 ARM7啟動代碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
	unsigned long sdram_freq;	unsigned long sdr_ddrpll;	unsigned long val;	/*------------------------------------------------------------------	 * Get the board configuration info.	 *-----------------------------------------------------------------*/	get_sys_info(&board_cfg);	/*------------------------------------------------------------------	 * Set the SDRAM Refresh Timing Register, SDRAM_RTR	 *-----------------------------------------------------------------*/	mfsdr(SDR0_DDR0, sdr_ddrpll);	sdram_freq = ((board_cfg.freqPLB) * SDR0_DDR0_DDRM_DECODE(sdr_ddrpll));	max_refresh_rate = 0;	for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {		if (dimm_populated[dimm_num] != SDRAM_NONE) {			refresh_rate_type = spd_read(iic0_dimm_addr[dimm_num], 12);			refresh_rate_type &= 0x7F;			switch (refresh_rate_type) {			case 0:				refresh_rate =  15625;				break;			case 1:				refresh_rate =   3906;				break;			case 2:				refresh_rate =   7812;				break;			case 3:				refresh_rate =  31250;				break;			case 4:				refresh_rate =  62500;				break;			case 5:				refresh_rate = 125000;				break;			default:				refresh_rate = 0;				printf("ERROR: DIMM %d unsupported refresh rate/type.\n",				       (unsigned int)dimm_num);				printf("Replace the DIMM module with a supported DIMM.\n\n");				spd_ddr_init_hang ();				break;			}			max_refresh_rate = max(max_refresh_rate, refresh_rate);		}	}	rint = MULDIV64(sdram_freq, max_refresh_rate, ONE_BILLION);	mfsdram(SDRAM_RTR, val);	mtsdram(SDRAM_RTR, (val & ~SDRAM_RTR_RINT_MASK) |		(SDRAM_RTR_RINT_ENCODE(rint)));}/*------------------------------------------------------------------ * This routine programs the SDRAM_TRx registers. *-----------------------------------------------------------------*/static void program_tr(unsigned long *dimm_populated,		       unsigned char *iic0_dimm_addr,		       unsigned long num_dimm_banks){	unsigned long dimm_num;	unsigned long sdram_ddr1;	unsigned long t_rp_ns;	unsigned long t_rcd_ns;	unsigned long t_rrd_ns;	unsigned long t_ras_ns;	unsigned long t_rc_ns;	unsigned long t_rfc_ns;	unsigned long t_wpc_ns;	unsigned long t_wtr_ns;	unsigned long t_rpc_ns;	unsigned long t_rp_clk;	unsigned long t_rcd_clk;	unsigned long t_rrd_clk;	unsigned long t_ras_clk;	unsigned long t_rc_clk;	unsigned long t_rfc_clk;	unsigned long t_wpc_clk;	unsigned long t_wtr_clk;	unsigned long t_rpc_clk;	unsigned long sdtr1, sdtr2, sdtr3;	unsigned long ddr_check;	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));	/*------------------------------------------------------------------	 * Handle the timing.  We need to find the worst case timing of all	 * the dimm modules installed.	 *-----------------------------------------------------------------*/	t_rp_ns = 0;	t_rrd_ns = 0;	t_rcd_ns = 0;	t_ras_ns = 0;	t_rc_ns = 0;	t_rfc_ns = 0;	t_wpc_ns = 0;	t_wtr_ns = 0;	t_rpc_ns = 0;	sdram_ddr1 = TRUE;	/* loop through all the DIMM slots on the board */	for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {		/* If a dimm is installed in a particular slot ... */		if (dimm_populated[dimm_num] != SDRAM_NONE) {			if (dimm_populated[dimm_num] == SDRAM_DDR2)				sdram_ddr1 = TRUE;			else				sdram_ddr1 = FALSE;			t_rcd_ns = max(t_rcd_ns, spd_read(iic0_dimm_addr[dimm_num], 29) >> 2);			t_rrd_ns = max(t_rrd_ns, spd_read(iic0_dimm_addr[dimm_num], 28) >> 2);			t_rp_ns  = max(t_rp_ns,  spd_read(iic0_dimm_addr[dimm_num], 27) >> 2);			t_ras_ns = max(t_ras_ns, spd_read(iic0_dimm_addr[dimm_num], 30));			t_rc_ns  = max(t_rc_ns,  spd_read(iic0_dimm_addr[dimm_num], 41));			t_rfc_ns = max(t_rfc_ns, spd_read(iic0_dimm_addr[dimm_num], 42));		}	}	/*------------------------------------------------------------------	 * Set the SDRAM Timing Reg 1, SDRAM_TR1	 *-----------------------------------------------------------------*/	mfsdram(SDRAM_SDTR1, sdtr1);	sdtr1 &= ~(SDRAM_SDTR1_LDOF_MASK | SDRAM_SDTR1_RTW_MASK |		   SDRAM_SDTR1_WTWO_MASK | SDRAM_SDTR1_RTRO_MASK);	/* default values */	sdtr1 |= SDRAM_SDTR1_LDOF_2_CLK;	sdtr1 |= SDRAM_SDTR1_RTW_2_CLK;	/* normal operations */	sdtr1 |= SDRAM_SDTR1_WTWO_0_CLK;	sdtr1 |= SDRAM_SDTR1_RTRO_1_CLK;	mtsdram(SDRAM_SDTR1, sdtr1);	/*------------------------------------------------------------------	 * Set the SDRAM Timing Reg 2, SDRAM_TR2	 *-----------------------------------------------------------------*/	mfsdram(SDRAM_SDTR2, sdtr2);	sdtr2 &= ~(SDRAM_SDTR2_RCD_MASK  | SDRAM_SDTR2_WTR_MASK |		   SDRAM_SDTR2_XSNR_MASK | SDRAM_SDTR2_WPC_MASK |		   SDRAM_SDTR2_RPC_MASK  | SDRAM_SDTR2_RP_MASK  |		   SDRAM_SDTR2_RRD_MASK);	/*	 * convert t_rcd from nanoseconds to ddr clocks	 * round up if necessary	 */	t_rcd_clk = MULDIV64(sdram_freq, t_rcd_ns, ONE_BILLION);	ddr_check = MULDIV64(ONE_BILLION, t_rcd_clk, t_rcd_ns);	if (sdram_freq != ddr_check)		t_rcd_clk++;	switch (t_rcd_clk) {	case 0:	case 1:		sdtr2 |= SDRAM_SDTR2_RCD_1_CLK;		break;	case 2:		sdtr2 |= SDRAM_SDTR2_RCD_2_CLK;		break;	case 3:		sdtr2 |= SDRAM_SDTR2_RCD_3_CLK;		break;	case 4:		sdtr2 |= SDRAM_SDTR2_RCD_4_CLK;		break;	default:		sdtr2 |= SDRAM_SDTR2_RCD_5_CLK;		break;	}	if (sdram_ddr1 == TRUE) { /* DDR1 */		if (sdram_freq < 200000000) {			sdtr2 |= SDRAM_SDTR2_WTR_1_CLK;			sdtr2 |= SDRAM_SDTR2_WPC_2_CLK;			sdtr2 |= SDRAM_SDTR2_RPC_2_CLK;		} else {			sdtr2 |= SDRAM_SDTR2_WTR_2_CLK;			sdtr2 |= SDRAM_SDTR2_WPC_3_CLK;			sdtr2 |= SDRAM_SDTR2_RPC_2_CLK;		}	} else { /* DDR2 */		/* loop through all the DIMM slots on the board */		for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {			/* If a dimm is installed in a particular slot ... */			if (dimm_populated[dimm_num] != SDRAM_NONE) {				t_wpc_ns = max(t_wtr_ns, spd_read(iic0_dimm_addr[dimm_num], 36) >> 2);				t_wtr_ns = max(t_wtr_ns, spd_read(iic0_dimm_addr[dimm_num], 37) >> 2);				t_rpc_ns = max(t_rpc_ns, spd_read(iic0_dimm_addr[dimm_num], 38) >> 2);			}		}		/*		 * convert from nanoseconds to ddr clocks		 * round up if necessary		 */		t_wpc_clk = MULDIV64(sdram_freq, t_wpc_ns, ONE_BILLION);		ddr_check = MULDIV64(ONE_BILLION, t_wpc_clk, t_wpc_ns);		if (sdram_freq != ddr_check)			t_wpc_clk++;		switch (t_wpc_clk) {		case 0:		case 1:		case 2:			sdtr2 |= SDRAM_SDTR2_WPC_2_CLK;			break;		case 3:			sdtr2 |= SDRAM_SDTR2_WPC_3_CLK;			break;		case 4:			sdtr2 |= SDRAM_SDTR2_WPC_4_CLK;			break;		case 5:			sdtr2 |= SDRAM_SDTR2_WPC_5_CLK;			break;		default:			sdtr2 |= SDRAM_SDTR2_WPC_6_CLK;			break;		}		/*		 * convert from nanoseconds to ddr clocks		 * round up if necessary		 */		t_wtr_clk = MULDIV64(sdram_freq, t_wtr_ns, ONE_BILLION);		ddr_check = MULDIV64(ONE_BILLION, t_wtr_clk, t_wtr_ns);		if (sdram_freq != ddr_check)			t_wtr_clk++;		switch (t_wtr_clk) {		case 0:		case 1:			sdtr2 |= SDRAM_SDTR2_WTR_1_CLK;			break;		case 2:			sdtr2 |= SDRAM_SDTR2_WTR_2_CLK;			break;		case 3:			sdtr2 |= SDRAM_SDTR2_WTR_3_CLK;			break;		default:			sdtr2 |= SDRAM_SDTR2_WTR_4_CLK;			break;		}		/*		 * convert from nanoseconds to ddr clocks		 * round up if necessary		 */		t_rpc_clk = MULDIV64(sdram_freq, t_rpc_ns, ONE_BILLION);		ddr_check = MULDIV64(ONE_BILLION, t_rpc_clk, t_rpc_ns);		if (sdram_freq != ddr_check)			t_rpc_clk++;		switch (t_rpc_clk) {		case 0:		case 1:		case 2:			sdtr2 |= SDRAM_SDTR2_RPC_2_CLK;			break;		case 3:			sdtr2 |= SDRAM_SDTR2_RPC_3_CLK;			break;		default:			sdtr2 |= SDRAM_SDTR2_RPC_4_CLK;			break;		}	}	/* default value */	sdtr2 |= SDRAM_SDTR2_XSNR_16_CLK;	/*	 * convert t_rrd from nanoseconds to ddr clocks	 * round up if necessary	 */	t_rrd_clk = MULDIV64(sdram_freq, t_rrd_ns, ONE_BILLION);	ddr_check = MULDIV64(ONE_BILLION, t_rrd_clk, t_rrd_ns);	if (sdram_freq != ddr_check)		t_rrd_clk++;	if (t_rrd_clk == 3)		sdtr2 |= SDRAM_SDTR2_RRD_3_CLK;	else		sdtr2 |= SDRAM_SDTR2_RRD_2_CLK;	/*	 * convert t_rp from nanoseconds to ddr clocks	 * round up if necessary	 */	t_rp_clk = MULDIV64(sdram_freq, t_rp_ns, ONE_BILLION);	ddr_check = MULDIV64(ONE_BILLION, t_rp_clk, t_rp_ns);	if (sdram_freq != ddr_check)		t_rp_clk++;	switch (t_rp_clk) {	case 0:	case 1:	case 2:	case 3:		sdtr2 |= SDRAM_SDTR2_RP_3_CLK;		break;	case 4:		sdtr2 |= SDRAM_SDTR2_RP_4_CLK;		break;	case 5:		sdtr2 |= SDRAM_SDTR2_RP_5_CLK;		break;	case 6:		sdtr2 |= SDRAM_SDTR2_RP_6_CLK;		break;	default:		sdtr2 |= SDRAM_SDTR2_RP_7_CLK;		break;	}	mtsdram(SDRAM_SDTR2, sdtr2);	/*------------------------------------------------------------------	 * Set the SDRAM Timing Reg 3, SDRAM_TR3	 *-----------------------------------------------------------------*/	mfsdram(SDRAM_SDTR3, sdtr3);	sdtr3 &= ~(SDRAM_SDTR3_RAS_MASK  | SDRAM_SDTR3_RC_MASK |		   SDRAM_SDTR3_XCS_MASK | SDRAM_SDTR3_RFC_MASK);	/*	 * convert t_ras from nanoseconds to ddr clocks	 * round up if necessary	 */	t_ras_clk = MULDIV64(sdram_freq, t_ras_ns, ONE_BILLION);	ddr_check = MULDIV64(ONE_BILLION, t_ras_clk, t_ras_ns);	if (sdram_freq != ddr_check)		t_ras_clk++;	sdtr3 |= SDRAM_SDTR3_RAS_ENCODE(t_ras_clk);	/*	 * convert t_rc from nanoseconds to ddr clocks	 * round up if necessary	 */	t_rc_clk = MULDIV64(sdram_freq, t_rc_ns, ONE_BILLION);	ddr_check = MULDIV64(ONE_BILLION, t_rc_clk, t_rc_ns);	if (sdram_freq != ddr_check)		t_rc_clk++;	sdtr3 |= SDRAM_SDTR3_RC_ENCODE(t_rc_clk);	/* default xcs value */	sdtr3 |= SDRAM_SDTR3_XCS;	/*	 * convert t_rfc from nanoseconds to ddr clocks	 * round up if necessary	 */	t_rfc_clk = MULDIV64(sdram_freq, t_rfc_ns, ONE_BILLION);	ddr_check = MULDIV64(ONE_BILLION, t_rfc_clk, t_rfc_ns);	if (sdram_freq != ddr_check)		t_rfc_clk++;	sdtr3 |= SDRAM_SDTR3_RFC_ENCODE(t_rfc_clk);	mtsdram(SDRAM_SDTR3, sdtr3);}/*-----------------------------------------------------------------------------+ * program_bxcf. *-----------------------------------------------------------------------------*/static void program_bxcf(unsigned long *dimm_populated,			 unsigned char *iic0_dimm_addr,			 unsigned long num_dimm_banks){	unsigned long dimm_num;	unsigned long num_col_addr;	unsigned long num_ranks;	unsigned long num_banks;	unsigned long mode;	unsigned long ind_rank;	unsigned long ind;	unsigned long ind_bank;	unsigned long bank_0_populated;	/*------------------------------------------------------------------	 * Set the BxCF regs.  First, wipe out the bank config registers.	 *-----------------------------------------------------------------*/	mtdcr(SDRAMC_CFGADDR, SDRAM_MB0CF);	mtdcr(SDRAMC_CFGDATA, 0x00000000);	mtdcr(SDRAMC_CFGADDR, SDRAM_MB1CF);	mtdcr(SDRAMC_CFGDATA, 0x00000000);	mtdcr(SDRAMC_CFGADDR, SDRAM_MB2CF);	mtdcr(SDRAMC_CFGDATA, 0x00000000);	mtdcr(SDRAMC_CFGADDR, SDRAM_

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲日穴在线视频| 亚洲国产高清不卡| 色视频欧美一区二区三区| 国内成人精品2018免费看| 日韩 欧美一区二区三区| 亚洲国产成人va在线观看天堂| 亚洲欧洲韩国日本视频| 国产精品乱人伦| 中文字幕免费不卡| 国产精品嫩草影院av蜜臀| 国产日韩精品一区二区三区在线| 欧美一区二区三区日韩视频| 欧美精品v日韩精品v韩国精品v| 欧美日韩在线播放| 在线不卡的av| 精品国产电影一区二区| 久久久国产精品不卡| 亚洲国产精品激情在线观看| 中文av一区二区| 一区二区视频免费在线观看| 一区二区激情小说| 免费成人在线观看| 国产69精品一区二区亚洲孕妇| 国产精品99久| 日本伦理一区二区| 欧美一区2区视频在线观看| 久久综合久久鬼色中文字| 国产精品美女久久久久高潮| 一区二区三区高清不卡| 老司机免费视频一区二区 | 性欧美大战久久久久久久久| 日韩精品电影一区亚洲| 国产精品自产自拍| 91激情在线视频| 欧美成人艳星乳罩| 亚洲伦理在线免费看| 日韩福利视频导航| 不卡一卡二卡三乱码免费网站| 欧美系列在线观看| 2023国产一二三区日本精品2022| 国产精品美女视频| 蜜臀av亚洲一区中文字幕| 成人黄色av电影| 日韩一区二区三免费高清| 国产精品美女一区二区三区| 免费一级片91| 色综合久久66| 中文欧美字幕免费| 麻豆91在线看| 欧美日韩在线一区二区| 国产精品毛片大码女人| 久久99热99| 欧美精品在欧美一区二区少妇| 中文字幕第一区综合| 美女性感视频久久| 欧美系列一区二区| 亚洲欧洲制服丝袜| 成人污污视频在线观看| 欧美一级二级三级乱码| 亚洲一区二区三区四区在线| 国产馆精品极品| 久久久精品蜜桃| 经典三级一区二区| 91精品久久久久久久久99蜜臂| 亚洲精品网站在线观看| 99精品国产一区二区三区不卡| 欧美精品一区二区三区一线天视频 | 欧洲精品在线观看| 国产精品狼人久久影院观看方式| 毛片不卡一区二区| 欧美一区二区三区小说| 舔着乳尖日韩一区| 91.com在线观看| 午夜一区二区三区视频| 精品视频1区2区| 亚洲成人动漫精品| 欧美另类高清zo欧美| 丝袜a∨在线一区二区三区不卡| 91国模大尺度私拍在线视频| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 国产69精品一区二区亚洲孕妇| 久久久99久久| 波多野结衣在线aⅴ中文字幕不卡| 久久综合九色综合久久久精品综合| 精品写真视频在线观看| 日韩欧美激情四射| 韩国一区二区视频| 国产三级精品在线| 成人动漫在线一区| 亚洲精品久久嫩草网站秘色| 欧美日韩国产中文| 蜜桃在线一区二区三区| 精品福利视频一区二区三区| 国产精品88888| 国产精品成人一区二区三区夜夜夜| 成人av午夜电影| 一区二区三区中文字幕在线观看| 欧美亚洲综合久久| 老司机一区二区| 国产精品九色蝌蚪自拍| 欧美视频一二三区| 久久99国产精品久久99 | 国产精品伦一区二区三级视频| 99re热这里只有精品视频| 一区二区三区在线观看欧美| 8x8x8国产精品| 国产成人亚洲精品青草天美| 亚洲欧美日韩国产成人精品影院| 欧美日韩国产在线观看| 国产自产高清不卡| 亚洲综合色噜噜狠狠| 久久久久99精品国产片| 91久久国产最好的精华液| 国模一区二区三区白浆| 亚洲日本欧美天堂| 精品久久久久久久久久久久久久久 | 色婷婷综合久久久中文字幕| 视频一区二区不卡| 中文字幕中文字幕中文字幕亚洲无线| 欧美日韩免费在线视频| 国产成人精品一区二区三区网站观看| 亚洲免费观看高清完整版在线 | 日本中文字幕一区| ●精品国产综合乱码久久久久 | 蜜桃av噜噜一区| 亚洲欧美国产77777| 日韩欧美一区二区在线视频| aaa欧美大片| 国产一区二区福利视频| 亚洲国产精品自拍| 国产精品久久久久久久久图文区 | www.av亚洲| 麻豆中文一区二区| 一区二区三区久久| 亚洲国产经典视频| 久久亚洲精精品中文字幕早川悠里| 精品污污网站免费看| av激情综合网| 国产成人高清视频| 久久爱www久久做| 日韩国产欧美在线视频| 亚洲综合激情另类小说区| 亚洲国产精品成人综合| 精品国产污污免费网站入口| 欧美一区二区视频在线观看2020| av电影在线观看一区| 成人黄色免费短视频| 国产福利一区二区三区| 国产一本一道久久香蕉| 美国一区二区三区在线播放| 免费亚洲电影在线| 麻豆freexxxx性91精品| 久久草av在线| 国产精品影视在线| 国产精品88av| 成人av网站免费| av在线不卡电影| 一本到三区不卡视频| 99久久国产免费看| 日本乱人伦aⅴ精品| 在线亚洲+欧美+日本专区| 在线观看日产精品| 精品视频在线免费看| 欧美久久一二区| 欧美大尺度电影在线| 精品国产乱码久久久久久老虎 | 国产专区综合网| 国产黄色成人av| 99久久综合狠狠综合久久| 99在线精品一区二区三区| 欧美综合在线视频| 欧美日韩国产一级| 精品国产制服丝袜高跟| 欧美激情自拍偷拍| 亚洲精品第1页| 日本亚洲天堂网| 国产成人亚洲综合a∨婷婷| av不卡在线观看| 欧美日韩视频在线观看一区二区三区 | 国产黑丝在线一区二区三区| 成人污视频在线观看| 91福利小视频| 日韩精品一区二区三区蜜臀| 日本一区二区在线不卡| 一区二区欧美在线观看| 免费不卡在线观看| 成人免费视频国产在线观看| 91福利在线免费观看| 久久婷婷成人综合色| 亚洲人成在线观看一区二区| 视频一区视频二区中文字幕| 国产精品一区二区在线看| 日本福利一区二区| 久久久久久免费网| 亚洲国产美女搞黄色| 成人午夜激情在线| 日韩欧美中文一区二区| 亚洲三级电影全部在线观看高清| 男人的天堂亚洲一区| 一本色道久久综合亚洲aⅴ蜜桃|