| /* Copyright 2015 The ChromiumOS Authors |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #include "debug_printf.h" |
| #include "link_defs.h" |
| #include "registers.h" |
| #include "setup.h" |
| |
| /* Is there a system wide function for this? */ |
| void halt(void) |
| { |
| while (1) |
| ; |
| } |
| |
| void checkBuildVersion(void) |
| { |
| uint32_t last_sync = GREG32(SWDP, P4_LAST_SYNC); |
| |
| if (last_sync == GC_SWDP_P4_LAST_SYNC_DEFAULT) |
| return; |
| |
| debug_printf("compiled for %u, not willing to run on %u\n", |
| GC_SWDP_P4_LAST_SYNC_DEFAULT, last_sync); |
| halt(); |
| } |
| |
| void unlockFlashForRW(void) |
| { |
| uint32_t text_end = ((uint32_t)(&__data_lma_start) + |
| (uint32_t)(&__data_end) - |
| (uint32_t)(&__data_start) + |
| CONFIG_FLASH_BANK_SIZE) |
| & ~(CONFIG_FLASH_BANK_SIZE - 1); |
| |
| GREG32(GLOBALSEC, FLASH_REGION1_BASE_ADDR) = text_end; |
| GREG32(GLOBALSEC, FLASH_REGION1_SIZE) = |
| CONFIG_FLASH_SIZE - text_end - 1; |
| GWRITE_FIELD(GLOBALSEC, FLASH_REGION1_CTRL, EN, 1); |
| GWRITE_FIELD(GLOBALSEC, FLASH_REGION1_CTRL, RD_EN, 1); |
| GWRITE_FIELD(GLOBALSEC, FLASH_REGION1_CTRL, WR_EN, 0); |
| } |
| |
| void disarmRAMGuards(void) |
| { |
| GWRITE_FIELD(GLOBALSEC, CPU0_D_REGION0_CTRL, EN, 1); |
| GWRITE_FIELD(GLOBALSEC, CPU0_D_REGION0_CTRL, RD_EN, 1); |
| GWRITE_FIELD(GLOBALSEC, CPU0_D_REGION0_CTRL, WR_EN, 1); |
| GWRITE_FIELD(GLOBALSEC, CPU0_D_REGION1_CTRL, EN, 1); |
| GWRITE_FIELD(GLOBALSEC, CPU0_D_REGION1_CTRL, RD_EN, 1); |
| GWRITE_FIELD(GLOBALSEC, CPU0_D_REGION1_CTRL, WR_EN, 1); |
| } |