blob: 090d8b727f28892b866fdfa13e06c272b012171f [file] [log] [blame]
Martin Rothc7acf162020-05-28 00:44:50 -06001/* SPDX-License-Identifier: GPL-2.0-only */
2
3#include <memlayout.h>
4#include <arch/header.ld>
Martin Roth8fc68812023-08-18 16:28:29 -06005#include <psp_verstage/psp_transfer.h>
Martin Rothc7acf162020-05-28 00:44:50 -06006
Julius Werner82d16b12020-12-30 15:51:10 -08007#define EARLY_RESERVED_DRAM_START(addr) REGION_START(early_reserved_dram, addr)
8#define EARLY_RESERVED_DRAM_END(addr) REGION_END(early_reserved_dram, addr)
Martin Rothc7acf162020-05-28 00:44:50 -06009
Julius Werner82d16b12020-12-30 15:51:10 -080010#define PSP_SHAREDMEM_DRAM_START(addr) REGION_START(psp_sharedmem_dram, addr)
11#define PSP_SHAREDMEM_DRAM_END(addr) REGION_END(psp_sharedmem_dram, addr)
Martin Rothc7acf162020-05-28 00:44:50 -060012
Kyösti Mälkkib3621f82020-12-04 19:51:17 +020013BOOTBLOCK_END = CONFIG_ROMSTAGE_ADDR;
14BOOTBLOCK_ADDR = BOOTBLOCK_END - CONFIG_C_ENV_BOOTBLOCK_SIZE;
15
Martin Rothc7acf162020-05-28 00:44:50 -060016/*
17 *
18 * +--------------------------------+
19 * | |
20 * | |
21 * | |
22 * | |
23 * | |
24 * | |
25 * | |
26 * reserved_dram_end +--------------------------------+
27 * | |
Raul E Rangel55fea112021-07-23 16:43:18 -060028 * | cbfs_cache (if reqd) |
29 * | (CBFS_CACHE_SIZE) |
Raul E Rangel86302a82022-01-18 15:29:54 -070030 * +--------------------------------+ VERSTAGE_ADDR + VERSTAGE_SIZE + PRERAM_CBMEM_CONSOLE_SIZE
31 * | Preram CBMEM console |
32 * | (PRERAM_CBMEM_CONSOLE_SIZE) |
Raul E Rangel55fea112021-07-23 16:43:18 -060033 * +--------------------------------+ VERSTAGE_ADDR + VERSTAGE_SIZE
34 * | |
Martin Rothc7acf162020-05-28 00:44:50 -060035 * | verstage (if reqd) |
36 * | (VERSTAGE_SIZE) |
37 * +--------------------------------+ VERSTAGE_ADDR
38 * | |
39 * | FSP-M |
40 * | (FSP_M_SIZE) |
41 * +--------------------------------+ FSP_M_ADDR
Martin Rothc7acf162020-05-28 00:44:50 -060042 * | romstage |
43 * | (ROMSTAGE_SIZE) |
Kyösti Mälkkib3621f82020-12-04 19:51:17 +020044 * +--------------------------------+ ROMSTAGE_ADDR = BOOTBLOCK_END
45 * | | X86_RESET_VECTOR = BOOTBLOCK_END - 0x10
Martin Rothc7acf162020-05-28 00:44:50 -060046 * | bootblock |
47 * | (C_ENV_BOOTBLOCK_SIZE) |
Kyösti Mälkkib3621f82020-12-04 19:51:17 +020048 * +--------------------------------+ BOOTBLOCK_ADDR = BOOTBLOCK_END - C_ENV_BOOTBLOCK_SIZE
Martin Rothc7acf162020-05-28 00:44:50 -060049 * | Unused hole |
50 * +--------------------------------+
51 * | FMAP cache (FMAP_SIZE) |
Julius Wernerbaf27db2019-10-02 17:28:56 -070052 * +--------------------------------+
53 * | CBFS mcache (CBFS_MCACHE_SIZE) |
Raul E Rangel86302a82022-01-18 15:29:54 -070054 * +--------------------------------+ PSP_SHAREDMEM_BASE + 0x40 + VB2_FIRMWARE_WORKBUF_RECOMMENDED_SIZE + PRE_X86_CBMEM_CONSOLE_SIZE + 0x200
Martin Rothc7acf162020-05-28 00:44:50 -060055 * | Early Timestamp region (512B) |
Raul E Rangel86302a82022-01-18 15:29:54 -070056 * +--------------------------------+ PSP_SHAREDMEM_BASE + 0x40 + VB2_FIRMWARE_WORKBUF_RECOMMENDED_SIZE + PRE_X86_CBMEM_CONSOLE_SIZE
57 * | PSP Verstage CBMEM console |
58 * | (PRE_X86_CBMEM_CONSOLE_SIZE) |
Josie Nordrum5ae96aa2020-09-01 16:31:57 -060059 * +--------------------------------+ PSP_SHAREDMEM_BASE + 0x40 + VB2_FIRMWARE_WORKBUF_RECOMMENDED_SIZE
Martin Rothc7acf162020-05-28 00:44:50 -060060 * | PSP shared (vboot workbuf) |
Josie Nordrum5ae96aa2020-09-01 16:31:57 -060061 * |(VB2_FIRMWARE_WORKBUF_RECOMMENDED_SIZE) |
Martin Roth0c12abe2020-06-26 08:40:56 -060062 * +--------------------------------+ PSP_SHAREDMEM_BASE + 0x40
63 * | Transfer Info Structure |
Martin Rothc7acf162020-05-28 00:44:50 -060064 * +--------------------------------+ PSP_SHAREDMEM_BASE
Fred Reitberger475e2822022-07-14 11:06:30 -040065 * | APOB (PSP_APOB_DRAM_SIZE) |
Martin Rothc7acf162020-05-28 00:44:50 -060066 * +--------------------------------+ PSP_APOB_DRAM_ADDRESS
67 * | Early BSP stack |
68 * | (EARLYRAM_BSP_STACK_SIZE) |
69 * reserved_dram_start +--------------------------------+ EARLY_RESERVED_DRAM_BASE
70 * | DRAM |
71 * +--------------------------------+ 0x100000
72 * | Option ROM |
73 * +--------------------------------+ 0xc0000
74 * | Legacy VGA |
75 * +--------------------------------+ 0xa0000
76 * | DRAM |
77 * +--------------------------------+ 0x0
78 */
79SECTIONS
80{
81 DRAM_START(0x0)
82
83 EARLY_RESERVED_DRAM_START(CONFIG_EARLY_RESERVED_DRAM_BASE)
84
85 EARLYRAM_STACK(., CONFIG_EARLYRAM_BSP_STACK_SIZE)
Fred Reitberger475e2822022-07-14 11:06:30 -040086 REGION(apob, CONFIG_PSP_APOB_DRAM_ADDRESS, CONFIG_PSP_APOB_DRAM_SIZE, 1)
Martin Rothc7acf162020-05-28 00:44:50 -060087
Raul E Rangeld86db1c2021-02-05 10:24:22 -070088#if CONFIG(VBOOT_STARTS_BEFORE_BOOTBLOCK)
Martin Rothc7acf162020-05-28 00:44:50 -060089 PSP_SHAREDMEM_DRAM_START(CONFIG_PSP_SHAREDMEM_BASE)
Martin Rothc7acf162020-05-28 00:44:50 -060090#endif
91
Martin Roth89815c92020-10-23 15:24:30 -060092#include "memlayout_transfer_buffer.inc"
93
Raul E Rangeld86db1c2021-02-05 10:24:22 -070094#if CONFIG(VBOOT_STARTS_BEFORE_BOOTBLOCK)
Josie Nordrum5ae96aa2020-09-01 16:31:57 -060095 PSP_SHAREDMEM_DRAM_END(CONFIG_PSP_SHAREDMEM_BASE + CONFIG_PSP_SHAREDMEM_SIZE)
Martin Roth0c12abe2020-06-26 08:40:56 -060096#endif
Kyösti Mälkkib3621f82020-12-04 19:51:17 +020097 _ = ASSERT(BOOTBLOCK_END == ((BOOTBLOCK_END + 0xFFFF) & 0xFFFF0000), "Bootblock end must be 16 bit aligned");
98 BOOTBLOCK(BOOTBLOCK_ADDR, CONFIG_C_ENV_BOOTBLOCK_SIZE)
Martin Rothc7acf162020-05-28 00:44:50 -060099 ROMSTAGE(CONFIG_ROMSTAGE_ADDR, CONFIG_ROMSTAGE_SIZE)
Felix Held87f08be2023-07-26 17:29:47 +0200100
101#if CONFIG(PLATFORM_USES_FSP2_0)
Martin Rothc7acf162020-05-28 00:44:50 -0600102 REGION(fspm, CONFIG_FSP_M_ADDR, CONFIG_FSP_M_SIZE, 1)
Felix Held87f08be2023-07-26 17:29:47 +0200103#endif
104
Raul E Rangela36f9ab2022-01-18 15:50:06 -0700105#if CONFIG(VBOOT_SEPARATE_VERSTAGE) && !CONFIG(VBOOT_STARTS_BEFORE_BOOTBLOCK)
Martin Rothc7acf162020-05-28 00:44:50 -0600106 VERSTAGE(CONFIG_VERSTAGE_ADDR, CONFIG_VERSTAGE_SIZE)
107#endif
108
Raul E Rangel86302a82022-01-18 15:29:54 -0700109 PRERAM_CBMEM_CONSOLE(., CONFIG_PRERAM_CBMEM_CONSOLE_SIZE)
110
Raul E Rangel55fea112021-07-23 16:43:18 -0600111#if CONFIG_CBFS_CACHE_SIZE > 0
112 . = ALIGN(ARCH_CACHELINE_ALIGN_SIZE);
113 CBFS_CACHE(., CONFIG_CBFS_CACHE_SIZE)
114#endif
115
Martin Rothc7acf162020-05-28 00:44:50 -0600116 EARLY_RESERVED_DRAM_END(.)
117
Arthur Heymans0c629872022-03-30 19:34:10 +0200118 /* Relocated at runtime in cbmem so the address does not matter. */
Arthur Heymansd22bb252023-07-13 12:18:08 +0200119 RAMSTAGE(512M, 8M)
Martin Rothc7acf162020-05-28 00:44:50 -0600120}
121
122#if ENV_BOOTBLOCK
Furquan Shaikh1eaf64c2020-07-17 14:35:26 -0700123
Kyösti Mälkkidc873cc2020-11-21 17:59:41 +0200124gdtptr_offset = gdtptr & 0xffff;
Furquan Shaikh1eaf64c2020-07-17 14:35:26 -0700125nullidt_offset = nullidt & 0xffff;
126
127SECTIONS {
128 /* Trigger an error if I have an unusable start address */
Kyösti Mälkki8d187f42020-12-04 19:51:17 +0200129 _TOO_LOW = _X86_RESET_VECTOR - 0xfff0;
Furquan Shaikh1eaf64c2020-07-17 14:35:26 -0700130 _bogus = ASSERT(_start16bit >= _TOO_LOW, "_start16bit too low. Please report.");
131
Kyösti Mälkki2289a702019-12-21 10:17:56 +0200132 . = _X86_RESET_VECTOR - EARLYASM_SZ;
133 . = ALIGN(16);
134 BOOTBLOCK_TOP = .;
135 .init (.) : {
136 *(.init._start);
137 *(.init);
138 *(.init.*);
139 }
140
141 /*
142 * Allocation reserves extra space here. Alignment requirements
143 * may cause the total size of a section to change when the start
144 * address gets applied.
145 */
146 EARLYASM_SZ = SIZEOF(.init) + 16;
147
Kyösti Mälkkib3621f82020-12-04 19:51:17 +0200148 . = BOOTBLOCK_END - 0x10;
Kyösti Mälkki8d187f42020-12-04 19:51:17 +0200149 _X86_RESET_VECTOR = .;
Furquan Shaikh1eaf64c2020-07-17 14:35:26 -0700150 .reset . : {
151 *(.reset);
152 . = 15;
153 BYTE(0x00);
154 }
155}
Martin Rothc7acf162020-05-28 00:44:50 -0600156#endif /* ENV_BOOTBLOCK */