Syscon Thermal Configs/structs

From PS3 Developer wiki
Revision as of 05:52, 22 April 2022 by Sandungas (talk | contribs) (In mullion are named "tempu" & "tempd" but in sherwood are "tempru" & "temprd". Both styles are official codenames, i think is better to dont give preference to one of them and use more explicit names)
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          | 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_up[0xA];
	u16 temp_down[0xA];
	fancon_footer;
	u8 reserved[0x9];
}; // 0x40

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

struct fancon_sw {
	u8  duty;
	u16 temp_up;
	u16 temp_down;
};

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 checksum;
}; // 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
};