This patch series adds two drivers, PL011 and Mini UART. Both support interrupts and implement the termios API.
Why add a new driver for the PL011 when we already have one? The existing driver is a very basic one and uses memory-mapped structs to access the registers. This proved to be problematic for the 'aarch64/raspberrypi4b' BSP as the RPi 4B's MMU does not reserve the entirety of the space required by the PL011 register struct. Even the existing driver doesn't use all the struct members. So, in the new driver, macros were used instead. This has the benefit of minimalism and ensures that we only add tested features to the driver. This driver builds upon the PL011 driver present in the Xilinx Versal BSP and addresses the IRQ startup hack. In short, the new PL011 driver has the features provided by the existing driver, and it meshes well with the termios API. Lastly, there's one thing I need feedback on. The PL011 has a hardware limitation which requires me to invoke the IRQ handler manually, the first time. For this, I need access to the `tty` struct in the `write_buffer` function. https://github.com/UtkarshVerma/rtems/blob/uart-drivers/bsps/shared/dev/serial/pl011.c#L301 For now, I store the tty in the device context and then pass the context to the IRQ handler. Is this a good approach? Are there better ways to do this? For convenience, feel free to check out my GitHub fork which has these changes: https://github.com/UtkarshVerma/rtems/tree/uart-drivers Utkarsh Verma (4): bsps/shared: Add new PL011 driver with IRQ support bsps/shared: Add new Mini UART driver bsps: Update BSPs to use the new PL011 driver spec: Add Mini UART and PL011 drivers to build spec bsps/aarch64/a53/console/console.c | 14 +- bsps/aarch64/a72/console/console.c | 14 +- bsps/aarch64/raspberrypi/console/console.c | 14 +- bsps/arm/raspberrypi/console/console-config.c | 26 +- .../arm/realview-pbx-a9/include/bsp/console.h | 4 +- bsps/arm/xen/console/console.c | 14 +- bsps/include/dev/serial/arm-pl011-regs.h | 143 ------ .../dev/serial/{arm-pl011.h => mini-uart.h} | 52 +- bsps/include/dev/serial/pl011.h | 68 +++ bsps/shared/dev/serial/arm-pl011.c | 104 ---- bsps/shared/dev/serial/mini-uart.c | 316 ++++++++++++ bsps/shared/dev/serial/pl011.c | 470 ++++++++++++++++++ .../aarch64/raspberrypi/bspraspberrypi4.yml | 1 - spec/build/bsps/obj.yml | 7 +- 14 files changed, 922 insertions(+), 325 deletions(-) delete mode 100644 bsps/include/dev/serial/arm-pl011-regs.h rename bsps/include/dev/serial/{arm-pl011.h => mini-uart.h} (64%) create mode 100644 bsps/include/dev/serial/pl011.h delete mode 100644 bsps/shared/dev/serial/arm-pl011.c create mode 100644 bsps/shared/dev/serial/mini-uart.c create mode 100644 bsps/shared/dev/serial/pl011.c -- 2.41.0 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel