soc/mediatek: Add EARLY_MMU_INIT kconfig option
Accessing RAM before mmu initialized is time consuming. During mmu initialization, `mmu_init()` and `mmu_config_range()` write logs to the console buffer and contribue the extra boot time. This patch adds a kconfig option to move `mtk_mmu_init()` to `bootblock_soc_early_init()`. When `EARLY_MMU_INIT` is enabled, mmu is initialized before `console_init()` ready. So `mmu_init()` and `mmu_config_range()` won't write logs to the console buffer and save the boot time. It saves about 65ms on Geralt with EARLY_MMU_INIT enabled. Before: 0:1st timestamp 239,841 (0) 11:start of bootblock 239,920 (79) 12:end of bootblock 323,191 (83,271) After: 0:1st timestamp 239,804 (0) 11:start of bootblock 239,884 (80) 12:end of bootblock 258,846 (18,962) BUG=b:320381143 TEST=check timestamps in cbmem Change-Id: I7f4c3c6c836f7276119698c6de362794cf4222a6 Signed-off-by: Yidi Lin <yidilin@chromium.org> Reviewed-on: https://review.coreboot.org/c/coreboot/+/79990 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Yu-Ping Wu <yupingso@google.com>
This commit is contained in:
		| @@ -91,4 +91,11 @@ config DEVAPC_DEBUG | |||||||
| 	  When this option is enabled, the DEVAPC driver prints the settings after | 	  When this option is enabled, the DEVAPC driver prints the settings after | ||||||
| 	  initialization. | 	  initialization. | ||||||
|  |  | ||||||
|  | config EARLY_MMU_INIT | ||||||
|  | 	bool | ||||||
|  | 	default n | ||||||
|  | 	help | ||||||
|  | 	  When this option is enabled, `mtk_mmu_init()` will be done in | ||||||
|  | 	  `bootblock_soc_early_init()` to reduce the boot time. | ||||||
|  |  | ||||||
| endif | endif | ||||||
|   | |||||||
							
								
								
									
										10
									
								
								src/soc/mediatek/common/bootblock.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								src/soc/mediatek/common/bootblock.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | |||||||
|  | /* SPDX-License-Identifier: GPL-2.0-only */ | ||||||
|  |  | ||||||
|  | #include <bootblock_common.h> | ||||||
|  | #include <soc/mmu_operations.h> | ||||||
|  |  | ||||||
|  | void bootblock_soc_early_init(void) | ||||||
|  | { | ||||||
|  | 	if (CONFIG(EARLY_MMU_INIT)) | ||||||
|  | 		mtk_mmu_init(); | ||||||
|  | } | ||||||
| @@ -9,6 +9,13 @@ __weak void mtk_soc_after_dram(void) { /* do nothing */ } | |||||||
|  |  | ||||||
| void mtk_mmu_init(void) | void mtk_mmu_init(void) | ||||||
| { | { | ||||||
|  | 	static bool mmu_inited; | ||||||
|  |  | ||||||
|  | 	if (mmu_inited) | ||||||
|  | 		return; | ||||||
|  |  | ||||||
|  | 	mmu_inited = true; | ||||||
|  |  | ||||||
| 	mmu_init(); | 	mmu_init(); | ||||||
|  |  | ||||||
| 	/* | 	/* | ||||||
|   | |||||||
| @@ -9,7 +9,7 @@ all-$(CONFIG_SPI_FLASH) += ../common/spi.c spi.c | |||||||
| all-y += timer.c ../common/timer_prepare.c | all-y += timer.c ../common/timer_prepare.c | ||||||
| all-y += ../common/uart.c | all-y += ../common/uart.c | ||||||
|  |  | ||||||
| bootblock-y += bootblock.c | bootblock-y += ../common/bootblock.c bootblock.c | ||||||
| bootblock-y += ../common/eint_event.c | bootblock-y += ../common/eint_event.c | ||||||
| bootblock-y += ../common/lastbus_v2.c lastbus.c | bootblock-y += ../common/lastbus_v2.c lastbus.c | ||||||
| bootblock-y += ../common/mmu_operations.c | bootblock-y += ../common/mmu_operations.c | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user