mb/google/geralt: Add MediaTek MT8188 reference board

Add mainboard folder and drivers for new reference board 'Geralt'.

TEST=saw the coreboot uart log to bootblock
BUG=b:233720142

Signed-off-by: Bo-Chen Chen <rex-bc.chen@mediatek.com>
Change-Id: I5e437d46097369bef535ff64e6a693b7cf67f2f1
Reviewed-on: https://review.coreboot.org/c/coreboot/+/65586
Reviewed-by: Yu-Ping Wu <yupingso@google.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Yidi Lin <yidilin@chromium.org>
diff --git a/src/mainboard/google/geralt/Kconfig b/src/mainboard/google/geralt/Kconfig
new file mode 100644
index 0000000..f327a02
--- /dev/null
+++ b/src/mainboard/google/geralt/Kconfig
@@ -0,0 +1,28 @@
+## SPDX-License-Identifier: GPL-2.0-only
+
+# Umbrella option to be selected by variant boards.
+config BOARD_GOOGLE_GERALT_COMMON
+	def_bool n
+
+if BOARD_GOOGLE_GERALT_COMMON
+
+config VBOOT
+	select VBOOT_VBNV_FLASH
+
+config BOARD_SPECIFIC_OPTIONS
+	def_bool y
+	select SOC_MEDIATEK_MT8188
+	select BOARD_ROMSIZE_KB_8192
+	select MAINBOARD_HAS_CHROMEOS
+	select COMMON_CBFS_SPI_WRAPPER
+	select SPI_FLASH
+	select SPI_FLASH_INCLUDE_ALL_DRIVERS
+
+config MAINBOARD_DIR
+	string
+	default "google/geralt"
+
+config MAINBOARD_PART_NUMBER
+	string
+	default "Geralt" if BOARD_GOOGLE_GERALT
+endif
diff --git a/src/mainboard/google/geralt/Kconfig.name b/src/mainboard/google/geralt/Kconfig.name
new file mode 100644
index 0000000..6c52a61
--- /dev/null
+++ b/src/mainboard/google/geralt/Kconfig.name
@@ -0,0 +1,5 @@
+comment "Geralt"
+
+config BOARD_GOOGLE_GERALT
+	bool "->  Geralt"
+	select BOARD_GOOGLE_GERALT_COMMON
diff --git a/src/mainboard/google/geralt/Makefile.inc b/src/mainboard/google/geralt/Makefile.inc
new file mode 100644
index 0000000..4720dc5
--- /dev/null
+++ b/src/mainboard/google/geralt/Makefile.inc
@@ -0,0 +1,16 @@
+bootblock-y += memlayout.ld
+bootblock-y += bootblock.c
+bootblock-y += chromeos.c
+
+verstage-y += memlayout.ld
+verstage-y += chromeos.c
+verstage-y += reset.c
+
+romstage-y += memlayout.ld
+romstage-y += chromeos.c
+romstage-y += romstage.c
+
+ramstage-y += memlayout.ld
+ramstage-y += chromeos.c
+ramstage-y += mainboard.c
+ramstage-y += reset.c
diff --git a/src/mainboard/google/geralt/board_info.txt b/src/mainboard/google/geralt/board_info.txt
new file mode 100644
index 0000000..152770d
--- /dev/null
+++ b/src/mainboard/google/geralt/board_info.txt
@@ -0,0 +1,6 @@
+Vendor name: Google
+Board name: Geralt MediaTek MT8188 reference board
+Category: eval
+ROM protocol: SPI
+ROM socketed: n
+Flashrom support: y
diff --git a/src/mainboard/google/geralt/bootblock.c b/src/mainboard/google/geralt/bootblock.c
new file mode 100644
index 0000000..0413ef2
--- /dev/null
+++ b/src/mainboard/google/geralt/bootblock.c
@@ -0,0 +1,9 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <bootblock_common.h>
+#include <device/mmio.h>
+
+void bootblock_mainboard_init(void)
+{
+	/* TODO: add mainboard init for bootblock */
+}
diff --git a/src/mainboard/google/geralt/chromeos.c b/src/mainboard/google/geralt/chromeos.c
new file mode 100644
index 0000000..94f5b4f
--- /dev/null
+++ b/src/mainboard/google/geralt/chromeos.c
@@ -0,0 +1,15 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <bootmode.h>
+#include <boot/coreboot_tables.h>
+
+void fill_lb_gpios(struct lb_gpios *gpios)
+{
+	/* TODO: add Chrome specific gpios */
+}
+
+int get_recovery_mode_switch(void)
+{
+	/* TODO: use Chrome EC switches when EC support is added */
+	return 0;
+}
diff --git a/src/mainboard/google/geralt/chromeos.fmd b/src/mainboard/google/geralt/chromeos.fmd
new file mode 100644
index 0000000..a8c4dfe
--- /dev/null
+++ b/src/mainboard/google/geralt/chromeos.fmd
@@ -0,0 +1,46 @@
+# Firmware Layout Description for Chrome OS.
+#
+# The size and address of every section must be aligned to at least 4K, except:
+# RO_FRID, RW_FWID*, GBB, or any unused / padding / CBFS type sections.
+#
+# 'FMAP' may be found by binary search so its starting address should be better
+# aligned to larger values.
+#
+# For sections to be preserved on update, add (PRESERVE) to individual sections
+# instead of a group section; otherwise the preserved data may be wrong if you
+# resize or reorder sections inside a group.
+
+FLASH@0x0 8M {
+	WP_RO@0x0 4M {
+		RO_SECTION {
+			BOOTBLOCK 128K
+			FMAP 4K
+			COREBOOT(CBFS)
+			GBB 0x2f00
+			RO_FRID 0x100
+		}
+		RO_GSCVD 8K
+		RO_VPD(PRESERVE) 32K  # At least 16K.
+	}
+	RW_SECTION_A 1500K {
+		VBLOCK_A 8K
+		FW_MAIN_A(CBFS)
+		RW_FWID_A 0x100
+	}
+	RW_MISC 36K {
+		RW_VPD(PRESERVE) 16K  # At least 8K.
+		RW_NVRAM(PRESERVE) 8K
+		RW_MRC_CACHE(PRESERVE) 8K
+		RW_ELOG(PRESERVE) 4K  # ELOG driver hard-coded size in 4K.
+	}
+	RW_SECTION_B 1500K {
+		VBLOCK_B 8K
+		FW_MAIN_B(CBFS)
+		RW_FWID_B 0x100
+	}
+	RW_SHARED 36K {  # Will be force updated on recovery.
+		SHARED_DATA 4K  # 4K or less for netboot params.
+		RW_UNUSED
+	}
+	RW_LEGACY(CBFS) 1M  # Minimal 1M.
+}
diff --git a/src/mainboard/google/geralt/devicetree.cb b/src/mainboard/google/geralt/devicetree.cb
new file mode 100644
index 0000000..3e6bec8a
--- /dev/null
+++ b/src/mainboard/google/geralt/devicetree.cb
@@ -0,0 +1,5 @@
+## SPDX-License-Identifier: GPL-2.0-only
+
+chip soc/mediatek/mt8188
+	device cpu_cluster 0 on end
+end
diff --git a/src/mainboard/google/geralt/mainboard.c b/src/mainboard/google/geralt/mainboard.c
new file mode 100644
index 0000000..af12d21
--- /dev/null
+++ b/src/mainboard/google/geralt/mainboard.c
@@ -0,0 +1,18 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <device/device.h>
+
+static void mainboard_init(struct device *dev)
+{
+	/* TODO: add mainboard init */
+}
+
+static void mainboard_enable(struct device *dev)
+{
+	dev->ops->init = &mainboard_init;
+}
+
+struct chip_operations mainboard_ops = {
+	.name = CONFIG_MAINBOARD_PART_NUMBER,
+	.enable_dev = mainboard_enable,
+};
diff --git a/src/mainboard/google/geralt/memlayout.ld b/src/mainboard/google/geralt/memlayout.ld
new file mode 100644
index 0000000..0f1fcec
--- /dev/null
+++ b/src/mainboard/google/geralt/memlayout.ld
@@ -0,0 +1,3 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <soc/memlayout.ld>
diff --git a/src/mainboard/google/geralt/reset.c b/src/mainboard/google/geralt/reset.c
new file mode 100644
index 0000000..3eb1390
--- /dev/null
+++ b/src/mainboard/google/geralt/reset.c
@@ -0,0 +1,8 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <reset.h>
+
+void do_board_reset(void)
+{
+	/* TODO: add reset function when gpio is ready */
+}
diff --git a/src/mainboard/google/geralt/romstage.c b/src/mainboard/google/geralt/romstage.c
new file mode 100644
index 0000000..0db6fd2
--- /dev/null
+++ b/src/mainboard/google/geralt/romstage.c
@@ -0,0 +1,8 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <arch/stages.h>
+
+void platform_romstage_main(void)
+{
+	/* TODO: add romstage main function */
+}