blob: 62bdbdadf9c57214f4755de78e01dcf4fea59450 [file] [log] [blame]
Angel Ponsa2ee7612020-04-04 18:51:15 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Daisuke Nojiriefddcfb2014-09-04 09:55:34 -07002
3#include <arch/cache.h>
4#include <arch/exception.h>
Daisuke Nojiri23727ca2014-12-01 17:19:10 -08005#include <arch/hlt.h>
6#include <arch/stages.h>
Aaron Durbin0946a1b2015-05-01 16:48:54 -05007#include <program_loading.h>
Kyösti Mälkkif40a25b2021-11-04 16:51:45 +02008#include <security/vboot/vboot_common.h>
Julius Wernerf0d21ff32014-10-20 13:24:14 -07009#include <soc/cache.h>
10#include <soc/early_configs.h>
Julius Wernerec5e5e02014-08-20 15:29:56 -070011#include <symbols.h>
Stefan Reinauer77b16552015-01-14 19:51:47 +010012
Daisuke Nojiriefddcfb2014-09-04 09:55:34 -070013static void enable_cache(void)
Stefan Reinauer77b16552015-01-14 19:51:47 +010014{
Daisuke Nojiriefddcfb2014-09-04 09:55:34 -070015 mmu_init();
16 /* Whole space is uncached. */
17 mmu_config_range(0, 4096, DCACHE_OFF);
Julius Wernerec5e5e02014-08-20 15:29:56 -070018 /* SRAM is cached. MMU code will round size up to page size. */
Julius Werner7e0dea62019-02-20 18:39:22 -080019 mmu_config_range((uintptr_t)_sram/MiB,
20 DIV_ROUND_UP(REGION_SIZE(sram), MiB),
Julius Wernerec5e5e02014-08-20 15:29:56 -070021 DCACHE_WRITEBACK);
Daisuke Nojiriefddcfb2014-09-04 09:55:34 -070022 mmu_disable_range(0, 1);
23 dcache_mmu_enable();
24}
Daisuke Nojiribcc1d422014-06-19 19:16:24 -070025
Aaron Durbin5a4f2892015-10-01 16:24:28 -050026void verstage_mainboard_init(void)
Daisuke Nojiriefddcfb2014-09-04 09:55:34 -070027{
Aaron Durbin5a4f2892015-10-01 16:24:28 -050028 /* Do the minimum to run vboot at full speed */
Daisuke Nojiriefddcfb2014-09-04 09:55:34 -070029 configure_l2_cache();
Daisuke Nojiriefddcfb2014-09-04 09:55:34 -070030 enable_cache();
Daisuke Nojiri23727ca2014-12-01 17:19:10 -080031 early_mainboard_init();
Daisuke Nojiri23727ca2014-12-01 17:19:10 -080032}
33
Arthur Heymans2f389f12019-10-20 01:00:57 +020034void stage_entry(uintptr_t unused)
Daisuke Nojiriefddcfb2014-09-04 09:55:34 -070035{
36 asm volatile ("bl arm_init_caches"
37 : : : "r0", "r1", "r2", "r3", "r4", "r5", "ip");
Julius Werner94d94112017-03-16 19:21:51 -070038 main();
Stefan Reinauer77b16552015-01-14 19:51:47 +010039}