blob: 0e3adfdbc88a83802bcd9c429cc3a9729ff3d06d [file] [log] [blame]
/*******************************************************************************
Copyright (C) Marvell International Ltd. and its affiliates
This software file (the "File") is owned and distributed by Marvell
International Ltd. and/or its affiliates ("Marvell") under the following
alternative licensing terms. Once you have made an election to distribute the
File under one of the following license alternatives, please (i) delete this
introductory statement regarding license alternatives, (ii) delete the two
license alternatives that you have not elected to use and (iii) preserve the
Marvell copyright notice above.
********************************************************************************
Marvell Commercial License Option
If you received this File from Marvell and you have entered into a commercial
license agreement (a "Commercial License") with Marvell, the File is licensed
to you under the terms of the applicable Commercial License.
********************************************************************************
Marvell GPL License Option
If you received this File from Marvell, you may opt to use, redistribute and/or
modify this File in accordance with the terms and conditions of the General
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
available along with the File in the license.txt file or by writing to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
DISCLAIMED. The GPL License provides additional details about this warranty
disclaimer.
********************************************************************************
Marvell BSD License Option
If you received this File from Marvell, you may opt to use, redistribute and/or
modify this File under the following licensing terms.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of Marvell nor the names of its contributors may be
used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************/
#ifndef _INC_DOIMAGE_H
#define _INC_DOIMAGE_H
#include <sys/types.h>
/* use the same version as in "bootrom.inc" file */
#define VERSION_NUMBER "1.19"
#define PRODUCT_SUPPORT "Marvell 88F6500 - KW2 (GPON)"
#define T_OPTION_MASK 0x1 /* image type */
#define D_OPTION_MASK 0x2 /* image destination */
#define E_OPTION_MASK 0x4 /* image execution address */
#define S_OPTION_MASK 0x8 /* image source */
#define R_OPTION_MASK 0x10 /* DRAM file */
#define C_OPTION_MASK 0x20 /* NAND ECC mode */
#define P_OPTION_MASK 0x40 /* NAND Page size */
#define M_OPTION_MASK 0x80 /* TWSI serial init file */
#define W_OPTION_MASK 0x100 /* HEX file width */
#define H_OPTION_MASK 0x200 /* Header mode */
#define X_OPTION_MASK 0x400 /* Pre padding */
#define Y_OPTION_MASK 0x800 /* Post padding */
#define J_OPTION_MASK 0x1000 /* JTAG Enabled */
#define B_OPTION_MASK 0x2000 /* Box ID */
#define Z_OPTION_MASK 0x4000 /* secure boot mode - private key */
#define F_OPTION_MASK 0x8000 /* Flash ID */
#define A_OPTION_MASK 0x10000 /* AES encryption */
#define G_OPTION_MASK 0x20000 /* binary file */
#define L_OPTION_MASK 0x80000 /* NAND block size (in 64K chunks) */
#define N_OPTION_MASK 0x100000 /* NAND cell technology MLC/SLC */
#define U_OPTION_MASK 0x200000 /* Restricted SOC - no L2 cache */
#ifndef O_BINARY /* should be defined on __WIN32__ */
#define O_BINARY 0
#endif
typedef enum
{
IMG_SATA,
IMG_UART,
IMG_FLASH,
IMG_BOOTROM,
IMG_NAND,
IMG_HEX,
IMG_BIN,
IMG_PEX,
IMG_I2C
} IMG_TYPE;
#define REGULAR_IMAGE(opt) \
(((opt)->image_type != IMG_BOOTROM) && \
((opt)->image_type != IMG_HEX) && \
((opt)->image_type != IMG_BIN))
typedef struct
{
IMG_TYPE img_type; /* image type */
char *img_name; /* image name string */
unsigned int img_opt; /* mandatory options for this image type */
} IMG_MAP;
typedef enum
{
IMG_FILE_INDX = 1,
HDR_FILE_INDX = 2
} FILE_IDX;
typedef enum
{
HDR_IMG_ONE_FILE = 1, /* Create one file with header and image */
HDR_IMG_TWO_FILES = 2, /* Create seperate header and image files */
HDR_ONLY = 3, /* Create only header */
IMG_ONLY = 4, /* Create only image */
} HEADER_MODE;
typedef struct
{
IMG_TYPE image_type;
char *fname_dram; /* DRAM init file for "register" header */
char *fname_twsi; /* TWSI serial init file */
char *fname_bin; /* binaru code file for "binary" header */
char *fname_prkey;/* RSA Private key file */
char *fname_aeskey;/* AES-128 key file */
u32 flags; /* user-defined flags */
u32 req_flags; /* mandatory flags */
u32 image_source;/* starting sector */
u32 image_dest; /* image destination */
u32 image_exec; /* image execution */
unsigned int hex_width; /* HEX file width */
unsigned int header_mode; /* Header file mode */
int pre_padding;
int post_padding;
int prepadding_size;
int postpadding_size;
unsigned int bytesToAlign;
unsigned int nandPageSize;
// unsigned int nandEccMode;
unsigned int nandBlkSize;
char nandCellTech;
u32 boxId;
u32 flashId;
u32 jtagDelay;
char *image_buf; /* image buffer for image pre-load */
u32 image_sz; /* total size of pre-loaded image buffer including paddings */
u32 img_gap; /* gap between header and image start point */
union
{
char *fname_arr[5];
struct
{
char *in;
char *out;
char *hdr_out;
char *romc;
char *romd;
} fname;
};
} USER_OPTIONS;
/* Function declaration */
void print_usage(void);
/* 32 bit checksum */
MV_U32 checksum32(void *start, MV_U32 len, MV_U32 csum);
MV_U8 checksum8(MV_U32 start, MV_U32 len, MV_U8 csum);
MV_U32 crc32(MV_U32 crc, volatile MV_U32 *buf, MV_U32 len);
#endif /* _INC_DOIMAGE_H */