diff --git a/Source/Atmosphere/stratosphere/loader/source/ldr_process_creation.cpp b/Source/Atmosphere/stratosphere/loader/source/ldr_process_creation.cpp
index 4a5bed22..1ddc399e 100644
--- a/Source/Atmosphere/stratosphere/loader/source/ldr_process_creation.cpp
+++ b/Source/Atmosphere/stratosphere/loader/source/ldr_process_creation.cpp
@@ -23,7 +23,7 @@
#include "ldr_patcher.hpp"
#include "ldr_process_creation.hpp"
#include "ldr_ro_manager.hpp"
-#include "ldr_oc_suite.hpp"
+#include "oc/ldr_oc_suite.hpp"
namespace ams::ldr {
diff --git a/Source/Atmosphere/stratosphere/loader/source/mtc_timing_table.hpp b/Source/Atmosphere/stratosphere/loader/source/mtc_timing_table.hpp
deleted file mode 100644
index d5b2488e..00000000
--- a/Source/Atmosphere/stratosphere/loader/source/mtc_timing_table.hpp
+++ /dev/null
@@ -1,2373 +0,0 @@
-/*
- * Copyright (c) Atmosphère-NX
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms and conditions of the GNU General Public License,
- * version 2, as published by the Free Software Foundation.
- *
- * This program is distributed in the hope it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- * from GCC preprocessor output
- */
-
-struct MarikoMtcTable {
- uint32_t rev;
- char dvfs_ver[60];
- uint32_t rate_khz;
- uint32_t min_volt;
- uint32_t gpu_min_volt;
- char clock_src[32];
- uint32_t clk_src_emc;
- uint32_t pll_en_ssc;
- uint32_t needs_training;
- uint32_t training_pattern;
- uint32_t trained;
-
- uint32_t periodic_training;
- uint32_t trained_dram_clktree_c0d0u0;
- uint32_t trained_dram_clktree_c0d0u1;
- uint32_t trained_dram_clktree_c0d1u0;
- uint32_t trained_dram_clktree_c0d1u1;
- uint32_t trained_dram_clktree_c1d0u0;
- uint32_t trained_dram_clktree_c1d0u1;
- uint32_t trained_dram_clktree_c1d1u0;
- uint32_t trained_dram_clktree_c1d1u1;
- uint32_t current_dram_clktree_c0d0u0;
- uint32_t current_dram_clktree_c0d0u1;
- uint32_t current_dram_clktree_c0d1u0;
- uint32_t current_dram_clktree_c0d1u1;
- uint32_t current_dram_clktree_c1d0u0;
- uint32_t current_dram_clktree_c1d0u1;
- uint32_t current_dram_clktree_c1d1u0;
- uint32_t current_dram_clktree_c1d1u1;
- uint32_t emc_fbio_cfg7;
- uint32_t run_clocks;
- uint32_t tree_margin;
-
- uint32_t num_burst;
- uint32_t num_burst_per_ch;
- uint32_t num_trim;
- uint32_t num_trim_per_ch;
- uint32_t num_mc_regs;
- uint32_t num_up_down;
- uint32_t vref_num;
- uint32_t training_mod_num;
- uint32_t dram_timing_num;
-
- uint32_t ptfv_dqsosc_movavg_c0d0u0;
- uint32_t ptfv_dqsosc_movavg_c0d0u1;
- uint32_t ptfv_dqsosc_movavg_c0d1u0;
- uint32_t ptfv_dqsosc_movavg_c0d1u1;
- uint32_t ptfv_dqsosc_movavg_c1d0u0;
- uint32_t ptfv_dqsosc_movavg_c1d0u1;
- uint32_t ptfv_dqsosc_movavg_c1d1u0;
- uint32_t ptfv_dqsosc_movavg_c1d1u1;
- uint32_t ptfv_write_samples;
- uint32_t ptfv_dvfs_samples;
- uint32_t ptfv_movavg_weight;
- uint32_t ptfv_config_ctrl;
-
- struct {
- uint32_t emc_rc;
- uint32_t emc_rfc;
- uint32_t emc_rfcpb;
- uint32_t emc_refctrl2;
- uint32_t emc_rfc_slr;
- uint32_t emc_ras;
- uint32_t emc_rp;
- uint32_t emc_r2w;
- uint32_t emc_w2r;
- uint32_t emc_r2p;
- uint32_t emc_w2p;
- uint32_t emc_r2r;
- uint32_t emc_tppd;
- uint32_t emc_trtm;
- uint32_t emc_twtm;
- uint32_t emc_tratm;
- uint32_t emc_twatm;
- uint32_t emc_tr2ref;
- uint32_t emc_ccdmw;
- uint32_t emc_rd_rcd;
- uint32_t emc_wr_rcd;
- uint32_t emc_rrd;
- uint32_t emc_rext;
- uint32_t emc_wext;
- uint32_t emc_wdv_chk;
- uint32_t emc_wdv;
- uint32_t emc_wsv;
- uint32_t emc_wev;
- uint32_t emc_wdv_mask;
- uint32_t emc_ws_duration;
- uint32_t emc_we_duration;
- uint32_t emc_quse;
- uint32_t emc_quse_width;
- uint32_t emc_ibdly;
- uint32_t emc_obdly;
- uint32_t emc_einput;
- uint32_t emc_mrw6;
- uint32_t emc_einput_duration;
- uint32_t emc_puterm_extra;
- uint32_t emc_puterm_width;
- uint32_t emc_qrst;
- uint32_t emc_qsafe;
- uint32_t emc_rdv;
- uint32_t emc_rdv_mask;
- uint32_t emc_rdv_early;
- uint32_t emc_rdv_early_mask;
- uint32_t emc_refresh;
- uint32_t emc_burst_refresh_num;
- uint32_t emc_pre_refresh_req_cnt;
- uint32_t emc_pdex2wr;
- uint32_t emc_pdex2rd;
- uint32_t emc_pchg2pden;
- uint32_t emc_act2pden;
- uint32_t emc_ar2pden;
- uint32_t emc_rw2pden;
- uint32_t emc_cke2pden;
- uint32_t emc_pdex2cke;
- uint32_t emc_pdex2mrr;
- uint32_t emc_txsr;
- uint32_t emc_txsrdll;
- uint32_t emc_tcke;
- uint32_t emc_tckesr;
- uint32_t emc_tpd;
- uint32_t emc_tfaw;
- uint32_t emc_trpab;
- uint32_t emc_tclkstable;
- uint32_t emc_tclkstop;
- uint32_t emc_mrw7;
- uint32_t emc_trefbw;
- uint32_t emc_odt_write;
- uint32_t emc_fbio_cfg5;
- uint32_t emc_fbio_cfg7;
- uint32_t emc_cfg_dig_dll;
- uint32_t emc_cfg_dig_dll_period;
- uint32_t emc_pmacro_ib_rxrt;
- uint32_t emc_cfg_pipe_1;
- uint32_t emc_cfg_pipe_2;
- uint32_t emc_pmacro_quse_ddll_rank0_4;
- uint32_t emc_pmacro_quse_ddll_rank0_5;
- uint32_t emc_pmacro_quse_ddll_rank1_4;
- uint32_t emc_pmacro_quse_ddll_rank1_5;
- uint32_t emc_mrw8;
- uint32_t emc_pmacro_ob_ddll_long_dq_rank1_4;
- uint32_t emc_pmacro_ob_ddll_long_dq_rank1_5;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_0;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_1;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_2;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_3;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_4;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_5;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_0;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_1;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_2;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_3;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_4;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_5;
- uint32_t emc_pmacro_ddll_long_cmd_0;
- uint32_t emc_pmacro_ddll_long_cmd_1;
- uint32_t emc_pmacro_ddll_long_cmd_2;
- uint32_t emc_pmacro_ddll_long_cmd_3;
- uint32_t emc_pmacro_ddll_long_cmd_4;
- uint32_t emc_pmacro_ddll_short_cmd_0;
- uint32_t emc_pmacro_ddll_short_cmd_1;
- uint32_t emc_pmacro_ddll_short_cmd_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte0_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte1_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte2_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte3_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte4_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte5_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte6_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte7_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd0_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd1_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd2_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd3_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte0_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte1_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte2_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte3_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte4_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte5_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte6_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte7_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd0_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd0_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd0_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd0_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd1_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd1_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd1_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd1_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd2_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd2_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd2_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd2_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd3_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd3_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd3_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd3_3;
- uint32_t emc_txdsrvttgen;
- uint32_t emc_fdpd_ctrl_dq;
- uint32_t emc_fdpd_ctrl_cmd;
- uint32_t emc_fbio_spare;
- uint32_t emc_zcal_interval;
- uint32_t emc_zcal_wait_cnt;
- uint32_t emc_mrs_wait_cnt;
- uint32_t emc_mrs_wait_cnt2;
- uint32_t emc_auto_cal_channel;
- uint32_t emc_pmacro_dll_cfg_0;
- uint32_t emc_pmacro_dll_cfg_1;
- uint32_t emc_pmacro_dll_cfg_2;
- uint32_t emc_pmacro_autocal_cfg_common;
- uint32_t emc_pmacro_zctrl;
- uint32_t emc_cfg;
- uint32_t emc_cfg_pipe;
- uint32_t emc_dyn_self_ref_control;
- uint32_t emc_qpop;
- uint32_t emc_dqs_brlshft_0;
- uint32_t emc_dqs_brlshft_1;
- uint32_t emc_cmd_brlshft_2;
- uint32_t emc_cmd_brlshft_3;
- uint32_t emc_pmacro_pad_cfg_ctrl;
- uint32_t emc_pmacro_data_pad_rx_ctrl;
- uint32_t emc_pmacro_cmd_pad_rx_ctrl;
- uint32_t emc_pmacro_data_rx_term_mode;
- uint32_t emc_pmacro_cmd_rx_term_mode;
- uint32_t emc_pmacro_cmd_pad_tx_ctrl;
- uint32_t emc_pmacro_data_pad_tx_ctrl;
- uint32_t emc_pmacro_vttgen_ctrl_0;
- uint32_t emc_pmacro_vttgen_ctrl_1;
- uint32_t emc_pmacro_vttgen_ctrl_2;
- uint32_t emc_pmacro_brick_ctrl_rfu1;
- uint32_t emc_pmacro_cmd_brick_ctrl_fdpd;
- uint32_t emc_pmacro_brick_ctrl_rfu2;
- uint32_t emc_pmacro_data_brick_ctrl_fdpd;
- uint32_t emc_pmacro_bg_bias_ctrl_0;
- uint32_t emc_cfg_3;
- uint32_t emc_pmacro_tx_pwrd_0;
- uint32_t emc_pmacro_tx_pwrd_1;
- uint32_t emc_pmacro_tx_pwrd_2;
- uint32_t emc_pmacro_tx_pwrd_3;
- uint32_t emc_pmacro_tx_pwrd_4;
- uint32_t emc_pmacro_tx_pwrd_5;
- uint32_t emc_config_sample_delay;
- uint32_t emc_pmacro_tx_sel_clk_src_0;
- uint32_t emc_pmacro_tx_sel_clk_src_1;
- uint32_t emc_pmacro_tx_sel_clk_src_2;
- uint32_t emc_pmacro_tx_sel_clk_src_3;
- uint32_t emc_pmacro_tx_sel_clk_src_4;
- uint32_t emc_pmacro_tx_sel_clk_src_5;
- uint32_t emc_pmacro_ddll_bypass;
- uint32_t emc_pmacro_ddll_pwrd_0;
- uint32_t emc_pmacro_ddll_pwrd_1;
- uint32_t emc_pmacro_ddll_pwrd_2;
- uint32_t emc_pmacro_cmd_ctrl_0;
- uint32_t emc_pmacro_cmd_ctrl_1;
- uint32_t emc_pmacro_cmd_ctrl_2;
- uint32_t emc_pmacro_data_pi_ctrl;
- uint32_t emc_pmacro_cmd_pi_ctrl;
- uint32_t emc_tr_timing_0;
- uint32_t emc_tr_dvfs;
- uint32_t emc_tr_ctrl_1;
- uint32_t emc_tr_rdv;
- uint32_t emc_tr_qpop;
- uint32_t emc_tr_rdv_mask;
- uint32_t emc_mrw14;
- uint32_t emc_tr_qsafe;
- uint32_t emc_tr_qrst;
- uint32_t emc_training_ctrl;
- uint32_t emc_training_settle;
- uint32_t emc_training_vref_settle;
- uint32_t emc_training_ca_fine_ctrl;
- uint32_t emc_training_ca_ctrl_misc;
- uint32_t emc_training_ca_ctrl_misc1;
- uint32_t emc_training_ca_vref_ctrl;
- uint32_t emc_training_quse_cors_ctrl;
- uint32_t emc_training_quse_fine_ctrl;
- uint32_t emc_training_quse_ctrl_misc;
- uint32_t emc_training_quse_vref_ctrl;
- uint32_t emc_training_read_fine_ctrl;
- uint32_t emc_training_read_ctrl_misc;
- uint32_t emc_training_read_vref_ctrl;
- uint32_t emc_training_write_fine_ctrl;
- uint32_t emc_training_write_ctrl_misc;
- uint32_t emc_training_write_vref_ctrl;
- uint32_t emc_training_mpc;
- uint32_t emc_mrw15;
- }
- burst_regs;
-
- struct {
- uint32_t emc0_mrw10;
- uint32_t emc1_mrw10;
- uint32_t emc0_mrw11;
- uint32_t emc1_mrw11;
- uint32_t emc0_mrw12;
- uint32_t emc1_mrw12;
- uint32_t emc0_mrw13;
- uint32_t emc1_mrw13;
- }
- burst_perch_regs;
-
- struct {
- uint32_t emc_rc;
- uint32_t emc_rfc;
- uint32_t emc_rfcpb;
- uint32_t emc_refctrl2;
- uint32_t emc_rfc_slr;
- uint32_t emc_ras;
- uint32_t emc_rp;
- uint32_t emc_r2w;
- uint32_t emc_w2r;
- uint32_t emc_r2p;
- uint32_t emc_w2p;
- uint32_t emc_r2r;
- uint32_t emc_tppd;
- uint32_t emc_trtm;
- uint32_t emc_twtm;
- uint32_t emc_tratm;
- uint32_t emc_twatm;
- uint32_t emc_tr2ref;
- uint32_t emc_ccdmw;
- uint32_t emc_rd_rcd;
- uint32_t emc_wr_rcd;
- uint32_t emc_rrd;
- uint32_t emc_rext;
- uint32_t emc_wext;
- uint32_t emc_wdv_chk;
- uint32_t emc_wdv;
- uint32_t emc_wsv;
- uint32_t emc_wev;
- uint32_t emc_wdv_mask;
- uint32_t emc_ws_duration;
- uint32_t emc_we_duration;
- uint32_t emc_quse;
- uint32_t emc_quse_width;
- uint32_t emc_ibdly;
- uint32_t emc_obdly;
- uint32_t emc_einput;
- uint32_t emc_mrw6;
- uint32_t emc_einput_duration;
- uint32_t emc_puterm_extra;
- uint32_t emc_puterm_width;
- uint32_t emc_qrst;
- uint32_t emc_qsafe;
- uint32_t emc_rdv;
- uint32_t emc_rdv_mask;
- uint32_t emc_rdv_early;
- uint32_t emc_rdv_early_mask;
- uint32_t emc_refresh;
- uint32_t emc_burst_refresh_num;
- uint32_t emc_pre_refresh_req_cnt;
- uint32_t emc_pdex2wr;
- uint32_t emc_pdex2rd;
- uint32_t emc_pchg2pden;
- uint32_t emc_act2pden;
- uint32_t emc_ar2pden;
- uint32_t emc_rw2pden;
- uint32_t emc_cke2pden;
- uint32_t emc_pdex2cke;
- uint32_t emc_pdex2mrr;
- uint32_t emc_txsr;
- uint32_t emc_txsrdll;
- uint32_t emc_tcke;
- uint32_t emc_tckesr;
- uint32_t emc_tpd;
- uint32_t emc_tfaw;
- uint32_t emc_trpab;
- uint32_t emc_tclkstable;
- uint32_t emc_tclkstop;
- uint32_t emc_mrw7;
- uint32_t emc_trefbw;
- uint32_t emc_odt_write;
- uint32_t emc_fbio_cfg5;
- uint32_t emc_fbio_cfg7;
- uint32_t emc_cfg_dig_dll;
- uint32_t emc_cfg_dig_dll_period;
- uint32_t emc_pmacro_ib_rxrt;
- uint32_t emc_cfg_pipe_1;
- uint32_t emc_cfg_pipe_2;
- uint32_t emc_pmacro_quse_ddll_rank0_4;
- uint32_t emc_pmacro_quse_ddll_rank0_5;
- uint32_t emc_pmacro_quse_ddll_rank1_4;
- uint32_t emc_pmacro_quse_ddll_rank1_5;
- uint32_t emc_mrw8;
- uint32_t emc_pmacro_ob_ddll_long_dq_rank1_4;
- uint32_t emc_pmacro_ob_ddll_long_dq_rank1_5;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_0;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_1;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_2;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_3;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_4;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_5;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_0;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_1;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_2;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_3;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_4;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_5;
- uint32_t emc_pmacro_ddll_long_cmd_0;
- uint32_t emc_pmacro_ddll_long_cmd_1;
- uint32_t emc_pmacro_ddll_long_cmd_2;
- uint32_t emc_pmacro_ddll_long_cmd_3;
- uint32_t emc_pmacro_ddll_long_cmd_4;
- uint32_t emc_pmacro_ddll_short_cmd_0;
- uint32_t emc_pmacro_ddll_short_cmd_1;
- uint32_t emc_pmacro_ddll_short_cmd_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte0_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte1_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte2_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte3_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte4_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte5_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte6_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte7_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd0_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd1_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd2_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd3_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte0_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte1_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte2_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte3_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte4_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte5_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte6_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte7_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd0_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd0_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd0_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd0_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd1_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd1_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd1_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd1_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd2_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd2_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd2_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd2_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd3_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd3_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd3_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd3_3;
- uint32_t emc_txdsrvttgen;
- uint32_t emc_fdpd_ctrl_dq;
- uint32_t emc_fdpd_ctrl_cmd;
- uint32_t emc_fbio_spare;
- uint32_t emc_zcal_interval;
- uint32_t emc_zcal_wait_cnt;
- uint32_t emc_mrs_wait_cnt;
- uint32_t emc_mrs_wait_cnt2;
- uint32_t emc_auto_cal_channel;
- uint32_t emc_pmacro_dll_cfg_0;
- uint32_t emc_pmacro_dll_cfg_1;
- uint32_t emc_pmacro_dll_cfg_2;
- uint32_t emc_pmacro_autocal_cfg_common;
- uint32_t emc_pmacro_zctrl;
- uint32_t emc_cfg;
- uint32_t emc_cfg_pipe;
- uint32_t emc_dyn_self_ref_control;
- uint32_t emc_qpop;
- uint32_t emc_dqs_brlshft_0;
- uint32_t emc_dqs_brlshft_1;
- uint32_t emc_cmd_brlshft_2;
- uint32_t emc_cmd_brlshft_3;
- uint32_t emc_pmacro_pad_cfg_ctrl;
- uint32_t emc_pmacro_data_pad_rx_ctrl;
- uint32_t emc_pmacro_cmd_pad_rx_ctrl;
- uint32_t emc_pmacro_data_rx_term_mode;
- uint32_t emc_pmacro_cmd_rx_term_mode;
- uint32_t emc_pmacro_cmd_pad_tx_ctrl;
- uint32_t emc_pmacro_data_pad_tx_ctrl;
- uint32_t emc_pmacro_vttgen_ctrl_0;
- uint32_t emc_pmacro_vttgen_ctrl_1;
- uint32_t emc_pmacro_vttgen_ctrl_2;
- uint32_t emc_pmacro_brick_ctrl_rfu1;
- uint32_t emc_pmacro_cmd_brick_ctrl_fdpd;
- uint32_t emc_pmacro_brick_ctrl_rfu2;
- uint32_t emc_pmacro_data_brick_ctrl_fdpd;
- uint32_t emc_pmacro_bg_bias_ctrl_0;
- uint32_t emc_cfg_3;
- uint32_t emc_pmacro_tx_pwrd_0;
- uint32_t emc_pmacro_tx_pwrd_1;
- uint32_t emc_pmacro_tx_pwrd_2;
- uint32_t emc_pmacro_tx_pwrd_3;
- uint32_t emc_pmacro_tx_pwrd_4;
- uint32_t emc_pmacro_tx_pwrd_5;
- uint32_t emc_config_sample_delay;
- uint32_t emc_pmacro_tx_sel_clk_src_0;
- uint32_t emc_pmacro_tx_sel_clk_src_1;
- uint32_t emc_pmacro_tx_sel_clk_src_2;
- uint32_t emc_pmacro_tx_sel_clk_src_3;
- uint32_t emc_pmacro_tx_sel_clk_src_4;
- uint32_t emc_pmacro_tx_sel_clk_src_5;
- uint32_t emc_pmacro_ddll_bypass;
- uint32_t emc_pmacro_ddll_pwrd_0;
- uint32_t emc_pmacro_ddll_pwrd_1;
- uint32_t emc_pmacro_ddll_pwrd_2;
- uint32_t emc_pmacro_cmd_ctrl_0;
- uint32_t emc_pmacro_cmd_ctrl_1;
- uint32_t emc_pmacro_cmd_ctrl_2;
- uint32_t emc_pmacro_data_pi_ctrl;
- uint32_t emc_pmacro_cmd_pi_ctrl;
- uint32_t emc_tr_timing_0;
- uint32_t emc_tr_dvfs;
- uint32_t emc_tr_ctrl_1;
- uint32_t emc_tr_rdv;
- uint32_t emc_tr_qpop;
- uint32_t emc_tr_rdv_mask;
- uint32_t emc_mrw14;
- uint32_t emc_tr_qsafe;
- uint32_t emc_tr_qrst;
- uint32_t emc_training_ctrl;
- uint32_t emc_training_settle;
- uint32_t emc_training_vref_settle;
- uint32_t emc_training_ca_fine_ctrl;
- uint32_t emc_training_ca_ctrl_misc;
- uint32_t emc_training_ca_ctrl_misc1;
- uint32_t emc_training_ca_vref_ctrl;
- uint32_t emc_training_quse_cors_ctrl;
- uint32_t emc_training_quse_fine_ctrl;
- uint32_t emc_training_quse_ctrl_misc;
- uint32_t emc_training_quse_vref_ctrl;
- uint32_t emc_training_read_fine_ctrl;
- uint32_t emc_training_read_ctrl_misc;
- uint32_t emc_training_read_vref_ctrl;
- uint32_t emc_training_write_fine_ctrl;
- uint32_t emc_training_write_ctrl_misc;
- uint32_t emc_training_write_vref_ctrl;
- uint32_t emc_training_mpc;
- uint32_t emc_mrw15;
- }
- shadow_regs_ca_train;
-
- struct {
- uint32_t emc_rc;
- uint32_t emc_rfc;
- uint32_t emc_rfcpb;
- uint32_t emc_refctrl2;
- uint32_t emc_rfc_slr;
- uint32_t emc_ras;
- uint32_t emc_rp;
- uint32_t emc_r2w;
- uint32_t emc_w2r;
- uint32_t emc_r2p;
- uint32_t emc_w2p;
- uint32_t emc_r2r;
- uint32_t emc_tppd;
- uint32_t emc_trtm;
- uint32_t emc_twtm;
- uint32_t emc_tratm;
- uint32_t emc_twatm;
- uint32_t emc_tr2ref;
- uint32_t emc_ccdmw;
- uint32_t emc_rd_rcd;
- uint32_t emc_wr_rcd;
- uint32_t emc_rrd;
- uint32_t emc_rext;
- uint32_t emc_wext;
- uint32_t emc_wdv_chk;
- uint32_t emc_wdv;
- uint32_t emc_wsv;
- uint32_t emc_wev;
- uint32_t emc_wdv_mask;
- uint32_t emc_ws_duration;
- uint32_t emc_we_duration;
- uint32_t emc_quse;
- uint32_t emc_quse_width;
- uint32_t emc_ibdly;
- uint32_t emc_obdly;
- uint32_t emc_einput;
- uint32_t emc_mrw6;
- uint32_t emc_einput_duration;
- uint32_t emc_puterm_extra;
- uint32_t emc_puterm_width;
- uint32_t emc_qrst;
- uint32_t emc_qsafe;
- uint32_t emc_rdv;
- uint32_t emc_rdv_mask;
- uint32_t emc_rdv_early;
- uint32_t emc_rdv_early_mask;
- uint32_t emc_refresh;
- uint32_t emc_burst_refresh_num;
- uint32_t emc_pre_refresh_req_cnt;
- uint32_t emc_pdex2wr;
- uint32_t emc_pdex2rd;
- uint32_t emc_pchg2pden;
- uint32_t emc_act2pden;
- uint32_t emc_ar2pden;
- uint32_t emc_rw2pden;
- uint32_t emc_cke2pden;
- uint32_t emc_pdex2cke;
- uint32_t emc_pdex2mrr;
- uint32_t emc_txsr;
- uint32_t emc_txsrdll;
- uint32_t emc_tcke;
- uint32_t emc_tckesr;
- uint32_t emc_tpd;
- uint32_t emc_tfaw;
- uint32_t emc_trpab;
- uint32_t emc_tclkstable;
- uint32_t emc_tclkstop;
- uint32_t emc_mrw7;
- uint32_t emc_trefbw;
- uint32_t emc_odt_write;
- uint32_t emc_fbio_cfg5;
- uint32_t emc_fbio_cfg7;
- uint32_t emc_cfg_dig_dll;
- uint32_t emc_cfg_dig_dll_period;
- uint32_t emc_pmacro_ib_rxrt;
- uint32_t emc_cfg_pipe_1;
- uint32_t emc_cfg_pipe_2;
- uint32_t emc_pmacro_quse_ddll_rank0_4;
- uint32_t emc_pmacro_quse_ddll_rank0_5;
- uint32_t emc_pmacro_quse_ddll_rank1_4;
- uint32_t emc_pmacro_quse_ddll_rank1_5;
- uint32_t emc_mrw8;
- uint32_t emc_pmacro_ob_ddll_long_dq_rank1_4;
- uint32_t emc_pmacro_ob_ddll_long_dq_rank1_5;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_0;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_1;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_2;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_3;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_4;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_5;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_0;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_1;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_2;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_3;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_4;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_5;
- uint32_t emc_pmacro_ddll_long_cmd_0;
- uint32_t emc_pmacro_ddll_long_cmd_1;
- uint32_t emc_pmacro_ddll_long_cmd_2;
- uint32_t emc_pmacro_ddll_long_cmd_3;
- uint32_t emc_pmacro_ddll_long_cmd_4;
- uint32_t emc_pmacro_ddll_short_cmd_0;
- uint32_t emc_pmacro_ddll_short_cmd_1;
- uint32_t emc_pmacro_ddll_short_cmd_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte0_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte1_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte2_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte3_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte4_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte5_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte6_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte7_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd0_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd1_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd2_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd3_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte0_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte1_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte2_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte3_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte4_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte5_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte6_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte7_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd0_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd0_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd0_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd0_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd1_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd1_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd1_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd1_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd2_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd2_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd2_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd2_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd3_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd3_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd3_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd3_3;
- uint32_t emc_txdsrvttgen;
- uint32_t emc_fdpd_ctrl_dq;
- uint32_t emc_fdpd_ctrl_cmd;
- uint32_t emc_fbio_spare;
- uint32_t emc_zcal_interval;
- uint32_t emc_zcal_wait_cnt;
- uint32_t emc_mrs_wait_cnt;
- uint32_t emc_mrs_wait_cnt2;
- uint32_t emc_auto_cal_channel;
- uint32_t emc_pmacro_dll_cfg_0;
- uint32_t emc_pmacro_dll_cfg_1;
- uint32_t emc_pmacro_dll_cfg_2;
- uint32_t emc_pmacro_autocal_cfg_common;
- uint32_t emc_pmacro_zctrl;
- uint32_t emc_cfg;
- uint32_t emc_cfg_pipe;
- uint32_t emc_dyn_self_ref_control;
- uint32_t emc_qpop;
- uint32_t emc_dqs_brlshft_0;
- uint32_t emc_dqs_brlshft_1;
- uint32_t emc_cmd_brlshft_2;
- uint32_t emc_cmd_brlshft_3;
- uint32_t emc_pmacro_pad_cfg_ctrl;
- uint32_t emc_pmacro_data_pad_rx_ctrl;
- uint32_t emc_pmacro_cmd_pad_rx_ctrl;
- uint32_t emc_pmacro_data_rx_term_mode;
- uint32_t emc_pmacro_cmd_rx_term_mode;
- uint32_t emc_pmacro_cmd_pad_tx_ctrl;
- uint32_t emc_pmacro_data_pad_tx_ctrl;
- uint32_t emc_pmacro_vttgen_ctrl_0;
- uint32_t emc_pmacro_vttgen_ctrl_1;
- uint32_t emc_pmacro_vttgen_ctrl_2;
- uint32_t emc_pmacro_brick_ctrl_rfu1;
- uint32_t emc_pmacro_cmd_brick_ctrl_fdpd;
- uint32_t emc_pmacro_brick_ctrl_rfu2;
- uint32_t emc_pmacro_data_brick_ctrl_fdpd;
- uint32_t emc_pmacro_bg_bias_ctrl_0;
- uint32_t emc_cfg_3;
- uint32_t emc_pmacro_tx_pwrd_0;
- uint32_t emc_pmacro_tx_pwrd_1;
- uint32_t emc_pmacro_tx_pwrd_2;
- uint32_t emc_pmacro_tx_pwrd_3;
- uint32_t emc_pmacro_tx_pwrd_4;
- uint32_t emc_pmacro_tx_pwrd_5;
- uint32_t emc_config_sample_delay;
- uint32_t emc_pmacro_tx_sel_clk_src_0;
- uint32_t emc_pmacro_tx_sel_clk_src_1;
- uint32_t emc_pmacro_tx_sel_clk_src_2;
- uint32_t emc_pmacro_tx_sel_clk_src_3;
- uint32_t emc_pmacro_tx_sel_clk_src_4;
- uint32_t emc_pmacro_tx_sel_clk_src_5;
- uint32_t emc_pmacro_ddll_bypass;
- uint32_t emc_pmacro_ddll_pwrd_0;
- uint32_t emc_pmacro_ddll_pwrd_1;
- uint32_t emc_pmacro_ddll_pwrd_2;
- uint32_t emc_pmacro_cmd_ctrl_0;
- uint32_t emc_pmacro_cmd_ctrl_1;
- uint32_t emc_pmacro_cmd_ctrl_2;
- uint32_t emc_pmacro_data_pi_ctrl;
- uint32_t emc_pmacro_cmd_pi_ctrl;
- uint32_t emc_tr_timing_0;
- uint32_t emc_tr_dvfs;
- uint32_t emc_tr_ctrl_1;
- uint32_t emc_tr_rdv;
- uint32_t emc_tr_qpop;
- uint32_t emc_tr_rdv_mask;
- uint32_t emc_mrw14;
- uint32_t emc_tr_qsafe;
- uint32_t emc_tr_qrst;
- uint32_t emc_training_ctrl;
- uint32_t emc_training_settle;
- uint32_t emc_training_vref_settle;
- uint32_t emc_training_ca_fine_ctrl;
- uint32_t emc_training_ca_ctrl_misc;
- uint32_t emc_training_ca_ctrl_misc1;
- uint32_t emc_training_ca_vref_ctrl;
- uint32_t emc_training_quse_cors_ctrl;
- uint32_t emc_training_quse_fine_ctrl;
- uint32_t emc_training_quse_ctrl_misc;
- uint32_t emc_training_quse_vref_ctrl;
- uint32_t emc_training_read_fine_ctrl;
- uint32_t emc_training_read_ctrl_misc;
- uint32_t emc_training_read_vref_ctrl;
- uint32_t emc_training_write_fine_ctrl;
- uint32_t emc_training_write_ctrl_misc;
- uint32_t emc_training_write_vref_ctrl;
- uint32_t emc_training_mpc;
- uint32_t emc_mrw15;
- }
- shadow_regs_rdwr_train;
-
- struct {
- uint32_t emc_pmacro_ib_ddll_long_dqs_rank0_0;
- uint32_t emc_pmacro_ib_ddll_long_dqs_rank0_1;
- uint32_t emc_pmacro_ib_ddll_long_dqs_rank0_2;
- uint32_t emc_pmacro_ib_ddll_long_dqs_rank0_3;
- uint32_t emc_pmacro_ib_ddll_long_dqs_rank1_0;
- uint32_t emc_pmacro_ib_ddll_long_dqs_rank1_1;
- uint32_t emc_pmacro_ib_ddll_long_dqs_rank1_2;
- uint32_t emc_pmacro_ib_ddll_long_dqs_rank1_3;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte0_0;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte0_1;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte0_2;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte1_0;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte1_1;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte1_2;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte2_0;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte2_1;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte2_2;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte3_0;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte3_1;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte3_2;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte4_0;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte4_1;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte4_2;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte5_0;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte5_1;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte5_2;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte6_0;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte6_1;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte6_2;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte7_0;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte7_1;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte7_2;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte0_0;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte0_1;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte0_2;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte1_0;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte1_1;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte1_2;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte2_0;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte2_1;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte2_2;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte3_0;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte3_1;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte3_2;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte4_0;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte4_1;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte4_2;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte5_0;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte5_1;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte5_2;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte6_0;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte6_1;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte6_2;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte7_0;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte7_1;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte7_2;
- uint32_t emc_pmacro_ib_vref_dqs_0;
- uint32_t emc_pmacro_ib_vref_dqs_1;
- uint32_t emc_pmacro_ib_vref_dq_0;
- uint32_t emc_pmacro_ib_vref_dq_1;
- uint32_t emc_pmacro_ob_ddll_long_dq_rank0_0;
- uint32_t emc_pmacro_ob_ddll_long_dq_rank0_1;
- uint32_t emc_pmacro_ob_ddll_long_dq_rank0_2;
- uint32_t emc_pmacro_ob_ddll_long_dq_rank0_3;
- uint32_t emc_pmacro_ob_ddll_long_dq_rank0_4;
- uint32_t emc_pmacro_ob_ddll_long_dq_rank0_5;
- uint32_t emc_pmacro_ob_ddll_long_dq_rank1_0;
- uint32_t emc_pmacro_ob_ddll_long_dq_rank1_1;
- uint32_t emc_pmacro_ob_ddll_long_dq_rank1_2;
- uint32_t emc_pmacro_ob_ddll_long_dq_rank1_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte0_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte0_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte0_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte1_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte1_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte1_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte2_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte2_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte2_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte3_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte3_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte3_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte4_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte4_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte4_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte5_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte5_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte5_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte6_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte6_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte6_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte7_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte7_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte7_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd0_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd0_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd0_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd1_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd1_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd1_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd2_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd2_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd2_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd3_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd3_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd3_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte0_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte0_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte0_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte1_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte1_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte1_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte2_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte2_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte2_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte3_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte3_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte3_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte4_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte4_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte4_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte5_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte5_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte5_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte6_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte6_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte6_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte7_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte7_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte7_2;
- uint32_t emc_pmacro_quse_ddll_rank0_0;
- uint32_t emc_pmacro_quse_ddll_rank0_1;
- uint32_t emc_pmacro_quse_ddll_rank0_2;
- uint32_t emc_pmacro_quse_ddll_rank0_3;
- uint32_t emc_pmacro_quse_ddll_rank1_0;
- uint32_t emc_pmacro_quse_ddll_rank1_1;
- uint32_t emc_pmacro_quse_ddll_rank1_2;
- uint32_t emc_pmacro_quse_ddll_rank1_3;
- }
- trim_regs;
-
- struct {
- uint32_t emc0_cmd_brlshft_0;
- uint32_t emc1_cmd_brlshft_1;
- uint32_t emc0_data_brlshft_0;
- uint32_t emc1_data_brlshft_0;
- uint32_t emc0_data_brlshft_1;
- uint32_t emc1_data_brlshft_1;
- uint32_t emc0_quse_brlshft_0;
- uint32_t emc1_quse_brlshft_1;
- uint32_t emc0_quse_brlshft_2;
- uint32_t emc1_quse_brlshft_3;
- }
- trim_perch_regs;
-
- struct {
- uint32_t emc0_training_opt_dqs_ib_vref_rank0;
- uint32_t emc1_training_opt_dqs_ib_vref_rank0;
- uint32_t emc0_training_opt_dqs_ib_vref_rank1;
- uint32_t emc1_training_opt_dqs_ib_vref_rank1;
- }
- vref_perch_regs;
-
- struct {
- uint32_t t_rp;
- uint32_t t_fc_lpddr4;
- uint32_t t_rfc;
- uint32_t t_pdex;
- uint32_t rl;
- }
- dram_timings;
-
- uint32_t zq_op_cc_long_zcal;
- uint32_t zq_op_cc_short_zcal;
- uint32_t zcal_wait_time_ps_cc_long_zcal;
- uint32_t zcal_wait_time_ps_cc_short_zcal;
- uint32_t tZQCAL_lpddr4;
- uint32_t zqcal_before_cc_cutoff;
- uint32_t opt_cc_short_zcal;
- uint32_t opt_short_zcal;
- uint32_t opt_do_sw_qrst;
- uint32_t save_restore_clkstop_pd;
- uint32_t opt_E90;
- uint32_t cya_allow_ref_cc;
- uint32_t ref_b4_sref_en;
- uint32_t cya_issue_pc_ref;
-
- struct {
- uint32_t emc0_training_rw_offset_ib_byte0;
- uint32_t emc1_training_rw_offset_ib_byte0;
- uint32_t emc0_training_rw_offset_ib_byte1;
- uint32_t emc1_training_rw_offset_ib_byte1;
- uint32_t emc0_training_rw_offset_ib_byte2;
- uint32_t emc1_training_rw_offset_ib_byte2;
- uint32_t emc0_training_rw_offset_ib_byte3;
- uint32_t emc1_training_rw_offset_ib_byte3;
- uint32_t emc0_training_rw_offset_ib_misc;
- uint32_t emc1_training_rw_offset_ib_misc;
- uint32_t emc0_training_rw_offset_ob_byte0;
- uint32_t emc1_training_rw_offset_ob_byte0;
- uint32_t emc0_training_rw_offset_ob_byte1;
- uint32_t emc1_training_rw_offset_ob_byte1;
- uint32_t emc0_training_rw_offset_ob_byte2;
- uint32_t emc1_training_rw_offset_ob_byte2;
- uint32_t emc0_training_rw_offset_ob_byte3;
- uint32_t emc1_training_rw_offset_ob_byte3;
- uint32_t emc0_training_rw_offset_ob_misc;
- uint32_t emc1_training_rw_offset_ob_misc;
- }
- training_mod_regs;
-
- uint32_t save_restore_mod_regs[12];
-
- struct {
- uint32_t mc_emem_arb_cfg;
- uint32_t mc_emem_arb_outstanding_req;
- uint32_t mc_emem_arb_refpb_hp_ctrl;
- uint32_t mc_emem_arb_refpb_bank_ctrl;
- uint32_t mc_emem_arb_timing_rcd;
- uint32_t mc_emem_arb_timing_rp;
- uint32_t mc_emem_arb_timing_rc;
- uint32_t mc_emem_arb_timing_ras;
- uint32_t mc_emem_arb_timing_faw;
- uint32_t mc_emem_arb_timing_rrd;
- uint32_t mc_emem_arb_timing_rap2pre;
- uint32_t mc_emem_arb_timing_wap2pre;
- uint32_t mc_emem_arb_timing_r2r;
- uint32_t mc_emem_arb_timing_w2w;
- uint32_t mc_emem_arb_timing_r2w;
- uint32_t mc_emem_arb_timing_ccdmw;
- uint32_t mc_emem_arb_timing_w2r;
- uint32_t mc_emem_arb_timing_rfcpb;
- uint32_t mc_emem_arb_da_turns;
- uint32_t mc_emem_arb_da_covers;
- uint32_t mc_emem_arb_misc0;
- uint32_t mc_emem_arb_misc1;
- uint32_t mc_emem_arb_misc2;
- uint32_t mc_emem_arb_ring1_throttle;
- uint32_t mc_emem_arb_dhyst_ctrl;
- uint32_t mc_emem_arb_dhyst_timeout_util_0;
- uint32_t mc_emem_arb_dhyst_timeout_util_1;
- uint32_t mc_emem_arb_dhyst_timeout_util_2;
- uint32_t mc_emem_arb_dhyst_timeout_util_3;
- uint32_t mc_emem_arb_dhyst_timeout_util_4;
- uint32_t mc_emem_arb_dhyst_timeout_util_5;
- uint32_t mc_emem_arb_dhyst_timeout_util_6;
- uint32_t mc_emem_arb_dhyst_timeout_util_7;
- }
- burst_mc_regs;
-
- struct {
- uint32_t mc_mll_mpcorer_ptsa_rate;
- uint32_t mc_ftop_ptsa_rate;
- uint32_t mc_ptsa_grant_decrement;
- uint32_t mc_latency_allowance_xusb_0;
- uint32_t mc_latency_allowance_xusb_1;
- uint32_t mc_latency_allowance_tsec_0;
- uint32_t mc_latency_allowance_sdmmca_0;
- uint32_t mc_latency_allowance_sdmmcaa_0;
- uint32_t mc_latency_allowance_sdmmc_0;
- uint32_t mc_latency_allowance_sdmmcab_0;
- uint32_t mc_latency_allowance_ppcs_0;
- uint32_t mc_latency_allowance_ppcs_1;
- uint32_t mc_latency_allowance_mpcore_0;
- uint32_t mc_latency_allowance_hc_0;
- uint32_t mc_latency_allowance_hc_1;
- uint32_t mc_latency_allowance_avpc_0;
- uint32_t mc_latency_allowance_gpu_0;
- uint32_t mc_latency_allowance_gpu2_0;
- uint32_t mc_latency_allowance_nvenc_0;
- uint32_t mc_latency_allowance_nvdec_0;
- uint32_t mc_latency_allowance_vic_0;
- uint32_t mc_latency_allowance_vi2_0;
- uint32_t mc_latency_allowance_isp2_0;
- uint32_t mc_latency_allowance_isp2_1;
- }
- la_scale_regs;
-
- uint32_t unk_0;
- uint32_t vtt_vdda_ctrl_0;
- uint32_t src_clock_div;
- uint32_t vtt_vdda_dual_channel;
- uint32_t vtt_vdda_ctrl_1;
- uint32_t vtt_vdda_ctrl_2;
- uint32_t vtt_vdda_ctrl_3;
- uint32_t vtt_vdda_ctrl_4;
- uint32_t misc_cfg_0;
- uint32_t misc_cfg_1;
- uint32_t misc_cfg_2;
- uint32_t unk_1;
- uint32_t unk_2;
- uint32_t pipe_clk_delay;
- uint32_t clkchange_delay;
- uint32_t pllm_ss_cfg;
- uint32_t pllm_ss_ctrl1;
- uint32_t pllm_ss_ctrl2;
- uint32_t pllmb_ss_cfg;
- uint32_t pllmb_ss_ctrl1;
- uint32_t pllmb_ss_ctrl2;
- uint32_t pllmb_divm;
- uint32_t pllmb_divn;
- uint32_t pllmb_divp;
- uint32_t min_mrs_wait;
- uint32_t ramp_wait;
- uint32_t emc_mrw;
- uint32_t emc_mrw2;
- uint32_t emc_mrw3;
- uint32_t emc_mrw4;
- uint32_t emc_mrw9;
- uint32_t emc_mrs;
- uint32_t emc_emrs;
- uint32_t emc_emrs2;
- uint32_t emc_auto_cal_config;
- uint32_t emc_auto_cal_config2;
- uint32_t emc_auto_cal_config3;
- uint32_t emc_auto_cal_config4;
- uint32_t emc_auto_cal_config5;
- uint32_t emc_auto_cal_config6;
- uint32_t emc_auto_cal_config7;
- uint32_t emc_auto_cal_config8;
- uint32_t emc_cfg_2;
- uint32_t emc_sel_dpd_ctrl;
- uint32_t emc_fdpd_ctrl_cmd_no_ramp;
- uint32_t emc_tr_ctrl_0;
- uint32_t dll_clk_src;
- uint32_t clk_out_enb_x_0_clk_enb_emc_dll;
- uint32_t latency;
- uint32_t pllm_misc1_0_pllm_clamp_ph90;
-};
-
-static_assert(sizeof(MarikoMtcTable) == 0x10CC);
-
-struct EristaMtcTable {
- uint32_t rev;
- char dvfs_ver[60];
- uint32_t rate_khz;
- uint32_t min_volt;
- uint32_t gpu_min_volt;
- char clock_src[32];
- uint32_t clk_src_emc;
- uint32_t needs_training;
- uint32_t training_pattern;
- uint32_t trained;
-
- uint32_t periodic_training;
- uint32_t trained_dram_clktree_c0d0u0;
- uint32_t trained_dram_clktree_c0d0u1;
- uint32_t trained_dram_clktree_c0d1u0;
- uint32_t trained_dram_clktree_c0d1u1;
- uint32_t trained_dram_clktree_c1d0u0;
- uint32_t trained_dram_clktree_c1d0u1;
- uint32_t trained_dram_clktree_c1d1u0;
- uint32_t trained_dram_clktree_c1d1u1;
- uint32_t current_dram_clktree_c0d0u0;
- uint32_t current_dram_clktree_c0d0u1;
- uint32_t current_dram_clktree_c0d1u0;
- uint32_t current_dram_clktree_c0d1u1;
- uint32_t current_dram_clktree_c1d0u0;
- uint32_t current_dram_clktree_c1d0u1;
- uint32_t current_dram_clktree_c1d1u0;
- uint32_t current_dram_clktree_c1d1u1;
- uint32_t run_clocks;
- uint32_t tree_margin;
-
- uint32_t num_burst;
- uint32_t num_burst_per_ch;
- uint32_t num_trim;
- uint32_t num_trim_per_ch;
- uint32_t num_mc_regs;
- uint32_t num_up_down;
- uint32_t vref_num;
- uint32_t training_mod_num;
- uint32_t dram_timing_num;
-
- uint32_t ptfv_dqsosc_movavg_c0d0u0;
- uint32_t ptfv_dqsosc_movavg_c0d0u1;
- uint32_t ptfv_dqsosc_movavg_c0d1u0;
- uint32_t ptfv_dqsosc_movavg_c0d1u1;
- uint32_t ptfv_dqsosc_movavg_c1d0u0;
- uint32_t ptfv_dqsosc_movavg_c1d0u1;
- uint32_t ptfv_dqsosc_movavg_c1d1u0;
- uint32_t ptfv_dqsosc_movavg_c1d1u1;
- uint32_t ptfv_write_samples;
- uint32_t ptfv_dvfs_samples;
- uint32_t ptfv_movavg_weight;
- uint32_t ptfv_config_ctrl;
-
- struct {
- uint32_t emc_rc;
- uint32_t emc_rfc;
- uint32_t emc_rfcpb;
- uint32_t emc_refctrl2;
- uint32_t emc_rfc_slr;
- uint32_t emc_ras;
- uint32_t emc_rp;
- uint32_t emc_r2w;
- uint32_t emc_w2r;
- uint32_t emc_r2p;
- uint32_t emc_w2p;
- uint32_t emc_r2r;
- uint32_t emc_tppd;
- uint32_t emc_ccdmw;
- uint32_t emc_rd_rcd;
- uint32_t emc_wr_rcd;
- uint32_t emc_rrd;
- uint32_t emc_rext;
- uint32_t emc_wext;
- uint32_t emc_wdv_chk;
- uint32_t emc_wdv;
- uint32_t emc_wsv;
- uint32_t emc_wev;
- uint32_t emc_wdv_mask;
- uint32_t emc_ws_duration;
- uint32_t emc_we_duration;
- uint32_t emc_quse;
- uint32_t emc_quse_width;
- uint32_t emc_ibdly;
- uint32_t emc_obdly;
- uint32_t emc_einput;
- uint32_t emc_mrw6;
- uint32_t emc_einput_duration;
- uint32_t emc_puterm_extra;
- uint32_t emc_puterm_width;
- uint32_t emc_qrst;
- uint32_t emc_qsafe;
- uint32_t emc_rdv;
- uint32_t emc_rdv_mask;
- uint32_t emc_rdv_early;
- uint32_t emc_rdv_early_mask;
- uint32_t emc_refresh;
- uint32_t emc_burst_refresh_num;
- uint32_t emc_pre_refresh_req_cnt;
- uint32_t emc_pdex2wr;
- uint32_t emc_pdex2rd;
- uint32_t emc_pchg2pden;
- uint32_t emc_act2pden;
- uint32_t emc_ar2pden;
- uint32_t emc_rw2pden;
- uint32_t emc_cke2pden;
- uint32_t emc_pdex2cke;
- uint32_t emc_pdex2mrr;
- uint32_t emc_txsr;
- uint32_t emc_txsrdll;
- uint32_t emc_tcke;
- uint32_t emc_tckesr;
- uint32_t emc_tpd;
- uint32_t emc_tfaw;
- uint32_t emc_trpab;
- uint32_t emc_tclkstable;
- uint32_t emc_tclkstop;
- uint32_t emc_mrw7;
- uint32_t emc_trefbw;
- uint32_t emc_odt_write;
- uint32_t emc_fbio_cfg5;
- uint32_t emc_fbio_cfg7;
- uint32_t emc_cfg_dig_dll;
- uint32_t emc_cfg_dig_dll_period;
- uint32_t emc_pmacro_ib_rxrt;
- uint32_t emc_cfg_pipe_1;
- uint32_t emc_cfg_pipe_2;
- uint32_t emc_pmacro_quse_ddll_rank0_4;
- uint32_t emc_pmacro_quse_ddll_rank0_5;
- uint32_t emc_pmacro_quse_ddll_rank1_4;
- uint32_t emc_pmacro_quse_ddll_rank1_5;
- uint32_t emc_mrw8;
- uint32_t emc_pmacro_ob_ddll_long_dq_rank1_4;
- uint32_t emc_pmacro_ob_ddll_long_dq_rank1_5;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_0;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_1;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_2;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_3;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_4;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_5;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_0;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_1;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_2;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_3;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_4;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_5;
- uint32_t emc_pmacro_ddll_long_cmd_0;
- uint32_t emc_pmacro_ddll_long_cmd_1;
- uint32_t emc_pmacro_ddll_long_cmd_2;
- uint32_t emc_pmacro_ddll_long_cmd_3;
- uint32_t emc_pmacro_ddll_long_cmd_4;
- uint32_t emc_pmacro_ddll_short_cmd_0;
- uint32_t emc_pmacro_ddll_short_cmd_1;
- uint32_t emc_pmacro_ddll_short_cmd_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte0_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte1_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte2_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte3_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte4_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte5_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte6_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte7_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd0_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd1_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd2_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd3_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte0_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte1_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte2_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte3_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte4_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte5_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte6_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte7_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd0_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd0_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd0_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd0_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd1_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd1_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd1_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd1_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd2_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd2_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd2_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd2_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd3_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd3_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd3_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd3_3;
- uint32_t emc_txdsrvttgen;
- uint32_t emc_fdpd_ctrl_dq;
- uint32_t emc_fdpd_ctrl_cmd;
- uint32_t emc_fbio_spare;
- uint32_t emc_zcal_interval;
- uint32_t emc_zcal_wait_cnt;
- uint32_t emc_mrs_wait_cnt;
- uint32_t emc_mrs_wait_cnt2;
- uint32_t emc_auto_cal_channel;
- uint32_t emc_dll_cfg_0;
- uint32_t emc_dll_cfg_1;
- uint32_t emc_pmacro_autocal_cfg_common;
- uint32_t emc_pmacro_zctrl;
- uint32_t emc_cfg;
- uint32_t emc_cfg_pipe;
- uint32_t emc_dyn_self_ref_control;
- uint32_t emc_qpop;
- uint32_t emc_dqs_brlshft_0;
- uint32_t emc_dqs_brlshft_1;
- uint32_t emc_cmd_brlshft_2;
- uint32_t emc_cmd_brlshft_3;
- uint32_t emc_pmacro_pad_cfg_ctrl;
- uint32_t emc_pmacro_data_pad_rx_ctrl;
- uint32_t emc_pmacro_cmd_pad_rx_ctrl;
- uint32_t emc_pmacro_data_rx_term_mode;
- uint32_t emc_pmacro_cmd_rx_term_mode;
- uint32_t emc_pmacro_cmd_pad_tx_ctrl;
- uint32_t emc_pmacro_data_pad_tx_ctrl;
- uint32_t emc_pmacro_common_pad_tx_ctrl;
- uint32_t emc_pmacro_vttgen_ctrl_0;
- uint32_t emc_pmacro_vttgen_ctrl_1;
- uint32_t emc_pmacro_vttgen_ctrl_2;
- uint32_t emc_pmacro_brick_ctrl_rfu1;
- uint32_t emc_pmacro_cmd_brick_ctrl_fdpd;
- uint32_t emc_pmacro_brick_ctrl_rfu2;
- uint32_t emc_pmacro_data_brick_ctrl_fdpd;
- uint32_t emc_pmacro_bg_bias_ctrl_0;
- uint32_t emc_cfg_3;
- uint32_t emc_pmacro_tx_pwrd_0;
- uint32_t emc_pmacro_tx_pwrd_1;
- uint32_t emc_pmacro_tx_pwrd_2;
- uint32_t emc_pmacro_tx_pwrd_3;
- uint32_t emc_pmacro_tx_pwrd_4;
- uint32_t emc_pmacro_tx_pwrd_5;
- uint32_t emc_config_sample_delay;
- uint32_t emc_pmacro_tx_sel_clk_src_0;
- uint32_t emc_pmacro_tx_sel_clk_src_1;
- uint32_t emc_pmacro_tx_sel_clk_src_2;
- uint32_t emc_pmacro_tx_sel_clk_src_3;
- uint32_t emc_pmacro_tx_sel_clk_src_4;
- uint32_t emc_pmacro_tx_sel_clk_src_5;
- uint32_t emc_pmacro_ddll_bypass;
- uint32_t emc_pmacro_ddll_pwrd_0;
- uint32_t emc_pmacro_ddll_pwrd_1;
- uint32_t emc_pmacro_ddll_pwrd_2;
- uint32_t emc_pmacro_cmd_ctrl_0;
- uint32_t emc_pmacro_cmd_ctrl_1;
- uint32_t emc_pmacro_cmd_ctrl_2;
- uint32_t emc_tr_timing_0;
- uint32_t emc_tr_dvfs;
- uint32_t emc_tr_ctrl_1;
- uint32_t emc_tr_rdv;
- uint32_t emc_tr_qpop;
- uint32_t emc_tr_rdv_mask;
- uint32_t emc_mrw14;
- uint32_t emc_tr_qsafe;
- uint32_t emc_tr_qrst;
- uint32_t emc_training_ctrl;
- uint32_t emc_training_settle;
- uint32_t emc_training_vref_settle;
- uint32_t emc_training_ca_fine_ctrl;
- uint32_t emc_training_ca_ctrl_misc;
- uint32_t emc_training_ca_ctrl_misc1;
- uint32_t emc_training_ca_vref_ctrl;
- uint32_t emc_training_quse_cors_ctrl;
- uint32_t emc_training_quse_fine_ctrl;
- uint32_t emc_training_quse_ctrl_misc;
- uint32_t emc_training_quse_vref_ctrl;
- uint32_t emc_training_read_fine_ctrl;
- uint32_t emc_training_read_ctrl_misc;
- uint32_t emc_training_read_vref_ctrl;
- uint32_t emc_training_write_fine_ctrl;
- uint32_t emc_training_write_ctrl_misc;
- uint32_t emc_training_write_vref_ctrl;
- uint32_t emc_training_mpc;
- uint32_t emc_mrw15;
- }
- burst_regs;
-
- struct {
- uint32_t emc0_mrw10;
- uint32_t emc1_mrw10;
- uint32_t emc0_mrw11;
- uint32_t emc1_mrw11;
- uint32_t emc0_mrw12;
- uint32_t emc1_mrw12;
- uint32_t emc0_mrw13;
- uint32_t emc1_mrw13;
- }
- burst_perch_regs;
-
- struct {
- uint32_t emc_rc;
- uint32_t emc_rfc;
- uint32_t emc_rfcpb;
- uint32_t emc_refctrl2;
- uint32_t emc_rfc_slr;
- uint32_t emc_ras;
- uint32_t emc_rp;
- uint32_t emc_r2w;
- uint32_t emc_w2r;
- uint32_t emc_r2p;
- uint32_t emc_w2p;
- uint32_t emc_r2r;
- uint32_t emc_tppd;
- uint32_t emc_ccdmw;
- uint32_t emc_rd_rcd;
- uint32_t emc_wr_rcd;
- uint32_t emc_rrd;
- uint32_t emc_rext;
- uint32_t emc_wext;
- uint32_t emc_wdv_chk;
- uint32_t emc_wdv;
- uint32_t emc_wsv;
- uint32_t emc_wev;
- uint32_t emc_wdv_mask;
- uint32_t emc_ws_duration;
- uint32_t emc_we_duration;
- uint32_t emc_quse;
- uint32_t emc_quse_width;
- uint32_t emc_ibdly;
- uint32_t emc_obdly;
- uint32_t emc_einput;
- uint32_t emc_mrw6;
- uint32_t emc_einput_duration;
- uint32_t emc_puterm_extra;
- uint32_t emc_puterm_width;
- uint32_t emc_qrst;
- uint32_t emc_qsafe;
- uint32_t emc_rdv;
- uint32_t emc_rdv_mask;
- uint32_t emc_rdv_early;
- uint32_t emc_rdv_early_mask;
- uint32_t emc_refresh;
- uint32_t emc_burst_refresh_num;
- uint32_t emc_pre_refresh_req_cnt;
- uint32_t emc_pdex2wr;
- uint32_t emc_pdex2rd;
- uint32_t emc_pchg2pden;
- uint32_t emc_act2pden;
- uint32_t emc_ar2pden;
- uint32_t emc_rw2pden;
- uint32_t emc_cke2pden;
- uint32_t emc_pdex2cke;
- uint32_t emc_pdex2mrr;
- uint32_t emc_txsr;
- uint32_t emc_txsrdll;
- uint32_t emc_tcke;
- uint32_t emc_tckesr;
- uint32_t emc_tpd;
- uint32_t emc_tfaw;
- uint32_t emc_trpab;
- uint32_t emc_tclkstable;
- uint32_t emc_tclkstop;
- uint32_t emc_mrw7;
- uint32_t emc_trefbw;
- uint32_t emc_odt_write;
- uint32_t emc_fbio_cfg5;
- uint32_t emc_fbio_cfg7;
- uint32_t emc_cfg_dig_dll;
- uint32_t emc_cfg_dig_dll_period;
- uint32_t emc_pmacro_ib_rxrt;
- uint32_t emc_cfg_pipe_1;
- uint32_t emc_cfg_pipe_2;
- uint32_t emc_pmacro_quse_ddll_rank0_4;
- uint32_t emc_pmacro_quse_ddll_rank0_5;
- uint32_t emc_pmacro_quse_ddll_rank1_4;
- uint32_t emc_pmacro_quse_ddll_rank1_5;
- uint32_t emc_mrw8;
- uint32_t emc_pmacro_ob_ddll_long_dq_rank1_4;
- uint32_t emc_pmacro_ob_ddll_long_dq_rank1_5;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_0;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_1;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_2;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_3;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_4;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_5;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_0;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_1;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_2;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_3;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_4;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_5;
- uint32_t emc_pmacro_ddll_long_cmd_0;
- uint32_t emc_pmacro_ddll_long_cmd_1;
- uint32_t emc_pmacro_ddll_long_cmd_2;
- uint32_t emc_pmacro_ddll_long_cmd_3;
- uint32_t emc_pmacro_ddll_long_cmd_4;
- uint32_t emc_pmacro_ddll_short_cmd_0;
- uint32_t emc_pmacro_ddll_short_cmd_1;
- uint32_t emc_pmacro_ddll_short_cmd_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte0_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte1_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte2_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte3_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte4_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte5_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte6_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte7_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd0_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd1_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd2_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd3_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte0_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte1_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte2_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte3_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte4_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte5_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte6_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte7_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd0_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd0_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd0_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd0_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd1_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd1_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd1_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd1_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd2_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd2_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd2_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd2_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd3_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd3_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd3_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd3_3;
- uint32_t emc_txdsrvttgen;
- uint32_t emc_fdpd_ctrl_dq;
- uint32_t emc_fdpd_ctrl_cmd;
- uint32_t emc_fbio_spare;
- uint32_t emc_zcal_interval;
- uint32_t emc_zcal_wait_cnt;
- uint32_t emc_mrs_wait_cnt;
- uint32_t emc_mrs_wait_cnt2;
- uint32_t emc_auto_cal_channel;
- uint32_t emc_dll_cfg_0;
- uint32_t emc_dll_cfg_1;
- uint32_t emc_pmacro_autocal_cfg_common;
- uint32_t emc_pmacro_zctrl;
- uint32_t emc_cfg;
- uint32_t emc_cfg_pipe;
- uint32_t emc_dyn_self_ref_control;
- uint32_t emc_qpop;
- uint32_t emc_dqs_brlshft_0;
- uint32_t emc_dqs_brlshft_1;
- uint32_t emc_cmd_brlshft_2;
- uint32_t emc_cmd_brlshft_3;
- uint32_t emc_pmacro_pad_cfg_ctrl;
- uint32_t emc_pmacro_data_pad_rx_ctrl;
- uint32_t emc_pmacro_cmd_pad_rx_ctrl;
- uint32_t emc_pmacro_data_rx_term_mode;
- uint32_t emc_pmacro_cmd_rx_term_mode;
- uint32_t emc_pmacro_cmd_pad_tx_ctrl;
- uint32_t emc_pmacro_data_pad_tx_ctrl;
- uint32_t emc_pmacro_common_pad_tx_ctrl;
- uint32_t emc_pmacro_vttgen_ctrl_0;
- uint32_t emc_pmacro_vttgen_ctrl_1;
- uint32_t emc_pmacro_vttgen_ctrl_2;
- uint32_t emc_pmacro_brick_ctrl_rfu1;
- uint32_t emc_pmacro_cmd_brick_ctrl_fdpd;
- uint32_t emc_pmacro_brick_ctrl_rfu2;
- uint32_t emc_pmacro_data_brick_ctrl_fdpd;
- uint32_t emc_pmacro_bg_bias_ctrl_0;
- uint32_t emc_cfg_3;
- uint32_t emc_pmacro_tx_pwrd_0;
- uint32_t emc_pmacro_tx_pwrd_1;
- uint32_t emc_pmacro_tx_pwrd_2;
- uint32_t emc_pmacro_tx_pwrd_3;
- uint32_t emc_pmacro_tx_pwrd_4;
- uint32_t emc_pmacro_tx_pwrd_5;
- uint32_t emc_config_sample_delay;
- uint32_t emc_pmacro_tx_sel_clk_src_0;
- uint32_t emc_pmacro_tx_sel_clk_src_1;
- uint32_t emc_pmacro_tx_sel_clk_src_2;
- uint32_t emc_pmacro_tx_sel_clk_src_3;
- uint32_t emc_pmacro_tx_sel_clk_src_4;
- uint32_t emc_pmacro_tx_sel_clk_src_5;
- uint32_t emc_pmacro_ddll_bypass;
- uint32_t emc_pmacro_ddll_pwrd_0;
- uint32_t emc_pmacro_ddll_pwrd_1;
- uint32_t emc_pmacro_ddll_pwrd_2;
- uint32_t emc_pmacro_cmd_ctrl_0;
- uint32_t emc_pmacro_cmd_ctrl_1;
- uint32_t emc_pmacro_cmd_ctrl_2;
- uint32_t emc_tr_timing_0;
- uint32_t emc_tr_dvfs;
- uint32_t emc_tr_ctrl_1;
- uint32_t emc_tr_rdv;
- uint32_t emc_tr_qpop;
- uint32_t emc_tr_rdv_mask;
- uint32_t emc_mrw14;
- uint32_t emc_tr_qsafe;
- uint32_t emc_tr_qrst;
- uint32_t emc_training_ctrl;
- uint32_t emc_training_settle;
- uint32_t emc_training_vref_settle;
- uint32_t emc_training_ca_fine_ctrl;
- uint32_t emc_training_ca_ctrl_misc;
- uint32_t emc_training_ca_ctrl_misc1;
- uint32_t emc_training_ca_vref_ctrl;
- uint32_t emc_training_quse_cors_ctrl;
- uint32_t emc_training_quse_fine_ctrl;
- uint32_t emc_training_quse_ctrl_misc;
- uint32_t emc_training_quse_vref_ctrl;
- uint32_t emc_training_read_fine_ctrl;
- uint32_t emc_training_read_ctrl_misc;
- uint32_t emc_training_read_vref_ctrl;
- uint32_t emc_training_write_fine_ctrl;
- uint32_t emc_training_write_ctrl_misc;
- uint32_t emc_training_write_vref_ctrl;
- uint32_t emc_training_mpc;
- uint32_t emc_mrw15;
- }
- shadow_regs_ca_train;
-
- struct {
- uint32_t emc_rc;
- uint32_t emc_rfc;
- uint32_t emc_rfcpb;
- uint32_t emc_refctrl2;
- uint32_t emc_rfc_slr;
- uint32_t emc_ras;
- uint32_t emc_rp;
- uint32_t emc_r2w;
- uint32_t emc_w2r;
- uint32_t emc_r2p;
- uint32_t emc_w2p;
- uint32_t emc_r2r;
- uint32_t emc_tppd;
- uint32_t emc_ccdmw;
- uint32_t emc_rd_rcd;
- uint32_t emc_wr_rcd;
- uint32_t emc_rrd;
- uint32_t emc_rext;
- uint32_t emc_wext;
- uint32_t emc_wdv_chk;
- uint32_t emc_wdv;
- uint32_t emc_wsv;
- uint32_t emc_wev;
- uint32_t emc_wdv_mask;
- uint32_t emc_ws_duration;
- uint32_t emc_we_duration;
- uint32_t emc_quse;
- uint32_t emc_quse_width;
- uint32_t emc_ibdly;
- uint32_t emc_obdly;
- uint32_t emc_einput;
- uint32_t emc_mrw6;
- uint32_t emc_einput_duration;
- uint32_t emc_puterm_extra;
- uint32_t emc_puterm_width;
- uint32_t emc_qrst;
- uint32_t emc_qsafe;
- uint32_t emc_rdv;
- uint32_t emc_rdv_mask;
- uint32_t emc_rdv_early;
- uint32_t emc_rdv_early_mask;
- uint32_t emc_refresh;
- uint32_t emc_burst_refresh_num;
- uint32_t emc_pre_refresh_req_cnt;
- uint32_t emc_pdex2wr;
- uint32_t emc_pdex2rd;
- uint32_t emc_pchg2pden;
- uint32_t emc_act2pden;
- uint32_t emc_ar2pden;
- uint32_t emc_rw2pden;
- uint32_t emc_cke2pden;
- uint32_t emc_pdex2cke;
- uint32_t emc_pdex2mrr;
- uint32_t emc_txsr;
- uint32_t emc_txsrdll;
- uint32_t emc_tcke;
- uint32_t emc_tckesr;
- uint32_t emc_tpd;
- uint32_t emc_tfaw;
- uint32_t emc_trpab;
- uint32_t emc_tclkstable;
- uint32_t emc_tclkstop;
- uint32_t emc_mrw7;
- uint32_t emc_trefbw;
- uint32_t emc_odt_write;
- uint32_t emc_fbio_cfg5;
- uint32_t emc_fbio_cfg7;
- uint32_t emc_cfg_dig_dll;
- uint32_t emc_cfg_dig_dll_period;
- uint32_t emc_pmacro_ib_rxrt;
- uint32_t emc_cfg_pipe_1;
- uint32_t emc_cfg_pipe_2;
- uint32_t emc_pmacro_quse_ddll_rank0_4;
- uint32_t emc_pmacro_quse_ddll_rank0_5;
- uint32_t emc_pmacro_quse_ddll_rank1_4;
- uint32_t emc_pmacro_quse_ddll_rank1_5;
- uint32_t emc_mrw8;
- uint32_t emc_pmacro_ob_ddll_long_dq_rank1_4;
- uint32_t emc_pmacro_ob_ddll_long_dq_rank1_5;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_0;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_1;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_2;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_3;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_4;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_5;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_0;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_1;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_2;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_3;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_4;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_5;
- uint32_t emc_pmacro_ddll_long_cmd_0;
- uint32_t emc_pmacro_ddll_long_cmd_1;
- uint32_t emc_pmacro_ddll_long_cmd_2;
- uint32_t emc_pmacro_ddll_long_cmd_3;
- uint32_t emc_pmacro_ddll_long_cmd_4;
- uint32_t emc_pmacro_ddll_short_cmd_0;
- uint32_t emc_pmacro_ddll_short_cmd_1;
- uint32_t emc_pmacro_ddll_short_cmd_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte0_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte1_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte2_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte3_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte4_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte5_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte6_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte7_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd0_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd1_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd2_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd3_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte0_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte1_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte2_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte3_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte4_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte5_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte6_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte7_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd0_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd0_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd0_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd0_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd1_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd1_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd1_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd1_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd2_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd2_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd2_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd2_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd3_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd3_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd3_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd3_3;
- uint32_t emc_txdsrvttgen;
- uint32_t emc_fdpd_ctrl_dq;
- uint32_t emc_fdpd_ctrl_cmd;
- uint32_t emc_fbio_spare;
- uint32_t emc_zcal_interval;
- uint32_t emc_zcal_wait_cnt;
- uint32_t emc_mrs_wait_cnt;
- uint32_t emc_mrs_wait_cnt2;
- uint32_t emc_auto_cal_channel;
- uint32_t emc_dll_cfg_0;
- uint32_t emc_dll_cfg_1;
- uint32_t emc_pmacro_autocal_cfg_common;
- uint32_t emc_pmacro_zctrl;
- uint32_t emc_cfg;
- uint32_t emc_cfg_pipe;
- uint32_t emc_dyn_self_ref_control;
- uint32_t emc_qpop;
- uint32_t emc_dqs_brlshft_0;
- uint32_t emc_dqs_brlshft_1;
- uint32_t emc_cmd_brlshft_2;
- uint32_t emc_cmd_brlshft_3;
- uint32_t emc_pmacro_pad_cfg_ctrl;
- uint32_t emc_pmacro_data_pad_rx_ctrl;
- uint32_t emc_pmacro_cmd_pad_rx_ctrl;
- uint32_t emc_pmacro_data_rx_term_mode;
- uint32_t emc_pmacro_cmd_rx_term_mode;
- uint32_t emc_pmacro_cmd_pad_tx_ctrl;
- uint32_t emc_pmacro_data_pad_tx_ctrl;
- uint32_t emc_pmacro_common_pad_tx_ctrl;
- uint32_t emc_pmacro_vttgen_ctrl_0;
- uint32_t emc_pmacro_vttgen_ctrl_1;
- uint32_t emc_pmacro_vttgen_ctrl_2;
- uint32_t emc_pmacro_brick_ctrl_rfu1;
- uint32_t emc_pmacro_cmd_brick_ctrl_fdpd;
- uint32_t emc_pmacro_brick_ctrl_rfu2;
- uint32_t emc_pmacro_data_brick_ctrl_fdpd;
- uint32_t emc_pmacro_bg_bias_ctrl_0;
- uint32_t emc_cfg_3;
- uint32_t emc_pmacro_tx_pwrd_0;
- uint32_t emc_pmacro_tx_pwrd_1;
- uint32_t emc_pmacro_tx_pwrd_2;
- uint32_t emc_pmacro_tx_pwrd_3;
- uint32_t emc_pmacro_tx_pwrd_4;
- uint32_t emc_pmacro_tx_pwrd_5;
- uint32_t emc_config_sample_delay;
- uint32_t emc_pmacro_tx_sel_clk_src_0;
- uint32_t emc_pmacro_tx_sel_clk_src_1;
- uint32_t emc_pmacro_tx_sel_clk_src_2;
- uint32_t emc_pmacro_tx_sel_clk_src_3;
- uint32_t emc_pmacro_tx_sel_clk_src_4;
- uint32_t emc_pmacro_tx_sel_clk_src_5;
- uint32_t emc_pmacro_ddll_bypass;
- uint32_t emc_pmacro_ddll_pwrd_0;
- uint32_t emc_pmacro_ddll_pwrd_1;
- uint32_t emc_pmacro_ddll_pwrd_2;
- uint32_t emc_pmacro_cmd_ctrl_0;
- uint32_t emc_pmacro_cmd_ctrl_1;
- uint32_t emc_pmacro_cmd_ctrl_2;
- uint32_t emc_tr_timing_0;
- uint32_t emc_tr_dvfs;
- uint32_t emc_tr_ctrl_1;
- uint32_t emc_tr_rdv;
- uint32_t emc_tr_qpop;
- uint32_t emc_tr_rdv_mask;
- uint32_t emc_mrw14;
- uint32_t emc_tr_qsafe;
- uint32_t emc_tr_qrst;
- uint32_t emc_training_ctrl;
- uint32_t emc_training_settle;
- uint32_t emc_training_vref_settle;
- uint32_t emc_training_ca_fine_ctrl;
- uint32_t emc_training_ca_ctrl_misc;
- uint32_t emc_training_ca_ctrl_misc1;
- uint32_t emc_training_ca_vref_ctrl;
- uint32_t emc_training_quse_cors_ctrl;
- uint32_t emc_training_quse_fine_ctrl;
- uint32_t emc_training_quse_ctrl_misc;
- uint32_t emc_training_quse_vref_ctrl;
- uint32_t emc_training_read_fine_ctrl;
- uint32_t emc_training_read_ctrl_misc;
- uint32_t emc_training_read_vref_ctrl;
- uint32_t emc_training_write_fine_ctrl;
- uint32_t emc_training_write_ctrl_misc;
- uint32_t emc_training_write_vref_ctrl;
- uint32_t emc_training_mpc;
- uint32_t emc_mrw15;
- }
- shadow_regs_quse_train;
-
- struct {
- uint32_t emc_rc;
- uint32_t emc_rfc;
- uint32_t emc_rfcpb;
- uint32_t emc_refctrl2;
- uint32_t emc_rfc_slr;
- uint32_t emc_ras;
- uint32_t emc_rp;
- uint32_t emc_r2w;
- uint32_t emc_w2r;
- uint32_t emc_r2p;
- uint32_t emc_w2p;
- uint32_t emc_r2r;
- uint32_t emc_tppd;
- uint32_t emc_ccdmw;
- uint32_t emc_rd_rcd;
- uint32_t emc_wr_rcd;
- uint32_t emc_rrd;
- uint32_t emc_rext;
- uint32_t emc_wext;
- uint32_t emc_wdv_chk;
- uint32_t emc_wdv;
- uint32_t emc_wsv;
- uint32_t emc_wev;
- uint32_t emc_wdv_mask;
- uint32_t emc_ws_duration;
- uint32_t emc_we_duration;
- uint32_t emc_quse;
- uint32_t emc_quse_width;
- uint32_t emc_ibdly;
- uint32_t emc_obdly;
- uint32_t emc_einput;
- uint32_t emc_mrw6;
- uint32_t emc_einput_duration;
- uint32_t emc_puterm_extra;
- uint32_t emc_puterm_width;
- uint32_t emc_qrst;
- uint32_t emc_qsafe;
- uint32_t emc_rdv;
- uint32_t emc_rdv_mask;
- uint32_t emc_rdv_early;
- uint32_t emc_rdv_early_mask;
- uint32_t emc_refresh;
- uint32_t emc_burst_refresh_num;
- uint32_t emc_pre_refresh_req_cnt;
- uint32_t emc_pdex2wr;
- uint32_t emc_pdex2rd;
- uint32_t emc_pchg2pden;
- uint32_t emc_act2pden;
- uint32_t emc_ar2pden;
- uint32_t emc_rw2pden;
- uint32_t emc_cke2pden;
- uint32_t emc_pdex2cke;
- uint32_t emc_pdex2mrr;
- uint32_t emc_txsr;
- uint32_t emc_txsrdll;
- uint32_t emc_tcke;
- uint32_t emc_tckesr;
- uint32_t emc_tpd;
- uint32_t emc_tfaw;
- uint32_t emc_trpab;
- uint32_t emc_tclkstable;
- uint32_t emc_tclkstop;
- uint32_t emc_mrw7;
- uint32_t emc_trefbw;
- uint32_t emc_odt_write;
- uint32_t emc_fbio_cfg5;
- uint32_t emc_fbio_cfg7;
- uint32_t emc_cfg_dig_dll;
- uint32_t emc_cfg_dig_dll_period;
- uint32_t emc_pmacro_ib_rxrt;
- uint32_t emc_cfg_pipe_1;
- uint32_t emc_cfg_pipe_2;
- uint32_t emc_pmacro_quse_ddll_rank0_4;
- uint32_t emc_pmacro_quse_ddll_rank0_5;
- uint32_t emc_pmacro_quse_ddll_rank1_4;
- uint32_t emc_pmacro_quse_ddll_rank1_5;
- uint32_t emc_mrw8;
- uint32_t emc_pmacro_ob_ddll_long_dq_rank1_4;
- uint32_t emc_pmacro_ob_ddll_long_dq_rank1_5;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_0;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_1;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_2;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_3;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_4;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_5;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_0;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_1;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_2;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_3;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_4;
- uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_5;
- uint32_t emc_pmacro_ddll_long_cmd_0;
- uint32_t emc_pmacro_ddll_long_cmd_1;
- uint32_t emc_pmacro_ddll_long_cmd_2;
- uint32_t emc_pmacro_ddll_long_cmd_3;
- uint32_t emc_pmacro_ddll_long_cmd_4;
- uint32_t emc_pmacro_ddll_short_cmd_0;
- uint32_t emc_pmacro_ddll_short_cmd_1;
- uint32_t emc_pmacro_ddll_short_cmd_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte0_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte1_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte2_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte3_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte4_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte5_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte6_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte7_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd0_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd1_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd2_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd3_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte0_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte1_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte2_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte3_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte4_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte5_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte6_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte7_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd0_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd0_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd0_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd0_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd1_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd1_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd1_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd1_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd2_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd2_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd2_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd2_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd3_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd3_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd3_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd3_3;
- uint32_t emc_txdsrvttgen;
- uint32_t emc_fdpd_ctrl_dq;
- uint32_t emc_fdpd_ctrl_cmd;
- uint32_t emc_fbio_spare;
- uint32_t emc_zcal_interval;
- uint32_t emc_zcal_wait_cnt;
- uint32_t emc_mrs_wait_cnt;
- uint32_t emc_mrs_wait_cnt2;
- uint32_t emc_auto_cal_channel;
- uint32_t emc_dll_cfg_0;
- uint32_t emc_dll_cfg_1;
- uint32_t emc_pmacro_autocal_cfg_common;
- uint32_t emc_pmacro_zctrl;
- uint32_t emc_cfg;
- uint32_t emc_cfg_pipe;
- uint32_t emc_dyn_self_ref_control;
- uint32_t emc_qpop;
- uint32_t emc_dqs_brlshft_0;
- uint32_t emc_dqs_brlshft_1;
- uint32_t emc_cmd_brlshft_2;
- uint32_t emc_cmd_brlshft_3;
- uint32_t emc_pmacro_pad_cfg_ctrl;
- uint32_t emc_pmacro_data_pad_rx_ctrl;
- uint32_t emc_pmacro_cmd_pad_rx_ctrl;
- uint32_t emc_pmacro_data_rx_term_mode;
- uint32_t emc_pmacro_cmd_rx_term_mode;
- uint32_t emc_pmacro_cmd_pad_tx_ctrl;
- uint32_t emc_pmacro_data_pad_tx_ctrl;
- uint32_t emc_pmacro_common_pad_tx_ctrl;
- uint32_t emc_pmacro_vttgen_ctrl_0;
- uint32_t emc_pmacro_vttgen_ctrl_1;
- uint32_t emc_pmacro_vttgen_ctrl_2;
- uint32_t emc_pmacro_brick_ctrl_rfu1;
- uint32_t emc_pmacro_cmd_brick_ctrl_fdpd;
- uint32_t emc_pmacro_brick_ctrl_rfu2;
- uint32_t emc_pmacro_data_brick_ctrl_fdpd;
- uint32_t emc_pmacro_bg_bias_ctrl_0;
- uint32_t emc_cfg_3;
- uint32_t emc_pmacro_tx_pwrd_0;
- uint32_t emc_pmacro_tx_pwrd_1;
- uint32_t emc_pmacro_tx_pwrd_2;
- uint32_t emc_pmacro_tx_pwrd_3;
- uint32_t emc_pmacro_tx_pwrd_4;
- uint32_t emc_pmacro_tx_pwrd_5;
- uint32_t emc_config_sample_delay;
- uint32_t emc_pmacro_tx_sel_clk_src_0;
- uint32_t emc_pmacro_tx_sel_clk_src_1;
- uint32_t emc_pmacro_tx_sel_clk_src_2;
- uint32_t emc_pmacro_tx_sel_clk_src_3;
- uint32_t emc_pmacro_tx_sel_clk_src_4;
- uint32_t emc_pmacro_tx_sel_clk_src_5;
- uint32_t emc_pmacro_ddll_bypass;
- uint32_t emc_pmacro_ddll_pwrd_0;
- uint32_t emc_pmacro_ddll_pwrd_1;
- uint32_t emc_pmacro_ddll_pwrd_2;
- uint32_t emc_pmacro_cmd_ctrl_0;
- uint32_t emc_pmacro_cmd_ctrl_1;
- uint32_t emc_pmacro_cmd_ctrl_2;
- uint32_t emc_tr_timing_0;
- uint32_t emc_tr_dvfs;
- uint32_t emc_tr_ctrl_1;
- uint32_t emc_tr_rdv;
- uint32_t emc_tr_qpop;
- uint32_t emc_tr_rdv_mask;
- uint32_t emc_mrw14;
- uint32_t emc_tr_qsafe;
- uint32_t emc_tr_qrst;
- uint32_t emc_training_ctrl;
- uint32_t emc_training_settle;
- uint32_t emc_training_vref_settle;
- uint32_t emc_training_ca_fine_ctrl;
- uint32_t emc_training_ca_ctrl_misc;
- uint32_t emc_training_ca_ctrl_misc1;
- uint32_t emc_training_ca_vref_ctrl;
- uint32_t emc_training_quse_cors_ctrl;
- uint32_t emc_training_quse_fine_ctrl;
- uint32_t emc_training_quse_ctrl_misc;
- uint32_t emc_training_quse_vref_ctrl;
- uint32_t emc_training_read_fine_ctrl;
- uint32_t emc_training_read_ctrl_misc;
- uint32_t emc_training_read_vref_ctrl;
- uint32_t emc_training_write_fine_ctrl;
- uint32_t emc_training_write_ctrl_misc;
- uint32_t emc_training_write_vref_ctrl;
- uint32_t emc_training_mpc;
- uint32_t emc_mrw15;
- }
- shadow_regs_rdwr_train;
-
- struct {
- uint32_t emc_pmacro_ib_ddll_long_dqs_rank0_0;
- uint32_t emc_pmacro_ib_ddll_long_dqs_rank0_1;
- uint32_t emc_pmacro_ib_ddll_long_dqs_rank0_2;
- uint32_t emc_pmacro_ib_ddll_long_dqs_rank0_3;
- uint32_t emc_pmacro_ib_ddll_long_dqs_rank1_0;
- uint32_t emc_pmacro_ib_ddll_long_dqs_rank1_1;
- uint32_t emc_pmacro_ib_ddll_long_dqs_rank1_2;
- uint32_t emc_pmacro_ib_ddll_long_dqs_rank1_3;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte0_0;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte0_1;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte0_2;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte1_0;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte1_1;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte1_2;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte2_0;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte2_1;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte2_2;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte3_0;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte3_1;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte3_2;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte4_0;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte4_1;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte4_2;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte5_0;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte5_1;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte5_2;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte6_0;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte6_1;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte6_2;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte7_0;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte7_1;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte7_2;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte0_0;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte0_1;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte0_2;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte1_0;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte1_1;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte1_2;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte2_0;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte2_1;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte2_2;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte3_0;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte3_1;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte3_2;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte4_0;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte4_1;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte4_2;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte5_0;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte5_1;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte5_2;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte6_0;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte6_1;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte6_2;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte7_0;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte7_1;
- uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte7_2;
- uint32_t emc_pmacro_ib_vref_dqs_0;
- uint32_t emc_pmacro_ib_vref_dqs_1;
- uint32_t emc_pmacro_ib_vref_dq_0;
- uint32_t emc_pmacro_ib_vref_dq_1;
- uint32_t emc_pmacro_ob_ddll_long_dq_rank0_0;
- uint32_t emc_pmacro_ob_ddll_long_dq_rank0_1;
- uint32_t emc_pmacro_ob_ddll_long_dq_rank0_2;
- uint32_t emc_pmacro_ob_ddll_long_dq_rank0_3;
- uint32_t emc_pmacro_ob_ddll_long_dq_rank0_4;
- uint32_t emc_pmacro_ob_ddll_long_dq_rank0_5;
- uint32_t emc_pmacro_ob_ddll_long_dq_rank1_0;
- uint32_t emc_pmacro_ob_ddll_long_dq_rank1_1;
- uint32_t emc_pmacro_ob_ddll_long_dq_rank1_2;
- uint32_t emc_pmacro_ob_ddll_long_dq_rank1_3;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte0_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte0_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte0_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte1_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte1_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte1_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte2_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte2_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte2_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte3_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte3_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte3_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte4_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte4_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte4_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte5_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte5_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte5_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte6_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte6_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte6_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte7_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte7_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte7_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd0_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd0_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd0_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd1_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd1_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd1_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd2_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd2_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd2_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd3_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd3_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd3_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte0_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte0_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte0_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte1_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte1_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte1_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte2_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte2_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte2_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte3_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte3_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte3_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte4_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte4_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte4_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte5_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte5_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte5_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte6_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte6_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte6_2;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte7_0;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte7_1;
- uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte7_2;
- uint32_t emc_pmacro_quse_ddll_rank0_0;
- uint32_t emc_pmacro_quse_ddll_rank0_1;
- uint32_t emc_pmacro_quse_ddll_rank0_2;
- uint32_t emc_pmacro_quse_ddll_rank0_3;
- uint32_t emc_pmacro_quse_ddll_rank1_0;
- uint32_t emc_pmacro_quse_ddll_rank1_1;
- uint32_t emc_pmacro_quse_ddll_rank1_2;
- uint32_t emc_pmacro_quse_ddll_rank1_3;
- }
- trim_regs;
-
- struct {
- uint32_t emc0_cmd_brlshft_0;
- uint32_t emc1_cmd_brlshft_1;
- uint32_t emc0_data_brlshft_0;
- uint32_t emc1_data_brlshft_0;
- uint32_t emc0_data_brlshft_1;
- uint32_t emc1_data_brlshft_1;
- uint32_t emc0_quse_brlshft_0;
- uint32_t emc1_quse_brlshft_1;
- uint32_t emc0_quse_brlshft_2;
- uint32_t emc1_quse_brlshft_3;
- }
- trim_perch_regs;
-
- struct {
- uint32_t emc0_training_opt_dqs_ib_vref_rank0;
- uint32_t emc1_training_opt_dqs_ib_vref_rank0;
- uint32_t emc0_training_opt_dqs_ib_vref_rank1;
- uint32_t emc1_training_opt_dqs_ib_vref_rank1;
- }
- vref_perch_regs;
-
- struct {
- uint32_t t_rp;
- uint32_t t_fc_lpddr4;
- uint32_t t_rfc;
- uint32_t t_pdex;
- uint32_t rl;
- }
- dram_timings;
-
- struct {
- uint32_t emc0_training_rw_offset_ib_byte0;
- uint32_t emc1_training_rw_offset_ib_byte0;
- uint32_t emc0_training_rw_offset_ib_byte1;
- uint32_t emc1_training_rw_offset_ib_byte1;
- uint32_t emc0_training_rw_offset_ib_byte2;
- uint32_t emc1_training_rw_offset_ib_byte2;
- uint32_t emc0_training_rw_offset_ib_byte3;
- uint32_t emc1_training_rw_offset_ib_byte3;
- uint32_t emc0_training_rw_offset_ib_misc;
- uint32_t emc1_training_rw_offset_ib_misc;
- uint32_t emc0_training_rw_offset_ob_byte0;
- uint32_t emc1_training_rw_offset_ob_byte0;
- uint32_t emc0_training_rw_offset_ob_byte1;
- uint32_t emc1_training_rw_offset_ob_byte1;
- uint32_t emc0_training_rw_offset_ob_byte2;
- uint32_t emc1_training_rw_offset_ob_byte2;
- uint32_t emc0_training_rw_offset_ob_byte3;
- uint32_t emc1_training_rw_offset_ob_byte3;
- uint32_t emc0_training_rw_offset_ob_misc;
- uint32_t emc1_training_rw_offset_ob_misc;
- }
- training_mod_regs;
-
- uint32_t save_restore_mod_regs[12];
-
- struct {
- uint32_t mc_emem_arb_cfg;
- uint32_t mc_emem_arb_outstanding_req;
- uint32_t mc_emem_arb_refpb_hp_ctrl;
- uint32_t mc_emem_arb_refpb_bank_ctrl;
- uint32_t mc_emem_arb_timing_rcd;
- uint32_t mc_emem_arb_timing_rp;
- uint32_t mc_emem_arb_timing_rc;
- uint32_t mc_emem_arb_timing_ras;
- uint32_t mc_emem_arb_timing_faw;
- uint32_t mc_emem_arb_timing_rrd;
- uint32_t mc_emem_arb_timing_rap2pre;
- uint32_t mc_emem_arb_timing_wap2pre;
- uint32_t mc_emem_arb_timing_r2r;
- uint32_t mc_emem_arb_timing_w2w;
- uint32_t mc_emem_arb_timing_r2w;
- uint32_t mc_emem_arb_timing_ccdmw;
- uint32_t mc_emem_arb_timing_w2r;
- uint32_t mc_emem_arb_timing_rfcpb;
- uint32_t mc_emem_arb_da_turns;
- uint32_t mc_emem_arb_da_covers;
- uint32_t mc_emem_arb_misc0;
- uint32_t mc_emem_arb_misc1;
- uint32_t mc_emem_arb_misc2;
- uint32_t mc_emem_arb_ring1_throttle;
- uint32_t mc_emem_arb_dhyst_ctrl;
- uint32_t mc_emem_arb_dhyst_timeout_util_0;
- uint32_t mc_emem_arb_dhyst_timeout_util_1;
- uint32_t mc_emem_arb_dhyst_timeout_util_2;
- uint32_t mc_emem_arb_dhyst_timeout_util_3;
- uint32_t mc_emem_arb_dhyst_timeout_util_4;
- uint32_t mc_emem_arb_dhyst_timeout_util_5;
- uint32_t mc_emem_arb_dhyst_timeout_util_6;
- uint32_t mc_emem_arb_dhyst_timeout_util_7;
- }
- burst_mc_regs;
-
- struct {
- uint32_t mc_mll_mpcorer_ptsa_rate;
- uint32_t mc_ftop_ptsa_rate;
- uint32_t mc_ptsa_grant_decrement;
- uint32_t mc_latency_allowance_xusb_0;
- uint32_t mc_latency_allowance_xusb_1;
- uint32_t mc_latency_allowance_tsec_0;
- uint32_t mc_latency_allowance_sdmmca_0;
- uint32_t mc_latency_allowance_sdmmcaa_0;
- uint32_t mc_latency_allowance_sdmmc_0;
- uint32_t mc_latency_allowance_sdmmcab_0;
- uint32_t mc_latency_allowance_ppcs_0;
- uint32_t mc_latency_allowance_ppcs_1;
- uint32_t mc_latency_allowance_mpcore_0;
- uint32_t mc_latency_allowance_hc_0;
- uint32_t mc_latency_allowance_hc_1;
- uint32_t mc_latency_allowance_avpc_0;
- uint32_t mc_latency_allowance_gpu_0;
- uint32_t mc_latency_allowance_gpu2_0;
- uint32_t mc_latency_allowance_nvenc_0;
- uint32_t mc_latency_allowance_nvdec_0;
- uint32_t mc_latency_allowance_vic_0;
- uint32_t mc_latency_allowance_vi2_0;
- uint32_t mc_latency_allowance_isp2_0;
- uint32_t mc_latency_allowance_isp2_1;
- }
- la_scale_regs;
-
- uint32_t min_mrs_wait;
- uint32_t emc_mrw;
- uint32_t emc_mrw2;
- uint32_t emc_mrw3;
- uint32_t emc_mrw4;
- uint32_t emc_mrw9;
- uint32_t emc_mrs;
- uint32_t emc_emrs;
- uint32_t emc_emrs2;
- uint32_t emc_auto_cal_config;
- uint32_t emc_auto_cal_config2;
- uint32_t emc_auto_cal_config3;
- uint32_t emc_auto_cal_config4;
- uint32_t emc_auto_cal_config5;
- uint32_t emc_auto_cal_config6;
- uint32_t emc_auto_cal_config7;
- uint32_t emc_auto_cal_config8;
- uint32_t emc_cfg_2;
- uint32_t emc_sel_dpd_ctrl;
- uint32_t emc_fdpd_ctrl_cmd_no_ramp;
- uint32_t dll_clk_src;
- uint32_t clk_out_enb_x_0_clk_enb_emc_dll;
- uint32_t latency;
-};
-
-static_assert(sizeof(EristaMtcTable) == 0x1340);
diff --git a/Source/Atmosphere/stratosphere/loader/source/oc/Makefile b/Source/Atmosphere/stratosphere/loader/source/oc/Makefile
new file mode 100644
index 00000000..428a28a4
--- /dev/null
+++ b/Source/Atmosphere/stratosphere/loader/source/oc/Makefile
@@ -0,0 +1,9 @@
+export CC := g++-11
+
+all: test
+
+test:
+ $(CC) ldr_oc_suite.cpp test.cpp -o ./test -O2 -std=c++20 -DOC_TEST
+
+clean:
+ rm ./test
diff --git a/Source/Atmosphere/stratosphere/loader/source/oc/ldr_oc_customize.inc b/Source/Atmosphere/stratosphere/loader/source/oc/ldr_oc_customize.inc
new file mode 100644
index 00000000..e74e9acc
--- /dev/null
+++ b/Source/Atmosphere/stratosphere/loader/source/oc/ldr_oc_customize.inc
@@ -0,0 +1,67 @@
+namespace ams::ldr::oc {
+#include "mtc_empty_table.inc"
+static const volatile CustomizeTable C = {
+/* DRAM Timing:
+ * AUTO_ADJ_MARIKO_SAFE: Auto adjust timings for LPDDR4 ≤3733 Mbps specs, 8Gb density (Default).
+ * AUTO_ADJ_MARIKO_4266: Auto adjust timings for LPDDR4X 4266 Mbps specs, 8Gb density.
+ * ENTIRE_TABLE_ERISTA/ENTIRE_TABLE_MARIKO:
+ * Replace the entire max mtc table with customized one.
+ */
+.mtcConf = AUTO_ADJ_MARIKO_SAFE,
+
+/* Mariko CPU:
+ * - Max Clock in kHz:
+ * Default: 1785000
+ * >= 2193000 will enable overvolting (> 1120 mV)
+ * - Max Voltage in mV:
+ * Default voltage: 1120
+ * Haven't tested anything higher than 1220.
+ */
+.marikoCpuMaxClock = 2397000,
+.marikoCpuMaxVolt = 1220,
+
+/* Mariko GPU:
+ * - Max Clock in kHz:
+ * Default: 921600
+ * NVIDIA Maximum: 1267200
+ */
+.marikoGpuMaxClock = 1305600,
+
+/* Mariko EMC:
+ * - RAM Clock in kHz:
+ * Values should be > 1600000, and divided evenly by 9600 or 12800.
+ * [WARNING]
+ * RAM overclock could be UNSTABLE if timing parameters are not suitable for your DRAM:
+ * - Graphical glitches
+ * - System instabilities
+ * - NAND corruption
+ * Timings from auto-adjustment have been tested safe for up to 1996.8 MHz for all DRAM chips.
+ */
+.marikoEmcMaxClock = 1996800,
+
+/* Erista CPU:
+ * Untested and not enabled by default.
+ * - Enable Overclock
+ * Require modificaitions towards NewCpuTables!
+ * - Max Voltage in mV
+ */
+.eristaCpuOCEnable = 0,
+.eristaCpuMaxVolt = 0,
+
+/* Erista EMC:
+ * - RAM Clock in kHz
+ * [WARNING]
+ * RAM overclock could be UNSTABLE if timing parameters are not suitable for your DRAM:
+ * - Graphical glitches
+ * - System instabilities
+ * - NAND corruption
+ * - RAM Voltage in mV
+ * Default(HOS): 1125
+ * Not enabled by default.
+ */
+.eristaEmcMaxClock = 1862400,
+.eristaEmcVolt = 0,
+
+.eristaMtc = reinterpret_cast(const_cast(EmptyMtcTable)),
+};
+}
\ No newline at end of file
diff --git a/Source/Atmosphere/stratosphere/loader/source/ldr_oc_suite.cpp b/Source/Atmosphere/stratosphere/loader/source/oc/ldr_oc_suite.cpp
similarity index 91%
rename from Source/Atmosphere/stratosphere/loader/source/ldr_oc_suite.cpp
rename to Source/Atmosphere/stratosphere/loader/source/oc/ldr_oc_suite.cpp
index 6744397d..5b4f583f 100644
--- a/Source/Atmosphere/stratosphere/loader/source/ldr_oc_suite.cpp
+++ b/Source/Atmosphere/stratosphere/loader/source/oc/ldr_oc_suite.cpp
@@ -15,76 +15,18 @@
*/
//#define EXPERIMENTAL
+
+#ifdef OC_TEST
+#include "ldr_oc_suite_test.hpp"
+#else
#include
#include "ldr_oc_suite.hpp"
+#include "ldr_oc_customize.inc"
+#endif
namespace ams::ldr::oc {
- /* Allocate CustomizeTable in loader.kip (could be customized by user without recompiling) */
- static const volatile CustomizeTable C = {
- /* DRAM Timing:
- * AUTO_ADJ_MARIKO_SAFE: Auto adjust timings for LPDDR4 ≤3733 Mbps specs, 8Gb density (Default).
- * AUTO_ADJ_MARIKO_4266: Auto adjust timings for LPDDR4X 4266 Mbps specs, 8Gb density.
- * ENTIRE_TABLE_ERISTA/ENTIRE_TABLE_MARIKO:
- * Replace the entire max mtc table with customized one.
- */
- .mtcConf = AUTO_ADJ_MARIKO_SAFE,
-
- /* Mariko CPU:
- * - Max Clock in kHz:
- * Default: 1785000
- * >= 2193000 will enable overvolting (> 1120 mV)
- * - Max Voltage in mV:
- * Default voltage: 1120
- * Haven't tested anything higher than 1220.
- */
- .marikoCpuMaxClock = 2397000,
- .marikoCpuMaxVolt = 1220,
-
- /* Mariko GPU:
- * - Max Clock in kHz:
- * Default: 921600
- * NVIDIA Maximum: 1267200
- */
- .marikoGpuMaxClock = 1305600,
-
- /* Mariko EMC:
- * - RAM Clock in kHz:
- * Values should be > 1600000, and divided evenly by 9600 or 12800.
- * [WARNING]
- * RAM overclock could be UNSTABLE if timing parameters are not suitable for your DRAM:
- * - Graphical glitches
- * - System instabilities
- * - NAND corruption
- * Timings from auto-adjustment have been tested safe for up to 1996.8 MHz for all DRAM chips.
- */
- .marikoEmcMaxClock = 1996800,
-
- /* Erista CPU:
- * Untested and not enabled by default.
- * - Enable Overclock
- * Require modificaitions towards NewCpuTables!
- * - Max Voltage in mV
- */
- .eristaCpuOCEnable = 0,
- .eristaCpuMaxVolt = 0,
-
- /* Erista EMC:
- * - RAM Clock in kHz
- * [WARNING]
- * RAM overclock could be UNSTABLE if timing parameters are not suitable for your DRAM:
- * - Graphical glitches
- * - System instabilities
- * - NAND corruption
- * - RAM Voltage in mV
- * Default(HOS): 1125
- * Not enabled by default.
- */
- .eristaEmcMaxClock = 1862400,
- .eristaEmcVolt = 0,
- };
-
namespace pcv {
- static Result MemPllmLimitHandler(u32* ptr) {
+ Result MemPllmLimitHandler(u32* ptr) {
clk_pll_param* entry = reinterpret_cast(ptr);
if (entry->max_0 != entry->max_1)
return ResultFailure();
@@ -95,6 +37,25 @@ namespace ams::ldr::oc {
entry->max_1 = max_clk;
return ResultSuccess();
}
+
+ template
+ Result MtcOverwrite(M* des, M* src) {
+ constexpr u32 mtc_magic = 0x5F43544D;
+ if (src->rev != mtc_magic)
+ return ResultFailure();
+
+ // Ignore params from dvfs_ver to clock_src;
+ for (size_t offset = offsetof(M, clk_src_emc); offset < sizeof(M); offset += sizeof(u32)) {
+ u32* src_ent = reinterpret_cast(reinterpret_cast(src) + offset);
+ u32* des_ent = reinterpret_cast(reinterpret_cast(des) + offset);
+ u32 src_val = *src_ent;
+ if (src_val != UINT32_MAX) {
+ PatchOffset(des_ent, src_val);
+ }
+ }
+
+ return ResultSuccess();
+ }
}
namespace pcv::Mariko {
@@ -182,6 +143,7 @@ namespace ams::ldr::oc {
(gpuOfficialMarikoPattern[0] & 0xFFE00000) | ((C.marikoGpuMaxClock & 0xFFFF) << 5),
(gpuOfficialMarikoPattern[1] & 0xFFE00000) | (((C.marikoGpuMaxClock >> 16) & 0xFFFF) << 5)
};
+
#define COMPARE_HIGH(val1, val2, bit_div) (((val1 ^ val2) >> bit_div) == 0)
/* EMC */
@@ -197,7 +159,7 @@ namespace ams::ldr::oc {
// { 1600000, { 675, 650, 637, } },
// };
- static void MtcPllmbDivHandler(MarikoMtcTable* table) {
+ void MtcPllmbDivHandler(MarikoMtcTable* table) {
// Calculate DIVM and DIVN (clock divisors)
// Common PLL oscillator is 38.4 MHz
// PLLMB_OUT = 38.4 MHz / PLLLMB_DIVM * PLLMB_DIVN
@@ -226,7 +188,7 @@ namespace ams::ldr::oc {
table->pllmb_divn = divn;
}
- static void MtcTableAutoAdjust(MarikoMtcTable* table, const MarikoMtcTable* ref)
+ void MtcTableAutoAdjust(MarikoMtcTable* table, const MarikoMtcTable* ref)
{
/* Official Tegra X1 TRM, sign up for nvidia developer program (free) to download:
* https://developer.nvidia.com/embedded/dlc/tegra-x1-technical-reference-manual
@@ -713,7 +675,7 @@ namespace ams::ldr::oc {
#endif
}
- static Result CpuClockVddHandler(u32* ptr) {
+ Result CpuClockVddHandler(u32* ptr) {
if (C.marikoCpuMaxClock) {
u32 value_next2 = *(ptr + 2);
constexpr u32 cpuClockVddCpuPatternNext = 0;
@@ -725,7 +687,7 @@ namespace ams::ldr::oc {
return ResultSuccess();
}
- static Result CpuDvfsHandler(u32* ptr, uintptr_t nso_end_offset) {
+ Result CpuDvfsHandler(u32* ptr, uintptr_t nso_end_offset) {
cpu_freq_cvb_table_t* entry_1963 = reinterpret_cast(ptr);
cpu_freq_cvb_table_t* entry_free = entry_1963 + 1;
cpu_freq_cvb_table_t* entry_204 = entry_free - 18;
@@ -748,7 +710,7 @@ namespace ams::ldr::oc {
if (C.marikoCpuMaxVolt) {
while (entry_current->cvb_pll_param.c0 == CpuVoltOfficial * 1000) {
- PatchOffset(reinterpret_cast(std::addressof(entry_current->cvb_pll_param)), C.marikoCpuMaxVolt * 1000);
+ PatchOffset(reinterpret_cast(&(entry_current->cvb_pll_param)), C.marikoCpuMaxVolt * 1000);
entry_current--;
}
}
@@ -756,7 +718,7 @@ namespace ams::ldr::oc {
return ResultSuccess();
}
- static Result GpuDvfsHandler(u32* ptr, uintptr_t nso_end_offset) {
+ Result GpuDvfsHandler(u32* ptr, uintptr_t nso_end_offset) {
gpu_cvb_pll_table_t* entry_1267 = reinterpret_cast(ptr);
gpu_cvb_pll_table_t* entry_free = entry_1267 + 1;
gpu_cvb_pll_table_t* entry_76_8 = entry_free - 17;
@@ -774,7 +736,7 @@ namespace ams::ldr::oc {
return ResultSuccess();
}
- static Result CpuVoltRangeHandler(u32* ptr) {
+ Result CpuVoltRangeHandler(u32* ptr) {
if (!C.marikoCpuMaxVolt)
return ResultSuccess();
@@ -791,7 +753,7 @@ namespace ams::ldr::oc {
}
}
- static Result GpuMaxClockHandler(u32* ptr) {
+ Result GpuMaxClockHandler(u32* ptr) {
u32 value = *(ptr);
u32* ptr_next = ptr + 1;
u32 value_next = *(ptr_next);
@@ -810,7 +772,7 @@ namespace ams::ldr::oc {
return ResultFailure();
}
- static Result MtcTableHandler(u32* ptr) {
+ Result MtcTableHandler(u32* ptr) {
MarikoMtcTable* const mtc_table_max = reinterpret_cast(ptr - offsetof(MarikoMtcTable, rate_khz) / sizeof(u32));
MarikoMtcTable* const mtc_table_alt = mtc_table_max - 1;
constexpr u32 mtc_mariko_rev = 3;
@@ -819,12 +781,11 @@ namespace ams::ldr::oc {
|| mtc_table_alt->rate_khz != MemClkOSAlt )
return ResultFailure();
- MarikoMtcTable* const table = const_cast(std::addressof(C.marikoMtc));
+ MarikoMtcTable* const table = const_cast(C.marikoMtc);
bool replace_entire_table = (C.mtcConf == ENTIRE_TABLE_MARIKO);
if (replace_entire_table) {
std::memcpy(reinterpret_cast(mtc_table_alt), reinterpret_cast(mtc_table_max), sizeof(MarikoMtcTable));
- std::memcpy(reinterpret_cast(mtc_table_max), reinterpret_cast(table), sizeof(MarikoMtcTable));
- return ResultSuccess();
+ return MtcOverwrite(mtc_table_max, table);
}
std::memcpy(reinterpret_cast(table), reinterpret_cast(mtc_table_max), sizeof(MarikoMtcTable));
@@ -834,7 +795,7 @@ namespace ams::ldr::oc {
return ResultSuccess();
}
- static Result DvbTableHandler(u32* ptr) {
+ Result DvbTableHandler(u32* ptr) {
emc_dvb_dvfs_table_t* dvb_max_entry = reinterpret_cast(ptr);
emc_dvb_dvfs_table_t* dvb_1331_entry = dvb_max_entry - 1;
@@ -846,7 +807,7 @@ namespace ams::ldr::oc {
return ResultSuccess();
}
- static Result MemMaxClockHandler(u32* ptr) {
+ Result MemMaxClockHandler(u32* ptr) {
u32 value_next = *(ptr + 1);
u32 value_next2 = *(ptr + 2);
@@ -867,7 +828,7 @@ namespace ams::ldr::oc {
return rc;
}
- static Result GpuPllLimitHandler(u32* ptr) {
+ Result GpuPllLimitHandler(u32* ptr) {
u32 value_next = *(ptr + 1);
if (value_next != 0)
return ResultFailure();
@@ -877,7 +838,7 @@ namespace ams::ldr::oc {
return ResultSuccess();
}
- static void Patch(uintptr_t mapped_nso, size_t nso_size) {
+ void Patch(uintptr_t mapped_nso, size_t nso_size) {
enum PatchSuccessCnt {
MEM_CLOCK,
CPU_CLOCK_VDD,
@@ -939,17 +900,33 @@ namespace ams::ldr::oc {
}
}
- if ( !cnt[MEM_CLOCK]
- || cnt[CPU_CLOCK_VDD] != 1
+ LOGGING("CpuClkOSLimit Count: %u\n"\
+ "CpuClkOfficial Count: %u\n"\
+ "GpuClkOfficial Count: %u\n"\
+ "CpuVoltOfficial Count: %u\n"\
+ "MemClkOSLimit Count: %u\n"\
+ "GpuClkPllLimit Count: %u\n"\
+ "MemClkPllmLimit Count: %u\n"\
+ "GpuAsmPattern Count: %u",
+ cnt[CPU_CLOCK_VDD],
+ cnt[CPU_TABLE],
+ cnt[GPU_TABLE],
+ cnt[CPU_MAX_VOLT],
+ cnt[MEM_CLOCK],
+ cnt[GPU_PLL_CLK],
+ cnt[MEM_PLL_CLK],
+ cnt[GPU_MAX_CLOCK]);
+
+ if ( cnt[CPU_CLOCK_VDD] != 1
|| cnt[CPU_TABLE] != 1
|| cnt[GPU_TABLE] != 1
- || cnt[CPU_MAX_VOLT] > 13 || !cnt[CPU_MAX_VOLT]
- || cnt[GPU_MAX_CLOCK] != 2
+ || cnt[CPU_MAX_VOLT] > 13 || !cnt[CPU_MAX_VOLT]
+ || cnt[MEM_CLOCK] == 0
|| cnt[GPU_PLL_CLK] != 1
- || cnt[MEM_PLL_CLK] != 2)
+ || cnt[MEM_PLL_CLK] != 2
+ || cnt[GPU_MAX_CLOCK] != 2)
{
- AMS_ABORT();
- __builtin_unreachable();
+ CRASH();
}
}
}
@@ -986,7 +963,7 @@ namespace ams::ldr::oc {
{ 2091000, {}, {} },
};
- static Result CpuDvfsHandler(u32* ptr, uintptr_t nso_end_offset) {
+ Result CpuDvfsHandler(u32* ptr, uintptr_t nso_end_offset) {
if (!C.eristaCpuOCEnable)
return ResultSuccess();
@@ -1007,7 +984,7 @@ namespace ams::ldr::oc {
return ResultSuccess();
}
- static Result CpuVoltRangeHandler(u32* ptr) {
+ Result CpuVoltRangeHandler(u32* ptr) {
if (!C.eristaCpuMaxVolt)
return ResultSuccess();
@@ -1020,22 +997,23 @@ namespace ams::ldr::oc {
PatchOffset(ptr, C.eristaCpuMaxVolt);
return ResultSuccess();
default:
+ LOGGING("Invalid min voltage: %u @%p!", *(ptr-1), ptr-1);
return ResultFailure();
}
}
- static Result MtcTableHandler(u32* ptr) {
+ Result MtcTableHandler(u32* ptr) {
bool replace_entire_table = (C.mtcConf == ENTIRE_TABLE_ERISTA);
if (replace_entire_table) {
EristaMtcTable* const mtc_table_max = reinterpret_cast(ptr - offsetof(EristaMtcTable, rate_khz) / sizeof(u32));
- EristaMtcTable* const table = const_cast(std::addressof(C.eristaMtc));
- std::memcpy(reinterpret_cast(mtc_table_max), reinterpret_cast(table), sizeof(EristaMtcTable));
+ EristaMtcTable* const table = const_cast(C.eristaMtc);
+ return MtcOverwrite(mtc_table_max, table);
}
return ResultSuccess();
}
- static Result MemMaxClockHandler(u32* ptr) {
+ Result MemMaxClockHandler(u32* ptr) {
u32 value_next = *(ptr + 1);
constexpr u32 mtc_min_volt = 887;
@@ -1048,14 +1026,14 @@ namespace ams::ldr::oc {
return rc;
}
- static Result MemVoltHandler(u32* ptr) {
+ Result MemVoltHandler(u32* ptr) {
if (C.eristaEmcVolt)
PatchOffset(ptr, C.eristaEmcVolt);
return ResultSuccess();
}
- static void Patch(uintptr_t mapped_nso, size_t nso_size) {
+ void Patch(uintptr_t mapped_nso, size_t nso_size) {
enum PatchSuccessCnt {
CPU_CLOCK,
CPU_MAX_VOLT,
@@ -1102,9 +1080,24 @@ namespace ams::ldr::oc {
}
}
- if (!cnt[MEM_CLOCK] || cnt[MEM_VOLT] != 2 || cnt[MEM_PLL_CLK] != 2) {
- AMS_ABORT();
- __builtin_unreachable();
+ LOGGING("CpuClkOSLimit Count: %u\n"\
+ "CpuVoltLimit* Count: %u\n"\
+ "MemClkOSLimit Count: %u\n"\
+ "MemVoltHOS Count: %u\n"\
+ "MemClkPllmLimit Count: %u",
+ cnt[CPU_CLOCK],
+ cnt[CPU_MAX_VOLT],
+ cnt[MEM_CLOCK],
+ cnt[MEM_VOLT],
+ cnt[MEM_PLL_CLK]);
+
+ if ( cnt[CPU_CLOCK] != 1
+ || cnt[CPU_MAX_VOLT] < 2
+ || cnt[MEM_CLOCK] == 0
+ || cnt[MEM_VOLT] != 2
+ || cnt[MEM_PLL_CLK] != 2)
+ {
+ CRASH();
}
}
}
@@ -1112,24 +1105,34 @@ namespace ams::ldr::oc {
namespace pcv {
void Patch(uintptr_t mapped_nso, size_t nso_size) {
if (C.custRev != CUST_REV) {
- AMS_ABORT();
- __builtin_unreachable();
+ CRASH();
}
+ #ifdef OC_TEST
+ void* buf = malloc(nso_size);
+ uintptr_t mapped_exe = reinterpret_cast(buf);
+ std::memcpy(buf, reinterpret_cast(mapped_nso), nso_size);
+ Erista::Patch(mapped_exe, nso_size);
+ std::memcpy(buf, reinterpret_cast(mapped_nso), nso_size);
+ Mariko::Patch(mapped_exe, nso_size);
+ free(buf);
+ #else
bool isMariko = (spl::GetSocType() == spl::SocType_Mariko);
if (isMariko)
Mariko::Patch(mapped_nso, nso_size);
else
Erista::Patch(mapped_nso, nso_size);
+ #endif
}
}
namespace ptm {
void Patch(uintptr_t mapped_nso, size_t nso_size) {
- /* No abort here as ptm is not that critical */
+ #ifndef OC_TEST
bool isMariko = (spl::GetSocType() == spl::SocType_Mariko);
if (!isMariko)
return;
+ #endif
perf_conf_entry* confTable = 0;
constexpr u32 entryCnt = 16;
@@ -1151,29 +1154,34 @@ namespace ams::ldr::oc {
}
}
- if (!confTable)
- return;
+ if (!confTable) {
+ LOGGING("confTable not found!");
+ CRASH();
+ }
for (u32 i = 0; i < entryCnt; i++)
{
perf_conf_entry* entry_current = confTable + i;
- if (entry_current->emc_freq_1 != entry_current->emc_freq_2)
- return;
+ if (entry_current->emc_freq_1 != entry_current->emc_freq_2) {
+ LOGGING("@%p: emc_freq_1(%u) != emc_freq_2(%u)", &(entry_current->emc_freq_1), entry_current->emc_freq_1, entry_current->emc_freq_2);
+ CRASH();
+ }
switch (entry_current->emc_freq_1)
{
case memPtmLimit:
- PatchOffset(std::addressof(entry_current->emc_freq_1), memPtmMax);
- PatchOffset(std::addressof(entry_current->emc_freq_2), memPtmMax);
+ PatchOffset(&(entry_current->emc_freq_1), memPtmMax);
+ PatchOffset(&(entry_current->emc_freq_2), memPtmMax);
break;
case memPtmAlt:
case memPtmClamp:
- PatchOffset(std::addressof(entry_current->emc_freq_1), memPtmLimit);
- PatchOffset(std::addressof(entry_current->emc_freq_2), memPtmLimit);
+ PatchOffset(&(entry_current->emc_freq_1), memPtmLimit);
+ PatchOffset(&(entry_current->emc_freq_2), memPtmLimit);
break;
default:
- return;
+ LOGGING("Wrong mem freq: %u @%p!", entry_current->emc_freq_1, &(entry_current->emc_freq_1));
+ CRASH();
}
}
}
diff --git a/Source/Atmosphere/stratosphere/loader/source/ldr_oc_suite.hpp b/Source/Atmosphere/stratosphere/loader/source/oc/ldr_oc_suite.hpp
similarity index 91%
rename from Source/Atmosphere/stratosphere/loader/source/ldr_oc_suite.hpp
rename to Source/Atmosphere/stratosphere/loader/source/oc/ldr_oc_suite.hpp
index 2ee6f0aa..ba87354f 100644
--- a/Source/Atmosphere/stratosphere/loader/source/ldr_oc_suite.hpp
+++ b/Source/Atmosphere/stratosphere/loader/source/oc/ldr_oc_suite.hpp
@@ -13,12 +13,12 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
+#pragma once
#define CUST_REV 1
+#include "mtc_timing_table.hpp"
namespace ams::ldr::oc {
- #include "mtc_timing_table.hpp"
-
enum MtcConfig {
AUTO_ADJ_MARIKO_SAFE = 0,
AUTO_ADJ_MARIKO_4266 = 1,
@@ -39,8 +39,8 @@ namespace ams::ldr::oc {
u32 eristaEmcMaxClock;
u32 eristaEmcVolt;
union {
- EristaMtcTable eristaMtc;
- MarikoMtcTable marikoMtc;
+ EristaMtcTable* eristaMtc;
+ MarikoMtcTable* marikoMtc;
};
} CustomizeTable;
@@ -48,6 +48,12 @@ namespace ams::ldr::oc {
inline Result ResultFailure() { return -1; }
+ #ifndef OC_TEST
+ #define LOGGING(fmt, ...) ((void)0)
+ #endif
+
+ #define CRASH() { AMS_ABORT(); __builtin_unreachable(); }
+
namespace pcv {
typedef struct {
s32 c0 = 0;
diff --git a/Source/Atmosphere/stratosphere/loader/source/oc/ldr_oc_suite_test.hpp b/Source/Atmosphere/stratosphere/loader/source/oc/ldr_oc_suite_test.hpp
new file mode 100644
index 00000000..3a334652
--- /dev/null
+++ b/Source/Atmosphere/stratosphere/loader/source/oc/ldr_oc_suite_test.hpp
@@ -0,0 +1,37 @@
+#ifdef OC_TEST
+#include
+#include
+#include
+#include
+
+typedef uint8_t u8;
+typedef uint16_t u16;
+typedef uint32_t u32;
+typedef int32_t s32;
+typedef uint64_t u64;
+typedef int Result;
+
+#define R_SUCCEEDED(arg) (arg == ResultSuccess())
+#define LOGGING(fmt, ...) { printf(fmt "\n\tin %s\n", ##__VA_ARGS__, __PRETTY_FUNCTION__); }
+#define AMS_ABORT() { fprintf(stderr, "Failed!\n"); exit(-1); }
+
+inline Result ResultSuccess() { return 0; }
+
+#include "ldr_oc_suite.hpp"
+
+namespace ams::ldr::oc {
+ volatile u8 EmptyMtcTable[0x1340] = { 'M', 'T', 'C', '_', };
+ static const volatile CustomizeTable C = {
+ .mtcConf = AUTO_ADJ_MARIKO_SAFE,
+ .marikoCpuMaxClock = 2397000,
+ .marikoCpuMaxVolt = 1220,
+ .marikoGpuMaxClock = 1305600,
+ .marikoEmcMaxClock = 1996800,
+ .eristaCpuOCEnable = 1,
+ .eristaCpuMaxVolt = 1300,
+ .eristaEmcMaxClock = 1862400,
+ .eristaEmcVolt = 1250,
+ .eristaMtc = reinterpret_cast(const_cast(EmptyMtcTable)),
+ };
+}
+#endif
\ No newline at end of file
diff --git a/Source/Atmosphere/stratosphere/loader/source/oc/mtc_empty_table.inc b/Source/Atmosphere/stratosphere/loader/source/oc/mtc_empty_table.inc
new file mode 100644
index 00000000..47f069f5
--- /dev/null
+++ b/Source/Atmosphere/stratosphere/loader/source/oc/mtc_empty_table.inc
@@ -0,0 +1,310 @@
+volatile u8 EmptyMtcTable[0x1340] = {
+ 'M', 'T', 'C', '_', 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+};
diff --git a/Source/Atmosphere/stratosphere/loader/source/oc/mtc_timing_table.hpp b/Source/Atmosphere/stratosphere/loader/source/oc/mtc_timing_table.hpp
new file mode 100644
index 00000000..cc9a51dd
--- /dev/null
+++ b/Source/Atmosphere/stratosphere/loader/source/oc/mtc_timing_table.hpp
@@ -0,0 +1,1246 @@
+/*
+ * Copyright (c) Atmosphère-NX
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ * from GCC preprocessor output
+ */
+
+struct MarikoTiming {
+ uint32_t emc_rc;
+ uint32_t emc_rfc;
+ uint32_t emc_rfcpb;
+ uint32_t emc_refctrl2;
+ uint32_t emc_rfc_slr;
+ uint32_t emc_ras;
+ uint32_t emc_rp;
+ uint32_t emc_r2w;
+ uint32_t emc_w2r;
+ uint32_t emc_r2p;
+ uint32_t emc_w2p;
+ uint32_t emc_r2r;
+ uint32_t emc_tppd;
+ uint32_t emc_trtm;
+ uint32_t emc_twtm;
+ uint32_t emc_tratm;
+ uint32_t emc_twatm;
+ uint32_t emc_tr2ref;
+ uint32_t emc_ccdmw;
+ uint32_t emc_rd_rcd;
+ uint32_t emc_wr_rcd;
+ uint32_t emc_rrd;
+ uint32_t emc_rext;
+ uint32_t emc_wext;
+ uint32_t emc_wdv_chk;
+ uint32_t emc_wdv;
+ uint32_t emc_wsv;
+ uint32_t emc_wev;
+ uint32_t emc_wdv_mask;
+ uint32_t emc_ws_duration;
+ uint32_t emc_we_duration;
+ uint32_t emc_quse;
+ uint32_t emc_quse_width;
+ uint32_t emc_ibdly;
+ uint32_t emc_obdly;
+ uint32_t emc_einput;
+ uint32_t emc_mrw6;
+ uint32_t emc_einput_duration;
+ uint32_t emc_puterm_extra;
+ uint32_t emc_puterm_width;
+ uint32_t emc_qrst;
+ uint32_t emc_qsafe;
+ uint32_t emc_rdv;
+ uint32_t emc_rdv_mask;
+ uint32_t emc_rdv_early;
+ uint32_t emc_rdv_early_mask;
+ uint32_t emc_refresh;
+ uint32_t emc_burst_refresh_num;
+ uint32_t emc_pre_refresh_req_cnt;
+ uint32_t emc_pdex2wr;
+ uint32_t emc_pdex2rd;
+ uint32_t emc_pchg2pden;
+ uint32_t emc_act2pden;
+ uint32_t emc_ar2pden;
+ uint32_t emc_rw2pden;
+ uint32_t emc_cke2pden;
+ uint32_t emc_pdex2cke;
+ uint32_t emc_pdex2mrr;
+ uint32_t emc_txsr;
+ uint32_t emc_txsrdll;
+ uint32_t emc_tcke;
+ uint32_t emc_tckesr;
+ uint32_t emc_tpd;
+ uint32_t emc_tfaw;
+ uint32_t emc_trpab;
+ uint32_t emc_tclkstable;
+ uint32_t emc_tclkstop;
+ uint32_t emc_mrw7;
+ uint32_t emc_trefbw;
+ uint32_t emc_odt_write;
+ uint32_t emc_fbio_cfg5;
+ uint32_t emc_fbio_cfg7;
+ uint32_t emc_cfg_dig_dll;
+ uint32_t emc_cfg_dig_dll_period;
+ uint32_t emc_pmacro_ib_rxrt;
+ uint32_t emc_cfg_pipe_1;
+ uint32_t emc_cfg_pipe_2;
+ uint32_t emc_pmacro_quse_ddll_rank0_4;
+ uint32_t emc_pmacro_quse_ddll_rank0_5;
+ uint32_t emc_pmacro_quse_ddll_rank1_4;
+ uint32_t emc_pmacro_quse_ddll_rank1_5;
+ uint32_t emc_mrw8;
+ uint32_t emc_pmacro_ob_ddll_long_dq_rank1_4;
+ uint32_t emc_pmacro_ob_ddll_long_dq_rank1_5;
+ uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_0;
+ uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_1;
+ uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_2;
+ uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_3;
+ uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_4;
+ uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_5;
+ uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_0;
+ uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_1;
+ uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_2;
+ uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_3;
+ uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_4;
+ uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_5;
+ uint32_t emc_pmacro_ddll_long_cmd_0;
+ uint32_t emc_pmacro_ddll_long_cmd_1;
+ uint32_t emc_pmacro_ddll_long_cmd_2;
+ uint32_t emc_pmacro_ddll_long_cmd_3;
+ uint32_t emc_pmacro_ddll_long_cmd_4;
+ uint32_t emc_pmacro_ddll_short_cmd_0;
+ uint32_t emc_pmacro_ddll_short_cmd_1;
+ uint32_t emc_pmacro_ddll_short_cmd_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte0_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte1_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte2_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte3_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte4_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte5_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte6_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte7_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd0_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd1_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd2_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd3_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte0_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte1_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte2_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte3_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte4_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte5_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte6_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte7_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd0_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd0_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd0_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd0_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd1_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd1_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd1_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd1_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd2_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd2_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd2_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd2_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd3_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd3_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd3_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd3_3;
+ uint32_t emc_txdsrvttgen;
+ uint32_t emc_fdpd_ctrl_dq;
+ uint32_t emc_fdpd_ctrl_cmd;
+ uint32_t emc_fbio_spare;
+ uint32_t emc_zcal_interval;
+ uint32_t emc_zcal_wait_cnt;
+ uint32_t emc_mrs_wait_cnt;
+ uint32_t emc_mrs_wait_cnt2;
+ uint32_t emc_auto_cal_channel;
+ uint32_t emc_pmacro_dll_cfg_0;
+ uint32_t emc_pmacro_dll_cfg_1;
+ uint32_t emc_pmacro_dll_cfg_2;
+ uint32_t emc_pmacro_autocal_cfg_common;
+ uint32_t emc_pmacro_zctrl;
+ uint32_t emc_cfg;
+ uint32_t emc_cfg_pipe;
+ uint32_t emc_dyn_self_ref_control;
+ uint32_t emc_qpop;
+ uint32_t emc_dqs_brlshft_0;
+ uint32_t emc_dqs_brlshft_1;
+ uint32_t emc_cmd_brlshft_2;
+ uint32_t emc_cmd_brlshft_3;
+ uint32_t emc_pmacro_pad_cfg_ctrl;
+ uint32_t emc_pmacro_data_pad_rx_ctrl;
+ uint32_t emc_pmacro_cmd_pad_rx_ctrl;
+ uint32_t emc_pmacro_data_rx_term_mode;
+ uint32_t emc_pmacro_cmd_rx_term_mode;
+ uint32_t emc_pmacro_cmd_pad_tx_ctrl;
+ uint32_t emc_pmacro_data_pad_tx_ctrl;
+ uint32_t emc_pmacro_vttgen_ctrl_0;
+ uint32_t emc_pmacro_vttgen_ctrl_1;
+ uint32_t emc_pmacro_vttgen_ctrl_2;
+ uint32_t emc_pmacro_brick_ctrl_rfu1;
+ uint32_t emc_pmacro_cmd_brick_ctrl_fdpd;
+ uint32_t emc_pmacro_brick_ctrl_rfu2;
+ uint32_t emc_pmacro_data_brick_ctrl_fdpd;
+ uint32_t emc_pmacro_bg_bias_ctrl_0;
+ uint32_t emc_cfg_3;
+ uint32_t emc_pmacro_tx_pwrd_0;
+ uint32_t emc_pmacro_tx_pwrd_1;
+ uint32_t emc_pmacro_tx_pwrd_2;
+ uint32_t emc_pmacro_tx_pwrd_3;
+ uint32_t emc_pmacro_tx_pwrd_4;
+ uint32_t emc_pmacro_tx_pwrd_5;
+ uint32_t emc_config_sample_delay;
+ uint32_t emc_pmacro_tx_sel_clk_src_0;
+ uint32_t emc_pmacro_tx_sel_clk_src_1;
+ uint32_t emc_pmacro_tx_sel_clk_src_2;
+ uint32_t emc_pmacro_tx_sel_clk_src_3;
+ uint32_t emc_pmacro_tx_sel_clk_src_4;
+ uint32_t emc_pmacro_tx_sel_clk_src_5;
+ uint32_t emc_pmacro_ddll_bypass;
+ uint32_t emc_pmacro_ddll_pwrd_0;
+ uint32_t emc_pmacro_ddll_pwrd_1;
+ uint32_t emc_pmacro_ddll_pwrd_2;
+ uint32_t emc_pmacro_cmd_ctrl_0;
+ uint32_t emc_pmacro_cmd_ctrl_1;
+ uint32_t emc_pmacro_cmd_ctrl_2;
+ uint32_t emc_pmacro_data_pi_ctrl;
+ uint32_t emc_pmacro_cmd_pi_ctrl;
+ uint32_t emc_tr_timing_0;
+ uint32_t emc_tr_dvfs;
+ uint32_t emc_tr_ctrl_1;
+ uint32_t emc_tr_rdv;
+ uint32_t emc_tr_qpop;
+ uint32_t emc_tr_rdv_mask;
+ uint32_t emc_mrw14;
+ uint32_t emc_tr_qsafe;
+ uint32_t emc_tr_qrst;
+ uint32_t emc_training_ctrl;
+ uint32_t emc_training_settle;
+ uint32_t emc_training_vref_settle;
+ uint32_t emc_training_ca_fine_ctrl;
+ uint32_t emc_training_ca_ctrl_misc;
+ uint32_t emc_training_ca_ctrl_misc1;
+ uint32_t emc_training_ca_vref_ctrl;
+ uint32_t emc_training_quse_cors_ctrl;
+ uint32_t emc_training_quse_fine_ctrl;
+ uint32_t emc_training_quse_ctrl_misc;
+ uint32_t emc_training_quse_vref_ctrl;
+ uint32_t emc_training_read_fine_ctrl;
+ uint32_t emc_training_read_ctrl_misc;
+ uint32_t emc_training_read_vref_ctrl;
+ uint32_t emc_training_write_fine_ctrl;
+ uint32_t emc_training_write_ctrl_misc;
+ uint32_t emc_training_write_vref_ctrl;
+ uint32_t emc_training_mpc;
+ uint32_t emc_mrw15;
+};
+
+struct EristaTiming {
+ uint32_t emc_rc;
+ uint32_t emc_rfc;
+ uint32_t emc_rfcpb;
+ uint32_t emc_refctrl2;
+ uint32_t emc_rfc_slr;
+ uint32_t emc_ras;
+ uint32_t emc_rp;
+ uint32_t emc_r2w;
+ uint32_t emc_w2r;
+ uint32_t emc_r2p;
+ uint32_t emc_w2p;
+ uint32_t emc_r2r;
+ uint32_t emc_tppd;
+ uint32_t emc_ccdmw;
+ uint32_t emc_rd_rcd;
+ uint32_t emc_wr_rcd;
+ uint32_t emc_rrd;
+ uint32_t emc_rext;
+ uint32_t emc_wext;
+ uint32_t emc_wdv_chk;
+ uint32_t emc_wdv;
+ uint32_t emc_wsv;
+ uint32_t emc_wev;
+ uint32_t emc_wdv_mask;
+ uint32_t emc_ws_duration;
+ uint32_t emc_we_duration;
+ uint32_t emc_quse;
+ uint32_t emc_quse_width;
+ uint32_t emc_ibdly;
+ uint32_t emc_obdly;
+ uint32_t emc_einput;
+ uint32_t emc_mrw6;
+ uint32_t emc_einput_duration;
+ uint32_t emc_puterm_extra;
+ uint32_t emc_puterm_width;
+ uint32_t emc_qrst;
+ uint32_t emc_qsafe;
+ uint32_t emc_rdv;
+ uint32_t emc_rdv_mask;
+ uint32_t emc_rdv_early;
+ uint32_t emc_rdv_early_mask;
+ uint32_t emc_refresh;
+ uint32_t emc_burst_refresh_num;
+ uint32_t emc_pre_refresh_req_cnt;
+ uint32_t emc_pdex2wr;
+ uint32_t emc_pdex2rd;
+ uint32_t emc_pchg2pden;
+ uint32_t emc_act2pden;
+ uint32_t emc_ar2pden;
+ uint32_t emc_rw2pden;
+ uint32_t emc_cke2pden;
+ uint32_t emc_pdex2cke;
+ uint32_t emc_pdex2mrr;
+ uint32_t emc_txsr;
+ uint32_t emc_txsrdll;
+ uint32_t emc_tcke;
+ uint32_t emc_tckesr;
+ uint32_t emc_tpd;
+ uint32_t emc_tfaw;
+ uint32_t emc_trpab;
+ uint32_t emc_tclkstable;
+ uint32_t emc_tclkstop;
+ uint32_t emc_mrw7;
+ uint32_t emc_trefbw;
+ uint32_t emc_odt_write;
+ uint32_t emc_fbio_cfg5;
+ uint32_t emc_fbio_cfg7;
+ uint32_t emc_cfg_dig_dll;
+ uint32_t emc_cfg_dig_dll_period;
+ uint32_t emc_pmacro_ib_rxrt;
+ uint32_t emc_cfg_pipe_1;
+ uint32_t emc_cfg_pipe_2;
+ uint32_t emc_pmacro_quse_ddll_rank0_4;
+ uint32_t emc_pmacro_quse_ddll_rank0_5;
+ uint32_t emc_pmacro_quse_ddll_rank1_4;
+ uint32_t emc_pmacro_quse_ddll_rank1_5;
+ uint32_t emc_mrw8;
+ uint32_t emc_pmacro_ob_ddll_long_dq_rank1_4;
+ uint32_t emc_pmacro_ob_ddll_long_dq_rank1_5;
+ uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_0;
+ uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_1;
+ uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_2;
+ uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_3;
+ uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_4;
+ uint32_t emc_pmacro_ob_ddll_long_dqs_rank0_5;
+ uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_0;
+ uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_1;
+ uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_2;
+ uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_3;
+ uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_4;
+ uint32_t emc_pmacro_ob_ddll_long_dqs_rank1_5;
+ uint32_t emc_pmacro_ddll_long_cmd_0;
+ uint32_t emc_pmacro_ddll_long_cmd_1;
+ uint32_t emc_pmacro_ddll_long_cmd_2;
+ uint32_t emc_pmacro_ddll_long_cmd_3;
+ uint32_t emc_pmacro_ddll_long_cmd_4;
+ uint32_t emc_pmacro_ddll_short_cmd_0;
+ uint32_t emc_pmacro_ddll_short_cmd_1;
+ uint32_t emc_pmacro_ddll_short_cmd_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte0_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte1_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte2_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte3_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte4_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte5_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte6_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte7_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd0_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd1_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd2_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd3_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte0_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte1_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte2_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte3_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte4_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte5_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte6_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte7_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd0_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd0_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd0_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd0_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd1_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd1_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd1_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd1_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd2_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd2_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd2_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd2_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd3_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd3_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd3_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_cmd3_3;
+ uint32_t emc_txdsrvttgen;
+ uint32_t emc_fdpd_ctrl_dq;
+ uint32_t emc_fdpd_ctrl_cmd;
+ uint32_t emc_fbio_spare;
+ uint32_t emc_zcal_interval;
+ uint32_t emc_zcal_wait_cnt;
+ uint32_t emc_mrs_wait_cnt;
+ uint32_t emc_mrs_wait_cnt2;
+ uint32_t emc_auto_cal_channel;
+ uint32_t emc_dll_cfg_0;
+ uint32_t emc_dll_cfg_1;
+ uint32_t emc_pmacro_autocal_cfg_common;
+ uint32_t emc_pmacro_zctrl;
+ uint32_t emc_cfg;
+ uint32_t emc_cfg_pipe;
+ uint32_t emc_dyn_self_ref_control;
+ uint32_t emc_qpop;
+ uint32_t emc_dqs_brlshft_0;
+ uint32_t emc_dqs_brlshft_1;
+ uint32_t emc_cmd_brlshft_2;
+ uint32_t emc_cmd_brlshft_3;
+ uint32_t emc_pmacro_pad_cfg_ctrl;
+ uint32_t emc_pmacro_data_pad_rx_ctrl;
+ uint32_t emc_pmacro_cmd_pad_rx_ctrl;
+ uint32_t emc_pmacro_data_rx_term_mode;
+ uint32_t emc_pmacro_cmd_rx_term_mode;
+ uint32_t emc_pmacro_cmd_pad_tx_ctrl;
+ uint32_t emc_pmacro_data_pad_tx_ctrl;
+ uint32_t emc_pmacro_common_pad_tx_ctrl;
+ uint32_t emc_pmacro_vttgen_ctrl_0;
+ uint32_t emc_pmacro_vttgen_ctrl_1;
+ uint32_t emc_pmacro_vttgen_ctrl_2;
+ uint32_t emc_pmacro_brick_ctrl_rfu1;
+ uint32_t emc_pmacro_cmd_brick_ctrl_fdpd;
+ uint32_t emc_pmacro_brick_ctrl_rfu2;
+ uint32_t emc_pmacro_data_brick_ctrl_fdpd;
+ uint32_t emc_pmacro_bg_bias_ctrl_0;
+ uint32_t emc_cfg_3;
+ uint32_t emc_pmacro_tx_pwrd_0;
+ uint32_t emc_pmacro_tx_pwrd_1;
+ uint32_t emc_pmacro_tx_pwrd_2;
+ uint32_t emc_pmacro_tx_pwrd_3;
+ uint32_t emc_pmacro_tx_pwrd_4;
+ uint32_t emc_pmacro_tx_pwrd_5;
+ uint32_t emc_config_sample_delay;
+ uint32_t emc_pmacro_tx_sel_clk_src_0;
+ uint32_t emc_pmacro_tx_sel_clk_src_1;
+ uint32_t emc_pmacro_tx_sel_clk_src_2;
+ uint32_t emc_pmacro_tx_sel_clk_src_3;
+ uint32_t emc_pmacro_tx_sel_clk_src_4;
+ uint32_t emc_pmacro_tx_sel_clk_src_5;
+ uint32_t emc_pmacro_ddll_bypass;
+ uint32_t emc_pmacro_ddll_pwrd_0;
+ uint32_t emc_pmacro_ddll_pwrd_1;
+ uint32_t emc_pmacro_ddll_pwrd_2;
+ uint32_t emc_pmacro_cmd_ctrl_0;
+ uint32_t emc_pmacro_cmd_ctrl_1;
+ uint32_t emc_pmacro_cmd_ctrl_2;
+ uint32_t emc_tr_timing_0;
+ uint32_t emc_tr_dvfs;
+ uint32_t emc_tr_ctrl_1;
+ uint32_t emc_tr_rdv;
+ uint32_t emc_tr_qpop;
+ uint32_t emc_tr_rdv_mask;
+ uint32_t emc_mrw14;
+ uint32_t emc_tr_qsafe;
+ uint32_t emc_tr_qrst;
+ uint32_t emc_training_ctrl;
+ uint32_t emc_training_settle;
+ uint32_t emc_training_vref_settle;
+ uint32_t emc_training_ca_fine_ctrl;
+ uint32_t emc_training_ca_ctrl_misc;
+ uint32_t emc_training_ca_ctrl_misc1;
+ uint32_t emc_training_ca_vref_ctrl;
+ uint32_t emc_training_quse_cors_ctrl;
+ uint32_t emc_training_quse_fine_ctrl;
+ uint32_t emc_training_quse_ctrl_misc;
+ uint32_t emc_training_quse_vref_ctrl;
+ uint32_t emc_training_read_fine_ctrl;
+ uint32_t emc_training_read_ctrl_misc;
+ uint32_t emc_training_read_vref_ctrl;
+ uint32_t emc_training_write_fine_ctrl;
+ uint32_t emc_training_write_ctrl_misc;
+ uint32_t emc_training_write_vref_ctrl;
+ uint32_t emc_training_mpc;
+ uint32_t emc_mrw15;
+};
+
+struct MarikoMtcTable {
+ uint32_t rev;
+ char dvfs_ver[60];
+ uint32_t rate_khz;
+ uint32_t min_volt;
+ uint32_t gpu_min_volt;
+ char clock_src[32];
+ uint32_t clk_src_emc;
+ uint32_t pll_en_ssc;
+ uint32_t needs_training;
+ uint32_t training_pattern;
+ uint32_t trained;
+
+ uint32_t periodic_training;
+ uint32_t trained_dram_clktree_c0d0u0;
+ uint32_t trained_dram_clktree_c0d0u1;
+ uint32_t trained_dram_clktree_c0d1u0;
+ uint32_t trained_dram_clktree_c0d1u1;
+ uint32_t trained_dram_clktree_c1d0u0;
+ uint32_t trained_dram_clktree_c1d0u1;
+ uint32_t trained_dram_clktree_c1d1u0;
+ uint32_t trained_dram_clktree_c1d1u1;
+ uint32_t current_dram_clktree_c0d0u0;
+ uint32_t current_dram_clktree_c0d0u1;
+ uint32_t current_dram_clktree_c0d1u0;
+ uint32_t current_dram_clktree_c0d1u1;
+ uint32_t current_dram_clktree_c1d0u0;
+ uint32_t current_dram_clktree_c1d0u1;
+ uint32_t current_dram_clktree_c1d1u0;
+ uint32_t current_dram_clktree_c1d1u1;
+ uint32_t emc_fbio_cfg7;
+ uint32_t run_clocks;
+ uint32_t tree_margin;
+
+ uint32_t num_burst;
+ uint32_t num_burst_per_ch;
+ uint32_t num_trim;
+ uint32_t num_trim_per_ch;
+ uint32_t num_mc_regs;
+ uint32_t num_up_down;
+ uint32_t vref_num;
+ uint32_t training_mod_num;
+ uint32_t dram_timing_num;
+
+ uint32_t ptfv_dqsosc_movavg_c0d0u0;
+ uint32_t ptfv_dqsosc_movavg_c0d0u1;
+ uint32_t ptfv_dqsosc_movavg_c0d1u0;
+ uint32_t ptfv_dqsosc_movavg_c0d1u1;
+ uint32_t ptfv_dqsosc_movavg_c1d0u0;
+ uint32_t ptfv_dqsosc_movavg_c1d0u1;
+ uint32_t ptfv_dqsosc_movavg_c1d1u0;
+ uint32_t ptfv_dqsosc_movavg_c1d1u1;
+ uint32_t ptfv_write_samples;
+ uint32_t ptfv_dvfs_samples;
+ uint32_t ptfv_movavg_weight;
+ uint32_t ptfv_config_ctrl;
+
+ MarikoTiming burst_regs;
+
+ struct {
+ uint32_t emc0_mrw10;
+ uint32_t emc1_mrw10;
+ uint32_t emc0_mrw11;
+ uint32_t emc1_mrw11;
+ uint32_t emc0_mrw12;
+ uint32_t emc1_mrw12;
+ uint32_t emc0_mrw13;
+ uint32_t emc1_mrw13;
+ }
+ burst_perch_regs;
+
+ MarikoTiming shadow_regs_ca_train;
+
+ MarikoTiming shadow_regs_rdwr_train;
+
+ struct {
+ uint32_t emc_pmacro_ib_ddll_long_dqs_rank0_0;
+ uint32_t emc_pmacro_ib_ddll_long_dqs_rank0_1;
+ uint32_t emc_pmacro_ib_ddll_long_dqs_rank0_2;
+ uint32_t emc_pmacro_ib_ddll_long_dqs_rank0_3;
+ uint32_t emc_pmacro_ib_ddll_long_dqs_rank1_0;
+ uint32_t emc_pmacro_ib_ddll_long_dqs_rank1_1;
+ uint32_t emc_pmacro_ib_ddll_long_dqs_rank1_2;
+ uint32_t emc_pmacro_ib_ddll_long_dqs_rank1_3;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte0_0;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte0_1;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte0_2;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte1_0;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte1_1;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte1_2;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte2_0;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte2_1;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte2_2;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte3_0;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte3_1;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte3_2;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte4_0;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte4_1;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte4_2;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte5_0;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte5_1;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte5_2;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte6_0;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte6_1;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte6_2;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte7_0;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte7_1;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte7_2;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte0_0;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte0_1;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte0_2;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte1_0;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte1_1;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte1_2;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte2_0;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte2_1;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte2_2;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte3_0;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte3_1;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte3_2;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte4_0;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte4_1;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte4_2;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte5_0;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte5_1;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte5_2;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte6_0;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte6_1;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte6_2;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte7_0;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte7_1;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte7_2;
+ uint32_t emc_pmacro_ib_vref_dqs_0;
+ uint32_t emc_pmacro_ib_vref_dqs_1;
+ uint32_t emc_pmacro_ib_vref_dq_0;
+ uint32_t emc_pmacro_ib_vref_dq_1;
+ uint32_t emc_pmacro_ob_ddll_long_dq_rank0_0;
+ uint32_t emc_pmacro_ob_ddll_long_dq_rank0_1;
+ uint32_t emc_pmacro_ob_ddll_long_dq_rank0_2;
+ uint32_t emc_pmacro_ob_ddll_long_dq_rank0_3;
+ uint32_t emc_pmacro_ob_ddll_long_dq_rank0_4;
+ uint32_t emc_pmacro_ob_ddll_long_dq_rank0_5;
+ uint32_t emc_pmacro_ob_ddll_long_dq_rank1_0;
+ uint32_t emc_pmacro_ob_ddll_long_dq_rank1_1;
+ uint32_t emc_pmacro_ob_ddll_long_dq_rank1_2;
+ uint32_t emc_pmacro_ob_ddll_long_dq_rank1_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte0_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte0_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte0_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte1_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte1_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte1_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte2_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte2_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte2_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte3_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte3_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte3_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte4_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte4_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte4_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte5_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte5_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte5_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte6_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte6_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte6_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte7_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte7_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte7_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd0_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd0_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd0_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd1_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd1_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd1_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd2_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd2_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd2_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd3_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd3_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd3_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte0_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte0_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte0_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte1_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte1_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte1_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte2_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte2_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte2_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte3_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte3_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte3_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte4_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte4_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte4_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte5_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte5_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte5_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte6_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte6_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte6_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte7_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte7_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte7_2;
+ uint32_t emc_pmacro_quse_ddll_rank0_0;
+ uint32_t emc_pmacro_quse_ddll_rank0_1;
+ uint32_t emc_pmacro_quse_ddll_rank0_2;
+ uint32_t emc_pmacro_quse_ddll_rank0_3;
+ uint32_t emc_pmacro_quse_ddll_rank1_0;
+ uint32_t emc_pmacro_quse_ddll_rank1_1;
+ uint32_t emc_pmacro_quse_ddll_rank1_2;
+ uint32_t emc_pmacro_quse_ddll_rank1_3;
+ }
+ trim_regs;
+
+ struct {
+ uint32_t emc0_cmd_brlshft_0;
+ uint32_t emc1_cmd_brlshft_1;
+ uint32_t emc0_data_brlshft_0;
+ uint32_t emc1_data_brlshft_0;
+ uint32_t emc0_data_brlshft_1;
+ uint32_t emc1_data_brlshft_1;
+ uint32_t emc0_quse_brlshft_0;
+ uint32_t emc1_quse_brlshft_1;
+ uint32_t emc0_quse_brlshft_2;
+ uint32_t emc1_quse_brlshft_3;
+ }
+ trim_perch_regs;
+
+ struct {
+ uint32_t emc0_training_opt_dqs_ib_vref_rank0;
+ uint32_t emc1_training_opt_dqs_ib_vref_rank0;
+ uint32_t emc0_training_opt_dqs_ib_vref_rank1;
+ uint32_t emc1_training_opt_dqs_ib_vref_rank1;
+ }
+ vref_perch_regs;
+
+ struct {
+ uint32_t t_rp;
+ uint32_t t_fc_lpddr4;
+ uint32_t t_rfc;
+ uint32_t t_pdex;
+ uint32_t rl;
+ }
+ dram_timings;
+
+ uint32_t zq_op_cc_long_zcal;
+ uint32_t zq_op_cc_short_zcal;
+ uint32_t zcal_wait_time_ps_cc_long_zcal;
+ uint32_t zcal_wait_time_ps_cc_short_zcal;
+ uint32_t tZQCAL_lpddr4;
+ uint32_t zqcal_before_cc_cutoff;
+ uint32_t opt_cc_short_zcal;
+ uint32_t opt_short_zcal;
+ uint32_t opt_do_sw_qrst;
+ uint32_t save_restore_clkstop_pd;
+ uint32_t opt_E90;
+ uint32_t cya_allow_ref_cc;
+ uint32_t ref_b4_sref_en;
+ uint32_t cya_issue_pc_ref;
+
+ struct {
+ uint32_t emc0_training_rw_offset_ib_byte0;
+ uint32_t emc1_training_rw_offset_ib_byte0;
+ uint32_t emc0_training_rw_offset_ib_byte1;
+ uint32_t emc1_training_rw_offset_ib_byte1;
+ uint32_t emc0_training_rw_offset_ib_byte2;
+ uint32_t emc1_training_rw_offset_ib_byte2;
+ uint32_t emc0_training_rw_offset_ib_byte3;
+ uint32_t emc1_training_rw_offset_ib_byte3;
+ uint32_t emc0_training_rw_offset_ib_misc;
+ uint32_t emc1_training_rw_offset_ib_misc;
+ uint32_t emc0_training_rw_offset_ob_byte0;
+ uint32_t emc1_training_rw_offset_ob_byte0;
+ uint32_t emc0_training_rw_offset_ob_byte1;
+ uint32_t emc1_training_rw_offset_ob_byte1;
+ uint32_t emc0_training_rw_offset_ob_byte2;
+ uint32_t emc1_training_rw_offset_ob_byte2;
+ uint32_t emc0_training_rw_offset_ob_byte3;
+ uint32_t emc1_training_rw_offset_ob_byte3;
+ uint32_t emc0_training_rw_offset_ob_misc;
+ uint32_t emc1_training_rw_offset_ob_misc;
+ }
+ training_mod_regs;
+
+ uint32_t save_restore_mod_regs[12];
+
+ struct {
+ uint32_t mc_emem_arb_cfg;
+ uint32_t mc_emem_arb_outstanding_req;
+ uint32_t mc_emem_arb_refpb_hp_ctrl;
+ uint32_t mc_emem_arb_refpb_bank_ctrl;
+ uint32_t mc_emem_arb_timing_rcd;
+ uint32_t mc_emem_arb_timing_rp;
+ uint32_t mc_emem_arb_timing_rc;
+ uint32_t mc_emem_arb_timing_ras;
+ uint32_t mc_emem_arb_timing_faw;
+ uint32_t mc_emem_arb_timing_rrd;
+ uint32_t mc_emem_arb_timing_rap2pre;
+ uint32_t mc_emem_arb_timing_wap2pre;
+ uint32_t mc_emem_arb_timing_r2r;
+ uint32_t mc_emem_arb_timing_w2w;
+ uint32_t mc_emem_arb_timing_r2w;
+ uint32_t mc_emem_arb_timing_ccdmw;
+ uint32_t mc_emem_arb_timing_w2r;
+ uint32_t mc_emem_arb_timing_rfcpb;
+ uint32_t mc_emem_arb_da_turns;
+ uint32_t mc_emem_arb_da_covers;
+ uint32_t mc_emem_arb_misc0;
+ uint32_t mc_emem_arb_misc1;
+ uint32_t mc_emem_arb_misc2;
+ uint32_t mc_emem_arb_ring1_throttle;
+ uint32_t mc_emem_arb_dhyst_ctrl;
+ uint32_t mc_emem_arb_dhyst_timeout_util_0;
+ uint32_t mc_emem_arb_dhyst_timeout_util_1;
+ uint32_t mc_emem_arb_dhyst_timeout_util_2;
+ uint32_t mc_emem_arb_dhyst_timeout_util_3;
+ uint32_t mc_emem_arb_dhyst_timeout_util_4;
+ uint32_t mc_emem_arb_dhyst_timeout_util_5;
+ uint32_t mc_emem_arb_dhyst_timeout_util_6;
+ uint32_t mc_emem_arb_dhyst_timeout_util_7;
+ }
+ burst_mc_regs;
+
+ struct {
+ uint32_t mc_mll_mpcorer_ptsa_rate;
+ uint32_t mc_ftop_ptsa_rate;
+ uint32_t mc_ptsa_grant_decrement;
+ uint32_t mc_latency_allowance_xusb_0;
+ uint32_t mc_latency_allowance_xusb_1;
+ uint32_t mc_latency_allowance_tsec_0;
+ uint32_t mc_latency_allowance_sdmmca_0;
+ uint32_t mc_latency_allowance_sdmmcaa_0;
+ uint32_t mc_latency_allowance_sdmmc_0;
+ uint32_t mc_latency_allowance_sdmmcab_0;
+ uint32_t mc_latency_allowance_ppcs_0;
+ uint32_t mc_latency_allowance_ppcs_1;
+ uint32_t mc_latency_allowance_mpcore_0;
+ uint32_t mc_latency_allowance_hc_0;
+ uint32_t mc_latency_allowance_hc_1;
+ uint32_t mc_latency_allowance_avpc_0;
+ uint32_t mc_latency_allowance_gpu_0;
+ uint32_t mc_latency_allowance_gpu2_0;
+ uint32_t mc_latency_allowance_nvenc_0;
+ uint32_t mc_latency_allowance_nvdec_0;
+ uint32_t mc_latency_allowance_vic_0;
+ uint32_t mc_latency_allowance_vi2_0;
+ uint32_t mc_latency_allowance_isp2_0;
+ uint32_t mc_latency_allowance_isp2_1;
+ }
+ la_scale_regs;
+
+ uint32_t unk_0;
+ uint32_t vtt_vdda_ctrl_0;
+ uint32_t src_clock_div;
+ uint32_t vtt_vdda_dual_channel;
+ uint32_t vtt_vdda_ctrl_1;
+ uint32_t vtt_vdda_ctrl_2;
+ uint32_t vtt_vdda_ctrl_3;
+ uint32_t vtt_vdda_ctrl_4;
+ uint32_t misc_cfg_0;
+ uint32_t misc_cfg_1;
+ uint32_t misc_cfg_2;
+ uint32_t unk_1;
+ uint32_t unk_2;
+ uint32_t pipe_clk_delay;
+ uint32_t clkchange_delay;
+ uint32_t pllm_ss_cfg;
+ uint32_t pllm_ss_ctrl1;
+ uint32_t pllm_ss_ctrl2;
+ uint32_t pllmb_ss_cfg;
+ uint32_t pllmb_ss_ctrl1;
+ uint32_t pllmb_ss_ctrl2;
+ uint32_t pllmb_divm;
+ uint32_t pllmb_divn;
+ uint32_t pllmb_divp;
+ uint32_t min_mrs_wait;
+ uint32_t ramp_wait;
+ uint32_t emc_mrw;
+ uint32_t emc_mrw2;
+ uint32_t emc_mrw3;
+ uint32_t emc_mrw4;
+ uint32_t emc_mrw9;
+ uint32_t emc_mrs;
+ uint32_t emc_emrs;
+ uint32_t emc_emrs2;
+ uint32_t emc_auto_cal_config;
+ uint32_t emc_auto_cal_config2;
+ uint32_t emc_auto_cal_config3;
+ uint32_t emc_auto_cal_config4;
+ uint32_t emc_auto_cal_config5;
+ uint32_t emc_auto_cal_config6;
+ uint32_t emc_auto_cal_config7;
+ uint32_t emc_auto_cal_config8;
+ uint32_t emc_cfg_2;
+ uint32_t emc_sel_dpd_ctrl;
+ uint32_t emc_fdpd_ctrl_cmd_no_ramp;
+ uint32_t emc_tr_ctrl_0;
+ uint32_t dll_clk_src;
+ uint32_t clk_out_enb_x_0_clk_enb_emc_dll;
+ uint32_t latency;
+ uint32_t pllm_misc1_0_pllm_clamp_ph90;
+};
+
+static_assert(sizeof(MarikoMtcTable) == 0x10CC);
+
+struct EristaMtcTable {
+ uint32_t rev;
+ char dvfs_ver[60];
+ uint32_t rate_khz;
+ uint32_t min_volt;
+ uint32_t gpu_min_volt;
+ char clock_src[32];
+ uint32_t clk_src_emc;
+ uint32_t needs_training;
+ uint32_t training_pattern;
+ uint32_t trained;
+
+ uint32_t periodic_training;
+ uint32_t trained_dram_clktree_c0d0u0;
+ uint32_t trained_dram_clktree_c0d0u1;
+ uint32_t trained_dram_clktree_c0d1u0;
+ uint32_t trained_dram_clktree_c0d1u1;
+ uint32_t trained_dram_clktree_c1d0u0;
+ uint32_t trained_dram_clktree_c1d0u1;
+ uint32_t trained_dram_clktree_c1d1u0;
+ uint32_t trained_dram_clktree_c1d1u1;
+ uint32_t current_dram_clktree_c0d0u0;
+ uint32_t current_dram_clktree_c0d0u1;
+ uint32_t current_dram_clktree_c0d1u0;
+ uint32_t current_dram_clktree_c0d1u1;
+ uint32_t current_dram_clktree_c1d0u0;
+ uint32_t current_dram_clktree_c1d0u1;
+ uint32_t current_dram_clktree_c1d1u0;
+ uint32_t current_dram_clktree_c1d1u1;
+ uint32_t run_clocks;
+ uint32_t tree_margin;
+
+ uint32_t num_burst;
+ uint32_t num_burst_per_ch;
+ uint32_t num_trim;
+ uint32_t num_trim_per_ch;
+ uint32_t num_mc_regs;
+ uint32_t num_up_down;
+ uint32_t vref_num;
+ uint32_t training_mod_num;
+ uint32_t dram_timing_num;
+
+ uint32_t ptfv_dqsosc_movavg_c0d0u0;
+ uint32_t ptfv_dqsosc_movavg_c0d0u1;
+ uint32_t ptfv_dqsosc_movavg_c0d1u0;
+ uint32_t ptfv_dqsosc_movavg_c0d1u1;
+ uint32_t ptfv_dqsosc_movavg_c1d0u0;
+ uint32_t ptfv_dqsosc_movavg_c1d0u1;
+ uint32_t ptfv_dqsosc_movavg_c1d1u0;
+ uint32_t ptfv_dqsosc_movavg_c1d1u1;
+ uint32_t ptfv_write_samples;
+ uint32_t ptfv_dvfs_samples;
+ uint32_t ptfv_movavg_weight;
+ uint32_t ptfv_config_ctrl;
+
+ EristaTiming burst_regs;
+
+ struct {
+ uint32_t emc0_mrw10;
+ uint32_t emc1_mrw10;
+ uint32_t emc0_mrw11;
+ uint32_t emc1_mrw11;
+ uint32_t emc0_mrw12;
+ uint32_t emc1_mrw12;
+ uint32_t emc0_mrw13;
+ uint32_t emc1_mrw13;
+ }
+ burst_perch_regs;
+
+ EristaTiming shadow_regs_ca_train;
+
+ EristaTiming shadow_regs_quse_train;
+
+ EristaTiming shadow_regs_rdwr_train;
+
+ struct {
+ uint32_t emc_pmacro_ib_ddll_long_dqs_rank0_0;
+ uint32_t emc_pmacro_ib_ddll_long_dqs_rank0_1;
+ uint32_t emc_pmacro_ib_ddll_long_dqs_rank0_2;
+ uint32_t emc_pmacro_ib_ddll_long_dqs_rank0_3;
+ uint32_t emc_pmacro_ib_ddll_long_dqs_rank1_0;
+ uint32_t emc_pmacro_ib_ddll_long_dqs_rank1_1;
+ uint32_t emc_pmacro_ib_ddll_long_dqs_rank1_2;
+ uint32_t emc_pmacro_ib_ddll_long_dqs_rank1_3;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte0_0;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte0_1;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte0_2;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte1_0;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte1_1;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte1_2;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte2_0;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte2_1;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte2_2;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte3_0;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte3_1;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte3_2;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte4_0;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte4_1;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte4_2;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte5_0;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte5_1;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte5_2;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte6_0;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte6_1;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte6_2;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte7_0;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte7_1;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank0_byte7_2;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte0_0;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte0_1;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte0_2;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte1_0;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte1_1;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte1_2;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte2_0;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte2_1;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte2_2;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte3_0;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte3_1;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte3_2;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte4_0;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte4_1;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte4_2;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte5_0;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte5_1;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte5_2;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte6_0;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte6_1;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte6_2;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte7_0;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte7_1;
+ uint32_t emc_pmacro_ib_ddll_short_dq_rank1_byte7_2;
+ uint32_t emc_pmacro_ib_vref_dqs_0;
+ uint32_t emc_pmacro_ib_vref_dqs_1;
+ uint32_t emc_pmacro_ib_vref_dq_0;
+ uint32_t emc_pmacro_ib_vref_dq_1;
+ uint32_t emc_pmacro_ob_ddll_long_dq_rank0_0;
+ uint32_t emc_pmacro_ob_ddll_long_dq_rank0_1;
+ uint32_t emc_pmacro_ob_ddll_long_dq_rank0_2;
+ uint32_t emc_pmacro_ob_ddll_long_dq_rank0_3;
+ uint32_t emc_pmacro_ob_ddll_long_dq_rank0_4;
+ uint32_t emc_pmacro_ob_ddll_long_dq_rank0_5;
+ uint32_t emc_pmacro_ob_ddll_long_dq_rank1_0;
+ uint32_t emc_pmacro_ob_ddll_long_dq_rank1_1;
+ uint32_t emc_pmacro_ob_ddll_long_dq_rank1_2;
+ uint32_t emc_pmacro_ob_ddll_long_dq_rank1_3;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte0_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte0_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte0_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte1_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte1_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte1_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte2_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte2_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte2_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte3_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte3_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte3_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte4_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte4_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte4_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte5_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte5_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte5_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte6_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte6_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte6_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte7_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte7_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_byte7_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd0_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd0_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd0_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd1_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd1_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd1_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd2_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd2_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd2_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd3_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd3_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank0_cmd3_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte0_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte0_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte0_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte1_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte1_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte1_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte2_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte2_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte2_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte3_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte3_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte3_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte4_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte4_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte4_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte5_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte5_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte5_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte6_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte6_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte6_2;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte7_0;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte7_1;
+ uint32_t emc_pmacro_ob_ddll_short_dq_rank1_byte7_2;
+ uint32_t emc_pmacro_quse_ddll_rank0_0;
+ uint32_t emc_pmacro_quse_ddll_rank0_1;
+ uint32_t emc_pmacro_quse_ddll_rank0_2;
+ uint32_t emc_pmacro_quse_ddll_rank0_3;
+ uint32_t emc_pmacro_quse_ddll_rank1_0;
+ uint32_t emc_pmacro_quse_ddll_rank1_1;
+ uint32_t emc_pmacro_quse_ddll_rank1_2;
+ uint32_t emc_pmacro_quse_ddll_rank1_3;
+ }
+ trim_regs;
+
+ struct {
+ uint32_t emc0_cmd_brlshft_0;
+ uint32_t emc1_cmd_brlshft_1;
+ uint32_t emc0_data_brlshft_0;
+ uint32_t emc1_data_brlshft_0;
+ uint32_t emc0_data_brlshft_1;
+ uint32_t emc1_data_brlshft_1;
+ uint32_t emc0_quse_brlshft_0;
+ uint32_t emc1_quse_brlshft_1;
+ uint32_t emc0_quse_brlshft_2;
+ uint32_t emc1_quse_brlshft_3;
+ }
+ trim_perch_regs;
+
+ struct {
+ uint32_t emc0_training_opt_dqs_ib_vref_rank0;
+ uint32_t emc1_training_opt_dqs_ib_vref_rank0;
+ uint32_t emc0_training_opt_dqs_ib_vref_rank1;
+ uint32_t emc1_training_opt_dqs_ib_vref_rank1;
+ }
+ vref_perch_regs;
+
+ struct {
+ uint32_t t_rp;
+ uint32_t t_fc_lpddr4;
+ uint32_t t_rfc;
+ uint32_t t_pdex;
+ uint32_t rl;
+ }
+ dram_timings;
+
+ struct {
+ uint32_t emc0_training_rw_offset_ib_byte0;
+ uint32_t emc1_training_rw_offset_ib_byte0;
+ uint32_t emc0_training_rw_offset_ib_byte1;
+ uint32_t emc1_training_rw_offset_ib_byte1;
+ uint32_t emc0_training_rw_offset_ib_byte2;
+ uint32_t emc1_training_rw_offset_ib_byte2;
+ uint32_t emc0_training_rw_offset_ib_byte3;
+ uint32_t emc1_training_rw_offset_ib_byte3;
+ uint32_t emc0_training_rw_offset_ib_misc;
+ uint32_t emc1_training_rw_offset_ib_misc;
+ uint32_t emc0_training_rw_offset_ob_byte0;
+ uint32_t emc1_training_rw_offset_ob_byte0;
+ uint32_t emc0_training_rw_offset_ob_byte1;
+ uint32_t emc1_training_rw_offset_ob_byte1;
+ uint32_t emc0_training_rw_offset_ob_byte2;
+ uint32_t emc1_training_rw_offset_ob_byte2;
+ uint32_t emc0_training_rw_offset_ob_byte3;
+ uint32_t emc1_training_rw_offset_ob_byte3;
+ uint32_t emc0_training_rw_offset_ob_misc;
+ uint32_t emc1_training_rw_offset_ob_misc;
+ }
+ training_mod_regs;
+
+ uint32_t save_restore_mod_regs[12];
+
+ struct {
+ uint32_t mc_emem_arb_cfg;
+ uint32_t mc_emem_arb_outstanding_req;
+ uint32_t mc_emem_arb_refpb_hp_ctrl;
+ uint32_t mc_emem_arb_refpb_bank_ctrl;
+ uint32_t mc_emem_arb_timing_rcd;
+ uint32_t mc_emem_arb_timing_rp;
+ uint32_t mc_emem_arb_timing_rc;
+ uint32_t mc_emem_arb_timing_ras;
+ uint32_t mc_emem_arb_timing_faw;
+ uint32_t mc_emem_arb_timing_rrd;
+ uint32_t mc_emem_arb_timing_rap2pre;
+ uint32_t mc_emem_arb_timing_wap2pre;
+ uint32_t mc_emem_arb_timing_r2r;
+ uint32_t mc_emem_arb_timing_w2w;
+ uint32_t mc_emem_arb_timing_r2w;
+ uint32_t mc_emem_arb_timing_ccdmw;
+ uint32_t mc_emem_arb_timing_w2r;
+ uint32_t mc_emem_arb_timing_rfcpb;
+ uint32_t mc_emem_arb_da_turns;
+ uint32_t mc_emem_arb_da_covers;
+ uint32_t mc_emem_arb_misc0;
+ uint32_t mc_emem_arb_misc1;
+ uint32_t mc_emem_arb_misc2;
+ uint32_t mc_emem_arb_ring1_throttle;
+ uint32_t mc_emem_arb_dhyst_ctrl;
+ uint32_t mc_emem_arb_dhyst_timeout_util_0;
+ uint32_t mc_emem_arb_dhyst_timeout_util_1;
+ uint32_t mc_emem_arb_dhyst_timeout_util_2;
+ uint32_t mc_emem_arb_dhyst_timeout_util_3;
+ uint32_t mc_emem_arb_dhyst_timeout_util_4;
+ uint32_t mc_emem_arb_dhyst_timeout_util_5;
+ uint32_t mc_emem_arb_dhyst_timeout_util_6;
+ uint32_t mc_emem_arb_dhyst_timeout_util_7;
+ }
+ burst_mc_regs;
+
+ struct {
+ uint32_t mc_mll_mpcorer_ptsa_rate;
+ uint32_t mc_ftop_ptsa_rate;
+ uint32_t mc_ptsa_grant_decrement;
+ uint32_t mc_latency_allowance_xusb_0;
+ uint32_t mc_latency_allowance_xusb_1;
+ uint32_t mc_latency_allowance_tsec_0;
+ uint32_t mc_latency_allowance_sdmmca_0;
+ uint32_t mc_latency_allowance_sdmmcaa_0;
+ uint32_t mc_latency_allowance_sdmmc_0;
+ uint32_t mc_latency_allowance_sdmmcab_0;
+ uint32_t mc_latency_allowance_ppcs_0;
+ uint32_t mc_latency_allowance_ppcs_1;
+ uint32_t mc_latency_allowance_mpcore_0;
+ uint32_t mc_latency_allowance_hc_0;
+ uint32_t mc_latency_allowance_hc_1;
+ uint32_t mc_latency_allowance_avpc_0;
+ uint32_t mc_latency_allowance_gpu_0;
+ uint32_t mc_latency_allowance_gpu2_0;
+ uint32_t mc_latency_allowance_nvenc_0;
+ uint32_t mc_latency_allowance_nvdec_0;
+ uint32_t mc_latency_allowance_vic_0;
+ uint32_t mc_latency_allowance_vi2_0;
+ uint32_t mc_latency_allowance_isp2_0;
+ uint32_t mc_latency_allowance_isp2_1;
+ }
+ la_scale_regs;
+
+ uint32_t min_mrs_wait;
+ uint32_t emc_mrw;
+ uint32_t emc_mrw2;
+ uint32_t emc_mrw3;
+ uint32_t emc_mrw4;
+ uint32_t emc_mrw9;
+ uint32_t emc_mrs;
+ uint32_t emc_emrs;
+ uint32_t emc_emrs2;
+ uint32_t emc_auto_cal_config;
+ uint32_t emc_auto_cal_config2;
+ uint32_t emc_auto_cal_config3;
+ uint32_t emc_auto_cal_config4;
+ uint32_t emc_auto_cal_config5;
+ uint32_t emc_auto_cal_config6;
+ uint32_t emc_auto_cal_config7;
+ uint32_t emc_auto_cal_config8;
+ uint32_t emc_cfg_2;
+ uint32_t emc_sel_dpd_ctrl;
+ uint32_t emc_fdpd_ctrl_cmd_no_ramp;
+ uint32_t dll_clk_src;
+ uint32_t clk_out_enb_x_0_clk_enb_emc_dll;
+ uint32_t latency;
+};
+
+static_assert(sizeof(EristaMtcTable) == 0x1340);
diff --git a/Source/Atmosphere/stratosphere/loader/source/oc/test.cpp b/Source/Atmosphere/stratosphere/loader/source/oc/test.cpp
new file mode 100644
index 00000000..bc03ce5d
--- /dev/null
+++ b/Source/Atmosphere/stratosphere/loader/source/oc/test.cpp
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) Switch-OC-Suite
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#ifdef OC_TEST
+#include
+#include
+#include
+
+namespace ams::ldr::oc {
+ namespace pcv {
+ void Patch(uintptr_t mapped_nso, size_t nso_size);
+ }
+
+ namespace ptm {
+ void Patch(uintptr_t mapped_nso, size_t nso_size);
+ }
+}
+
+static void* ReadFile(const char* file_loc, long* out_size) {
+ FILE* fp;
+ void* buf;
+ long size;
+
+ fp = fopen(file_loc, "r");
+ if (!fp) {
+ fprintf(stderr, "Cannot open file: %s\n", file_loc);
+ exit(-1);
+ }
+
+ fseek(fp, 0, SEEK_END);
+ size = ftell(fp);
+ fseek(fp, 0, SEEK_SET);
+ buf = malloc((size + 1) * sizeof(char));
+ fread(buf, sizeof(char), size, fp);
+ fclose(fp);
+ if (size < 8192) {
+ fprintf(stderr, "File is too small to process: %u Bytes\n", size);
+ exit(-1);
+ }
+
+ *out_size = size;
+ return buf;
+}
+
+int main(int argc, char** argv) {
+ const char* pcv_opt = "-pcv";
+ const char* ptm_opt = "-ptm";
+ enum {
+ EXE_PCV,
+ EXE_PTM,
+ UNKNOWN
+ };
+ int option = UNKNOWN;
+ if (argc == 3) {
+ if (!strcmp(argv[1], pcv_opt))
+ option = EXE_PCV;
+
+ if (!strcmp(argv[1], ptm_opt))
+ option = EXE_PTM;
+ }
+ if (option == UNKNOWN) {
+ fprintf(stderr, "Usage: %s %s/%s \n", argv[0], pcv_opt, ptm_opt);
+ return -1;
+ }
+
+ long file_size;
+ void* file_buffer = ReadFile(argv[2], &file_size);
+ uintptr_t mapped_exe = reinterpret_cast(file_buffer);
+ size_t exe_size = reinterpret_cast(file_size * sizeof(char));
+ switch (option) {
+ case EXE_PCV:
+ ams::ldr::oc::pcv::Patch(mapped_exe, exe_size);
+ break;
+ case EXE_PTM:
+ ams::ldr::oc::ptm::Patch(mapped_exe, exe_size);
+ break;
+ }
+ free(file_buffer);
+ printf("Passed!\n");
+ return 0;
+}
+#endif