Syscon Thermal Configs/structs: Difference between revisions

From PS3 Developer wiki
Jump to navigation Jump to search
(back to the official codenames)
No edit summary
 
(5 intermediate revisions by the same user not shown)
Line 23: Line 23:


struct fancon_footer {
struct fancon_footer {
u8 duty_min;              // Always 0x33 (PS3 Fats and Slims DYN-001, SUR-001, JTP-001, JSD-001), or always 0x34 (PS3 Slim KTE-001 and SuperSlims)
u8 duty_min;              // Always 0x33 (mullions and sherwoods SW/SW2), or always 0x34 (sherwoods SW3)
u8 duty_max;              // Always 0xFF
u8 duty_max;              // Always 0xFF
u8 policy;                // 0x00=Full, 0x01=Auto, 0x02=Manual
u8 policy;                // 0x00=Full, 0x01=Auto, 0x02=Manual
Line 32: Line 32:
struct fancon_40 {
struct fancon_40 {
u8  duty[0xA];
u8  duty[0xA];
u16 tempu[0xA];
u16 temp_u[0xA];
u16 tempd[0xA];
u16 temp_d[0xA];
fancon_footer;
fancon_footer;
u8 reserved[0x9];
u8 reserved[0x9];
Line 40: Line 40:
struct fancon_80 {
struct fancon_80 {
u8  duty[0x14];
u8  duty[0x14];
u16 tempu[0x14];
u16 temp_u[0x14];
u16 tempd[0x14];
u16 temp_d[0x14];
fancon_footer;
fancon_footer;
u8 reserved[0x17];
u8 reserved[0x17];
Line 48: Line 48:
struct fancon_sw {
struct fancon_sw {
u8  duty;
u8  duty;
u16 tempu;
u16 temp_u;
u16 tempd;
u16 temp_d;
};
};


Line 60: Line 60:


struct config_footer_temps  {
struct config_footer_temps  {
u16 trp;                  // Thermal Protection ? (usually 1ºC lower than tshutdown). Named "Alert Limits" in PS4
u16 trp;                  // Thermal Protection ?. Named "Alert Limits" in PS4
u16 tshutdown;            // Thermal Shutdown (usually the same temperature than the highest value of TempU). Named "CriticalTempr Limits" in PS4
u16 tshutdown;            // Thermal Shutdown. Named "CriticalTempr Limits" in PS4
u16 hyst;                // Hysteresis (usually 2ºC). Named "Alert Hysteresis" in PS4
u16 hyst;                // Hysteresis (always 2ºC). Named "Alert Hysteresis" in PS4
};
};


Line 127: Line 127:
u16 tshutdown_time;      // TShutdown Time:%d[s](0x%04x), or TShutdown Time:%d[s](default tshutdown time). Always 0xFFFF
u16 tshutdown_time;      // TShutdown Time:%d[s](0x%04x), or TShutdown Time:%d[s](default tshutdown time). Always 0xFFFF
u8  unk_00;              // Fan shutdown time ?
u8  unk_00;              // Fan shutdown time ?
u8  fan_initial_duty;    // Fan initial duty: %d%%(0x%02x). Always 0x4D (PS3 Fats with mullion)
u8  fan_initial_duty;    // Fan initial duty: %d%%(0x%02x). Always 0x4D (mullions)
u8  fan_initial_time;    // Fan initial time: %d(ms), or Fan initial time: %d(ms) -> disable. Always 0x14
u8  fan_initial_time;    // Fan initial time: %d(ms), or Fan initial time: %d(ms) -> disable. Always 0x14
config_footer_unk_1;
config_footer_unk_1;
Line 139: Line 139:
config_footer_unk_3;
config_footer_unk_3;
u8  reserved[0x4B];
u8  reserved[0x4B];
u16 checksum;
u16 fan_therm_csum;
}; // 0x80
}; // 0x80


Line 145: Line 145:
u16 tshutdown_time;      // TShutdown Time:%d[s](0x%04x), or TShutdown Time:%d[s](default tshutdown time). Always 0xFFFF
u16 tshutdown_time;      // TShutdown Time:%d[s](0x%04x), or TShutdown Time:%d[s](default tshutdown time). Always 0xFFFF
u16 unk_0000;            // Fan shutdown time ?, length increased to 2 bytes for sherwoods ?
u16 unk_0000;            // Fan shutdown time ?, length increased to 2 bytes for sherwoods ?
u8  fan_initial_duty;    // Fan initial duty: %d%%(0x%02x). 0x4D (PS3 Fat VER-001 and Slim DYN-001), or 0x40 (Slims SUR-001, JTP-001, JSD-001), or 0x41 (Slim KTE-001 and SuperSlims)
u8  fan_initial_duty;    // Fan initial duty: %d%%(0x%02x). Always 0x4D (sherwoods SW/SW2 with 65nm RSX), or 0x40 (sherwoods SW2 with 40nm RSX), or 0x41 (sherwoods SW3)
u8  fan_initial_time;    // Fan initial time: %d(ms), or Fan initial time: %d(ms) -> disable. Always 0x14
u8  fan_initial_time;    // Fan initial time: %d(ms), or Fan initial time: %d(ms) -> disable. Always 0x14
config_footer_unk_1;
config_footer_unk_1;
Line 157: Line 157:
struct thermal_config {
struct thermal_config {
#ifdef mullion_flash
#ifdef mullion_flash
fancon_40 cell;          // FanconNo=0, TZoneNo=0x00 "1st BE Primary"
fancon_40 cell;          // FanconNo=0x00, TZoneNo=0x00 "1st BE Primary"
fancon_40 rsx;            // FanconNo=1, TZoneNo=0x01 "RSX Primary"
fancon_40 rsx;            // FanconNo=0x01, TZoneNo=0x01 "RSX Primary"
fancon_40 unk_z20;        // FanconNo=2, TZoneNo=0x20 unknown (BE VR ?)
fancon_40 unk_z20;        // FanconNo=0x02, TZoneNo=0x20 unknown (BE VR ?)
fancon_40 unk_z21;        // FanconNo=3, TZoneNo=0x21 unknown (RSX VR ?)
fancon_40 unk_z21;        // FanconNo=0x03, TZoneNo=0x21 unknown (RSX VR ?)
fancon_40 xdr;            // FanconNo=4, TZoneNo=0x02 "XDR Primary"
fancon_40 xdr;            // FanconNo=0x04, TZoneNo=0x02 "XDR Primary"
fancon_40 intake;        // FanconNo=7, TZoneNo=0x0A "Air Intake"
fancon_40 intake;        // FanconNo=0x07, TZoneNo=0x0A "Air Intake"
fancon_40 gbe;            // FanconNo=6, TZoneNo=0x0F "GbE"
fancon_40 gbe;            // FanconNo=0x06, TZoneNo=0x0F "GbE"
fancon_40 sb;            // FanconNo=5, TZoneNo=0x14 "SB"
fancon_40 sb;            // FanconNo=0x05, TZoneNo=0x14 "SB"
config_footer_mullionf;
config_footer_mullionf;
#endif
#endif
#ifdef mullion_32KB
#ifdef mullion_32KB
fancon_40 cell;          // FanconNo=0, TZoneNo=0x00 "1st BE Primary"
fancon_40 cell;          // FanconNo=0x00, TZoneNo=0x00 "1st BE Primary"
fancon_40 rsx;            // FanconNo=1, TZoneNo=0x01 "RSX Primary"
fancon_40 rsx;            // FanconNo=0x01, TZoneNo=0x01 "RSX Primary"
fancon_40 bevr;          // FanconNo=?, TZoneNo=0x03 "BE VR"
fancon_40 bevr;          // FanconNo=0x??, TZoneNo=0x03 "BE VR"
fancon_40 sb;            // FanconNo=3, TZoneNo=0x14 "SB"
fancon_40 sb;            // FanconNo=0x03, TZoneNo=0x14 "SB"
fancon_40 eegs;          // FanconNo=?, TZoneNo=0x15 "EE+GS"
fancon_40 eegs;          // FanconNo=0x??, TZoneNo=0x15 "EE+GS"
fancon_40 reserved;
fancon_40 reserved;
config_footer_mullion;
config_footer_mullion;
#endif
#endif
#ifdef mullion_20KB
#ifdef mullion_20KB
fancon_80 cell;          // FanconNo=0, TZoneNo=0x00 "1st BE Primary"
fancon_80 cell;          // FanconNo=0x00, TZoneNo=0x00 "1st BE Primary"
fancon_80 rsx;            // FanconNo=1, TZoneNo=0x01 "RSX Primary"
fancon_80 rsx;            // FanconNo=0x01, TZoneNo=0x01 "RSX Primary"
fancon_80 sb;            // FanconNo=2, TZoneNo=0x14 "SB"
fancon_80 sb;            // FanconNo=0x02, TZoneNo=0x14 "SB"
config_footer_mullion;
config_footer_mullion;
#endif
#endif
#ifdef sherwood
#ifdef sherwood
fancon_70 cell;          // FanconNo=0, TZoneNo=0x00 "1st BE Primary"
fancon_70 cell;          // FanconNo=0x00, TZoneNo=0x00 "1st BE Primary"
fancon_70 rsx;            // FanconNo=1, TZoneNo=0x01 "RSX Primary"
fancon_70 rsx;            // FanconNo=0x01, TZoneNo=0x01 "RSX Primary"
fancon_70 reserved;
fancon_70 reserved;
config_footer_sherwood;
config_footer_sherwood;

Latest revision as of 10:18, 22 April 2022

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          | THERMAL CONFIG FMT | BOARDS
//---------------------------------------------------------------
// CXR713F120A     | mullion_flash      | MPU-501, TMU-520, COOKIE-XX prototypes
// CXR713120-201GB | mullion_32KB       | COK-001
// CXR713120-202GB | mullion_32KB       | COK-002
// CXR713120-203GB | mullion_20KB       | SEM-001
// CXR714120-301GB | mullion_20KB       | DIA-001
// CXR714120-302GB | mullion_20KB       | DIA-002, DEB-001
// CXR714120-303GB | mullion_20KB       | COK-002 (Refurb 65nm RSX)
// CXR714120-304GB | mullion_20KB       | COK-001, DIA-001 (Refurbs 40nm RSX)
// SW-301          | sherwood           | VER-001
// SW-302          | sherwood           | VER-001
// SW2-301         | sherwood           | DYN-001
// SW2-302         | sherwood           | SUR-001
// SW2-303         | sherwood           | JTP-001, JSD-001
// SW3-301         | sherwood           | KTE-001
// SW3-302         | sherwood           | MSX-001, MPX-001, NPX-001
// SW3-303         | sherwood           | ?
// SW3-304         | sherwood           | PQX-001, PPX-001, RTX-001, REX-001

struct fancon_footer {
	u8 duty_min;              // Always 0x33 (mullions and sherwoods SW/SW2), or always 0x34 (sherwoods SW3)
	u8 duty_max;              // Always 0xFF
	u8 policy;                // 0x00=Full, 0x01=Auto, 0x02=Manual
	u8 select;                // 0x00=ROM, 0xFF=RAM
	u8 active;                // 0x00=Remove, 0xFF=Use
};

struct fancon_40 {
	u8  duty[0xA];
	u16 temp_u[0xA];
	u16 temp_d[0xA];
	fancon_footer;
	u8 reserved[0x9];
}; // 0x40

struct fancon_80 {
	u8  duty[0x14];
	u16 temp_u[0x14];
	u16 temp_d[0x14];
	fancon_footer;
	u8 reserved[0x17];
}; // 0x80

struct fancon_sw {
	u8  duty;
	u16 temp_u;
	u16 temp_d;
};

struct fancon_70 {
	fancon_sw[0x14];
	fancon_footer;
	u8 reserved[0x7];
}; // 0x70


struct config_footer_temps  {
	u16 trp;                  // Thermal Protection ?. Named "Alert Limits" in PS4
	u16 tshutdown;            // Thermal Shutdown. Named "CriticalTempr Limits" in PS4
	u16 hyst;                 // Hysteresis (always 2ºC). Named "Alert Hysteresis" in PS4
};

struct config_footer_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 config_footer_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 config_footer_unk_3  {
	u8 unk_3_cell;            // identical to unk_2_cell (only mullion, sherwood doesnt seems to use this area)
	u8 unk_3_rsx;             // identical to unk_2_rsx (only mullion, sherwood doesnt seems to use this area)
	u8 unk_3_bevr;            // always 0xFF, bevr fan table is not active (only mullion, sherwood doesnt seems to use this area)
	u8 unk_3_sb;              // identical to unk_2_sb (only mullion, sherwood doesnt seems to use this area)
	u8 unk_3_eegs;            // always 0xFF, eegs fan table is not active (only mullion, sherwood doesnt seems to use this area)
}; //


struct config_footer_mullionf {
	u8  use_eeprom_values;    // (00 = yes)
	u8  reserved;
	config_footer_temps cell;
	config_footer_temps rsx;
	config_footer_temps xdr;
	config_footer_temps intake;
	config_footer_temps gbe;
	config_footer_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 config_footer_mullion {
	u16 tshutdown_time;       // TShutdown Time:%d[s](0x%04x), or TShutdown Time:%d[s](default tshutdown time). Always 0xFFFF
	u8  unk_00;               // Fan shutdown time ?
	u8  fan_initial_duty;     // Fan initial duty: %d%%(0x%02x). Always 0x4D (mullions)
	u8  fan_initial_time;     // Fan initial time: %d(ms), or Fan initial time: %d(ms) -> disable. Always 0x14
	config_footer_unk_1;
	config_footer_unk_2;
	u8  unk_FF;
	config_footer_temps cell;
	config_footer_temps rsx;
	config_footer_temps bevr;
	config_footer_temps sb;
	config_footer_temps eegs;
	config_footer_unk_3;
	u8  reserved[0x4B];
	u16 fan_therm_csum;
}; // 0x80

struct config_footer_sherwood {
	u16 tshutdown_time;       // TShutdown Time:%d[s](0x%04x), or TShutdown Time:%d[s](default tshutdown time). Always 0xFFFF
	u16 unk_0000;             // Fan shutdown time ?, length increased to 2 bytes for sherwoods ?
	u8  fan_initial_duty;     // Fan initial duty: %d%%(0x%02x). Always 0x4D (sherwoods SW/SW2 with 65nm RSX), or 0x40 (sherwoods SW2 with 40nm RSX), or 0x41 (sherwoods SW3)
	u8  fan_initial_time;     // Fan initial time: %d(ms), or Fan initial time: %d(ms) -> disable. Always 0x14
	config_footer_unk_1;
	config_footer_unk_2;
	config_footer_temps cell;
	config_footer_temps rsx;
	u8  reserved[0x94];
}; // 0xB0


struct thermal_config {
#ifdef mullion_flash
	fancon_40 cell;           // FanconNo=0x00, TZoneNo=0x00 "1st BE Primary"
	fancon_40 rsx;            // FanconNo=0x01, TZoneNo=0x01 "RSX Primary"
	fancon_40 unk_z20;        // FanconNo=0x02, TZoneNo=0x20 unknown (BE VR ?)
	fancon_40 unk_z21;        // FanconNo=0x03, TZoneNo=0x21 unknown (RSX VR ?)
	fancon_40 xdr;            // FanconNo=0x04, TZoneNo=0x02 "XDR Primary"
	fancon_40 intake;         // FanconNo=0x07, TZoneNo=0x0A "Air Intake"
	fancon_40 gbe;            // FanconNo=0x06, TZoneNo=0x0F "GbE"
	fancon_40 sb;             // FanconNo=0x05, TZoneNo=0x14 "SB"
	config_footer_mullionf;
#endif
#ifdef mullion_32KB
	fancon_40 cell;           // FanconNo=0x00, TZoneNo=0x00 "1st BE Primary"
	fancon_40 rsx;            // FanconNo=0x01, TZoneNo=0x01 "RSX Primary"
	fancon_40 bevr;           // FanconNo=0x??, TZoneNo=0x03 "BE VR"
	fancon_40 sb;             // FanconNo=0x03, TZoneNo=0x14 "SB"
	fancon_40 eegs;           // FanconNo=0x??, TZoneNo=0x15 "EE+GS"
	fancon_40 reserved;
	config_footer_mullion;
#endif
#ifdef mullion_20KB
	fancon_80 cell;           // FanconNo=0x00, TZoneNo=0x00 "1st BE Primary"
	fancon_80 rsx;            // FanconNo=0x01, TZoneNo=0x01 "RSX Primary"
	fancon_80 sb;             // FanconNo=0x02, TZoneNo=0x14 "SB"
	config_footer_mullion;
#endif
#ifdef sherwood
	fancon_70 cell;           // FanconNo=0x00, TZoneNo=0x00 "1st BE Primary"
	fancon_70 rsx;            // FanconNo=0x01, TZoneNo=0x01 "RSX Primary"
	fancon_70 reserved;
	config_footer_sherwood;
#endif
};