blob: 2d7f87e5734b3541c5dd01233bc42b2e275381dd [file] [log] [blame]
/* 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
#define ANDROID_BOOT_FASTBOOT \
"fastboot usb 0;"
/*
* checks if we should boot into 'fastboot' mode
*
* set androidboot_fastboot to 1 if we should boot into 'fastboot'
*/
#define ANDROID_TEST_FASTBOOT \
"if bcb load ${mmcdev} misc; then " \
"if bcb test command = bootonce-bootloader ; then " \
"bcb clear command; bcb store;" \
"setenv androidboot_fastboot 1;" \
"fi;" \
"fi;" \
/*
* 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_fastboot=0\0" \
"androidboot_recovery=0\0" \
"android_ab_slot=\0" \
"mmcboot=" \
ANDROID_AB_GET_SLOT \
ANDROID_TEST_FASTBOOT \
ANDROID_TEST_RECOVERY \
"if test \"${androidboot_fastboot}\" -eq 1; then " \
"echo Android: booting into fastboot;" \
ANDROID_BOOT_FASTBOOT \
"fi;" \
"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