[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v2] ns16550: Add command line parsing adjustments
Add parsing options for reg_width and reg_shift in bootup command line parameters. This adds flexibility in setting register values for MMIO UART devices. Increase length of opt_com1 and opt_com2 buffer to accommodate more command line parameters. eg. com1=115200,8n1,0x3f8,4 (legacy IO) eg. com1=115200/3000000/4/2,8n1,0xfedc9000,4 (MMIO adjustments) Reviewed-by: Suravee Suthikulpanit <suravee.suthikulpanit@xxxxxxx> Signed-off-by: Swapnil Paratey <swapnil.paratey@xxxxxxx> --- Changed since v1: * Changed opt_com1 and opt_com2 array size to 64 (power of 2). * Added descriptions for reg_width and reg_shift in docs/misc/xen-command-line.markdown * Changed subject to ns16550 from 16550 for better tracking. --- docs/misc/xen-command-line.markdown | 11 ++++++++++- xen/drivers/char/ns16550.c | 20 +++++++++++++++++--- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/docs/misc/xen-command-line.markdown b/docs/misc/xen-command-line.markdown index 0138978..9ab7ead 100644 --- a/docs/misc/xen-command-line.markdown +++ b/docs/misc/xen-command-line.markdown @@ -291,7 +291,7 @@ Flag to indicate whether to probe for a CMOS Real Time Clock irrespective of ACPI indicating none to be there. ### com1,com2 -> `= <baud>[/<base-baud>][,[DPS][,[<io-base>|pci|amt][,[<irq>][,[<port-bdf>][,[<bridge-bdf>]]]]]]` +> `= <baud>[/[<base-baud>][/[<reg-width>][/[<reg-shift>]]]][,DPS[,<io-base>[,<irq>[,<port-bdf>[,<bridge-bdf>]]]]]` Both option `com1` and `com2` follow the same format. @@ -299,6 +299,15 @@ Both option `com1` and `com2` follow the same format. the bootloader or other earlier firmware has already set it up. * Optionally, the base baud rate (usually the highest baud rate the device can communicate at) can be specified. +* `<reg-width>` is the access size, or width, for programming + the UART device registers. Accepted values are 1 and 4 (bytes). + The UART device datasheet defines the register width to be used when + reading or writing the registers. This field is optional. + The default value is 1. +* `<reg-shift>` is the number of bits to shift the register offset value + for programming the UART device registers. The UART device datasheet + defines the register shift needed to access the registers properly. + This field is optional. The default value is 0. * `DPS` represents the number of data bits, the parity, and the number of stop bits. * `D` is an integer between 5 and 8 for the number of data bits. diff --git a/xen/drivers/char/ns16550.c b/xen/drivers/char/ns16550.c index 1da103a..0e80bce 100644 --- a/xen/drivers/char/ns16550.c +++ b/xen/drivers/char/ns16550.c @@ -33,14 +33,14 @@ /* * Configure serial port with a string: - * <baud>[/<base_baud>][,DPS[,<io-base>[,<irq>[,<port-bdf>[,<bridge-bdf>]]]]]. + * <baud>[/[<base-baud>][/[<reg-width>][/[<reg-shift>]]]][,DPS[,<io-base>[,<irq>[,<port-bdf>[,<bridge-bdf>]]]]]. * The tail of the string can be omitted if platform defaults are sufficient. * If the baud rate is pre-configured, perhaps by a bootloader, then 'auto' * can be specified in place of a numeric baud rate. Polled mode is specified * by requesting irq 0. */ -static char __initdata opt_com1[30] = ""; -static char __initdata opt_com2[30] = ""; +static char __initdata opt_com1[64] = ""; +static char __initdata opt_com2[64] = ""; string_param("com1", opt_com1); string_param("com2", opt_com2); @@ -1118,6 +1118,20 @@ static void __init ns16550_parse_port_config( uart->clock_hz = simple_strtoul(conf, &conf, 0) << 4; } + if ( *conf == '/' ) + { + conf++; + if ( *conf != '/' && *conf != ',' ) + uart->reg_width = simple_strtol(conf, &conf, 0); + } + + if ( *conf == '/' ) + { + conf++; + if ( *conf != '/' && *conf != ',' ) + uart->reg_shift = simple_strtol(conf, &conf, 0); + } + if ( *conf == ',' && *++conf != ',' ) { uart->data_bits = simple_strtoul(conf, &conf, 10); -- 1.9.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |