1210284Sjmallett/***********************license start*************** 2232812Sjmallett * Copyright (c) 2003-2010 Cavium Inc. (support@cavium.com). All rights 3215990Sjmallett * reserved. 4210284Sjmallett * 5210284Sjmallett * 6215990Sjmallett * Redistribution and use in source and binary forms, with or without 7215990Sjmallett * modification, are permitted provided that the following conditions are 8215990Sjmallett * met: 9210284Sjmallett * 10215990Sjmallett * * Redistributions of source code must retain the above copyright 11215990Sjmallett * notice, this list of conditions and the following disclaimer. 12210284Sjmallett * 13215990Sjmallett * * Redistributions in binary form must reproduce the above 14215990Sjmallett * copyright notice, this list of conditions and the following 15215990Sjmallett * disclaimer in the documentation and/or other materials provided 16215990Sjmallett * with the distribution. 17215990Sjmallett 18232812Sjmallett * * Neither the name of Cavium Inc. nor the names of 19215990Sjmallett * its contributors may be used to endorse or promote products 20215990Sjmallett * derived from this software without specific prior written 21215990Sjmallett * permission. 22215990Sjmallett 23215990Sjmallett * This Software, including technical data, may be subject to U.S. export control 24215990Sjmallett * laws, including the U.S. Export Administration Act and its associated 25215990Sjmallett * regulations, and may be subject to export or import regulations in other 26215990Sjmallett * countries. 27215990Sjmallett 28215990Sjmallett * TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS" 29232812Sjmallett * AND WITH ALL FAULTS AND CAVIUM INC. MAKES NO PROMISES, REPRESENTATIONS OR 30215990Sjmallett * WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH RESPECT TO 31215990Sjmallett * THE SOFTWARE, INCLUDING ITS CONDITION, ITS CONFORMITY TO ANY REPRESENTATION OR 32215990Sjmallett * DESCRIPTION, OR THE EXISTENCE OF ANY LATENT OR PATENT DEFECTS, AND CAVIUM 33215990Sjmallett * SPECIFICALLY DISCLAIMS ALL IMPLIED (IF ANY) WARRANTIES OF TITLE, 34215990Sjmallett * MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, LACK OF 35215990Sjmallett * VIRUSES, ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR 36215990Sjmallett * CORRESPONDENCE TO DESCRIPTION. THE ENTIRE RISK ARISING OUT OF USE OR 37215990Sjmallett * PERFORMANCE OF THE SOFTWARE LIES WITH YOU. 38210284Sjmallett ***********************license end**************************************/ 39210284Sjmallett 40210284Sjmallett 41210284Sjmallett 42215990Sjmallett 43210284Sjmallett#ifndef __CVMX_BOOTLOADER__ 44210284Sjmallett#define __CVMX_BOOTLOADER__ 45210284Sjmallett 46210284Sjmallett 47210284Sjmallett 48210284Sjmallett/** 49210284Sjmallett * @file 50210284Sjmallett * 51210284Sjmallett * Bootloader definitions that are shared with other programs 52210284Sjmallett * 53232812Sjmallett * <hr>$Revision: 70030 $<hr> 54210284Sjmallett */ 55210284Sjmallett 56210284Sjmallett 57210284Sjmallett/* The bootloader_header_t structure defines the header that is present 58210284Sjmallett** at the start of binary u-boot images. This header is used to locate the bootloader 59210284Sjmallett** image in NAND, and also to allow verification of images for normal NOR booting. 60210284Sjmallett** This structure is placed at the beginning of a bootloader binary image, and remains 61210284Sjmallett** in the executable code. 62210284Sjmallett*/ 63210284Sjmallett#define BOOTLOADER_HEADER_MAGIC 0x424f4f54 /* "BOOT" in ASCII */ 64210284Sjmallett 65210284Sjmallett#define BOOTLOADER_HEADER_COMMENT_LEN 64 66210284Sjmallett#define BOOTLOADER_HEADER_VERSION_LEN 64 67210284Sjmallett#define BOOTLOADER_HEADER_MAX_SIZE 0x200 /* limited by the space to the next exception handler */ 68210284Sjmallett 69210284Sjmallett#define BOOTLOADER_HEADER_CURRENT_MAJOR_REV 1 70215990Sjmallett#define BOOTLOADER_HEADER_CURRENT_MINOR_REV 2 71215990Sjmallett/* Revision history 72215990Sjmallett* 1.1 Initial released revision. (SDK 1.9) 73215990Sjmallett* 1.2 TLB based relocatable image (SDK 2.0) 74215990Sjmallett* 75215990Sjmallett* 76215990Sjmallett*/ 77210284Sjmallett 78210284Sjmallett/* offsets to struct bootloader_header fields for assembly use */ 79215990Sjmallett#define GOT_ADDRESS_OFFSET 48 80210284Sjmallett 81215990Sjmallett#define LOOKUP_STEP (64*1024) 82210284Sjmallett 83210284Sjmallett#ifndef __ASSEMBLY__ 84210284Sjmalletttypedef struct bootloader_header 85210284Sjmallett{ 86210284Sjmallett uint32_t jump_instr; /* Jump to executable code following the 87210284Sjmallett ** header. This allows this header to 88210284Sjmallett ** be (and remain) part of the executable image) 89210284Sjmallett */ 90210284Sjmallett uint32_t nop_instr; /* Must be 0x0 */ 91210284Sjmallett uint32_t magic; /* Magic number to identify header */ 92215990Sjmallett uint32_t hcrc; /* CRC of all of header excluding this field */ 93210284Sjmallett 94210284Sjmallett uint16_t hlen; /* Length of header in bytes */ 95210284Sjmallett uint16_t maj_rev; /* Major revision */ 96210284Sjmallett uint16_t min_rev; /* Minor revision */ 97210284Sjmallett uint16_t board_type; /* Board type that the image is for */ 98210284Sjmallett 99210284Sjmallett uint32_t dlen; /* Length of data (immediately following header) in bytes */ 100210284Sjmallett uint32_t dcrc; /* CRC of data */ 101210284Sjmallett uint64_t address; /* Mips virtual address */ 102210284Sjmallett uint32_t flags; 103210284Sjmallett uint16_t image_type; /* Defined in bootloader_image_t enum */ 104210284Sjmallett uint16_t resv0; /* pad */ 105210284Sjmallett 106215990Sjmallett uint32_t reserved1; 107215990Sjmallett uint32_t reserved2; 108215990Sjmallett uint32_t reserved3; 109215990Sjmallett uint32_t reserved4; 110215990Sjmallett 111210284Sjmallett char comment_string[BOOTLOADER_HEADER_COMMENT_LEN]; /* Optional, for descriptive purposes */ 112210284Sjmallett char version_string[BOOTLOADER_HEADER_VERSION_LEN]; /* Optional, for descriptive purposes */ 113210284Sjmallett} __attribute__((packed)) bootloader_header_t; 114210284Sjmallett 115210284Sjmallett 116210284Sjmallett 117210284Sjmallett/* Defines for flag field */ 118210284Sjmallett#define BL_HEADER_FLAG_FAILSAFE (1) 119210284Sjmallett 120210284Sjmallett 121210284Sjmalletttypedef enum 122210284Sjmallett{ 123215990Sjmallett BL_HEADER_IMAGE_UNKNOWN = 0x0, 124210284Sjmallett BL_HEADER_IMAGE_STAGE2, /* Binary bootloader stage2 image (NAND boot) */ 125210284Sjmallett BL_HEADER_IMAGE_STAGE3, /* Binary bootloader stage3 image (NAND boot)*/ 126210284Sjmallett BL_HEADER_IMAGE_NOR, /* Binary bootloader for NOR boot */ 127210284Sjmallett BL_HEADER_IMAGE_PCIBOOT, /* Binary bootloader for PCI boot */ 128210284Sjmallett BL_HEADER_IMAGE_UBOOT_ENV, /* Environment for u-boot */ 129210284Sjmallett BL_HEADER_IMAGE_MAX, 130232812Sjmallett /* Range for customer private use. Will not be used by Cavium Inc. */ 131210284Sjmallett BL_HEADER_IMAGE_CUST_RESERVED_MIN = 0x1000, 132232812Sjmallett BL_HEADER_IMAGE_CUST_RESERVED_MAX = 0x1fff 133210284Sjmallett} bootloader_image_t; 134210284Sjmallett 135210284Sjmallett#endif /* __ASSEMBLY__ */ 136210284Sjmallett 137210284Sjmallett/* Maximum address searched for NAND boot images and environments. This is used 138210284Sjmallett** by stage1 and stage2. */ 139210284Sjmallett#define MAX_NAND_SEARCH_ADDR 0x400000 140210284Sjmallett 141215990Sjmallett/* Maximum address to look for start of normal bootloader */ 142232812Sjmallett#define MAX_NOR_SEARCH_ADDR 0x200000 143210284Sjmallett 144210284Sjmallett/* Defines for RAM based environment set by the host or the previous bootloader 145210284Sjmallett** in a chain boot configuration. */ 146210284Sjmallett 147210284Sjmallett#define U_BOOT_RAM_ENV_ADDR (0x1000) 148210284Sjmallett#define U_BOOT_RAM_ENV_SIZE (0x1000) 149210284Sjmallett#define U_BOOT_RAM_ENV_CRC_SIZE (0x4) 150232812Sjmallett#define U_BOOT_RAM_ENV_ADDR_2 (U_BOOT_RAM_ENV_ADDR + U_BOOT_RAM_ENV_SIZE) 151210284Sjmallett 152210284Sjmallett#endif /* __CVMX_BOOTLOADER__ */ 153