]>
Commit | Line | Data |
---|---|---|
b0f80b91 | 1 | /* |
a5f88877 | 2 | * Copyright (C) 2014-2016 Stefan Roese <sr@denx.de> |
b0f80b91 SR |
3 | * |
4 | * SPDX-License-Identifier: GPL-2.0+ | |
5 | */ | |
6 | ||
7 | #include <common.h> | |
6451223a SR |
8 | #include <dm.h> |
9 | #include <debug_uart.h> | |
10 | #include <fdtdec.h> | |
b0f80b91 SR |
11 | #include <spl.h> |
12 | #include <asm/io.h> | |
13 | #include <asm/arch/cpu.h> | |
14 | #include <asm/arch/soc.h> | |
15 | ||
a5f88877 | 16 | static u32 get_boot_device(void) |
b0f80b91 | 17 | { |
a5f88877 SR |
18 | u32 val; |
19 | u32 boot_device; | |
20 | ||
f4db6c97 SR |
21 | /* |
22 | * First check, if UART boot-mode is active. This can only | |
23 | * be done, via the bootrom error register. Here the | |
24 | * MSB marks if the UART mode is active. | |
25 | */ | |
26 | val = readl(CONFIG_BOOTROM_ERR_REG); | |
27 | boot_device = (val & BOOTROM_ERR_MODE_MASK) >> BOOTROM_ERR_MODE_OFFS; | |
28 | debug("BOOTROM_REG=0x%08x boot_device=0x%x\n", val, boot_device); | |
29 | if (boot_device == BOOTROM_ERR_MODE_UART) | |
30 | return BOOT_DEVICE_UART; | |
31 | ||
32 | /* | |
33 | * Now check the SAR register for the strapped boot-device | |
34 | */ | |
a5f88877 SR |
35 | val = readl(CONFIG_SAR_REG); /* SAR - Sample At Reset */ |
36 | boot_device = (val & BOOT_DEV_SEL_MASK) >> BOOT_DEV_SEL_OFFS; | |
f4db6c97 | 37 | debug("SAR_REG=0x%08x boot_device=0x%x\n", val, boot_device); |
a5f88877 SR |
38 | switch (boot_device) { |
39 | #ifdef CONFIG_SPL_MMC_SUPPORT | |
40 | case BOOT_FROM_MMC: | |
41 | case BOOT_FROM_MMC_ALT: | |
42 | return BOOT_DEVICE_MMC1; | |
8ed43b96 | 43 | #endif |
a5f88877 | 44 | case BOOT_FROM_UART: |
f3a88e2c BS |
45 | #ifdef BOOT_FROM_UART_ALT |
46 | case BOOT_FROM_UART_ALT: | |
47 | #endif | |
a5f88877 SR |
48 | return BOOT_DEVICE_UART; |
49 | case BOOT_FROM_SPI: | |
50 | default: | |
51 | return BOOT_DEVICE_SPI; | |
52 | }; | |
53 | } | |
54 | ||
55 | u32 spl_boot_device(void) | |
56 | { | |
57 | return get_boot_device(); | |
b0f80b91 SR |
58 | } |
59 | ||
8ed43b96 | 60 | #ifdef CONFIG_SPL_MMC_SUPPORT |
2b1cdafa | 61 | u32 spl_boot_mode(const u32 boot_device) |
8ed43b96 SR |
62 | { |
63 | return MMCSD_MODE_RAW; | |
64 | } | |
65 | #endif | |
66 | ||
b0f80b91 SR |
67 | void board_init_f(ulong dummy) |
68 | { | |
6451223a SR |
69 | int ret; |
70 | ||
e3cccf9e SR |
71 | /* |
72 | * Pin muxing needs to be done before UART output, since | |
73 | * on A38x the UART pins need some re-muxing for output | |
74 | * to work. | |
75 | */ | |
76 | board_early_init_f(); | |
77 | ||
6451223a SR |
78 | /* Example code showing how to enable the debug UART on MVEBU */ |
79 | #ifdef EARLY_UART | |
80 | /* | |
81 | * Debug UART can be used from here if required: | |
82 | * | |
83 | * debug_uart_init(); | |
84 | * printch('a'); | |
85 | * printhex8(0x1234); | |
86 | * printascii("string"); | |
87 | */ | |
88 | #endif | |
89 | ||
90 | ret = spl_init(); | |
91 | if (ret) { | |
92 | debug("spl_init() failed: %d\n", ret); | |
93 | hang(); | |
94 | } | |
95 | ||
96 | /* Use special translation offset for SPL */ | |
97 | dm_set_translation_offset(0xd0000000 - 0xf1000000); | |
98 | ||
b0f80b91 SR |
99 | preloader_console_init(); |
100 | ||
ade741b3 SR |
101 | timer_init(); |
102 | ||
09e89ab4 SR |
103 | /* Armada 375 does not support SerDes and DDR3 init yet */ |
104 | #if !defined(CONFIG_ARMADA_375) | |
b0f80b91 SR |
105 | /* First init the serdes PHY's */ |
106 | serdes_phy_config(); | |
107 | ||
108 | /* Setup DDR */ | |
109 | ddr3_init(); | |
09e89ab4 | 110 | #endif |
b0f80b91 | 111 | |
944c7a31 SR |
112 | /* |
113 | * Return to the BootROM to continue the Marvell xmodem | |
114 | * UART boot protocol. As initiated by the kwboot tool. | |
115 | * | |
116 | * This can only be done by the BootROM and not by the | |
117 | * U-Boot SPL infrastructure, since the beginning of the | |
118 | * image is already read and interpreted by the BootROM. | |
119 | * SPL has no chance to receive this information. So we | |
120 | * need to return to the BootROM to enable this xmodem | |
121 | * UART download. | |
122 | */ | |
f4db6c97 SR |
123 | if (get_boot_device() == BOOT_DEVICE_UART) |
124 | return_to_bootrom(); | |
b0f80b91 | 125 | } |