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, 22b7195498SJoseph Chen BOOT_MODE_UNDEFINE, 2306621a79SKever Yang }; 2406621a79SKever Yang 25e72b9125SJoseph Chen struct bootloader_message { 26e72b9125SJoseph Chen char command[32]; 27e72b9125SJoseph Chen char status[32]; 28e72b9125SJoseph Chen char recovery[768]; 29e72b9125SJoseph Chen /* 30e72b9125SJoseph Chen * The 'recovery' field used to be 1024 bytes. It has only ever 31e72b9125SJoseph Chen * been used to store the recovery command line, so 768 bytes 32e72b9125SJoseph Chen * should be plenty. We carve off the last 256 bytes to store the 33e72b9125SJoseph Chen * stage string (for multistage packages) and possible future 34e72b9125SJoseph Chen * expansion. 35e72b9125SJoseph Chen */ 36e72b9125SJoseph Chen char stage[32]; 37e72b9125SJoseph Chen char slot_suffix[32]; 38e72b9125SJoseph Chen char reserved[192]; 39e72b9125SJoseph Chen }; 40e72b9125SJoseph Chen 41e72b9125SJoseph Chen struct rockchip_image { 42e72b9125SJoseph Chen uint32_t tag; 43e72b9125SJoseph Chen uint32_t size; 44e72b9125SJoseph Chen int8_t image[1]; 45e72b9125SJoseph Chen uint32_t crc; 46e72b9125SJoseph Chen }; 47e72b9125SJoseph Chen 48e72b9125SJoseph Chen #define RK_BLK_SIZE 512 49e72b9125SJoseph Chen #define TAG_KERNEL 0x4C4E524B 50e72b9125SJoseph Chen #define BCB_MESSAGE_BLK_OFFSET (16 * 1024 >> 9) 51e72b9125SJoseph Chen 52869c6dc2SJoseph Chen #define PART_UBOOT "uboot" 53869c6dc2SJoseph Chen #define PART_TRUST "trust" 5406621a79SKever Yang #define PART_MISC "misc" 555ae165daSJoseph Chen #define PART_RESOURCE "resource" 5606621a79SKever Yang #define PART_KERNEL "kernel" 5706621a79SKever Yang #define PART_BOOT "boot" 58745aeb1aSJoseph Chen #define PART_VENDOR_BOOT "vendor_boot" 5906621a79SKever Yang #define PART_RECOVERY "recovery" 60f8dbe861SJoseph Chen #define PART_DTBO "dtbo" 611d30bcc5SJoseph Chen #define PART_LOGO "logo" 62b693f156SJason Zhu #define PART_SYSTEM "system" 63132e9ecaSDayao Ji #define PART_METADATA "metadata" 64132e9ecaSDayao Ji #define PART_USERDATA "userdata" 6506621a79SKever Yang 6606621a79SKever Yang struct blk_desc *rockchip_get_bootdev(void); 670ed06f16SJoseph Chen void rockchip_set_bootdev(struct blk_desc *desc); 68f61a997eSqiujian void board_run_recovery_wipe_data(void); 69d04ada6cSJoseph Chen void setup_download_mode(void); 70706ec1d4SJoseph Chen int get_bcb_recovery_msg(void); 71bc4ccd53SJoseph Chen int rockchip_read_dtb_file(void *fdt_addr); 7257be1825SJoseph Chen int init_kernel_dtb(void); 73f61a997eSqiujian 74*57504d99SJoseph Chen #ifndef CONFIG_SPL_BUILD 75*57504d99SJoseph Chen int rockchip_get_boot_mode(void); 76*57504d99SJoseph Chen #else 77*57504d99SJoseph Chen int rockchip_get_boot_mode(struct blk_desc *dev_desc, u32 bcb_sector_offset); 78*57504d99SJoseph Chen #endif 7906621a79SKever Yang #endif 80