Re: [PATCH v3] serial: uartlite: Move out-of-range port-numbers into ULITE_NR_UARTS range
From: Michal Simek <hidden>
Date: 2021-11-23 12:11:40
On 11/23/21 00:14, Ruediger Willenberg wrote:
quoted hunk ↗ jump to hunk
Find free uart_port struct in range 0 <= id < ULITE_NR_UARTS when the device tree port-number property is outside that range. This happens when there are other UART types in the system because the Xilinx device tree generator numbers all UARTs consecutively; as a result, not as many Uartlites as specified by the SERIAL_UARTLITE_NR_UARTS parameter could be successfully added. Signed-off-by: Ruediger Willenberg <redacted> --- Changes in v3: - corrected indentation to strict formatting Changes in v2: - give KERN_NOTICE when changing the id, with reference to the requested port-number drivers/tty/serial/uartlite.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-)diff --git a/drivers/tty/serial/uartlite.c b/drivers/tty/serial/uartlite.c index d3d9566e5dbd..51e3f8086d31 100644 --- a/drivers/tty/serial/uartlite.c +++ b/drivers/tty/serial/uartlite.c@@ -631,15 +631,17 @@ static int ulite_assign(struct device *dev, int id, u32 base, int irq, { struct uart_port *port; int rc; + int oor_id = -1; - /* if id = -1; then scan for a free id and use that */ - if (id < 0) { + /* if id -1 or out of range; then scan for a free id and use that */ + if (id < 0 || id >= ULITE_NR_UARTS) { + oor_id = id; for (id = 0; id < ULITE_NR_UARTS; id++) if (ulite_ports[id].mapbase == 0) break; } - if (id < 0 || id >= ULITE_NR_UARTS) { - dev_err(dev, "%s%i too large\n", ULITE_NAME, id); + if (id == ULITE_NR_UARTS) { + dev_err(dev, "maximum number of %s assigned\n", ULITE_NAME); return -EINVAL; }@@ -677,6 +679,11 @@ static int ulite_assign(struct device *dev, int id, u32 base, int irq, return rc; } + if (oor_id >= 0) + dev_notice(dev, + "assigned uartlite with device tree port-number=<%i> to %s%i\n", + oor_id, ULITE_NAME, id); + return 0; }
I will wait for Greg to comment it first. https://lore.kernel.org/all/337b2e18-ddc9-5540-1c5b-b47f0517c240@xilinx.com/ (local) As I said before this patch can cause issues when you will have mix of serial IPs with and without serial alias that IP without serial alias can take ID to IP which has it. (All ports without optional port-number property). Thanks, Michal