1// SPDX-License-Identifier: GPL-2.0+ 2/* 3 * Copyright (c) 2015 Google, Inc 4 */ 5 6#include <common.h> 7#include <debug_uart.h> 8#include <dm.h> 9#include <dt-structs.h> 10#include <ns16550.h> 11#include <serial.h> 12#include <asm/arch-rockchip/clock.h> 13#include <dm/device-internal.h> 14 15struct rockchip_uart_plat { 16#if CONFIG_IS_ENABLED(OF_PLATDATA) 17 struct dtd_rockchip_uart dtplat; 18#endif 19 struct ns16550_plat plat; 20}; 21 22#if CONFIG_IS_ENABLED(OF_PLATDATA) 23struct dtd_rockchip_uart *dtplat, s_dtplat; 24#endif 25 26static int rockchip_serial_probe(struct udevice *dev) 27{ 28#if CONFIG_IS_ENABLED(OF_PLATDATA) 29 struct rockchip_uart_plat *plat = dev_get_plat(dev); 30 31 /* Create some new platform data for the standard driver */ 32 plat->plat.base = plat->dtplat.reg[0]; 33 plat->plat.reg_shift = plat->dtplat.reg_shift; 34 plat->plat.clock = plat->dtplat.clock_frequency; 35 plat->plat.fcr = UART_FCR_DEFVAL; 36 dev_set_plat(dev, &plat->plat); 37 38 return ns16550_serial_probe(dev); 39#else 40 return -ENODEV; 41#endif 42} 43 44U_BOOT_DRIVER(rockchip_uart) = { 45 .name = "rockchip_uart", 46 .id = UCLASS_SERIAL, 47 .priv_auto = sizeof(struct ns16550), 48 .plat_auto = sizeof(struct rockchip_uart_plat), 49 .probe = rockchip_serial_probe, 50 .ops = &ns16550_serial_ops, 51 .flags = DM_FLAG_PRE_RELOC, 52}; 53DM_DRIVER_ALIAS(rockchip_uart, rockchip_rk3066_uart) 54DM_DRIVER_ALIAS(rockchip_uart, rockchip_rk3188_uart) 55DM_DRIVER_ALIAS(rockchip_uart, rockchip_rk3288_uart) 56DM_DRIVER_ALIAS(rockchip_uart, rockchip_rk3328_uart) 57DM_DRIVER_ALIAS(rockchip_uart, rockchip_rk3368_uart) 58