From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from ns.km20343-01.keymachine.de ([84.19.182.79] helo=km20343-01.keymachine.de) by merlin.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1UMuaR-0007C0-DQ for barebox@lists.infradead.org; Tue, 02 Apr 2013 06:20:53 +0000 From: Lucas Stach Date: Tue, 2 Apr 2013 08:19:10 +0200 Message-Id: <1364883552-6563-9-git-send-email-dev@lynxeye.de> In-Reply-To: <1364883552-6563-1-git-send-email-dev@lynxeye.de> References: <1364883552-6563-1-git-send-email-dev@lynxeye.de> List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "barebox" Errors-To: barebox-bounces+u.kleine-koenig=pengutronix.de@lists.infradead.org Subject: [PATCH v3 08/10] tegra: add generic debug UART support To: barebox@lists.infradead.org ODMdata tells us which UART to use for debugging purposes. This is agreed upon in both the upstream Linux kernel and U-Boot, so do it the same way in barebox. Signed-off-by: Lucas Stach --- arch/arm/boards/toshiba-ac100/Makefile | 1 - arch/arm/boards/toshiba-ac100/serial.c | 39 --------------------------- arch/arm/mach-tegra/include/mach/lowlevel.h | 34 ++++++++++++++++++++++++ arch/arm/mach-tegra/tegra20.c | 41 +++++++++++++++++++++++++++++ 4 files changed, 75 insertions(+), 40 deletions(-) delete mode 100644 arch/arm/boards/toshiba-ac100/serial.c create mode 100644 arch/arm/mach-tegra/tegra20.c diff --git a/arch/arm/boards/toshiba-ac100/Makefile b/arch/arm/boards/toshiba-ac100/Makefile index 9e14763..dcfc293 100644 --- a/arch/arm/boards/toshiba-ac100/Makefile +++ b/arch/arm/boards/toshiba-ac100/Makefile @@ -1,2 +1 @@ obj-y += board.o -obj-$(CONFIG_DRIVER_SERIAL_NS16550) += serial.o diff --git a/arch/arm/boards/toshiba-ac100/serial.c b/arch/arm/boards/toshiba-ac100/serial.c deleted file mode 100644 index 880270d..0000000 --- a/arch/arm/boards/toshiba-ac100/serial.c +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (C) 2011 Antony Pavlov - * - * This file is part of barebox. - * See file CREDITS for list of people who contributed to this project. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#include -#include -#include -#include -#include -#include -#include -#include - -static struct NS16550_plat serial_plat = { - .clock = 0x75 * 115200 * 16 /* MODE_X_DIV */, - .shift = 2, -}; - -static int ac100_serial_console_init(void) -{ - /* Register the serial port */ - add_ns16550_device(DEVICE_ID_DYNAMIC, TEGRA_UARTA_BASE, 8 << serial_plat.shift, - IORESOURCE_MEM_8BIT, &serial_plat); - - return 0; -} -console_initcall(ac100_serial_console_init); diff --git a/arch/arm/mach-tegra/include/mach/lowlevel.h b/arch/arm/mach-tegra/include/mach/lowlevel.h index bd1a8db..a24b8c2 100644 --- a/arch/arm/mach-tegra/include/mach/lowlevel.h +++ b/arch/arm/mach-tegra/include/mach/lowlevel.h @@ -35,6 +35,10 @@ #define T20_ODMDATA_RAMSIZE_SHIFT 28 #define T20_ODMDATA_RAMSIZE_MASK (3 << T20_ODMDATA_RAMSIZE_SHIFT) +#define T20_ODMDATA_UARTTYPE_SHIFT 18 +#define T20_ODMDATA_UARTTYPE_MASK (3 << T20_ODMDATA_UARTTYPE_SHIFT) +#define T20_ODMDATA_UARTID_SHIFT 15 +#define T20_ODMDATA_UARTID_MASK (7 << T20_ODMDATA_UARTID_SHIFT) static inline u32 tegra_get_odmdata(void) { @@ -109,5 +113,35 @@ static inline uint32_t tegra20_get_ramsize(void) } } +static long uart_id_to_base[] = { + TEGRA_UARTA_BASE, + TEGRA_UARTB_BASE, + TEGRA_UARTC_BASE, + TEGRA_UARTD_BASE, + TEGRA_UARTE_BASE, +}; + +static inline long tegra20_get_debuguart_base(void) +{ + u32 odmdata; + int id; + + odmdata = tegra_get_odmdata(); + + /* + * Get type, we accept both "2" and "3", as they both demark a UART, + * depending on the board type. + */ + if (!(((odmdata & T20_ODMDATA_UARTTYPE_MASK) >> + T20_ODMDATA_UARTTYPE_SHIFT) & 0x2)) + return 0; + + id = (odmdata & T20_ODMDATA_UARTID_MASK) >> T20_ODMDATA_UARTID_SHIFT; + if (id > ARRAY_SIZE(uart_id_to_base)) + return 0; + + return uart_id_to_base[id]; +} + /* reset vector for the main CPU complex */ void tegra_maincomplex_entry(void); diff --git a/arch/arm/mach-tegra/tegra20.c b/arch/arm/mach-tegra/tegra20.c new file mode 100644 index 0000000..9104c3b --- /dev/null +++ b/arch/arm/mach-tegra/tegra20.c @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2013 Lucas Stach + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include +#include + +static struct NS16550_plat debug_uart = { + .clock = 216000000, /* pll_p rate */ + .shift = 2, +}; + +static int tegra20_add_debug_console(void) +{ + unsigned long base; + + base = tegra20_get_debuguart_base(); + if (!base) + return -ENODEV; + + add_ns16550_device(DEVICE_ID_DYNAMIC, base, TEGRA_UARTA_SIZE, + IORESOURCE_MEM_8BIT, &debug_uart); + + return 0; +} +console_initcall(tegra20_add_debug_console); -- 1.8.1.4 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox