Thomas Fitzsimmons | 919646d | 2018-06-08 17:59:45 -0400 | [diff] [blame] | 1 | /* SPDX-License-Identifier: GPL-2.0+ */ |
| 2 | /* |
| 3 | * (C) Copyright 2018 Cisco Systems, Inc. |
| 4 | * |
| 5 | * Author: Thomas Fitzsimmons <fitzsim@fitzsim.org> |
| 6 | * |
| 7 | * Configuration settings for the Broadcom BCMSTB SoC family. |
| 8 | */ |
| 9 | |
| 10 | #ifndef __BCMSTB_H |
| 11 | #define __BCMSTB_H |
| 12 | |
Thomas Fitzsimmons | 919646d | 2018-06-08 17:59:45 -0400 | [diff] [blame] | 13 | #include <linux/sizes.h> |
Thomas Fitzsimmons | f5befba | 2018-07-26 22:55:37 -0400 | [diff] [blame] | 14 | |
| 15 | #ifndef __ASSEMBLY__ |
| 16 | |
Simon Glass | fb64e36 | 2020-05-10 11:40:09 -0600 | [diff] [blame] | 17 | #include <linux/stringify.h> |
Thomas Fitzsimmons | f5befba | 2018-07-26 22:55:37 -0400 | [diff] [blame] | 18 | #include <linux/types.h> |
| 19 | |
| 20 | struct bcmstb_boot_parameters { |
| 21 | u32 r0; |
| 22 | u32 r1; |
| 23 | u32 r2; |
| 24 | u32 r3; |
| 25 | u32 sp; |
| 26 | u32 lr; |
| 27 | }; |
| 28 | |
| 29 | extern struct bcmstb_boot_parameters bcmstb_boot_parameters; |
| 30 | |
| 31 | extern phys_addr_t prior_stage_fdt_address; |
| 32 | |
| 33 | #endif /* __ASSEMBLY__ */ |
Thomas Fitzsimmons | 919646d | 2018-06-08 17:59:45 -0400 | [diff] [blame] | 34 | |
| 35 | /* |
Thomas Fitzsimmons | 919646d | 2018-06-08 17:59:45 -0400 | [diff] [blame] | 36 | * CPU configuration. |
| 37 | */ |
Thomas Fitzsimmons | 919646d | 2018-06-08 17:59:45 -0400 | [diff] [blame] | 38 | |
| 39 | /* |
| 40 | * Memory configuration. |
| 41 | * |
| 42 | * The prior stage BOLT bootloader sets up memory for us. |
| 43 | * |
| 44 | * An example boot memory layout after loading everything is: |
| 45 | * |
| 46 | * 0x0000 8000 vmlinux.bin.gz |
| 47 | * : [~31 MiB uncompressed max] |
| 48 | * 0x01ef f000 FIT containing signed public key |
| 49 | * : [~2 KiB in size] |
| 50 | * 0x01f0 0000 DTB copied from prior-stage-provided region |
| 51 | * : [~1 MiB max] |
| 52 | * 0x0200 0000 FIT containing ramdisk and device tree |
| 53 | * : initramfs.cpio.gz |
| 54 | * : [~208 MiB uncompressed max, to CMA/bmem low address] |
| 55 | * : [~80 MiB compressed max, to PSB low address] |
| 56 | * : device tree binary |
| 57 | * : [~60 KiB] |
| 58 | * 0x0700 0000 Prior stage bootloader (PSB) |
| 59 | * : |
| 60 | * 0x0761 7000 Prior-stage-provided device tree binary (DTB) |
| 61 | * : [~40 KiB in size] |
| 62 | * 0x0f00 0000 Contiguous memory allocator (CMA/bmem) low address |
| 63 | * : |
| 64 | * 0x8010 0000 U-Boot code at ELF load address |
| 65 | * : [~500 KiB in size, stripped] |
| 66 | * 0xc000 0000 Top of RAM |
| 67 | * |
| 68 | * Setting gd->relocaddr to CONFIG_SYS_TEXT_BASE in dram_init_banksize |
| 69 | * prevents U-Boot from relocating itself when it is run as an ELF |
| 70 | * program by the prior stage bootloader. |
| 71 | * |
| 72 | * We want to keep the ramdisk and FDT in the FIT image in-place, to |
| 73 | * accommodate stblinux's bmem and CMA regions. To accomplish this, |
| 74 | * we set initrd_high and fdt_high to 0xffffffff, and the load and |
| 75 | * entry addresses of the FIT ramdisk entry to 0x0. |
| 76 | * |
| 77 | * Overwriting the prior stage bootloader causes memory instability, |
| 78 | * so the compressed initramfs needs to fit between the load address |
| 79 | * and the PSB low address. In BOLT's default configuration this |
| 80 | * limits the compressed size of the initramfs to approximately 80 |
| 81 | * MiB. However, BOLT can be configured to allow loading larger |
| 82 | * initramfs images, in which case this limitation is eliminated. |
| 83 | */ |
Thomas Fitzsimmons | 919646d | 2018-06-08 17:59:45 -0400 | [diff] [blame] | 84 | #define CONFIG_SYS_SDRAM_BASE 0x00000000 |
Thomas Fitzsimmons | 919646d | 2018-06-08 17:59:45 -0400 | [diff] [blame] | 85 | #define CONFIG_SYS_INIT_RAM_SIZE 0x100000 |
| 86 | #define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_INIT_RAM_ADDR + \ |
| 87 | CONFIG_SYS_INIT_RAM_SIZE - \ |
| 88 | GENERATED_GBL_DATA_SIZE) |
Thomas Fitzsimmons | 919646d | 2018-06-08 17:59:45 -0400 | [diff] [blame] | 89 | |
| 90 | /* |
| 91 | * CONFIG_SYS_LOAD_ADDR - 1 MiB. |
| 92 | */ |
Thomas Fitzsimmons | 919646d | 2018-06-08 17:59:45 -0400 | [diff] [blame] | 93 | #define CONFIG_SYS_CBSIZE 512 |
| 94 | #define CONFIG_SYS_MAXARGS 32 |
| 95 | |
| 96 | /* |
| 97 | * Large kernel image bootm configuration. |
| 98 | */ |
| 99 | #define CONFIG_SYS_BOOTM_LEN SZ_64M |
| 100 | |
| 101 | /* |
| 102 | * NS16550 configuration. |
| 103 | */ |
| 104 | #define V_NS16550_CLK 81000000 |
| 105 | |
Thomas Fitzsimmons | 919646d | 2018-06-08 17:59:45 -0400 | [diff] [blame] | 106 | #define CONFIG_SYS_NS16550_SERIAL |
| 107 | #define CONFIG_SYS_NS16550_REG_SIZE (-4) |
| 108 | #define CONFIG_SYS_NS16550_CLK V_NS16550_CLK |
| 109 | |
| 110 | /* |
| 111 | * Serial console configuration. |
| 112 | */ |
Thomas Fitzsimmons | 919646d | 2018-06-08 17:59:45 -0400 | [diff] [blame] | 113 | #define CONFIG_SYS_BAUDRATE_TABLE {4800, 9600, 19200, 38400, 57600, \ |
| 114 | 115200} |
| 115 | |
| 116 | /* |
| 117 | * Informational display configuration. |
| 118 | */ |
Thomas Fitzsimmons | 919646d | 2018-06-08 17:59:45 -0400 | [diff] [blame] | 119 | |
| 120 | /* |
| 121 | * Command configuration. |
| 122 | */ |
Thomas Fitzsimmons | 919646d | 2018-06-08 17:59:45 -0400 | [diff] [blame] | 123 | |
| 124 | /* |
| 125 | * Flash configuration. |
| 126 | */ |
Thomas Fitzsimmons | 919646d | 2018-06-08 17:59:45 -0400 | [diff] [blame] | 127 | |
| 128 | /* |
| 129 | * Filesystem configuration. |
| 130 | */ |
Thomas Fitzsimmons | 919646d | 2018-06-08 17:59:45 -0400 | [diff] [blame] | 131 | |
| 132 | /* |
| 133 | * Environment configuration. |
| 134 | */ |
Thomas Fitzsimmons | 919646d | 2018-06-08 17:59:45 -0400 | [diff] [blame] | 135 | |
| 136 | /* |
| 137 | * Save the prior stage provided DTB. |
| 138 | */ |
Thomas Fitzsimmons | 919646d | 2018-06-08 17:59:45 -0400 | [diff] [blame] | 139 | /* |
| 140 | * Enable in-place RFS with this initrd_high setting. |
| 141 | */ |
| 142 | #define CONFIG_EXTRA_ENV_SETTINGS \ |
| 143 | "fdtsaveaddr=" __stringify(CONFIG_SYS_FDT_SAVE_ADDRESS) "\0" \ |
| 144 | "initrd_high=0xffffffff\0" \ |
| 145 | "fdt_high=0xffffffff\0" |
| 146 | |
| 147 | /* |
| 148 | * Set fdtaddr to prior stage-provided DTB in board_late_init, when |
| 149 | * writeable environment is available. |
| 150 | */ |
Thomas Fitzsimmons | 919646d | 2018-06-08 17:59:45 -0400 | [diff] [blame] | 151 | |
Thomas Fitzsimmons | 919646d | 2018-06-08 17:59:45 -0400 | [diff] [blame] | 152 | #endif /* __BCMSTB_H */ |