1894c3ad2SThomas Fitzsimmons /* SPDX-License-Identifier: GPL-2.0+ */ 2894c3ad2SThomas Fitzsimmons /* 3894c3ad2SThomas Fitzsimmons * (C) Copyright 2018 Cisco Systems, Inc. 4894c3ad2SThomas Fitzsimmons * 5894c3ad2SThomas Fitzsimmons * Author: Thomas Fitzsimmons <fitzsim@fitzsim.org> 6894c3ad2SThomas Fitzsimmons * 7894c3ad2SThomas Fitzsimmons * Configuration settings for the Broadcom BCMSTB SoC family. 8894c3ad2SThomas Fitzsimmons */ 9894c3ad2SThomas Fitzsimmons 10894c3ad2SThomas Fitzsimmons #ifndef __BCMSTB_H 11894c3ad2SThomas Fitzsimmons #define __BCMSTB_H 12894c3ad2SThomas Fitzsimmons 13894c3ad2SThomas Fitzsimmons #include "version.h" 14894c3ad2SThomas Fitzsimmons #include <linux/sizes.h> 15*dc7685e2SThomas Fitzsimmons 16*dc7685e2SThomas Fitzsimmons #ifndef __ASSEMBLY__ 17*dc7685e2SThomas Fitzsimmons 18*dc7685e2SThomas Fitzsimmons #include <linux/types.h> 19*dc7685e2SThomas Fitzsimmons 20*dc7685e2SThomas Fitzsimmons struct bcmstb_boot_parameters { 21*dc7685e2SThomas Fitzsimmons u32 r0; 22*dc7685e2SThomas Fitzsimmons u32 r1; 23*dc7685e2SThomas Fitzsimmons u32 r2; 24*dc7685e2SThomas Fitzsimmons u32 r3; 25*dc7685e2SThomas Fitzsimmons u32 sp; 26*dc7685e2SThomas Fitzsimmons u32 lr; 27*dc7685e2SThomas Fitzsimmons }; 28*dc7685e2SThomas Fitzsimmons 29*dc7685e2SThomas Fitzsimmons extern struct bcmstb_boot_parameters bcmstb_boot_parameters; 30*dc7685e2SThomas Fitzsimmons 31*dc7685e2SThomas Fitzsimmons extern phys_addr_t prior_stage_fdt_address; 32*dc7685e2SThomas Fitzsimmons 33*dc7685e2SThomas Fitzsimmons #endif /* __ASSEMBLY__ */ 34894c3ad2SThomas Fitzsimmons 35894c3ad2SThomas Fitzsimmons /* 36894c3ad2SThomas Fitzsimmons * CPU configuration. 37894c3ad2SThomas Fitzsimmons */ 38894c3ad2SThomas Fitzsimmons #define CONFIG_SKIP_LOWLEVEL_INIT 39894c3ad2SThomas Fitzsimmons 40894c3ad2SThomas Fitzsimmons /* 41894c3ad2SThomas Fitzsimmons * Memory configuration. 42894c3ad2SThomas Fitzsimmons * 43894c3ad2SThomas Fitzsimmons * The prior stage BOLT bootloader sets up memory for us. 44894c3ad2SThomas Fitzsimmons * 45894c3ad2SThomas Fitzsimmons * An example boot memory layout after loading everything is: 46894c3ad2SThomas Fitzsimmons * 47894c3ad2SThomas Fitzsimmons * 0x0000 8000 vmlinux.bin.gz 48894c3ad2SThomas Fitzsimmons * : [~31 MiB uncompressed max] 49894c3ad2SThomas Fitzsimmons * 0x01ef f000 FIT containing signed public key 50894c3ad2SThomas Fitzsimmons * : [~2 KiB in size] 51894c3ad2SThomas Fitzsimmons * 0x01f0 0000 DTB copied from prior-stage-provided region 52894c3ad2SThomas Fitzsimmons * : [~1 MiB max] 53894c3ad2SThomas Fitzsimmons * 0x0200 0000 FIT containing ramdisk and device tree 54894c3ad2SThomas Fitzsimmons * : initramfs.cpio.gz 55894c3ad2SThomas Fitzsimmons * : [~208 MiB uncompressed max, to CMA/bmem low address] 56894c3ad2SThomas Fitzsimmons * : [~80 MiB compressed max, to PSB low address] 57894c3ad2SThomas Fitzsimmons * : device tree binary 58894c3ad2SThomas Fitzsimmons * : [~60 KiB] 59894c3ad2SThomas Fitzsimmons * 0x0700 0000 Prior stage bootloader (PSB) 60894c3ad2SThomas Fitzsimmons * : 61894c3ad2SThomas Fitzsimmons * 0x0761 7000 Prior-stage-provided device tree binary (DTB) 62894c3ad2SThomas Fitzsimmons * : [~40 KiB in size] 63894c3ad2SThomas Fitzsimmons * 0x0f00 0000 Contiguous memory allocator (CMA/bmem) low address 64894c3ad2SThomas Fitzsimmons * : 65894c3ad2SThomas Fitzsimmons * 0x8010 0000 U-Boot code at ELF load address 66894c3ad2SThomas Fitzsimmons * : [~500 KiB in size, stripped] 67894c3ad2SThomas Fitzsimmons * 0xc000 0000 Top of RAM 68894c3ad2SThomas Fitzsimmons * 69894c3ad2SThomas Fitzsimmons * Setting gd->relocaddr to CONFIG_SYS_TEXT_BASE in dram_init_banksize 70894c3ad2SThomas Fitzsimmons * prevents U-Boot from relocating itself when it is run as an ELF 71894c3ad2SThomas Fitzsimmons * program by the prior stage bootloader. 72894c3ad2SThomas Fitzsimmons * 73894c3ad2SThomas Fitzsimmons * We want to keep the ramdisk and FDT in the FIT image in-place, to 74894c3ad2SThomas Fitzsimmons * accommodate stblinux's bmem and CMA regions. To accomplish this, 75894c3ad2SThomas Fitzsimmons * we set initrd_high and fdt_high to 0xffffffff, and the load and 76894c3ad2SThomas Fitzsimmons * entry addresses of the FIT ramdisk entry to 0x0. 77894c3ad2SThomas Fitzsimmons * 78894c3ad2SThomas Fitzsimmons * Overwriting the prior stage bootloader causes memory instability, 79894c3ad2SThomas Fitzsimmons * so the compressed initramfs needs to fit between the load address 80894c3ad2SThomas Fitzsimmons * and the PSB low address. In BOLT's default configuration this 81894c3ad2SThomas Fitzsimmons * limits the compressed size of the initramfs to approximately 80 82894c3ad2SThomas Fitzsimmons * MiB. However, BOLT can be configured to allow loading larger 83894c3ad2SThomas Fitzsimmons * initramfs images, in which case this limitation is eliminated. 84894c3ad2SThomas Fitzsimmons */ 85894c3ad2SThomas Fitzsimmons #define CONFIG_SYS_SDRAM_BASE 0x00000000 86894c3ad2SThomas Fitzsimmons #define CONFIG_SYS_INIT_RAM_SIZE 0x100000 87894c3ad2SThomas Fitzsimmons #define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_INIT_RAM_ADDR + \ 88894c3ad2SThomas Fitzsimmons CONFIG_SYS_INIT_RAM_SIZE - \ 89894c3ad2SThomas Fitzsimmons GENERATED_GBL_DATA_SIZE) 90894c3ad2SThomas Fitzsimmons #define CONFIG_SYS_LOAD_ADDR 0x2000000 91894c3ad2SThomas Fitzsimmons 92894c3ad2SThomas Fitzsimmons /* 93894c3ad2SThomas Fitzsimmons * CONFIG_SYS_LOAD_ADDR - 1 MiB. 94894c3ad2SThomas Fitzsimmons */ 95894c3ad2SThomas Fitzsimmons #define CONFIG_SYS_FDT_SAVE_ADDRESS 0x1f00000 96894c3ad2SThomas Fitzsimmons #define CONFIG_SYS_CBSIZE 512 97894c3ad2SThomas Fitzsimmons #define CONFIG_SYS_MAXARGS 32 98894c3ad2SThomas Fitzsimmons 99894c3ad2SThomas Fitzsimmons /* 100894c3ad2SThomas Fitzsimmons * Large kernel image bootm configuration. 101894c3ad2SThomas Fitzsimmons */ 102894c3ad2SThomas Fitzsimmons #define CONFIG_SYS_BOOTM_LEN SZ_64M 103894c3ad2SThomas Fitzsimmons 104894c3ad2SThomas Fitzsimmons /* 105894c3ad2SThomas Fitzsimmons * NS16550 configuration. 106894c3ad2SThomas Fitzsimmons */ 107894c3ad2SThomas Fitzsimmons #define V_NS16550_CLK 81000000 108894c3ad2SThomas Fitzsimmons 109894c3ad2SThomas Fitzsimmons #define CONFIG_SYS_NS16550 110894c3ad2SThomas Fitzsimmons #define CONFIG_SYS_NS16550_SERIAL 111894c3ad2SThomas Fitzsimmons #define CONFIG_SYS_NS16550_REG_SIZE (-4) 112894c3ad2SThomas Fitzsimmons #define CONFIG_SYS_NS16550_CLK V_NS16550_CLK 113894c3ad2SThomas Fitzsimmons 114894c3ad2SThomas Fitzsimmons /* 115894c3ad2SThomas Fitzsimmons * Serial console configuration. 116894c3ad2SThomas Fitzsimmons */ 117894c3ad2SThomas Fitzsimmons #define CONFIG_BAUDRATE 115200 118894c3ad2SThomas Fitzsimmons #define CONFIG_SYS_BAUDRATE_TABLE {4800, 9600, 19200, 38400, 57600, \ 119894c3ad2SThomas Fitzsimmons 115200} 120894c3ad2SThomas Fitzsimmons 121894c3ad2SThomas Fitzsimmons /* 122894c3ad2SThomas Fitzsimmons * Informational display configuration. 123894c3ad2SThomas Fitzsimmons */ 124894c3ad2SThomas Fitzsimmons #define CONFIG_REVISION_TAG 125894c3ad2SThomas Fitzsimmons 126894c3ad2SThomas Fitzsimmons /* 127894c3ad2SThomas Fitzsimmons * Command configuration. 128894c3ad2SThomas Fitzsimmons */ 129894c3ad2SThomas Fitzsimmons #define CONFIG_CMD_ASKENV 130894c3ad2SThomas Fitzsimmons #define CONFIG_CMD_CACHE 131894c3ad2SThomas Fitzsimmons #define CONFIG_CMD_EXT2 132894c3ad2SThomas Fitzsimmons #define CONFIG_CMD_MMC 133894c3ad2SThomas Fitzsimmons 134894c3ad2SThomas Fitzsimmons /* 135894c3ad2SThomas Fitzsimmons * Flash configuration. 136894c3ad2SThomas Fitzsimmons */ 137894c3ad2SThomas Fitzsimmons #define CONFIG_ST_SMI 138894c3ad2SThomas Fitzsimmons #define CONFIG_SPI_FLASH_STMICRO 139894c3ad2SThomas Fitzsimmons #define CONFIG_SPI_FLASH_MACRONIX 140894c3ad2SThomas Fitzsimmons 141894c3ad2SThomas Fitzsimmons /* 142894c3ad2SThomas Fitzsimmons * Filesystem configuration. 143894c3ad2SThomas Fitzsimmons */ 144894c3ad2SThomas Fitzsimmons #define CONFIG_DOS_PARTITION 145894c3ad2SThomas Fitzsimmons #define CONFIG_CMD_EXT4 146894c3ad2SThomas Fitzsimmons #define CONFIG_FS_EXT4 147894c3ad2SThomas Fitzsimmons #define CONFIG_CMD_FS_GENERIC 148894c3ad2SThomas Fitzsimmons 149894c3ad2SThomas Fitzsimmons /* 150894c3ad2SThomas Fitzsimmons * Environment configuration. 151894c3ad2SThomas Fitzsimmons */ 152894c3ad2SThomas Fitzsimmons #define CONFIG_SYS_REDUNDAND_ENVIRONMENT 153894c3ad2SThomas Fitzsimmons #define CONFIG_ENV_SIZE (64 << 10) /* 64 KiB */ 154894c3ad2SThomas Fitzsimmons #define CONFIG_ENV_OFFSET_REDUND (CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE) 155894c3ad2SThomas Fitzsimmons #define CONFIG_ENV_OVERWRITE 156894c3ad2SThomas Fitzsimmons 157894c3ad2SThomas Fitzsimmons /* 158894c3ad2SThomas Fitzsimmons * Save the prior stage provided DTB. 159894c3ad2SThomas Fitzsimmons */ 160894c3ad2SThomas Fitzsimmons #define CONFIG_PREBOOT \ 161894c3ad2SThomas Fitzsimmons "fdt addr ${fdtcontroladdr};" \ 162894c3ad2SThomas Fitzsimmons "fdt move ${fdtcontroladdr} ${fdtsaveaddr};" \ 163894c3ad2SThomas Fitzsimmons "fdt addr ${fdtsaveaddr};" 164894c3ad2SThomas Fitzsimmons /* 165894c3ad2SThomas Fitzsimmons * Enable in-place RFS with this initrd_high setting. 166894c3ad2SThomas Fitzsimmons */ 167894c3ad2SThomas Fitzsimmons #define CONFIG_EXTRA_ENV_SETTINGS \ 168894c3ad2SThomas Fitzsimmons "fdtsaveaddr=" __stringify(CONFIG_SYS_FDT_SAVE_ADDRESS) "\0" \ 169894c3ad2SThomas Fitzsimmons "initrd_high=0xffffffff\0" \ 170894c3ad2SThomas Fitzsimmons "fdt_high=0xffffffff\0" 171894c3ad2SThomas Fitzsimmons 172894c3ad2SThomas Fitzsimmons /* 173894c3ad2SThomas Fitzsimmons * Set fdtaddr to prior stage-provided DTB in board_late_init, when 174894c3ad2SThomas Fitzsimmons * writeable environment is available. 175894c3ad2SThomas Fitzsimmons */ 176894c3ad2SThomas Fitzsimmons #define CONFIG_BOARD_LATE_INIT 177894c3ad2SThomas Fitzsimmons 178894c3ad2SThomas Fitzsimmons #endif /* __BCMSTB_H */ 179