[PATCH 03/12] lib: utils/serial: Add Andes fdt serial driver support

Jessica Clarke jrtc27 at jrtc27.com
Wed Sep 14 19:06:30 PDT 2022


On 15 Sept 2022, at 02:51, Yu Chien Peter Lin <peterlin at andestech.com> wrote:
> 
> Andes UART is compatible with uart8250 driver. This patch adds its
> compatible string to the match table and use fdt_serial_init() as
> platform console init hook.
> 
> dts example:
> 
>  serial0: serial at f0300000 {
>    compatible = "andestech,uart16550", "ns16550a";

You don’t need to add a more-specific compatible to the driver if the
generic one is already there and sufficient, which it is (i.e. you
don’t have quirks). Adding unnecessary compatibles just clutters the
code and bloats the binary for no good reason.

Jess

>    reg = <0x00000000 0xf0300000 0x00000000 0x00001000>;
>    interrupts = <9 4>;
>    interrupt-parent = <&plic0>;
>    clock-frequency = <19660800>;
>    current-speed = <38400>;
>    reg-shift = <2>;
>    reg-offset = <32>;
>    reg-io-width = <4>;
>    no-loopback-test = <1>;
>  };
> 
> Signed-off-by: Yu Chien Peter Lin <peterlin at andestech.com>
> ---
> lib/utils/serial/fdt_serial_uart8250.c |  1 +
> platform/andes/ae350/Kconfig           |  3 ++-
> platform/andes/ae350/platform.c        | 15 ++-------------
> platform/andes/ae350/platform.h        |  8 --------
> 4 files changed, 5 insertions(+), 22 deletions(-)
> 
> diff --git a/lib/utils/serial/fdt_serial_uart8250.c b/lib/utils/serial/fdt_serial_uart8250.c
> index 7b5d6a4..22cf2d3 100644
> --- a/lib/utils/serial/fdt_serial_uart8250.c
> +++ b/lib/utils/serial/fdt_serial_uart8250.c
> @@ -30,6 +30,7 @@ static const struct fdt_match serial_uart8250_match[] = {
> 	{ .compatible = "ns16550" },
> 	{ .compatible = "ns16550a" },
> 	{ .compatible = "snps,dw-apb-uart" },
> +	{ .compatible = "andestech,uart16550" },
> 	{ },
> };
> 
> diff --git a/platform/andes/ae350/Kconfig b/platform/andes/ae350/Kconfig
> index 3abad04..8dd8ebe 100644
> --- a/platform/andes/ae350/Kconfig
> +++ b/platform/andes/ae350/Kconfig
> @@ -4,7 +4,8 @@ config PLATFORM_ANDES_AE350
> 	bool
> 	select FDT
> 	select IRQCHIP_PLIC
> -	select SERIAL_UART8250
> +	select FDT_SERIAL
> +	select FDT_SERIAL_UART8250
> 	default y
> 
> if PLATFORM_ANDES_AE350
> diff --git a/platform/andes/ae350/platform.c b/platform/andes/ae350/platform.c
> index c07f6be..04428d1 100644
> --- a/platform/andes/ae350/platform.c
> +++ b/platform/andes/ae350/platform.c
> @@ -18,7 +18,7 @@
> #include <sbi_utils/fdt/fdt_helper.h>
> #include <sbi_utils/fdt/fdt_fixup.h>
> #include <sbi_utils/irqchip/plic.h>
> -#include <sbi_utils/serial/uart8250.h>
> +#include <sbi_utils/serial/fdt_serial.h>
> #include "platform.h"
> #include "plicsw.h"
> #include "plmt.h"
> @@ -43,17 +43,6 @@ static int ae350_final_init(bool cold_boot)
> 	return 0;
> }
> 
> -/* Initialize the platform console. */
> -static int ae350_console_init(void)
> -{
> -	return uart8250_init(AE350_UART_ADDR,
> -			     AE350_UART_FREQUENCY,
> -			     AE350_UART_BAUDRATE,
> -			     AE350_UART_REG_SHIFT,
> -			     AE350_UART_REG_WIDTH,
> -			     AE350_UART_REG_OFFSET);
> -}
> -
> /* Initialize the platform interrupt controller for current HART. */
> static int ae350_irqchip_init(bool cold_boot)
> {
> @@ -155,7 +144,7 @@ static int ae350_vendor_ext_provider(long extid, long funcid,
> const struct sbi_platform_operations platform_ops = {
> 	.final_init = ae350_final_init,
> 
> -	.console_init = ae350_console_init,
> +	.console_init = fdt_serial_init,
> 
> 	.irqchip_init = ae350_irqchip_init,
> 
> diff --git a/platform/andes/ae350/platform.h b/platform/andes/ae350/platform.h
> index 9b54816..c699b7f 100644
> --- a/platform/andes/ae350/platform.h
> +++ b/platform/andes/ae350/platform.h
> @@ -22,14 +22,6 @@
> 
> #define AE350_L2C_ADDR			0xe0500000
> 
> -#define AE350_UART_ADDR_OFFSET		0x20
> -#define AE350_UART_ADDR			(0xf0300000 + AE350_UART_ADDR_OFFSET)
> -#define AE350_UART_FREQUENCY		19660800
> -#define AE350_UART_BAUDRATE		38400
> -#define AE350_UART_REG_SHIFT		2
> -#define AE350_UART_REG_WIDTH		0
> -#define AE350_UART_REG_OFFSET		0
> -
> /*Memory and Miscellaneous Registers*/
> #define CSR_MILMB		0x7c0
> #define CSR_MDLMB		0x7c1
> -- 
> 2.34.1
> 
> 
> -- 
> opensbi mailing list
> opensbi at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi




More information about the opensbi mailing list