diff options
author | raywu <raywu@aaeon.com> | 2018-06-28 16:36:05 +0800 |
---|---|---|
committer | raywu <raywu@aaeon.com> | 2018-06-28 16:36:05 +0800 |
commit | b2ea93f87c851f04969d1d70a617153b7db91cfa (patch) | |
tree | aa82204808d59817a1df5a667d6dcb396d9f5401 /Board/IO/F81866/BSP | |
parent | fc887e4a3296ceea8ce6bc15999f03059760a495 (diff) | |
download | zprj-b2ea93f87c851f04969d1d70a617153b7db91cfa.tar.xz |
Supported F81866 Smart FAN
Diffstat (limited to 'Board/IO/F81866/BSP')
-rw-r--r-- | Board/IO/F81866/BSP/DxeIoTable.h | 3 | ||||
-rw-r--r-- | Board/IO/F81866/BSP/F81866HwmOemHooks.c | 9 | ||||
-rw-r--r-- | Board/IO/F81866/BSP/F81866SmartFan.c | 347 |
3 files changed, 243 insertions, 116 deletions
diff --git a/Board/IO/F81866/BSP/DxeIoTable.h b/Board/IO/F81866/BSP/DxeIoTable.h index d56f42d..fa7096d 100644 --- a/Board/IO/F81866/BSP/DxeIoTable.h +++ b/Board/IO/F81866/BSP/DxeIoTable.h @@ -119,7 +119,8 @@ DXE_DEVICE_INIT_DATA DXE_HWM_Init_Table_After_Active[] = { // PECI/TSI/SMBus Setting #if (F81866_PECI_SUPPORT) {0x0A, 0xDE, (F81866_INTEL_SEL << 5) | F81866_PECI_EN }, - {0x09, 0x01, F81866_I2C_ADDR & 0xFE }, +// {0x09, 0x01, F81866_I2C_ADDR & 0xFE }, + {0x0C, 0x00, 0x64 }, #endif #if (F81866_IBEX_SUPPORT) {0x0A, 0xDD, (F81866_INTEL_SEL << 5) | (F81866_IBEX_EN << 1)}, diff --git a/Board/IO/F81866/BSP/F81866HwmOemHooks.c b/Board/IO/F81866/BSP/F81866HwmOemHooks.c index 0ffa3c6..22d80b9 100644 --- a/Board/IO/F81866/BSP/F81866HwmOemHooks.c +++ b/Board/IO/F81866/BSP/F81866HwmOemHooks.c @@ -469,7 +469,7 @@ GetAndUpdateVIN2Voltage ( //OEM_TODO:Get value with HWM IO interface GetValueWithIO(0x00,0x22,&VIN2) ; // Register 0x22 - VIN2 = VIN2*8*(20+47)/47; + VIN2 = VIN2*8*(20+2)/2; Data->Value = (UINT16)VIN2; return; @@ -503,7 +503,8 @@ GetAndUpdateVIN3Voltage ( //OEM_TODO:Get value with HWM IO interface GetValueWithIO(0x00,0x23,&VIN3) ; // Register 0x23 - VIN3 = VIN3*8; + //VIN3 = VIN3*8; + VIN3 = VIN3*8*(200 + 47) / 47; Data->Value = (UINT16)VIN3; return; @@ -537,7 +538,7 @@ GetAndUpdateVIN4Voltage ( //OEM_TODO:Get value with HWM IO interface GetValueWithIO(0x00,0x24,&VIN4) ; // Register 0x24 - VIN4 = VIN4*8*(100+100)/100; + VIN4 = VIN4*8; Data->Value = (UINT16)VIN4; return; @@ -571,7 +572,7 @@ GetAndUpdateVSB5VVoltage ( //OEM_TODO:Get value with HWM IO interface GetValueWithIO(0x00,0x27,&VSB5V) ; // Register 0x27 - VSB5V = VSB5V*8*2; + VSB5V = VSB5V*8*3; Data->Value = (UINT16)VSB5V; return; diff --git a/Board/IO/F81866/BSP/F81866SmartFan.c b/Board/IO/F81866/BSP/F81866SmartFan.c index 674a73e..23a7cc8 100644 --- a/Board/IO/F81866/BSP/F81866SmartFan.c +++ b/Board/IO/F81866/BSP/F81866SmartFan.c @@ -54,46 +54,70 @@ typedef struct _S3_SAVE_DATA{ //---------------------------------------------------------------------------------------------- // smart system fan registers need init AfterActivate. !!!AfterActivate //---------------------------------------------------------------------------------------------- +#define IDX_FAN_MODE 0 +#define IDX_TEMP_HYS 1 +#define IDX_FAN_SPEED_MSB 2 +#define IDX_FAN_SPEED_LSB 3 +#define IDX_TEMP_BOUND1 4 +#define IDX_TEMP_BOUND2 5 +#define IDX_TEMP_BOUND3 6 +#define IDX_TEMP_BOUND4 7 +#define IDX_SPEED_SEG1 8 +#define IDX_SPEED_SEG2 9 +#define IDX_SPEED_SEG3 10 +#define IDX_SPEED_SEG4 11 +#define IDX_SPEED_SEG5 12 +#define IDX_TEMP_SRCSEL 13 + DXE_SMF_INIT_DATA DXE_FAN1_INIT_TABLE[] = { - {0x96, 0xFC, 0x00}, - {0xA2, 0xFF, 0x00}, - {0xA3, 0xFF, 0x00}, - {0xA6, 0xFF, 0x00}, - {0xA7, 0xFF, 0x00}, - {0xA8, 0xFF, 0x00}, - {0xA9, 0XFF, 0x00}, - {0xAB, 0xFF, 0x00}, - {0xAC, 0xFF, 0x00}, - {0xAD, 0xFF, 0x00}, - {0xAE, 0xFF, 0x00}, + {0x96, 0xFC, 0x00}, + {0x98, 0xF0, 0x02}, + {0xA2, 0xFF, 0x00}, + {0xA3, 0xFF, 0x00}, + {0xA6, 0xFF, 0x00}, + {0xA7, 0xFF, 0x00}, + {0xA8, 0xFF, 0x00}, + {0xA9, 0XFF, 0x00}, + {0xAA, 0xFF, 0xFF}, + {0xAB, 0xFF, 0x00}, + {0xAC, 0xFF, 0x00}, + {0xAD, 0xFF, 0x00}, + {0xAE, 0xFF, 0x00}, + {0xAF, 0xFC, 0x00}, }; DXE_SMF_INIT_DATA DXE_FAN2_INIT_TABLE[] = { {0x96, 0xF3, 0x00}, + {0x98, 0x0F, 0x20}, {0xB2, 0xFF, 0x00}, {0xB3, 0xFF, 0x00}, {0xB6, 0xFF, 0x00}, {0xB7, 0xFF, 0x00}, {0xB8, 0xFF, 0x00}, {0xB9, 0XFF, 0x00}, + {0xBA, 0xFF, 0xFF}, {0xBB, 0xFF, 0x00}, {0xBC, 0xFF, 0x00}, {0xBD, 0xFF, 0x00}, {0xBE, 0xFF, 0x00}, + {0xBF, 0xFC, 0x00}, }; DXE_SMF_INIT_DATA DXE_FAN3_INIT_TABLE[] = { {0x96, 0xCF, 0x00}, + {0x99, 0xF0, 0x02}, {0xC2, 0xFF, 0x00}, {0xC3, 0xFF, 0x00}, {0xC6, 0xFF, 0x00}, {0xC7, 0xFF, 0x00}, {0xC8, 0xFF, 0x00}, {0xC9, 0XFF, 0x00}, + {0xCA, 0xFF, 0xFF}, {0xCB, 0xFF, 0x00}, {0xCC, 0xFF, 0x00}, {0xCD, 0xFF, 0x00}, {0xCE, 0xFF, 0x00}, + {0xCF, 0xFC, 0x00}, }; S3_SAVE_DATA HwmS3SaveRegisterTbl[] = { @@ -102,36 +126,43 @@ S3_SAVE_DATA HwmS3SaveRegisterTbl[] = { // ---------------------- {0x00,0x94}, {0x00,0x96}, + {0x00,0x98}, {0x00,0xA2}, {0x00,0xA3}, {0x00,0xA6}, {0x00,0xA7}, {0x00,0xA8}, {0x00,0xA9}, + {0x00,0xAA}, {0x00,0xAB}, {0x00,0xAC}, {0x00,0xAD}, {0x00,0xAE}, + {0x00,0xAF}, {0x00,0xB2}, {0x00,0xB3}, {0x00,0xB6}, {0x00,0xB7}, {0x00,0xB8}, {0x00,0xB9}, + {0x00,0xBA}, {0x00,0xBB}, {0x00,0xBC}, {0x00,0xBD}, {0x00,0xBE}, + {0x00,0xBF}, {0x00,0xC2}, {0x00,0xC3}, {0x00,0xC6}, {0x00,0xC7}, {0x00,0xC8}, {0x00,0xC9}, + {0x00,0xCA}, {0x00,0xCB}, {0x00,0xCC}, {0x00,0xCD}, {0x00,0xCE}, + {0x00,0xCF}, }; //-------------------------------------------------------------------------- // Definition of smart fan functions @@ -141,6 +172,7 @@ static VOID SmartFanFuncStart(VOID); static VOID F81866_SMF1_INIT(void); static VOID F81866_SMF2_INIT(void); static VOID F81866_SMF3_INIT(void); +VOID F81866_FAN_Full(); static void F81866_SMF_WRITE_CFG(DXE_SMF_INIT_DATA DXE_SMF_MODEx_Table); static EFI_STATUS HwmCallbackReadyToBoot( IN EFI_EVENT Event, @@ -200,7 +232,9 @@ static VOID SmartFanFuncStart(VOID) //-------------------------------------------------------------------------- F81866_SMF1_INIT(); F81866_SMF2_INIT(); - F81866_SMF3_INIT(); +// F81866_SMF3_INIT(); // Zprj Not Suported FAN3 + F81866_FAN_Full(); + //Create event for boot script Status = CreateReadyToBootEvent( TPL_NOTIFY, @@ -228,39 +262,49 @@ void F81866_SMF1_INIT(VOID) { UINT8 i, temp; switch (SetupData.Fan1SmartFanMode) { - case 0: - DXE_FAN1_INIT_TABLE[0].OrData8 = 0x02;//mode - DXE_FAN1_INIT_TABLE[1].OrData8 = (UINT8)(1500000/SetupData.Fan1Mode0FixedSpeed >> 8);//mode - DXE_FAN1_INIT_TABLE[2].OrData8 = (UINT8)(1500000/SetupData.Fan1Mode0FixedSpeed & 0xFF);//mode - break; - case 1: - DXE_FAN1_INIT_TABLE[0].OrData8 = 0x03;//mode - DXE_FAN1_INIT_TABLE[2].OrData8 = (UINT8)SetupData.Fan1Mode1FixedDuty*0xFF/100;//mode - break; - case 2: - DXE_FAN1_INIT_TABLE[0].OrData8 = 0x00;//mode - DXE_FAN1_INIT_TABLE[3].OrData8 = SetupData.Fan1Mode2AutoRpmT1; - DXE_FAN1_INIT_TABLE[4].OrData8 = SetupData.Fan1Mode2AutoRpmT2; - DXE_FAN1_INIT_TABLE[5].OrData8 = SetupData.Fan1Mode2AutoRpmT3; - DXE_FAN1_INIT_TABLE[6].OrData8 = SetupData.Fan1Mode2AutoRpmT4; - DXE_FAN1_INIT_TABLE[7].OrData8 = (UINT8)((100-SetupData.Fan1Mode2AutoRpmF1)*32/60); - DXE_FAN1_INIT_TABLE[8].OrData8 = (UINT8)((100-SetupData.Fan1Mode2AutoRpmF2)*32/60); - DXE_FAN1_INIT_TABLE[9].OrData8 = (UINT8)((100-SetupData.Fan1Mode2AutoRpmF3)*32/60); - DXE_FAN1_INIT_TABLE[10].OrData8 = (UINT8)((100-SetupData.Fan1Mode2AutoRpmF4)*32/60); - break; - case 3: - DXE_FAN1_INIT_TABLE[0].OrData8 = 0x01;//mode - DXE_FAN1_INIT_TABLE[3].OrData8 = SetupData.Fan1Mode3AutoDutyT1; - DXE_FAN1_INIT_TABLE[4].OrData8 = SetupData.Fan1Mode3AutoDutyT2; - DXE_FAN1_INIT_TABLE[5].OrData8 = SetupData.Fan1Mode3AutoDutyT3; - DXE_FAN1_INIT_TABLE[6].OrData8 = SetupData.Fan1Mode3AutoDutyT4; - DXE_FAN1_INIT_TABLE[7].OrData8 = (UINT8)(SetupData.Fan1Mode3AutoDutyF1*0xFF/100); - DXE_FAN1_INIT_TABLE[8].OrData8 = (UINT8)(SetupData.Fan1Mode3AutoDutyF2*0xFF/100); - DXE_FAN1_INIT_TABLE[9].OrData8 = (UINT8)(SetupData.Fan1Mode3AutoDutyF3*0xFF/100); - DXE_FAN1_INIT_TABLE[10].OrData8 = (UINT8)(SetupData.Fan1Mode3AutoDutyF4*0xFF/100); - break; - default: - break; + case 0: + // Manual RPM Mode + DXE_FAN1_INIT_TABLE[ IDX_FAN_MODE ].OrData8 = 0x02;//mode + DXE_FAN1_INIT_TABLE[ IDX_FAN_SPEED_MSB ].OrData8 = (UINT8)(1500000/SetupData.Fan1Mode0FixedSpeed >> 8);//mode + DXE_FAN1_INIT_TABLE[ IDX_FAN_SPEED_LSB ].OrData8 = (UINT8)(1500000/SetupData.Fan1Mode0FixedSpeed & 0xFF);//mode + break; + case 1: + // Manual Duty Mode + DXE_FAN1_INIT_TABLE[ IDX_FAN_MODE ].OrData8 = 0x03;//mode + DXE_FAN1_INIT_TABLE[ IDX_FAN_SPEED_LSB ].OrData8 = (UINT8)SetupData.Fan1Mode1FixedDuty*0xFF/100;//mode + break; + case 2: + // Auto RPM Mode + DXE_FAN1_INIT_TABLE[ IDX_FAN_MODE ].OrData8 = 0x00;//mode + DXE_FAN1_INIT_TABLE[ IDX_TEMP_HYS ].OrData8 = 0x02; // Set hysteresis as 2 + DXE_FAN1_INIT_TABLE[ IDX_TEMP_BOUND1 ].OrData8 = SetupData.Fan1Mode2AutoRpmT1; + DXE_FAN1_INIT_TABLE[ IDX_TEMP_BOUND2 ].OrData8 = SetupData.Fan1Mode2AutoRpmT2; + DXE_FAN1_INIT_TABLE[ IDX_TEMP_BOUND3 ].OrData8 = SetupData.Fan1Mode2AutoRpmT3; + DXE_FAN1_INIT_TABLE[ IDX_TEMP_BOUND4 ].OrData8 = SetupData.Fan1Mode2AutoRpmT4; + DXE_FAN1_INIT_TABLE[ IDX_SPEED_SEG1 ].OrData8 = (UINT8)((100-SetupData.Fan1Mode2AutoRpmF1)*32/SetupData.Fan1Mode2AutoRpmF1); + DXE_FAN1_INIT_TABLE[ IDX_SPEED_SEG2 ].OrData8 = (UINT8)((100-SetupData.Fan1Mode2AutoRpmF2)*32/SetupData.Fan1Mode2AutoRpmF2); + DXE_FAN1_INIT_TABLE[ IDX_SPEED_SEG3 ].OrData8 = (UINT8)((100-SetupData.Fan1Mode2AutoRpmF3)*32/SetupData.Fan1Mode2AutoRpmF3); + DXE_FAN1_INIT_TABLE[ IDX_SPEED_SEG4 ].OrData8 = (UINT8)((100-SetupData.Fan1Mode2AutoRpmF4)*32/SetupData.Fan1Mode2AutoRpmF4); + DXE_FAN1_INIT_TABLE[ IDX_SPEED_SEG5 ].OrData8 = (UINT8)((100-SetupData.Fan1Mode2AutoRpmF5)*32/SetupData.Fan1Mode2AutoRpmF5); + DXE_FAN1_INIT_TABLE[ IDX_TEMP_SRCSEL ].OrData8 = SetupData.Fan1TempSrc; + break; + case 3: + // Auto Duty-Cycle Mode + DXE_FAN1_INIT_TABLE[ IDX_FAN_MODE ].OrData8 = 0x01;//mode + DXE_FAN1_INIT_TABLE[ IDX_TEMP_HYS ].OrData8 = 0x02; // Set hysteresis as 2 + DXE_FAN1_INIT_TABLE[ IDX_TEMP_BOUND1 ].OrData8 = SetupData.Fan1Mode3AutoDutyT1; + DXE_FAN1_INIT_TABLE[ IDX_TEMP_BOUND2 ].OrData8 = SetupData.Fan1Mode3AutoDutyT2; + DXE_FAN1_INIT_TABLE[ IDX_TEMP_BOUND3 ].OrData8 = SetupData.Fan1Mode3AutoDutyT3; + DXE_FAN1_INIT_TABLE[ IDX_TEMP_BOUND4 ].OrData8 = SetupData.Fan1Mode3AutoDutyT4; + DXE_FAN1_INIT_TABLE[ IDX_SPEED_SEG1 ].OrData8 = (UINT8)(SetupData.Fan1Mode3AutoDutyF1*0xFF/100); + DXE_FAN1_INIT_TABLE[ IDX_SPEED_SEG2 ].OrData8 = (UINT8)(SetupData.Fan1Mode3AutoDutyF2*0xFF/100); + DXE_FAN1_INIT_TABLE[ IDX_SPEED_SEG3 ].OrData8 = (UINT8)(SetupData.Fan1Mode3AutoDutyF3*0xFF/100); + DXE_FAN1_INIT_TABLE[ IDX_SPEED_SEG4 ].OrData8 = (UINT8)(SetupData.Fan1Mode3AutoDutyF4*0xFF/100); + DXE_FAN1_INIT_TABLE[ IDX_SPEED_SEG5 ].OrData8 = (UINT8)(SetupData.Fan1Mode3AutoDutyF5*0xFF/100); + DXE_FAN1_INIT_TABLE[ IDX_TEMP_SRCSEL ].OrData8 = SetupData.Fan1TempSrc; + break; + default: + break; } for(i=0; i<( (sizeof(DXE_FAN1_INIT_TABLE))/(sizeof(DXE_SMF_INIT_DATA)) ); i++) { IoWrite8(HWM_CONFIG_INDEX, DXE_FAN1_INIT_TABLE[i].Reg8 ); @@ -292,39 +336,49 @@ void F81866_SMF2_INIT(VOID) { UINT8 i, temp; switch (SetupData.Fan2SmartFanMode) { - case 0: - DXE_FAN2_INIT_TABLE[0].OrData8 = 0x02 << 2;//mode - DXE_FAN2_INIT_TABLE[1].OrData8 = (UINT8)(1500000/SetupData.Fan2Mode0FixedSpeed >> 8);//mode - DXE_FAN2_INIT_TABLE[2].OrData8 = (UINT8)(1500000/SetupData.Fan2Mode0FixedSpeed & 0xFF);//mode - break; - case 1: - DXE_FAN2_INIT_TABLE[0].OrData8 = 0x03 << 2;//mode - DXE_FAN2_INIT_TABLE[2].OrData8 = (UINT8)(SetupData.Fan2Mode1FixedDuty*0xFF/100);//mode - break; - case 2: - DXE_FAN2_INIT_TABLE[0].OrData8 = 0x00 << 2;//mode - DXE_FAN2_INIT_TABLE[3].OrData8 = SetupData.Fan2Mode2AutoRpmT1; - DXE_FAN2_INIT_TABLE[4].OrData8 = SetupData.Fan2Mode2AutoRpmT2; - DXE_FAN2_INIT_TABLE[5].OrData8 = SetupData.Fan2Mode2AutoRpmT3; - DXE_FAN2_INIT_TABLE[6].OrData8 = SetupData.Fan2Mode2AutoRpmT4; - DXE_FAN2_INIT_TABLE[7].OrData8 = (UINT8)((100-SetupData.Fan2Mode2AutoRpmF1)*32/60); - DXE_FAN2_INIT_TABLE[8].OrData8 = (UINT8)((100-SetupData.Fan2Mode2AutoRpmF2)*32/60); - DXE_FAN2_INIT_TABLE[9].OrData8 = (UINT8)((100-SetupData.Fan2Mode2AutoRpmF3)*32/60); - DXE_FAN2_INIT_TABLE[10].OrData8 = (UINT8)((100-SetupData.Fan2Mode2AutoRpmF4)*32/60); - break; - case 3: - DXE_FAN2_INIT_TABLE[0].OrData8 = 0x01 << 2;//mode - DXE_FAN2_INIT_TABLE[3].OrData8 = SetupData.Fan2Mode3AutoDutyT1; - DXE_FAN2_INIT_TABLE[4].OrData8 = SetupData.Fan2Mode3AutoDutyT2; - DXE_FAN2_INIT_TABLE[5].OrData8 = SetupData.Fan2Mode3AutoDutyT3; - DXE_FAN2_INIT_TABLE[6].OrData8 = SetupData.Fan2Mode3AutoDutyT4; - DXE_FAN2_INIT_TABLE[7].OrData8 = (UINT8)(SetupData.Fan2Mode3AutoDutyF1*0xFF/100); - DXE_FAN2_INIT_TABLE[8].OrData8 = (UINT8)(SetupData.Fan2Mode3AutoDutyF2*0xFF/100); - DXE_FAN2_INIT_TABLE[9].OrData8 = (UINT8)(SetupData.Fan2Mode3AutoDutyF3*0xFF/100); - DXE_FAN2_INIT_TABLE[10].OrData8 = (UINT8)(SetupData.Fan2Mode3AutoDutyF4*0xFF/100); - break; - default: - break; + case 0: + // Manual RPM Mode + DXE_FAN2_INIT_TABLE[ IDX_FAN_MODE ].OrData8 = (0x02 << 2);//mode + DXE_FAN2_INIT_TABLE[ IDX_FAN_SPEED_MSB ].OrData8 = (UINT8)(1500000/SetupData.Fan2Mode0FixedSpeed >> 8);//mode + DXE_FAN2_INIT_TABLE[ IDX_FAN_SPEED_LSB ].OrData8 = (UINT8)(1500000/SetupData.Fan2Mode0FixedSpeed & 0xFF);//mode + break; + case 1: + // Manual Duty Mode + DXE_FAN2_INIT_TABLE[ IDX_FAN_MODE ].OrData8 = (0x03 << 2);//mode + DXE_FAN2_INIT_TABLE[ IDX_FAN_SPEED_LSB ].OrData8 = (UINT8)SetupData.Fan2Mode1FixedDuty*0xFF/100;//mode + break; + case 2: + // Auto RPM Mode + DXE_FAN2_INIT_TABLE[ IDX_FAN_MODE ].OrData8 = 0x00;//mode + DXE_FAN2_INIT_TABLE[ IDX_TEMP_HYS ].OrData8 = (0x02 << 4); // Set hysteresis as 2 + DXE_FAN2_INIT_TABLE[ IDX_TEMP_BOUND1 ].OrData8 = SetupData.Fan2Mode2AutoRpmT1; + DXE_FAN2_INIT_TABLE[ IDX_TEMP_BOUND2 ].OrData8 = SetupData.Fan2Mode2AutoRpmT2; + DXE_FAN2_INIT_TABLE[ IDX_TEMP_BOUND3 ].OrData8 = SetupData.Fan2Mode2AutoRpmT3; + DXE_FAN2_INIT_TABLE[ IDX_TEMP_BOUND4 ].OrData8 = SetupData.Fan2Mode2AutoRpmT4; + DXE_FAN2_INIT_TABLE[ IDX_SPEED_SEG1 ].OrData8 = (UINT8)((100-SetupData.Fan2Mode2AutoRpmF1)*32/SetupData.Fan2Mode2AutoRpmF1); + DXE_FAN2_INIT_TABLE[ IDX_SPEED_SEG2 ].OrData8 = (UINT8)((100-SetupData.Fan2Mode2AutoRpmF2)*32/SetupData.Fan2Mode2AutoRpmF2); + DXE_FAN2_INIT_TABLE[ IDX_SPEED_SEG3 ].OrData8 = (UINT8)((100-SetupData.Fan2Mode2AutoRpmF3)*32/SetupData.Fan2Mode2AutoRpmF3); + DXE_FAN2_INIT_TABLE[ IDX_SPEED_SEG4 ].OrData8 = (UINT8)((100-SetupData.Fan2Mode2AutoRpmF4)*32/SetupData.Fan2Mode2AutoRpmF4); + DXE_FAN2_INIT_TABLE[ IDX_SPEED_SEG5 ].OrData8 = (UINT8)((100-SetupData.Fan2Mode2AutoRpmF5)*32/SetupData.Fan2Mode2AutoRpmF5); + DXE_FAN2_INIT_TABLE[ IDX_TEMP_SRCSEL ].OrData8 = SetupData.Fan2TempSrc; + break; + case 3: + // Auto Duty-Cycle Mode + DXE_FAN2_INIT_TABLE[ IDX_FAN_MODE ].OrData8 = (0x01 << 2);//mode + DXE_FAN2_INIT_TABLE[ IDX_TEMP_HYS ].OrData8 = (0x02 << 4); // Set hysteresis as 2 + DXE_FAN2_INIT_TABLE[ IDX_TEMP_BOUND1 ].OrData8 = SetupData.Fan2Mode3AutoDutyT1; + DXE_FAN2_INIT_TABLE[ IDX_TEMP_BOUND2 ].OrData8 = SetupData.Fan2Mode3AutoDutyT2; + DXE_FAN2_INIT_TABLE[ IDX_TEMP_BOUND3 ].OrData8 = SetupData.Fan2Mode3AutoDutyT3; + DXE_FAN2_INIT_TABLE[ IDX_TEMP_BOUND4 ].OrData8 = SetupData.Fan2Mode3AutoDutyT4; + DXE_FAN2_INIT_TABLE[ IDX_SPEED_SEG1 ].OrData8 = (UINT8)(SetupData.Fan2Mode3AutoDutyF1*0xFF/100); + DXE_FAN2_INIT_TABLE[ IDX_SPEED_SEG2 ].OrData8 = (UINT8)(SetupData.Fan2Mode3AutoDutyF2*0xFF/100); + DXE_FAN2_INIT_TABLE[ IDX_SPEED_SEG3 ].OrData8 = (UINT8)(SetupData.Fan2Mode3AutoDutyF3*0xFF/100); + DXE_FAN2_INIT_TABLE[ IDX_SPEED_SEG4 ].OrData8 = (UINT8)(SetupData.Fan2Mode3AutoDutyF4*0xFF/100); + DXE_FAN2_INIT_TABLE[ IDX_SPEED_SEG5 ].OrData8 = (UINT8)(SetupData.Fan2Mode3AutoDutyF5*0xFF/100); + DXE_FAN2_INIT_TABLE[ IDX_TEMP_SRCSEL ].OrData8 = SetupData.Fan2TempSrc; + break; + default: + break; } for(i=0; i<( (sizeof(DXE_FAN2_INIT_TABLE))/(sizeof(DXE_SMF_INIT_DATA)) ); i++) { IoWrite8(HWM_CONFIG_INDEX, DXE_FAN2_INIT_TABLE[i].Reg8 ); @@ -356,39 +410,49 @@ void F81866_SMF3_INIT(VOID) { UINT8 i, temp; switch (SetupData.Fan3SmartFanMode) { - case 0: - DXE_FAN3_INIT_TABLE[0].OrData8 = 0x02 << 4;//mode - DXE_FAN3_INIT_TABLE[1].OrData8 = (UINT8)(1500000/SetupData.Fan3Mode0FixedSpeed >> 8);//mode - DXE_FAN3_INIT_TABLE[2].OrData8 = (UINT8)(1500000/SetupData.Fan3Mode0FixedSpeed & 0xFF);//mode - break; - case 1: - DXE_FAN3_INIT_TABLE[0].OrData8 = 0x03 << 4;//mode - DXE_FAN3_INIT_TABLE[2].OrData8 = (UINT8)(SetupData.Fan3Mode1FixedDuty*0xFF/100);//mode - break; - case 2: - DXE_FAN3_INIT_TABLE[0].OrData8 = 0x00 << 4;//mode - DXE_FAN3_INIT_TABLE[3].OrData8 = SetupData.Fan3Mode2AutoRpmT1; - DXE_FAN3_INIT_TABLE[4].OrData8 = SetupData.Fan3Mode2AutoRpmT2; - DXE_FAN3_INIT_TABLE[5].OrData8 = SetupData.Fan3Mode2AutoRpmT3; - DXE_FAN3_INIT_TABLE[6].OrData8 = SetupData.Fan3Mode2AutoRpmT4; - DXE_FAN3_INIT_TABLE[7].OrData8 = (UINT8)((100-SetupData.Fan3Mode2AutoRpmF1)*32/60); - DXE_FAN3_INIT_TABLE[8].OrData8 = (UINT8)((100-SetupData.Fan3Mode2AutoRpmF2)*32/60); - DXE_FAN3_INIT_TABLE[9].OrData8 = (UINT8)((100-SetupData.Fan3Mode2AutoRpmF3)*32/60); - DXE_FAN3_INIT_TABLE[10].OrData8 = (UINT8)((100-SetupData.Fan3Mode2AutoRpmF4)*32/60); - break; - case 3: - DXE_FAN3_INIT_TABLE[0].OrData8 = 0x01 << 4;//mode - DXE_FAN3_INIT_TABLE[3].OrData8 = SetupData.Fan3Mode3AutoDutyT1; - DXE_FAN3_INIT_TABLE[4].OrData8 = SetupData.Fan3Mode3AutoDutyT2; - DXE_FAN3_INIT_TABLE[5].OrData8 = SetupData.Fan3Mode3AutoDutyT3; - DXE_FAN3_INIT_TABLE[6].OrData8 = SetupData.Fan3Mode3AutoDutyT4; - DXE_FAN3_INIT_TABLE[7].OrData8 = (UINT8)(SetupData.Fan3Mode3AutoDutyF1*0xFF/100); - DXE_FAN3_INIT_TABLE[8].OrData8 = (UINT8)(SetupData.Fan3Mode3AutoDutyF2*0xFF/100); - DXE_FAN3_INIT_TABLE[9].OrData8 = (UINT8)(SetupData.Fan3Mode3AutoDutyF3*0xFF/100); - DXE_FAN3_INIT_TABLE[10].OrData8 = (UINT8)(SetupData.Fan3Mode3AutoDutyF4*0xFF/100); - break; - default: - break; + case 0: + // Manual RPM Mode + DXE_FAN3_INIT_TABLE[ IDX_FAN_MODE ].OrData8 = (0x02 << 4);//mode + DXE_FAN3_INIT_TABLE[ IDX_FAN_SPEED_MSB ].OrData8 = (UINT8)(1500000/SetupData.Fan3Mode0FixedSpeed >> 8);//mode + DXE_FAN3_INIT_TABLE[ IDX_FAN_SPEED_LSB ].OrData8 = (UINT8)(1500000/SetupData.Fan3Mode0FixedSpeed & 0xFF);//mode + break; + case 1: + // Manual Duty Mode + DXE_FAN3_INIT_TABLE[ IDX_FAN_MODE ].OrData8 = (0x03 << 4);//mode + DXE_FAN3_INIT_TABLE[ IDX_FAN_SPEED_LSB ].OrData8 = (UINT8)SetupData.Fan3Mode1FixedDuty*0xFF/100;//mode + break; + case 2: + // Auto RPM Mode + DXE_FAN3_INIT_TABLE[ IDX_FAN_MODE ].OrData8 = 0x00;//mode + DXE_FAN3_INIT_TABLE[ IDX_TEMP_HYS ].OrData8 = 0x02; // Set hysteresis as 2 + DXE_FAN3_INIT_TABLE[ IDX_TEMP_BOUND1 ].OrData8 = SetupData.Fan3Mode2AutoRpmT1; + DXE_FAN3_INIT_TABLE[ IDX_TEMP_BOUND2 ].OrData8 = SetupData.Fan3Mode2AutoRpmT2; + DXE_FAN3_INIT_TABLE[ IDX_TEMP_BOUND3 ].OrData8 = SetupData.Fan3Mode2AutoRpmT3; + DXE_FAN3_INIT_TABLE[ IDX_TEMP_BOUND4 ].OrData8 = SetupData.Fan3Mode2AutoRpmT4; + DXE_FAN3_INIT_TABLE[ IDX_SPEED_SEG1 ].OrData8 = (UINT8)((100-SetupData.Fan3Mode2AutoRpmF1)*32/SetupData.Fan3Mode2AutoRpmF1); + DXE_FAN3_INIT_TABLE[ IDX_SPEED_SEG2 ].OrData8 = (UINT8)((100-SetupData.Fan3Mode2AutoRpmF2)*32/SetupData.Fan3Mode2AutoRpmF2); + DXE_FAN3_INIT_TABLE[ IDX_SPEED_SEG3 ].OrData8 = (UINT8)((100-SetupData.Fan3Mode2AutoRpmF3)*32/SetupData.Fan3Mode2AutoRpmF3); + DXE_FAN3_INIT_TABLE[ IDX_SPEED_SEG4 ].OrData8 = (UINT8)((100-SetupData.Fan3Mode2AutoRpmF4)*32/SetupData.Fan3Mode2AutoRpmF4); + DXE_FAN3_INIT_TABLE[ IDX_SPEED_SEG5 ].OrData8 = (UINT8)((100-SetupData.Fan3Mode2AutoRpmF5)*32/SetupData.Fan3Mode2AutoRpmF5); + DXE_FAN3_INIT_TABLE[ IDX_TEMP_SRCSEL ].OrData8 = SetupData.Fan3TempSrc; + break; + case 3: + // Auto Duty-Cycle Mode + DXE_FAN3_INIT_TABLE[ IDX_FAN_MODE ].OrData8 = (0x01 << 4);//mode + DXE_FAN3_INIT_TABLE[ IDX_TEMP_HYS ].OrData8 = 0x02; // Set hysteresis as 2 + DXE_FAN3_INIT_TABLE[ IDX_TEMP_BOUND1 ].OrData8 = SetupData.Fan3Mode3AutoDutyT1; + DXE_FAN3_INIT_TABLE[ IDX_TEMP_BOUND2 ].OrData8 = SetupData.Fan3Mode3AutoDutyT2; + DXE_FAN3_INIT_TABLE[ IDX_TEMP_BOUND3 ].OrData8 = SetupData.Fan3Mode3AutoDutyT3; + DXE_FAN3_INIT_TABLE[ IDX_TEMP_BOUND4 ].OrData8 = SetupData.Fan3Mode3AutoDutyT4; + DXE_FAN3_INIT_TABLE[ IDX_SPEED_SEG1 ].OrData8 = (UINT8)(SetupData.Fan3Mode3AutoDutyF1*0xFF/100); + DXE_FAN3_INIT_TABLE[ IDX_SPEED_SEG2 ].OrData8 = (UINT8)(SetupData.Fan3Mode3AutoDutyF2*0xFF/100); + DXE_FAN3_INIT_TABLE[ IDX_SPEED_SEG3 ].OrData8 = (UINT8)(SetupData.Fan3Mode3AutoDutyF3*0xFF/100); + DXE_FAN3_INIT_TABLE[ IDX_SPEED_SEG4 ].OrData8 = (UINT8)(SetupData.Fan3Mode3AutoDutyF4*0xFF/100); + DXE_FAN3_INIT_TABLE[ IDX_SPEED_SEG5 ].OrData8 = (UINT8)(SetupData.Fan3Mode3AutoDutyF5*0xFF/100); + DXE_FAN3_INIT_TABLE[ IDX_TEMP_SRCSEL ].OrData8 = SetupData.Fan3TempSrc; + break; + default: + break; } for(i=0; i<( (sizeof(DXE_FAN3_INIT_TABLE))/(sizeof(DXE_SMF_INIT_DATA)) ); i++) { IoWrite8(HWM_CONFIG_INDEX, DXE_FAN3_INIT_TABLE[i].Reg8 ); @@ -403,6 +467,67 @@ void F81866_SMF3_INIT(VOID) } } +void F81866_FAN_Full(VOID) +{ + // Full Speed + // Manual Duty Mode +#if defined(F81866_SMF_SUPPORT) && (F81866_SMF_SUPPORT == 1) + UINT8 i, temp; +#endif + +//#if defined(F81866_SMF1_SUPPORT) && (F81866_SMF1_SUPPORT == 1) + DXE_FAN1_INIT_TABLE[ IDX_FAN_MODE ].OrData8 = 0x03;//mode + DXE_FAN1_INIT_TABLE[ IDX_FAN_SPEED_LSB ].OrData8 = 0xFF; + + for(i=0; i<( (sizeof(DXE_FAN1_INIT_TABLE))/(sizeof(DXE_SMF_INIT_DATA)) ); i++) { + IoWrite8(HWM_CONFIG_INDEX, DXE_FAN1_INIT_TABLE[i].Reg8 ); + if(DXE_FAN1_INIT_TABLE[i].AndData8 == 0xFF) { + temp = DXE_FAN1_INIT_TABLE[i].OrData8; + } else { + temp = IoRead8(HWM_CONFIG_DATA); + temp &= DXE_FAN1_INIT_TABLE[i].AndData8; + temp |= DXE_FAN1_INIT_TABLE[i].OrData8; + } + IoWrite8(HWM_CONFIG_DATA, temp); + } +//#endif + +//#if defined(F81866_SMF2_SUPPORT) && (F81866_SMF2_SUPPORT == 1) + DXE_FAN2_INIT_TABLE[ IDX_FAN_MODE ].OrData8 = 0x0C;//mode + DXE_FAN2_INIT_TABLE[ IDX_FAN_SPEED_LSB ].OrData8 = 0xFF; + + for(i=0; i<( (sizeof(DXE_FAN2_INIT_TABLE))/(sizeof(DXE_SMF_INIT_DATA)) ); i++) { + IoWrite8(HWM_CONFIG_INDEX, DXE_FAN2_INIT_TABLE[i].Reg8 ); + if(DXE_FAN2_INIT_TABLE[i].AndData8 == 0xFF) { + temp = DXE_FAN2_INIT_TABLE[i].OrData8; + } else { + temp = IoRead8(HWM_CONFIG_DATA); + temp &= DXE_FAN2_INIT_TABLE[i].AndData8; + temp |= DXE_FAN2_INIT_TABLE[i].OrData8; + } + IoWrite8(HWM_CONFIG_DATA, temp); + } +//#endif + +// Zprj Not Supported FAN3 +//#if defined(F81866_SMF3_SUPPORT) && (F81866_SMF3_SUPPORT == 1) +// DXE_FAN3_INIT_TABLE[ IDX_FAN_MODE ].OrData8 = 0x30;//mode +// DXE_FAN3_INIT_TABLE[ IDX_FAN_SPEED_LSB ].OrData8 = 0xFF; +// +// for(i=0; i<( (sizeof(DXE_FAN3_INIT_TABLE))/(sizeof(DXE_SMF_INIT_DATA)) ); i++) { +// IoWrite8(HWM_CONFIG_INDEX, DXE_FAN3_INIT_TABLE[i].Reg8 ); +// if(DXE_FAN3_INIT_TABLE[i].AndData8 == 0xFF) { +// temp = DXE_FAN3_INIT_TABLE[i].OrData8; +// } else { +// temp = IoRead8(HWM_CONFIG_DATA); +// temp &= DXE_FAN3_INIT_TABLE[i].AndData8; +// temp |= DXE_FAN3_INIT_TABLE[i].OrData8; +// } +// IoWrite8(HWM_CONFIG_DATA, temp); +// } +//#endif +} + //<AMI_PHDR_START> //--------------------------------------------------------------------------- // Procedure: HwmCallbackReadyToBoot |