diff options
| author | magh <magh@maghmogh.com> | 2023-03-06 18:44:55 -0600 |
|---|---|---|
| committer | magh <magh@maghmogh.com> | 2023-03-06 18:44:55 -0600 |
| commit | e80d9d8871b325a04b18f90a9ea4bb7fd148fb25 (patch) | |
| tree | 79dbdb8506b7ff1e92549188d1b94cfc0b3503ae /tools/src/chickens_firestorm.c | |
Diffstat (limited to 'tools/src/chickens_firestorm.c')
| -rw-r--r-- | tools/src/chickens_firestorm.c | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/tools/src/chickens_firestorm.c b/tools/src/chickens_firestorm.c new file mode 100644 index 0000000..7754820 --- /dev/null +++ b/tools/src/chickens_firestorm.c @@ -0,0 +1,113 @@ +/* SPDX-License-Identifier: MIT */ + +#include "cpu_regs.h" +#include "utils.h" + +static void init_common_firestorm(void) +{ + reg_set(SYS_IMP_APL_HID0, HID0_SAME_PG_POWER_OPTIMIZATION); + + // Disable SMC trapping to EL2 + reg_clr(SYS_IMP_APL_HID1, HID1_TRAP_SMC); + + reg_clr(SYS_IMP_APL_HID3, HID3_DEV_PCIE_THROTTLE_ENABLE | HID3_DISABLE_ARBITER_FIX_BIF_CRD); + + // "Post-silicon tuning of STNT widget contiguous counter threshold" + reg_mask(SYS_IMP_APL_HID4, HID4_STNT_COUNTER_THRESHOLD_MASK, HID4_STNT_COUNTER_THRESHOLD(3)); + + // "Sibling Merge in LLC can cause UC load to violate ARM Memory Ordering Rules." + reg_set(SYS_IMP_APL_HID5, HID5_DISABLE_FILL_2C_MERGE); + + reg_set(SYS_IMP_APL_HID9, HID9_TSO_ALLOW_DC_ZVA_WC); + + reg_set(SYS_IMP_APL_HID11, HID11_DISABLE_LD_NT_WIDGET); + + // "configure dummy cycles to work around incorrect temp sensor readings on + // NEX power gating" + reg_mask(SYS_IMP_APL_HID13, HID13_PRE_CYCLES_MASK, HID13_PRE_CYCLES(4)); + + // Best bit names... + // Maybe: "RF bank and Multipass conflict forward progress widget does not + // handle 3+ cycle livelock" + reg_set(SYS_IMP_APL_HID16, HID16_SPAREBIT0 | HID16_SPAREBIT3 | HID16_ENABLE_MPX_PICK_45 | + HID16_ENABLE_MP_CYCLONE_7); +} + +static void init_m1_firestorm(void) +{ + init_common_firestorm(); + + // "Cross-beat Crypto(AES/PMUL) ICache fusion is not disabled for branch + // uncondtional "recoded instruction." + reg_set(SYS_IMP_APL_HID0, HID0_FETCH_WIDTH_DISABLE | HID0_CACHE_FUSION_DISABLE); + + reg_set(SYS_IMP_APL_HID7, HID7_FORCE_NONSPEC_IF_STEPPING | + HID7_FORCE_NONSPEC_IF_SPEC_FLUSH_POINTER_INVALID_AND_MP_VALID); + + reg_mask(SYS_IMP_APL_HID7, HID7_FORCE_NONSPEC_TARGET_TIMER_SEL_MASK, + HID7_FORCE_NONSPEC_TARGET_TIMER_SEL(3)); + + reg_set(SYS_IMP_APL_HID9, HID9_TSO_SERIALIZE_VLD_MICROOPS | HID9_FIX_BUG_51667805); + + reg_set(SYS_IMP_APL_HID18, HID18_HVC_SPECULATION_DISABLE); + + reg_clr(SYS_IMP_APL_HID21, HID21_ENABLE_LDREX_FILL_REPLY); +} + +void init_t8103_firestorm(int rev) +{ + init_m1_firestorm(); + + reg_mask(SYS_IMP_APL_HID6, HID6_UP_CRD_TKN_INIT_C2_MASK, HID6_UP_CRD_TKN_INIT_C2(0)); + + if (rev >= 0x10) { + reg_set(SYS_IMP_APL_HID4, + HID4_ENABLE_LFSR_STALL_LOAD_PIPE_2_ISSUE | HID4_ENABLE_LFSR_STALL_STQ_REPLAY); + + reg_set(SYS_IMP_APL_HID9, HID9_FIX_BUG_55719865); + reg_set(SYS_IMP_APL_HID11, HID11_ENABLE_FIX_UC_55719865); + } + + if (rev == 0x11) + reg_set(SYS_IMP_APL_HID1, HID1_ENABLE_MDSB_STALL_PIPELINE_ECO | HID1_ENABLE_BR_KILL_LIMIT); + + if (rev >= 0x11) + reg_set(SYS_IMP_APL_HID18, HID18_SPAREBIT17); +} + +void init_t6000_firestorm(int rev) +{ + init_m1_firestorm(); + + reg_set(SYS_IMP_APL_HID9, HID9_FIX_BUG_55719865); + reg_set(SYS_IMP_APL_HID11, HID11_ENABLE_FIX_UC_55719865); + + if (rev >= 0x10) { + reg_set(SYS_IMP_APL_HID1, HID1_ENABLE_MDSB_STALL_PIPELINE_ECO | HID1_ENABLE_BR_KILL_LIMIT); + + reg_set(SYS_IMP_APL_HID4, + HID4_ENABLE_LFSR_STALL_LOAD_PIPE_2_ISSUE | HID4_ENABLE_LFSR_STALL_STQ_REPLAY); + + reg_set(SYS_IMP_APL_HID18, HID18_SPAREBIT17); + } +} + +void init_t6001_firestorm(int rev) +{ + init_m1_firestorm(); + + reg_set(SYS_IMP_APL_HID1, HID1_ENABLE_MDSB_STALL_PIPELINE_ECO); + + reg_set(SYS_IMP_APL_HID4, + HID4_ENABLE_LFSR_STALL_LOAD_PIPE_2_ISSUE | HID4_ENABLE_LFSR_STALL_STQ_REPLAY); + + reg_set(SYS_IMP_APL_HID9, HID9_FIX_BUG_55719865); + + reg_set(SYS_IMP_APL_HID11, HID11_ENABLE_FIX_UC_55719865); + + if (rev >= 0x10) { + reg_set(SYS_IMP_APL_HID1, HID1_ENABLE_BR_KILL_LIMIT); + + reg_set(SYS_IMP_APL_HID18, HID18_SPAREBIT17); + } +} |
