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, 22*8af25352SZorro 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" 63b693f156SJason Zhu #define PART_SYSTEM "system" 64132e9ecaSDayao Ji #define PART_METADATA "metadata" 65132e9ecaSDayao Ji #define PART_USERDATA "userdata" 6648201c4cSJason Zhu #define PART_META "meta" 6706621a79SKever Yang 6806621a79SKever Yang struct blk_desc *rockchip_get_bootdev(void); 690ed06f16SJoseph Chen void rockchip_set_bootdev(struct blk_desc *desc); 70f61a997eSqiujian void board_run_recovery_wipe_data(void); 71d04ada6cSJoseph Chen void setup_download_mode(void); 72706ec1d4SJoseph Chen int get_bcb_recovery_msg(void); 73bc4ccd53SJoseph Chen int rockchip_read_dtb_file(void *fdt_addr); 7425a706d2SJoseph Chen int rockchip_ram_read_dtb_file(void *img, void *fdt_addr); 7557be1825SJoseph Chen int init_kernel_dtb(void); 76e9f9d90dSJoseph Chen int fit_write_trusty_rollback_index(u32 trusty_index); 779f68846bSJoseph Chen int arch_fpga_init(void); 78f61a997eSqiujian 7957504d99SJoseph Chen #ifndef CONFIG_SPL_BUILD 8057504d99SJoseph Chen int rockchip_get_boot_mode(void); 8157504d99SJoseph Chen #else 8257504d99SJoseph Chen int rockchip_get_boot_mode(struct blk_desc *dev_desc, u32 bcb_sector_offset); 8357504d99SJoseph Chen #endif 8406621a79SKever Yang #endif 85