mirror of
https://github.com/Atmosphere-NX/Atmosphere
synced 2024-11-09 22:56:35 +00:00
fusee_cpp: implement SDRAM initialization
This commit is contained in:
parent
f2a1c60218
commit
349a16ce39
59 changed files with 4088 additions and 17 deletions
|
@ -10,9 +10,13 @@ SECTIONS {
|
|||
OVERLAY : NOCROSSREFS {
|
||||
.ovl_sein {
|
||||
fusee_secure_initialize.o(.text*);
|
||||
fusee_sdram.o(.text*);
|
||||
fusee_secure_initialize.o(.rodata*);
|
||||
fusee_sdram.o(.rodata*);
|
||||
fusee_secure_initialize.o(.data*);
|
||||
fusee_sdram.o(.data*);
|
||||
fusee_secure_initialize.o(.bss*);
|
||||
fusee_sdram.o(.bss*);
|
||||
FILL(0x00000000)
|
||||
. = ORIGIN(ovl) + LENGTH(ovl) - 1;
|
||||
BYTE(0x00);
|
||||
|
|
BIN
fusee_cpp/program/sdram_params/bin/sdram_params_erista_0.bin
Normal file
BIN
fusee_cpp/program/sdram_params/bin/sdram_params_erista_0.bin
Normal file
Binary file not shown.
BIN
fusee_cpp/program/sdram_params/bin/sdram_params_erista_1.bin
Normal file
BIN
fusee_cpp/program/sdram_params/bin/sdram_params_erista_1.bin
Normal file
Binary file not shown.
BIN
fusee_cpp/program/sdram_params/bin/sdram_params_erista_2.bin
Normal file
BIN
fusee_cpp/program/sdram_params/bin/sdram_params_erista_2.bin
Normal file
Binary file not shown.
BIN
fusee_cpp/program/sdram_params/bin/sdram_params_erista_3.bin
Normal file
BIN
fusee_cpp/program/sdram_params/bin/sdram_params_erista_3.bin
Normal file
Binary file not shown.
BIN
fusee_cpp/program/sdram_params/bin/sdram_params_erista_4.bin
Normal file
BIN
fusee_cpp/program/sdram_params/bin/sdram_params_erista_4.bin
Normal file
Binary file not shown.
BIN
fusee_cpp/program/sdram_params/bin/sdram_params_erista_5.bin
Normal file
BIN
fusee_cpp/program/sdram_params/bin/sdram_params_erista_5.bin
Normal file
Binary file not shown.
BIN
fusee_cpp/program/sdram_params/bin/sdram_params_erista_6.bin
Normal file
BIN
fusee_cpp/program/sdram_params/bin/sdram_params_erista_6.bin
Normal file
Binary file not shown.
BIN
fusee_cpp/program/sdram_params/bin/sdram_params_mariko_0.bin
Normal file
BIN
fusee_cpp/program/sdram_params/bin/sdram_params_mariko_0.bin
Normal file
Binary file not shown.
BIN
fusee_cpp/program/sdram_params/bin/sdram_params_mariko_1.bin
Normal file
BIN
fusee_cpp/program/sdram_params/bin/sdram_params_mariko_1.bin
Normal file
Binary file not shown.
BIN
fusee_cpp/program/sdram_params/bin/sdram_params_mariko_10.bin
Normal file
BIN
fusee_cpp/program/sdram_params/bin/sdram_params_mariko_10.bin
Normal file
Binary file not shown.
BIN
fusee_cpp/program/sdram_params/bin/sdram_params_mariko_11.bin
Normal file
BIN
fusee_cpp/program/sdram_params/bin/sdram_params_mariko_11.bin
Normal file
Binary file not shown.
BIN
fusee_cpp/program/sdram_params/bin/sdram_params_mariko_12.bin
Normal file
BIN
fusee_cpp/program/sdram_params/bin/sdram_params_mariko_12.bin
Normal file
Binary file not shown.
BIN
fusee_cpp/program/sdram_params/bin/sdram_params_mariko_2.bin
Normal file
BIN
fusee_cpp/program/sdram_params/bin/sdram_params_mariko_2.bin
Normal file
Binary file not shown.
BIN
fusee_cpp/program/sdram_params/bin/sdram_params_mariko_3.bin
Normal file
BIN
fusee_cpp/program/sdram_params/bin/sdram_params_mariko_3.bin
Normal file
Binary file not shown.
BIN
fusee_cpp/program/sdram_params/bin/sdram_params_mariko_4.bin
Normal file
BIN
fusee_cpp/program/sdram_params/bin/sdram_params_mariko_4.bin
Normal file
Binary file not shown.
BIN
fusee_cpp/program/sdram_params/bin/sdram_params_mariko_5.bin
Normal file
BIN
fusee_cpp/program/sdram_params/bin/sdram_params_mariko_5.bin
Normal file
Binary file not shown.
BIN
fusee_cpp/program/sdram_params/bin/sdram_params_mariko_6.bin
Normal file
BIN
fusee_cpp/program/sdram_params/bin/sdram_params_mariko_6.bin
Normal file
Binary file not shown.
BIN
fusee_cpp/program/sdram_params/bin/sdram_params_mariko_7.bin
Normal file
BIN
fusee_cpp/program/sdram_params/bin/sdram_params_mariko_7.bin
Normal file
Binary file not shown.
BIN
fusee_cpp/program/sdram_params/bin/sdram_params_mariko_8.bin
Normal file
BIN
fusee_cpp/program/sdram_params/bin/sdram_params_mariko_8.bin
Normal file
Binary file not shown.
BIN
fusee_cpp/program/sdram_params/bin/sdram_params_mariko_9.bin
Normal file
BIN
fusee_cpp/program/sdram_params/bin/sdram_params_mariko_9.bin
Normal file
Binary file not shown.
BIN
fusee_cpp/program/sdram_params/lz/sdram_params_erista_0.lz4
Normal file
BIN
fusee_cpp/program/sdram_params/lz/sdram_params_erista_0.lz4
Normal file
Binary file not shown.
BIN
fusee_cpp/program/sdram_params/lz/sdram_params_erista_1.lz4
Normal file
BIN
fusee_cpp/program/sdram_params/lz/sdram_params_erista_1.lz4
Normal file
Binary file not shown.
BIN
fusee_cpp/program/sdram_params/lz/sdram_params_erista_2.lz4
Normal file
BIN
fusee_cpp/program/sdram_params/lz/sdram_params_erista_2.lz4
Normal file
Binary file not shown.
BIN
fusee_cpp/program/sdram_params/lz/sdram_params_erista_3.lz4
Normal file
BIN
fusee_cpp/program/sdram_params/lz/sdram_params_erista_3.lz4
Normal file
Binary file not shown.
BIN
fusee_cpp/program/sdram_params/lz/sdram_params_erista_4.lz4
Normal file
BIN
fusee_cpp/program/sdram_params/lz/sdram_params_erista_4.lz4
Normal file
Binary file not shown.
BIN
fusee_cpp/program/sdram_params/lz/sdram_params_erista_5.lz4
Normal file
BIN
fusee_cpp/program/sdram_params/lz/sdram_params_erista_5.lz4
Normal file
Binary file not shown.
BIN
fusee_cpp/program/sdram_params/lz/sdram_params_erista_6.lz4
Normal file
BIN
fusee_cpp/program/sdram_params/lz/sdram_params_erista_6.lz4
Normal file
Binary file not shown.
BIN
fusee_cpp/program/sdram_params/lz/sdram_params_mariko_0.lz4
Normal file
BIN
fusee_cpp/program/sdram_params/lz/sdram_params_mariko_0.lz4
Normal file
Binary file not shown.
BIN
fusee_cpp/program/sdram_params/lz/sdram_params_mariko_1.lz4
Normal file
BIN
fusee_cpp/program/sdram_params/lz/sdram_params_mariko_1.lz4
Normal file
Binary file not shown.
BIN
fusee_cpp/program/sdram_params/lz/sdram_params_mariko_10.lz4
Normal file
BIN
fusee_cpp/program/sdram_params/lz/sdram_params_mariko_10.lz4
Normal file
Binary file not shown.
BIN
fusee_cpp/program/sdram_params/lz/sdram_params_mariko_11.lz4
Normal file
BIN
fusee_cpp/program/sdram_params/lz/sdram_params_mariko_11.lz4
Normal file
Binary file not shown.
BIN
fusee_cpp/program/sdram_params/lz/sdram_params_mariko_12.lz4
Normal file
BIN
fusee_cpp/program/sdram_params/lz/sdram_params_mariko_12.lz4
Normal file
Binary file not shown.
BIN
fusee_cpp/program/sdram_params/lz/sdram_params_mariko_2.lz4
Normal file
BIN
fusee_cpp/program/sdram_params/lz/sdram_params_mariko_2.lz4
Normal file
Binary file not shown.
BIN
fusee_cpp/program/sdram_params/lz/sdram_params_mariko_3.lz4
Normal file
BIN
fusee_cpp/program/sdram_params/lz/sdram_params_mariko_3.lz4
Normal file
Binary file not shown.
BIN
fusee_cpp/program/sdram_params/lz/sdram_params_mariko_4.lz4
Normal file
BIN
fusee_cpp/program/sdram_params/lz/sdram_params_mariko_4.lz4
Normal file
Binary file not shown.
BIN
fusee_cpp/program/sdram_params/lz/sdram_params_mariko_5.lz4
Normal file
BIN
fusee_cpp/program/sdram_params/lz/sdram_params_mariko_5.lz4
Normal file
Binary file not shown.
BIN
fusee_cpp/program/sdram_params/lz/sdram_params_mariko_6.lz4
Normal file
BIN
fusee_cpp/program/sdram_params/lz/sdram_params_mariko_6.lz4
Normal file
Binary file not shown.
BIN
fusee_cpp/program/sdram_params/lz/sdram_params_mariko_7.lz4
Normal file
BIN
fusee_cpp/program/sdram_params/lz/sdram_params_mariko_7.lz4
Normal file
Binary file not shown.
BIN
fusee_cpp/program/sdram_params/lz/sdram_params_mariko_8.lz4
Normal file
BIN
fusee_cpp/program/sdram_params/lz/sdram_params_mariko_8.lz4
Normal file
Binary file not shown.
BIN
fusee_cpp/program/sdram_params/lz/sdram_params_mariko_9.lz4
Normal file
BIN
fusee_cpp/program/sdram_params/lz/sdram_params_mariko_9.lz4
Normal file
Binary file not shown.
|
@ -15,6 +15,7 @@
|
|||
*/
|
||||
#include <exosphere.hpp>
|
||||
#include "fusee_secure_initialize.hpp"
|
||||
#include "fusee_sdram.hpp"
|
||||
|
||||
namespace ams::nxboot {
|
||||
|
||||
|
@ -22,6 +23,9 @@ namespace ams::nxboot {
|
|||
/* Perform secure hardware initialization. */
|
||||
SecureInitialize(true);
|
||||
|
||||
/* Initialize Sdram. */
|
||||
InitializeSdram();
|
||||
|
||||
/* TODO */
|
||||
AMS_INFINITE_LOOP();
|
||||
}
|
||||
|
|
970
fusee_cpp/program/source/fusee_sdram.cpp
Normal file
970
fusee_cpp/program/source/fusee_sdram.cpp
Normal file
|
@ -0,0 +1,970 @@
|
|||
/*
|
||||
* Copyright (c) 2018-2020 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include <exosphere.hpp>
|
||||
#include "fusee_sdram.hpp"
|
||||
#include "fusee_uncompress.hpp"
|
||||
|
||||
namespace ams::nxboot {
|
||||
|
||||
namespace {
|
||||
|
||||
template<fuse::SocType SocType>
|
||||
struct SdramParamsImpl;
|
||||
|
||||
template<> struct SdramParamsImpl<fuse::SocType_Erista> { using Type = br::erista::BootSdramParams; };
|
||||
template<> struct SdramParamsImpl<fuse::SocType_Mariko> { using Type = br::mariko::BootSdramParams; };
|
||||
|
||||
template<fuse::SocType SocType>
|
||||
using BootSdramParams = SdramParamsImpl<SocType>::Type;
|
||||
|
||||
constexpr inline const uintptr_t CLKRST = secmon::MemoryRegionPhysicalDeviceClkRst.GetAddress();
|
||||
constexpr inline const uintptr_t PMC = secmon::MemoryRegionPhysicalDevicePmc.GetAddress();
|
||||
constexpr inline const uintptr_t APB = secmon::MemoryRegionPhysicalDeviceApbMisc.GetAddress();
|
||||
constexpr inline const uintptr_t MC = secmon::MemoryRegionPhysicalDeviceMemoryController.GetAddress();
|
||||
constexpr inline const uintptr_t EMC = EMC_ADDRESS(0);
|
||||
constexpr inline const uintptr_t AHB = AHB_ARBC(0);
|
||||
|
||||
#include "fusee_sdram_params.inc"
|
||||
|
||||
void *GetSdramParams(fuse::SocType soc_type) {
|
||||
/* Get DRAM Id. */
|
||||
const auto dram_id = fuse::GetDramId();
|
||||
|
||||
/* Extract to work buffer. */
|
||||
void *sdram_params_work_buffer = reinterpret_cast<void *>(0x4003D000);
|
||||
|
||||
if (soc_type == fuse::SocType_Erista) {
|
||||
#define HANDLE_DRAM_CASE(_DRAM_ID_, _INDEX_) \
|
||||
case _DRAM_ID_: \
|
||||
Uncompress(sdram_params_work_buffer, sizeof(BootSdramParams<fuse::SocType_Erista>), SdramParamsErista##_INDEX_, sizeof(SdramParamsErista##_INDEX_)); \
|
||||
break;
|
||||
switch (dram_id) {
|
||||
HANDLE_DRAM_CASE(0, 0)
|
||||
HANDLE_DRAM_CASE(1, 1)
|
||||
HANDLE_DRAM_CASE(2, 2)
|
||||
HANDLE_DRAM_CASE(3, 3)
|
||||
HANDLE_DRAM_CASE(4, 4)
|
||||
HANDLE_DRAM_CASE(5, 5)
|
||||
HANDLE_DRAM_CASE(6, 6)
|
||||
default:
|
||||
AMS_ABORT("Invalid DRAM id");
|
||||
}
|
||||
#undef HANDLE_DRAM_CASE
|
||||
|
||||
return static_cast<BootSdramParams<fuse::SocType_Erista> *>(sdram_params_work_buffer);
|
||||
} else /* if (soc_type == fuse::SocType_Mariko) */ {
|
||||
#define HANDLE_DRAM_CASE(_DRAM_ID_, _INDEX_) \
|
||||
case _DRAM_ID_: \
|
||||
Uncompress(sdram_params_work_buffer, sizeof(BootSdramParams<fuse::SocType_Mariko>), SdramParamsMariko##_INDEX_, sizeof(SdramParamsMariko##_INDEX_)); \
|
||||
break;
|
||||
switch (dram_id) {
|
||||
HANDLE_DRAM_CASE( 3, 12)
|
||||
HANDLE_DRAM_CASE( 7, 0)
|
||||
HANDLE_DRAM_CASE( 8, 1)
|
||||
HANDLE_DRAM_CASE( 9, 2)
|
||||
HANDLE_DRAM_CASE(10, 3)
|
||||
HANDLE_DRAM_CASE(11, 4)
|
||||
HANDLE_DRAM_CASE(12, 1)
|
||||
HANDLE_DRAM_CASE(13, 2)
|
||||
HANDLE_DRAM_CASE(14, 3)
|
||||
HANDLE_DRAM_CASE(15, 4)
|
||||
HANDLE_DRAM_CASE(16, 5)
|
||||
HANDLE_DRAM_CASE(17, 6)
|
||||
HANDLE_DRAM_CASE(18, 7)
|
||||
HANDLE_DRAM_CASE(19, 6)
|
||||
HANDLE_DRAM_CASE(20, 8)
|
||||
HANDLE_DRAM_CASE(21, 9)
|
||||
HANDLE_DRAM_CASE(22, 10)
|
||||
HANDLE_DRAM_CASE(23, 7)
|
||||
HANDLE_DRAM_CASE(24, 6)
|
||||
HANDLE_DRAM_CASE(25, 11)
|
||||
HANDLE_DRAM_CASE(26, 11)
|
||||
HANDLE_DRAM_CASE(27, 11)
|
||||
HANDLE_DRAM_CASE(28, 7)
|
||||
default:
|
||||
AMS_ABORT("Invalid DRAM id");
|
||||
}
|
||||
#undef HANDLE_DRAM_CASE
|
||||
|
||||
return static_cast<BootSdramParams<fuse::SocType_Mariko> *>(sdram_params_work_buffer);
|
||||
}
|
||||
}
|
||||
|
||||
template<fuse::SocType SocType>
|
||||
void SpareWrite(u32 reg, u32 value) {
|
||||
if (reg) {
|
||||
if constexpr (SocType == fuse::SocType_Erista) {
|
||||
reg::Write(reinterpret_cast<volatile u32 *>(reg), value);
|
||||
} else if constexpr (SocType == fuse::SocType_Mariko) {
|
||||
/* TODO: Validate the write. */
|
||||
reg::Write(reinterpret_cast<volatile u32 *>(reg), value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
template<fuse::SocType SocType>
|
||||
void InitializeSdramImpl(BootSdramParams<SocType> *params) {
|
||||
/* Perform initial soc-specific setup. */
|
||||
if constexpr (SocType == fuse::SocType_Erista) {
|
||||
/* Enable sel_dpd on unused pins. */
|
||||
reg::Write(PMC + APBDEV_PMC_IO_DPD3_REQ, (((params->EmcPmcScratch1 & 0x3FFFFFFF) | 0x80000000) ^ 0xFFFF) & 0xC000FFFF);
|
||||
util::WaitMicroSeconds(params->PmcIoDpd3ReqWait);
|
||||
|
||||
/* Disable e_dpd_vttgen. */
|
||||
u32 dpd4 = (params->EmcPmcScratch2 & 0x3FFFFFFF) | 0x80000000;
|
||||
reg::Write(PMC + APBDEV_PMC_IO_DPD4_REQ, (dpd4 ^ 0x3FFF0000) & 0xFFFF0000);
|
||||
util::WaitMicroSeconds(params->PmcIoDpd4ReqWait);
|
||||
|
||||
/* Disable e_dpd_bg. */
|
||||
reg::Write(PMC + APBDEV_PMC_IO_DPD4_REQ, (dpd4 ^ 0x0000FFFF) & 0xC000FFFF);
|
||||
util::WaitMicroSeconds(params->PmcIoDpd4ReqWait);
|
||||
|
||||
reg::Write(PMC + APBDEV_PMC_WEAK_BIAS, 0);
|
||||
util::WaitMicroSeconds(1);
|
||||
|
||||
/* Enable memory clock. */
|
||||
{
|
||||
/* Initialize pllm. */
|
||||
{
|
||||
reg::Write(CLKRST + CLK_RST_CONTROLLER_PLLM_MISC1, params->PllMSetupControl);
|
||||
reg::Write(CLKRST + CLK_RST_CONTROLLER_PLLM_MISC2, 0);
|
||||
|
||||
reg::Write(CLKRST + CLK_RST_CONTROLLER_PLLM_BASE, CLK_RST_REG_BITS_ENUM (PLLM_BASE_PLLM_ENABLE, DISABLE),
|
||||
CLK_RST_REG_BITS_VALUE(PLLM_BASE_PLLM_DIVP, params->PllMPostDivider),
|
||||
CLK_RST_REG_BITS_VALUE(PLLM_BASE_PLLM_DIVN, params->PllMFeedbackDivider),
|
||||
CLK_RST_REG_BITS_VALUE(PLLM_BASE_PLLM_DIVM, params->PllMInputDivider));
|
||||
|
||||
|
||||
reg::Write(CLKRST + CLK_RST_CONTROLLER_PLLM_BASE, CLK_RST_REG_BITS_ENUM (PLLM_BASE_PLLM_ENABLE, ENABLE),
|
||||
CLK_RST_REG_BITS_VALUE(PLLM_BASE_PLLM_DIVP, params->PllMPostDivider),
|
||||
CLK_RST_REG_BITS_VALUE(PLLM_BASE_PLLM_DIVN, params->PllMFeedbackDivider),
|
||||
CLK_RST_REG_BITS_VALUE(PLLM_BASE_PLLM_DIVM, params->PllMInputDivider));
|
||||
|
||||
/* Wait 300us ffor stability. */
|
||||
const auto stable_time = util::GetMicroSeconds() + 300;
|
||||
while (true) {
|
||||
if (reg::HasValue(CLKRST + CLK_RST_CONTROLLER_PLLM_BASE, CLK_RST_REG_BITS_ENUM(PLLM_BASE_PLLM_LOCK, LOCK))) {
|
||||
util::WaitMicroSeconds(10);
|
||||
break;
|
||||
}
|
||||
|
||||
if (util::GetMicroSeconds() >= stable_time) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Set CLK_SOURCE_EMC, using McEmcmArbMisc0 as MC_EMC_SAME_FREQ. */
|
||||
reg::Write(CLKRST + CLK_RST_CONTROLLER_CLK_SOURCE_EMC, (params->EmcClockSource & ~0x10000) | ((params->McEmemArbMisc0 >> 11) & 0x10000));
|
||||
|
||||
if (params->EmcClockSourceDll) {
|
||||
reg::Write(CLKRST + CLK_RST_CONTROLLER_CLK_SOURCE_EMC_DLL, params->EmcClockSourceDll);
|
||||
}
|
||||
|
||||
if (params->ClearClk2Mc1) {
|
||||
reg::Write(CLKRST + CLK_RST_CONTROLLER_CLK_ENB_W_CLR, CLK_RST_REG_BITS_ENUM(CLK_ENB_W_CLK_ENB_MC1, ENABLE));
|
||||
}
|
||||
|
||||
/* Enable EMC/Mem. */
|
||||
reg::Write(CLKRST + CLK_RST_CONTROLLER_CLK_ENB_H_SET, CLK_RST_REG_BITS_ENUM(CLK_ENB_H_CLK_ENB_EMC, ENABLE),
|
||||
CLK_RST_REG_BITS_ENUM(CLK_ENB_H_CLK_ENB_MEM, ENABLE));
|
||||
|
||||
/* Enable EMC DLL. */
|
||||
reg::Write(CLKRST + CLK_RST_CONTROLLER_CLK_ENB_X_SET, CLK_RST_REG_BITS_ENUM(CLK_ENB_X_CLK_ENB_EMC_DLL, ENABLE));
|
||||
}
|
||||
|
||||
/* Clear reset for MEM/EMC. */
|
||||
reg::Write(CLKRST + CLK_RST_CONTROLLER_RST_DEV_H_CLR, CLK_RST_REG_BITS_ENUM(RST_DEV_H_EMC_RST, ENABLE),
|
||||
CLK_RST_REG_BITS_ENUM(RST_DEV_H_MEM_RST, ENABLE));
|
||||
|
||||
/* Set pad macros. */
|
||||
reg::Write(EMC + EMC_PMACRO_VTTGEN_CTRL_0, params->EmcPmacroVttgenCtrl0);
|
||||
reg::Write(EMC + EMC_PMACRO_VTTGEN_CTRL_1, params->EmcPmacroVttgenCtrl1);
|
||||
reg::Write(EMC + EMC_PMACRO_VTTGEN_CTRL_2, params->EmcPmacroVttgenCtrl2);
|
||||
|
||||
reg::Write(EMC + EMC_TIMING_CONTROL, 1);
|
||||
util::WaitMicroSeconds(1);
|
||||
|
||||
/* Select EMC write mux. */
|
||||
reg::Write(EMC + EMC_DBG, params->EmcDbg | reg::EncodeValue(EMC_REG_BITS_VALUE(DBG_WRITE_MUX, params->EmcDbgWriteMux)));
|
||||
|
||||
/* Patch 2. */
|
||||
SpareWrite<SocType>(params->EmcBctSpare2, params->EmcBctSpare3);
|
||||
} else if constexpr (SocType == fuse::SocType_Mariko) {
|
||||
/* Patch 1 */
|
||||
SpareWrite<SocType>(params->EmcBctSpare0, params->EmcBctSpare1);
|
||||
|
||||
if (params->ClkRstControllerPllmMisc2OverrideEnable) {
|
||||
reg::Write(CLKRST + CLK_RST_CONTROLLER_PLLM_MISC2, params->ClkRstControllerPllmMisc2Override);
|
||||
}
|
||||
|
||||
/* Enable sel_dpd on unused pins. */
|
||||
{
|
||||
u32 val = (~params->EmcPmcScratch1 & 0x00000FFF) << 18;
|
||||
val |= ((~params->EmcPmcScratch1 & 0x00001000) << 19) | ((~params->EmcPmcScratch1 & 0x00008000) << 15);
|
||||
reg::Write(PMC + APBDEV_PMC_WEAK_BIAS, val);
|
||||
}
|
||||
|
||||
reg::Write(PMC + APBDEV_PMC_IO_DPD3_REQ, 0x80000000 | (~params->EmcPmcScratch1 & 0x00009FFF));
|
||||
util::WaitMicroSeconds(params->PmcIoDpd3ReqWait);
|
||||
|
||||
/* Disable e_dpd_vttgen. */
|
||||
reg::Write(PMC + APBDEV_PMC_IO_DPD4_REQ, 0x80000000 | (~params->EmcPmcScratch2 & 0x3FFF0000));
|
||||
util::WaitMicroSeconds(params->PmcIoDpd4ReqWait);
|
||||
|
||||
/* Disable e_dpd_bg. */
|
||||
reg::Write(PMC + APBDEV_PMC_IO_DPD4_REQ, 0x80000000 | (~params->EmcPmcScratch2 & 0x00001FFF));
|
||||
util::WaitMicroSeconds(1);
|
||||
}
|
||||
|
||||
/* Common phase 1. */
|
||||
|
||||
/* Program CMD mapping. */
|
||||
reg::Write(EMC + EMC_FBIO_CFG7, params->EmcFbioCfg7);
|
||||
|
||||
reg::Write(EMC + EMC_CMD_MAPPING_CMD0_0, params->EmcCmdMappingCmd0_0);
|
||||
reg::Write(EMC + EMC_CMD_MAPPING_CMD0_1, params->EmcCmdMappingCmd0_1);
|
||||
reg::Write(EMC + EMC_CMD_MAPPING_CMD0_2, params->EmcCmdMappingCmd0_2);
|
||||
reg::Write(EMC + EMC_CMD_MAPPING_CMD1_0, params->EmcCmdMappingCmd1_0);
|
||||
reg::Write(EMC + EMC_CMD_MAPPING_CMD1_1, params->EmcCmdMappingCmd1_1);
|
||||
reg::Write(EMC + EMC_CMD_MAPPING_CMD1_2, params->EmcCmdMappingCmd1_2);
|
||||
reg::Write(EMC + EMC_CMD_MAPPING_CMD2_0, params->EmcCmdMappingCmd2_0);
|
||||
reg::Write(EMC + EMC_CMD_MAPPING_CMD2_1, params->EmcCmdMappingCmd2_1);
|
||||
reg::Write(EMC + EMC_CMD_MAPPING_CMD2_2, params->EmcCmdMappingCmd2_2);
|
||||
reg::Write(EMC + EMC_CMD_MAPPING_CMD3_0, params->EmcCmdMappingCmd3_0);
|
||||
reg::Write(EMC + EMC_CMD_MAPPING_CMD3_1, params->EmcCmdMappingCmd3_1);
|
||||
reg::Write(EMC + EMC_CMD_MAPPING_CMD3_2, params->EmcCmdMappingCmd3_2);
|
||||
reg::Write(EMC + EMC_CMD_MAPPING_BYTE, params->EmcCmdMappingByte);
|
||||
|
||||
/* Program brick mapping. */
|
||||
reg::Write(EMC + EMC_PMACRO_BRICK_MAPPING_0, params->EmcPmacroBrickMapping0);
|
||||
reg::Write(EMC + EMC_PMACRO_BRICK_MAPPING_1, params->EmcPmacroBrickMapping1);
|
||||
reg::Write(EMC + EMC_PMACRO_BRICK_MAPPING_2, params->EmcPmacroBrickMapping2);
|
||||
|
||||
/* Specific phase 2. */
|
||||
if constexpr (SocType == fuse::SocType_Erista) {
|
||||
reg::Write(EMC + EMC_PMACRO_BRICK_CTRL_RFU1, (params->EmcPmacroBrickCtrlRfu1 | ~0x01120112) & 0x1FFF1FFF);
|
||||
} else if constexpr (SocType == fuse::SocType_Mariko) {
|
||||
/* Set pad macros. */
|
||||
reg::Write(EMC + EMC_PMACRO_VTTGEN_CTRL_0, params->EmcPmacroVttgenCtrl0);
|
||||
reg::Write(EMC + EMC_PMACRO_VTTGEN_CTRL_1, params->EmcPmacroVttgenCtrl1);
|
||||
reg::Write(EMC + EMC_PMACRO_VTTGEN_CTRL_2, params->EmcPmacroVttgenCtrl2);
|
||||
|
||||
/* Set pad macro bias. */
|
||||
reg::Write(EMC + EMC_PMACRO_BG_BIAS_CTRL_0, params->EmcPmacroBgBiasCtrl0);
|
||||
|
||||
SpareWrite<SocType>(params->EmcBctSpareSecure0, params->EmcBctSpareSecure1);
|
||||
SpareWrite<SocType>(params->EmcBctSpareSecure2, params->EmcBctSpareSecure3);
|
||||
SpareWrite<SocType>(params->EmcBctSpareSecure4, params->EmcBctSpareSecure5);
|
||||
|
||||
/* Trigger timing update. */
|
||||
reg::Write(EMC + EMC_TIMING_CONTROL, 1);
|
||||
util::WaitMicroSeconds(params->PmcVddpSelWait + 2);
|
||||
|
||||
/* Set clock sources. */
|
||||
reg::Write(CLKRST + CLK_RST_CONTROLLER_CLK_SOURCE_EMC, params->EmcClockSource);
|
||||
reg::Write(CLKRST + CLK_RST_CONTROLLER_CLK_SOURCE_EMC_DLL, params->EmcClockSourceDll);
|
||||
|
||||
/* Select EMC write mux. */
|
||||
reg::Write(EMC + EMC_DBG, params->EmcDbg | reg::EncodeValue(EMC_REG_BITS_VALUE(DBG_WRITE_MUX, params->EmcDbgWriteMux)));
|
||||
|
||||
/* Patch 2. */
|
||||
SpareWrite<SocType>(params->EmcBctSpare2, params->EmcBctSpare3);
|
||||
}
|
||||
|
||||
/* Common phase 2. */
|
||||
reg::Write(EMC + EMC_CONFIG_SAMPLE_DELAY, params->EmcConfigSampleDelay);
|
||||
reg::Write(EMC + EMC_FBIO_CFG8, params->EmcFbioCfg8);
|
||||
|
||||
/* Program swizzle registers. */
|
||||
reg::Write(EMC + EMC_SWIZZLE_RANK0_BYTE0, params->EmcSwizzleRank0Byte0);
|
||||
reg::Write(EMC + EMC_SWIZZLE_RANK0_BYTE1, params->EmcSwizzleRank0Byte1);
|
||||
reg::Write(EMC + EMC_SWIZZLE_RANK0_BYTE2, params->EmcSwizzleRank0Byte2);
|
||||
reg::Write(EMC + EMC_SWIZZLE_RANK0_BYTE3, params->EmcSwizzleRank0Byte3);
|
||||
reg::Write(EMC + EMC_SWIZZLE_RANK1_BYTE0, params->EmcSwizzleRank1Byte0);
|
||||
reg::Write(EMC + EMC_SWIZZLE_RANK1_BYTE1, params->EmcSwizzleRank1Byte1);
|
||||
reg::Write(EMC + EMC_SWIZZLE_RANK1_BYTE2, params->EmcSwizzleRank1Byte2);
|
||||
reg::Write(EMC + EMC_SWIZZLE_RANK1_BYTE3, params->EmcSwizzleRank1Byte3);
|
||||
|
||||
/* Patch 3. */
|
||||
SpareWrite<SocType>(params->EmcBctSpare6, params->EmcBctSpare7);
|
||||
|
||||
/* Program pad controls. */
|
||||
reg::Write(EMC + EMC_XM2COMPPADCTRL, params->EmcXm2CompPadCtrl);
|
||||
reg::Write(EMC + EMC_XM2COMPPADCTRL2, params->EmcXm2CompPadCtrl2);
|
||||
reg::Write(EMC + EMC_XM2COMPPADCTRL3, params->EmcXm2CompPadCtrl3);
|
||||
|
||||
/* Program autocal controls with shadowed register fields. */
|
||||
reg::Write(EMC + EMC_AUTO_CAL_CONFIG2, params->EmcAutoCalConfig2);
|
||||
reg::Write(EMC + EMC_AUTO_CAL_CONFIG3, params->EmcAutoCalConfig3);
|
||||
reg::Write(EMC + EMC_AUTO_CAL_CONFIG4, params->EmcAutoCalConfig4);
|
||||
reg::Write(EMC + EMC_AUTO_CAL_CONFIG5, params->EmcAutoCalConfig5);
|
||||
reg::Write(EMC + EMC_AUTO_CAL_CONFIG6, params->EmcAutoCalConfig6);
|
||||
reg::Write(EMC + EMC_AUTO_CAL_CONFIG7, params->EmcAutoCalConfig7);
|
||||
reg::Write(EMC + EMC_AUTO_CAL_CONFIG8, params->EmcAutoCalConfig8);
|
||||
|
||||
reg::Write(EMC + EMC_PMACRO_RX_TERM, params->EmcPmacroRxTerm);
|
||||
reg::Write(EMC + EMC_PMACRO_DQ_TX_DRV, params->EmcPmacroDqTxDrv);
|
||||
reg::Write(EMC + EMC_PMACRO_CA_TX_DRV, params->EmcPmacroCaTxDrv);
|
||||
reg::Write(EMC + EMC_PMACRO_CMD_TX_DRV, params->EmcPmacroCmdTxDrv);
|
||||
reg::Write(EMC + EMC_PMACRO_AUTOCAL_CFG_COMMON, params->EmcPmacroAutocalCfgCommon);
|
||||
reg::Write(EMC + EMC_AUTO_CAL_CHANNEL, params->EmcAutoCalChannel);
|
||||
reg::Write(EMC + EMC_PMACRO_ZCTRL, params->EmcPmacroZctrl);
|
||||
|
||||
if constexpr (SocType == fuse::SocType_Erista) {
|
||||
reg::Write(EMC + EMC_DLL_CFG_0, params->EmcDllCfg0);
|
||||
reg::Write(EMC + EMC_DLL_CFG_1, params->EmcDllCfg1);
|
||||
} else if constexpr (SocType == fuse::SocType_Mariko) {
|
||||
reg::Write(EMC + EMC_PMACRO_DLL_CFG_0, params->EmcPmacroDllCfg0);
|
||||
reg::Write(EMC + EMC_PMACRO_DLL_CFG_1, params->EmcPmacroDllCfg1);
|
||||
}
|
||||
|
||||
reg::Write(EMC + EMC_CFG_DIG_DLL_1, params->EmcCfgDigDll_1);
|
||||
|
||||
reg::Write(EMC + EMC_DATA_BRLSHFT_0, params->EmcDataBrlshft0);
|
||||
reg::Write(EMC + EMC_DATA_BRLSHFT_1, params->EmcDataBrlshft1);
|
||||
reg::Write(EMC + EMC_DQS_BRLSHFT_0, params->EmcDqsBrlshft0);
|
||||
reg::Write(EMC + EMC_DQS_BRLSHFT_1, params->EmcDqsBrlshft1);
|
||||
reg::Write(EMC + EMC_CMD_BRLSHFT_0, params->EmcCmdBrlshft0);
|
||||
reg::Write(EMC + EMC_CMD_BRLSHFT_1, params->EmcCmdBrlshft1);
|
||||
reg::Write(EMC + EMC_CMD_BRLSHFT_2, params->EmcCmdBrlshft2);
|
||||
reg::Write(EMC + EMC_CMD_BRLSHFT_3, params->EmcCmdBrlshft3);
|
||||
reg::Write(EMC + EMC_QUSE_BRLSHFT_0, params->EmcQuseBrlshft0);
|
||||
reg::Write(EMC + EMC_QUSE_BRLSHFT_1, params->EmcQuseBrlshft1);
|
||||
reg::Write(EMC + EMC_QUSE_BRLSHFT_2, params->EmcQuseBrlshft2);
|
||||
reg::Write(EMC + EMC_QUSE_BRLSHFT_3, params->EmcQuseBrlshft3);
|
||||
|
||||
if constexpr (SocType == fuse::SocType_Erista) {
|
||||
reg::Write(EMC + EMC_PMACRO_BRICK_CTRL_RFU1, (params->EmcPmacroBrickCtrlRfu1 | ~0x01BF01BF) & 0x1FFF1FFF);
|
||||
} else if constexpr (SocType == fuse::SocType_Mariko) {
|
||||
reg::Write(EMC + EMC_PMACRO_BRICK_CTRL_RFU1, params->EmcPmacroBrickCtrlRfu1);
|
||||
}
|
||||
|
||||
reg::Write(EMC + EMC_PMACRO_PAD_CFG_CTRL, params->EmcPmacroPadCfgCtrl);
|
||||
reg::Write(EMC + EMC_PMACRO_CMD_BRICK_CTRL_FDPD, params->EmcPmacroCmdBrickCtrlFdpd);
|
||||
|
||||
if constexpr (SocType == fuse::SocType_Erista) {
|
||||
reg::Write(EMC + EMC_PMACRO_BRICK_CTRL_RFU2, params->EmcPmacroBrickCtrlRfu2 & 0xFF7FFF7F);
|
||||
} else if constexpr (SocType == fuse::SocType_Mariko) {
|
||||
reg::Write(EMC + EMC_PMACRO_BRICK_CTRL_RFU2, params->EmcPmacroBrickCtrlRfu2);
|
||||
}
|
||||
|
||||
reg::Write(EMC + EMC_PMACRO_DATA_BRICK_CTRL_FDPD, params->EmcPmacroDataBrickCtrlFdpd);
|
||||
|
||||
if constexpr (SocType == fuse::SocType_Erista) {
|
||||
reg::Write(EMC + EMC_PMACRO_BG_BIAS_CTRL_0, params->EmcPmacroBgBiasCtrl0);
|
||||
}
|
||||
|
||||
reg::Write(EMC + EMC_PMACRO_DATA_PAD_RX_CTRL, params->EmcPmacroDataPadRxCtrl);
|
||||
reg::Write(EMC + EMC_PMACRO_CMD_PAD_RX_CTRL, params->EmcPmacroCmdPadRxCtrl);
|
||||
reg::Write(EMC + EMC_PMACRO_DATA_PAD_TX_CTRL, params->EmcPmacroDataPadTxCtrl);
|
||||
reg::Write(EMC + EMC_PMACRO_DATA_RX_TERM_MODE, params->EmcPmacroDataRxTermMode);
|
||||
reg::Write(EMC + EMC_PMACRO_CMD_RX_TERM_MODE, params->EmcPmacroCmdRxTermMode);
|
||||
|
||||
if constexpr (SocType == fuse::SocType_Erista) {
|
||||
reg::Write(EMC + EMC_PMACRO_CMD_PAD_TX_CTRL, params->EmcPmacroCmdPadTxCtrl);
|
||||
} else if constexpr (SocType == fuse::SocType_Mariko) {
|
||||
reg::Write(EMC + EMC_PMACRO_CMD_PAD_TX_CTRL, params->EmcPmacroCmdPadTxCtrl & 0xEFFFFFFF);
|
||||
}
|
||||
|
||||
reg::Write(EMC + EMC_CFG_3, params->EmcCfg3);
|
||||
|
||||
reg::Write(EMC + EMC_PMACRO_TX_PWRD_0, params->EmcPmacroTxPwrd0);
|
||||
reg::Write(EMC + EMC_PMACRO_TX_PWRD_1, params->EmcPmacroTxPwrd1);
|
||||
reg::Write(EMC + EMC_PMACRO_TX_PWRD_2, params->EmcPmacroTxPwrd2);
|
||||
reg::Write(EMC + EMC_PMACRO_TX_PWRD_3, params->EmcPmacroTxPwrd3);
|
||||
reg::Write(EMC + EMC_PMACRO_TX_PWRD_4, params->EmcPmacroTxPwrd4);
|
||||
reg::Write(EMC + EMC_PMACRO_TX_PWRD_5, params->EmcPmacroTxPwrd5);
|
||||
|
||||
reg::Write(EMC + EMC_PMACRO_TX_SEL_CLK_SRC_0, params->EmcPmacroTxSelClkSrc0);
|
||||
reg::Write(EMC + EMC_PMACRO_TX_SEL_CLK_SRC_1, params->EmcPmacroTxSelClkSrc1);
|
||||
reg::Write(EMC + EMC_PMACRO_TX_SEL_CLK_SRC_2, params->EmcPmacroTxSelClkSrc2);
|
||||
reg::Write(EMC + EMC_PMACRO_TX_SEL_CLK_SRC_3, params->EmcPmacroTxSelClkSrc3);
|
||||
reg::Write(EMC + EMC_PMACRO_TX_SEL_CLK_SRC_4, params->EmcPmacroTxSelClkSrc4);
|
||||
reg::Write(EMC + EMC_PMACRO_TX_SEL_CLK_SRC_5, params->EmcPmacroTxSelClkSrc5);
|
||||
|
||||
if constexpr (SocType == fuse::SocType_Mariko) {
|
||||
reg::Write(EMC + EMC_PMACRO_PERBIT_FGCG_CTRL_0, params->EmcPmacroPerbitFgcgCtrl0);
|
||||
reg::Write(EMC + EMC_PMACRO_PERBIT_FGCG_CTRL_1, params->EmcPmacroPerbitFgcgCtrl1);
|
||||
reg::Write(EMC + EMC_PMACRO_PERBIT_FGCG_CTRL_2, params->EmcPmacroPerbitFgcgCtrl2);
|
||||
reg::Write(EMC + EMC_PMACRO_PERBIT_FGCG_CTRL_3, params->EmcPmacroPerbitFgcgCtrl3);
|
||||
reg::Write(EMC + EMC_PMACRO_PERBIT_FGCG_CTRL_4, params->EmcPmacroPerbitFgcgCtrl4);
|
||||
reg::Write(EMC + EMC_PMACRO_PERBIT_FGCG_CTRL_5, params->EmcPmacroPerbitFgcgCtrl5);
|
||||
|
||||
reg::Write(EMC + EMC_PMACRO_PERBIT_RFU_CTRL_0, params->EmcPmacroPerbitRfuCtrl0);
|
||||
reg::Write(EMC + EMC_PMACRO_PERBIT_RFU_CTRL_1, params->EmcPmacroPerbitRfuCtrl1);
|
||||
reg::Write(EMC + EMC_PMACRO_PERBIT_RFU_CTRL_2, params->EmcPmacroPerbitRfuCtrl2);
|
||||
reg::Write(EMC + EMC_PMACRO_PERBIT_RFU_CTRL_3, params->EmcPmacroPerbitRfuCtrl3);
|
||||
reg::Write(EMC + EMC_PMACRO_PERBIT_RFU_CTRL_4, params->EmcPmacroPerbitRfuCtrl4);
|
||||
reg::Write(EMC + EMC_PMACRO_PERBIT_RFU_CTRL_5, params->EmcPmacroPerbitRfuCtrl5);
|
||||
|
||||
reg::Write(EMC + EMC_PMACRO_PERBIT_RFU1_CTRL_0, params->EmcPmacroPerbitRfu1Ctrl0);
|
||||
reg::Write(EMC + EMC_PMACRO_PERBIT_RFU1_CTRL_1, params->EmcPmacroPerbitRfu1Ctrl1);
|
||||
reg::Write(EMC + EMC_PMACRO_PERBIT_RFU1_CTRL_2, params->EmcPmacroPerbitRfu1Ctrl2);
|
||||
reg::Write(EMC + EMC_PMACRO_PERBIT_RFU1_CTRL_3, params->EmcPmacroPerbitRfu1Ctrl3);
|
||||
reg::Write(EMC + EMC_PMACRO_PERBIT_RFU1_CTRL_4, params->EmcPmacroPerbitRfu1Ctrl4);
|
||||
reg::Write(EMC + EMC_PMACRO_PERBIT_RFU1_CTRL_5, params->EmcPmacroPerbitRfu1Ctrl5);
|
||||
|
||||
reg::Write(EMC + EMC_PMACRO_DATA_PI_CTRL, params->EmcPmacroDataPiCtrl);
|
||||
reg::Write(EMC + EMC_PMACRO_CMD_PI_CTRL, params->EmcPmacroCmdPiCtrl);
|
||||
}
|
||||
|
||||
reg::Write(EMC + EMC_PMACRO_DDLL_BYPASS, params->EmcPmacroDdllBypass);
|
||||
reg::Write(EMC + EMC_PMACRO_DDLL_PWRD_0, params->EmcPmacroDdllPwrd0);
|
||||
reg::Write(EMC + EMC_PMACRO_DDLL_PWRD_1, params->EmcPmacroDdllPwrd1);
|
||||
reg::Write(EMC + EMC_PMACRO_DDLL_PWRD_2, params->EmcPmacroDdllPwrd2);
|
||||
reg::Write(EMC + EMC_PMACRO_CMD_CTRL_0, params->EmcPmacroCmdCtrl0);
|
||||
reg::Write(EMC + EMC_PMACRO_CMD_CTRL_1, params->EmcPmacroCmdCtrl1);
|
||||
reg::Write(EMC + EMC_PMACRO_CMD_CTRL_2, params->EmcPmacroCmdCtrl2);
|
||||
reg::Write(EMC + EMC_PMACRO_IB_VREF_DQ_0, params->EmcPmacroIbVrefDq_0);
|
||||
reg::Write(EMC + EMC_PMACRO_IB_VREF_DQ_1, params->EmcPmacroIbVrefDq_1);
|
||||
reg::Write(EMC + EMC_PMACRO_IB_VREF_DQS_0, params->EmcPmacroIbVrefDqs_0);
|
||||
reg::Write(EMC + EMC_PMACRO_IB_VREF_DQS_1, params->EmcPmacroIbVrefDqs_1);
|
||||
reg::Write(EMC + EMC_PMACRO_IB_RXRT, params->EmcPmacroIbRxrt);
|
||||
|
||||
reg::Write(EMC + EMC_PMACRO_QUSE_DDLL_RANK0_0, params->EmcPmacroQuseDdllRank0_0);
|
||||
reg::Write(EMC + EMC_PMACRO_QUSE_DDLL_RANK0_1, params->EmcPmacroQuseDdllRank0_1);
|
||||
reg::Write(EMC + EMC_PMACRO_QUSE_DDLL_RANK0_2, params->EmcPmacroQuseDdllRank0_2);
|
||||
reg::Write(EMC + EMC_PMACRO_QUSE_DDLL_RANK0_3, params->EmcPmacroQuseDdllRank0_3);
|
||||
reg::Write(EMC + EMC_PMACRO_QUSE_DDLL_RANK0_4, params->EmcPmacroQuseDdllRank0_4);
|
||||
reg::Write(EMC + EMC_PMACRO_QUSE_DDLL_RANK0_5, params->EmcPmacroQuseDdllRank0_5);
|
||||
reg::Write(EMC + EMC_PMACRO_QUSE_DDLL_RANK1_0, params->EmcPmacroQuseDdllRank1_0);
|
||||
reg::Write(EMC + EMC_PMACRO_QUSE_DDLL_RANK1_1, params->EmcPmacroQuseDdllRank1_1);
|
||||
reg::Write(EMC + EMC_PMACRO_QUSE_DDLL_RANK1_2, params->EmcPmacroQuseDdllRank1_2);
|
||||
reg::Write(EMC + EMC_PMACRO_QUSE_DDLL_RANK1_3, params->EmcPmacroQuseDdllRank1_3);
|
||||
reg::Write(EMC + EMC_PMACRO_QUSE_DDLL_RANK1_4, params->EmcPmacroQuseDdllRank1_4);
|
||||
reg::Write(EMC + EMC_PMACRO_QUSE_DDLL_RANK1_5, params->EmcPmacroQuseDdllRank1_5);
|
||||
|
||||
if constexpr (SocType == fuse::SocType_Erista) {
|
||||
reg::Write(EMC + EMC_PMACRO_BRICK_CTRL_RFU1, params->EmcPmacroBrickCtrlRfu1);
|
||||
}
|
||||
|
||||
reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0, params->EmcPmacroObDdllLongDqRank0_0);
|
||||
reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1, params->EmcPmacroObDdllLongDqRank0_1);
|
||||
reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2, params->EmcPmacroObDdllLongDqRank0_2);
|
||||
reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3, params->EmcPmacroObDdllLongDqRank0_3);
|
||||
reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_4, params->EmcPmacroObDdllLongDqRank0_4);
|
||||
reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_5, params->EmcPmacroObDdllLongDqRank0_5);
|
||||
reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0, params->EmcPmacroObDdllLongDqRank1_0);
|
||||
reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1, params->EmcPmacroObDdllLongDqRank1_1);
|
||||
reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2, params->EmcPmacroObDdllLongDqRank1_2);
|
||||
reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3, params->EmcPmacroObDdllLongDqRank1_3);
|
||||
reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_4, params->EmcPmacroObDdllLongDqRank1_4);
|
||||
reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_5, params->EmcPmacroObDdllLongDqRank1_5);
|
||||
reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_0, params->EmcPmacroObDdllLongDqsRank0_0);
|
||||
reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_1, params->EmcPmacroObDdllLongDqsRank0_1);
|
||||
reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_2, params->EmcPmacroObDdllLongDqsRank0_2);
|
||||
reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_3, params->EmcPmacroObDdllLongDqsRank0_3);
|
||||
reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_4, params->EmcPmacroObDdllLongDqsRank0_4);
|
||||
reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_5, params->EmcPmacroObDdllLongDqsRank0_5);
|
||||
reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_0, params->EmcPmacroObDdllLongDqsRank1_0);
|
||||
reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_1, params->EmcPmacroObDdllLongDqsRank1_1);
|
||||
reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_2, params->EmcPmacroObDdllLongDqsRank1_2);
|
||||
reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_3, params->EmcPmacroObDdllLongDqsRank1_3);
|
||||
reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_4, params->EmcPmacroObDdllLongDqsRank1_4);
|
||||
reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_5, params->EmcPmacroObDdllLongDqsRank1_5);
|
||||
reg::Write(EMC + EMC_PMACRO_IB_DDLL_LONG_DQS_RANK0_0, params->EmcPmacroIbDdllLongDqsRank0_0);
|
||||
reg::Write(EMC + EMC_PMACRO_IB_DDLL_LONG_DQS_RANK0_1, params->EmcPmacroIbDdllLongDqsRank0_1);
|
||||
reg::Write(EMC + EMC_PMACRO_IB_DDLL_LONG_DQS_RANK0_2, params->EmcPmacroIbDdllLongDqsRank0_2);
|
||||
reg::Write(EMC + EMC_PMACRO_IB_DDLL_LONG_DQS_RANK0_3, params->EmcPmacroIbDdllLongDqsRank0_3);
|
||||
reg::Write(EMC + EMC_PMACRO_IB_DDLL_LONG_DQS_RANK1_0, params->EmcPmacroIbDdllLongDqsRank1_0);
|
||||
reg::Write(EMC + EMC_PMACRO_IB_DDLL_LONG_DQS_RANK1_1, params->EmcPmacroIbDdllLongDqsRank1_1);
|
||||
reg::Write(EMC + EMC_PMACRO_IB_DDLL_LONG_DQS_RANK1_2, params->EmcPmacroIbDdllLongDqsRank1_2);
|
||||
reg::Write(EMC + EMC_PMACRO_IB_DDLL_LONG_DQS_RANK1_3, params->EmcPmacroIbDdllLongDqsRank1_3);
|
||||
|
||||
reg::Write(EMC + EMC_PMACRO_DDLL_LONG_CMD_0, params->EmcPmacroDdllLongCmd_0);
|
||||
reg::Write(EMC + EMC_PMACRO_DDLL_LONG_CMD_1, params->EmcPmacroDdllLongCmd_1);
|
||||
reg::Write(EMC + EMC_PMACRO_DDLL_LONG_CMD_2, params->EmcPmacroDdllLongCmd_2);
|
||||
reg::Write(EMC + EMC_PMACRO_DDLL_LONG_CMD_3, params->EmcPmacroDdllLongCmd_3);
|
||||
reg::Write(EMC + EMC_PMACRO_DDLL_LONG_CMD_4, params->EmcPmacroDdllLongCmd_4);
|
||||
reg::Write(EMC + EMC_PMACRO_DDLL_SHORT_CMD_0, params->EmcPmacroDdllShortCmd_0);
|
||||
reg::Write(EMC + EMC_PMACRO_DDLL_SHORT_CMD_1, params->EmcPmacroDdllShortCmd_1);
|
||||
reg::Write(EMC + EMC_PMACRO_DDLL_SHORT_CMD_2, params->EmcPmacroDdllShortCmd_2);
|
||||
|
||||
if constexpr (SocType == fuse::SocType_Erista) {
|
||||
reg::Write(EMC + EMC_PMACRO_COMMON_PAD_TX_CTRL, (params->EmcPmacroCommonPadTxCtrl | ~0x1) & 0xF);
|
||||
} else if constexpr (SocType == fuse::SocType_Mariko) {
|
||||
reg::Write(EMC + EMC_PMACRO_DDLL_PERIODIC_OFFSET, params->EmcPmacroDdllPeriodicOffset);
|
||||
}
|
||||
|
||||
if constexpr (SocType == fuse::SocType_Erista) {
|
||||
SpareWrite<SocType>(params->EmcBctSpare4, params->EmcBctSpare5);
|
||||
} else if constexpr (SocType == fuse::SocType_Mariko) {
|
||||
SpareWrite<SocType>(params->EmcBctSpare4, params->EmcBctSpare5);
|
||||
SpareWrite<SocType>(params->EmcBctSpareSecure6, params->EmcBctSpareSecure7);
|
||||
SpareWrite<SocType>(params->EmcBctSpareSecure8, params->EmcBctSpareSecure9);
|
||||
SpareWrite<SocType>(params->EmcBctSpareSecure10, params->EmcBctSpareSecure11);
|
||||
}
|
||||
|
||||
reg::Write(EMC + EMC_TIMING_CONTROL, 1);
|
||||
|
||||
/* Initialize MC VPR settings. */
|
||||
reg::Write(MC + MC_VIDEO_PROTECT_BOM, params->McVideoProtectBom);
|
||||
reg::Write(MC + MC_VIDEO_PROTECT_BOM_ADR_HI, params->McVideoProtectBomAdrHi);
|
||||
reg::Write(MC + MC_VIDEO_PROTECT_SIZE_MB, params->McVideoProtectSizeMb);
|
||||
reg::Write(MC + MC_VIDEO_PROTECT_VPR_OVERRIDE, params->McVideoProtectVprOverride);
|
||||
reg::Write(MC + MC_VIDEO_PROTECT_VPR_OVERRIDE1, params->McVideoProtectVprOverride1);
|
||||
reg::Write(MC + MC_VIDEO_PROTECT_GPU_OVERRIDE_0, params->McVideoProtectGpuOverride0);
|
||||
reg::Write(MC + MC_VIDEO_PROTECT_GPU_OVERRIDE_1, params->McVideoProtectGpuOverride1);
|
||||
|
||||
/* Program SDRAM geometry parameters. */
|
||||
reg::Write(MC + MC_EMEM_ADR_CFG, params->McEmemAdrCfg);
|
||||
reg::Write(MC + MC_EMEM_ADR_CFG_DEV0, params->McEmemAdrCfgDev0);
|
||||
reg::Write(MC + MC_EMEM_ADR_CFG_DEV1, params->McEmemAdrCfgDev1);
|
||||
reg::Write(MC + MC_EMEM_ADR_CFG_CHANNEL_MASK, params->McEmemAdrCfgChannelMask);
|
||||
|
||||
/* Program bank swizzling. */
|
||||
reg::Write(MC + MC_EMEM_ADR_CFG_BANK_MASK_0, params->McEmemAdrCfgBankMask0);
|
||||
reg::Write(MC + MC_EMEM_ADR_CFG_BANK_MASK_1, params->McEmemAdrCfgBankMask1);
|
||||
reg::Write(MC + MC_EMEM_ADR_CFG_BANK_MASK_2, params->McEmemAdrCfgBankMask2);
|
||||
|
||||
/* Program external memory aperture (base and size). */
|
||||
reg::Write(MC + MC_EMEM_CFG, params->McEmemCfg);
|
||||
|
||||
/* Program SEC carveout (base and size). */
|
||||
reg::Write(MC + MC_SEC_CARVEOUT_BOM, params->McSecCarveoutBom);
|
||||
reg::Write(MC + MC_SEC_CARVEOUT_ADR_HI, params->McSecCarveoutAdrHi);
|
||||
reg::Write(MC + MC_SEC_CARVEOUT_SIZE_MB, params->McSecCarveoutSizeMb);
|
||||
|
||||
/* Program MTS carveout (base and size). */
|
||||
reg::Write(MC + MC_MTS_CARVEOUT_BOM, params->McMtsCarveoutBom);
|
||||
reg::Write(MC + MC_MTS_CARVEOUT_ADR_HI, params->McMtsCarveoutAdrHi);
|
||||
reg::Write(MC + MC_MTS_CARVEOUT_SIZE_MB, params->McMtsCarveoutSizeMb);
|
||||
|
||||
/* Program the memory arbiter. */
|
||||
reg::Write(MC + MC_EMEM_ARB_CFG, params->McEmemArbCfg);
|
||||
reg::Write(MC + MC_EMEM_ARB_OUTSTANDING_REQ, params->McEmemArbOutstandingReq);
|
||||
reg::Write(MC + MC_EMEM_ARB_REFPB_HP_CTRL, params->McEmemArbRefpbHpCtrl);
|
||||
reg::Write(MC + MC_EMEM_ARB_REFPB_BANK_CTRL, params->McEmemArbRefpbBankCtrl);
|
||||
reg::Write(MC + MC_EMEM_ARB_TIMING_RCD, params->McEmemArbTimingRcd);
|
||||
reg::Write(MC + MC_EMEM_ARB_TIMING_RP, params->McEmemArbTimingRp);
|
||||
reg::Write(MC + MC_EMEM_ARB_TIMING_RC, params->McEmemArbTimingRc);
|
||||
reg::Write(MC + MC_EMEM_ARB_TIMING_RAS, params->McEmemArbTimingRas);
|
||||
reg::Write(MC + MC_EMEM_ARB_TIMING_FAW, params->McEmemArbTimingFaw);
|
||||
reg::Write(MC + MC_EMEM_ARB_TIMING_RRD, params->McEmemArbTimingRrd);
|
||||
reg::Write(MC + MC_EMEM_ARB_TIMING_RAP2PRE, params->McEmemArbTimingRap2Pre);
|
||||
reg::Write(MC + MC_EMEM_ARB_TIMING_WAP2PRE, params->McEmemArbTimingWap2Pre);
|
||||
reg::Write(MC + MC_EMEM_ARB_TIMING_R2R, params->McEmemArbTimingR2R);
|
||||
reg::Write(MC + MC_EMEM_ARB_TIMING_W2W, params->McEmemArbTimingW2W);
|
||||
reg::Write(MC + MC_EMEM_ARB_TIMING_CCDMW, params->McEmemArbTimingCcdmw);
|
||||
reg::Write(MC + MC_EMEM_ARB_TIMING_R2W, params->McEmemArbTimingR2W);
|
||||
reg::Write(MC + MC_EMEM_ARB_TIMING_W2R, params->McEmemArbTimingW2R);
|
||||
reg::Write(MC + MC_EMEM_ARB_TIMING_RFCPB, params->McEmemArbTimingRFCPB);
|
||||
reg::Write(MC + MC_EMEM_ARB_DA_TURNS, params->McEmemArbDaTurns);
|
||||
reg::Write(MC + MC_EMEM_ARB_DA_COVERS, params->McEmemArbDaCovers);
|
||||
reg::Write(MC + MC_EMEM_ARB_MISC0, params->McEmemArbMisc0);
|
||||
reg::Write(MC + MC_EMEM_ARB_MISC1, params->McEmemArbMisc1);
|
||||
reg::Write(MC + MC_EMEM_ARB_MISC2, params->McEmemArbMisc2);
|
||||
reg::Write(MC + MC_EMEM_ARB_RING1_THROTTLE, params->McEmemArbRing1Throttle);
|
||||
reg::Write(MC + MC_EMEM_ARB_OVERRIDE, params->McEmemArbOverride);
|
||||
reg::Write(MC + MC_EMEM_ARB_OVERRIDE_1, params->McEmemArbOverride1);
|
||||
reg::Write(MC + MC_EMEM_ARB_RSV, params->McEmemArbRsv);
|
||||
reg::Write(MC + MC_DA_CONFIG0, params->McDaCfg0);
|
||||
|
||||
/* Trigger MC timing update. */
|
||||
reg::Write(MC + MC_TIMING_CONTROL, 1);
|
||||
|
||||
/* Program second-level clock enable overrides. */
|
||||
reg::Write(MC + MC_CLKEN_OVERRIDE, params->McClkenOverride);
|
||||
|
||||
/* Program statistics gathering. */
|
||||
reg::Write(MC + MC_STAT_CONTROL, params->McStatControl);
|
||||
|
||||
/* Program SDRAM geometry parameters. */
|
||||
reg::Write(EMC + EMC_ADR_CFG, params->EmcAdrCfg);
|
||||
|
||||
/* Program second-level clock enable overrides. */
|
||||
reg::Write(EMC + EMC_CLKEN_OVERRIDE, params->EmcClkenOverride);
|
||||
|
||||
/* Program EMC pad auto calibration. */
|
||||
reg::Write(EMC + EMC_PMACRO_AUTOCAL_CFG_0, params->EmcPmacroAutocalCfg0);
|
||||
reg::Write(EMC + EMC_PMACRO_AUTOCAL_CFG_1, params->EmcPmacroAutocalCfg1);
|
||||
reg::Write(EMC + EMC_PMACRO_AUTOCAL_CFG_2, params->EmcPmacroAutocalCfg2);
|
||||
|
||||
reg::Write(EMC + EMC_AUTO_CAL_VREF_SEL_0, params->EmcAutoCalVrefSel0);
|
||||
reg::Write(EMC + EMC_AUTO_CAL_VREF_SEL_1, params->EmcAutoCalVrefSel1);
|
||||
|
||||
reg::Write(EMC + EMC_AUTO_CAL_INTERVAL, params->EmcAutoCalInterval);
|
||||
reg::Write(EMC + EMC_AUTO_CAL_CONFIG, params->EmcAutoCalConfig);
|
||||
util::WaitMicroSeconds(params->EmcAutoCalWait);
|
||||
|
||||
/* Patch 5. */
|
||||
if constexpr (SocType == fuse::SocType_Erista) {
|
||||
SpareWrite<SocType>(params->EmcBctSpare8, params->EmcBctSpare9);
|
||||
} else if constexpr (SocType == fuse::SocType_Mariko) {
|
||||
SpareWrite<SocType>(params->EmcBctSpare8, params->EmcBctSpare9);
|
||||
reg::Write(EMC + EMC_AUTO_CAL_CONFIG9, params->EmcAutoCalConfig9);
|
||||
}
|
||||
|
||||
/* Program EMC timing configuration. */
|
||||
reg::Write(EMC + EMC_CFG_2, params->EmcCfg2);
|
||||
reg::Write(EMC + EMC_CFG_PIPE, params->EmcCfgPipe);
|
||||
reg::Write(EMC + EMC_CFG_PIPE_1, params->EmcCfgPipe1);
|
||||
reg::Write(EMC + EMC_CFG_PIPE_2, params->EmcCfgPipe2);
|
||||
reg::Write(EMC + EMC_CMDQ, params->EmcCmdQ);
|
||||
reg::Write(EMC + EMC_MC2EMCQ, params->EmcMc2EmcQ);
|
||||
reg::Write(EMC + EMC_MRS_WAIT_CNT, params->EmcMrsWaitCnt);
|
||||
reg::Write(EMC + EMC_MRS_WAIT_CNT2, params->EmcMrsWaitCnt2);
|
||||
reg::Write(EMC + EMC_FBIO_CFG5, params->EmcFbioCfg5);
|
||||
reg::Write(EMC + EMC_RC, params->EmcRc);
|
||||
reg::Write(EMC + EMC_RFC, params->EmcRfc);
|
||||
reg::Write(EMC + EMC_RFCPB, params->EmcRfcPb);
|
||||
reg::Write(EMC + EMC_REFCTRL2, params->EmcRefctrl2);
|
||||
reg::Write(EMC + EMC_RFC_SLR, params->EmcRfcSlr);
|
||||
reg::Write(EMC + EMC_RAS, params->EmcRas);
|
||||
reg::Write(EMC + EMC_RP, params->EmcRp);
|
||||
reg::Write(EMC + EMC_TPPD, params->EmcTppd);
|
||||
|
||||
if constexpr (SocType == fuse::SocType_Mariko) {
|
||||
reg::Write(EMC + EMC_TRTM, params->EmcTrtm);
|
||||
reg::Write(EMC + EMC_TWTM, params->EmcTwtm);
|
||||
reg::Write(EMC + EMC_TRATM, params->EmcTratm);
|
||||
reg::Write(EMC + EMC_TWATM, params->EmcTwatm);
|
||||
reg::Write(EMC + EMC_TR2REF, params->EmcTr2ref);
|
||||
}
|
||||
|
||||
reg::Write(EMC + EMC_R2R, params->EmcR2r);
|
||||
reg::Write(EMC + EMC_W2W, params->EmcW2w);
|
||||
reg::Write(EMC + EMC_R2W, params->EmcR2w);
|
||||
reg::Write(EMC + EMC_W2R, params->EmcW2r);
|
||||
reg::Write(EMC + EMC_R2P, params->EmcR2p);
|
||||
reg::Write(EMC + EMC_W2P, params->EmcW2p);
|
||||
reg::Write(EMC + EMC_CCDMW, params->EmcCcdmw);
|
||||
reg::Write(EMC + EMC_RD_RCD, params->EmcRdRcd);
|
||||
reg::Write(EMC + EMC_WR_RCD, params->EmcWrRcd);
|
||||
reg::Write(EMC + EMC_RRD, params->EmcRrd);
|
||||
reg::Write(EMC + EMC_REXT, params->EmcRext);
|
||||
reg::Write(EMC + EMC_WEXT, params->EmcWext);
|
||||
reg::Write(EMC + EMC_WDV, params->EmcWdv);
|
||||
reg::Write(EMC + EMC_WDV_CHK, params->EmcWdvChk);
|
||||
reg::Write(EMC + EMC_WSV, params->EmcWsv);
|
||||
reg::Write(EMC + EMC_WEV, params->EmcWev);
|
||||
reg::Write(EMC + EMC_WDV_MASK, params->EmcWdvMask);
|
||||
reg::Write(EMC + EMC_WS_DURATION, params->EmcWsDuration);
|
||||
reg::Write(EMC + EMC_WE_DURATION, params->EmcWeDuration);
|
||||
reg::Write(EMC + EMC_QUSE, params->EmcQUse);
|
||||
reg::Write(EMC + EMC_QUSE_WIDTH, params->EmcQuseWidth);
|
||||
reg::Write(EMC + EMC_IBDLY, params->EmcIbdly);
|
||||
reg::Write(EMC + EMC_OBDLY, params->EmcObdly);
|
||||
reg::Write(EMC + EMC_EINPUT, params->EmcEInput);
|
||||
reg::Write(EMC + EMC_EINPUT_DURATION, params->EmcEInputDuration);
|
||||
reg::Write(EMC + EMC_PUTERM_EXTRA, params->EmcPutermExtra);
|
||||
reg::Write(EMC + EMC_PUTERM_WIDTH, params->EmcPutermWidth);
|
||||
|
||||
if constexpr (SocType == fuse::SocType_Erista) {
|
||||
reg::Write(EMC + EMC_PMACRO_COMMON_PAD_TX_CTRL, params->EmcPmacroCommonPadTxCtrl);
|
||||
}
|
||||
|
||||
reg::Write(EMC + EMC_DBG, params->EmcDbg);
|
||||
reg::Write(EMC + EMC_QRST, params->EmcQRst);
|
||||
reg::Write(EMC + EMC_ISSUE_QRST, 1);
|
||||
reg::Write(EMC + EMC_ISSUE_QRST, 0);
|
||||
reg::Write(EMC + EMC_QSAFE, params->EmcQSafe);
|
||||
reg::Write(EMC + EMC_RDV, params->EmcRdv);
|
||||
reg::Write(EMC + EMC_RDV_MASK, params->EmcRdvMask);
|
||||
reg::Write(EMC + EMC_RDV_EARLY, params->EmcRdvEarly);
|
||||
reg::Write(EMC + EMC_RDV_EARLY_MASK, params->EmcRdvEarlyMask);
|
||||
reg::Write(EMC + EMC_QPOP, params->EmcQpop);
|
||||
reg::Write(EMC + EMC_REFRESH, params->EmcRefresh);
|
||||
reg::Write(EMC + EMC_BURST_REFRESH_NUM, params->EmcBurstRefreshNum);
|
||||
reg::Write(EMC + EMC_PRE_REFRESH_REQ_CNT, params->EmcPreRefreshReqCnt);
|
||||
reg::Write(EMC + EMC_PDEX2WR, params->EmcPdEx2Wr);
|
||||
reg::Write(EMC + EMC_PDEX2RD, params->EmcPdEx2Rd);
|
||||
reg::Write(EMC + EMC_PCHG2PDEN, params->EmcPChg2Pden);
|
||||
reg::Write(EMC + EMC_ACT2PDEN, params->EmcAct2Pden);
|
||||
reg::Write(EMC + EMC_AR2PDEN, params->EmcAr2Pden);
|
||||
reg::Write(EMC + EMC_RW2PDEN, params->EmcRw2Pden);
|
||||
reg::Write(EMC + EMC_CKE2PDEN, params->EmcCke2Pden);
|
||||
reg::Write(EMC + EMC_PDEX2CKE, params->EmcPdex2Cke);
|
||||
reg::Write(EMC + EMC_PDEX2MRR, params->EmcPdex2Mrr);
|
||||
reg::Write(EMC + EMC_TXSR, params->EmcTxsr);
|
||||
reg::Write(EMC + EMC_TXSRDLL, params->EmcTxsrDll);
|
||||
reg::Write(EMC + EMC_TCKE, params->EmcTcke);
|
||||
reg::Write(EMC + EMC_TCKESR, params->EmcTckesr);
|
||||
reg::Write(EMC + EMC_TPD, params->EmcTpd);
|
||||
reg::Write(EMC + EMC_TFAW, params->EmcTfaw);
|
||||
reg::Write(EMC + EMC_TRPAB, params->EmcTrpab);
|
||||
reg::Write(EMC + EMC_TCLKSTABLE, params->EmcTClkStable);
|
||||
reg::Write(EMC + EMC_TCLKSTOP, params->EmcTClkStop);
|
||||
reg::Write(EMC + EMC_TREFBW, params->EmcTRefBw);
|
||||
reg::Write(EMC + EMC_ODT_WRITE, params->EmcOdtWrite);
|
||||
reg::Write(EMC + EMC_CFG_DIG_DLL, params->EmcCfgDigDll);
|
||||
reg::Write(EMC + EMC_CFG_DIG_DLL_PERIOD, params->EmcCfgDigDllPeriod);
|
||||
|
||||
/* Lock bit written later for CFG_ADR_EN. */
|
||||
reg::Write(EMC + EMC_FBIO_SPARE, params->EmcFbioSpare & 0xFFFFFFFD);
|
||||
reg::Write(EMC + EMC_CFG_RSV, params->EmcCfgRsv);
|
||||
reg::Write(EMC + EMC_PMC_SCRATCH1, params->EmcPmcScratch1);
|
||||
reg::Write(EMC + EMC_PMC_SCRATCH2, params->EmcPmcScratch2);
|
||||
reg::Write(EMC + EMC_PMC_SCRATCH3, params->EmcPmcScratch3);
|
||||
reg::Write(EMC + EMC_ACPD_CONTROL, params->EmcAcpdControl);
|
||||
reg::Write(EMC + EMC_TXDSRVTTGEN, params->EmcTxdsrvttgen);
|
||||
|
||||
if constexpr (SocType == fuse::SocType_Mariko) {
|
||||
reg::Write(EMC + EMC_PMACRO_DSR_VTTGEN_CTRL_0, params->EmcPmacroDsrVttgenCtrl0);
|
||||
}
|
||||
|
||||
/* Set pipe bypass enable bits before sending any DRAM commands. */
|
||||
reg::Write(EMC + EMC_CFG, (params->EmcCfg * 0xE) | 0x03C00000);
|
||||
|
||||
/* Perform bootrom patch. */
|
||||
if constexpr (SocType == fuse::SocType_Erista) {
|
||||
if (params->BootRomPatchControl & 0x80000000) {
|
||||
reg::Write(APB + ((params->BootRomPatchControl & 0x3FFFFFFF) << 2), params->BootRomPatchData);
|
||||
reg::Write(MC + MC_TIMING_CONTROL, 1);
|
||||
}
|
||||
} else if constexpr (SocType == fuse::SocType_Mariko) {
|
||||
if (params->BootRomPatchControl) {
|
||||
SpareWrite<SocType>(params->BootRomPatchControl, params->BootRomPatchData);
|
||||
reg::Write(MC + MC_TIMING_CONTROL, 1);
|
||||
}
|
||||
|
||||
SpareWrite<SocType>(params->EmcBctSpareSecure12, params->EmcBctSpareSecure13);
|
||||
SpareWrite<SocType>(params->EmcBctSpareSecure14, params->EmcBctSpareSecure15);
|
||||
SpareWrite<SocType>(params->EmcBctSpareSecure16, params->EmcBctSpareSecure17);
|
||||
}
|
||||
|
||||
/* Release SEL_DPD_CMD. */
|
||||
reg::Write(PMC + APBDEV_PMC_IO_DPD3_REQ, ((params->EmcPmcScratch1 & 0x3FFFFFFF) | 0x40000000) & 0xCFFF0000);
|
||||
util::WaitMicroSeconds(params->PmcIoDpd3ReqWait);
|
||||
|
||||
if constexpr (SocType == fuse::SocType_Erista) {
|
||||
if (params->EmcAutoCalInterval == 0) {
|
||||
reg::Write(EMC + EMC_AUTO_CAL_CONFIG, params->EmcAutoCalConfig | 0x200);
|
||||
}
|
||||
|
||||
reg::Write(EMC + EMC_PMACRO_BRICK_CTRL_RFU2, params->EmcPmacroBrickCtrlRfu2);
|
||||
} else if constexpr (SocType == fuse::SocType_Mariko) {
|
||||
reg::Write(EMC + EMC_PMACRO_CMD_PAD_TX_CTRL, params->EmcPmacroCmdPadTxCtrl);
|
||||
}
|
||||
|
||||
/* ZQ CAL setup */
|
||||
if (params->EmcZcalWarmColdBootEnables & 1) {
|
||||
if (params->MemoryType == br::BootMemoryType_Ddr3) {
|
||||
reg::Write(EMC + EMC_ZCAL_WAIT_CNT, params->EmcZcalWaitCnt << 3);
|
||||
} else if (params->MemoryType == br::BootMemoryType_LpDdr4) {
|
||||
reg::Write(EMC + EMC_ZCAL_WAIT_CNT, params->EmcZcalWaitCnt);
|
||||
reg::Write(EMC + EMC_ZCAL_MRW_CMD, params->EmcZcalMrwCmd);
|
||||
}
|
||||
}
|
||||
|
||||
/* Trigger timing update. */
|
||||
reg::Write(EMC + EMC_TIMING_CONTROL, 1);
|
||||
util::WaitMicroSeconds(params->EmcTimingControlWait);
|
||||
|
||||
/* Deassert HOLD_CKE_LOW. */
|
||||
if constexpr (SocType == fuse::SocType_Erista) {
|
||||
reg::ClearBits(PMC + APBDEV_PMC_DDR_CNTRL, ~0xFFF8007F);
|
||||
} else if constexpr (SocType == fuse::SocType_Mariko) {
|
||||
reg::ClearBits(PMC + APBDEV_PMC_DDR_CNTRL, ~0xFF78007F);
|
||||
}
|
||||
|
||||
util::WaitMicroSeconds(params->PmcDdrCntrlWait);
|
||||
|
||||
/* Set clock enable signal. */
|
||||
const u32 pin_gpio_cfg = (params->EmcPinGpioEn << 16) | (params->EmcPinGpio << 12);
|
||||
if (params->MemoryType == br::BootMemoryType_Ddr3 || params->MemoryType == br::BootMemoryType_LpDdr4) {
|
||||
reg::Write(EMC + EMC_PIN, pin_gpio_cfg);
|
||||
reg::Read(EMC + EMC_PIN);
|
||||
util::WaitMicroSeconds(200 + params->EmcPinExtraWait);
|
||||
|
||||
reg::Write(EMC + EMC_PIN, pin_gpio_cfg | 0x100);
|
||||
reg::Read(EMC + EMC_PIN);
|
||||
|
||||
const u32 wait = params->MemoryType == br::BootMemoryType_Ddr3 ? 500 : 2000;
|
||||
util::WaitMicroSeconds(wait + params->EmcPinExtraWait);
|
||||
}
|
||||
|
||||
/* Set clock enable signal. */
|
||||
reg::Write(EMC + EMC_PIN, pin_gpio_cfg | 0x101);
|
||||
reg::Read(EMC + EMC_PIN);
|
||||
util::WaitMicroSeconds(params->EmcPinProgramWait);
|
||||
|
||||
/* Send NOP */
|
||||
if (params->MemoryType != br::BootMemoryType_LpDdr4) {
|
||||
reg::Write(EMC + EMC_NOP, (params->EmcDevSelect << 30) | 1);
|
||||
}
|
||||
|
||||
/* On coldboot with LPDDR2/3, wait 200us after asserting CKE high. */
|
||||
if (params->MemoryType != br::BootMemoryType_LpDdr2) {
|
||||
util::WaitMicroSeconds(200 + params->EmcPinExtraWait);
|
||||
}
|
||||
|
||||
/* Init ZQ calibration. */
|
||||
if (params->MemoryType == br::BootMemoryType_LpDdr4) {
|
||||
SpareWrite<SocType>(params->EmcBctSpare10, params->EmcBctSpare11);
|
||||
|
||||
reg::Write(EMC + EMC_MRW2, params->EmcMrw2);
|
||||
reg::Write(EMC + EMC_MRW, params->EmcMrw1);
|
||||
reg::Write(EMC + EMC_MRW3, params->EmcMrw3);
|
||||
reg::Write(EMC + EMC_MRW4, params->EmcMrw4);
|
||||
reg::Write(EMC + EMC_MRW6, params->EmcMrw6);
|
||||
reg::Write(EMC + EMC_MRW14, params->EmcMrw14);
|
||||
|
||||
reg::Write(EMC + EMC_MRW8, params->EmcMrw8);
|
||||
reg::Write(EMC + EMC_MRW12, params->EmcMrw12);
|
||||
reg::Write(EMC + EMC_MRW9, params->EmcMrw9);
|
||||
reg::Write(EMC + EMC_MRW13, params->EmcMrw13);
|
||||
|
||||
if (params->EmcZcalWarmColdBootEnables & 1) {
|
||||
/* Issue ZQCAL start, device 0. */
|
||||
reg::Write(EMC + EMC_ZQ_CAL, params->EmcZcalInitDev0);
|
||||
util::WaitMicroSeconds(params->EmcZcalInitWait);
|
||||
|
||||
/* Issue ZQCAL latch. */
|
||||
reg::Write(EMC + EMC_ZQ_CAL, params->EmcZcalInitDev0 ^ 0x3);
|
||||
|
||||
/* Do the same for device 1. */
|
||||
if ((params->EmcDevSelect & 2) == 0) {
|
||||
reg::Write(EMC + EMC_ZQ_CAL, params->EmcZcalInitDev1);
|
||||
util::WaitMicroSeconds(params->EmcZcalInitWait);
|
||||
|
||||
reg::Write(EMC + EMC_ZQ_CAL, params->EmcZcalInitDev1 ^ 0x3);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Patches 10-12. */
|
||||
if constexpr (SocType == fuse::SocType_Mariko) {
|
||||
SpareWrite<SocType>(params->EmcBctSpareSecure18, params->EmcBctSpareSecure19);
|
||||
SpareWrite<SocType>(params->EmcBctSpareSecure20, params->EmcBctSpareSecure21);
|
||||
SpareWrite<SocType>(params->EmcBctSpareSecure22, params->EmcBctSpareSecure23);
|
||||
}
|
||||
|
||||
/* Set package and DPD pad control. */
|
||||
reg::Write(PMC + APBDEV_PMC_DDR_CFG, params->PmcDdrCfg);
|
||||
|
||||
/* Start periodic ZQ calibration. */
|
||||
if (params->MemoryType == br::BootMemoryType_LpDdr2 || params->MemoryType == br::BootMemoryType_Ddr3 || params->MemoryType == br::BootMemoryType_LpDdr4) {
|
||||
reg::Write(EMC + EMC_ZCAL_INTERVAL, params->EmcZcalInterval);
|
||||
reg::Write(EMC + EMC_ZCAL_WAIT_CNT, params->EmcZcalWaitCnt);
|
||||
reg::Write(EMC + EMC_ZCAL_MRW_CMD, params->EmcZcalMrwCmd);
|
||||
}
|
||||
|
||||
SpareWrite<SocType>(params->EmcBctSpare12, params->EmcBctSpare13);
|
||||
|
||||
/* Trigger timing update. */
|
||||
reg::Write(EMC + EMC_TIMING_CONTROL, 1);
|
||||
|
||||
if (params->EmcExtraRefreshNum) {
|
||||
reg::Write(EMC + EMC_REF, (params->EmcDevSelect << 30) | (((1 << params->EmcExtraRefreshNum) - 1) << 8) | 3);
|
||||
}
|
||||
|
||||
/* Enable refresh. */
|
||||
reg::Write(EMC + EMC_REFCTRL, params->EmcDevSelect | 0x80000000);
|
||||
|
||||
reg::Write(EMC + EMC_DYN_SELF_REF_CONTROL, params->EmcDynSelfRefControl);
|
||||
|
||||
if constexpr (SocType == fuse::SocType_Erista) {
|
||||
reg::Write(EMC + EMC_CFG_UPDATE, params->EmcCfgUpdate);
|
||||
}
|
||||
|
||||
reg::Write(EMC + EMC_CFG, params->EmcCfg);
|
||||
reg::Write(EMC + EMC_FDPD_CTRL_DQ, params->EmcFdpdCtrlDq);
|
||||
reg::Write(EMC + EMC_FDPD_CTRL_CMD, params->EmcFdpdCtrlCmd);
|
||||
reg::Write(EMC + EMC_SEL_DPD_CTRL, params->EmcSelDpdCtrl);
|
||||
|
||||
/* Write addr swizzle lock bit. */
|
||||
reg::Write(EMC + EMC_FBIO_SPARE, params->EmcFbioSpare | 2);
|
||||
|
||||
/* Trigger timing update. */
|
||||
reg::Write(EMC + EMC_TIMING_CONTROL, 1);
|
||||
|
||||
if constexpr (SocType == fuse::SocType_Mariko) {
|
||||
reg::Write(EMC + EMC_CFG_UPDATE, params->EmcCfgUpdate);
|
||||
}
|
||||
|
||||
/* Enable EMC pipe clock gating. */
|
||||
reg::Write(EMC + EMC_CFG_PIPE_CLK, params->EmcCfgPipeClk);
|
||||
|
||||
/* Depending on freqency, enable CMD/CLK fdpd. */
|
||||
reg::Write(EMC + EMC_FDPD_CTRL_CMD_NO_RAMP, params->EmcFdpdCtrlCmdNoRamp);
|
||||
|
||||
if constexpr (SocType == fuse::SocType_Erista) {
|
||||
reg::ReadWrite(AHB + AHB_ARBITRATION_XBAR_CTRL, AHB_REG_BITS_VALUE(ARBITRATION_XBAR_CTRL_MEM_INIT_DONE, params->AhbArbitrationXbarCtrlMemInitDone));
|
||||
}
|
||||
|
||||
if constexpr (SocType == fuse::SocType_Mariko) {
|
||||
reg::Write(MC + MC_UNTRANSLATED_REGION_CHECK, params->McUntranslatedRegionCheck);
|
||||
}
|
||||
|
||||
/* Lock carveouts. */
|
||||
reg::Write(MC + MC_VIDEO_PROTECT_REG_CTRL, params->McVideoProtectWriteAccess);
|
||||
reg::Write(MC + MC_SEC_CARVEOUT_REG_CTRL, params->McSecCarveoutProtectWriteAccess);
|
||||
reg::Write(MC + MC_MTS_CARVEOUT_REG_CTRL, params->McMtsCarveoutRegCtrl);
|
||||
|
||||
reg::Write(MC + MC_EMEM_CFG_ACCESS_CTRL, 1);
|
||||
|
||||
if constexpr (SocType == fuse::SocType_Mariko) {
|
||||
reg::ReadWrite(AHB + AHB_ARBITRATION_XBAR_CTRL, AHB_REG_BITS_VALUE(ARBITRATION_XBAR_CTRL_MEM_INIT_DONE, params->AhbArbitrationXbarCtrlMemInitDone));
|
||||
}
|
||||
}
|
||||
|
||||
template<fuse::SocType SocType>
|
||||
void SaveSdramParamsToScratch(BootSdramParams<SocType> *params) {
|
||||
/* TODO */
|
||||
}
|
||||
|
||||
template<fuse::SocType SocType>
|
||||
void InitializeSdram(void *generic_params) {
|
||||
/* Get converted parameters. */
|
||||
auto *sdram_params = static_cast<BootSdramParams<SocType> *>(generic_params);
|
||||
|
||||
/* Enable VDD Memory */
|
||||
pmic::EnableVddMemory(SocType);
|
||||
|
||||
/* Set VDDP select. */
|
||||
reg::Write(PMC + APBDEV_PMC_VDDP_SEL, sdram_params->PmcVddpSel);
|
||||
util::WaitMicroSeconds(sdram_params->PmcVddpSelWait);
|
||||
|
||||
/* If Erista, Set DDR pad voltage. */
|
||||
if constexpr (SocType == fuse::SocType_Erista) {
|
||||
reg::Write(PMC + APBDEV_PMC_DDR_PWR, reg::Read(PMC + APBDEV_PMC_DDR_PWR));
|
||||
}
|
||||
|
||||
/* Turn on MEM IO power. */
|
||||
reg::Write(PMC + APBDEV_PMC_NO_IOPOWER, sdram_params->PmcNoIoPower);
|
||||
reg::Write(PMC + APBDEV_PMC_REG_SHORT, sdram_params->PmcRegShort);
|
||||
reg::Write(PMC + APBDEV_PMC_DDR_CNTRL, sdram_params->PmcDdrCntrl);
|
||||
|
||||
/* Apply patch 1. */
|
||||
*reinterpret_cast<volatile u32 *>(sdram_params->EmcBctSpare0) = sdram_params->EmcBctSpare1;
|
||||
|
||||
/* Do main init. */
|
||||
InitializeSdramImpl<SocType>(sdram_params);
|
||||
|
||||
/* Save parameters to scratch. */
|
||||
SaveSdramParamsToScratch<SocType>(sdram_params);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void InitializeSdram() {
|
||||
/* Get soc type. */
|
||||
const auto soc_type = fuse::GetSocType();
|
||||
|
||||
/* Get Sdram params. */
|
||||
void *sdram_params = GetSdramParams(soc_type);
|
||||
|
||||
/* Perform SoC-specific init. */
|
||||
if (soc_type == fuse::SocType_Erista) {
|
||||
InitializeSdram<fuse::SocType_Erista>(sdram_params);
|
||||
} else /* if (soc_type == fuse::SocType_Mariko) */ {
|
||||
InitializeSdram<fuse::SocType_Mariko>(sdram_params);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
23
fusee_cpp/program/source/fusee_sdram.hpp
Normal file
23
fusee_cpp/program/source/fusee_sdram.hpp
Normal file
|
@ -0,0 +1,23 @@
|
|||
/*
|
||||
* Copyright (c) 2018-2020 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include <exosphere.hpp>
|
||||
#pragma once
|
||||
|
||||
namespace ams::nxboot {
|
||||
|
||||
void InitializeSdram();
|
||||
|
||||
}
|
1267
fusee_cpp/program/source/fusee_sdram_params.inc
Normal file
1267
fusee_cpp/program/source/fusee_sdram_params.inc
Normal file
File diff suppressed because it is too large
Load diff
103
fusee_cpp/program/source/fusee_uncompress.cpp
Normal file
103
fusee_cpp/program/source/fusee_uncompress.cpp
Normal file
|
@ -0,0 +1,103 @@
|
|||
/*
|
||||
* Copyright (c) 2018-2020 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include <exosphere.hpp>
|
||||
#include "fusee_uncompress.hpp"
|
||||
|
||||
namespace ams::nxboot {
|
||||
|
||||
namespace {
|
||||
|
||||
class Lz4Uncompressor {
|
||||
private:
|
||||
const u8 *src;
|
||||
size_t src_size;
|
||||
size_t src_offset;
|
||||
u8 *dst;
|
||||
size_t dst_size;
|
||||
size_t dst_offset;
|
||||
public:
|
||||
Lz4Uncompressor(void *dst, size_t dst_size, const void *src, size_t src_size) : src(static_cast<const u8 *>(src)), src_size(src_size), src_offset(0), dst(static_cast<u8 *>(dst)), dst_size(dst_size), dst_offset(0) {
|
||||
/* ... */
|
||||
}
|
||||
|
||||
void Uncompress() {
|
||||
while (true) {
|
||||
/* Read a control byte. */
|
||||
const u8 control = this->ReadByte();
|
||||
|
||||
/* Copy what it specifies we should copy. */
|
||||
this->Copy(this->GetCopySize(control >> 4));
|
||||
|
||||
/* If we've exceeded size, we're done. */
|
||||
if (this->src_offset >= this->src_size) {
|
||||
break;
|
||||
}
|
||||
|
||||
/* Read the wide copy offset. */
|
||||
u16 wide_offset = this->ReadByte();
|
||||
AMS_ABORT_UNLESS(this->CanRead());
|
||||
wide_offset |= (this->ReadByte() << 8);
|
||||
|
||||
/* Determine the copy size. */
|
||||
const size_t wide_copy_size = this->GetCopySize(control & 0xF);
|
||||
|
||||
/* Copy bytes. */
|
||||
const size_t end_offset = this->dst_offset + wide_copy_size + 4;
|
||||
for (size_t cur_offset = this->dst_offset; cur_offset < end_offset; this->dst_offset = (++cur_offset)) {
|
||||
AMS_ABORT_UNLESS(wide_offset <= cur_offset);
|
||||
|
||||
this->dst[cur_offset] = this->dst[cur_offset - wide_offset];
|
||||
}
|
||||
}
|
||||
}
|
||||
private:
|
||||
u8 ReadByte() {
|
||||
return this->src[this->src_offset++];
|
||||
}
|
||||
|
||||
bool CanRead() const {
|
||||
return this->src_offset < this->src_size;
|
||||
}
|
||||
|
||||
size_t GetCopySize(u8 control) {
|
||||
size_t size = control;
|
||||
|
||||
if (control >= 0xF) {
|
||||
do {
|
||||
AMS_ABORT_UNLESS(this->CanRead());
|
||||
control = this->ReadByte();
|
||||
size += control;
|
||||
} while (control == 0xFF);
|
||||
}
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
void Copy(size_t size) {
|
||||
__builtin_memcpy(this->dst + this->dst_offset, this->src + this->src_offset, size);
|
||||
this->dst_offset += size;
|
||||
this->src_offset += size;
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
void Uncompress(void *dst, size_t dst_size, const void *src, size_t src_size) {
|
||||
/* Create an execute a decompressor. */
|
||||
Lz4Uncompressor(dst, dst_size, src, src_size).Uncompress();
|
||||
}
|
||||
|
||||
}
|
23
fusee_cpp/program/source/fusee_uncompress.hpp
Normal file
23
fusee_cpp/program/source/fusee_uncompress.hpp
Normal file
|
@ -0,0 +1,23 @@
|
|||
/*
|
||||
* Copyright (c) 2018-2020 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include <vapours.hpp>
|
||||
#pragma once
|
||||
|
||||
namespace ams::nxboot {
|
||||
|
||||
void Uncompress(void *dst, size_t dst_size, const void *src, size_t src_size);
|
||||
|
||||
}
|
65
fusee_cpp/program/update_sdram_params.py
Normal file
65
fusee_cpp/program/update_sdram_params.py
Normal file
|
@ -0,0 +1,65 @@
|
|||
#!/usr/bin/env python
|
||||
import sys, lz4, os
|
||||
from struct import unpack as up
|
||||
|
||||
def lz4_compress(data):
|
||||
try:
|
||||
import lz4.block as block
|
||||
except ImportError:
|
||||
block = lz4.LZ4_compress
|
||||
return block.compress(data, 'high_compression', store_size=False)
|
||||
|
||||
def read_file(fn):
|
||||
with open(fn, 'rb') as f:
|
||||
return f.read()
|
||||
|
||||
def write_file(fn, data):
|
||||
with open(fn, 'wb') as f:
|
||||
f.write(data)
|
||||
|
||||
def main(argc, argv):
|
||||
if argc != 1:
|
||||
print('Usage: %s' % argv[0])
|
||||
return 1
|
||||
params = {
|
||||
'erista' : {},
|
||||
'mariko' : {},
|
||||
}
|
||||
for fn in os.listdir('sdram_params/bin'):
|
||||
assert fn.startswith('sdram_params_') and fn.endswith('.bin')
|
||||
(_sdram, _params, soc, _id_bin) = tuple(fn.split('_'))
|
||||
param_id = int(_id_bin[:-len('.bin')])
|
||||
assert soc in params.keys()
|
||||
compressed = lz4_compress(read_file(os.path.join('sdram_params/bin', fn)))
|
||||
write_file(os.path.join('sdram_params/lz', fn.replace('.bin', '.lz4')), compressed)
|
||||
params[soc][param_id] = compressed
|
||||
with open('source/fusee_sdram_params.inc', 'w') as f:
|
||||
f.write('%s\n' % "/*")
|
||||
f.write('%s\n' % " * Copyright (c) 2018-2020 Atmosph\xc3re-NX")
|
||||
f.write('%s\n' % " *")
|
||||
f.write('%s\n' % " * This program is free software; you can redistribute it and/or modify it")
|
||||
f.write('%s\n' % " * under the terms and conditions of the GNU General Public License,")
|
||||
f.write('%s\n' % " * version 2, as published by the Free Software Foundation.")
|
||||
f.write('%s\n' % " *")
|
||||
f.write('%s\n' % " * This program is distributed in the hope it will be useful, but WITHOUT")
|
||||
f.write('%s\n' % " * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or")
|
||||
f.write('%s\n' % " * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for")
|
||||
f.write('%s\n' % " * more details.")
|
||||
f.write('%s\n' % " *")
|
||||
f.write('%s\n' % " * You should have received a copy of the GNU General Public License")
|
||||
f.write('%s\n' % " * along with this program. If not, see <http://www.gnu.org/licenses/>.")
|
||||
f.write('%s\n' % " */")
|
||||
f.write('\n')
|
||||
for soc in ('Erista', 'Mariko'):
|
||||
for param_id in sorted(params[soc.lower()].keys()):
|
||||
compressed = params[soc.lower()][param_id]
|
||||
f.write('%s\n' % ('constexpr inline const u8 SdramParams%s%d[0x%03X] = {' % (soc, param_id, len(compressed))))
|
||||
while compressed:
|
||||
block = compressed[:0x10]
|
||||
compressed = compressed[0x10:]
|
||||
f.write(' %s\n' % (', '.join('0x%02X' % ord(c) for c in block) + ','))
|
||||
f.write('};\n\n')
|
||||
return 0
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(main(len(sys.argv), sys.argv))
|
|
@ -0,0 +1,28 @@
|
|||
/*
|
||||
* Copyright (c) 2018-2020 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#pragma once
|
||||
#include <vapours.hpp>
|
||||
|
||||
namespace ams::br {
|
||||
|
||||
enum BootMemoryType : u32 {
|
||||
BootMemoryType_None,
|
||||
BootMemoryType_LpDdr2,
|
||||
BootMemoryType_Ddr3,
|
||||
BootMemoryType_LpDdr4,
|
||||
};
|
||||
|
||||
}
|
|
@ -15,7 +15,486 @@
|
|||
*/
|
||||
#pragma once
|
||||
#include <vapours.hpp>
|
||||
#include <exosphere/br/impl/br_common_types.hpp>
|
||||
|
||||
namespace ams::br::erista {
|
||||
|
||||
struct BootSdramParams {
|
||||
BootMemoryType MemoryType;
|
||||
u32 PllMInputDivider;
|
||||
u32 PllMFeedbackDivider;
|
||||
u32 PllMStableTime;
|
||||
u32 PllMSetupControl;
|
||||
u32 PllMPostDivider;
|
||||
u32 PllMKCP;
|
||||
u32 PllMKVCO;
|
||||
u32 EmcBctSpare0;
|
||||
u32 EmcBctSpare1;
|
||||
u32 EmcBctSpare2;
|
||||
u32 EmcBctSpare3;
|
||||
u32 EmcBctSpare4;
|
||||
u32 EmcBctSpare5;
|
||||
u32 EmcBctSpare6;
|
||||
u32 EmcBctSpare7;
|
||||
u32 EmcBctSpare8;
|
||||
u32 EmcBctSpare9;
|
||||
u32 EmcBctSpare10;
|
||||
u32 EmcBctSpare11;
|
||||
u32 EmcBctSpare12;
|
||||
u32 EmcBctSpare13;
|
||||
u32 EmcClockSource;
|
||||
u32 EmcClockSourceDll;
|
||||
u32 ClkRstControllerPllmMisc2Override;
|
||||
u32 ClkRstControllerPllmMisc2OverrideEnable;
|
||||
u32 ClearClk2Mc1;
|
||||
u32 EmcAutoCalInterval;
|
||||
u32 EmcAutoCalConfig;
|
||||
u32 EmcAutoCalConfig2;
|
||||
u32 EmcAutoCalConfig3;
|
||||
u32 EmcAutoCalConfig4;
|
||||
u32 EmcAutoCalConfig5;
|
||||
u32 EmcAutoCalConfig6;
|
||||
u32 EmcAutoCalConfig7;
|
||||
u32 EmcAutoCalConfig8;
|
||||
u32 EmcAutoCalVrefSel0;
|
||||
u32 EmcAutoCalVrefSel1;
|
||||
u32 EmcAutoCalChannel;
|
||||
u32 EmcPmacroAutocalCfg0;
|
||||
u32 EmcPmacroAutocalCfg1;
|
||||
u32 EmcPmacroAutocalCfg2;
|
||||
u32 EmcPmacroRxTerm;
|
||||
u32 EmcPmacroDqTxDrv;
|
||||
u32 EmcPmacroCaTxDrv;
|
||||
u32 EmcPmacroCmdTxDrv;
|
||||
u32 EmcPmacroAutocalCfgCommon;
|
||||
u32 EmcPmacroZctrl;
|
||||
u32 EmcAutoCalWait;
|
||||
u32 EmcXm2CompPadCtrl;
|
||||
u32 EmcXm2CompPadCtrl2;
|
||||
u32 EmcXm2CompPadCtrl3;
|
||||
u32 EmcAdrCfg;
|
||||
u32 EmcPinProgramWait;
|
||||
u32 EmcPinExtraWait;
|
||||
u32 EmcPinGpioEn;
|
||||
u32 EmcPinGpio;
|
||||
u32 EmcTimingControlWait;
|
||||
u32 EmcRc;
|
||||
u32 EmcRfc;
|
||||
u32 EmcRfcPb;
|
||||
u32 EmcRefctrl2;
|
||||
u32 EmcRfcSlr;
|
||||
u32 EmcRas;
|
||||
u32 EmcRp;
|
||||
u32 EmcR2r;
|
||||
u32 EmcW2w;
|
||||
u32 EmcR2w;
|
||||
u32 EmcW2r;
|
||||
u32 EmcR2p;
|
||||
u32 EmcW2p;
|
||||
u32 EmcTppd;
|
||||
u32 EmcCcdmw;
|
||||
u32 EmcRdRcd;
|
||||
u32 EmcWrRcd;
|
||||
u32 EmcRrd;
|
||||
u32 EmcRext;
|
||||
u32 EmcWext;
|
||||
u32 EmcWdv;
|
||||
u32 EmcWdvChk;
|
||||
u32 EmcWsv;
|
||||
u32 EmcWev;
|
||||
u32 EmcWdvMask;
|
||||
u32 EmcWsDuration;
|
||||
u32 EmcWeDuration;
|
||||
u32 EmcQUse;
|
||||
u32 EmcQuseWidth;
|
||||
u32 EmcIbdly;
|
||||
u32 EmcObdly;
|
||||
u32 EmcEInput;
|
||||
u32 EmcEInputDuration;
|
||||
u32 EmcPutermExtra;
|
||||
u32 EmcPutermWidth;
|
||||
u32 EmcQRst;
|
||||
u32 EmcQSafe;
|
||||
u32 EmcRdv;
|
||||
u32 EmcRdvMask;
|
||||
u32 EmcRdvEarly;
|
||||
u32 EmcRdvEarlyMask;
|
||||
u32 EmcQpop;
|
||||
u32 EmcRefresh;
|
||||
u32 EmcBurstRefreshNum;
|
||||
u32 EmcPreRefreshReqCnt;
|
||||
u32 EmcPdEx2Wr;
|
||||
u32 EmcPdEx2Rd;
|
||||
u32 EmcPChg2Pden;
|
||||
u32 EmcAct2Pden;
|
||||
u32 EmcAr2Pden;
|
||||
u32 EmcRw2Pden;
|
||||
u32 EmcCke2Pden;
|
||||
u32 EmcPdex2Cke;
|
||||
u32 EmcPdex2Mrr;
|
||||
u32 EmcTxsr;
|
||||
u32 EmcTxsrDll;
|
||||
u32 EmcTcke;
|
||||
u32 EmcTckesr;
|
||||
u32 EmcTpd;
|
||||
u32 EmcTfaw;
|
||||
u32 EmcTrpab;
|
||||
u32 EmcTClkStable;
|
||||
u32 EmcTClkStop;
|
||||
u32 EmcTRefBw;
|
||||
u32 EmcFbioCfg5;
|
||||
u32 EmcFbioCfg7;
|
||||
u32 EmcFbioCfg8;
|
||||
u32 EmcCmdMappingCmd0_0;
|
||||
u32 EmcCmdMappingCmd0_1;
|
||||
u32 EmcCmdMappingCmd0_2;
|
||||
u32 EmcCmdMappingCmd1_0;
|
||||
u32 EmcCmdMappingCmd1_1;
|
||||
u32 EmcCmdMappingCmd1_2;
|
||||
u32 EmcCmdMappingCmd2_0;
|
||||
u32 EmcCmdMappingCmd2_1;
|
||||
u32 EmcCmdMappingCmd2_2;
|
||||
u32 EmcCmdMappingCmd3_0;
|
||||
u32 EmcCmdMappingCmd3_1;
|
||||
u32 EmcCmdMappingCmd3_2;
|
||||
u32 EmcCmdMappingByte;
|
||||
u32 EmcFbioSpare;
|
||||
u32 EmcCfgRsv;
|
||||
u32 EmcMrs;
|
||||
u32 EmcEmrs;
|
||||
u32 EmcEmrs2;
|
||||
u32 EmcEmrs3;
|
||||
u32 EmcMrw1;
|
||||
u32 EmcMrw2;
|
||||
u32 EmcMrw3;
|
||||
u32 EmcMrw4;
|
||||
u32 EmcMrw6;
|
||||
u32 EmcMrw8;
|
||||
u32 EmcMrw9;
|
||||
u32 EmcMrw10;
|
||||
u32 EmcMrw12;
|
||||
u32 EmcMrw13;
|
||||
u32 EmcMrw14;
|
||||
u32 EmcMrwExtra;
|
||||
u32 EmcWarmBootMrwExtra;
|
||||
u32 EmcWarmBootExtraModeRegWriteEnable;
|
||||
u32 EmcExtraModeRegWriteEnable;
|
||||
u32 EmcMrwResetCommand;
|
||||
u32 EmcMrwResetNInitWait;
|
||||
u32 EmcMrsWaitCnt;
|
||||
u32 EmcMrsWaitCnt2;
|
||||
u32 EmcCfg;
|
||||
u32 EmcCfg2;
|
||||
u32 EmcCfgPipe;
|
||||
u32 EmcCfgPipeClk;
|
||||
u32 EmcFdpdCtrlCmdNoRamp;
|
||||
u32 EmcCfgUpdate;
|
||||
u32 EmcDbg;
|
||||
u32 EmcDbgWriteMux;
|
||||
u32 EmcCmdQ;
|
||||
u32 EmcMc2EmcQ;
|
||||
u32 EmcDynSelfRefControl;
|
||||
u32 AhbArbitrationXbarCtrlMemInitDone;
|
||||
u32 EmcCfgDigDll;
|
||||
u32 EmcCfgDigDll_1;
|
||||
u32 EmcCfgDigDllPeriod;
|
||||
u32 EmcDevSelect;
|
||||
u32 EmcSelDpdCtrl;
|
||||
u32 EmcFdpdCtrlDq;
|
||||
u32 EmcFdpdCtrlCmd;
|
||||
u32 EmcPmacroIbVrefDq_0;
|
||||
u32 EmcPmacroIbVrefDq_1;
|
||||
u32 EmcPmacroIbVrefDqs_0;
|
||||
u32 EmcPmacroIbVrefDqs_1;
|
||||
u32 EmcPmacroIbRxrt;
|
||||
u32 EmcCfgPipe1;
|
||||
u32 EmcCfgPipe2;
|
||||
u32 EmcPmacroQuseDdllRank0_0;
|
||||
u32 EmcPmacroQuseDdllRank0_1;
|
||||
u32 EmcPmacroQuseDdllRank0_2;
|
||||
u32 EmcPmacroQuseDdllRank0_3;
|
||||
u32 EmcPmacroQuseDdllRank0_4;
|
||||
u32 EmcPmacroQuseDdllRank0_5;
|
||||
u32 EmcPmacroQuseDdllRank1_0;
|
||||
u32 EmcPmacroQuseDdllRank1_1;
|
||||
u32 EmcPmacroQuseDdllRank1_2;
|
||||
u32 EmcPmacroQuseDdllRank1_3;
|
||||
u32 EmcPmacroQuseDdllRank1_4;
|
||||
u32 EmcPmacroQuseDdllRank1_5;
|
||||
u32 EmcPmacroObDdllLongDqRank0_0;
|
||||
u32 EmcPmacroObDdllLongDqRank0_1;
|
||||
u32 EmcPmacroObDdllLongDqRank0_2;
|
||||
u32 EmcPmacroObDdllLongDqRank0_3;
|
||||
u32 EmcPmacroObDdllLongDqRank0_4;
|
||||
u32 EmcPmacroObDdllLongDqRank0_5;
|
||||
u32 EmcPmacroObDdllLongDqRank1_0;
|
||||
u32 EmcPmacroObDdllLongDqRank1_1;
|
||||
u32 EmcPmacroObDdllLongDqRank1_2;
|
||||
u32 EmcPmacroObDdllLongDqRank1_3;
|
||||
u32 EmcPmacroObDdllLongDqRank1_4;
|
||||
u32 EmcPmacroObDdllLongDqRank1_5;
|
||||
u32 EmcPmacroObDdllLongDqsRank0_0;
|
||||
u32 EmcPmacroObDdllLongDqsRank0_1;
|
||||
u32 EmcPmacroObDdllLongDqsRank0_2;
|
||||
u32 EmcPmacroObDdllLongDqsRank0_3;
|
||||
u32 EmcPmacroObDdllLongDqsRank0_4;
|
||||
u32 EmcPmacroObDdllLongDqsRank0_5;
|
||||
u32 EmcPmacroObDdllLongDqsRank1_0;
|
||||
u32 EmcPmacroObDdllLongDqsRank1_1;
|
||||
u32 EmcPmacroObDdllLongDqsRank1_2;
|
||||
u32 EmcPmacroObDdllLongDqsRank1_3;
|
||||
u32 EmcPmacroObDdllLongDqsRank1_4;
|
||||
u32 EmcPmacroObDdllLongDqsRank1_5;
|
||||
u32 EmcPmacroIbDdllLongDqsRank0_0;
|
||||
u32 EmcPmacroIbDdllLongDqsRank0_1;
|
||||
u32 EmcPmacroIbDdllLongDqsRank0_2;
|
||||
u32 EmcPmacroIbDdllLongDqsRank0_3;
|
||||
u32 EmcPmacroIbDdllLongDqsRank1_0;
|
||||
u32 EmcPmacroIbDdllLongDqsRank1_1;
|
||||
u32 EmcPmacroIbDdllLongDqsRank1_2;
|
||||
u32 EmcPmacroIbDdllLongDqsRank1_3;
|
||||
u32 EmcPmacroDdllLongCmd_0;
|
||||
u32 EmcPmacroDdllLongCmd_1;
|
||||
u32 EmcPmacroDdllLongCmd_2;
|
||||
u32 EmcPmacroDdllLongCmd_3;
|
||||
u32 EmcPmacroDdllLongCmd_4;
|
||||
u32 EmcPmacroDdllShortCmd_0;
|
||||
u32 EmcPmacroDdllShortCmd_1;
|
||||
u32 EmcPmacroDdllShortCmd_2;
|
||||
u32 WarmBootWait;
|
||||
u32 EmcOdtWrite;
|
||||
u32 EmcZcalInterval;
|
||||
u32 EmcZcalWaitCnt;
|
||||
u32 EmcZcalMrwCmd;
|
||||
u32 EmcMrsResetDll;
|
||||
u32 EmcZcalInitDev0;
|
||||
u32 EmcZcalInitDev1;
|
||||
u32 EmcZcalInitWait;
|
||||
u32 EmcZcalWarmColdBootEnables;
|
||||
u32 EmcMrwLpddr2ZcalWarmBoot;
|
||||
u32 EmcZqCalDdr3WarmBoot;
|
||||
u32 EmcZqCalLpDdr4WarmBoot;
|
||||
u32 EmcZcalWarmBootWait;
|
||||
u32 EmcMrsWarmBootEnable;
|
||||
u32 EmcMrsResetDllWait;
|
||||
u32 EmcMrsExtra;
|
||||
u32 EmcWarmBootMrsExtra;
|
||||
u32 EmcEmrsDdr2DllEnable;
|
||||
u32 EmcMrsDdr2DllReset;
|
||||
u32 EmcEmrsDdr2OcdCalib;
|
||||
u32 EmcDdr2Wait;
|
||||
u32 EmcClkenOverride;
|
||||
u32 EmcExtraRefreshNum;
|
||||
u32 EmcClkenOverrideAllWarmBoot;
|
||||
u32 McClkenOverrideAllWarmBoot;
|
||||
u32 EmcCfgDigDllPeriodWarmBoot;
|
||||
u32 PmcVddpSel;
|
||||
u32 PmcVddpSelWait;
|
||||
u32 PmcDdrPwr;
|
||||
u32 PmcDdrCfg;
|
||||
u32 PmcIoDpd3Req;
|
||||
u32 PmcIoDpd3ReqWait;
|
||||
u32 PmcIoDpd4ReqWait;
|
||||
u32 PmcRegShort;
|
||||
u32 PmcNoIoPower;
|
||||
u32 PmcDdrCntrlWait;
|
||||
u32 PmcDdrCntrl;
|
||||
u32 EmcAcpdControl;
|
||||
u32 EmcSwizzleRank0Byte0;
|
||||
u32 EmcSwizzleRank0Byte1;
|
||||
u32 EmcSwizzleRank0Byte2;
|
||||
u32 EmcSwizzleRank0Byte3;
|
||||
u32 EmcSwizzleRank1Byte0;
|
||||
u32 EmcSwizzleRank1Byte1;
|
||||
u32 EmcSwizzleRank1Byte2;
|
||||
u32 EmcSwizzleRank1Byte3;
|
||||
u32 EmcTxdsrvttgen;
|
||||
u32 EmcDataBrlshft0;
|
||||
u32 EmcDataBrlshft1;
|
||||
u32 EmcDqsBrlshft0;
|
||||
u32 EmcDqsBrlshft1;
|
||||
u32 EmcCmdBrlshft0;
|
||||
u32 EmcCmdBrlshft1;
|
||||
u32 EmcCmdBrlshft2;
|
||||
u32 EmcCmdBrlshft3;
|
||||
u32 EmcQuseBrlshft0;
|
||||
u32 EmcQuseBrlshft1;
|
||||
u32 EmcQuseBrlshft2;
|
||||
u32 EmcQuseBrlshft3;
|
||||
u32 EmcDllCfg0;
|
||||
u32 EmcDllCfg1;
|
||||
u32 EmcPmcScratch1;
|
||||
u32 EmcPmcScratch2;
|
||||
u32 EmcPmcScratch3;
|
||||
u32 EmcPmacroPadCfgCtrl;
|
||||
u32 EmcPmacroVttgenCtrl0;
|
||||
u32 EmcPmacroVttgenCtrl1;
|
||||
u32 EmcPmacroVttgenCtrl2;
|
||||
u32 EmcPmacroBrickCtrlRfu1;
|
||||
u32 EmcPmacroCmdBrickCtrlFdpd;
|
||||
u32 EmcPmacroBrickCtrlRfu2;
|
||||
u32 EmcPmacroDataBrickCtrlFdpd;
|
||||
u32 EmcPmacroBgBiasCtrl0;
|
||||
u32 EmcPmacroDataPadRxCtrl;
|
||||
u32 EmcPmacroCmdPadRxCtrl;
|
||||
u32 EmcPmacroDataRxTermMode;
|
||||
u32 EmcPmacroCmdRxTermMode;
|
||||
u32 EmcPmacroDataPadTxCtrl;
|
||||
u32 EmcPmacroCommonPadTxCtrl;
|
||||
u32 EmcPmacroCmdPadTxCtrl;
|
||||
u32 EmcCfg3;
|
||||
u32 EmcPmacroTxPwrd0;
|
||||
u32 EmcPmacroTxPwrd1;
|
||||
u32 EmcPmacroTxPwrd2;
|
||||
u32 EmcPmacroTxPwrd3;
|
||||
u32 EmcPmacroTxPwrd4;
|
||||
u32 EmcPmacroTxPwrd5;
|
||||
u32 EmcConfigSampleDelay;
|
||||
u32 EmcPmacroBrickMapping0;
|
||||
u32 EmcPmacroBrickMapping1;
|
||||
u32 EmcPmacroBrickMapping2;
|
||||
u32 EmcPmacroTxSelClkSrc0;
|
||||
u32 EmcPmacroTxSelClkSrc1;
|
||||
u32 EmcPmacroTxSelClkSrc2;
|
||||
u32 EmcPmacroTxSelClkSrc3;
|
||||
u32 EmcPmacroTxSelClkSrc4;
|
||||
u32 EmcPmacroTxSelClkSrc5;
|
||||
u32 EmcPmacroDdllBypass;
|
||||
u32 EmcPmacroDdllPwrd0;
|
||||
u32 EmcPmacroDdllPwrd1;
|
||||
u32 EmcPmacroDdllPwrd2;
|
||||
u32 EmcPmacroCmdCtrl0;
|
||||
u32 EmcPmacroCmdCtrl1;
|
||||
u32 EmcPmacroCmdCtrl2;
|
||||
u32 McEmemAdrCfg;
|
||||
u32 McEmemAdrCfgDev0;
|
||||
u32 McEmemAdrCfgDev1;
|
||||
u32 McEmemAdrCfgChannelMask;
|
||||
u32 McEmemAdrCfgBankMask0;
|
||||
u32 McEmemAdrCfgBankMask1;
|
||||
u32 McEmemAdrCfgBankMask2;
|
||||
u32 McEmemCfg;
|
||||
u32 McEmemArbCfg;
|
||||
u32 McEmemArbOutstandingReq;
|
||||
u32 McEmemArbRefpbHpCtrl;
|
||||
u32 McEmemArbRefpbBankCtrl;
|
||||
u32 McEmemArbTimingRcd;
|
||||
u32 McEmemArbTimingRp;
|
||||
u32 McEmemArbTimingRc;
|
||||
u32 McEmemArbTimingRas;
|
||||
u32 McEmemArbTimingFaw;
|
||||
u32 McEmemArbTimingRrd;
|
||||
u32 McEmemArbTimingRap2Pre;
|
||||
u32 McEmemArbTimingWap2Pre;
|
||||
u32 McEmemArbTimingR2R;
|
||||
u32 McEmemArbTimingW2W;
|
||||
u32 McEmemArbTimingR2W;
|
||||
u32 McEmemArbTimingW2R;
|
||||
u32 McEmemArbTimingRFCPB;
|
||||
u32 McEmemArbDaTurns;
|
||||
u32 McEmemArbDaCovers;
|
||||
u32 McEmemArbMisc0;
|
||||
u32 McEmemArbMisc1;
|
||||
u32 McEmemArbMisc2;
|
||||
u32 McEmemArbRing1Throttle;
|
||||
u32 McEmemArbOverride;
|
||||
u32 McEmemArbOverride1;
|
||||
u32 McEmemArbRsv;
|
||||
u32 McDaCfg0;
|
||||
u32 McEmemArbTimingCcdmw;
|
||||
u32 McClkenOverride;
|
||||
u32 McStatControl;
|
||||
u32 McVideoProtectBom;
|
||||
u32 McVideoProtectBomAdrHi;
|
||||
u32 McVideoProtectSizeMb;
|
||||
u32 McVideoProtectVprOverride;
|
||||
u32 McVideoProtectVprOverride1;
|
||||
u32 McVideoProtectGpuOverride0;
|
||||
u32 McVideoProtectGpuOverride1;
|
||||
u32 McSecCarveoutBom;
|
||||
u32 McSecCarveoutAdrHi;
|
||||
u32 McSecCarveoutSizeMb;
|
||||
u32 McVideoProtectWriteAccess;
|
||||
u32 McSecCarveoutProtectWriteAccess;
|
||||
u32 McGeneralizedCarveout1Bom;
|
||||
u32 McGeneralizedCarveout1BomHi;
|
||||
u32 McGeneralizedCarveout1Size128kb;
|
||||
u32 McGeneralizedCarveout1Access0;
|
||||
u32 McGeneralizedCarveout1Access1;
|
||||
u32 McGeneralizedCarveout1Access2;
|
||||
u32 McGeneralizedCarveout1Access3;
|
||||
u32 McGeneralizedCarveout1Access4;
|
||||
u32 McGeneralizedCarveout1ForceInternalAccess0;
|
||||
u32 McGeneralizedCarveout1ForceInternalAccess1;
|
||||
u32 McGeneralizedCarveout1ForceInternalAccess2;
|
||||
u32 McGeneralizedCarveout1ForceInternalAccess3;
|
||||
u32 McGeneralizedCarveout1ForceInternalAccess4;
|
||||
u32 McGeneralizedCarveout1Cfg0;
|
||||
u32 McGeneralizedCarveout2Bom;
|
||||
u32 McGeneralizedCarveout2BomHi;
|
||||
u32 McGeneralizedCarveout2Size128kb;
|
||||
u32 McGeneralizedCarveout2Access0;
|
||||
u32 McGeneralizedCarveout2Access1;
|
||||
u32 McGeneralizedCarveout2Access2;
|
||||
u32 McGeneralizedCarveout2Access3;
|
||||
u32 McGeneralizedCarveout2Access4;
|
||||
u32 McGeneralizedCarveout2ForceInternalAccess0;
|
||||
u32 McGeneralizedCarveout2ForceInternalAccess1;
|
||||
u32 McGeneralizedCarveout2ForceInternalAccess2;
|
||||
u32 McGeneralizedCarveout2ForceInternalAccess3;
|
||||
u32 McGeneralizedCarveout2ForceInternalAccess4;
|
||||
u32 McGeneralizedCarveout2Cfg0;
|
||||
u32 McGeneralizedCarveout3Bom;
|
||||
u32 McGeneralizedCarveout3BomHi;
|
||||
u32 McGeneralizedCarveout3Size128kb;
|
||||
u32 McGeneralizedCarveout3Access0;
|
||||
u32 McGeneralizedCarveout3Access1;
|
||||
u32 McGeneralizedCarveout3Access2;
|
||||
u32 McGeneralizedCarveout3Access3;
|
||||
u32 McGeneralizedCarveout3Access4;
|
||||
u32 McGeneralizedCarveout3ForceInternalAccess0;
|
||||
u32 McGeneralizedCarveout3ForceInternalAccess1;
|
||||
u32 McGeneralizedCarveout3ForceInternalAccess2;
|
||||
u32 McGeneralizedCarveout3ForceInternalAccess3;
|
||||
u32 McGeneralizedCarveout3ForceInternalAccess4;
|
||||
u32 McGeneralizedCarveout3Cfg0;
|
||||
u32 McGeneralizedCarveout4Bom;
|
||||
u32 McGeneralizedCarveout4BomHi;
|
||||
u32 McGeneralizedCarveout4Size128kb;
|
||||
u32 McGeneralizedCarveout4Access0;
|
||||
u32 McGeneralizedCarveout4Access1;
|
||||
u32 McGeneralizedCarveout4Access2;
|
||||
u32 McGeneralizedCarveout4Access3;
|
||||
u32 McGeneralizedCarveout4Access4;
|
||||
u32 McGeneralizedCarveout4ForceInternalAccess0;
|
||||
u32 McGeneralizedCarveout4ForceInternalAccess1;
|
||||
u32 McGeneralizedCarveout4ForceInternalAccess2;
|
||||
u32 McGeneralizedCarveout4ForceInternalAccess3;
|
||||
u32 McGeneralizedCarveout4ForceInternalAccess4;
|
||||
u32 McGeneralizedCarveout4Cfg0;
|
||||
u32 McGeneralizedCarveout5Bom;
|
||||
u32 McGeneralizedCarveout5BomHi;
|
||||
u32 McGeneralizedCarveout5Size128kb;
|
||||
u32 McGeneralizedCarveout5Access0;
|
||||
u32 McGeneralizedCarveout5Access1;
|
||||
u32 McGeneralizedCarveout5Access2;
|
||||
u32 McGeneralizedCarveout5Access3;
|
||||
u32 McGeneralizedCarveout5Access4;
|
||||
u32 McGeneralizedCarveout5ForceInternalAccess0;
|
||||
u32 McGeneralizedCarveout5ForceInternalAccess1;
|
||||
u32 McGeneralizedCarveout5ForceInternalAccess2;
|
||||
u32 McGeneralizedCarveout5ForceInternalAccess3;
|
||||
u32 McGeneralizedCarveout5ForceInternalAccess4;
|
||||
u32 McGeneralizedCarveout5Cfg0;
|
||||
u32 EmcCaTrainingEnable;
|
||||
u32 SwizzleRankByteEncode;
|
||||
u32 BootRomPatchControl;
|
||||
u32 BootRomPatchData;
|
||||
u32 McMtsCarveoutBom;
|
||||
u32 McMtsCarveoutAdrHi;
|
||||
u32 McMtsCarveoutSizeMb;
|
||||
u32 McMtsCarveoutRegCtrl;
|
||||
};
|
||||
static_assert(sizeof(BootSdramParams) == 0x768);
|
||||
|
||||
}
|
||||
|
|
|
@ -15,7 +15,538 @@
|
|||
*/
|
||||
#pragma once
|
||||
#include <vapours.hpp>
|
||||
#include <exosphere/br/impl/br_common_types.hpp>
|
||||
|
||||
namespace ams::br::mariko {
|
||||
|
||||
struct BootSdramParams {
|
||||
BootMemoryType MemoryType;
|
||||
u32 PllMInputDivider;
|
||||
u32 PllMFeedbackDivider;
|
||||
u32 PllMStableTime;
|
||||
u32 PllMSetupControl;
|
||||
u32 PllMPostDivider;
|
||||
u32 PllMKCP;
|
||||
u32 PllMKVCO;
|
||||
u32 EmcBctSpare0;
|
||||
u32 EmcBctSpare1;
|
||||
u32 EmcBctSpare2;
|
||||
u32 EmcBctSpare3;
|
||||
u32 EmcBctSpare4;
|
||||
u32 EmcBctSpare5;
|
||||
u32 EmcBctSpare6;
|
||||
u32 EmcBctSpare7;
|
||||
u32 EmcBctSpare8;
|
||||
u32 EmcBctSpare9;
|
||||
u32 EmcBctSpare10;
|
||||
u32 EmcBctSpare11;
|
||||
u32 EmcBctSpare12;
|
||||
u32 EmcBctSpare13;
|
||||
u32 EmcBctSpareSecure0;
|
||||
u32 EmcBctSpareSecure1;
|
||||
u32 EmcBctSpareSecure2;
|
||||
u32 EmcBctSpareSecure3;
|
||||
u32 EmcBctSpareSecure4;
|
||||
u32 EmcBctSpareSecure5;
|
||||
u32 EmcBctSpareSecure6;
|
||||
u32 EmcBctSpareSecure7;
|
||||
u32 EmcBctSpareSecure8;
|
||||
u32 EmcBctSpareSecure9;
|
||||
u32 EmcBctSpareSecure10;
|
||||
u32 EmcBctSpareSecure11;
|
||||
u32 EmcBctSpareSecure12;
|
||||
u32 EmcBctSpareSecure13;
|
||||
u32 EmcBctSpareSecure14;
|
||||
u32 EmcBctSpareSecure15;
|
||||
u32 EmcBctSpareSecure16;
|
||||
u32 EmcBctSpareSecure17;
|
||||
u32 EmcBctSpareSecure18;
|
||||
u32 EmcBctSpareSecure19;
|
||||
u32 EmcBctSpareSecure20;
|
||||
u32 EmcBctSpareSecure21;
|
||||
u32 EmcBctSpareSecure22;
|
||||
u32 EmcBctSpareSecure23;
|
||||
u32 EmcClockSource;
|
||||
u32 EmcClockSourceDll;
|
||||
u32 ClkRstControllerPllmMisc2Override;
|
||||
u32 ClkRstControllerPllmMisc2OverrideEnable;
|
||||
u32 ClearClk2Mc1;
|
||||
u32 EmcAutoCalInterval;
|
||||
u32 EmcAutoCalConfig;
|
||||
u32 EmcAutoCalConfig2;
|
||||
u32 EmcAutoCalConfig3;
|
||||
u32 EmcAutoCalConfig4;
|
||||
u32 EmcAutoCalConfig5;
|
||||
u32 EmcAutoCalConfig6;
|
||||
u32 EmcAutoCalConfig7;
|
||||
u32 EmcAutoCalConfig8;
|
||||
u32 EmcAutoCalConfig9;
|
||||
u32 EmcAutoCalVrefSel0;
|
||||
u32 EmcAutoCalVrefSel1;
|
||||
u32 EmcAutoCalChannel;
|
||||
u32 EmcPmacroAutocalCfg0;
|
||||
u32 EmcPmacroAutocalCfg1;
|
||||
u32 EmcPmacroAutocalCfg2;
|
||||
u32 EmcPmacroRxTerm;
|
||||
u32 EmcPmacroDqTxDrv;
|
||||
u32 EmcPmacroCaTxDrv;
|
||||
u32 EmcPmacroCmdTxDrv;
|
||||
u32 EmcPmacroAutocalCfgCommon;
|
||||
u32 EmcPmacroZctrl;
|
||||
u32 EmcAutoCalWait;
|
||||
u32 EmcXm2CompPadCtrl;
|
||||
u32 EmcXm2CompPadCtrl2;
|
||||
u32 EmcXm2CompPadCtrl3;
|
||||
u32 EmcAdrCfg;
|
||||
u32 EmcPinProgramWait;
|
||||
u32 EmcPinExtraWait;
|
||||
u32 EmcPinGpioEn;
|
||||
u32 EmcPinGpio;
|
||||
u32 EmcTimingControlWait;
|
||||
u32 EmcRc;
|
||||
u32 EmcRfc;
|
||||
u32 EmcRfcPb;
|
||||
u32 EmcRefctrl2;
|
||||
u32 EmcRfcSlr;
|
||||
u32 EmcRas;
|
||||
u32 EmcRp;
|
||||
u32 EmcR2r;
|
||||
u32 EmcW2w;
|
||||
u32 EmcR2w;
|
||||
u32 EmcW2r;
|
||||
u32 EmcR2p;
|
||||
u32 EmcW2p;
|
||||
u32 EmcTppd;
|
||||
u32 EmcTrtm;
|
||||
u32 EmcTwtm;
|
||||
u32 EmcTratm;
|
||||
u32 EmcTwatm;
|
||||
u32 EmcTr2ref;
|
||||
u32 EmcCcdmw;
|
||||
u32 EmcRdRcd;
|
||||
u32 EmcWrRcd;
|
||||
u32 EmcRrd;
|
||||
u32 EmcRext;
|
||||
u32 EmcWext;
|
||||
u32 EmcWdv;
|
||||
u32 EmcWdvChk;
|
||||
u32 EmcWsv;
|
||||
u32 EmcWev;
|
||||
u32 EmcWdvMask;
|
||||
u32 EmcWsDuration;
|
||||
u32 EmcWeDuration;
|
||||
u32 EmcQUse;
|
||||
u32 EmcQuseWidth;
|
||||
u32 EmcIbdly;
|
||||
u32 EmcObdly;
|
||||
u32 EmcEInput;
|
||||
u32 EmcEInputDuration;
|
||||
u32 EmcPutermExtra;
|
||||
u32 EmcPutermWidth;
|
||||
u32 EmcQRst;
|
||||
u32 EmcQSafe;
|
||||
u32 EmcRdv;
|
||||
u32 EmcRdvMask;
|
||||
u32 EmcRdvEarly;
|
||||
u32 EmcRdvEarlyMask;
|
||||
u32 EmcQpop;
|
||||
u32 EmcRefresh;
|
||||
u32 EmcBurstRefreshNum;
|
||||
u32 EmcPreRefreshReqCnt;
|
||||
u32 EmcPdEx2Wr;
|
||||
u32 EmcPdEx2Rd;
|
||||
u32 EmcPChg2Pden;
|
||||
u32 EmcAct2Pden;
|
||||
u32 EmcAr2Pden;
|
||||
u32 EmcRw2Pden;
|
||||
u32 EmcCke2Pden;
|
||||
u32 EmcPdex2Cke;
|
||||
u32 EmcPdex2Mrr;
|
||||
u32 EmcTxsr;
|
||||
u32 EmcTxsrDll;
|
||||
u32 EmcTcke;
|
||||
u32 EmcTckesr;
|
||||
u32 EmcTpd;
|
||||
u32 EmcTfaw;
|
||||
u32 EmcTrpab;
|
||||
u32 EmcTClkStable;
|
||||
u32 EmcTClkStop;
|
||||
u32 EmcTRefBw;
|
||||
u32 EmcFbioCfg5;
|
||||
u32 EmcFbioCfg7;
|
||||
u32 EmcFbioCfg8;
|
||||
u32 EmcCmdMappingCmd0_0;
|
||||
u32 EmcCmdMappingCmd0_1;
|
||||
u32 EmcCmdMappingCmd0_2;
|
||||
u32 EmcCmdMappingCmd1_0;
|
||||
u32 EmcCmdMappingCmd1_1;
|
||||
u32 EmcCmdMappingCmd1_2;
|
||||
u32 EmcCmdMappingCmd2_0;
|
||||
u32 EmcCmdMappingCmd2_1;
|
||||
u32 EmcCmdMappingCmd2_2;
|
||||
u32 EmcCmdMappingCmd3_0;
|
||||
u32 EmcCmdMappingCmd3_1;
|
||||
u32 EmcCmdMappingCmd3_2;
|
||||
u32 EmcCmdMappingByte;
|
||||
u32 EmcFbioSpare;
|
||||
u32 EmcCfgRsv;
|
||||
u32 EmcMrs;
|
||||
u32 EmcEmrs;
|
||||
u32 EmcEmrs2;
|
||||
u32 EmcEmrs3;
|
||||
u32 EmcMrw1;
|
||||
u32 EmcMrw2;
|
||||
u32 EmcMrw3;
|
||||
u32 EmcMrw4;
|
||||
u32 EmcMrw6;
|
||||
u32 EmcMrw8;
|
||||
u32 EmcMrw9;
|
||||
u32 EmcMrw10;
|
||||
u32 EmcMrw12;
|
||||
u32 EmcMrw13;
|
||||
u32 EmcMrw14;
|
||||
u32 EmcMrwExtra;
|
||||
u32 EmcWarmBootMrwExtra;
|
||||
u32 EmcWarmBootExtraModeRegWriteEnable;
|
||||
u32 EmcExtraModeRegWriteEnable;
|
||||
u32 EmcMrwResetCommand;
|
||||
u32 EmcMrwResetNInitWait;
|
||||
u32 EmcMrsWaitCnt;
|
||||
u32 EmcMrsWaitCnt2;
|
||||
u32 EmcCfg;
|
||||
u32 EmcCfg2;
|
||||
u32 EmcCfgPipe;
|
||||
u32 EmcCfgPipeClk;
|
||||
u32 EmcFdpdCtrlCmdNoRamp;
|
||||
u32 EmcCfgUpdate;
|
||||
u32 EmcDbg;
|
||||
u32 EmcDbgWriteMux;
|
||||
u32 EmcCmdQ;
|
||||
u32 EmcMc2EmcQ;
|
||||
u32 EmcDynSelfRefControl;
|
||||
u32 AhbArbitrationXbarCtrlMemInitDone;
|
||||
u32 EmcCfgDigDll;
|
||||
u32 EmcCfgDigDll_1;
|
||||
u32 EmcCfgDigDllPeriod;
|
||||
u32 EmcDevSelect;
|
||||
u32 EmcSelDpdCtrl;
|
||||
u32 EmcFdpdCtrlDq;
|
||||
u32 EmcFdpdCtrlCmd;
|
||||
u32 EmcPmacroIbVrefDq_0;
|
||||
u32 EmcPmacroIbVrefDq_1;
|
||||
u32 EmcPmacroIbVrefDqs_0;
|
||||
u32 EmcPmacroIbVrefDqs_1;
|
||||
u32 EmcPmacroIbRxrt;
|
||||
u32 EmcCfgPipe1;
|
||||
u32 EmcCfgPipe2;
|
||||
u32 EmcPmacroQuseDdllRank0_0;
|
||||
u32 EmcPmacroQuseDdllRank0_1;
|
||||
u32 EmcPmacroQuseDdllRank0_2;
|
||||
u32 EmcPmacroQuseDdllRank0_3;
|
||||
u32 EmcPmacroQuseDdllRank0_4;
|
||||
u32 EmcPmacroQuseDdllRank0_5;
|
||||
u32 EmcPmacroQuseDdllRank1_0;
|
||||
u32 EmcPmacroQuseDdllRank1_1;
|
||||
u32 EmcPmacroQuseDdllRank1_2;
|
||||
u32 EmcPmacroQuseDdllRank1_3;
|
||||
u32 EmcPmacroQuseDdllRank1_4;
|
||||
u32 EmcPmacroQuseDdllRank1_5;
|
||||
u32 EmcPmacroObDdllLongDqRank0_0;
|
||||
u32 EmcPmacroObDdllLongDqRank0_1;
|
||||
u32 EmcPmacroObDdllLongDqRank0_2;
|
||||
u32 EmcPmacroObDdllLongDqRank0_3;
|
||||
u32 EmcPmacroObDdllLongDqRank0_4;
|
||||
u32 EmcPmacroObDdllLongDqRank0_5;
|
||||
u32 EmcPmacroObDdllLongDqRank1_0;
|
||||
u32 EmcPmacroObDdllLongDqRank1_1;
|
||||
u32 EmcPmacroObDdllLongDqRank1_2;
|
||||
u32 EmcPmacroObDdllLongDqRank1_3;
|
||||
u32 EmcPmacroObDdllLongDqRank1_4;
|
||||
u32 EmcPmacroObDdllLongDqRank1_5;
|
||||
u32 EmcPmacroObDdllLongDqsRank0_0;
|
||||
u32 EmcPmacroObDdllLongDqsRank0_1;
|
||||
u32 EmcPmacroObDdllLongDqsRank0_2;
|
||||
u32 EmcPmacroObDdllLongDqsRank0_3;
|
||||
u32 EmcPmacroObDdllLongDqsRank0_4;
|
||||
u32 EmcPmacroObDdllLongDqsRank0_5;
|
||||
u32 EmcPmacroObDdllLongDqsRank1_0;
|
||||
u32 EmcPmacroObDdllLongDqsRank1_1;
|
||||
u32 EmcPmacroObDdllLongDqsRank1_2;
|
||||
u32 EmcPmacroObDdllLongDqsRank1_3;
|
||||
u32 EmcPmacroObDdllLongDqsRank1_4;
|
||||
u32 EmcPmacroObDdllLongDqsRank1_5;
|
||||
u32 EmcPmacroIbDdllLongDqsRank0_0;
|
||||
u32 EmcPmacroIbDdllLongDqsRank0_1;
|
||||
u32 EmcPmacroIbDdllLongDqsRank0_2;
|
||||
u32 EmcPmacroIbDdllLongDqsRank0_3;
|
||||
u32 EmcPmacroIbDdllLongDqsRank1_0;
|
||||
u32 EmcPmacroIbDdllLongDqsRank1_1;
|
||||
u32 EmcPmacroIbDdllLongDqsRank1_2;
|
||||
u32 EmcPmacroIbDdllLongDqsRank1_3;
|
||||
u32 EmcPmacroDdllLongCmd_0;
|
||||
u32 EmcPmacroDdllLongCmd_1;
|
||||
u32 EmcPmacroDdllLongCmd_2;
|
||||
u32 EmcPmacroDdllLongCmd_3;
|
||||
u32 EmcPmacroDdllLongCmd_4;
|
||||
u32 EmcPmacroDdllShortCmd_0;
|
||||
u32 EmcPmacroDdllShortCmd_1;
|
||||
u32 EmcPmacroDdllShortCmd_2;
|
||||
u32 EmcPmacroDdllPeriodicOffset;
|
||||
u32 WarmBootWait;
|
||||
u32 EmcOdtWrite;
|
||||
u32 EmcZcalInterval;
|
||||
u32 EmcZcalWaitCnt;
|
||||
u32 EmcZcalMrwCmd;
|
||||
u32 EmcMrsResetDll;
|
||||
u32 EmcZcalInitDev0;
|
||||
u32 EmcZcalInitDev1;
|
||||
u32 EmcZcalInitWait;
|
||||
u32 EmcZcalWarmColdBootEnables;
|
||||
u32 EmcMrwLpddr2ZcalWarmBoot;
|
||||
u32 EmcZqCalDdr3WarmBoot;
|
||||
u32 EmcZqCalLpDdr4WarmBoot;
|
||||
u32 EmcZcalWarmBootWait;
|
||||
u32 EmcMrsWarmBootEnable;
|
||||
u32 EmcMrsResetDllWait;
|
||||
u32 EmcMrsExtra;
|
||||
u32 EmcWarmBootMrsExtra;
|
||||
u32 EmcEmrsDdr2DllEnable;
|
||||
u32 EmcMrsDdr2DllReset;
|
||||
u32 EmcEmrsDdr2OcdCalib;
|
||||
u32 EmcDdr2Wait;
|
||||
u32 EmcClkenOverride;
|
||||
u32 EmcExtraRefreshNum;
|
||||
u32 EmcClkenOverrideAllWarmBoot;
|
||||
u32 McClkenOverrideAllWarmBoot;
|
||||
u32 EmcCfgDigDllPeriodWarmBoot;
|
||||
u32 PmcVddpSel;
|
||||
u32 PmcVddpSelWait;
|
||||
u32 PmcDdrCfg;
|
||||
u32 PmcIoDpd3Req;
|
||||
u32 PmcIoDpd3ReqWait;
|
||||
u32 PmcIoDpd4ReqWait;
|
||||
u32 PmcRegShort;
|
||||
u32 PmcNoIoPower;
|
||||
u32 PmcDdrCntrlWait;
|
||||
u32 PmcDdrCntrl;
|
||||
u32 EmcAcpdControl;
|
||||
u32 EmcSwizzleRank0Byte0;
|
||||
u32 EmcSwizzleRank0Byte1;
|
||||
u32 EmcSwizzleRank0Byte2;
|
||||
u32 EmcSwizzleRank0Byte3;
|
||||
u32 EmcSwizzleRank1Byte0;
|
||||
u32 EmcSwizzleRank1Byte1;
|
||||
u32 EmcSwizzleRank1Byte2;
|
||||
u32 EmcSwizzleRank1Byte3;
|
||||
u32 EmcTxdsrvttgen;
|
||||
u32 EmcDataBrlshft0;
|
||||
u32 EmcDataBrlshft1;
|
||||
u32 EmcDqsBrlshft0;
|
||||
u32 EmcDqsBrlshft1;
|
||||
u32 EmcCmdBrlshft0;
|
||||
u32 EmcCmdBrlshft1;
|
||||
u32 EmcCmdBrlshft2;
|
||||
u32 EmcCmdBrlshft3;
|
||||
u32 EmcQuseBrlshft0;
|
||||
u32 EmcQuseBrlshft1;
|
||||
u32 EmcQuseBrlshft2;
|
||||
u32 EmcQuseBrlshft3;
|
||||
u32 EmcPmacroDllCfg0;
|
||||
u32 EmcPmacroDllCfg1;
|
||||
u32 EmcPmcScratch1;
|
||||
u32 EmcPmcScratch2;
|
||||
u32 EmcPmcScratch3;
|
||||
u32 EmcPmacroPadCfgCtrl;
|
||||
u32 EmcPmacroVttgenCtrl0;
|
||||
u32 EmcPmacroVttgenCtrl1;
|
||||
u32 EmcPmacroVttgenCtrl2;
|
||||
u32 EmcPmacroDsrVttgenCtrl0;
|
||||
u32 EmcPmacroBrickCtrlRfu1;
|
||||
u32 EmcPmacroCmdBrickCtrlFdpd;
|
||||
u32 EmcPmacroBrickCtrlRfu2;
|
||||
u32 EmcPmacroDataBrickCtrlFdpd;
|
||||
u32 EmcPmacroBgBiasCtrl0;
|
||||
u32 EmcPmacroDataPadRxCtrl;
|
||||
u32 EmcPmacroCmdPadRxCtrl;
|
||||
u32 EmcPmacroDataRxTermMode;
|
||||
u32 EmcPmacroCmdRxTermMode;
|
||||
u32 EmcPmacroDataPadTxCtrl;
|
||||
u32 EmcPmacroCmdPadTxCtrl;
|
||||
u32 EmcCfg3;
|
||||
u32 EmcPmacroTxPwrd0;
|
||||
u32 EmcPmacroTxPwrd1;
|
||||
u32 EmcPmacroTxPwrd2;
|
||||
u32 EmcPmacroTxPwrd3;
|
||||
u32 EmcPmacroTxPwrd4;
|
||||
u32 EmcPmacroTxPwrd5;
|
||||
u32 EmcConfigSampleDelay;
|
||||
u32 EmcPmacroBrickMapping0;
|
||||
u32 EmcPmacroBrickMapping1;
|
||||
u32 EmcPmacroBrickMapping2;
|
||||
u32 EmcPmacroTxSelClkSrc0;
|
||||
u32 EmcPmacroTxSelClkSrc1;
|
||||
u32 EmcPmacroTxSelClkSrc2;
|
||||
u32 EmcPmacroTxSelClkSrc3;
|
||||
u32 EmcPmacroTxSelClkSrc4;
|
||||
u32 EmcPmacroTxSelClkSrc5;
|
||||
u32 EmcPmacroPerbitFgcgCtrl0;
|
||||
u32 EmcPmacroPerbitFgcgCtrl1;
|
||||
u32 EmcPmacroPerbitFgcgCtrl2;
|
||||
u32 EmcPmacroPerbitFgcgCtrl3;
|
||||
u32 EmcPmacroPerbitFgcgCtrl4;
|
||||
u32 EmcPmacroPerbitFgcgCtrl5;
|
||||
u32 EmcPmacroPerbitRfuCtrl0;
|
||||
u32 EmcPmacroPerbitRfuCtrl1;
|
||||
u32 EmcPmacroPerbitRfuCtrl2;
|
||||
u32 EmcPmacroPerbitRfuCtrl3;
|
||||
u32 EmcPmacroPerbitRfuCtrl4;
|
||||
u32 EmcPmacroPerbitRfuCtrl5;
|
||||
u32 EmcPmacroPerbitRfu1Ctrl0;
|
||||
u32 EmcPmacroPerbitRfu1Ctrl1;
|
||||
u32 EmcPmacroPerbitRfu1Ctrl2;
|
||||
u32 EmcPmacroPerbitRfu1Ctrl3;
|
||||
u32 EmcPmacroPerbitRfu1Ctrl4;
|
||||
u32 EmcPmacroPerbitRfu1Ctrl5;
|
||||
u32 EmcPmacroDataPiCtrl;
|
||||
u32 EmcPmacroCmdPiCtrl;
|
||||
u32 EmcPmacroDdllBypass;
|
||||
u32 EmcPmacroDdllPwrd0;
|
||||
u32 EmcPmacroDdllPwrd1;
|
||||
u32 EmcPmacroDdllPwrd2;
|
||||
u32 EmcPmacroCmdCtrl0;
|
||||
u32 EmcPmacroCmdCtrl1;
|
||||
u32 EmcPmacroCmdCtrl2;
|
||||
u32 McEmemAdrCfg;
|
||||
u32 McEmemAdrCfgDev0;
|
||||
u32 McEmemAdrCfgDev1;
|
||||
u32 McEmemAdrCfgChannelMask;
|
||||
u32 McEmemAdrCfgBankMask0;
|
||||
u32 McEmemAdrCfgBankMask1;
|
||||
u32 McEmemAdrCfgBankMask2;
|
||||
u32 McEmemCfg;
|
||||
u32 McEmemArbCfg;
|
||||
u32 McEmemArbOutstandingReq;
|
||||
u32 McEmemArbRefpbHpCtrl;
|
||||
u32 McEmemArbRefpbBankCtrl;
|
||||
u32 McEmemArbTimingRcd;
|
||||
u32 McEmemArbTimingRp;
|
||||
u32 McEmemArbTimingRc;
|
||||
u32 McEmemArbTimingRas;
|
||||
u32 McEmemArbTimingFaw;
|
||||
u32 McEmemArbTimingRrd;
|
||||
u32 McEmemArbTimingRap2Pre;
|
||||
u32 McEmemArbTimingWap2Pre;
|
||||
u32 McEmemArbTimingR2R;
|
||||
u32 McEmemArbTimingW2W;
|
||||
u32 McEmemArbTimingR2W;
|
||||
u32 McEmemArbTimingW2R;
|
||||
u32 McEmemArbTimingRFCPB;
|
||||
u32 McEmemArbDaTurns;
|
||||
u32 McEmemArbDaCovers;
|
||||
u32 McEmemArbMisc0;
|
||||
u32 McEmemArbMisc1;
|
||||
u32 McEmemArbMisc2;
|
||||
u32 McEmemArbRing1Throttle;
|
||||
u32 McEmemArbOverride;
|
||||
u32 McEmemArbOverride1;
|
||||
u32 McEmemArbRsv;
|
||||
u32 McDaCfg0;
|
||||
u32 McEmemArbTimingCcdmw;
|
||||
u32 McClkenOverride;
|
||||
u32 McStatControl;
|
||||
u32 McVideoProtectBom;
|
||||
u32 McVideoProtectBomAdrHi;
|
||||
u32 McVideoProtectSizeMb;
|
||||
u32 McVideoProtectVprOverride;
|
||||
u32 McVideoProtectVprOverride1;
|
||||
u32 McVideoProtectGpuOverride0;
|
||||
u32 McVideoProtectGpuOverride1;
|
||||
u32 McSecCarveoutBom;
|
||||
u32 McSecCarveoutAdrHi;
|
||||
u32 McSecCarveoutSizeMb;
|
||||
u32 McVideoProtectWriteAccess;
|
||||
u32 McSecCarveoutProtectWriteAccess;
|
||||
u32 McGeneralizedCarveout1Bom;
|
||||
u32 McGeneralizedCarveout1BomHi;
|
||||
u32 McGeneralizedCarveout1Size128kb;
|
||||
u32 McGeneralizedCarveout1Access0;
|
||||
u32 McGeneralizedCarveout1Access1;
|
||||
u32 McGeneralizedCarveout1Access2;
|
||||
u32 McGeneralizedCarveout1Access3;
|
||||
u32 McGeneralizedCarveout1Access4;
|
||||
u32 McGeneralizedCarveout1ForceInternalAccess0;
|
||||
u32 McGeneralizedCarveout1ForceInternalAccess1;
|
||||
u32 McGeneralizedCarveout1ForceInternalAccess2;
|
||||
u32 McGeneralizedCarveout1ForceInternalAccess3;
|
||||
u32 McGeneralizedCarveout1ForceInternalAccess4;
|
||||
u32 McGeneralizedCarveout1Cfg0;
|
||||
u32 McGeneralizedCarveout2Bom;
|
||||
u32 McGeneralizedCarveout2BomHi;
|
||||
u32 McGeneralizedCarveout2Size128kb;
|
||||
u32 McGeneralizedCarveout2Access0;
|
||||
u32 McGeneralizedCarveout2Access1;
|
||||
u32 McGeneralizedCarveout2Access2;
|
||||
u32 McGeneralizedCarveout2Access3;
|
||||
u32 McGeneralizedCarveout2Access4;
|
||||
u32 McGeneralizedCarveout2ForceInternalAccess0;
|
||||
u32 McGeneralizedCarveout2ForceInternalAccess1;
|
||||
u32 McGeneralizedCarveout2ForceInternalAccess2;
|
||||
u32 McGeneralizedCarveout2ForceInternalAccess3;
|
||||
u32 McGeneralizedCarveout2ForceInternalAccess4;
|
||||
u32 McGeneralizedCarveout2Cfg0;
|
||||
u32 McGeneralizedCarveout3Bom;
|
||||
u32 McGeneralizedCarveout3BomHi;
|
||||
u32 McGeneralizedCarveout3Size128kb;
|
||||
u32 McGeneralizedCarveout3Access0;
|
||||
u32 McGeneralizedCarveout3Access1;
|
||||
u32 McGeneralizedCarveout3Access2;
|
||||
u32 McGeneralizedCarveout3Access3;
|
||||
u32 McGeneralizedCarveout3Access4;
|
||||
u32 McGeneralizedCarveout3ForceInternalAccess0;
|
||||
u32 McGeneralizedCarveout3ForceInternalAccess1;
|
||||
u32 McGeneralizedCarveout3ForceInternalAccess2;
|
||||
u32 McGeneralizedCarveout3ForceInternalAccess3;
|
||||
u32 McGeneralizedCarveout3ForceInternalAccess4;
|
||||
u32 McGeneralizedCarveout3Cfg0;
|
||||
u32 McGeneralizedCarveout4Bom;
|
||||
u32 McGeneralizedCarveout4BomHi;
|
||||
u32 McGeneralizedCarveout4Size128kb;
|
||||
u32 McGeneralizedCarveout4Access0;
|
||||
u32 McGeneralizedCarveout4Access1;
|
||||
u32 McGeneralizedCarveout4Access2;
|
||||
u32 McGeneralizedCarveout4Access3;
|
||||
u32 McGeneralizedCarveout4Access4;
|
||||
u32 McGeneralizedCarveout4ForceInternalAccess0;
|
||||
u32 McGeneralizedCarveout4ForceInternalAccess1;
|
||||
u32 McGeneralizedCarveout4ForceInternalAccess2;
|
||||
u32 McGeneralizedCarveout4ForceInternalAccess3;
|
||||
u32 McGeneralizedCarveout4ForceInternalAccess4;
|
||||
u32 McGeneralizedCarveout4Cfg0;
|
||||
u32 McGeneralizedCarveout5Bom;
|
||||
u32 McGeneralizedCarveout5BomHi;
|
||||
u32 McGeneralizedCarveout5Size128kb;
|
||||
u32 McGeneralizedCarveout5Access0;
|
||||
u32 McGeneralizedCarveout5Access1;
|
||||
u32 McGeneralizedCarveout5Access2;
|
||||
u32 McGeneralizedCarveout5Access3;
|
||||
u32 McGeneralizedCarveout5Access4;
|
||||
u32 McGeneralizedCarveout5ForceInternalAccess0;
|
||||
u32 McGeneralizedCarveout5ForceInternalAccess1;
|
||||
u32 McGeneralizedCarveout5ForceInternalAccess2;
|
||||
u32 McGeneralizedCarveout5ForceInternalAccess3;
|
||||
u32 McGeneralizedCarveout5ForceInternalAccess4;
|
||||
u32 McGeneralizedCarveout5Cfg0;
|
||||
u32 EmcCaTrainingEnable;
|
||||
u32 SwizzleRankByteEncode;
|
||||
u32 BootRomPatchControl;
|
||||
u32 BootRomPatchData;
|
||||
u32 McMtsCarveoutBom;
|
||||
u32 McMtsCarveoutAdrHi;
|
||||
u32 McMtsCarveoutSizeMb;
|
||||
u32 McMtsCarveoutRegCtrl;
|
||||
u32 McUntranslatedRegionCheck;
|
||||
u32 BCT_NA;
|
||||
};
|
||||
static_assert(sizeof(BootSdramParams) == 0x838);
|
||||
|
||||
}
|
||||
|
|
|
@ -24,4 +24,6 @@ namespace ams::pmic {
|
|||
void EnableVddCore(fuse::SocType soc_type);
|
||||
void EnableLdo8();
|
||||
|
||||
void EnableVddMemory(fuse::SocType soc_type);
|
||||
|
||||
}
|
|
@ -52,3 +52,23 @@ __gnu_thumb1_case_uhi:
|
|||
bx lr
|
||||
.type __gnu_thumb1_case_uhi, %function
|
||||
.size __gnu_thumb1_case_uhi, .-__gnu_thumb1_case_uhi
|
||||
|
||||
.section .text.__gnu_thumb1_case_si, "ax", %progbits
|
||||
.globl __gnu_thumb1_case_si
|
||||
.align 0
|
||||
.thumb_func
|
||||
.syntax unified
|
||||
__gnu_thumb1_case_si:
|
||||
push {r0, r1}
|
||||
mov r1, lr
|
||||
adds.n r1, r1, #2
|
||||
lsrs r1, r1, #2
|
||||
lsls r0, r0, #2
|
||||
lsls r1, r1, #2
|
||||
ldr r0, [r1, r0]
|
||||
adds r0, r0, r1
|
||||
mov lr, r0
|
||||
pop {r0, r1}
|
||||
bx lr
|
||||
.type __gnu_thumb1_case_si, %function
|
||||
.size __gnu_thumb1_case_si, .-__gnu_thumb1_case_si
|
||||
|
|
|
@ -35,6 +35,8 @@ namespace ams::pmic {
|
|||
constexpr inline int Max77620RegisterCnfgBbc = 0x04;
|
||||
constexpr inline int Max77620RegisterOnOffStat = 0x15;
|
||||
constexpr inline int Max77620RegisterSd0 = 0x16;
|
||||
constexpr inline int Max77620RegisterSd1 = 0x17;
|
||||
constexpr inline int Max77620RegisterCnfg2Sd = 0x22;
|
||||
constexpr inline int Max77620RegisterCnfg1Ldo8 = 0x33;
|
||||
constexpr inline int Max77620RegisterGpio0 = 0x36;
|
||||
constexpr inline int Max77620RegisterAmeGpio = 0x40;
|
||||
|
@ -276,4 +278,14 @@ namespace ams::pmic {
|
|||
i2c::SendByte(i2c::Port_5, I2cAddressMax77620Pmic, Max77620RegisterCnfg1Ldo8, 0xE8);
|
||||
}
|
||||
|
||||
void EnableVddMemory(fuse::SocType soc_type) {
|
||||
/* Disable remote sense for Sd1. */
|
||||
i2c::SendByte(i2c::Port_5, I2cAddressMax77620Pmic, Max77620RegisterCnfg2Sd, 0x05);
|
||||
|
||||
/* On Erista, set Sd1 voltage. */
|
||||
if (soc_type == fuse::SocType_Erista) {
|
||||
SetVoltage(Max77620RegisterSd1, 1100);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
#define AHB_MASTER_SWID (0x018)
|
||||
#define AHB_MASTER_SWID_1 (0x038)
|
||||
#define AHB_GIZMO_TZRAM (0x054)
|
||||
#define AHB_ARBITRATION_XBAR_CTRL (0x0E0)
|
||||
#define AHB_AHB_SPARE_REG (0x110)
|
||||
|
||||
#define AHB_REG_BITS_MASK(NAME) REG_NAMED_BITS_MASK (AHB_, NAME)
|
||||
|
@ -46,6 +47,8 @@ DEFINE_AHB_REG_BIT_ENUM(ARBITRATION_DISABLE_AHBDMA, 5, ENABLE, DISABLE);
|
|||
DEFINE_AHB_REG_BIT_ENUM(ARBITRATION_DISABLE_USB, 6, ENABLE, DISABLE);
|
||||
DEFINE_AHB_REG_BIT_ENUM(ARBITRATION_DISABLE_USB2, 18, ENABLE, DISABLE);
|
||||
|
||||
DEFINE_AHB_REG_BIT_ENUM(ARBITRATION_XBAR_CTRL_MEM_INIT_DONE, 16, NOT_DONE, DONE);
|
||||
|
||||
DEFINE_AHB_REG(AHB_SPARE_REG_CSITE_PADMACRO3_TRIM_SEL, 0, 5);
|
||||
DEFINE_AHB_REG_BIT_ENUM(AHB_SPARE_REG_OBS_OVERRIDE_EN, 5, DISABLE, ENABLE);
|
||||
DEFINE_AHB_REG_BIT_ENUM(AHB_SPARE_REG_APB2JTAG_OVERRIDE_EN, 6, DISABLE, ENABLE);
|
||||
|
|
|
@ -41,6 +41,9 @@
|
|||
#define CLK_RST_CONTROLLER_CLK_SYSTEM_RATE (0x030)
|
||||
#define CLK_RST_CONTROLLER_MISC_CLK_ENB (0x048)
|
||||
#define CLK_RST_CONTROLLER_OSC_CTRL (0x050)
|
||||
#define CLK_RST_CONTROLLER_PLLM_BASE (0x090)
|
||||
#define CLK_RST_CONTROLLER_PLLM_MISC1 (0x098)
|
||||
#define CLK_RST_CONTROLLER_PLLM_MISC2 (0x09C)
|
||||
#define CLK_RST_CONTROLLER_PLLD_BASE (0x0D0)
|
||||
#define CLK_RST_CONTROLLER_PLLD_MISC1 (0x0D8)
|
||||
#define CLK_RST_CONTROLLER_PLLD_MISC (0x0DC)
|
||||
|
@ -92,6 +95,14 @@ DEFINE_CLK_RST_REG_BIT_ENUM(OSC_CTRL_XOE, 0, DISABLE, ENABLE);
|
|||
DEFINE_CLK_RST_REG(OSC_CTRL_XOFS, 4, 6);
|
||||
DEFINE_CLK_RST_REG_FOUR_BIT_ENUM(OSC_CTRL_OSC_FREQ, 28, OSC13, OSC16P8, RSVD2, RSVD3, OSC19P2, OSC38P4, RSVD6, RSVD7, OSC12, OSC48, RSVD10, RSVD11, OSC26, RSVD13, RSVD14, RSVD15);
|
||||
|
||||
DEFINE_CLK_RST_REG(PLLM_BASE_PLLM_DIVM, 0, 8);
|
||||
DEFINE_CLK_RST_REG(PLLM_BASE_PLLM_DIVN, 8, 8);
|
||||
DEFINE_CLK_RST_REG(PLLM_BASE_PLLM_DIVP, 20, 5);
|
||||
DEFINE_CLK_RST_REG_BIT_ENUM(PLLM_BASE_PLLM_LOCK, 27, NOT_LOCK, LOCK);
|
||||
DEFINE_CLK_RST_REG_BIT_ENUM(PLLM_BASE_PLLM_REF_DIS, 29, REF_ENABLE, REF_DISABLE);
|
||||
DEFINE_CLK_RST_REG_BIT_ENUM(PLLM_BASE_PLLM_ENABLE, 30, DISABLE, ENABLE);
|
||||
DEFINE_CLK_RST_REG_BIT_ENUM(PLLM_BASE_PLLM_BYPASSPLL, 31, DISABLE, ENABLE);
|
||||
|
||||
DEFINE_CLK_RST_REG_BIT_ENUM(PLLD_BASE_CSI_CLK_SRC, 23, BRICK, PLL_D);
|
||||
DEFINE_CLK_RST_REG_BIT_ENUM(PLLD_BASE_PLLD_REF_DIS, 29, REF_ENABLE, REF_DISABLE);
|
||||
DEFINE_CLK_RST_REG_BIT_ENUM(PLLD_BASE_PLLD_ENABLE, 30, DISABLE, ENABLE);
|
||||
|
@ -171,6 +182,7 @@ DEFINE_CLK_RST_REG_BIT_ENUM(PLLMB_BASE_PLLMB_ENABLE, 30, DISABLE, ENABLE);
|
|||
#define CLK_RST_CONTROLLER_CLK_SOURCE_DVFS_REF (0x62C)
|
||||
#define CLK_RST_CONTROLLER_CLK_SOURCE_DVFS_SOC (0x630)
|
||||
#define CLK_RST_CONTROLLER_CLK_SOURCE_I2C6 (0x65C)
|
||||
#define CLK_RST_CONTROLLER_CLK_SOURCE_EMC_DLL (0x664)
|
||||
#define CLK_RST_CONTROLLER_CLK_SOURCE_UART_FST_MIPI_CAL (0x66C)
|
||||
#define CLK_RST_CONTROLLER_CLK_SOURCE_SDMMC_LEGACY_TM (0x694)
|
||||
#define CLK_RST_CONTROLLER_CLK_SOURCE_NVENC (0x6A4)
|
||||
|
|
|
@ -25,23 +25,521 @@
|
|||
#define EMC0_ADDRESS(x) (0x7001E000 + x)
|
||||
#define EMC1_ADDRESS(x) (0x7001F000 + x)
|
||||
|
||||
#define EMC_CFG (0x00C)
|
||||
#define EMC_ADR_CFG (0x010)
|
||||
#define EMC_TIMING_CONTROL (0x028)
|
||||
#define EMC_SELF_REF (0x0E0)
|
||||
#define EMC_MRW (0x0E8)
|
||||
#define EMC_FBIO_CFG5 (0x104)
|
||||
#define EMC_MRW3 (0x138)
|
||||
#define EMC_AUTO_CAL_CONFIG (0x2A4)
|
||||
#define EMC_REQ_CTRL (0x2B0)
|
||||
#define EMC_EMC_STATUS (0x2B4)
|
||||
#define EMC_CFG_DIG_DLL (0x2BC)
|
||||
#define EMC_ZCAL_INTERVAL (0x2E0)
|
||||
#define EMC_PMC_SCRATCH3 (0x448)
|
||||
#define EMC_FBIO_CFG7 (0x584)
|
||||
#define EMC_PMACRO_CFG_PM_GLOBAL_0 (0xC30)
|
||||
#define EMC_PMACRO_TRAINING_CTRL_0 (0xCF8)
|
||||
#define EMC_PMACRO_TRAINING_CTRL_1 (0xCFC)
|
||||
#define EMC_INTSTATUS (0x000)
|
||||
#define EMC_DBG (0x008)
|
||||
#define EMC_CFG (0x00C)
|
||||
#define EMC_ADR_CFG (0x010)
|
||||
#define EMC_REFCTRL (0x020)
|
||||
#define EMC_PIN (0x024)
|
||||
#define EMC_TIMING_CONTROL (0x028)
|
||||
#define EMC_RC (0x02C)
|
||||
#define EMC_RFC (0x030)
|
||||
#define EMC_RAS (0x034)
|
||||
#define EMC_RP (0x038)
|
||||
#define EMC_R2W (0x03C)
|
||||
#define EMC_W2R (0x040)
|
||||
#define EMC_R2P (0x044)
|
||||
#define EMC_W2P (0x048)
|
||||
#define EMC_RD_RCD (0x04C)
|
||||
#define EMC_WR_RCD (0x050)
|
||||
#define EMC_RRD (0x054)
|
||||
#define EMC_REXT (0x058)
|
||||
#define EMC_WDV (0x05C)
|
||||
#define EMC_QUSE (0x060)
|
||||
#define EMC_QRST (0x064)
|
||||
#define EMC_QSAFE (0x068)
|
||||
#define EMC_RDV (0x06C)
|
||||
#define EMC_REFRESH (0x070)
|
||||
#define EMC_BURST_REFRESH_NUM (0x074)
|
||||
#define EMC_PDEX2WR (0x078)
|
||||
#define EMC_PDEX2RD (0x07C)
|
||||
#define EMC_PCHG2PDEN (0x080)
|
||||
#define EMC_ACT2PDEN (0x084)
|
||||
#define EMC_AR2PDEN (0x088)
|
||||
#define EMC_RW2PDEN (0x08C)
|
||||
#define EMC_TXSR (0x090)
|
||||
#define EMC_TCKE (0x094)
|
||||
#define EMC_TFAW (0x098)
|
||||
#define EMC_TRPAB (0x09C)
|
||||
#define EMC_TCLKSTABLE (0x0A0)
|
||||
#define EMC_TCLKSTOP (0x0A4)
|
||||
#define EMC_TREFBW (0x0A8)
|
||||
#define EMC_TPPD (0x0AC)
|
||||
#define EMC_ODT_WRITE (0x0B0)
|
||||
#define EMC_PDEX2MRR (0x0B4)
|
||||
#define EMC_WEXT (0x0B8)
|
||||
#define EMC_TRTM (0x0BC)
|
||||
#define EMC_RFC_SLR (0x0C0)
|
||||
#define EMC_MRS_WAIT_CNT2 (0x0C4)
|
||||
#define EMC_MRS_WAIT_CNT (0x0C8)
|
||||
#define EMC_MRS (0x0CC)
|
||||
#define EMC_EMRS (0x0D0)
|
||||
#define EMC_REF (0x0D4)
|
||||
#define EMC_NOP (0x0DC)
|
||||
#define EMC_SELF_REF (0x0E0)
|
||||
#define EMC_MRW (0x0E8)
|
||||
#define EMC_MRR (0x0EC)
|
||||
#define EMC_CMDQ (0x0F0)
|
||||
#define EMC_MC2EMCQ (0x0F4)
|
||||
#define EMC_TWTM (0x0F8)
|
||||
#define EMC_TRATM (0x0FC)
|
||||
#define EMC_FBIO_SPARE (0x100)
|
||||
#define EMC_FBIO_CFG5 (0x104)
|
||||
#define EMC_TWATM (0x108)
|
||||
#define EMC_TR2REF (0x10C)
|
||||
#define EMC_PMACRO_DATA_PI_CTRL (0x110)
|
||||
#define EMC_PMACRO_CMD_PI_CTRL (0x114)
|
||||
#define EMC_PDEX2CKE (0x118)
|
||||
#define EMC_CKE2PDEN (0x11C)
|
||||
#define EMC_CFG_RSV (0x120)
|
||||
#define EMC_ACPD_CONTROL (0x124)
|
||||
#define EMC_MPC (0x128)
|
||||
#define EMC_EMRS2 (0x12C)
|
||||
#define EMC_MRW2 (0x134)
|
||||
#define EMC_MRW3 (0x138)
|
||||
#define EMC_MRW3 (0x138)
|
||||
#define EMC_MRW4 (0x13C)
|
||||
#define EMC_CLKEN_OVERRIDE (0x140)
|
||||
#define EMC_R2R (0x144)
|
||||
#define EMC_W2W (0x148)
|
||||
#define EMC_EINPUT (0x14C)
|
||||
#define EMC_EINPUT_DURATION (0x150)
|
||||
#define EMC_PUTERM_EXTRA (0x154)
|
||||
#define EMC_TCKESR (0x158)
|
||||
#define EMC_TPD (0x15C)
|
||||
#define EMC_AUTO_CAL_CONFIG (0x2A4)
|
||||
#define EMC_AUTO_CAL_INTERVAL (0x2A8)
|
||||
#define EMC_REQ_CTRL (0x2B0)
|
||||
#define EMC_EMC_STATUS (0x2B4)
|
||||
#define EMC_CFG_2 (0x2B8)
|
||||
#define EMC_CFG_DIG_DLL (0x2BC)
|
||||
#define EMC_CFG_DIG_DLL_PERIOD (0x2C0)
|
||||
#define EMC_DIG_DLL_STATUS (0x2C4)
|
||||
#define EMC_CFG_DIG_DLL_1 (0x2C8)
|
||||
#define EMC_RDV_MASK (0x2CC)
|
||||
#define EMC_WDV_MASK (0x2D0)
|
||||
#define EMC_RDV_EARLY_MASK (0x2D4)
|
||||
#define EMC_RDV_EARLY (0x2D8)
|
||||
#define EMC_AUTO_CAL_CONFIG8 (0x2DC)
|
||||
#define EMC_ZCAL_INTERVAL (0x2E0)
|
||||
#define EMC_ZCAL_WAIT_CNT (0x2E4)
|
||||
#define EMC_ZCAL_MRW_CMD (0x2E8)
|
||||
#define EMC_ZQ_CAL (0x2EC)
|
||||
#define EMC_XM2COMPPADCTRL3 (0x2F4)
|
||||
#define EMC_AUTO_CAL_VREF_SEL_0 (0x2F8)
|
||||
#define EMC_AUTO_CAL_VREF_SEL_1 (0x300)
|
||||
#define EMC_XM2COMPPADCTRL (0x30C)
|
||||
#define EMC_FDPD_CTRL_DQ (0x310)
|
||||
#define EMC_FDPD_CTRL_CMD (0x314)
|
||||
#define EMC_PMACRO_CMD_BRICK_CTRL_FDPD (0x318)
|
||||
#define EMC_PMACRO_DATA_BRICK_CTRL_FDPD (0x31C)
|
||||
#define EMC_SCRATCH0 (0x324)
|
||||
#define EMC_PMACRO_BRICK_CTRL_RFU1 (0x330)
|
||||
#define EMC_PMACRO_BRICK_CTRL_RFU2 (0x334)
|
||||
#define EMC_CMD_MAPPING_CMD0_0 (0x380)
|
||||
#define EMC_CMD_MAPPING_CMD0_1 (0x384)
|
||||
#define EMC_CMD_MAPPING_CMD0_2 (0x388)
|
||||
#define EMC_CMD_MAPPING_CMD1_0 (0x38C)
|
||||
#define EMC_CMD_MAPPING_CMD1_1 (0x390)
|
||||
#define EMC_CMD_MAPPING_CMD1_2 (0x394)
|
||||
#define EMC_CMD_MAPPING_CMD2_0 (0x398)
|
||||
#define EMC_CMD_MAPPING_CMD2_1 (0x39C)
|
||||
#define EMC_CMD_MAPPING_CMD2_2 (0x3A0)
|
||||
#define EMC_CMD_MAPPING_CMD3_0 (0x3A4)
|
||||
#define EMC_CMD_MAPPING_CMD3_1 (0x3A8)
|
||||
#define EMC_CMD_MAPPING_CMD3_2 (0x3AC)
|
||||
#define EMC_CMD_MAPPING_BYTE (0x3B0)
|
||||
#define EMC_TR_TIMING_0 (0x3B4)
|
||||
#define EMC_TR_CTRL_0 (0x3B8)
|
||||
#define EMC_TR_CTRL_1 (0x3BC)
|
||||
#define EMC_SWITCH_BACK_CTRL (0x3C0)
|
||||
#define EMC_TR_RDV (0x3C4)
|
||||
#define EMC_STALL_THEN_EXE_AFTER_CLKCHANGE (0x3CC)
|
||||
#define EMC_SEL_DPD_CTRL (0x3D8)
|
||||
#define EMC_PRE_REFRESH_REQ_CNT (0x3DC)
|
||||
#define EMC_DYN_SELF_REF_CONTROL (0x3E0)
|
||||
#define EMC_TXSRDLL (0x3E4)
|
||||
#define EMC_CCFIFO_ADDR (0x3E8)
|
||||
#define EMC_CCFIFO_DATA (0x3EC)
|
||||
#define EMC_CCFIFO_STATUS (0x3F0)
|
||||
#define EMC_TR_QPOP (0x3F4)
|
||||
#define EMC_TR_RDV_MASK (0x3F8)
|
||||
#define EMC_TR_QSAFE (0x3FC)
|
||||
#define EMC_TR_QRST (0x400)
|
||||
#define EMC_SWIZZLE_RANK0_BYTE0 (0x404)
|
||||
#define EMC_SWIZZLE_RANK0_BYTE1 (0x408)
|
||||
#define EMC_SWIZZLE_RANK0_BYTE2 (0x40C)
|
||||
#define EMC_SWIZZLE_RANK0_BYTE3 (0x410)
|
||||
#define EMC_SWIZZLE_RANK1_BYTE0 (0x418)
|
||||
#define EMC_SWIZZLE_RANK1_BYTE1 (0x41C)
|
||||
#define EMC_SWIZZLE_RANK1_BYTE2 (0x420)
|
||||
#define EMC_SWIZZLE_RANK1_BYTE3 (0x424)
|
||||
#define EMC_ISSUE_QRST (0x428)
|
||||
#define EMC_AUTO_CAL_CONFIG9 (0x42C)
|
||||
#define EMC_PMC_SCRATCH1 (0x440)
|
||||
#define EMC_PMC_SCRATCH2 (0x444)
|
||||
#define EMC_PMC_SCRATCH3 (0x448)
|
||||
#define EMC_AUTO_CAL_CONFIG2 (0x458)
|
||||
#define EMC_AUTO_CAL_CONFIG3 (0x45C)
|
||||
#define EMC_TR_DVFS (0x460)
|
||||
#define EMC_AUTO_CAL_CHANNEL (0x464)
|
||||
#define EMC_IBDLY (0x468)
|
||||
#define EMC_OBDLY (0x46C)
|
||||
#define EMC_TXDSRVTTGEN (0x480)
|
||||
#define EMC_WE_DURATION (0x48C)
|
||||
#define EMC_WS_DURATION (0x490)
|
||||
#define EMC_WEV (0x494)
|
||||
#define EMC_WSV (0x498)
|
||||
#define EMC_CFG_3 (0x49C)
|
||||
#define EMC_MRW5 (0x4A0)
|
||||
#define EMC_MRW6 (0x4A4)
|
||||
#define EMC_MRW7 (0x4A8)
|
||||
#define EMC_MRW8 (0x4AC)
|
||||
#define EMC_MRW9 (0x4B0)
|
||||
#define EMC_MRW10 (0x4B4)
|
||||
#define EMC_MRW11 (0x4B8)
|
||||
#define EMC_MRW12 (0x4BC)
|
||||
#define EMC_MRW13 (0x4C0)
|
||||
#define EMC_MRW14 (0x4C4)
|
||||
#define EMC_MRW15 (0x4D0)
|
||||
#define EMC_CFG_SYNC (0x4D4)
|
||||
#define EMC_FDPD_CTRL_CMD_NO_RAMP (0x4D8)
|
||||
#define EMC_WDV_CHK (0x4E0)
|
||||
#define EMC_CFG_PIPE_2 (0x554)
|
||||
#define EMC_CFG_PIPE_CLK (0x558)
|
||||
#define EMC_CFG_PIPE_1 (0x55C)
|
||||
#define EMC_CFG_PIPE (0x560)
|
||||
#define EMC_QPOP (0x564)
|
||||
#define EMC_QUSE_WIDTH (0x568)
|
||||
#define EMC_PUTERM_WIDTH (0x56C)
|
||||
#define EMC_AUTO_CAL_CONFIG7 (0x574)
|
||||
#define EMC_XM2COMPPADCTRL2 (0x578)
|
||||
#define EMC_REFCTRL2 (0x580)
|
||||
#define EMC_FBIO_CFG7 (0x584)
|
||||
#define EMC_DATA_BRLSHFT_0 (0x588)
|
||||
#define EMC_DATA_BRLSHFT_1 (0x58C)
|
||||
#define EMC_RFCPB (0x590)
|
||||
#define EMC_DQS_BRLSHFT_0 (0x594)
|
||||
#define EMC_DQS_BRLSHFT_1 (0x598)
|
||||
#define EMC_CMD_BRLSHFT_0 (0x59C)
|
||||
#define EMC_CMD_BRLSHFT_1 (0x5A0)
|
||||
#define EMC_CMD_BRLSHFT_2 (0x5A4)
|
||||
#define EMC_CMD_BRLSHFT_3 (0x5A8)
|
||||
#define EMC_QUSE_BRLSHFT_0 (0x5AC)
|
||||
#define EMC_AUTO_CAL_CONFIG4 (0x5B0)
|
||||
#define EMC_AUTO_CAL_CONFIG5 (0x5B4)
|
||||
#define EMC_QUSE_BRLSHFT_1 (0x5B8)
|
||||
#define EMC_QUSE_BRLSHFT_2 (0x5BC)
|
||||
#define EMC_CCDMW (0x5C0)
|
||||
#define EMC_QUSE_BRLSHFT_3 (0x5C4)
|
||||
#define EMC_FBIO_CFG8 (0x5C8)
|
||||
#define EMC_AUTO_CAL_CONFIG6 (0x5CC)
|
||||
|
||||
/* Erista */
|
||||
#define EMC_DLL_CFG_0 (0x5E4)
|
||||
#define EMC_DLL_CFG_1 (0x5E8)
|
||||
|
||||
/* Mariko */
|
||||
#define EMC_PMACRO_DLL_CFG_0 (0x5E4)
|
||||
#define EMC_PMACRO_DLL_CFG_1 (0x5E8)
|
||||
|
||||
#define EMC_CONFIG_SAMPLE_DELAY (0x5F0)
|
||||
#define EMC_CFG_UPDATE (0x5F4)
|
||||
#define EMC_PMACRO_QUSE_DDLL_RANK0_0 (0x600)
|
||||
#define EMC_PMACRO_QUSE_DDLL_RANK0_1 (0x604)
|
||||
#define EMC_PMACRO_QUSE_DDLL_RANK0_2 (0x608)
|
||||
#define EMC_PMACRO_QUSE_DDLL_RANK0_3 (0x60C)
|
||||
#define EMC_PMACRO_QUSE_DDLL_RANK0_4 (0x610)
|
||||
#define EMC_PMACRO_QUSE_DDLL_RANK0_5 (0x614)
|
||||
#define EMC_PMACRO_QUSE_DDLL_RANK1_4 (0x630)
|
||||
#define EMC_PMACRO_QUSE_DDLL_RANK1_5 (0x634)
|
||||
#define EMC_PMACRO_QUSE_DDLL_RANK1_0 (0x620)
|
||||
#define EMC_PMACRO_QUSE_DDLL_RANK1_1 (0x624)
|
||||
#define EMC_PMACRO_QUSE_DDLL_RANK1_2 (0x628)
|
||||
#define EMC_PMACRO_QUSE_DDLL_RANK1_3 (0x62C)
|
||||
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0 (0x640)
|
||||
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1 (0x644)
|
||||
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2 (0x648)
|
||||
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3 (0x64C)
|
||||
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_4 (0x650)
|
||||
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_5 (0x654)
|
||||
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0 (0x660)
|
||||
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1 (0x664)
|
||||
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2 (0x668)
|
||||
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3 (0x66C)
|
||||
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_4 (0x670)
|
||||
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_5 (0x674)
|
||||
#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_0 (0x680)
|
||||
#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_1 (0x684)
|
||||
#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_2 (0x688)
|
||||
#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_3 (0x68C)
|
||||
#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_4 (0x690)
|
||||
#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_5 (0x694)
|
||||
#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_0 (0x6A0)
|
||||
#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_1 (0x6A4)
|
||||
#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_2 (0x6A8)
|
||||
#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_3 (0x6AC)
|
||||
#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_4 (0x6B0)
|
||||
#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_5 (0x6B4)
|
||||
#define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK0_0 (0x6C0)
|
||||
#define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK0_1 (0x6C4)
|
||||
#define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK0_2 (0x6C8)
|
||||
#define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK0_3 (0x6CC)
|
||||
#define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK1_0 (0x6E0)
|
||||
#define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK1_1 (0x6E4)
|
||||
#define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK1_2 (0x6E8)
|
||||
#define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK1_3 (0x6EC)
|
||||
#define EMC_PMACRO_AUTOCAL_CFG_0 (0x700)
|
||||
#define EMC_PMACRO_AUTOCAL_CFG_1 (0x704)
|
||||
#define EMC_PMACRO_AUTOCAL_CFG_2 (0x708)
|
||||
#define EMC_PMACRO_TX_PWRD_0 (0x720)
|
||||
#define EMC_PMACRO_TX_PWRD_1 (0x724)
|
||||
#define EMC_PMACRO_TX_PWRD_2 (0x728)
|
||||
#define EMC_PMACRO_TX_PWRD_3 (0x72C)
|
||||
#define EMC_PMACRO_TX_PWRD_4 (0x730)
|
||||
#define EMC_PMACRO_TX_PWRD_5 (0x734)
|
||||
#define EMC_PMACRO_TX_SEL_CLK_SRC_0 (0x740)
|
||||
#define EMC_PMACRO_TX_SEL_CLK_SRC_1 (0x744)
|
||||
#define EMC_PMACRO_TX_SEL_CLK_SRC_3 (0x74C)
|
||||
#define EMC_PMACRO_TX_SEL_CLK_SRC_2 (0x748)
|
||||
#define EMC_PMACRO_TX_SEL_CLK_SRC_4 (0x750)
|
||||
#define EMC_PMACRO_TX_SEL_CLK_SRC_5 (0x754)
|
||||
#define EMC_PMACRO_DDLL_BYPASS (0x760)
|
||||
#define EMC_PMACRO_DDLL_PWRD_0 (0x770)
|
||||
#define EMC_PMACRO_DDLL_PWRD_1 (0x774)
|
||||
#define EMC_PMACRO_DDLL_PWRD_2 (0x778)
|
||||
#define EMC_PMACRO_CMD_CTRL_0 (0x780)
|
||||
#define EMC_PMACRO_CMD_CTRL_1 (0x784)
|
||||
#define EMC_PMACRO_CMD_CTRL_2 (0x788)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE0_0 (0x800)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE0_1 (0x804)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE0_2 (0x808)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE0_3 (0x80C)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE1_0 (0x810)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE1_1 (0x814)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE1_2 (0x818)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE1_3 (0x81C)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE2_0 (0x820)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE2_1 (0x824)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE2_2 (0x828)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE2_3 (0x82C)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE3_0 (0x830)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE3_1 (0x834)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE3_2 (0x838)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE3_3 (0x83C)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE4_0 (0x840)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE4_1 (0x844)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE4_2 (0x848)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE4_3 (0x84C)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE5_0 (0x850)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE5_1 (0x854)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE5_2 (0x858)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE5_3 (0x85C)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE6_0 (0x860)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE6_1 (0x864)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE6_2 (0x868)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE6_3 (0x86C)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE7_0 (0x870)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE7_1 (0x874)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE7_2 (0x878)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE7_3 (0x87C)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD0_0 (0x880)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD0_1 (0x884)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD0_2 (0x888)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD0_3 (0x88C)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD1_0 (0x890)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD1_1 (0x894)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD1_2 (0x898)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD1_3 (0x89C)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD2_0 (0x8A0)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD2_1 (0x8A4)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD2_2 (0x8A8)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD2_3 (0x8AC)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD3_0 (0x8B0)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD3_1 (0x8B4)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD3_2 (0x8B8)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD3_3 (0x8BC)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE0_0 (0x900)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE0_1 (0x904)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE0_2 (0x908)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE0_3 (0x90C)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE1_0 (0x910)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE1_1 (0x914)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE1_2 (0x918)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE1_3 (0x91C)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE2_0 (0x920)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE2_1 (0x924)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE2_2 (0x928)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE2_3 (0x92C)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE3_0 (0x930)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE3_1 (0x934)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE3_2 (0x938)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE3_3 (0x93C)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE4_0 (0x940)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE4_1 (0x944)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE4_2 (0x948)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE4_3 (0x94C)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE5_0 (0x950)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE5_1 (0x954)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE5_2 (0x958)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE5_3 (0x95C)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE6_0 (0x960)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE6_1 (0x964)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE6_2 (0x968)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE6_3 (0x96C)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE7_0 (0x970)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE7_1 (0x974)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE7_2 (0x978)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE7_3 (0x97C)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD0_0 (0x980)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD0_1 (0x984)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD0_2 (0x988)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD0_3 (0x98C)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD1_0 (0x990)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD1_1 (0x994)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD1_2 (0x998)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD1_3 (0x99C)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD2_0 (0x9A0)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD2_1 (0x9A4)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD2_2 (0x9A8)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD2_3 (0x9AC)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD3_0 (0x9B0)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD3_1 (0x9B4)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD3_2 (0x9B8)
|
||||
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD3_3 (0x9BC)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE0_0 (0xA00)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE0_1 (0xA04)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE0_2 (0xA08)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE1_0 (0xA10)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE1_1 (0xA14)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE1_2 (0xA18)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE2_0 (0xA20)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE2_1 (0xA24)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE2_2 (0xA28)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE3_0 (0xA30)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE3_1 (0xA34)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE3_2 (0xA38)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE4_0 (0xA40)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE4_1 (0xA44)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE4_2 (0xA48)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE5_0 (0xA50)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE5_1 (0xA54)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE5_2 (0xA58)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE6_0 (0xA60)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE6_1 (0xA64)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE6_2 (0xA68)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE7_0 (0xA70)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE7_1 (0xA74)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE7_2 (0xA78)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE0_0 (0xB00)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE0_1 (0xB04)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE0_2 (0xB08)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE1_0 (0xB10)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE1_1 (0xB14)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE1_2 (0xB18)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE2_0 (0xB20)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE2_1 (0xB24)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE2_2 (0xB28)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE3_0 (0xB30)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE3_1 (0xB34)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE3_2 (0xB38)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE4_0 (0xB40)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE4_1 (0xB44)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE4_2 (0xB48)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE5_0 (0xB50)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE5_1 (0xB54)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE5_2 (0xB58)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE6_0 (0xB60)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE6_1 (0xB64)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE6_2 (0xB68)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE7_0 (0xB70)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE7_1 (0xB74)
|
||||
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE7_2 (0xB78)
|
||||
#define EMC_PMACRO_IB_VREF_DQ_0 (0xBE0)
|
||||
#define EMC_PMACRO_IB_VREF_DQ_1 (0xBE4)
|
||||
#define EMC_PMACRO_IB_VREF_DQS_0 (0xBF0)
|
||||
#define EMC_PMACRO_IB_VREF_DQS_1 (0xBF4)
|
||||
#define EMC_PMACRO_DDLL_LONG_CMD_0 (0xC00)
|
||||
#define EMC_PMACRO_DDLL_LONG_CMD_1 (0xC04)
|
||||
#define EMC_PMACRO_DDLL_LONG_CMD_2 (0xC08)
|
||||
#define EMC_PMACRO_DDLL_LONG_CMD_3 (0xC0C)
|
||||
#define EMC_PMACRO_DDLL_LONG_CMD_4 (0xC10)
|
||||
#define EMC_PMACRO_DDLL_SHORT_CMD_0 (0xC20)
|
||||
#define EMC_PMACRO_DDLL_SHORT_CMD_1 (0xC24)
|
||||
#define EMC_PMACRO_DDLL_SHORT_CMD_2 (0xC28)
|
||||
#define EMC_PMACRO_CFG_PM_GLOBAL_0 (0xC30)
|
||||
#define EMC_PMACRO_VTTGEN_CTRL_0 (0xC34)
|
||||
#define EMC_PMACRO_VTTGEN_CTRL_1 (0xC38)
|
||||
#define EMC_PMACRO_BG_BIAS_CTRL_0 (0xC3C)
|
||||
#define EMC_PMACRO_PAD_CFG_CTRL (0xC40)
|
||||
#define EMC_PMACRO_ZCTRL (0xC44)
|
||||
#define EMC_PMACRO_RX_TERM (0xC48)
|
||||
#define EMC_PMACRO_CMD_TX_DRV (0xC4C)
|
||||
#define EMC_PMACRO_CMD_PAD_RX_CTRL (0xC50)
|
||||
#define EMC_PMACRO_DATA_PAD_RX_CTRL (0xC54)
|
||||
#define EMC_PMACRO_CMD_RX_TERM_MODE (0xC58)
|
||||
#define EMC_PMACRO_DATA_RX_TERM_MODE (0xC5C)
|
||||
#define EMC_PMACRO_CMD_PAD_TX_CTRL (0xC60)
|
||||
#define EMC_PMACRO_DATA_PAD_TX_CTRL (0xC64)
|
||||
#define EMC_PMACRO_COMMON_PAD_TX_CTRL (0xC68)
|
||||
#define EMC_PMACRO_DSR_VTTGEN_CTRL_0 (0xC6C)
|
||||
#define EMC_PMACRO_DQ_TX_DRV (0xC70)
|
||||
#define EMC_PMACRO_CA_TX_DRV (0xC74)
|
||||
#define EMC_PMACRO_AUTOCAL_CFG_COMMON (0xC78)
|
||||
#define EMC_PMACRO_BRICK_MAPPING_0 (0xC80)
|
||||
#define EMC_PMACRO_BRICK_MAPPING_1 (0xC84)
|
||||
#define EMC_PMACRO_BRICK_MAPPING_2 (0xC88)
|
||||
#define EMC_PMACRO_DDLL_PERIODIC_OFFSET (0xCE8)
|
||||
#define EMC_PMACRO_VTTGEN_CTRL_2 (0xCF0)
|
||||
#define EMC_PMACRO_IB_RXRT (0xCF4)
|
||||
#define EMC_PMACRO_TRAINING_CTRL_0 (0xCF8)
|
||||
#define EMC_PMACRO_TRAINING_CTRL_1 (0xCFC)
|
||||
#define EMC_PMACRO_PERBIT_FGCG_CTRL_0 (0xD40)
|
||||
#define EMC_PMACRO_PERBIT_FGCG_CTRL_1 (0xD44)
|
||||
#define EMC_PMACRO_PERBIT_FGCG_CTRL_2 (0xD48)
|
||||
#define EMC_PMACRO_PERBIT_FGCG_CTRL_3 (0xD4C)
|
||||
#define EMC_PMACRO_PERBIT_FGCG_CTRL_4 (0xD50)
|
||||
#define EMC_PMACRO_PERBIT_FGCG_CTRL_5 (0xD54)
|
||||
#define EMC_PMACRO_PERBIT_RFU_CTRL_0 (0xD60)
|
||||
#define EMC_PMACRO_PERBIT_RFU_CTRL_1 (0xD64)
|
||||
#define EMC_PMACRO_PERBIT_RFU_CTRL_2 (0xD68)
|
||||
#define EMC_PMACRO_PERBIT_RFU_CTRL_3 (0xD6C)
|
||||
#define EMC_PMACRO_PERBIT_RFU_CTRL_4 (0xD70)
|
||||
#define EMC_PMACRO_PERBIT_RFU_CTRL_5 (0xD74)
|
||||
#define EMC_PMACRO_PERBIT_RFU1_CTRL_0 (0xD80)
|
||||
#define EMC_PMACRO_PERBIT_RFU1_CTRL_1 (0xD84)
|
||||
#define EMC_PMACRO_PERBIT_RFU1_CTRL_2 (0xD88)
|
||||
#define EMC_PMACRO_PERBIT_RFU1_CTRL_3 (0xD8C)
|
||||
#define EMC_PMACRO_PERBIT_RFU1_CTRL_4 (0xD90)
|
||||
#define EMC_PMACRO_PERBIT_RFU1_CTRL_5 (0xD94)
|
||||
#define EMC_TRAINING_CMD (0xE00)
|
||||
#define EMC_TRAINING_CTRL (0xE04)
|
||||
#define EMC_TRAINING_STATUS (0xE08)
|
||||
#define EMC_TRAINING_QUSE_CORS_CTRL (0xE0C)
|
||||
#define EMC_TRAINING_QUSE_FINE_CTRL (0xE10)
|
||||
#define EMC_TRAINING_QUSE_CTRL_MISC (0xE14)
|
||||
#define EMC_TRAINING_WRITE_FINE_CTRL (0xE18)
|
||||
#define EMC_TRAINING_WRITE_CTRL_MISC (0xE1C)
|
||||
#define EMC_TRAINING_WRITE_VREF_CTRL (0xE20)
|
||||
#define EMC_TRAINING_READ_FINE_CTRL (0xE24)
|
||||
#define EMC_TRAINING_READ_CTRL_MISC (0xE28)
|
||||
#define EMC_TRAINING_READ_VREF_CTRL (0xE2C)
|
||||
#define EMC_TRAINING_CA_FINE_CTRL (0xE30)
|
||||
#define EMC_TRAINING_CA_CTRL_MISC (0xE34)
|
||||
#define EMC_TRAINING_CA_CTRL_MISC1 (0xE38)
|
||||
#define EMC_TRAINING_CA_VREF_CTRL (0xE3C)
|
||||
#define EMC_TRAINING_SETTLE (0xE44)
|
||||
#define EMC_TRAINING_MPC (0xE5C)
|
||||
#define EMC_TRAINING_PATRAM_CTRL (0xE60)
|
||||
#define EMC_TRAINING_PATRAM_DQ (0xE64)
|
||||
#define EMC_TRAINING_PATRAM_DMI (0xE68)
|
||||
#define EMC_TRAINING_VREF_SETTLE (0xE6C)
|
||||
#define EMC_TRAINING_OPT_CA_VREF (0xEC0)
|
||||
#define EMC_TRAINING_OPT_DQ_OB_VREF (0xEC4)
|
||||
#define EMC_TRAINING_QUSE_VREF_CTRL (0xED0)
|
||||
#define EMC_TRAINING_OPT_DQS_IB_VREF_RANK0 (0xED4)
|
||||
#define EMC_TRAINING_OPT_DQS_IB_VREF_RANK1 (0xED8)
|
||||
|
||||
|
||||
#define EMC_REG_BITS_MASK(NAME) REG_NAMED_BITS_MASK (EMC, NAME)
|
||||
#define EMC_REG_BITS_VALUE(NAME, VALUE) REG_NAMED_BITS_VALUE (EMC, NAME, VALUE)
|
||||
|
@ -54,6 +552,8 @@
|
|||
#define DEFINE_EMC_REG_THREE_BIT_ENUM(NAME, __OFFSET__, ZERO, ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN) REG_DEFINE_NAMED_THREE_BIT_ENUM(EMC, NAME, __OFFSET__, ZERO, ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN)
|
||||
#define DEFINE_EMC_REG_FOUR_BIT_ENUM(NAME, __OFFSET__, ZERO, ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, ELEVEN, TWELVE, THIRTEEN, FOURTEEN, FIFTEEN) REG_DEFINE_NAMED_FOUR_BIT_ENUM (EMC, NAME, __OFFSET__, ZERO, ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, ELEVEN, TWELVE, THIRTEEN, FOURTEEN, FIFTEEN)
|
||||
|
||||
DEFINE_EMC_REG_BIT_ENUM(DBG_WRITE_MUX, 1, ASSEMBLY, ACTIVE);
|
||||
|
||||
DEFINE_EMC_REG_BIT_ENUM(CFG_DYN_SELF_REF, 28, DISABLED, ENABLED);
|
||||
DEFINE_EMC_REG_BIT_ENUM(CFG_DRAM_ACPD, 29, NO_POWERDOWN, ACTIVE_POWERDOWN);
|
||||
|
||||
|
|
|
@ -32,6 +32,12 @@
|
|||
#define MC_SMMU_PTC_FLUSH_0 (0x034)
|
||||
#define MC_EMEM_CFG (0x050)
|
||||
#define MC_EMEM_ADR_CFG (0x054)
|
||||
#define MC_EMEM_ADR_CFG_DEV0 (0x058)
|
||||
#define MC_EMEM_ADR_CFG_DEV1 (0x05C)
|
||||
#define MC_EMEM_ADR_CFG_CHANNEL_MASK (0x060)
|
||||
#define MC_EMEM_ADR_CFG_BANK_MASK_0 (0x064)
|
||||
#define MC_EMEM_ADR_CFG_BANK_MASK_1 (0x068)
|
||||
#define MC_EMEM_ADR_CFG_BANK_MASK_2 (0x06C)
|
||||
#define MC_EMEM_ARB_CFG (0x090)
|
||||
#define MC_EMEM_ARB_OUTSTANDING_REQ (0x094)
|
||||
#define MC_EMEM_ARB_TIMING_RCD (0x098)
|
||||
|
@ -52,6 +58,11 @@
|
|||
#define MC_EMEM_ARB_MISC0 (0x0D8)
|
||||
#define MC_EMEM_ARB_MISC1 (0x0DC)
|
||||
#define MC_EMEM_ARB_RING1_THROTTLE (0x0E0)
|
||||
#define MC_EMEM_ARB_OVERRIDE (0x0E8)
|
||||
#define MC_EMEM_ARB_RSV (0x0EC)
|
||||
#define MC_CLKEN_OVERRIDE (0x0F4)
|
||||
#define MC_TIMING_CONTROL_DBG (0x0F8)
|
||||
#define MC_TIMING_CONTROL (0x0FC)
|
||||
#define MC_CLIENT_HOTRESET_CTRL (0x200)
|
||||
#define MC_CLIENT_HOTRESET_STATUS (0x204)
|
||||
#define MC_SMMU_AFI_ASID (0x238)
|
||||
|
@ -95,6 +106,7 @@
|
|||
#define MC_LATENCY_ALLOWANCE_SDMMCAB_0 (0x3C4)
|
||||
#define MC_LATENCY_ALLOWANCE_NVDEC_0 (0x3D8)
|
||||
#define MC_LATENCY_ALLOWANCE_GPU2_0 (0x3E8)
|
||||
#define MC_VIDEO_PROTECT_VPR_OVERRIDE (0x418)
|
||||
#define MC_DIS_PTSA_RATE (0x41C)
|
||||
#define MC_DIS_PTSA_MIN (0x420)
|
||||
#define MC_DIS_PTSA_MAX (0x424)
|
||||
|
@ -142,6 +154,7 @@
|
|||
#define MC_JPG_PTSA_RATE (0x584)
|
||||
#define MC_JPG_PTSA_MIN (0x588)
|
||||
#define MC_JPG_PTSA_MAX (0x58C)
|
||||
#define MC_VIDEO_PROTECT_VPR_OVERRIDE1 (0x590)
|
||||
#define MC_GK2_PTSA_RATE (0x610)
|
||||
#define MC_GK2_PTSA_MIN (0x614)
|
||||
#define MC_GK2_PTSA_MAX (0x618)
|
||||
|
@ -151,6 +164,8 @@
|
|||
#define MC_HDAPC_PTSA_RATE (0x628)
|
||||
#define MC_HDAPC_PTSA_MIN (0x62C)
|
||||
#define MC_HDAPC_PTSA_MAX (0x630)
|
||||
#define MC_VIDEO_PROTECT_BOM (0x648)
|
||||
#define MC_EMEM_CFG_ACCESS_CTRL (0x664)
|
||||
#define MC_SEC_CARVEOUT_BOM (0x670)
|
||||
#define MC_SEC_CARVEOUT_SIZE_MB (0x674)
|
||||
#define MC_SCALED_LATENCY_ALLOWANCE_DISPLAY0A (0x690)
|
||||
|
@ -165,9 +180,13 @@
|
|||
#define MC_EMEM_ARB_REFPB_BANK_CTRL (0x6F4)
|
||||
#define MC_UNTRANSLATED_REGION_CHECK (0x948)
|
||||
#define MC_PTSA_GRANT_DECREMENT (0x960)
|
||||
#define MC_EMEM_ARB_OVERRIDE_1 (0x968)
|
||||
#define MC_CLIENT_HOTRESET_CTRL_1 (0x970)
|
||||
#define MC_CLIENT_HOTRESET_STATUS_1 (0x974)
|
||||
#define MC_VIDEO_PROTECT_BOM_ADR_HI (0x978)
|
||||
#define MC_SMMU_PTC_FLUSH_1 (0x9B8)
|
||||
#define MC_SEC_CARVEOUT_ADR_HI (0x9D4)
|
||||
#define MC_DA_CONFIG0 (0x9DC)
|
||||
#define MC_SMMU_DC1_ASID (0xA88)
|
||||
#define MC_SMMU_SDMMC1A_ASID (0xA94)
|
||||
#define MC_SMMU_SDMMC2A_ASID (0xA98)
|
||||
|
@ -200,6 +219,7 @@
|
|||
#define MC_EMEM_ARB_DHYST_TIMEOUT_UTIL_7 (0xBEC)
|
||||
#define MC_ERR_GENERALIZED_CARVEOUT_STATUS (0xC00)
|
||||
|
||||
|
||||
#define MC_SMMU_TLB_CONFIG (0x014)
|
||||
#define MC_SMMU_PTC_CONFIG (0x018)
|
||||
|
||||
|
|
|
@ -46,6 +46,7 @@
|
|||
#define APBDEV_PMC_AUTO_WAKE_LVL_MASK (0x0DC)
|
||||
#define APBDEV_PMC_WAKE_DELAY (0x0E0)
|
||||
#define APBDEV_PMC_PWR_DET_VAL (0x0E4)
|
||||
#define APBDEV_PMC_DDR_PWR (0x0E8)
|
||||
#define APBDEV_PMC_CRYPTO_OP (0x0F4)
|
||||
#define APBDEV_PMC_SCRATCH31 (0x118)
|
||||
#define APBDEV_PMC_SCRATCH32 (0x11C)
|
||||
|
@ -64,12 +65,15 @@
|
|||
#define APBDEV_PMC_IO_DPD2_REQ (0x1C0)
|
||||
#define APBDEV_PMC_IO_DPD2_STATUS (0x1C4)
|
||||
#define APBDEV_PMC_SEL_DPD_TIM (0x1C8)
|
||||
#define APBDEV_PMC_VDDP_SEL (0x1CC)
|
||||
#define APBDEV_PMC_DDR_CFG (0x1D0)
|
||||
#define APBDEV_PMC_SCRATCH45 (0x234)
|
||||
#define APBDEV_PMC_SCRATCH46 (0x238)
|
||||
#define APBDEV_PMC_SCRATCH49 (0x244)
|
||||
#define APBDEV_PMC_TSC_MULT (0x2B4)
|
||||
#define APBDEV_PMC_STICKY_BITS (0x2C0)
|
||||
#define APBDEV_PMC_WEAK_BIAS (0x2C8)
|
||||
#define APBDEV_PMC_REG_SHORT (0x2CC)
|
||||
#define APBDEV_PMC_GPU_RG_CNTRL (0x2D4)
|
||||
#define APBDEV_PMC_CNTRL2 (0x440)
|
||||
#define APBDEV_PMC_FUSE_CTRL (0x450)
|
||||
|
@ -125,6 +129,7 @@
|
|||
#define APBDEV_PMC_SECURE_SCRATCH115 (0xB24)
|
||||
#define APBDEV_PMC_SECURE_SCRATCH119 (0xB34)
|
||||
|
||||
/* Mariko. */
|
||||
#define APBDEV_PMC_TZRAM_PWR_CNTRL (0xBE8)
|
||||
#define APBDEV_PMC_TZRAM_SEC_DISABLE (0xBEC)
|
||||
#define APBDEV_PMC_TZRAM_NON_SEC_DISABLE (0xBF0)
|
||||
|
|
Loading…
Reference in a new issue