summaryrefslogtreecommitdiff
path: root/tools/src/chickens_firestorm.c
diff options
context:
space:
mode:
authormagh <magh@maghmogh.com>2023-03-06 18:44:55 -0600
committermagh <magh@maghmogh.com>2023-03-06 18:44:55 -0600
commite80d9d8871b325a04b18f90a9ea4bb7fd148fb25 (patch)
tree79dbdb8506b7ff1e92549188d1b94cfc0b3503ae /tools/src/chickens_firestorm.c
add m1n1HEADmaster
Diffstat (limited to 'tools/src/chickens_firestorm.c')
-rw-r--r--tools/src/chickens_firestorm.c113
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);
+ }
+}