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

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

?? articias.c

?? gumstiz u-boot loader in linux
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * (C) Copyright 2002 * Hyperion Entertainment, ThomasF@hyperion-entertainment.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 */#include <common.h>#include <pci.h>#include <asm/processor.h>#include "memio.h"#include "articiaS.h"#include "smbus.h"#include "via686.h"#undef DEBUGstruct dimm_bank {	uint8 used;			/* Bank is populated */	uint32 rows;			/* Number of row addresses */	uint32 columns;			/* Number of column addresses */	uint8 registered;		/* SIMM is registered */	uint8 ecc;			/* SIMM has ecc */	uint8 burst_len;		/* Supported burst lengths */	uint32 cas_lat;			/* Supported CAS latencies */	uint32 cas_used;		/* CAS to use (not set by user) */	uint32 trcd;			/* RAS to CAS latency */	uint32 trp;			/* Precharge latency */	uint32 tclk_hi;			/* SDRAM cycle time (highest CAS latency) */	uint32 tclk_2hi;		/* SDRAM second highest CAS latency */	uint32 size;			/* Size of bank in bytes */	uint8 auto_refresh;		/* Module supports auto refresh */	uint32 refresh_time;		/* Refresh time (in ns) */};/*** Based in part on the evb64260 code*//* * translate ns.ns/10 coding of SPD timing values * into 10 ps unit values */static inline unsigned short NS10to10PS (unsigned char spd_byte){	unsigned short ns, ns10;	/* isolate upper nibble */	ns = (spd_byte >> 4) & 0x0F;	/* isolate lower nibble */	ns10 = (spd_byte & 0x0F);	return (ns * 100 + ns10 * 10);}/* * translate ns coding of SPD timing values * into 10 ps unit values */static inline unsigned short NSto10PS (unsigned char spd_byte){	return (spd_byte * 100);}long detect_sdram (uint8 * rom, int dimmNum, struct dimm_bank *banks){    DECLARE_GLOBAL_DATA_PTR;	int dimm_address = (dimmNum == 0) ? SM_DIMM0_ADDR : SM_DIMM1_ADDR;	uint32 busclock = gd->bus_clk;	uint32 memclock = busclock;	uint32 tmemclock = 1000000000 / (memclock / 100);	uint32 datawidth;	if (sm_get_data (rom, dimm_address) == 0) {		/* Nothing in slot, make both banks empty */		debug ("Slot %d: vacant\n", dimmNum);		banks[0].used = 0;		banks[1].used = 0;		return 0;	}	if (rom[2] != 0x04) {		debug ("Slot %d: No SDRAM\n", dimmNum);		banks[0].used = 0;		banks[1].used = 0;		return 0;	}	/* Determine number of banks/rows */	if (rom[5] == 1) {		banks[0].used = 1;		banks[1].used = 0;	} else {		banks[0].used = 1;		banks[1].used = 1;	}	/* Determine number of row addresses */	if (rom[3] & 0xf0) {		/* Different banks sizes */		banks[0].rows = rom[3] & 0x0f;		banks[1].rows = (rom[3] & 0xf0) >> 4;	} else {		/* Equal sized banks */		banks[0].rows = rom[3] & 0x0f;		banks[1].rows = banks[0].rows;	}	/* Determine number of column addresses */	if (rom[4] & 0xf0) {		/* Different bank sizes */		banks[0].columns = rom[4] & 0x0f;		banks[1].columns = (rom[4] & 0xf0) >> 4;	} else {		banks[0].columns = rom[4] & 0x0f;		banks[1].columns = banks[0].columns;	}	/* Check Jedec revision, and modify row/column accordingly */	if (rom[62] > 0x10) {		if (banks[0].rows <= 3)			banks[0].rows += 15;		if (banks[1].rows <= 3)			banks[1].rows += 15;		if (banks[0].columns <= 3)			banks[0].columns += 15;		if (banks[0].columns <= 3)			banks[0].columns += 15;	}	/* Check registered/unregisterd */	if (rom[21] & 0x12) {		banks[0].registered = 1;		banks[1].registered = 1;	} else {		banks[0].registered = 0;		banks[1].registered = 0;	}#ifdef CONFIG_ECC	/* Check parity/ECC */	banks[0].ecc = (rom[11] == 0x02);	banks[1].ecc = (rom[11] == 0x02);#endif	/* Find burst lengths supported */	banks[0].burst_len = rom[16] & 0x8f;	banks[1].burst_len = rom[16] & 0x8f;	/* Find possible cas latencies */	banks[0].cas_lat = rom[18] & 0x7F;	banks[1].cas_lat = rom[18] & 0x7F;	/* RAS/CAS latency */	banks[0].trcd = (NSto10PS (rom[29]) + (tmemclock - 1)) / tmemclock;	banks[1].trcd = (NSto10PS (rom[29]) + (tmemclock - 1)) / tmemclock;	/* Precharge latency */	banks[0].trp = (NSto10PS (rom[27]) + (tmemclock - 1)) / tmemclock;	banks[1].trp = (NSto10PS (rom[27]) + (tmemclock - 1)) / tmemclock;	/* highest CAS latency */	banks[0].tclk_hi = NS10to10PS (rom[9]);	banks[1].tclk_hi = NS10to10PS (rom[9]);	/* second highest CAS latency */	banks[0].tclk_2hi = NS10to10PS (rom[23]);	banks[1].tclk_2hi = NS10to10PS (rom[23]);	/* bank sizes */	datawidth = rom[13] & 0x7f;	banks[0].size =			(1L << (banks[0].rows + banks[0].columns)) *			/* FIXME datawidth */ 8 * rom[17];	if (rom[13] & 0x80)		banks[1].size = 2 * banks[0].size;	else		banks[1].size = (1L << (banks[1].rows + banks[1].columns)) *				/* FIXME datawidth */ 8 * rom[17];	/* Refresh */	if (rom[12] & 0x80) {		banks[0].auto_refresh = 1;		banks[1].auto_refresh = 1;	} else {		banks[0].auto_refresh = 0;		banks[1].auto_refresh = 0;	}	switch (rom[12] & 0x7f) {	case 0:		banks[0].refresh_time = (1562500 + (tmemclock - 1)) / tmemclock;		banks[1].refresh_time = (1562500 + (tmemclock - 1)) / tmemclock;		break;	case 1:		banks[0].refresh_time = (390600 + (tmemclock - 1)) / tmemclock;		banks[1].refresh_time = (390600 + (tmemclock - 1)) / tmemclock;		break;	case 2:		banks[0].refresh_time = (781200 + (tmemclock - 1)) / tmemclock;		banks[1].refresh_time = (781200 + (tmemclock - 1)) / tmemclock;		break;	case 3:		banks[0].refresh_time = (3125000 + (tmemclock - 1)) / tmemclock;		banks[1].refresh_time = (3125000 + (tmemclock - 1)) / tmemclock;		break;	case 4:		banks[0].refresh_time = (6250000 + (tmemclock - 1)) / tmemclock;		banks[1].refresh_time = (6250000 + (tmemclock - 1)) / tmemclock;		break;	case 5:		banks[0].refresh_time = (12500000 + (tmemclock - 1)) / tmemclock;		banks[1].refresh_time = (12500000 + (tmemclock - 1)) / tmemclock;		break;	default:		banks[0].refresh_time = 0x100;	/* Default of Articia S */		banks[1].refresh_time = 0x100;		break;	}#ifdef DEBUG	printf ("\nInformation for SIMM bank %ld:\n", dimmNum);	printf ("Number of banks: %ld\n", banks[0].used + banks[1].used);	printf ("Number of row addresses: %ld\n", banks[0].rows);	printf ("Number of coumns addresses: %ld\n", banks[0].columns);	printf ("SIMM is %sregistered\n",			banks[0].registered == 0 ? "not " : "");#ifdef CONFIG_ECC	printf ("SIMM %s ECC\n",			banks[0].ecc == 1 ? "supports" : "doesn't support");#endif	printf ("Supported burst lenghts: %s %s %s %s %s\n",			banks[0].burst_len & 0x08 ? "8" : " ",			banks[0].burst_len & 0x04 ? "4" : " ",			banks[0].burst_len & 0x02 ? "2" : " ",			banks[0].burst_len & 0x01 ? "1" : " ",			banks[0].burst_len & 0x80 ? "PAGE" : "    ");	printf ("Supported CAS latencies: %s %s %s\n",			banks[0].cas_lat & 0x04 ? "CAS 3" : "     ",			banks[0].cas_lat & 0x02 ? "CAS 2" : "     ",			banks[0].cas_lat & 0x01 ? "CAS 1" : "     ");	printf ("RAS to CAS latency: %ld\n", banks[0].trcd);	printf ("Precharge latency: %ld\n", banks[0].trp);	printf ("SDRAM highest CAS latency: %ld\n", banks[0].tclk_hi);	printf ("SDRAM 2nd highest CAS latency: %ld\n", banks[0].tclk_2hi);	printf ("SDRAM data width: %ld\n", datawidth);	printf ("Auto Refresh %ssupported\n",			banks[0].auto_refresh ? "" : "not ");	printf ("Refresh time: %ld clocks\n", banks[0].refresh_time);	if (banks[0].used)		printf ("Bank 0 size: %ld MB\n", banks[0].size / 1024 / 1024);	if (banks[1].used)		printf ("Bank 1 size: %ld MB\n", banks[1].size / 1024 / 1024);	printf ("\n");#endif	sm_term ();	return 1;}void select_cas (struct dimm_bank *banks, uint8 fast){	if (!banks[0].used) {		banks[0].cas_used = 0;		banks[0].cas_used = 0;		return;	}	if (fast) {		/* Search for fast CAS */		uint32 i;		uint32 c = 0x01;		for (i = 1; i < 5; i++) {			if (banks[0].cas_lat & c) {				banks[0].cas_used = i;				banks[1].cas_used = i;				debug ("Using CAS %d (fast)\n", i);				return;			}			c <<= 1;		}		/* Default to CAS 3 */		banks[0].cas_used = 3;		banks[1].cas_used = 3;		debug ("Using CAS 3 (fast)\n");		return;	} else {		/* Search for slow cas */		uint32 i;		uint32 c = 0x08;		for (i = 4; i > 1; i--) {			if (banks[0].cas_lat & c) {				banks[0].cas_used = i;				banks[1].cas_used = i;				debug ("Using CAS %d (slow)\n", i);				return;			}			c >>= 1;		}		/* Default to CAS 3 */		banks[0].cas_used = 3;		banks[1].cas_used = 3;		debug ("Using CAS 3 (slow)\n");		return;	}	banks[0].cas_used = 3;	banks[1].cas_used = 3;	debug ("Using CAS 3\n");	return;}uint32 get_reg_setting (uint32 banks, uint32 rows, uint32 columns, uint32 size){	uint32 i;	struct RowColumnSize {		uint32 banks;		uint32 rows;		uint32 columns;		uint32 size;		uint32 register_value;	};	struct RowColumnSize rcs_map[] = {		/*  Sbk Radr Cadr   MB     Value */		{1, 11, 8, 8, 0x00840f00},

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区中文字幕| 国产经典欧美精品| 亚洲欧美日韩久久| 国产精品免费av| 国产日韩欧美a| 中文字幕免费在线观看视频一区| 欧美精品一区二区三区在线播放 | 中文字幕av一区 二区| 日韩视频一区在线观看| 91精品国产品国语在线不卡| 91精品国产综合久久精品图片| 欧美色偷偷大香| 91精品国产综合久久精品图片| 日韩女优av电影在线观看| 欧美电影免费观看完整版| 久久蜜桃av一区精品变态类天堂| 久久久.com| 亚洲天堂免费看| 亚洲国产精品自拍| 精品亚洲成a人在线观看| 国产精品一区在线观看你懂的| 国产黑丝在线一区二区三区| 99久久婷婷国产| 欧美日韩国产天堂| 久久青草欧美一区二区三区| 国产精品成人免费| 丝袜美腿一区二区三区| 丝袜a∨在线一区二区三区不卡| 麻豆国产精品777777在线| 国产91精品久久久久久久网曝门| 色婷婷av久久久久久久| 日韩欧美一区二区在线视频| 欧美经典三级视频一区二区三区| 亚洲一区二区在线观看视频 | www激情久久| 综合婷婷亚洲小说| 麻豆精品在线观看| 一本到高清视频免费精品| 欧美人与禽zozo性伦| 国产精品色呦呦| 日本网站在线观看一区二区三区| 国产成人av网站| 69久久夜色精品国产69蝌蚪网| 国产三级精品三级在线专区| 午夜视黄欧洲亚洲| 99久久综合精品| 精品日韩一区二区三区| 亚洲黄色小说网站| eeuss鲁一区二区三区| 91精品蜜臀在线一区尤物| 亚洲天堂网中文字| 懂色av一区二区三区免费看| 日韩手机在线导航| 亚洲一区二区在线免费看| caoporn国产精品| 久久精品日产第一区二区三区高清版| 五月天精品一区二区三区| 91亚洲精品一区二区乱码| 欧美精品一区二区三区四区 | 国产综合色在线| 91麻豆精品91久久久久久清纯| 中文字幕一区二区三区乱码在线| 国产在线精品免费| 欧美成人午夜电影| 日本视频中文字幕一区二区三区| 在线观看视频一区二区| 亚洲视频一二三| 91色九色蝌蚪| 亚洲欧美在线另类| 97精品电影院| 亚洲视频图片小说| 91成人在线精品| 一区二区三区在线视频播放| 色偷偷88欧美精品久久久| 亚洲成a人v欧美综合天堂| 在线日韩国产精品| 亚洲精品v日韩精品| 91精品办公室少妇高潮对白| 一区二区在线观看免费| 在线一区二区三区四区五区| 国产精品成人午夜| 欧美写真视频网站| 青青草97国产精品免费观看无弹窗版| 欧美日韩成人在线| 久久精品久久99精品久久| 精品久久久久久亚洲综合网| 国产在线精品免费av| 久久久天堂av| 91色婷婷久久久久合中文| 亚洲一区二区中文在线| 91精品国产综合久久久久| 国内精品在线播放| 国产精品少妇自拍| 欧美日韩一区三区| 国产在线视频一区二区三区| 国产欧美精品国产国产专区| 91丝袜美女网| 日韩电影在线观看电影| 久久日一线二线三线suv| 99久精品国产| 麻豆精品在线播放| 综合自拍亚洲综合图不卡区| 欧美美女激情18p| 国产精品99久久久久久宅男| 中文字幕亚洲成人| 日韩一区二区三区av| 成人app软件下载大全免费| 亚洲一区二区三区中文字幕在线| 91麻豆精品国产自产在线| 国产成人av电影在线| 亚洲gay无套男同| 欧美国产一区视频在线观看| 欧美无人高清视频在线观看| 久久99国产精品成人| 中文字幕一区二区5566日韩| 日韩欧美在线影院| 在线亚洲精品福利网址导航| 麻豆成人91精品二区三区| 亚洲日本欧美天堂| 亚洲视频一区在线| 日韩欧美国产午夜精品| 91麻豆自制传媒国产之光| 奇米精品一区二区三区四区| 亚洲欧洲日产国码二区| 91麻豆精品国产91久久久久久久久 | 成人av集中营| 免费日本视频一区| 一区二区三区中文字幕精品精品| 日韩精品一区二区三区蜜臀| 在线亚洲+欧美+日本专区| 成人久久视频在线观看| 毛片一区二区三区| 五月激情综合婷婷| 一区二区三区在线视频观看58| 中文字幕成人网| 国产欧美日本一区视频| 精品久久人人做人人爰| 91精品欧美一区二区三区综合在 | 日韩—二三区免费观看av| 亚洲精品高清在线| 亚洲情趣在线观看| 中文字幕一区在线| 中文字幕高清不卡| 中文字幕免费不卡在线| 久久久国产精品午夜一区ai换脸| 欧美一区二区三区四区高清| 欧美精品丝袜中出| 欧美日韩久久久久久| 欧美三级蜜桃2在线观看| 欧美在线免费观看亚洲| 在线看国产一区| 一本大道久久a久久精二百| 99精品欧美一区二区三区小说| 成人看片黄a免费看在线| 99热国产精品| 91色视频在线| 欧美性受xxxx黑人xyx性爽| 欧美日韩一区二区三区视频| 欧美夫妻性生活| 欧美一级黄色录像| 欧美mv日韩mv亚洲| 国产拍揄自揄精品视频麻豆 | 91亚洲国产成人精品一区二区三| 丁香六月久久综合狠狠色| 成人app软件下载大全免费| 91热门视频在线观看| 一本到不卡免费一区二区| 欧美网站大全在线观看| 日韩精品专区在线影院观看| 久久众筹精品私拍模特| 亚洲欧洲精品一区二区三区不卡| 亚洲伦理在线精品| 视频一区视频二区中文| 国产精品中文欧美| 色综合激情五月| 欧美一区二区三区在线电影| 精品国产a毛片| 国产精品久久久久aaaa樱花| 一级特黄大欧美久久久| 免费在线观看成人| 不卡av在线网| 欧美片网站yy| 中文字幕精品综合| 午夜视频在线观看一区二区三区| 麻豆精品在线播放| 99精品在线观看视频| 69成人精品免费视频| 日本一区二区视频在线| 亚洲第一搞黄网站| 国产精品亚洲第一区在线暖暖韩国| 色婷婷久久一区二区三区麻豆| 日韩欧美第一区| 亚洲视频一区二区在线| 久久精品999| 欧美亚洲禁片免费| 国产精品乱码人人做人人爱| 免费观看一级特黄欧美大片| 91蝌蚪国产九色| 久久久久久久精| 美洲天堂一区二卡三卡四卡视频|