📄 init.c
字号:
} if((HwDeviceExtension->jChipType == SIS_550) || (HwDeviceExtension->jChipType == SIS_640) || (HwDeviceExtension->jChipType == SIS_740) || (HwDeviceExtension->jChipType == SIS_650)) { if((*SiS_Pr->pSiS_SoftSetting & SoftDRAMType) == 0){ temp = (UCHAR)SiS_GetReg1(SiS_Pr->SiS_P3c4,0x13) & 0x07; } }#endif SiS_Pr->SiS_RAMType = temp; SiS_SetMemoryClock(SiS_Pr, ROMAddr, HwDeviceExtension); /* Set default register contents */ SiS_SetReg1(SiS_Pr->SiS_P3c4,0x07,*SiS_Pr->pSiS_SR07); /* DAC speed */ if((HwDeviceExtension->jChipType != SIS_540) && (HwDeviceExtension->jChipType != SIS_630) && (HwDeviceExtension->jChipType != SIS_730)){ for(i=0x15;i<0x1C;i++) { SiS_SetReg1(SiS_Pr->SiS_P3c4,i,SiS_Pr->SiS_SR15[i-0x15][SiS_Pr->SiS_RAMType]); } }#ifdef SIS315H if ((HwDeviceExtension->jChipType == SIS_315H ) || (HwDeviceExtension->jChipType == SIS_315PRO)) { for(i=0x40;i<=0x44;i++) { SiS_SetReg1(SiS_Pr->SiS_P3d4,i,SiS_Pr->SiS_CR40[i-0x40][SiS_Pr->SiS_RAMType]); } SiS_SetReg1(SiS_Pr->SiS_P3d4,0x48,0x23); SiS_SetReg1(SiS_Pr->SiS_P3d4,0x49,SiS_Pr->SiS_CR49[0]); /* SiS_SetReg1(SiS_Pr->SiS_P3c4,0x25,SiS_Pr->SiS_SR25[0]); */ }#endif SiS_SetReg1(SiS_Pr->SiS_P3c4,0x1F,*SiS_Pr->pSiS_SR1F); /* DAC pedestal */ SiS_SetReg1(SiS_Pr->SiS_P3c4,0x20,0xA0); SiS_SetReg1(SiS_Pr->SiS_P3c4,0x23,*SiS_Pr->pSiS_SR23); SiS_SetReg1(SiS_Pr->SiS_P3c4,0x24,*SiS_Pr->pSiS_SR24); SiS_SetReg1(SiS_Pr->SiS_P3c4,0x25,SiS_Pr->SiS_SR25[0]);#ifdef SIS300 if(HwDeviceExtension->jChipType == SIS_300) { SiS_SetReg1(SiS_Pr->SiS_P3c4,0x21,0x84); SiS_SetReg1(SiS_Pr->SiS_P3c4,0x22,0x00); }#endif SR11 = 0x0F; SiS_SetReg1(SiS_Pr->SiS_P3c4,0x11,SR11); /* Power Management & DDC port */ SiS_UnLockCRT2(SiS_Pr, HwDeviceExtension, BaseAddr); SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x00,0x00); SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x02,*SiS_Pr->pSiS_CRT2Data_1_2);#ifdef SIS315H if((HwDeviceExtension->jChipType == SIS_315H) || (HwDeviceExtension->jChipType == SIS_315PRO) || (HwDeviceExtension->jChipType == SIS_550) || (HwDeviceExtension->jChipType == SIS_640) || (HwDeviceExtension->jChipType == SIS_740) || (HwDeviceExtension->jChipType == SIS_650)) SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2E,0x08); /* use VB */#endif temp = *SiS_Pr->pSiS_SR32; if(SiS_BridgeIsOn(SiS_Pr, BaseAddr)) { temp &= 0xEF; } SiS_SetReg1(SiS_Pr->SiS_P3c4,0x32,temp);#ifdef SIS315H if((HwDeviceExtension->jChipType == SIS_315H) || (HwDeviceExtension->jChipType == SIS_315PRO)) { HwDeviceExtension->pQueryVGAConfigSpace(HwDeviceExtension,0x50,0,&Temp); Temp >>= 20; Temp &= 0xF; if (Temp != 1) { SiS_SetReg1(SiS_Pr->SiS_P3c4,0x25,SiS_Pr->SiS_SR25[1]); SiS_SetReg1(SiS_Pr->SiS_P3d4,0x49,SiS_Pr->SiS_CR49[1]); } SiS_SetReg1(SiS_Pr->SiS_P3c4,0x27,0x1F); SiS_SetReg1(SiS_Pr->SiS_P3c4,0x31,*SiS_Pr->pSiS_SR31); SiS_SetReg1(SiS_Pr->SiS_P3c4,0x32,*SiS_Pr->pSiS_SR32); SiS_SetReg1(SiS_Pr->SiS_P3c4,0x33,*SiS_Pr->pSiS_SR33); }#endif if (SiS_BridgeIsOn(SiS_Pr, BaseAddr) == 0) { if(SiS_Pr->SiS_IF_DEF_LVDS == 0) { SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x00,0x1C); SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x0D,*SiS_Pr->pSiS_CRT2Data_4_D); SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x0E,*SiS_Pr->pSiS_CRT2Data_4_E); SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x10,*SiS_Pr->pSiS_CRT2Data_4_10); SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x0F,0x3F); } SiS_LockCRT2(SiS_Pr, HwDeviceExtension, BaseAddr); } SiS_SetReg1(SiS_Pr->SiS_P3d4,0x83,0x00);#ifdef SIS315H if ((HwDeviceExtension->jChipType==SIS_315H) || (HwDeviceExtension->jChipType==SIS_315PRO)) { if (HwDeviceExtension->bSkipDramSizing==TRUE) { SiS_SetDRAMModeRegister(SiS_Pr, ROMAddr,HwDeviceExtension); pSR = HwDeviceExtension->pSR; if (pSR!=NULL) { while (pSR->jIdx!=0xFF) { SiS_SetReg1(SiS_Pr->SiS_P3c4,pSR->jIdx,pSR->jVal); pSR++; } } } else SiS_SetDRAMSize_310(SiS_Pr, HwDeviceExtension); }#endif#ifdef SIS315H if((HwDeviceExtension->jChipType==SIS_550)){ /* SetDRAMConfig begin *//* SiS_SetReg1(SiS_Pr->SiS_P3c4,0x12,SR12); SiS_SetReg1(SiS_Pr->SiS_P3c4,0x13,SR13); SiS_SetReg1(SiS_Pr->SiS_P3c4,0x14,SR14); SiS_SetReg1(SiS_Pr->SiS_P3c4,0x16,SR16); SiS_SetReg1(SiS_Pr->SiS_P3c4,0x17,SR17); SiS_SetReg1(SiS_Pr->SiS_P3c4,0x18,SR18); SiS_SetReg1(SiS_Pr->SiS_P3c4,0x19,SR19); SiS_SetReg1(SiS_Pr->SiS_P3c4,0x1A,SR1A); */ /* SetDRAMConfig end */ }#endif#ifdef SIS300 if(HwDeviceExtension->jChipType == SIS_300) { if (HwDeviceExtension->bSkipDramSizing == TRUE) {/* SiS_SetDRAMModeRegister(ROMAddr,HwDeviceExtension); temp = (HwDeviceExtension->pSR)->jVal; SiS_SetReg1(SiS_Pr->SiS_P3c4,0x13,temp); temp = (HwDeviceExtension->pSR)->jVal; SiS_SetReg1(SiS_Pr->SiS_P3c4,0x14,temp); */ } else {#ifdef TC SiS_SetReg1(SiS_Pr->SiS_P3c4,0x13,SR13); SiS_SetReg1(SiS_Pr->SiS_P3c4,0x14,SR14); SiS_SetRegANDOR(SiS_Pr->SiS_P3c4,0x15,0xFF,0x04);#else SiS_SetDRAMSize_300(SiS_Pr, HwDeviceExtension); SiS_SetDRAMSize_300(SiS_Pr, HwDeviceExtension);#endif } } if((HwDeviceExtension->jChipType==SIS_540)|| (HwDeviceExtension->jChipType==SIS_630)|| (HwDeviceExtension->jChipType==SIS_730)) {#if 0 SiS_SetReg1(SiS_Pr->SiS_P3c4,0x12,SR12); SiS_SetReg1(SiS_Pr->SiS_P3c4,0x13,SR13); SiS_SetReg1(SiS_Pr->SiS_P3c4,0x14,SR14); SiS_SetReg1(SiS_Pr->SiS_P3c4,0x16,SR16); SiS_SetReg1(SiS_Pr->SiS_P3c4,0x17,SR17); SiS_SetReg1(SiS_Pr->SiS_P3c4,0x18,SR18); SiS_SetReg1(SiS_Pr->SiS_P3c4,0x19,SR19); SiS_SetReg1(SiS_Pr->SiS_P3c4,0x1A,SR1A);#endif }/* SetDRAMSize end */#endif /* SIS300 */ /* Set default Ext2Regs */#if 0 AGP=1; temp=(UCHAR)SiS_GetReg1(SiS_Pr->SiS_P3c4,0x3A); temp &= 0x30; if(temp == 0x30) AGP=0; if(AGP == 0) *SiS_Pr->pSiS_SR21 &= 0xEF; SiS_SetReg1(SiS_Pr->SiS_P3c4,0x21,*SiS_Pr->pSiS_SR21); if(AGP == 1) *SiS_Pr->pSiS_SR22 &= 0x20; SiS_SetReg1(SiS_Pr->SiS_P3c4,0x22,*SiS_Pr->pSiS_SR22);#endif SiS_SetReg1(SiS_Pr->SiS_P3c4,0x21,*SiS_Pr->pSiS_SR21); SiS_SetReg1(SiS_Pr->SiS_P3c4,0x22,*SiS_Pr->pSiS_SR22);#if 0 SiS_SetReg3(SiS_Pr->SiS_P3c6,0xff); SiS_ClearDAC(SiS_Pr, SiS_Pr->SiS_P3c8);#endif#ifdef LINUXBIOS /* TW: This is not needed for our purposes */ SiS_DetectMonitor(SiS_Pr, HwDeviceExtension,BaseAddr); /* Sense CRT1 */ SiS_GetSenseStatus(SiS_Pr, HwDeviceExtension,ROMAddr); /* Sense CRT2 */#endif return(TRUE);}voidSiS_Set_LVDS_TRUMPION(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension){ USHORT temp = 0;#ifdef SiS300 if((HwDeviceExtension->jChipType == SIS_540) || (HwDeviceExtension->jChipType == SIS_630) || (HwDeviceExtension->jChipType == SIS_730)) { /* TW: Read POWER_ON_TRAP and copy to CR37 */ temp = (UCHAR)SiS_GetReg1(SiS_Pr->SiS_P3c4,0x1A); temp = (temp & 0xE0) >> 4; SiS_SetRegANDOR(SiS_Pr->SiS_P3d4,0x37,0xF1,temp); }#endif#ifdef SIS315H if((HwDeviceExtension->jChipType == SIS_640) || (HwDeviceExtension->jChipType == SIS_740) || (HwDeviceExtension->jChipType == SIS_650)) {#if 0 /* TW: This is not required */ /* TW: Read POWER_ON_TRAP and copy to CR37 */ temp = (UCHAR)SiS_GetReg1(SiS_Pr->SiS_P3c4,0x1A); temp = (temp & 0xE0) >> 4; SiS_SetRegANDOR(SiS_Pr->SiS_P3d4,0x37,0xF1,temp);#endif }#endif SiSSetLVDSetc(SiS_Pr, HwDeviceExtension, 0);}/* =============== SiS 300 dram sizing begin =============== */#ifdef SIS300voidSiS_SetDRAMSize_300(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension){ ULONG FBAddr = (ULONG)HwDeviceExtension->pjVideoMemoryAddress; USHORT SR13, SR14=0, buswidth, Done; SHORT i, j, k; USHORT data, TotalCapacity, PhysicalAdrOtherPage=0; ULONG Addr; UCHAR temp; int PseudoRankCapacity, PseudoTotalCapacity, PseudoAdrPinCount; int RankCapacity, AdrPinCount, BankNumHigh, BankNumMid, MB2Bank; int PageCapacity, PhysicalAdrHigh, PhysicalAdrHalfPage; SiSSetMode(SiS_Pr, HwDeviceExtension, 0x2e); SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x01,0x20); /* Turn OFF Display */ SiS_SetReg1(SiS_Pr->SiS_P3c4,0x13,0x00); SiS_SetReg1(SiS_Pr->SiS_P3c4,0x14,0xBF); buswidth = SiS_ChkBUSWidth_300(SiS_Pr, FBAddr); MB2Bank = 16; Done = 0; for(i=6; i>=0; i--) { if(Done == 1) break; PseudoRankCapacity = 1 << i; for(j=4; j>=1; j--) { if(Done == 1) break; PseudoTotalCapacity = PseudoRankCapacity * j; PseudoAdrPinCount = 15 - j; if(PseudoTotalCapacity <= 64) { for(k=0; k<=16; k++) { if(Done == 1) break; RankCapacity = buswidth * SiS_DRAMType[k][3]; AdrPinCount = SiS_DRAMType[k][2] + SiS_DRAMType[k][0]; if(RankCapacity == PseudoRankCapacity) if(AdrPinCount <= PseudoAdrPinCount) { if(j == 3) { /* Rank No */ BankNumHigh = RankCapacity * MB2Bank * 3 - 1; BankNumMid = RankCapacity * MB2Bank * 1 - 1; } else { BankNumHigh = RankCapacity * MB2Bank * j - 1; BankNumMid = RankCapacity * MB2Bank * j / 2 - 1; } PageCapacity = (1 << SiS_DRAMType[k][1]) * buswidth * 4; PhysicalAdrHigh = BankNumHigh; PhysicalAdrHalfPage = (PageCapacity / 2 + PhysicalAdrHigh) % PageCapacity; PhysicalAdrOtherPage = PageCapacity * SiS_DRAMType[k][2] + PhysicalAdrHigh; /* Write data */ /*Test*/ SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x15,0xFB); SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x15,0x04); /*/Test*/ TotalCapacity = SiS_DRAMType[k][3] * buswidth; SR13 = SiS_DRAMType[k][4]; if(buswidth == 4) SR14 = (TotalCapacity - 1) | 0x80; if(buswidth == 2) SR14 = (TotalCapacity - 1) | 0x40; if(buswidth == 1) SR14 = (TotalCapacity - 1) | 0x00; SiS_SetReg1(SiS_Pr->SiS_P3c4,0x13,SR13); SiS_SetReg1(SiS_Pr->SiS_P3c4,0x14,SR14); Addr = FBAddr + (BankNumHigh) * 64 * 1024 + PhysicalAdrHigh; *((USHORT *)(Addr)) = (USHORT)PhysicalAdrHigh; Addr = FBAddr + (BankNumMid) * 64 * 1024 + PhysicalAdrHigh; *((USHORT *)(Addr)) = (USHORT)BankNumMid; Addr = FBAddr + (BankNumHigh) * 64 * 1024 + PhysicalAdrHalfPage; *((USHORT *)(Addr)) = (USHORT)PhysicalAdrHalfPage; Addr = FBAddr + (BankNumHigh) * 64 * 1024 + PhysicalAdrOtherPage;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -