mediatek/mt8183: Enable bootblock self-decompression

MT8183 only allows booting from eMMC, so we have to do eMMC emulation
from an external source, for example EC, which makes the size of
bootblock very important.

A fully functional bootblock (that can boot into verstage or romstage)
is about 38000 bytes. If self decompression (CONFIG_COMPRESS_BOOTBLOCK)
is enabled, only 25088 (66%) bytes are needed.

Inspired from crosreview.com/1070018.

BUG=b:80501386
TEST=manually flashed into kukui and boots into romstage.

Change-Id: I7a739866a4ea3bcafe2ff7b9e88d5ed00f3f3e40
Signed-off-by: Hung-Te Lin <hungte@chromium.org>
Reviewed-on: https://review.coreboot.org/27599
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Julius Werner <jwerner@chromium.org>
This commit is contained in:
Hung-Te Lin 2018-06-26 13:42:04 +08:00 committed by Patrick Georgi
parent 4c067c8550
commit 03e9cb9b35
6 changed files with 31 additions and 4 deletions

View File

@ -1,4 +1,5 @@
bootblock-y += memlayout.ld bootblock-y += memlayout.ld
decompressor-y += memlayout.ld
verstage-y += chromeos.c verstage-y += chromeos.c
verstage-y += memlayout.ld verstage-y += memlayout.ld

View File

@ -10,6 +10,7 @@ config SOC_MEDIATEK_MT8183
select GENERIC_UDELAY select GENERIC_UDELAY
select HAVE_UART_SPECIAL select HAVE_UART_SPECIAL
select HAVE_MONOTONIC_TIMER select HAVE_MONOTONIC_TIMER
select COMPRESS_BOOTBLOCK
if SOC_MEDIATEK_MT8183 if SOC_MEDIATEK_MT8183

View File

@ -11,6 +11,10 @@ bootblock-$(CONFIG_DRIVERS_UART) += ../common/uart.c
endif endif
bootblock-y += ../common/wdt.c bootblock-y += ../common/wdt.c
decompressor-y += decompressor.c
decompressor-y += ../common/mmu_operations.c
decompressor-y += ../common/timer.c
verstage-y += ../common/gpio.c gpio.c verstage-y += ../common/gpio.c gpio.c
verstage-$(CONFIG_SPI_FLASH) += spi.c verstage-$(CONFIG_SPI_FLASH) += spi.c
verstage-y += ../common/timer.c verstage-y += ../common/timer.c

View File

@ -20,7 +20,6 @@
void bootblock_soc_init(void) void bootblock_soc_init(void)
{ {
mtk_mmu_init();
mt_pll_init(); mt_pll_init();
mtk_wdt_init(); mtk_wdt_init();
} }

View File

@ -0,0 +1,22 @@
/*
* This file is part of the coreboot project.
*
* Copyright 2018 Google Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License.
*
* This program is distributed in the hope that 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.
*/
#include <bootblock_common.h>
#include <soc/mmu_operations.h>
void decompressor_soc_init(void)
{
mtk_mmu_init();
}

View File

@ -39,9 +39,9 @@ SECTIONS
SRAM_END(0x00120000) SRAM_END(0x00120000)
SRAM_L2C_START(0x00200000) SRAM_L2C_START(0x00200000)
BOOTBLOCK(0x00201000, 85K) OVERLAP_DECOMPRESSOR_ROMSTAGE(0x000201000, 92K)
VERSTAGE(0x00217000, 114K) BOOTBLOCK(0x00227000, 89K)
ROMSTAGE(0x00233800, 92K) VERSTAGE(0x0023E000, 114K)
SRAM_L2C_END(0x00280000) SRAM_L2C_END(0x00280000)
DRAM_START(0x40000000) DRAM_START(0x40000000)