1a2277cc3SWills Wang /* 2a2277cc3SWills Wang * Copyright (C) 2015-2016 Wills Wang <wills.wang@live.com> 3a2277cc3SWills Wang * 4a2277cc3SWills Wang * SPDX-License-Identifier: GPL-2.0+ 5a2277cc3SWills Wang */ 6a2277cc3SWills Wang 7a2277cc3SWills Wang #include <common.h> 8a2277cc3SWills Wang #include <asm/io.h> 9a2277cc3SWills Wang #include <asm/addrspace.h> 10a2277cc3SWills Wang #include <asm/types.h> 11a2277cc3SWills Wang #include <mach/ar71xx_regs.h> 12a2277cc3SWills Wang #include <mach/ddr.h> 13*f1b65c98SWills Wang #include <mach/ath79.h> 14a2277cc3SWills Wang #include <debug_uart.h> 15a2277cc3SWills Wang 16a2277cc3SWills Wang DECLARE_GLOBAL_DATA_PTR; 17a2277cc3SWills Wang 18a2277cc3SWills Wang #ifdef CONFIG_DEBUG_UART_BOARD_INIT board_debug_uart_init(void)19a2277cc3SWills Wangvoid board_debug_uart_init(void) 20a2277cc3SWills Wang { 21a2277cc3SWills Wang void __iomem *regs; 22a2277cc3SWills Wang u32 val; 23a2277cc3SWills Wang 24a2277cc3SWills Wang regs = map_physmem(AR71XX_GPIO_BASE, AR71XX_GPIO_SIZE, 25a2277cc3SWills Wang MAP_NOCACHE); 26a2277cc3SWills Wang 27a2277cc3SWills Wang /* 28a2277cc3SWills Wang * GPIO9 as input, GPIO10 as output 29a2277cc3SWills Wang */ 30a2277cc3SWills Wang val = readl(regs + AR71XX_GPIO_REG_OE); 31a2277cc3SWills Wang val |= QCA953X_GPIO(9); 32a2277cc3SWills Wang val &= ~QCA953X_GPIO(10); 33a2277cc3SWills Wang writel(val, regs + AR71XX_GPIO_REG_OE); 34a2277cc3SWills Wang 35a2277cc3SWills Wang /* 36a2277cc3SWills Wang * Enable GPIO10 as UART0_SOUT 37a2277cc3SWills Wang */ 38a2277cc3SWills Wang val = readl(regs + QCA953X_GPIO_REG_OUT_FUNC2); 39a2277cc3SWills Wang val &= ~QCA953X_GPIO_MUX_MASK(16); 40a2277cc3SWills Wang val |= QCA953X_GPIO_OUT_MUX_UART0_SOUT << 16; 41a2277cc3SWills Wang writel(val, regs + QCA953X_GPIO_REG_OUT_FUNC2); 42a2277cc3SWills Wang 43a2277cc3SWills Wang /* 44a2277cc3SWills Wang * Enable GPIO9 as UART0_SIN 45a2277cc3SWills Wang */ 46a2277cc3SWills Wang val = readl(regs + QCA953X_GPIO_REG_IN_ENABLE0); 47a2277cc3SWills Wang val &= ~QCA953X_GPIO_MUX_MASK(8); 48a2277cc3SWills Wang val |= QCA953X_GPIO_IN_MUX_UART0_SIN << 8; 49a2277cc3SWills Wang writel(val, regs + QCA953X_GPIO_REG_IN_ENABLE0); 50a2277cc3SWills Wang 51a2277cc3SWills Wang /* 52a2277cc3SWills Wang * Enable GPIO10 output 53a2277cc3SWills Wang */ 54a2277cc3SWills Wang val = readl(regs + AR71XX_GPIO_REG_OUT); 55a2277cc3SWills Wang val |= QCA953X_GPIO(10); 56a2277cc3SWills Wang writel(val, regs + AR71XX_GPIO_REG_OUT); 57a2277cc3SWills Wang } 58a2277cc3SWills Wang #endif 59a2277cc3SWills Wang board_early_init_f(void)60a2277cc3SWills Wangint board_early_init_f(void) 61a2277cc3SWills Wang { 62a2277cc3SWills Wang ddr_init(); 63*f1b65c98SWills Wang ath79_eth_reset(); 64a2277cc3SWills Wang return 0; 65a2277cc3SWills Wang } 66