Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 | /* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright (C) 2020 Marvell International Ltd. */ /* * Bootloader definitions that are shared with other programs */ #ifndef __CVMX_BOOTLOADER__ #define __CVMX_BOOTLOADER__ /* * The bootloader_header_t structure defines the header that is present * at the start of binary u-boot images. This header is used to locate * the bootloader image in NAND, and also to allow verification of images * for normal NOR booting. This structure is placed at the beginning of a * bootloader binary image, and remains in the executable code. */ #define BOOTLOADER_HEADER_MAGIC 0x424f4f54 /* "BOOT" in ASCII */ #define BOOTLOADER_HEADER_COMMENT_LEN 64 #define BOOTLOADER_HEADER_VERSION_LEN 64 /* limited by the space to the next exception handler */ #define BOOTLOADER_HEADER_MAX_SIZE 0x200 #define BOOTLOADER_HEADER_CURRENT_MAJOR_REV 1 #define BOOTLOADER_HEADER_CURRENT_MINOR_REV 2 /* * Revision history * 1.1 Initial released revision. (SDK 1.9) * 1.2 TLB based relocatable image (SDK 2.0) */ #ifndef __ASSEMBLY__ struct bootloader_header { uint32_t jump_instr; /* * Jump to executable code following the * header. This allows this header to be * (and remain) part of the executable image) */ uint32_t nop_instr; /* Must be 0x0 */ uint32_t magic; /* Magic number to identify header */ uint32_t hcrc; /* CRC of all of header excluding this field */ uint16_t hlen; /* Length of header in bytes */ uint16_t maj_rev; /* Major revision */ uint16_t min_rev; /* Minor revision */ uint16_t board_type; /* Board type that the image is for */ uint32_t dlen; /* Length of data (following header) in bytes */ uint32_t dcrc; /* CRC of data */ uint64_t address; /* Mips virtual address */ uint32_t flags; uint16_t image_type; /* Defined in bootloader_image_t enum */ uint16_t resv0; /* pad */ uint32_t reserved1; uint32_t reserved2; uint32_t reserved3; uint32_t reserved4; /* Optional, for descriptive purposes */ char comment_string[BOOTLOADER_HEADER_COMMENT_LEN]; /* Optional, for descriptive purposes */ char version_string[BOOTLOADER_HEADER_VERSION_LEN]; } __packed; /* Defines for flag field */ #define BL_HEADER_FLAG_FAILSAFE 1 enum bootloader_image { BL_HEADER_IMAGE_UNKNOWN = 0x0, BL_HEADER_IMAGE_STAGE2, /* Binary bootloader stage2 image */ BL_HEADER_IMAGE_STAGE3, /* Binary bootloader stage3 image */ BL_HEADER_IMAGE_NOR, /* Binary bootloader for NOR boot */ BL_HEADER_IMAGE_PCIBOOT, /* Binary bootloader for PCI boot */ BL_HEADER_IMAGE_UBOOT_ENV, /* Environment for u-boot */ /* Bootloader before U-Boot (stage 1/1.5) */ BL_HEADER_IMAGE_PRE_UBOOT, BL_HEADER_IMAGE_STAGE1, /* NOR stage 1 bootloader */ BL_HEADER_IMAGE_MAX, /* Range for customer private use. Will not be used by Cavium Inc. */ BL_HEADER_IMAGE_CUST_RESERVED_MIN = 0x1000, BL_HEADER_IMAGE_CUST_RESERVED_MAX = 0x1fff }; #endif /* __ASSEMBLY__ */ /* * Maximum address searched for NAND boot images and environments. * This is used by stage1 and stage2. */ #define MAX_NAND_SEARCH_ADDR 0x800000 /* Maximum address to look for start of normal bootloader */ #define MAX_NOR_SEARCH_ADDR 0x400000 /* * Defines for RAM based environment set by the host or the previous * bootloader in a chain boot configuration. */ #define U_BOOT_RAM_ENV_ADDR 0x1000 #define U_BOOT_RAM_ENV_SIZE 0x1000 #define U_BOOT_RAM_ENV_CRC_SIZE 0x4 #define U_BOOT_RAM_ENV_ADDR_2 (U_BOOT_RAM_ENV_ADDR + U_BOOT_RAM_ENV_SIZE) /* Address of environment in L2 cache if booted from cache */ #define U_BOOT_CACHE_ENV_ADDR 0x000ff000 /* Size of environment in L2 cache */ #define U_BOOT_CACHE_ENV_SIZE 0x1000 /* Board numbers and names */ /* Type defines for board and chip types */ enum cvmx_board_types_enum { CVMX_BOARD_TYPE_NULL = 0, CVMX_BOARD_TYPE_SIM = 1, /* Special 'generic' board type, supports many boards */ CVMX_BOARD_TYPE_GENERIC = 28, CVMX_BOARD_TYPE_EBB7304 = 76, CVMX_BOARD_TYPE_MAX, /* NOTE: 256-257 are being used by a customer. */ /* * The range from CVMX_BOARD_TYPE_MAX to * CVMX_BOARD_TYPE_CUST_DEFINED_MIN is reserved * for future SDK use. */ /* * Set aside a range for customer boards. These numbers are managed * by Cavium. */ CVMX_BOARD_TYPE_CUST_DEFINED_MIN = 10000, CVMX_BOARD_TYPE_CUST_DEFINED_MAX = 20000, /* * Set aside a range for customer private use. The SDK won't * use any numbers in this range. */ CVMX_BOARD_TYPE_CUST_PRIVATE_MIN = 20001, CVMX_BOARD_TYPE_CUST_PRIVATE_MAX = 30000, }; /* Functions to return string based on type */ /* Skip CVMX_BOARD_TYPE_ */ #define ENUM_BRD_TYPE_CASE(x) case x: return(#x + 16) static inline const char *cvmx_board_type_to_string(enum cvmx_board_types_enum type) { switch (type) { ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NULL); ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_SIM); ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_GENERIC); ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBB7304); ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_MAX); /* Customer boards listed here */ ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_DEFINED_MIN); ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_DEFINED_MAX); /* Customer private range */ ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_PRIVATE_MIN); ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_PRIVATE_MAX); } return "Unsupported Board"; } #endif /* __CVMX_BOOTLOADER__ */ |