12fc24d53SSimon Glass /*
22fc24d53SSimon Glass * Copyright (c) 2015 Google, Inc
32fc24d53SSimon Glass *
42fc24d53SSimon Glass * SPDX-License-Identifier: GPL-2.0+
52fc24d53SSimon Glass */
62fc24d53SSimon Glass
72fc24d53SSimon Glass #include <common.h>
82fc24d53SSimon Glass #include <debug_uart.h>
92fc24d53SSimon Glass #include <dm.h>
102fc24d53SSimon Glass #include <dt-structs.h>
112fc24d53SSimon Glass #include <ns16550.h>
122fc24d53SSimon Glass #include <serial.h>
132fc24d53SSimon Glass #include <asm/arch/clock.h>
142fc24d53SSimon Glass
15*cd76916fSHeiko Stübner #if defined(CONFIG_ROCKCHIP_RK3188)
16*cd76916fSHeiko Stübner struct rockchip_uart_platdata {
17*cd76916fSHeiko Stübner struct dtd_rockchip_rk3188_uart dtplat;
18*cd76916fSHeiko Stübner struct ns16550_platdata plat;
19*cd76916fSHeiko Stübner };
20*cd76916fSHeiko Stübner struct dtd_rockchip_rk3188_uart *dtplat, s_dtplat;
21*cd76916fSHeiko Stübner #elif defined(CONFIG_ROCKCHIP_RK3288)
222fc24d53SSimon Glass struct rockchip_uart_platdata {
232fc24d53SSimon Glass struct dtd_rockchip_rk3288_uart dtplat;
242fc24d53SSimon Glass struct ns16550_platdata plat;
252fc24d53SSimon Glass };
262fc24d53SSimon Glass struct dtd_rockchip_rk3288_uart *dtplat, s_dtplat;
27*cd76916fSHeiko Stübner #endif
282fc24d53SSimon Glass
rockchip_serial_probe(struct udevice * dev)292fc24d53SSimon Glass static int rockchip_serial_probe(struct udevice *dev)
302fc24d53SSimon Glass {
312fc24d53SSimon Glass struct rockchip_uart_platdata *plat = dev_get_platdata(dev);
322fc24d53SSimon Glass
332fc24d53SSimon Glass /* Create some new platform data for the standard driver */
342fc24d53SSimon Glass plat->plat.base = plat->dtplat.reg[0];
352fc24d53SSimon Glass plat->plat.reg_shift = plat->dtplat.reg_shift;
362fc24d53SSimon Glass plat->plat.clock = plat->dtplat.clock_frequency;
3717fa0326SHeiko Schocher plat->plat.fcr = UART_FCR_DEFVAL;
382fc24d53SSimon Glass dev->platdata = &plat->plat;
392fc24d53SSimon Glass
402fc24d53SSimon Glass return ns16550_serial_probe(dev);
412fc24d53SSimon Glass }
422fc24d53SSimon Glass
43*cd76916fSHeiko Stübner U_BOOT_DRIVER(rockchip_rk3188_uart) = {
44*cd76916fSHeiko Stübner .name = "rockchip_rk3188_uart",
45*cd76916fSHeiko Stübner .id = UCLASS_SERIAL,
46*cd76916fSHeiko Stübner .priv_auto_alloc_size = sizeof(struct NS16550),
47*cd76916fSHeiko Stübner .platdata_auto_alloc_size = sizeof(struct rockchip_uart_platdata),
48*cd76916fSHeiko Stübner .probe = rockchip_serial_probe,
49*cd76916fSHeiko Stübner .ops = &ns16550_serial_ops,
50*cd76916fSHeiko Stübner .flags = DM_FLAG_PRE_RELOC,
51*cd76916fSHeiko Stübner };
52*cd76916fSHeiko Stübner
532fc24d53SSimon Glass U_BOOT_DRIVER(rockchip_rk3288_uart) = {
542fc24d53SSimon Glass .name = "rockchip_rk3288_uart",
552fc24d53SSimon Glass .id = UCLASS_SERIAL,
562fc24d53SSimon Glass .priv_auto_alloc_size = sizeof(struct NS16550),
572fc24d53SSimon Glass .platdata_auto_alloc_size = sizeof(struct rockchip_uart_platdata),
582fc24d53SSimon Glass .probe = rockchip_serial_probe,
592fc24d53SSimon Glass .ops = &ns16550_serial_ops,
602fc24d53SSimon Glass .flags = DM_FLAG_PRE_RELOC,
612fc24d53SSimon Glass };
62