Syscon Thermal Config/structs

From PS3 Developer wiki
Revision as of 03:58, 9 January 2022 by Sandungas (talk | contribs) (The name "fancon" is more accurate than "zone", but im keeping both because right now i dont remember where are used the names "Tzones")
Jump to navigation Jump to search

This page is only intended to show some code samples, feel free to improve them, please provide a proof if an important change is made, and use the related Discussion page/s for the dicussions and speculations

ps3_syscon_eeprom_thermal_config_region.c
Edit-copy purple.svg.png
//      SYSCON     | BOARDS |
//---------------------------
// CXR713F120A     | MPU-501, TMU-520, COOKIE-XX prototypes
// CXR713120-201GB | COK-001
// CXR713120-202GB | COK-002
// CXR713120-203GB | SEM-001
// CXR714120-301GB | DIA-001
// CXR714120-302GB | DIA-002, DEB-001
// CXR714120-303GB | COK-002 (refurb 65nm RSX)
// CXR714120-304GB | COK-001 (refurb 40nm RSX), DIA-001 (refurb 40nm RSX)
// SW-301          | VER-001
// SW-302          | VER-001
// SW2-301         | DYN-001
// SW2-302         | SUR-001
// SW2-303         | JTP-001, JSD-001
// SW3-301         | KTE-001
// SW3-302         | MSX-001, MPX-001, NPX-001
// SW3-303         | ?
// SW3-304         | PQX-001, PPX-001, RTX-001, REX-001

struct fan_table_common {
	u8 duty_min;
	u8 duty_max;
	u8 fanconpolicy;  // 0=Full, 1=Auto, 2=Manual
	u8 fantbl_select; // FF=RAM, ELSE=ROM
	u8 active;        // FF=Active, 0=Inactive
};

struct fan_table_sw {
	u8  fantbl_duty;
	u16 fantbl_tempu;
	u16 fantbl_tempd;
};

struct fan_table_40 {
	u8  fantbl_duty[0xA];
	u16 fantbl_tempu[0xA];
	u16 fantbl_tempd[0xA];
	fan_table_common;
	u8  reserved[0x9];
}; // 0x40

struct fan_table_80 {
	u8  fantbl_duty[0x14];
	u16 fantbl_tempu[0x14];
	u16 fantbl_tempd[0x14];
	fan_table_common;
	u8  reserved[0x17];
}; // 0x80

struct fan_table_70 {
	fan_table_sw[0x14];
	fan_table_common;
	u8  reserved[0x7];
}; // 0x70


struct special_section_temps  {
	u16 trp;       // Thermal Protection ? (usually 1ºC lower than tshutdown)
	u16 tshutdown; // Thermal Shutdown (usually the same temperature than the highest value of TempU)
	u16 hyst;      // Hysteresis (usually 2ºC)
};

struct special_section_unk_1  {
	u8 unk_1_cell; // always 0xFF
	u8 unk_1_rsx;  // always 0xFF
	u8 unk_1_bevr; // always 0xFF
	u8 unk_1_sb;   // always 0xFF
	u8 unk_1_eegs; // always 0xFF
};

struct special_section_unk_2  {
	u8 unk_2_cell; // directly or indirectly related with cell revision
	u8 unk_2_rsx;  // directly or indirectly related with rsx revision
	u8 unk_2_bevr; // directly or indirectly related with bevr revision
	u8 unk_2_sb;   // directly or indirectly related with sb revision
	u8 unk_2_eegs; // directly or indirectly related with eegs revision
};

struct special_section_unk_3  {
	u8 unk_3_cell; // identical to unk_2_cell
	u8 unk_3_rsx;  // identical to unk_2_rsx
	u8 unk_3_bevr; // always 0xFF, bevr fan table is not active
	u8 unk_3_sb;   // identical to unk_2_sb
	u8 unk_3_eegs; // always 0xFF, eegs fan table is not active
}; //


struct special_section_cxrf {
	u8  use_eeprom_values; // (00 = yes)
	u8  reserved;
	special_section_temps cell;
	special_section_temps rsx;
	special_section_temps xdr;
	special_section_temps intake;
	special_section_temps gbe;
	special_section_temps sb;
	u8  reserved[0xA];
	u16 tshutdown_time; // TShutdown Time:%d[s](0x%04x)
	u8  unknown_0; // related to thermal errors
	u8  fan_shutdown_time;
	u8  reserved [0xC];
	u8  rsx_thermal_limit_unk0;
	u8  rsx_thermal_limit_unk1;
	u8  rsx_thermal_limit_unk2;
	u8  rsx_thermal_limit_unk3;
	u8  rsx_thermal_limit_unk4;
	u8  rsx_thermal_limit_unk5;
	u8  reserved [0xA];
	u8  unknown_1; // fan config
	u8  unknown_2; // fan config
	u8  unknown_3; // fan config
	u8  reserved [0xD];
	u8  unknown_4; // fan config (set to 0xE0)
	u16 unknown_5; // fan config
	u16 unknown_6; // fan config
	u16 unknown_7; // fan config
	u16 unknown_8; // fan config
	u16 unknown_9; // fan config
	u8  reserved [0x95];
}; // 0x100

struct special_section_cxr {
	u16 tshutdown_time;        // TShutdown Time:%d[s](0x%04x)
	u8  unk_00;                // Fan shutdown time ?
	u8  fan_initial_duty;      // Fan initial duty: %d%%(0x%02x)
	u8  fan_initial_time;      // Fan initial time: %d(ms)
	special_section_unk_1;
	special_section_unk_2;
	u8  unk_FF;
	special_section_temps cell;
	special_section_temps rsx;
	special_section_temps bevr;
	special_section_temps sb;
	special_section_temps eegs;
	special_section_unk_3;
	u8  reserved[0x4B];
	u16 checksum;
}; // 0x80

struct special_section_sw {
	u16 tshutdown_time;        // TShutdown Time:%d[s](0x%04x)
	u16 unk_0000;              // Fan shutdown time ?, length increased to 2 bytes for sherwoods ?
	u8  fan_initial_duty;      // Fan initial duty: %d%%(0x%02x)
	u8  fan_initial_time;      // Fan initial time: %d(ms)
	special_section_unk_1;
	special_section_unk_2;
	special_section_temps cell;
	special_section_temps rsx;
	special_section_temps sb;
	u8  reserved[0x8E];
}; // 0xB0


struct thermal_config {
#ifdef cytology
	fan_table_40 cell;    // table=0, fancon zone=0x00 "1st BE Primary"
	fan_table_40 rsx;     // table=1, fancon zone=0x01 "RSX Primary"
	fan_table_40 unk_z20; // table=2, fancon zone=0x20 unknown
	fan_table_40 unk_z21; // table=3, fancon zone=0x21 unknown
	fan_table_40 xdr;     // table=4, fancon zone=0x02 "XDR Primary"
	fan_table_40 intake;  // table=7, fancon zone=0x0A "Air Intake"
	fan_table_40 gbe;     // table=6, fancon zone=0x0F "GbE"
	fan_table_40 sb;      // table=5, fancon zone=0x14 "SB"
	special_section_cxrf;
#endif
#ifdef cookie_old
	fan_table_40 cell;    // table=0, fancon zone=0x00 "1st BE Primary"
	fan_table_40 rsx;     // table=1, fancon zone=0x01 "RSX Primary"
	fan_table_40 bevr;    // table=?, fancon zone=0x03 "BE VR"
	fan_table_40 sb;      // table=3, fancon zone=0x14 "SB"
	fan_table_40 eegs;    // table=?, fancon zone=0x15 "EE+GS"
	fan_table_40 reserved
	special_section_cxr;
#endif
#ifdef cookie_new
	fan_table_80 cell;    // table=0, fancon zone=0x00 "1st BE Primary"
	fan_table_80 rsx;     // table=1, fancon zone=0x01 "RSX Primary"
	fan_table_80 sb;      // table=?, fancon zone=0x14 "SB"
	special_section_cxr;
#endif
#ifdef sherwood
	fan_table_70 cell;    // table=0, fancon zone=0x00 "1st BE Primary"
	fan_table_70 rsx;     // table=1, fancon zone=0x01 "RSX Primary"
	fan_table_70 sb;      // table=?, fancon zone=0x14 "SB"
	special_section_sw;
#endif
};