tools/kwbimage: add BAUDRATE option
PATCH 1/1 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.
---
I don't have a kirkwood datasheet handy so I've only made this part of the v1 image generation. I can add it to v0 if someone can confirm that it's supported.
tools/kwbimage.c | 31 +++++++++++++++++++++++++++++++ tools/kwbimage.h | 14 +++++++++++++- 2 files changed, 44 insertions(+), 1 deletion(-)
tools/kwbimage.c +31 -0
@@ -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); }
tools/kwbimage.h +13 -1
@@ -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 {
Signature · 1 line
2.10.2
PATCH 1/1 tools/kwbimage: add BAUDRATE option
Quoted 8 lines · Chris Packham
Offset
0x18in 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 <[email protected]>
Applied to u-boot-marvell/master.
Thanks,
Stefan