Hi Simon, > Add a driver for the "snps,dw-apb-uart" used in socfpga and others. > > This driver is required to get OF_PLATDATA to work for socfpga. > It uses the ns16550 driver, converting the platdata from of-platdata > go the ns16550 format. > > Signed-off-by: Simon Goldschmidt <simon.k.r.goldschm...@gmail.com> > --- > > drivers/serial/Kconfig | 10 ++++++++ > drivers/serial/Makefile | 1 + > drivers/serial/serial_dw_apb.c | 42 > ++++++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+) > create mode 100644 drivers/serial/serial_dw_apb.c > > diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig > index b7ff2960ab..10addd3309 100644 > --- a/drivers/serial/Kconfig > +++ b/drivers/serial/Kconfig > @@ -511,6 +511,16 @@ config BCM283X_PL011_SERIAL > that supports automatic disable, so that it only gets used > when the UART is actually muxed. > > +config DESIGNWARE_SERIAL > + bool "DesignWare UART support" > + depends on DM_SERIAL && SPL_OF_PLATDATA > + help > + Select this to enable a UART driver for "snps,dw-apb-uart" > devices > + when using CONFIG_SPL_OF_PLATDATA (i.e. a compiled-in > device tree > + replacement). > + This uses the ns16550 driver, converting the platdata from > of-platdata > + to the ns16550 format. > + > config BCM6345_SERIAL > bool "Support for BCM6345 UART" > depends on DM_SERIAL > diff --git a/drivers/serial/Makefile b/drivers/serial/Makefile > index 06ee30697d..f1ebb90d92 100644 > --- a/drivers/serial/Makefile > +++ b/drivers/serial/Makefile > @@ -46,6 +46,7 @@ obj-$(CONFIG_MESON_SERIAL) += serial_meson.o > obj-$(CONFIG_INTEL_MID_SERIAL) += serial_intel_mid.o > ifdef CONFIG_SPL_BUILD > obj-$(CONFIG_ROCKCHIP_SERIAL) += serial_rockchip.o > +obj-$(CONFIG_DESIGNWARE_SERIAL) += serial_dw_apb.o > endif > obj-$(CONFIG_XILINX_UARTLITE) += serial_xuartlite.o > obj-$(CONFIG_SANDBOX_SERIAL) += sandbox.o > diff --git a/drivers/serial/serial_dw_apb.c > b/drivers/serial/serial_dw_apb.c new file mode 100644 > index 0000000000..26580e5ba5 > --- /dev/null > +++ b/drivers/serial/serial_dw_apb.c > @@ -0,0 +1,42 @@ > +// SPDX-License-Identifier: GPL-2.0+ > +/* > + * Copyright (c) 2018 Simon Goldschmidt > + */ > + > +#include <common.h> > +#include <dm.h> > +#include <dt-structs.h> > +#include <ns16550.h> > +#include <serial.h> > + > +#if CONFIG_IS_ENABLED(OF_PLATDATA) > +struct dw_apb_uart_platdata { > + struct dtd_snps_dw_apb_uart dtplat; > + struct ns16550_platdata plat; > +}; > + > +static int dw_apb_serial_probe(struct udevice *dev) > +{ > + struct dw_apb_uart_platdata *plat = dev_get_platdata(dev); > + > + /* Set up correct platform data for the standard driver */ > + plat->plat.base = plat->dtplat.reg[0]; > + plat->plat.reg_shift = plat->dtplat.reg_shift; > + plat->plat.reg_width = plat->dtplat.reg_io_width; > + plat->plat.clock = plat->dtplat.clock_frequency; > + plat->plat.fcr = UART_FCR_DEFVAL; > + dev->platdata = &plat->plat; > + > + return ns16550_serial_probe(dev); > +} > + > +U_BOOT_DRIVER(snps_dw_apb_uart) = { > + .name = "snps_dw_apb_uart", > + .id = UCLASS_SERIAL, > + .priv_auto_alloc_size = sizeof(struct NS16550), > + .platdata_auto_alloc_size = sizeof(struct > dw_apb_uart_platdata), > + .probe = dw_apb_serial_probe, > + .ops = &ns16550_serial_ops, > + .flags = DM_FLAG_PRE_RELOC,
Is it possible/or is your application requiring the pinmux/clock setting for this serial? With OF_PLATDATA we don't need to parse (and provide) the DTS (and we use the DM/DTS driver's code in a way similar to "native" one). I'm wondering, if it would be possible to "mimic" the dependencies between DM drivers without DTS parsing / providing overhead. At least in my case I would need in SPL: -> driver XXX (working with u-boot proper's DM/DTS) ---> CLK (uclass-clk) to enable clocks ---> pinctrl (to config pins) As an example: uart or eMMC. I'm aware that it would be possible to use the old "approach" to configure pinmux and clk separately (as it is done now) and only re-use the DM portion of driver with OF_PLATDATA having all the necessary info. However, I'm wondering if there is a better way to achieve it (or if I misunderstood something). > +}; > +#endif Best regards, Lukasz Majewski -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lu...@denx.de
pgppVERp0tTP7.pgp
Description: OpenPGP digital signature
_______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot