diff options
author | Chris Packham <judge.packham@gmail.com> | 2016-11-09 22:07:45 +1300 |
---|---|---|
committer | Stefan Roese <sr@denx.de> | 2016-12-01 09:10:43 +0100 |
commit | 4bdb547978a289dc33be9ba72dbb0e861b4aa31b (patch) | |
tree | 1af8cc484f67f2a53ed716b7e5bafeb823bd7a21 /tools | |
parent | a53d97ae851f6ddd2cb3dbb9cad63f4c3997f542 (diff) | |
download | u-boot-4bdb547978a289dc33be9ba72dbb0e861b4aa31b.tar.gz |
tools/kwbimage: add BAUDRATE option
Offset 0x18 in some Marvell datasheets this field is redacted as
"reserved". This offset is actually a set of options and bits 2:0 allow
the selection of the UART baudrate.
Allow a BAUDRATE option to set the UART baudrate for any messages coming
from the BootROM firmware.
Signed-off-by: Chris Packham <judge.packham@gmail.com>
Signed-off-by: Stefan Roese <sr@denx.de>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/kwbimage.c | 31 | ||||
-rw-r--r-- | tools/kwbimage.h | 14 |
2 files changed, 44 insertions, 1 deletions
diff --git a/tools/kwbimage.c b/tools/kwbimage.c index 369aba7bca..ad182c5c5d 100644 --- a/tools/kwbimage.c +++ b/tools/kwbimage.c @@ -68,6 +68,7 @@ struct image_cfg_element { IMAGE_CFG_BINARY, IMAGE_CFG_PAYLOAD, IMAGE_CFG_DATA, + IMAGE_CFG_BAUDRATE, } type; union { unsigned int version; @@ -85,6 +86,7 @@ struct image_cfg_element { unsigned int nandeccmode; unsigned int nandpagesz; struct ext_hdr_v0_reg regdata; + unsigned int baudrate; }; }; @@ -195,6 +197,28 @@ static uint32_t image_checksum32(void *start, uint32_t len) return csum; } +static uint8_t baudrate_to_option(unsigned int baudrate) +{ + switch (baudrate) { + case 2400: + return MAIN_HDR_V1_OPT_BAUD_2400; + case 4800: + return MAIN_HDR_V1_OPT_BAUD_4800; + case 9600: + return MAIN_HDR_V1_OPT_BAUD_9600; + case 19200: + return MAIN_HDR_V1_OPT_BAUD_19200; + case 38400: + return MAIN_HDR_V1_OPT_BAUD_38400; + case 57600: + return MAIN_HDR_V1_OPT_BAUD_57600; + case 115200: + return MAIN_HDR_V1_OPT_BAUD_115200; + default: + return MAIN_HDR_V1_OPT_BAUD_DEFAULT; + } +} + static void *image_create_v0(size_t *imagesz, struct image_tool_params *params, int payloadsz) { @@ -398,6 +422,9 @@ static void *image_create_v1(size_t *imagesz, struct image_tool_params *params, e = image_find_option(IMAGE_CFG_NAND_BADBLK_LOCATION); if (e) main_hdr->nandbadblklocation = e->nandbadblklocation; + e = image_find_option(IMAGE_CFG_BAUDRATE); + if (e) + main_hdr->options = baudrate_to_option(e->baudrate); binarye = image_find_option(IMAGE_CFG_BINARY); if (binarye) { @@ -548,6 +575,10 @@ static int image_create_config_parse_oneline(char *line, el->type = IMAGE_CFG_DATA; el->regdata.raddr = strtoul(value1, NULL, 16); el->regdata.rdata = strtoul(value2, NULL, 16); + } else if (!strcmp(keyword, "BAUDRATE")) { + char *value = strtok_r(NULL, deliminiters, &saveptr); + el->type = IMAGE_CFG_BAUDRATE; + el->baudrate = strtoul(value, NULL, 10); } else { fprintf(stderr, "Ignoring unknown line '%s'\n", line); } diff --git a/tools/kwbimage.h b/tools/kwbimage.h index e6e3d1d4f9..9b06004a0b 100644 --- a/tools/kwbimage.h +++ b/tools/kwbimage.h @@ -82,7 +82,7 @@ struct main_hdr_v1 { uint32_t srcaddr; /* C-F */ uint32_t destaddr; /* 10-13 */ uint32_t execaddr; /* 14-17 */ - uint8_t reserved3; /* 18 */ + uint8_t options; /* 18 */ uint8_t nandblocksize; /* 19 */ uint8_t nandbadblklocation; /* 1A */ uint8_t reserved4; /* 1B */ @@ -92,6 +92,18 @@ struct main_hdr_v1 { }; /* + * Main header options + */ +#define MAIN_HDR_V1_OPT_BAUD_DEFAULT 0 +#define MAIN_HDR_V1_OPT_BAUD_2400 0x1 +#define MAIN_HDR_V1_OPT_BAUD_4800 0x2 +#define MAIN_HDR_V1_OPT_BAUD_9600 0x3 +#define MAIN_HDR_V1_OPT_BAUD_19200 0x4 +#define MAIN_HDR_V1_OPT_BAUD_38400 0x5 +#define MAIN_HDR_V1_OPT_BAUD_57600 0x6 +#define MAIN_HDR_V1_OPT_BAUD_115200 0x7 + +/* * Header for the optional headers, version 1 (Armada 370, Armada XP) */ struct opt_hdr_v1 { |