]>
Commit | Line | Data |
---|---|---|
83d290c5 | 1 | // SPDX-License-Identifier: GPL-2.0+ |
400df309 MV |
2 | /* |
3 | * Copyright (C) 2016 Marek Vasut <marex@denx.de> | |
400df309 MV |
4 | */ |
5 | ||
d678a59d | 6 | #include <common.h> |
691d719d | 7 | #include <init.h> |
400df309 MV |
8 | #include <asm/io.h> |
9 | #include <asm/addrspace.h> | |
10 | #include <asm/types.h> | |
cd93d625 | 11 | #include <linux/bitops.h> |
c05ed00a | 12 | #include <linux/delay.h> |
400df309 MV |
13 | #include <mach/ath79.h> |
14 | #include <mach/ar71xx_regs.h> | |
15 | #include <mach/ddr.h> | |
16 | #include <debug_uart.h> | |
17 | ||
e8d3eaad | 18 | #ifdef CONFIG_USB_HOST |
400df309 MV |
19 | static void wdr4300_usb_start(void) |
20 | { | |
21 | void __iomem *gpio_regs = map_physmem(AR71XX_GPIO_BASE, | |
22 | AR71XX_GPIO_SIZE, MAP_NOCACHE); | |
23 | if (!gpio_regs) | |
24 | return; | |
25 | ||
26 | /* Power up the USB HUB. */ | |
27 | clrbits_be32(gpio_regs + AR71XX_GPIO_REG_OE, BIT(21) | BIT(22)); | |
28 | writel(BIT(21) | BIT(22), gpio_regs + AR71XX_GPIO_REG_SET); | |
29 | mdelay(1); | |
30 | ||
31 | ath79_usb_reset(); | |
32 | } | |
33 | #else | |
34 | static inline void wdr4300_usb_start(void) {} | |
35 | #endif | |
36 | ||
fa9aee3a | 37 | void wdr4300_pinmux_config(void) |
400df309 MV |
38 | { |
39 | void __iomem *regs; | |
40 | ||
41 | regs = map_physmem(AR71XX_GPIO_BASE, AR71XX_GPIO_SIZE, | |
42 | MAP_NOCACHE); | |
43 | ||
44 | /* Assure JTAG is not disconnected. */ | |
45 | writel(0x40, regs + AR934X_GPIO_REG_FUNC); | |
46 | ||
47 | /* Configure default GPIO input/output regs. */ | |
48 | writel(0x3031b, regs + AR71XX_GPIO_REG_OE); | |
49 | writel(0x0f804, regs + AR71XX_GPIO_REG_OUT); | |
50 | ||
51 | /* Configure pin multiplexing. */ | |
52 | writel(0x00000000, regs + AR934X_GPIO_REG_OUT_FUNC0); | |
53 | writel(0x0b0a0980, regs + AR934X_GPIO_REG_OUT_FUNC1); | |
54 | writel(0x00180000, regs + AR934X_GPIO_REG_OUT_FUNC2); | |
55 | writel(0x00000000, regs + AR934X_GPIO_REG_OUT_FUNC3); | |
56 | writel(0x0000004d, regs + AR934X_GPIO_REG_OUT_FUNC4); | |
57 | writel(0x00000000, regs + AR934X_GPIO_REG_OUT_FUNC5); | |
fa9aee3a ÁFR |
58 | } |
59 | ||
60 | #ifdef CONFIG_DEBUG_UART_BOARD_INIT | |
61 | void board_debug_uart_init(void) | |
62 | { | |
63 | wdr4300_pinmux_config(); | |
64 | } | |
65 | #endif | |
400df309 | 66 | |
fa9aee3a ÁFR |
67 | #ifdef CONFIG_BOARD_EARLY_INIT_F |
68 | int board_early_init_f(void) | |
69 | { | |
70 | #ifndef CONFIG_DEBUG_UART_BOARD_INIT | |
71 | wdr4300_pinmux_config(); | |
400df309 MV |
72 | #endif |
73 | ||
a2ac2b96 | 74 | #if !CONFIG_IS_ENABLED(SKIP_LOWLEVEL_INIT) |
400df309 MV |
75 | ar934x_pll_init(560, 480, 240); |
76 | ar934x_ddr_init(560, 480, 240); | |
77 | #endif | |
78 | ||
79 | wdr4300_usb_start(); | |
80 | ath79_eth_reset(); | |
81 | ||
82 | return 0; | |
83 | } | |
84 | #endif |