uart_cpu_chipc.c revision 299994
1299994Sadrian/*- 2299994Sadrian * Copyright (c) 2016 Michael Zhilin <mizhka@gmail.com> 3299994Sadrian * 4299994Sadrian * All rights reserved. 5299994Sadrian * 6299994Sadrian * Redistribution and use in source and binary forms, with or without 7299994Sadrian * modification, are permitted provided that the following conditions 8299994Sadrian * are met: 9299994Sadrian * 1. Redistributions of source code must retain the above copyright 10299994Sadrian * notice, this list of conditions and the following disclaimer. 11299994Sadrian * 2. Redistributions in binary form must reproduce the above copyright 12299994Sadrian * notice, this list of conditions and the following disclaimer in the 13299994Sadrian * documentation and/or other materials provided with the distribution. 14299994Sadrian * 15299994Sadrian * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16299994Sadrian * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17299994Sadrian * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18299994Sadrian * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19299994Sadrian * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20299994Sadrian * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21299994Sadrian * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22299994Sadrian * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23299994Sadrian * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24299994Sadrian * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25299994Sadrian * SUCH DAMAGE. 26299994Sadrian */ 27299994Sadrian 28299994Sadrian#include <sys/cdefs.h> 29299994Sadrian__FBSDID("$FreeBSD: head/sys/mips/broadcom/uart_cpu_chipc.c 299994 2016-05-17 00:00:01Z adrian $"); 30299994Sadrian 31299994Sadrian#include "opt_uart.h" 32299994Sadrian 33299994Sadrian#include <sys/param.h> 34299994Sadrian#include <sys/systm.h> 35299994Sadrian#include <sys/bus.h> 36299994Sadrian#include <sys/cons.h> 37299994Sadrian#include <sys/lock.h> 38299994Sadrian#include <sys/mutex.h> 39299994Sadrian 40299994Sadrian#include <machine/bus.h> 41299994Sadrian 42299994Sadrian#include <dev/uart/uart.h> 43299994Sadrian#include <dev/uart/uart_bus.h> 44299994Sadrian#include <dev/uart/uart_cpu.h> 45299994Sadrian 46299994Sadrian#include "bcm_socinfo.h" 47299994Sadrian 48299994Sadrianbus_space_tag_t uart_bus_space_io; 49299994Sadrianbus_space_tag_t uart_bus_space_mem; 50299994Sadrian 51299994Sadrianint 52299994Sadrianuart_cpu_eqres(struct uart_bas *b1, struct uart_bas *b2) 53299994Sadrian{ 54299994Sadrian return ((b1->bsh == b2->bsh && b1->bst == b2->bst) ? 1 : 0); 55299994Sadrian} 56299994Sadrian 57299994Sadrianint 58299994Sadrianuart_cpu_getdev(int devtype, struct uart_devinfo *di) 59299994Sadrian{ 60299994Sadrian struct uart_class *class; 61299994Sadrian struct bcm_socinfo *socinfo; 62299994Sadrian 63299994Sadrian socinfo = bcm_get_socinfo(); 64299994Sadrian class = &uart_ns8250_class; 65299994Sadrian di->ops = uart_getops(class); 66299994Sadrian di->bas.chan = 0; 67299994Sadrian di->bas.bst = mips_bus_space_generic; 68299994Sadrian di->bas.bsh = (bus_space_handle_t)BCM_SOCREG(BCM_REG_CHIPC_UART); 69299994Sadrian di->bas.regshft = 0; 70299994Sadrian di->bas.rclk = socinfo->uartrate; /* in Hz */ 71299994Sadrian di->baudrate = 115200; 72299994Sadrian di->databits = 8; 73299994Sadrian di->stopbits = 1; 74299994Sadrian di->parity = UART_PARITY_NONE; 75299994Sadrian uart_bus_space_io = NULL; 76299994Sadrian uart_bus_space_mem = mips_bus_space_generic; 77299994Sadrian return (0); 78299994Sadrian} 79