/* SPDX-License-Identifier: GPL-2.0+ */
/*
 * Configuration for MT8183 based boards
 *
 * Copyright (C) 2019 BayLibre, SAS
 * Author: Fabien Parent <fparent@baylibre.com
 */

#ifndef __MT8183_H
#define __MT8183_H

#include <linux/sizes.h>

#define CONFIG_ENV_SIZE			SZ_4K
#define CONFIG_SYS_LOAD_ADDR		CONFIG_SYS_TEXT_BASE
#define CONFIG_SYS_MALLOC_LEN		SZ_4M

#define CONFIG_CPU_ARMV8
#define COUNTER_FREQUENCY		13000000

#define CONFIG_SYS_NS16550_SERIAL
#define CONFIG_SYS_NS16550_REG_SIZE	-4
#define CONFIG_SYS_NS16550_MEM32
#define CONFIG_SYS_NS16550_COM1		0x11005200
#define CONFIG_SYS_NS16550_CLK		26000000

#define CONFIG_SYS_UBOOT_START		CONFIG_SYS_TEXT_BASE
#define CONFIG_SYS_INIT_SP_ADDR		(CONFIG_SYS_TEXT_BASE + SZ_2M - \
						 GENERATED_GBL_DATA_SIZE)

#define CONFIG_SYS_BOOTM_LEN		SZ_64M

#define CONFIG_SYS_MMC_ENV_DEV		0
#define CONFIG_SYS_MMC_ENV_PART		2
#define CONFIG_ENV_OFFSET		0

#ifdef CONFIG_MTK_ANDROID

#define MMC_LOAD_PART(_partname) \
	"part start mmc ${mmcdev} " _partname " " _partname "_part_start;" \
	"part size mmc ${mmcdev} " _partname " " _partname "_part_size;" \
	"mmc read ${loadaddr} ${" _partname "_part_start} ${" _partname "_part_size};"

#define MMC_LOAD_DTB \
	MMC_LOAD_PART("dtbo") \
	"dtimg select ${loadaddr} ${dtb_index};" \
	"dtimg merge ${loadaddr} ${dtbo_index};"

#ifdef CONFIG_CMD_AB_SELECT

#define MMC_LOAD_PART_AB(_partname, _slot) \
	"part start mmc ${mmcdev} " _partname "_" _slot " " _partname "_part_start;"  \
	"part size mmc ${mmcdev} " _partname "_" _slot " " _partname "_part_size;"  \
	"mmc read ${loadaddr} ${" _partname "_part_start} ${" _partname "_part_size};"

#define MMC_LOAD_BOOT     MMC_LOAD_PART_AB("boot", "${android_ab_slot}")

/*
 * In the case of Android A/B, the recovery RAM disk
 * is contained in the boot.img
 * https://source.android.com/devices/tech/ota/ab/ab_implement#recovery
 */
#define ANDROID_BOOT_RECOVERY \
	MMC_LOAD_DTB \
	MMC_LOAD_BOOT \
	"bootm ${loadaddr};"

#define ANDROID_BOOT_SYSTEM \
	MMC_LOAD_DTB \
	MMC_LOAD_BOOT \
	"part number-format dec;" \
	"part number mmc ${mmcdev} system_${android_ab_slot} rootfs_partition;" \
	"setenv bootargs   \"${bootargs} root=/dev/mmcblk${mmcdev}p${rootfs_partition}\";" \
	"setenv bootargs  \"${bootargs} androidboot.android_dt_dir=/proc/device-tree/odm/firmware/android/\";" \
	"setenv bootargs  \"${bootargs} skip_initramfs\";"	\
	"bootm ${loadaddr};"

#define ANDROID_AB_GET_SLOT \
	"ab_select android_ab_slot mmc ${mmcdev}#misc;" \
	"setenv bootargs  \"${bootargs} androidboot.slot_suffix=_${android_ab_slot}\";"

#else
#define MMC_LOAD_RECOVERY MMC_LOAD_PART("recovery")
#define MMC_LOAD_BOOT     MMC_LOAD_PART("boot")

#define ANDROID_BOOT_RECOVERY \
	MMC_LOAD_DTB \
	MMC_LOAD_RECOVERY \
	"bootm ${loadaddr};"

#define ANDROID_BOOT_SYSTEM \
	MMC_LOAD_DTB \
	MMC_LOAD_BOOT \
	"part number-format dec;" \
	"part number mmc ${mmcdev} system rootfs_partition;" \
	"setenv bootargs  \"${bootargs} root=/dev/mmcblk${mmcdev}p${rootfs_partition}\";" \
	"setenv bootargs  \"${bootargs} androidboot.android_dt_dir=/proc/device-tree/odm/firmware/android/\";" \
	"bootm ${loadaddr};"

#define ANDROID_AB_GET_SLOT ""

#endif // ifdef CONFIG_CMD_AB_SELECT

/*
 * checks if we should boot into android recovery mode
 *
 * This is a mix between BCB (misc partition) and Android system properties
 * from userdata.
 *
 * To avoid booting twice in a row into recovery, always erase the system
 * property
 *
 * sets androidboot_recovery to 1 if we should boot into recovery
 */
#define ANDROID_TEST_RECOVERY \
	"if bcb load ${mmcdev} misc; then " \
		"if bcb test command = boot-recovery; then " \
			"bcb clear command; bcb store;" \
			"aprop load ${mmcdev} userdata;" \
			"if aprop test persist.sys.boot.reason = recovery; then " \
				"aprop set persist.sys.boot.reason none; aprop store;" \
			"fi;" \
			"setenv androidboot_recovery 1;" \
		"else " \
			"if aprop load ${mmcdev} userdata; then " \
				"if aprop test persist.sys.boot.reason = recovery; then " \
					"aprop set persist.sys.boot.reason none; aprop store;" \
					"setenv androidboot_recovery 1;" \
				"fi;" \
			"fi;" \
		"fi;" \
	"fi;" \

#define MMCBOOT \
	"mmcdev=0\0" \
	"rootfs_partition=0\0" \
	"dtb_index=0\0" \
	"dtbo_index=1\0" \
	"loadaddr=0x50000000\0" \
	"androidboot_recovery=0\0" \
	"android_ab_slot=\0" \
	"mmcboot=" \
		ANDROID_AB_GET_SLOT \
		ANDROID_TEST_RECOVERY \
		"if test \"${androidboot_recovery}\" -eq 1; then " \
			"echo Android: booting into recovery;" \
			ANDROID_BOOT_RECOVERY \
		"fi;" \
		"echo Android: booting into system;" \
		ANDROID_BOOT_SYSTEM \
		"\0"
#else
#define MMCBOOT \
	"mmcdev=0\0" \
	"rootfs_partition=3\0" \
	"mmc_discover_partition=" \
		"part start mmc ${mmcdev} kernel kernel_part_addr;" \
		"part size mmc ${mmcdev} kernel kernel_part_size;\0" \
	"mmcboot=" \
		"mmc dev ${mmcdev};" \
		"run mmc_discover_partition;" \
		"mmc read ${kerneladdr} ${kernel_part_addr} ${kernel_part_size};" \
		"setenv bootargs ${bootargs} root=/dev/mmcblk${mmcdev}p${rootfs_partition} rootwait; " \
		"bootm ${kerneladdr}${boot_conf}; \0"
#endif /* CONFIG_MTK_ANDROID */

#define CONFIG_EXTRA_ENV_SETTINGS \
	"kerneladdr=0x4A000000\0" \
	MMCBOOT \
	"bootcmd=run mmcboot\0"

#endif
