diff mbox series

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

Message ID 20220915015121.27596-4-peterlin@andestech.com
State Superseded
Headers show
Series Add Andes AE350 fdt driver support | expand

Commit Message

Yu Chien Peter Lin Sept. 15, 2022, 1:51 a.m. UTC
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@f0300000 {
    compatible = "andestech,uart16550", "ns16550a";
    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@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(-)

Comments

Jessica Clarke Sept. 15, 2022, 2:06 a.m. UTC | #1
On 15 Sept 2022, at 02:51, Yu Chien Peter Lin <peterlin@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@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@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@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi
diff mbox series

Patch

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