106621a79SKever Yang /* 206621a79SKever Yang * (C) Copyright 2017 Rockchip Electronics Co., Ltd 306621a79SKever Yang * 406621a79SKever Yang * SPDX-License-Identifier: GPL-2.0+ 506621a79SKever Yang */ 606621a79SKever Yang 706621a79SKever Yang #ifndef __BOOT_ROCKCHIP_H_ 806621a79SKever Yang #define __BOOT_ROCKCHIP_H_ 906621a79SKever Yang 1006621a79SKever Yang /* This is a copy from Android boot loader */ 1106621a79SKever Yang enum _boot_mode { 1206621a79SKever Yang BOOT_MODE_NORMAL = 0, 1306621a79SKever Yang BOOT_MODE_RECOVERY, 14b7195498SJoseph Chen BOOT_MODE_BOOTLOADER, /* Android: Fastboot mode */ 15b7195498SJoseph Chen BOOT_MODE_LOADER, /* Rockchip: Rockusb download mode */ 16b7195498SJoseph Chen BOOT_MODE_CHARGING, 17b7195498SJoseph Chen BOOT_MODE_UMS, 18b7195498SJoseph Chen BOOT_MODE_BROM_DOWNLOAD, 190bc19640SJoseph Chen BOOT_MODE_PANIC, 200bc19640SJoseph Chen BOOT_MODE_WATCHDOG, 210efe6414STony Xu BOOT_MODE_DFU, 228af25352SZorro Liu BOOT_MODE_QUIESCENT, 23b7195498SJoseph Chen BOOT_MODE_UNDEFINE, 2406621a79SKever Yang }; 2506621a79SKever Yang 26e72b9125SJoseph Chen struct bootloader_message { 27e72b9125SJoseph Chen char command[32]; 28e72b9125SJoseph Chen char status[32]; 29e72b9125SJoseph Chen char recovery[768]; 30e72b9125SJoseph Chen /* 31e72b9125SJoseph Chen * The 'recovery' field used to be 1024 bytes. It has only ever 32e72b9125SJoseph Chen * been used to store the recovery command line, so 768 bytes 33e72b9125SJoseph Chen * should be plenty. We carve off the last 256 bytes to store the 34e72b9125SJoseph Chen * stage string (for multistage packages) and possible future 35e72b9125SJoseph Chen * expansion. 36e72b9125SJoseph Chen */ 37e72b9125SJoseph Chen char stage[32]; 38e72b9125SJoseph Chen char slot_suffix[32]; 39e72b9125SJoseph Chen char reserved[192]; 40e72b9125SJoseph Chen }; 41e72b9125SJoseph Chen 42e72b9125SJoseph Chen struct rockchip_image { 43e72b9125SJoseph Chen uint32_t tag; 44e72b9125SJoseph Chen uint32_t size; 45e72b9125SJoseph Chen int8_t image[1]; 46e72b9125SJoseph Chen uint32_t crc; 47e72b9125SJoseph Chen }; 48e72b9125SJoseph Chen 49e72b9125SJoseph Chen #define RK_BLK_SIZE 512 50e72b9125SJoseph Chen #define TAG_KERNEL 0x4C4E524B 51e72b9125SJoseph Chen #define BCB_MESSAGE_BLK_OFFSET (16 * 1024 >> 9) 52e72b9125SJoseph Chen 53869c6dc2SJoseph Chen #define PART_UBOOT "uboot" 54869c6dc2SJoseph Chen #define PART_TRUST "trust" 5506621a79SKever Yang #define PART_MISC "misc" 565ae165daSJoseph Chen #define PART_RESOURCE "resource" 5706621a79SKever Yang #define PART_KERNEL "kernel" 5806621a79SKever Yang #define PART_BOOT "boot" 59745aeb1aSJoseph Chen #define PART_VENDOR_BOOT "vendor_boot" 6006621a79SKever Yang #define PART_RECOVERY "recovery" 61f8dbe861SJoseph Chen #define PART_DTBO "dtbo" 621d30bcc5SJoseph Chen #define PART_LOGO "logo" 63*f39aacfaSXuhui Lin #define PART_ROOTFS "rootfs" 64b693f156SJason Zhu #define PART_SYSTEM "system" 65132e9ecaSDayao Ji #define PART_METADATA "metadata" 66132e9ecaSDayao Ji #define PART_USERDATA "userdata" 6748201c4cSJason Zhu #define PART_META "meta" 6806621a79SKever Yang 6906621a79SKever Yang struct blk_desc *rockchip_get_bootdev(void); 700ed06f16SJoseph Chen void rockchip_set_bootdev(struct blk_desc *desc); 71f61a997eSqiujian void board_run_recovery_wipe_data(void); 72d04ada6cSJoseph Chen void setup_download_mode(void); 73706ec1d4SJoseph Chen int get_bcb_recovery_msg(void); 74bc4ccd53SJoseph Chen int rockchip_read_dtb_file(void *fdt_addr); 7525a706d2SJoseph Chen int rockchip_ram_read_dtb_file(void *img, void *fdt_addr); 7657be1825SJoseph Chen int init_kernel_dtb(void); 77e9f9d90dSJoseph Chen int fit_write_trusty_rollback_index(u32 trusty_index); 789f68846bSJoseph Chen int arch_fpga_init(void); 79f61a997eSqiujian 8057504d99SJoseph Chen #ifndef CONFIG_SPL_BUILD 8157504d99SJoseph Chen int rockchip_get_boot_mode(void); 8257504d99SJoseph Chen #else 8357504d99SJoseph Chen int rockchip_get_boot_mode(struct blk_desc *dev_desc, u32 bcb_sector_offset); 8457504d99SJoseph Chen #endif 8506621a79SKever Yang #endif 86