mirror of
https://github.com/X11Libre/xf86-video-ast.git
synced 2026-03-24 01:24:41 +00:00
Modify for DRAM Initial Settings
This commit is contained in:
@@ -277,7 +277,6 @@ GetChipType(ScrnInfoPtr pScrn)
|
||||
{
|
||||
ASTRecPtr pAST = ASTPTR(pScrn);
|
||||
ULONG ulData;
|
||||
UCHAR jReg;
|
||||
|
||||
pAST->jChipType = AST2100;
|
||||
|
||||
@@ -760,19 +759,30 @@ void vSetDefExtReg(ScrnInfoPtr pScrn)
|
||||
|
||||
__inline ULONG MIndwm(UCHAR *mmiobase, ULONG r)
|
||||
{
|
||||
ULONG ulData;
|
||||
|
||||
*(ULONG *) (mmiobase + 0xF004) = r & 0xFFFF0000;
|
||||
*(ULONG *) (mmiobase + 0xF000) = 0x1;
|
||||
|
||||
do {
|
||||
ulData = *(volatile ULONG *) (mmiobase + 0xF004) & 0xFFFF0000;
|
||||
} while (ulData != (r & 0xFFFF0000) );
|
||||
|
||||
return ( *(volatile ULONG *) (mmiobase + 0x10000 + (r & 0x0000FFFF)) );
|
||||
|
||||
}
|
||||
|
||||
__inline void MOutdwm(UCHAR *mmiobase, ULONG r, ULONG v)
|
||||
{
|
||||
ULONG ulData;
|
||||
|
||||
*(ULONG *) (mmiobase + 0xF004) = r & 0xFFFF0000;
|
||||
*(ULONG *) (mmiobase + 0xF000) = 0x1;
|
||||
|
||||
do {
|
||||
ulData = *(volatile ULONG *) (mmiobase + 0xF004) & 0xFFFF0000;
|
||||
} while (ulData != (r & 0xFFFF0000) );
|
||||
|
||||
*(volatile ULONG *) (mmiobase + 0x10000 + (r & 0x0000FFFF)) = v;
|
||||
}
|
||||
|
||||
@@ -1228,6 +1238,7 @@ typedef struct _AST2300DRAMParam {
|
||||
/*
|
||||
* DQSI DLL CBR Setting
|
||||
*/
|
||||
#define CBR_SIZE0 ((1 << 10) - 1)
|
||||
#define CBR_SIZE1 ((4 << 10) - 1)
|
||||
#define CBR_SIZE2 ((64 << 10) - 1)
|
||||
#define CBR_PASSNUM 5
|
||||
@@ -1427,102 +1438,33 @@ ULONG CBRScan2(PAST2300DRAMParam param)
|
||||
return(data2);
|
||||
}
|
||||
|
||||
void finetuneDQI(PAST2300DRAMParam param)
|
||||
ULONG CBRTest3(PAST2300DRAMParam param)
|
||||
{
|
||||
ULONG gold_sadj[2], dllmin[16], dllmax[16], dlli, data, cnt, mask, passcnt;
|
||||
if(!MMCTestBurst(param, 0)) return(0);
|
||||
if(!MMCTestSingle(param, 0)) return(0);
|
||||
return(1);
|
||||
}
|
||||
|
||||
ULONG CBRScan3(PAST2300DRAMParam param)
|
||||
{
|
||||
ULONG patcnt, loop;
|
||||
UCHAR *mmiobase;
|
||||
|
||||
mmiobase = param->pjMMIOVirtualAddress;
|
||||
|
||||
gold_sadj[0] = (MIndwm(mmiobase, 0x1E6E0024) >> 16) & 0xffff;
|
||||
gold_sadj[1] = gold_sadj[0] >> 8;
|
||||
gold_sadj[0] = gold_sadj[0] & 0xff;
|
||||
gold_sadj[0] = (gold_sadj[0] + gold_sadj[1]) >> 1;
|
||||
gold_sadj[1] = gold_sadj[0];
|
||||
|
||||
for(cnt = 0;cnt < 16;cnt++){
|
||||
dllmin[cnt] = 0xff;
|
||||
dllmax[cnt] = 0x0;
|
||||
}
|
||||
passcnt = 0;
|
||||
for(dlli = 0;dlli < 76;dlli++){
|
||||
MOutdwm(mmiobase, 0x1E6E0068, 0x00001400 | (dlli << 16) | (dlli << 24));
|
||||
/* Wait DQSI latch phase calibration */
|
||||
MOutdwm(mmiobase, 0x1E6E0074, 0x00000010);
|
||||
MOutdwm(mmiobase, 0x1E6E0070, 0x00000003);
|
||||
do{
|
||||
data = MIndwm(mmiobase, 0x1E6E0070);
|
||||
}while(!(data & 0x00001000));
|
||||
MOutdwm(mmiobase, 0x1E6E0070, 0x00000000);
|
||||
|
||||
MOutdwm(mmiobase, 0x1E6E0074, CBR_SIZE1);
|
||||
data = CBRScan2(param);
|
||||
if(data != 0){
|
||||
mask = 0x00010001;
|
||||
for(cnt = 0;cnt < 16;cnt++){
|
||||
if(data & mask){
|
||||
if(dllmin[cnt] > dlli){
|
||||
dllmin[cnt] = dlli;
|
||||
}
|
||||
if(dllmax[cnt] < dlli){
|
||||
dllmax[cnt] = dlli;
|
||||
}
|
||||
}
|
||||
mask <<= 1;
|
||||
for(patcnt = 0;patcnt < CBR_PATNUM;patcnt++){
|
||||
MOutdwm(mmiobase, 0x1E6E007C, pattern[patcnt]);
|
||||
for(loop = 0;loop < 2;loop++){
|
||||
if(CBRTest3(param)){
|
||||
break;
|
||||
}
|
||||
passcnt++;
|
||||
}else if(passcnt >= CBR_THRESHOLD){
|
||||
break;
|
||||
}
|
||||
if(loop == 2){
|
||||
return(0);
|
||||
}
|
||||
}
|
||||
data = 0;
|
||||
for(cnt = 0;cnt < 8;cnt++){
|
||||
data >>= 3;
|
||||
if((dllmax[cnt] > dllmin[cnt]) && ((dllmax[cnt] - dllmin[cnt]) >= CBR_THRESHOLD)){
|
||||
dlli = (dllmin[cnt] + dllmax[cnt]) >> 1;
|
||||
if(gold_sadj[0] >= dlli){
|
||||
dlli = (gold_sadj[0] - dlli) >> 1;
|
||||
if(dlli > 3){
|
||||
dlli = 3;
|
||||
}
|
||||
}else{
|
||||
dlli = (dlli - gold_sadj[0]) >> 1;
|
||||
if(dlli > 4){
|
||||
dlli = 4;
|
||||
}
|
||||
dlli = (8 - dlli) & 0x7;
|
||||
}
|
||||
data |= dlli << 21;
|
||||
}
|
||||
}
|
||||
MOutdwm(mmiobase, 0x1E6E0080, data);
|
||||
|
||||
data = 0;
|
||||
for(cnt = 8;cnt < 16;cnt++){
|
||||
data >>= 3;
|
||||
if((dllmax[cnt] > dllmin[cnt]) && ((dllmax[cnt] - dllmin[cnt]) >= CBR_THRESHOLD)){
|
||||
dlli = (dllmin[cnt] + dllmax[cnt]) >> 1;
|
||||
if(gold_sadj[1] >= dlli){
|
||||
dlli = (gold_sadj[1] - dlli) >> 1;
|
||||
if(dlli > 3){
|
||||
dlli = 3;
|
||||
}else{
|
||||
dlli = (dlli - 1) & 0x7;
|
||||
}
|
||||
}else{
|
||||
dlli = (dlli - gold_sadj[1]) >> 1;
|
||||
dlli += 1;
|
||||
if(dlli > 4){
|
||||
dlli = 4;
|
||||
}
|
||||
dlli = (8 - dlli) & 0x7;
|
||||
}
|
||||
data |= dlli << 21;
|
||||
}
|
||||
}
|
||||
MOutdwm(mmiobase, 0x1E6E0084, data);
|
||||
|
||||
} /* finetuneDQI */
|
||||
return(1);
|
||||
}
|
||||
|
||||
Bool finetuneDQI_L(PAST2300DRAMParam param)
|
||||
{
|
||||
@@ -1540,14 +1482,6 @@ Bool finetuneDQI_L(PAST2300DRAMParam param)
|
||||
passcnt = 0;
|
||||
for(dlli = 0;dlli < 76;dlli++){
|
||||
MOutdwm(mmiobase, 0x1E6E0068, 0x00001400 | (dlli << 16) | (dlli << 24));
|
||||
/* Wait DQSI latch phase calibration */
|
||||
MOutdwm(mmiobase, 0x1E6E0074, 0x00000010);
|
||||
MOutdwm(mmiobase, 0x1E6E0070, 0x00000003);
|
||||
do{
|
||||
data = MIndwm(mmiobase, 0x1E6E0070);
|
||||
}while(!(data & 0x00001000));
|
||||
MOutdwm(mmiobase, 0x1E6E0070, 0x00000000);
|
||||
|
||||
MOutdwm(mmiobase, 0x1E6E0074, CBR_SIZE1);
|
||||
data = CBRScan2(param);
|
||||
if(data != 0){
|
||||
@@ -1638,137 +1572,107 @@ FINETUNE_DONE:
|
||||
|
||||
} /* finetuneDQI_L */
|
||||
|
||||
void finetuneDQI_L2(PAST2300DRAMParam param)
|
||||
void finetuneDQSI(PAST2300DRAMParam param)
|
||||
{
|
||||
ULONG gold_sadj[2], dllmin[16], dllmax[16], dlli, data, cnt, mask, passcnt, data2;
|
||||
ULONG dlli, dqsip, dqidly, cnt;
|
||||
ULONG reg_mcr18, reg_mcr0c, passcnt[2], diff;
|
||||
ULONG g_dqidly, g_dqsip, g_margin, g_side;
|
||||
unsigned short pass[32][2][2];
|
||||
char tag[2][76];
|
||||
UCHAR *mmiobase;
|
||||
|
||||
mmiobase = param->pjMMIOVirtualAddress;
|
||||
|
||||
for(cnt = 0;cnt < 16;cnt++){
|
||||
dllmin[cnt] = 0xff;
|
||||
dllmax[cnt] = 0x0;
|
||||
}
|
||||
passcnt = 0;
|
||||
/* Disable DQI CBR */
|
||||
reg_mcr0c = MIndwm(mmiobase, 0x1E6E000C);
|
||||
reg_mcr18 = MIndwm(mmiobase, 0x1E6E0018);
|
||||
reg_mcr18 &= 0x0000ffff;
|
||||
MOutdwm(mmiobase, 0x1E6E0018, reg_mcr18);
|
||||
|
||||
for(dlli = 0;dlli < 76;dlli++){
|
||||
MOutdwm(mmiobase, 0x1E6E0068, 0x00001400 | (dlli << 16) | (dlli << 24));
|
||||
/* Wait DQSI latch phase calibration */
|
||||
MOutdwm(mmiobase, 0x1E6E0074, 0x00000010);
|
||||
MOutdwm(mmiobase, 0x1E6E0070, 0x00000003);
|
||||
do{
|
||||
data = MIndwm(mmiobase, 0x1E6E0070);
|
||||
}while(!(data & 0x00001000));
|
||||
MOutdwm(mmiobase, 0x1E6E0070, 0x00000000);
|
||||
|
||||
MOutdwm(mmiobase, 0x1E6E0074, CBR_SIZE2);
|
||||
data = CBRScan2(param);
|
||||
if(data != 0){
|
||||
mask = 0x00010001;
|
||||
for(cnt = 0;cnt < 16;cnt++){
|
||||
if(data & mask){
|
||||
if(dllmin[cnt] > dlli){
|
||||
dllmin[cnt] = dlli;
|
||||
tag[0][dlli] = 0x0;
|
||||
tag[1][dlli] = 0x0;
|
||||
}
|
||||
for(dqidly = 0;dqidly < 32;dqidly++){
|
||||
pass[dqidly][0][0] = 0xff;
|
||||
pass[dqidly][0][1] = 0x0;
|
||||
pass[dqidly][1][0] = 0xff;
|
||||
pass[dqidly][1][1] = 0x0;
|
||||
}
|
||||
for(dqidly = 0;dqidly < 32;dqidly++){
|
||||
passcnt[0] = passcnt[1] = 0;
|
||||
for(dqsip = 0;dqsip < 2;dqsip++){
|
||||
MOutdwm(mmiobase, 0x1E6E000C, 0);
|
||||
MOutdwm(mmiobase, 0x1E6E0018, reg_mcr18 | (dqidly << 16) | (dqsip << 23));
|
||||
MOutdwm(mmiobase, 0x1E6E000C, reg_mcr0c);
|
||||
for(dlli = 0;dlli < 76;dlli++){
|
||||
MOutdwm(mmiobase, 0x1E6E0068, 0x00001300 | (dlli << 16) | (dlli << 24));
|
||||
MOutdwm(mmiobase, 0x1E6E0070, 0);
|
||||
MOutdwm(mmiobase, 0x1E6E0074, CBR_SIZE0);
|
||||
if(CBRScan3(param)){
|
||||
if(dlli == 0){
|
||||
break;
|
||||
}
|
||||
if(dllmax[cnt] < dlli){
|
||||
dllmax[cnt] = dlli;
|
||||
passcnt[dqsip]++;
|
||||
tag[dqsip][dlli] = 'P';
|
||||
if(dlli < pass[dqidly][dqsip][0]){
|
||||
pass[dqidly][dqsip][0] = (USHORT) dlli;
|
||||
}
|
||||
if(dlli > pass[dqidly][dqsip][1]){
|
||||
pass[dqidly][dqsip][1] = (USHORT) dlli;
|
||||
}
|
||||
}else if(passcnt[dqsip] >= 5){
|
||||
break;
|
||||
}else{
|
||||
pass[dqidly][dqsip][0] = 0xff;
|
||||
pass[dqidly][dqsip][1] = 0x0;
|
||||
}
|
||||
mask <<= 1;
|
||||
}
|
||||
passcnt++;
|
||||
}else if(passcnt >= CBR_THRESHOLD2){
|
||||
break;
|
||||
}
|
||||
}
|
||||
gold_sadj[0] = 0x0;
|
||||
gold_sadj[1] = 0xFF;
|
||||
for(cnt = 0;cnt < 8;cnt++){
|
||||
if((dllmax[cnt] > dllmin[cnt]) && ((dllmax[cnt] - dllmin[cnt]) >= CBR_THRESHOLD2)){
|
||||
if(gold_sadj[0] < dllmin[cnt]){
|
||||
gold_sadj[0] = dllmin[cnt];
|
||||
}
|
||||
if(gold_sadj[1] > dllmax[cnt]){
|
||||
gold_sadj[1] = dllmax[cnt];
|
||||
}
|
||||
}
|
||||
if(passcnt[0] == 0 && passcnt[1] == 0){
|
||||
dqidly++;
|
||||
}
|
||||
}
|
||||
gold_sadj[0] = (gold_sadj[1] + gold_sadj[0]) >> 1;
|
||||
gold_sadj[1] = MIndwm(mmiobase, 0x1E6E0080);
|
||||
/* Search margin */
|
||||
g_dqidly = g_dqsip = g_margin = g_side = 0;
|
||||
|
||||
data = 0;
|
||||
for(cnt = 0;cnt < 8;cnt++){
|
||||
data >>= 3;
|
||||
data2 = gold_sadj[1] & 0x7;
|
||||
gold_sadj[1] >>= 3;
|
||||
if((dllmax[cnt] > dllmin[cnt]) && ((dllmax[cnt] - dllmin[cnt]) >= CBR_THRESHOLD2)){
|
||||
dlli = (dllmin[cnt] + dllmax[cnt]) >> 1;
|
||||
if(gold_sadj[0] >= dlli){
|
||||
dlli = (gold_sadj[0] - dlli) >> 1;
|
||||
if(dlli > 0){
|
||||
dlli = 1;
|
||||
}
|
||||
if(data2 != 3){
|
||||
data2 = (data2 + dlli) & 0x7;
|
||||
}
|
||||
}else{
|
||||
dlli = (dlli - gold_sadj[0]) >> 1;
|
||||
if(dlli > 0){
|
||||
dlli = 1;
|
||||
}
|
||||
if(data2 != 4){
|
||||
data2 = (data2 - dlli) & 0x7;
|
||||
}
|
||||
for(dqidly = 0;dqidly < 32;dqidly++){
|
||||
for(dqsip = 0;dqsip < 2;dqsip++){
|
||||
if(pass[dqidly][dqsip][0] > pass[dqidly][dqsip][1]){
|
||||
continue;
|
||||
}
|
||||
}
|
||||
data |= data2 << 21;
|
||||
}
|
||||
MOutdwm(mmiobase, 0x1E6E0080, data);
|
||||
|
||||
gold_sadj[0] = 0x0;
|
||||
gold_sadj[1] = 0xFF;
|
||||
for(cnt = 8;cnt < 16;cnt++){
|
||||
if((dllmax[cnt] > dllmin[cnt]) && ((dllmax[cnt] - dllmin[cnt]) >= CBR_THRESHOLD2)){
|
||||
if(gold_sadj[0] < dllmin[cnt]){
|
||||
gold_sadj[0] = dllmin[cnt];
|
||||
diff = pass[dqidly][dqsip][1] - pass[dqidly][dqsip][0];
|
||||
if((diff+2) < g_margin){
|
||||
continue;
|
||||
}
|
||||
if(gold_sadj[1] > dllmax[cnt]){
|
||||
gold_sadj[1] = dllmax[cnt];
|
||||
passcnt[0] = passcnt[1] = 0;
|
||||
for(dlli = pass[dqidly][dqsip][0];dlli > 0 && tag[dqsip][dlli] != 0;dlli--,passcnt[0]++);
|
||||
for(dlli = pass[dqidly][dqsip][1];dlli < 76 && tag[dqsip][dlli] != 0;dlli++,passcnt[1]++);
|
||||
if(passcnt[0] > passcnt[1]){
|
||||
passcnt[0] = passcnt[1];
|
||||
}
|
||||
passcnt[1] = 0;
|
||||
if(passcnt[0] > g_side){
|
||||
passcnt[1] = passcnt[0] - g_side;
|
||||
}
|
||||
if(diff > (g_margin+1) && (passcnt[1] > 0 || passcnt[0] > 8)){
|
||||
g_margin = diff;
|
||||
g_dqidly = dqidly;
|
||||
g_dqsip = dqsip;
|
||||
g_side = passcnt[0];
|
||||
}else if(passcnt[1] > 1 && g_side < 8){
|
||||
if(diff > g_margin){
|
||||
g_margin = diff;
|
||||
}
|
||||
g_dqidly = dqidly;
|
||||
g_dqsip = dqsip;
|
||||
g_side = passcnt[0];
|
||||
}
|
||||
}
|
||||
}
|
||||
gold_sadj[0] = (gold_sadj[1] + gold_sadj[0]) >> 1;
|
||||
gold_sadj[1] = MIndwm(mmiobase, 0x1E6E0084);
|
||||
|
||||
data = 0;
|
||||
for(cnt = 8;cnt < 16;cnt++){
|
||||
data >>= 3;
|
||||
data2 = gold_sadj[1] & 0x7;
|
||||
gold_sadj[1] >>= 3;
|
||||
if((dllmax[cnt] > dllmin[cnt]) && ((dllmax[cnt] - dllmin[cnt]) >= CBR_THRESHOLD2)){
|
||||
dlli = (dllmin[cnt] + dllmax[cnt]) >> 1;
|
||||
if(gold_sadj[0] >= dlli){
|
||||
dlli = (gold_sadj[0] - dlli) >> 1;
|
||||
if(dlli > 0){
|
||||
dlli = 1;
|
||||
}
|
||||
if(data2 != 3){
|
||||
data2 = (data2 + dlli) & 0x7;
|
||||
}
|
||||
}else{
|
||||
dlli = (dlli - gold_sadj[0]) >> 1;
|
||||
if(dlli > 0){
|
||||
dlli = 1;
|
||||
}
|
||||
if(data2 != 4){
|
||||
data2 = (data2 - dlli) & 0x7;
|
||||
}
|
||||
}
|
||||
}
|
||||
data |= data2 << 21;
|
||||
}
|
||||
MOutdwm(mmiobase, 0x1E6E0084, data);
|
||||
|
||||
} /* finetuneDQI_L2 */
|
||||
reg_mcr18 = reg_mcr18 | (g_dqidly << 16) | (g_dqsip << 23);
|
||||
MOutdwm(mmiobase, 0x1E6E0018, reg_mcr18);
|
||||
} /* finetuneDQSI */
|
||||
|
||||
Bool CBRDLL2(PAST2300DRAMParam param)
|
||||
{
|
||||
@@ -1778,9 +1682,9 @@ Bool CBRDLL2(PAST2300DRAMParam param)
|
||||
|
||||
mmiobase = param->pjMMIOVirtualAddress;
|
||||
|
||||
finetuneDQSI(param);
|
||||
if (finetuneDQI_L(param) == FALSE)
|
||||
return status;
|
||||
finetuneDQI_L2(param);
|
||||
|
||||
CBR_START2:
|
||||
dllmin[0] = dllmin[1] = 0xff;
|
||||
@@ -1788,14 +1692,6 @@ Bool CBRDLL2(PAST2300DRAMParam param)
|
||||
passcnt = 0;
|
||||
for(dlli = 0;dlli < 76;dlli++){
|
||||
MOutdwm(mmiobase, 0x1E6E0068, 0x00001300 | (dlli << 16) | (dlli << 24));
|
||||
/* Wait DQSI latch phase calibration */
|
||||
MOutdwm(mmiobase, 0x1E6E0074, 0x00000010);
|
||||
MOutdwm(mmiobase, 0x1E6E0070, 0x00000003);
|
||||
do{
|
||||
data = MIndwm(mmiobase, 0x1E6E0070);
|
||||
}while(!(data & 0x00001000));
|
||||
MOutdwm(mmiobase, 0x1E6E0070, 0x00000000);
|
||||
|
||||
MOutdwm(mmiobase, 0x1E6E0074, CBR_SIZE2);
|
||||
data = CBRScan(param);
|
||||
if(data != 0){
|
||||
@@ -1834,24 +1730,7 @@ CBR_DONE2:
|
||||
dlli = (dllmin[1] + dllmax[1]) >> 1;
|
||||
dlli <<= 8;
|
||||
dlli += (dllmin[0] + dllmax[0]) >> 1;
|
||||
MOutdwm(mmiobase, 0x1E6E0068, (MIndwm(mmiobase, 0x1E6E0068) & 0xFFFF) | (dlli << 16));
|
||||
|
||||
data = (MIndwm(mmiobase, 0x1E6E0080) >> 24) & 0x1F;
|
||||
data2 = (MIndwm(mmiobase, 0x1E6E0018) & 0xff80ffff) | (data << 16);
|
||||
MOutdwm(mmiobase, 0x1E6E0018, data2);
|
||||
|
||||
/* Wait DQSI latch phase calibration */
|
||||
MOutdwm(mmiobase, 0x1E6E0074, 0x00000010);
|
||||
MOutdwm(mmiobase, 0x1E6E0070, 0x00000003);
|
||||
do{
|
||||
data = MIndwm(mmiobase, 0x1E6E0070);
|
||||
}while(!(data & 0x00001000));
|
||||
MOutdwm(mmiobase, 0x1E6E0070, 0x00000000);
|
||||
MOutdwm(mmiobase, 0x1E6E0070, 0x00000003);
|
||||
do{
|
||||
data = MIndwm(mmiobase, 0x1E6E0070);
|
||||
}while(!(data & 0x00001000));
|
||||
MOutdwm(mmiobase, 0x1E6E0070, 0x00000000);
|
||||
MOutdwm(mmiobase, 0x1E6E0068, MIndwm(mmiobase, 0x1E720058) | (dlli << 16));
|
||||
|
||||
return status;
|
||||
|
||||
@@ -1937,7 +1816,7 @@ void GetDDR2Info(PAST2300DRAMParam param)
|
||||
param->REG_DRV = 0x000000FA;
|
||||
param->REG_IOZ = 0x00000034;
|
||||
param->REG_DQIDLY = 0x00000089;
|
||||
param->REG_FREQ = 0x000050C0;
|
||||
param->REG_FREQ = 0x00005040;
|
||||
param->MADJ_MAX = 96;
|
||||
param->DLL2_FINETUNE_STEP = 4;
|
||||
|
||||
@@ -2134,7 +2013,7 @@ void GetDDR3Info(PAST2300DRAMParam param)
|
||||
param->REG_DQSIC = 0x000000BA;
|
||||
param->REG_MRS = 0x04001400 | TRAP_MRS;
|
||||
param->REG_EMRS = 0x00000000;
|
||||
param->REG_IOZ = 0x00000024;
|
||||
param->REG_IOZ = 0x00000023;
|
||||
param->REG_DQIDLY = 0x00000074;
|
||||
param->REG_FREQ = 0x00004DC0;
|
||||
param->MADJ_MAX = 96;
|
||||
@@ -2164,10 +2043,10 @@ void GetDDR3Info(PAST2300DRAMParam param)
|
||||
param->REG_DQSIC = 0x000000E2;
|
||||
param->REG_MRS = 0x04001600 | TRAP_MRS;
|
||||
param->REG_EMRS = 0x00000000;
|
||||
param->REG_IOZ = 0x00000034;
|
||||
param->REG_IOZ = 0x00000023;
|
||||
param->REG_DRV = 0x000000FA;
|
||||
param->REG_DQIDLY = 0x00000089;
|
||||
param->REG_FREQ = 0x000050C0;
|
||||
param->REG_FREQ = 0x00005040;
|
||||
param->MADJ_MAX = 96;
|
||||
param->DLL2_FINETUNE_STEP = 4;
|
||||
|
||||
@@ -2195,7 +2074,7 @@ void GetDDR3Info(PAST2300DRAMParam param)
|
||||
param->REG_DQSIC = 0x000000E2;
|
||||
param->REG_MRS = 0x04001600 | TRAP_MRS;
|
||||
param->REG_EMRS = 0x00000000;
|
||||
param->REG_IOZ = 0x00000034;
|
||||
param->REG_IOZ = 0x00000023;
|
||||
param->REG_DRV = 0x000000FA;
|
||||
param->REG_DQIDLY = 0x00000089;
|
||||
param->REG_FREQ = 0x000050C0;
|
||||
@@ -2375,8 +2254,8 @@ DDR2_Init_Start:
|
||||
MOutdwm(mmiobase, 0x1E6E0080, 0x00000000);
|
||||
MOutdwm(mmiobase, 0x1E6E0084, 0x00FFFFFF);
|
||||
MOutdwm(mmiobase, 0x1E6E0088, param->REG_DQIDLY);
|
||||
MOutdwm(mmiobase, 0x1E6E0018, 0x4040A130);
|
||||
MOutdwm(mmiobase, 0x1E6E0018, 0x20402330);
|
||||
MOutdwm(mmiobase, 0x1E6E0018, 0x4000A130);
|
||||
MOutdwm(mmiobase, 0x1E6E0018, 0x00002330);
|
||||
MOutdwm(mmiobase, 0x1E6E0038, 0x00000000);
|
||||
MOutdwm(mmiobase, 0x1E6E0040, 0xFF808000);
|
||||
MOutdwm(mmiobase, 0x1E6E0044, 0x88848466);
|
||||
@@ -2396,11 +2275,6 @@ DDR2_Init_Start:
|
||||
do{
|
||||
data = MIndwm(mmiobase, 0x1E6E001C);
|
||||
}while(!(data & 0x08000000));
|
||||
MOutdwm(mmiobase, 0x1E6E0034, 0x00000001);
|
||||
MOutdwm(mmiobase, 0x1E6E000C, 0x00005C04);
|
||||
usleep(10);
|
||||
MOutdwm(mmiobase, 0x1E6E000C, 0x00000000);
|
||||
MOutdwm(mmiobase, 0x1E6E0034, 0x00000000);
|
||||
data = MIndwm(mmiobase, 0x1E6E001C);
|
||||
data = (data >> 8) & 0xff;
|
||||
while((data & 0x08) || ((data & 0x7) < 2) || (data < 4)){
|
||||
@@ -2429,14 +2303,10 @@ DDR2_Init_Start:
|
||||
data = MIndwm(mmiobase, 0x1E6E001C);
|
||||
}while(!(data & 0x08000000));
|
||||
|
||||
MOutdwm(mmiobase, 0x1E6E0034, 0x00000001);
|
||||
MOutdwm(mmiobase, 0x1E6E000C, 0x00005C04);
|
||||
usleep(10);
|
||||
MOutdwm(mmiobase, 0x1E6E000C, 0x00000000);
|
||||
MOutdwm(mmiobase, 0x1E6E0034, 0x00000000);
|
||||
data = MIndwm(mmiobase, 0x1E6E001C);
|
||||
data = (data >> 8) & 0xff;
|
||||
}
|
||||
MOutdwm(mmiobase, 0x1E720058, MIndwm(mmiobase, 0x1E6E0068) & 0xffff);
|
||||
data = MIndwm(mmiobase, 0x1E6E0018) | 0xC00;
|
||||
MOutdwm(mmiobase, 0x1E6E0018, data);
|
||||
|
||||
@@ -2469,14 +2339,6 @@ DDR2_Init_Start:
|
||||
MOutdwm(mmiobase, 0x1E6E0034, data | 0x3);
|
||||
MOutdwm(mmiobase, 0x1E6E0120, param->REG_FREQ);
|
||||
|
||||
/* Wait DQI delay lock */
|
||||
do{
|
||||
data = MIndwm(mmiobase, 0x1E6E0080);
|
||||
}while(!(data & 0x40000000));
|
||||
/* Wait DQSI delay lock */
|
||||
do{
|
||||
data = MIndwm(mmiobase, 0x1E6E0020);
|
||||
}while(!(data & 0x00000800));
|
||||
/* Calibrate the DQSI delay */
|
||||
if ((CBRDLL2(param)==FALSE) && (retry++ < 10))
|
||||
goto DDR2_Init_Start;
|
||||
@@ -2523,8 +2385,8 @@ DDR3_Init_Start:
|
||||
MOutdwm(mmiobase, 0x1E6E0080, 0x00000000);
|
||||
MOutdwm(mmiobase, 0x1E6E0084, 0x00FFFFFF);
|
||||
MOutdwm(mmiobase, 0x1E6E0088, param->REG_DQIDLY);
|
||||
MOutdwm(mmiobase, 0x1E6E0018, 0x4040A170);
|
||||
MOutdwm(mmiobase, 0x1E6E0018, 0x20402370);
|
||||
MOutdwm(mmiobase, 0x1E6E0018, 0x4000A170);
|
||||
MOutdwm(mmiobase, 0x1E6E0018, 0x00002370);
|
||||
MOutdwm(mmiobase, 0x1E6E0038, 0x00000000);
|
||||
MOutdwm(mmiobase, 0x1E6E0040, 0xFF444444);
|
||||
MOutdwm(mmiobase, 0x1E6E0044, 0x22222222);
|
||||
@@ -2544,11 +2406,6 @@ DDR3_Init_Start:
|
||||
do{
|
||||
data = MIndwm(mmiobase, 0x1E6E001C);
|
||||
}while(!(data & 0x08000000));
|
||||
MOutdwm(mmiobase, 0x1E6E0034, 0x00000001);
|
||||
MOutdwm(mmiobase, 0x1E6E000C, 0x00005C04);
|
||||
usleep(10);
|
||||
MOutdwm(mmiobase, 0x1E6E000C, 0x00000000);
|
||||
MOutdwm(mmiobase, 0x1E6E0034, 0x00000000);
|
||||
data = MIndwm(mmiobase, 0x1E6E001C);
|
||||
data = (data >> 8) & 0xff;
|
||||
while((data & 0x08) || ((data & 0x7) < 2) || (data < 4)){
|
||||
@@ -2577,14 +2434,10 @@ DDR3_Init_Start:
|
||||
data = MIndwm(mmiobase, 0x1E6E001C);
|
||||
}while(!(data & 0x08000000));
|
||||
|
||||
MOutdwm(mmiobase, 0x1E6E0034, 0x00000001);
|
||||
MOutdwm(mmiobase, 0x1E6E000C, 0x00005C04);
|
||||
usleep(10);
|
||||
MOutdwm(mmiobase, 0x1E6E000C, 0x00000000);
|
||||
MOutdwm(mmiobase, 0x1E6E0034, 0x00000000);
|
||||
data = MIndwm(mmiobase, 0x1E6E001C);
|
||||
data = (data >> 8) & 0xff;
|
||||
}
|
||||
MOutdwm(mmiobase, 0x1E720058, MIndwm(mmiobase, 0x1E6E0068) & 0xffff);
|
||||
data = MIndwm(mmiobase, 0x1E6E0018) | 0xC00;
|
||||
MOutdwm(mmiobase, 0x1E6E0018, data);
|
||||
|
||||
@@ -2602,7 +2455,7 @@ DDR3_Init_Start:
|
||||
MOutdwm(mmiobase, 0x1E6E000C, 0x00005C08);
|
||||
MOutdwm(mmiobase, 0x1E6E0028, 0x00000001);
|
||||
|
||||
MOutdwm(mmiobase, 0x1E6E000C, 0x7FFF5C01);
|
||||
MOutdwm(mmiobase, 0x1E6E000C, 0x00005C01);
|
||||
data = 0;
|
||||
if(param->WODT){
|
||||
data = 0x300;
|
||||
@@ -2612,14 +2465,6 @@ DDR3_Init_Start:
|
||||
}
|
||||
MOutdwm(mmiobase, 0x1E6E0034, data | 0x3);
|
||||
|
||||
/* Wait DQI delay lock */
|
||||
do{
|
||||
data = MIndwm(mmiobase, 0x1E6E0080);
|
||||
}while(!(data & 0x40000000));
|
||||
/* Wait DQSI delay lock */
|
||||
do{
|
||||
data = MIndwm(mmiobase, 0x1E6E0020);
|
||||
}while(!(data & 0x00000800));
|
||||
/* Calibrate the DQSI delay */
|
||||
if ((CBRDLL2(param)==FALSE) && (retry++ < 10))
|
||||
goto DDR3_Init_Start;
|
||||
|
||||
Reference in New Issue
Block a user