xref: /rk3399_rockchip-uboot/drivers/serial/serial_rockchip.c (revision f9515756b6d76cde99b385dda905dfb20d31ea48)
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