1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * (C) Copyright 2017 Rockchip Electronics Co., Ltd 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+ 5*4882a593Smuzhiyun */ 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #ifndef __BOOT_ROCKCHIP_H_ 8*4882a593Smuzhiyun #define __BOOT_ROCKCHIP_H_ 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun /* This is a copy from Android boot loader */ 11*4882a593Smuzhiyun enum _boot_mode { 12*4882a593Smuzhiyun BOOT_MODE_NORMAL = 0, 13*4882a593Smuzhiyun BOOT_MODE_RECOVERY, 14*4882a593Smuzhiyun BOOT_MODE_BOOTLOADER, /* Android: Fastboot mode */ 15*4882a593Smuzhiyun BOOT_MODE_LOADER, /* Rockchip: Rockusb download mode */ 16*4882a593Smuzhiyun BOOT_MODE_CHARGING, 17*4882a593Smuzhiyun BOOT_MODE_UMS, 18*4882a593Smuzhiyun BOOT_MODE_BROM_DOWNLOAD, 19*4882a593Smuzhiyun BOOT_MODE_PANIC, 20*4882a593Smuzhiyun BOOT_MODE_WATCHDOG, 21*4882a593Smuzhiyun BOOT_MODE_DFU, 22*4882a593Smuzhiyun BOOT_MODE_QUIESCENT, 23*4882a593Smuzhiyun BOOT_MODE_UNDEFINE, 24*4882a593Smuzhiyun }; 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun struct bootloader_message { 27*4882a593Smuzhiyun char command[32]; 28*4882a593Smuzhiyun char status[32]; 29*4882a593Smuzhiyun char recovery[768]; 30*4882a593Smuzhiyun /* 31*4882a593Smuzhiyun * The 'recovery' field used to be 1024 bytes. It has only ever 32*4882a593Smuzhiyun * been used to store the recovery command line, so 768 bytes 33*4882a593Smuzhiyun * should be plenty. We carve off the last 256 bytes to store the 34*4882a593Smuzhiyun * stage string (for multistage packages) and possible future 35*4882a593Smuzhiyun * expansion. 36*4882a593Smuzhiyun */ 37*4882a593Smuzhiyun char stage[32]; 38*4882a593Smuzhiyun char slot_suffix[32]; 39*4882a593Smuzhiyun char reserved[192]; 40*4882a593Smuzhiyun }; 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun struct rockchip_image { 43*4882a593Smuzhiyun uint32_t tag; 44*4882a593Smuzhiyun uint32_t size; 45*4882a593Smuzhiyun int8_t image[1]; 46*4882a593Smuzhiyun uint32_t crc; 47*4882a593Smuzhiyun }; 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun #define RK_BLK_SIZE 512 50*4882a593Smuzhiyun #define TAG_KERNEL 0x4C4E524B 51*4882a593Smuzhiyun #define BCB_MESSAGE_BLK_OFFSET (16 * 1024 >> 9) 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun #define PART_UBOOT "uboot" 54*4882a593Smuzhiyun #define PART_TRUST "trust" 55*4882a593Smuzhiyun #define PART_MISC "misc" 56*4882a593Smuzhiyun #define PART_RESOURCE "resource" 57*4882a593Smuzhiyun #define PART_KERNEL "kernel" 58*4882a593Smuzhiyun #define PART_BOOT "boot" 59*4882a593Smuzhiyun #define PART_VENDOR_BOOT "vendor_boot" 60*4882a593Smuzhiyun #define PART_RECOVERY "recovery" 61*4882a593Smuzhiyun #define PART_DTBO "dtbo" 62*4882a593Smuzhiyun #define PART_LOGO "logo" 63*4882a593Smuzhiyun #define PART_SYSTEM "system" 64*4882a593Smuzhiyun #define PART_METADATA "metadata" 65*4882a593Smuzhiyun #define PART_USERDATA "userdata" 66*4882a593Smuzhiyun #define PART_META "meta" 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun struct blk_desc *rockchip_get_bootdev(void); 69*4882a593Smuzhiyun void rockchip_set_bootdev(struct blk_desc *desc); 70*4882a593Smuzhiyun void board_run_recovery_wipe_data(void); 71*4882a593Smuzhiyun void setup_download_mode(void); 72*4882a593Smuzhiyun int get_bcb_recovery_msg(void); 73*4882a593Smuzhiyun int rockchip_read_dtb_file(void *fdt_addr); 74*4882a593Smuzhiyun int rockchip_ram_read_dtb_file(void *img, void *fdt_addr); 75*4882a593Smuzhiyun int init_kernel_dtb(void); 76*4882a593Smuzhiyun int fit_write_trusty_rollback_index(u32 trusty_index); 77*4882a593Smuzhiyun int arch_fpga_init(void); 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun #ifndef CONFIG_SPL_BUILD 80*4882a593Smuzhiyun int rockchip_get_boot_mode(void); 81*4882a593Smuzhiyun #else 82*4882a593Smuzhiyun int rockchip_get_boot_mode(struct blk_desc *dev_desc, u32 bcb_sector_offset); 83*4882a593Smuzhiyun #endif 84*4882a593Smuzhiyun #endif 85