a2ac2b964b
This converts the following to Kconfig: CONFIG_SKIP_LOWLEVEL_INIT CONFIG_SKIP_LOWLEVEL_INIT_ONLY In order to do this, we need to introduce SPL and TPL variants of these options so that we can clearly disable these options only in SPL in some cases, and both instances in other cases. Signed-off-by: Tom Rini <trini@konsulko.com>
85 lines
1.9 KiB
C
85 lines
1.9 KiB
C
// SPDX-License-Identifier: GPL-2.0+
|
|
/*
|
|
* Copyright (C) 2016 Marek Vasut <marex@denx.de>
|
|
*/
|
|
|
|
#include <common.h>
|
|
#include <init.h>
|
|
#include <asm/io.h>
|
|
#include <asm/addrspace.h>
|
|
#include <asm/types.h>
|
|
#include <linux/bitops.h>
|
|
#include <linux/delay.h>
|
|
#include <mach/ath79.h>
|
|
#include <mach/ar71xx_regs.h>
|
|
#include <mach/ddr.h>
|
|
#include <debug_uart.h>
|
|
|
|
#ifdef CONFIG_USB_HOST
|
|
static void wdr4300_usb_start(void)
|
|
{
|
|
void __iomem *gpio_regs = map_physmem(AR71XX_GPIO_BASE,
|
|
AR71XX_GPIO_SIZE, MAP_NOCACHE);
|
|
if (!gpio_regs)
|
|
return;
|
|
|
|
/* Power up the USB HUB. */
|
|
clrbits_be32(gpio_regs + AR71XX_GPIO_REG_OE, BIT(21) | BIT(22));
|
|
writel(BIT(21) | BIT(22), gpio_regs + AR71XX_GPIO_REG_SET);
|
|
mdelay(1);
|
|
|
|
ath79_usb_reset();
|
|
}
|
|
#else
|
|
static inline void wdr4300_usb_start(void) {}
|
|
#endif
|
|
|
|
void wdr4300_pinmux_config(void)
|
|
{
|
|
void __iomem *regs;
|
|
|
|
regs = map_physmem(AR71XX_GPIO_BASE, AR71XX_GPIO_SIZE,
|
|
MAP_NOCACHE);
|
|
|
|
/* Assure JTAG is not disconnected. */
|
|
writel(0x40, regs + AR934X_GPIO_REG_FUNC);
|
|
|
|
/* Configure default GPIO input/output regs. */
|
|
writel(0x3031b, regs + AR71XX_GPIO_REG_OE);
|
|
writel(0x0f804, regs + AR71XX_GPIO_REG_OUT);
|
|
|
|
/* Configure pin multiplexing. */
|
|
writel(0x00000000, regs + AR934X_GPIO_REG_OUT_FUNC0);
|
|
writel(0x0b0a0980, regs + AR934X_GPIO_REG_OUT_FUNC1);
|
|
writel(0x00180000, regs + AR934X_GPIO_REG_OUT_FUNC2);
|
|
writel(0x00000000, regs + AR934X_GPIO_REG_OUT_FUNC3);
|
|
writel(0x0000004d, regs + AR934X_GPIO_REG_OUT_FUNC4);
|
|
writel(0x00000000, regs + AR934X_GPIO_REG_OUT_FUNC5);
|
|
}
|
|
|
|
#ifdef CONFIG_DEBUG_UART_BOARD_INIT
|
|
void board_debug_uart_init(void)
|
|
{
|
|
wdr4300_pinmux_config();
|
|
}
|
|
#endif
|
|
|
|
#ifdef CONFIG_BOARD_EARLY_INIT_F
|
|
int board_early_init_f(void)
|
|
{
|
|
#ifndef CONFIG_DEBUG_UART_BOARD_INIT
|
|
wdr4300_pinmux_config();
|
|
#endif
|
|
|
|
#if !CONFIG_IS_ENABLED(SKIP_LOWLEVEL_INIT)
|
|
ar934x_pll_init(560, 480, 240);
|
|
ar934x_ddr_init(560, 480, 240);
|
|
#endif
|
|
|
|
wdr4300_usb_start();
|
|
ath79_eth_reset();
|
|
|
|
return 0;
|
|
}
|
|
#endif
|