Patch "serial: 8250: of: Check for CONFIG_SERIAL_8250_BCM7271" has been added to the 5.13-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    serial: 8250: of: Check for CONFIG_SERIAL_8250_BCM7271

to the 5.13-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     serial-8250-of-check-for-config_serial_8250_bcm7271.patch
and it can be found in the queue-5.13 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit b8fe7fcbdd4041e17e31428298f9755b1baaf344
Author: Jim Quinlan <jim2101024@xxxxxxxxx>
Date:   Fri Apr 23 11:32:04 2021 -0700

    serial: 8250: of: Check for CONFIG_SERIAL_8250_BCM7271
    
    [ Upstream commit f5b08386dee439c7a9e60ce0a4a4a705f3a60dff ]
    
    Our SoC's have always had a NS16650A UART core and older SoC's would
    have a compatible string of: 'compatible = ""ns16550a"' and use the
    8250_of driver. Our newer SoC's have added enhancements to the base
    core to add support for DMA and accurate high speed baud rates and use
    this newer 8250_bcm7271 driver. The Device Tree node for our enhanced
    UARTs has a compatible string of: 'compatible = "brcm,bcm7271-uart",
    "ns16550a"''. With both drivers running and the link order setup so
    that the 8250_bcm7217 driver is initialized before the 8250_of driver,
    we should bind the 8250_bcm7271 driver to the enhanced UART, or for
    upstream kernels that don't have the 8250_bcm7271 driver, we bind to
    the 8250_of driver.
    
    The problem is that when both the 8250_of and 8250_bcm7271 drivers
    were running, occasionally the 8250_of driver would be bound to the
    enhanced UART instead of the 8250_bcm7271 driver. This was happening
    because we use SCMI based clocks which come up late in initialization
    and cause probe DEFER's when the two drivers get their clocks.
    
    Occasionally the SCMI clock would become ready between the 8250_bcm7271
    probe and the 8250_of probe and the 8250_of driver would be bound. To
    fix this we decided to config only our 8250_bcm7271 driver and added
    "ns16665a0" to the compatible string so the driver would work on our
    older system.
    
    This commit has of_platform_serial_probe() check specifically for the
    "brcm,bcm7271-uart" and whether its companion driver is enabled. If it
    is the case, and the clock provider is not ready, we want to make sure
    that when the 8250_bcm7271.c driver returns EPROBE_DEFER, we are not
    getting the UART registered via 8250_of.c.
    
    Reviewed-by: Andy Shevchenko <andy.shevchenko@xxxxxxxxx>
    Signed-off-by: Jim Quinlan <jim2101024@xxxxxxxxx>
    Signed-off-by: Al Cooper <alcooperx@xxxxxxxxx>
    Signed-off-by: Florian Fainelli <f.fainelli@xxxxxxxxx>
    Link: https://lore.kernel.org/r/20210423183206.3917725-1-f.fainelli@xxxxxxxxx
    Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/tty/serial/8250/8250_of.c b/drivers/tty/serial/8250/8250_of.c
index 0b077b45d6a9..bce28729dd7b 100644
--- a/drivers/tty/serial/8250/8250_of.c
+++ b/drivers/tty/serial/8250/8250_of.c
@@ -192,6 +192,10 @@ static int of_platform_serial_probe(struct platform_device *ofdev)
 	u32 tx_threshold;
 	int ret;
 
+	if (IS_ENABLED(CONFIG_SERIAL_8250_BCM7271) &&
+	    of_device_is_compatible(ofdev->dev.of_node, "brcm,bcm7271-uart"))
+		return -ENODEV;
+
 	port_type = (unsigned long)of_device_get_match_data(&ofdev->dev);
 	if (port_type == PORT_UNKNOWN)
 		return -EINVAL;



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux