📄 modetbl.cpp
字号:
value = FIELD_SET(value, GPIO_MUX_HIGH, 57, CRT_ZVPORT);
value = FIELD_SET(value, GPIO_MUX_HIGH, 56, CRT_ZVPORT);
POKE_32(GPIO_MUX_HIGH, value);
*/
//RETAILMSG(1,(TEXT("SMI - Modetbl.cpp - WaitForVBlank---\n")));
//WaitForVBlank();
//WaitForVBlank();
//WaitForVBlank();
//WaitForVBlank();
//RETAILMSG(1,(TEXT("SMI - Modetbl.cpp - WaitForVBlank+++\n")));
// Configure PCI Burst
//value = peekRegisterDWord(SYSTEM_CTRL);
//value = FIELD_SET(value, SYSTEM_CTRL, PCI_BURST, ENABLE);
//value = FIELD_SET(value, SYSTEM_CTRL, PCI_MASTER, START);
//value = FIELD_SET(value, SYSTEM_CTRL, PCI_BURST_READ, ENABLE);
//value = FIELD_SET(value, SYSTEM_CTRL, PCI_SLAVE_BURST_READ_SIZE, 8);
//value = FIELD_SET(value, SYSTEM_CTRL, LATENCY_TIMER, ENABLE);
//value = 0x22008030;
//pokeRegisterDWord(SYSTEM_CTRL, value);
//RETAILMSG(1,(TEXT("SMI - Modetbl.cpp - PCIBurst+++\n")));
//--------------------------------------------------------------------
//--------------------------------------------------------------------
//Memory clock setting and Enginer clock setting - mill.chen -20070119
//--------------------------------------------------------------------
//--------------------------------------------------------------------
value = peekRegisterDWord(POWER_MODE0_CLOCK);
switch(m_SMISettings.m_EngineClock)
{
case 0://336MHZ
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 336);
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 1);
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 0);
break;
case 1://288MHZ
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 288);
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 1);
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 0);
break;
case 2://168MHZ
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 336);
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 1);
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 1);
break;
case 3://144MHZ
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 288);
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 1);
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 1);
break;
case 4://112MHZ
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 336);
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 3);
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 0);
break;
case 5://96MHZ
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 288);
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 3);
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 0);
break;
case 6://84MHZ
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 336);
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 1);
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 2);
break;
case 7://72MHZ
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 288);
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 1);
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 2);
break;
case 8://56MHZ
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 336);
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 3);
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 1);
break;
case 9://48MHZ
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 288);
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 3);
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 1);
break;
case 10://42MHZ
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 336);
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 1);
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 3);
break;
case 11://36MHZ
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 288);
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 1);
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 3);
break;
case 12://28MHZ
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 336);
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 3);
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 2);
break;
case 13://24MHZ
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 288);
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 3);
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 2);
break;
case 14://21MHZ
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 336);
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 1);
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 4);
break;
case 15://18MHZ
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 288);
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 1);
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 4);
break;
case 16://14MHZ
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 336);
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 3);
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 3);
break;
case 17://7MHZ
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 336);
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 3);
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 4);
break;
case 18://6MHZ
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 288);
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 3);
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 4);
break;
case 19://3MHZ
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 288);
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 3);
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 5);
break;
default:
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 288);
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 1);
value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 2);
break;
}
switch(m_SMISettings.m_MemoryClock)
{
case 0://336MHZ
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 336);
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 1);
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 0);
break;
case 1://288MHZ
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 288);
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 1);
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 0);
break;
case 2://168MHZ
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 336);
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 1);
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 1);
break;
case 3://144MHZ
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 288);
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 1);
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 1);
break;
case 4://112MHZ
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 336);
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 3);
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 0);
break;
case 5://96MHZ
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 288);
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 3);
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 0);
break;
case 6://84MHZ
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 336);
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 1);
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 2);
break;
case 7://72MHZ
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 288);
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 1);
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 2);
break;
case 8://56MHZ
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 336);
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 3);
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 1);
break;
case 9://48MHZ
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 288);
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 3);
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 1);
break;
case 10://42MHZ
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 336);
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 1);
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 3);
break;
case 11://36MHZ
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 288);
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 1);
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 3);
break;
case 12://28MHZ
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 336);
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 3);
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 2);
break;
case 13://24MHZ
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 288);
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 3);
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 2);
break;
case 14://21MHZ
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 336);
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 1);
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 4);
break;
case 15://18MHZ
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 288);
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 1);
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 4);
break;
case 16://14MHZ
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 336);
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 3);
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 3);
break;
case 17://7MHZ
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 336);
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 3);
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 4);
break;
case 18://6MHZ
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 288);
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 3);
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 4);
break;
case 19://3MHZ
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 288);
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 3);
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 5);
break;
default:
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 336);
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 1);
value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 1);
break;
}
pokeRegisterDWord(POWER_MODE0_CLOCK, value);
//------------------------------------------------------------
//-----------------------------------------------------------
//use the 502 PLL3 -- mill.chen
//---------------------------------------------------------------
//--------------------------------------------------------------
if(rev() > 0xB0)
{
//find vesamode
vesaMode = findMode(mode_table, m_SMISettings.m_dwCxPanel, m_SMISettings.m_dwCyPanel,
m_pMode->frequency);
//change to mode0
value = peekRegisterDWord(POWER_MODE_CTRL);
value = FIELD_SET(value, POWER_MODE_CTRL, MODE, MODE0);
pokeRegisterDWord(POWER_MODE_CTRL, value);
//configue 0x74 mode_table
value = 0;
value = FIELD_VALUE(value, SYSTEM_PLL3_CLOCK, M, vesaMode->M);
value = FIELD_VALUE(value, SYSTEM_PLL3_CLOCK, N, vesaMode->N);
if(vesaMode->bit15 == true)
value = FIELD_SET(value, SYSTEM_PLL3_CLOCK, DIVIDE, 2);
else
value = FIELD_SET(value, SYSTEM_PLL3_CLOCK, DIVIDE, 1);
value = FIELD_SET(value, SYSTEM_PLL3_CLOCK, INPUT, CRYSTAL);
value = FIELD_SET(value, SYSTEM_PLL3_CLOCK, POWER, ON);
pokeRegisterDWord(SYSTEM_PLL3_CLOCK, value);
//configue 0x44
value = peekRegisterDWord(POWER_MODE0_CLOCK);
value &= 0x00FFFFFF ;
if(vesaMode->bit31 == true)
value = FIELD_SET(value, POWER_MODE0_CLOCK, PLL3_P1XCLK , ENABLE);
else
value = FIELD_SET(value, POWER_MODE0_CLOCK, PLL3_P1XCLK , DISABLE);
value = FIELD_SET(value, POWER_MODE0_CLOCK, PLL3, ENABLE);
//Memory clock to 166MHZ and Enginer clock to 83MHZ
// value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SELECT, 336);
//value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_DIVIDER, 1);
//value = FIELD_SET(value, POWER_MODE0_CLOCK, MCLK_SHIFT, 2);
//value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SELECT, 336);
//value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_DIVIDER, 1);
//value = FIELD_SET(value, POWER_MODE0_CLOCK, M2XCLK_SHIFT, 1);
pokeRegisterDWord(POWER_MODE0_CLOCK, value);
//configue 0x080024 and 0x080028 panel H-clock
value = 0;
value = FIELD_VALUE(value, PANEL_HORIZONTAL_TOTAL, TOTAL, vesaMode->horizontal_total-1);
value = FIELD_VALUE(value, PANEL_HORIZONTAL_TOTAL, DISPLAY_END, vesaMode->horizontal_display_end-1);
pokeRegisterDWord(PANEL_HORIZONTAL_TOTAL, value);
value = 0;
value = FIELD_VALUE(value, PANEL_HORIZONTAL_SYNC, WIDTH, vesaMode->horizontal_sync_width);
value = FIELD_VALUE(value, PANEL_HORIZONTAL_SYNC, START, vesaMode->horizontal_sync_start-1);
pokeRegisterDWord(PANEL_HORIZONTAL_SYNC, value);
//configue 0x08002c and 0x080030 panel V-clock
value = 0;
value = FIELD_VALUE(value, PANEL_VERTICAL_TOTAL, TOTAL, vesaMode->vertical_total-1);
value = FIELD_VALUE(value, PANEL_VERTICAL_TOTAL, DISPLAY_END, vesaMode->vertical_display_end-1);
value = 0;
value = FIELD_VALUE(value, PANEL_VERTICAL_SYNC, HEIGHT, vesaMode->vertical_sync_height);
value = FIELD_VALUE(value, PANEL_VERTICAL_SYNC, START, vesaMode->vertical_sync_start-1);
pokeRegisterDWord(PANEL_VERTICAL_SYNC, value);
//config polirity
value = peekRegisterDWord(PANEL_DISPLAY_CTRL);
value = FIELD_VALUE(value, PANEL_DISPLAY_CTRL, HSYNC_PHASE, vesaMode->horizontal_sync_polarity);
value = FIELD_VALUE(value, PANEL_DISPLAY_CTRL, VSYNC_PHASE, vesaMode->vertical_sync_polarity);
pokeRegisterDWord(PANEL_DISPLAY_CTRL, value);
//PCI burst enable
value = peekRegisterDWord(SYSTEM_CTRL);
value = FIELD_SET(value, SYSTEM_CTRL, PCI_BURST, ENABLE);
pokeRegisterDWord(SYSTEM_CTRL, value);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -