mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-24 21:54:01 +00:00
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>
This commit is contained in:
parent
a53d97ae85
commit
4bdb547978
2 changed files with 44 additions and 1 deletions
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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 */
|
||||
|
@ -91,6 +91,18 @@ struct main_hdr_v1 {
|
|||
uint8_t checksum; /* 1F */
|
||||
};
|
||||
|
||||
/*
|
||||
* 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)
|
||||
*/
|
||||
|
|
Loading…
Reference in a new issue