1 /* SPDX-License-Identifier: GPL-2.0+ */ 2 /* 3 * (C) Copyright 2012-2012 Henrik Nordstrom <henrik@henriknordstrom.net> 4 * 5 * (C) Copyright 2007-2011 6 * Allwinner Technology Co., Ltd. <www.allwinnertech.com> 7 * Tom Cubie <tangliang@allwinnertech.com> 8 * 9 * Configuration settings for the Allwinner sunxi series of boards. 10 */ 11 12 #ifndef _SUNXI_COMMON_CONFIG_H 13 #define _SUNXI_COMMON_CONFIG_H 14 15 #include <linux/stringify.h> 16 17 /**************************************************************************** 18 * base addresses for the SPL UART driver * 19 ****************************************************************************/ 20 #ifdef CONFIG_MACH_SUNIV 21 /* suniv doesn't have apb2 and uart is connected to apb1 */ 22 #define CFG_SYS_NS16550_CLK 100000000 23 #else 24 #define CFG_SYS_NS16550_CLK 24000000 25 #endif 26 #if !CONFIG_IS_ENABLED(DM_SERIAL) 27 #include <asm/arch/serial.h> 28 # define CFG_SYS_NS16550_COM1 SUNXI_UART0_BASE 29 # define CFG_SYS_NS16550_COM2 SUNXI_UART1_BASE 30 # define CFG_SYS_NS16550_COM3 SUNXI_UART2_BASE 31 # define CFG_SYS_NS16550_COM4 SUNXI_UART3_BASE 32 # define CFG_SYS_NS16550_COM5 SUNXI_R_UART_BASE 33 #endif 34 35 /**************************************************************************** 36 * DRAM base address * 37 ****************************************************************************/ 38 /* 39 * The DRAM Base differs between some models. We cannot use macros for the 40 * CONFIG_FOO defines which contain the DRAM base address since they end 41 * up unexpanded in include/autoconf.mk . 42 * 43 * So we have to have this #ifdef #else #endif block for these. 44 */ 45 #ifdef CONFIG_MACH_SUN9I 46 #define SDRAM_OFFSET(x) 0x2##x 47 #define CFG_SYS_SDRAM_BASE 0x20000000 48 #elif defined(CONFIG_MACH_SUNIV) 49 #define SDRAM_OFFSET(x) 0x8##x 50 #define CFG_SYS_SDRAM_BASE 0x80000000 51 #else 52 #define SDRAM_OFFSET(x) 0x4##x 53 #define CFG_SYS_SDRAM_BASE 0x40000000 54 /* V3s do not have enough memory to place code at 0x4a000000 */ 55 #endif 56 57 #define CFG_SYS_INIT_RAM_ADDR CONFIG_SUNXI_SRAM_ADDRESS 58 /* FIXME: this may be larger on some SoCs */ 59 #define CFG_SYS_INIT_RAM_SIZE 0x8000 /* 32 KiB */ 60 61 #define PHYS_SDRAM_0 CFG_SYS_SDRAM_BASE 62 #define PHYS_SDRAM_0_SIZE 0x80000000 /* 2 GiB */ 63 64 /**************************************************************************** 65 * environment variables holding default load addresses * 66 ****************************************************************************/ 67 /* 68 * We cannot use expressions here, because expressions won't be evaluated in 69 * autoconf.mk. 70 */ 71 #ifdef CONFIG_ARM64 72 /* 73 * Boards seem to come with at least 512MB of DRAM. 74 * The kernel should go at 512K, which is the default text offset (that will 75 * be adjusted at runtime if needed). 76 * There is no compression for arm64 kernels (yet), so leave some space 77 * for really big kernels, say 256MB for now. 78 * Scripts, PXE and DTBs should go afterwards, leaving the rest for the initrd. 79 */ 80 #define BOOTM_SIZE __stringify(0xa000000) 81 #define KERNEL_ADDR_R __stringify(SDRAM_OFFSET(0080000)) 82 #define KERNEL_COMP_ADDR_R __stringify(SDRAM_OFFSET(4000000)) 83 #define KERNEL_COMP_SIZE __stringify(0xb000000) 84 #define FDT_ADDR_R __stringify(SDRAM_OFFSET(FA00000)) 85 #define SCRIPT_ADDR_R __stringify(SDRAM_OFFSET(FC00000)) 86 #define PXEFILE_ADDR_R __stringify(SDRAM_OFFSET(FD00000)) 87 #define FDTOVERLAY_ADDR_R __stringify(SDRAM_OFFSET(FE00000)) 88 #define RAMDISK_ADDR_R __stringify(SDRAM_OFFSET(FF00000)) 89 90 #elif (CONFIG_SUNXI_MINIMUM_DRAM_MB >= 256) 91 /* 92 * 160M RAM (256M minimum minus 64MB heap + 32MB for u-boot, stack, fb, etc. 93 * 32M uncompressed kernel, 16M compressed kernel, 1M fdt, 94 * 1M script, 1M pxe, 1M dt overlay and the ramdisk at the end. 95 */ 96 #define BOOTM_SIZE __stringify(0xa000000) 97 #define KERNEL_ADDR_R __stringify(SDRAM_OFFSET(2000000)) 98 #define FDT_ADDR_R __stringify(SDRAM_OFFSET(3000000)) 99 #define SCRIPT_ADDR_R __stringify(SDRAM_OFFSET(3100000)) 100 #define PXEFILE_ADDR_R __stringify(SDRAM_OFFSET(3200000)) 101 #define FDTOVERLAY_ADDR_R __stringify(SDRAM_OFFSET(3300000)) 102 #define RAMDISK_ADDR_R __stringify(SDRAM_OFFSET(3400000)) 103 104 #elif (CONFIG_SUNXI_MINIMUM_DRAM_MB >= 64) 105 /* 106 * 64M RAM minus 2MB heap + 16MB for u-boot, stack, fb, etc. 107 * 16M uncompressed kernel, 8M compressed kernel, 1M fdt, 108 * 1M script, 1M pxe, 1M dt overlay and the ramdisk at the end. 109 */ 110 #define BOOTM_SIZE __stringify(0x2e00000) 111 #define KERNEL_ADDR_R __stringify(SDRAM_OFFSET(1000000)) 112 #define FDT_ADDR_R __stringify(SDRAM_OFFSET(1800000)) 113 #define SCRIPT_ADDR_R __stringify(SDRAM_OFFSET(1900000)) 114 #define PXEFILE_ADDR_R __stringify(SDRAM_OFFSET(1A00000)) 115 #define FDTOVERLAY_ADDR_R __stringify(SDRAM_OFFSET(1B00000)) 116 #define RAMDISK_ADDR_R __stringify(SDRAM_OFFSET(1C00000)) 117 118 #elif (CONFIG_SUNXI_MINIMUM_DRAM_MB >= 32) 119 /* 120 * 32M RAM minus 2.5MB for u-boot, heap, stack, etc. 121 * 16M uncompressed kernel, 7M compressed kernel, 128K fdt, 64K script, 122 * 128K DT overlay, 128K PXE and the ramdisk in the rest (max. 5MB) 123 */ 124 #define BOOTM_SIZE __stringify(0x1700000) 125 #define KERNEL_ADDR_R __stringify(SDRAM_OFFSET(1000000)) 126 #define FDT_ADDR_R __stringify(SDRAM_OFFSET(1d50000)) 127 #define SCRIPT_ADDR_R __stringify(SDRAM_OFFSET(1d40000)) 128 #define PXEFILE_ADDR_R __stringify(SDRAM_OFFSET(1d00000)) 129 #define FDTOVERLAY_ADDR_R __stringify(SDRAM_OFFSET(1d20000)) 130 #define RAMDISK_ADDR_R __stringify(SDRAM_OFFSET(1800000)) 131 132 #else 133 #error Need at least 32MB of DRAM. Please adjust load addresses. 134 #endif 135 136 #define MEM_LAYOUT_ENV_SETTINGS \ 137 "bootm_size=" BOOTM_SIZE "\0" \ 138 "kernel_addr_r=" KERNEL_ADDR_R "\0" \ 139 "fdt_addr_r=" FDT_ADDR_R "\0" \ 140 "scriptaddr=" SCRIPT_ADDR_R "\0" \ 141 "pxefile_addr_r=" PXEFILE_ADDR_R "\0" \ 142 "fdtoverlay_addr_r=" FDTOVERLAY_ADDR_R "\0" \ 143 "ramdisk_addr_r=" RAMDISK_ADDR_R "\0" 144 145 #ifdef CONFIG_ARM64 146 #define MEM_LAYOUT_ENV_EXTRA_SETTINGS \ 147 "kernel_comp_addr_r=" KERNEL_COMP_ADDR_R "\0" \ 148 "kernel_comp_size=" KERNEL_COMP_SIZE "\0" 149 #else 150 #define MEM_LAYOUT_ENV_EXTRA_SETTINGS "" 151 #endif 152 153 #define DFU_ALT_INFO_RAM \ 154 "dfu_alt_info_ram=" \ 155 "kernel ram " KERNEL_ADDR_R " 0x1000000;" \ 156 "fdt ram " FDT_ADDR_R " 0x100000;" \ 157 "ramdisk ram " RAMDISK_ADDR_R " 0x4000000\0" 158 159 /**************************************************************************** 160 * definitions for the distro boot system * 161 ****************************************************************************/ 162 #ifdef CONFIG_MMC 163 #if CONFIG_MMC_SUNXI_SLOT_EXTRA != -1 164 #define BOOTENV_DEV_MMC_AUTO(devtypeu, devtypel, instance) \ 165 BOOTENV_DEV_MMC(MMC, mmc, 0) \ 166 BOOTENV_DEV_MMC(MMC, mmc, 1) \ 167 "bootcmd_mmc_auto=" \ 168 "if test ${mmc_bootdev} -eq 1; then " \ 169 "run bootcmd_mmc1; " \ 170 "run bootcmd_mmc0; " \ 171 "elif test ${mmc_bootdev} -eq 0; then " \ 172 "run bootcmd_mmc0; " \ 173 "run bootcmd_mmc1; " \ 174 "fi\0" 175 176 #define BOOTENV_DEV_NAME_MMC_AUTO(devtypeu, devtypel, instance) \ 177 "mmc_auto " 178 179 #define BOOT_TARGET_DEVICES_MMC(func) func(MMC_AUTO, mmc_auto, na) 180 #else 181 #define BOOT_TARGET_DEVICES_MMC(func) func(MMC, mmc, 0) 182 #endif 183 #else 184 #define BOOT_TARGET_DEVICES_MMC(func) 185 #endif 186 187 #ifdef CONFIG_AHCI 188 #define BOOT_TARGET_DEVICES_SCSI(func) func(SCSI, scsi, 0) 189 #else 190 #define BOOT_TARGET_DEVICES_SCSI(func) 191 #endif 192 193 #ifdef CONFIG_USB_STORAGE 194 #define BOOT_TARGET_DEVICES_USB(func) func(USB, usb, 0) 195 #else 196 #define BOOT_TARGET_DEVICES_USB(func) 197 #endif 198 199 #ifdef CONFIG_CMD_PXE 200 #define BOOT_TARGET_DEVICES_PXE(func) func(PXE, pxe, na) 201 #else 202 #define BOOT_TARGET_DEVICES_PXE(func) 203 #endif 204 205 #ifdef CONFIG_CMD_DHCP 206 #define BOOT_TARGET_DEVICES_DHCP(func) func(DHCP, dhcp, na) 207 #else 208 #define BOOT_TARGET_DEVICES_DHCP(func) 209 #endif 210 211 /* FEL boot support, auto-execute boot.scr if a script address was provided */ 212 #define BOOTENV_DEV_FEL(devtypeu, devtypel, instance) \ 213 "bootcmd_fel=" \ 214 "if test -n ${fel_booted} && test -n ${fel_scriptaddr}; then " \ 215 "echo '(FEL boot)'; " \ 216 "source ${fel_scriptaddr}; " \ 217 "fi\0" 218 #define BOOTENV_DEV_NAME_FEL(devtypeu, devtypel, instance) \ 219 "fel " 220 221 #define BOOT_TARGET_DEVICES(func) \ 222 func(FEL, fel, na) \ 223 BOOT_TARGET_DEVICES_MMC(func) \ 224 BOOT_TARGET_DEVICES_SCSI(func) \ 225 BOOT_TARGET_DEVICES_USB(func) \ 226 BOOT_TARGET_DEVICES_PXE(func) \ 227 BOOT_TARGET_DEVICES_DHCP(func) 228 229 #ifdef CONFIG_OLD_SUNXI_KERNEL_COMPAT 230 #define BOOTCMD_SUNXI_COMPAT \ 231 "bootcmd_sunxi_compat=" \ 232 "setenv root /dev/mmcblk0p3 rootwait; " \ 233 "if ext2load mmc 0 0x44000000 uEnv.txt; then " \ 234 "echo Loaded environment from uEnv.txt; " \ 235 "env import -t 0x44000000 ${filesize}; " \ 236 "fi; " \ 237 "setenv bootargs console=${console} root=${root} ${extraargs}; " \ 238 "ext2load mmc 0 0x43000000 script.bin && " \ 239 "ext2load mmc 0 0x48000000 uImage && " \ 240 "bootm 0x48000000\0" 241 #else 242 #define BOOTCMD_SUNXI_COMPAT 243 #endif 244 245 #include <config_distro_bootcmd.h> 246 247 #ifdef CONFIG_USB_KEYBOARD 248 #define CONSOLE_STDIN_SETTINGS \ 249 "stdin=serial,usbkbd\0" 250 #else 251 #define CONSOLE_STDIN_SETTINGS \ 252 "stdin=serial\0" 253 #endif 254 255 #ifdef CONFIG_VIDEO 256 #define CONSOLE_STDOUT_SETTINGS \ 257 "stdout=serial,vidconsole\0" \ 258 "stderr=serial,vidconsole\0" 259 #else 260 #define CONSOLE_STDOUT_SETTINGS \ 261 "stdout=serial\0" \ 262 "stderr=serial\0" 263 #endif 264 265 #define PARTS_DEFAULT \ 266 "name=loader1,start=8k,size=32k,uuid=${uuid_gpt_loader1};" \ 267 "name=loader2,size=984k,uuid=${uuid_gpt_loader2};" \ 268 "name=esp,size=128M,bootable,uuid=${uuid_gpt_esp};" \ 269 "name=system,size=-,uuid=${uuid_gpt_system};" 270 271 #define UUID_GPT_ESP "c12a7328-f81f-11d2-ba4b-00a0c93ec93b" 272 273 #ifdef CONFIG_ARM64 274 #define UUID_GPT_SYSTEM "b921b045-1df0-41c3-af44-4c6f280d3fae" 275 #else 276 #define UUID_GPT_SYSTEM "69dad710-2ce4-4e3c-b16c-21a1d49abed3" 277 #endif 278 279 #define CONSOLE_ENV_SETTINGS \ 280 CONSOLE_STDIN_SETTINGS \ 281 CONSOLE_STDOUT_SETTINGS 282 283 #ifdef CONFIG_ARM64 284 #define FDTFILE "allwinner/" CONFIG_DEFAULT_DEVICE_TREE ".dtb" 285 #else 286 #define FDTFILE CONFIG_DEFAULT_DEVICE_TREE ".dtb" 287 #endif 288 289 #define CFG_EXTRA_ENV_SETTINGS \ 290 CONSOLE_ENV_SETTINGS \ 291 MEM_LAYOUT_ENV_SETTINGS \ 292 MEM_LAYOUT_ENV_EXTRA_SETTINGS \ 293 DFU_ALT_INFO_RAM \ 294 "fdtfile=" FDTFILE "\0" \ 295 "console=ttyS0,115200\0" \ 296 "uuid_gpt_esp=" UUID_GPT_ESP "\0" \ 297 "uuid_gpt_system=" UUID_GPT_SYSTEM "\0" \ 298 "partitions=" PARTS_DEFAULT "\0" \ 299 BOOTCMD_SUNXI_COMPAT \ 300 BOOTENV 301 302 #endif /* _SUNXI_COMMON_CONFIG_H */ 303