Hello Team,
We have a custom AM3354 based platform running kernel 5.10. On the GPMC bus, we've a NAND flash on the first chip select (CS0) and it works just fine. On the second chip select (CS1), we've multiple instances of an external UART (XR16M752) which is NS16550 compliant.
The GPMC chip select enables all the external UARTs and one of them should then be selected based on the values of GPMC_A3/4/5. I enabled just the first instance of the UART using the below snippet in my device tree
ext_uart@1,0 {
compatible = "ns16550a";
reg = <1 0 0x01000000>;
#address-cells = <1>;
#size-cells = <1>;
fifo-size = <64>;
clock-frequency = <3686400>;
bank-width = <1>;
gpmc,device-width = <1>; /* 8-bit data width */
gpmc,cs-on-ns = <0>; /* Assertion time */
gpmc,cs-rd-off-ns = <20>; /* Read deassertion time */
gpmc,cs-wr-off-ns = <20>; /* Write deassertion time */
gpmc,sync-clk-ps = <20000>;
};
under the gpmc main node. At runtime, the device was probed successfully
[ 2.320974] 9000000.ext_uart: ttyS1 at MMIO 0x9000000 (irq = 0, base_baud = 230400) is a 16550A
However, when I try to write to ttyS1
# echo 1 >/dev/ttyS1
the target hangs. I am continuing my investigation further but would like to get the expert's input early in the process.
I have the following initial questions
- Are there any examples available for the GPMC bus which would be using multiple child devices on the same chip select? I know that the GPMC driver caters for this to some extent (https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/tree/drivers/memory/omap-gpmc.c?h=ti-linux-5.10.y#n2104).
- Is sub-device selection possible using GPMC_A3/4/5?
- Any ideas around the initial hangs seen while trying to write?
Regards,
Awais