mirror of
https://github.com/Atmosphere-NX/Atmosphere.git
synced 2025-04-20 03:24:51 +00:00
replace MAKE_MC_REG() with mc_register_t pointer access
This commit is contained in:
parent
0ebf9aab24
commit
33824b51f4
1 changed files with 52 additions and 44 deletions
|
@ -66,28 +66,29 @@ void bootup_misc_mmio(void) {
|
|||
APBDEV_PMC_DPD_ENABLE_0 = 0;
|
||||
|
||||
/* Setup MC. */
|
||||
MAKE_MC_REG(MC_REGISTER_VIDEO_PROTECT_GPU_OVERRIDE_0_0) = 1;
|
||||
volatile mc_register_t *mc_register = get_mc_reg();
|
||||
mc_register->VIDEO_PROTECT_GPU_OVERRIDE_0_0 = 1;
|
||||
|
||||
/* undefined in reference manual */
|
||||
MAKE_MC_REG(MC_REGISTER_0x648) = 0;
|
||||
MAKE_MC_REG(MC_REGISTER_0x64C) = 0;
|
||||
MAKE_MC_REG(MC_REGISTER_0x650) = 1;
|
||||
mc_register->_0x648 = 0;
|
||||
mc_register->_0x64C = 0;
|
||||
mc_register->_0x650 = 1;
|
||||
|
||||
/* disable SEC carveout */
|
||||
MAKE_MC_REG(MC_REGISTER_SEC_CARVEOUT_BOM_0) = 0;
|
||||
MAKE_MC_REG(MC_REGISTER_SEC_CARVEOUT_SIZE_MB_0) = 0;
|
||||
MAKE_MC_REG(MC_REGISTER_SEC_CARVEOUT_REG_CTRL_0) = 1;
|
||||
mc_register->SEC_CARVEOUT_BOM_0 = 0;
|
||||
mc_register->SEC_CARVEOUT_SIZE_MB_0 = 0;
|
||||
mc_register->SEC_CARVEOUT_REG_CTRL_0 = 1;
|
||||
|
||||
/* disable MTS carveout */
|
||||
MAKE_MC_REG(MC_REGISTER_MTS_CARVEOUT_BOM_0) = 0;
|
||||
MAKE_MC_REG(MC_REGISTER_MTS_CARVEOUT_SIZE_MB_0) = 0;
|
||||
MAKE_MC_REG(MC_REGISTER_MTS_CARVEOUT_ADR_HI_0) = 0;
|
||||
MAKE_MC_REG(MC_REGISTER_MTS_CARVEOUT_REG_CTRL_0) = 1;
|
||||
mc_register->MTS_CARVEOUT_BOM_0 = 0;
|
||||
mc_register->MTS_CARVEOUT_SIZE_MB_0 = 0;
|
||||
mc_register->MTS_CARVEOUT_ADR_HI_0 = 0;
|
||||
mc_register->MTS_CARVEOUT_REG_CTRL_0 = 1;
|
||||
|
||||
/* disable security carveout - SECURITY_CFG0_0, CFG1_0, CFG3_0 */
|
||||
MAKE_MC_REG(MC_REGISTER_SECURITY_BOM) = 0;
|
||||
MAKE_MC_REG(MC_REGISTER_SECURITY_SIZE_MB) = 0;
|
||||
MAKE_MC_REG(MC_REGISTER_SECURITY_BOM_HI) = 0x11;
|
||||
mc_register->SECURITY_BOM = 0;
|
||||
mc_register->SECURITY_SIZE_MB = 0;
|
||||
mc_register->SECURITY_BOM_HI = 0x11;
|
||||
|
||||
configure_default_carveouts();
|
||||
|
||||
|
@ -115,40 +116,42 @@ void bootup_misc_mmio(void) {
|
|||
APB_MISC_SECURE_REGS_APB_SLAVE_SECURITY_ENABLE_REG2_0 = sec_disable_2;
|
||||
|
||||
/* reset translation tables to allow all */
|
||||
MAKE_MC_REG(MC_REGISTER_SMMU_TRANSLATION_ENABLE_0_0) = 0xFFFFFFFF;
|
||||
MAKE_MC_REG(MC_REGISTER_SMMU_TRANSLATION_ENABLE_1_0) = 0xFFFFFFFF;
|
||||
MAKE_MC_REG(MC_REGISTER_SMMU_TRANSLATION_ENABLE_2_0) = 0xFFFFFFFF;
|
||||
MAKE_MC_REG(MC_REGISTER_SMMU_TRANSLATION_ENABLE_3_0) = 0xFFFFFFFF;
|
||||
MAKE_MC_REG(MC_REGISTER_SMMU_TRANSLATION_ENABLE_4_0) = 0xFFFFFFFF;
|
||||
mc_register->SMMU_TRANSLATION_ENABLE_0_0 = 0xFFFFFFFF;
|
||||
mc_register->SMMU_TRANSLATION_ENABLE_1_0 = 0xFFFFFFFF;
|
||||
mc_register->SMMU_TRANSLATION_ENABLE_2_0 = 0xFFFFFFFF;
|
||||
mc_register->SMMU_TRANSLATION_ENABLE_3_0 = 0xFFFFFFFF;
|
||||
mc_register->SMMU_TRANSLATION_ENABLE_4_0 = 0xFFFFFFFF;
|
||||
|
||||
MAKE_MC_REG(MC_REGISTER_0x38) = 0;
|
||||
MAKE_MC_REG(MC_REGISTER_0x3C) = 0;
|
||||
/* unknown null */
|
||||
mc_register->_0x38 = 0;
|
||||
mc_register->_0x3C = 0;
|
||||
|
||||
/* disable stall calls after ring1 and ring3 requests */
|
||||
MAKE_MC_REG(MC_REGISTER_EMEM_ARB_RING1_THROTTLE_0) = 0;
|
||||
MAKE_MC_REG(MC_REGISTER_EMEM_ARB_RING3_THROTTLE_0) = 0;
|
||||
mc_register->EMEM_ARB_RING1_THROTTLE_0 = 0;
|
||||
mc_register->EMEM_ARB_RING3_THROTTLE_0 = 0;
|
||||
|
||||
MAKE_MC_REG(MC_REGISTER_EMEM_ARB_OVERRIDE_0) = 0; /* disable overrides */
|
||||
MAKE_MC_REG(MC_REGISTER_EMEM_ARB_RSV_0) = 0; /* null reserved register */
|
||||
mc_register->EMEM_ARB_OVERRIDE_0 = 0; /* disable overrides */
|
||||
mc_register->EMEM_ARB_RSV_0 = 0; /* null reserved register */
|
||||
|
||||
MAKE_MC_REG(MC_REGISTER_0xF0) = 0;
|
||||
/* unknown null */
|
||||
mc_register->_0xF0 = 0;
|
||||
|
||||
/* disable clock-enable overrides */
|
||||
MAKE_MC_REG(MC_REGISTER_CLKEN_OVERRIDE_0) = 0;
|
||||
|
||||
mc_register->CLKEN_OVERRIDE_0 = 0;
|
||||
|
||||
/* reset PTB, TLB and PTC */
|
||||
MAKE_MC_REG(MC_REGISTER_SMMU_PTB_DATA_0) = 0;
|
||||
MAKE_MC_REG(MC_REGISTER_SMMU_TLB_CONFIG_0) = 0x30000030;
|
||||
MAKE_MC_REG(MC_REGISTER_SMMU_PTC_CONFIG_0) = 0x2800003F;
|
||||
mc_register->SMMU_PTB_DATA_0 = 0;
|
||||
mc_register->SMMU_TLB_CONFIG_0 = 0x30000030;
|
||||
mc_register->SMMU_PTC_CONFIG_0 = 0x2800003F;
|
||||
|
||||
/* TODO: What are these MC reg writes? */
|
||||
(void)(MAKE_MC_REG(MC_REGISTER_SMMU_TLB_CONFIG_0));
|
||||
MAKE_MC_REG(MC_REGISTER_SMMU_PTC_FLUSH_0) = 0;
|
||||
(void)(MAKE_MC_REG(MC_REGISTER_SMMU_TLB_CONFIG_0));
|
||||
MAKE_MC_REG(MC_REGISTER_SMMU_TLB_FLUSH_0) = 0;
|
||||
(void)(MAKE_MC_REG(MC_REGISTER_SMMU_TLB_CONFIG_0));
|
||||
MAKE_MC_REG(MC_REGISTER_SMMU_CONFIG_0) = 0x1; /* enable SMMU */
|
||||
(void)(MAKE_MC_REG(MC_REGISTER_SMMU_TLB_CONFIG_0));
|
||||
(void)(mc_register->SMMU_TLB_CONFIG_0);
|
||||
mc_register->SMMU_PTC_FLUSH_0 = 0;
|
||||
(void)(mc_register->SMMU_TLB_CONFIG_0);
|
||||
mc_register->SMMU_TLB_FLUSH_0 = 0;
|
||||
(void)(mc_register->SMMU_TLB_CONFIG_0);
|
||||
mc_register->SMMU_CONFIG_0 = 0x1; /* enable SMMU */
|
||||
(void)(mc_register->SMMU_TLB_CONFIG_0);
|
||||
|
||||
/* Clear RESET Vector, setup CPU Secure Boot RESET Vectors. */
|
||||
uint32_t reset_vec = TZRAM_GET_SEGMENT_PA(TZRAM_SEGMENT_ID_WARMBOOT_CRT0_AND_MAIN);
|
||||
|
@ -188,18 +191,19 @@ void bootup_misc_mmio(void) {
|
|||
g_has_booted_up = true;
|
||||
} else if (exosphere_get_target_firmware() < EXOSPHERE_TARGET_FIRMWARE_400) {
|
||||
/* TODO: What are these MC reg writes? */
|
||||
MAKE_MC_REG(MC_REGISTER_0x65C) = 0xFFFFF000;
|
||||
MAKE_MC_REG(MC_REGISTER_0x660) = 0;
|
||||
MAKE_MC_REG(MC_REGISTER_IRAM_REG_CTRL_0) |= 1; /* overlap at 18.11.1.86 and 18.11.1.87 - lock write access to IRAM and EMEM registers */
|
||||
mc_register->_0x65C = 0xFFFFF000;
|
||||
mc_register->_0x660 = 0;
|
||||
mc_register->EMEM_CFG_ACCESS_CTRL_0_AND_IRAM_REG_CTRL_0 |= 1; /* overlap at 18.11.1.86 and 18.11.1.87 - lock write access to IRAM and EMEM registers */
|
||||
CLK_RST_CONTROLLER_LVL2_CLK_GATE_OVRD_0 &= 0xFFF7FFFF;
|
||||
}
|
||||
}
|
||||
|
||||
void setup_4x_mmio(void) {
|
||||
volatile mc_register_t *mc_register = get_mc_reg();
|
||||
/* TODO: What are these MC reg writes? */
|
||||
MAKE_MC_REG(MC_REGISTER_0x65C) = 0xFFFFF000;
|
||||
MAKE_MC_REG(MC_REGISTER_0x660) = 0;
|
||||
MAKE_MC_REG(MC_REGISTER_IRAM_REG_CTRL_0) |= 1; /* as above, lock write access to IRAM and EMEM registers */
|
||||
mc_register->_0x65C = 0xFFFFF000;
|
||||
mc_register->_0x660 = 0;
|
||||
mc_register->EMEM_CFG_ACCESS_CTRL_0_AND_IRAM_REG_CTRL_0 |= 1; /* as above, lock write access to IRAM and EMEM registers */
|
||||
CLK_RST_CONTROLLER_LVL2_CLK_GATE_OVRD_0 &= 0xFFF7FFFF;
|
||||
|
||||
/* TODO: What are these PMC scratch writes? */
|
||||
|
@ -218,6 +222,7 @@ void setup_4x_mmio(void) {
|
|||
APBDEV_PMC_SECURE_SCRATCH103_0 = 0x0;
|
||||
APBDEV_PMC_SECURE_SCRATCH39_0 = (APBDEV_PMC_SECURE_SCRATCH39_0 & 0xF8000000) | 0x88;
|
||||
/* TODO: Do we want to bother locking the secure scratch registers? */
|
||||
|
||||
/* 4.x Jamais Vu mitigations. */
|
||||
/* Overwrite exception vectors. */
|
||||
BPMP_VECTOR_RESET = BPMP_MITIGATION_RESET_VAL;
|
||||
|
@ -228,8 +233,10 @@ void setup_4x_mmio(void) {
|
|||
BPMP_VECTOR_UNK = BPMP_MITIGATION_RESET_VAL;
|
||||
BPMP_VECTOR_IRQ = BPMP_MITIGATION_RESET_VAL;
|
||||
BPMP_VECTOR_FIQ = BPMP_MITIGATION_RESET_VAL;
|
||||
|
||||
/* Disable AHB arbitration for the BPMP. */
|
||||
AHB_ARBITRATION_DISABLE_0 |= 2;
|
||||
|
||||
/* Set SMMU for BPMP/APB-DMA to point to TZRAM. */
|
||||
MC_SMMU_PTB_ASID_0 = 1;
|
||||
MC_SMMU_PTB_DATA_0 = 0x70012;
|
||||
|
@ -239,6 +246,7 @@ void setup_4x_mmio(void) {
|
|||
while ((FLOW_CTLR_HALT_COP_EVENTS_0 >> 29) != 5) {
|
||||
wait(1);
|
||||
}
|
||||
|
||||
/* If not in a debugging context, setup the activity monitor. */
|
||||
if ((get_debug_authentication_status() & 3) != 3) {
|
||||
FLOW_CTLR_HALT_COP_EVENTS_0 = 0x40000000;
|
||||
|
|
Loading…
Add table
Reference in a new issue