2 * This file is part of the coreboot project.
4 * Copyright (C) 2013 Google Inc.
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; version 2 of the License.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
19 #include <arch/stages.h>
20 #include <arch/early_variables.h>
21 #include <console/console.h>
24 #include <cpu/x86/mtrr.h>
25 #if CONFIG_EC_GOOGLE_CHROMEEC
26 #include <ec/google/chromeec/ec.h>
29 #include <romstage_handoff.h>
30 #include <stage_cache.h>
31 #include <timestamp.h>
33 #include <vendorcode/google/chromeos/chromeos.h>
35 #include <soc/iomap.h>
37 #include <soc/pci_devs.h>
39 #include <soc/reset.h>
40 #include <soc/romstage.h>
44 /* The cache-as-ram assembly file calls romstage_main() after setting up
45 * cache-as-ram. romstage_main() will then call the mainboards's
46 * mainboard_romstage_entry() function. That function then calls
47 * romstage_common() below. The reason for the back and forth is to provide
48 * common entry point from cache-as-ram while still allowing for code sharing.
49 * Because we can't use global variables the stack is used for allocations --
50 * thus the need to call back and forth. */
52 static void *setup_stack_and_mttrs(void);
54 static void program_base_addresses(void)
57 const uint32_t lpc_dev
= PCI_DEV(0, LPC_DEV
, LPC_FUNC
);
59 /* Memory Mapped IO registers. */
60 reg
= PMC_BASE_ADDRESS
| 2;
61 pci_write_config32(lpc_dev
, PBASE
, reg
);
62 reg
= IO_BASE_ADDRESS
| 2;
63 pci_write_config32(lpc_dev
, IOBASE
, reg
);
64 reg
= ILB_BASE_ADDRESS
| 2;
65 pci_write_config32(lpc_dev
, IBASE
, reg
);
66 reg
= SPI_BASE_ADDRESS
| 2;
67 pci_write_config32(lpc_dev
, SBASE
, reg
);
68 reg
= MPHY_BASE_ADDRESS
| 2;
69 pci_write_config32(lpc_dev
, MPBASE
, reg
);
70 reg
= PUNIT_BASE_ADDRESS
| 2;
71 pci_write_config32(lpc_dev
, PUBASE
, reg
);
72 reg
= RCBA_BASE_ADDRESS
| 1;
73 pci_write_config32(lpc_dev
, RCBA
, reg
);
75 /* IO Port Registers. */
76 reg
= ACPI_BASE_ADDRESS
| 2;
77 pci_write_config32(lpc_dev
, ABASE
, reg
);
78 reg
= GPIO_BASE_ADDRESS
| 2;
79 pci_write_config32(lpc_dev
, GBASE
, reg
);
82 static void spi_init(void)
84 u32
*scs
= (u32
*)(SPI_BASE_ADDRESS
+ SCS
);
85 u32
*bcr
= (u32
*)(SPI_BASE_ADDRESS
+ BCR
);
88 /* Disable generating SMI when setting WPD bit. */
89 write32(scs
, read32(scs
) & ~SMIWPEN
);
91 * Enable caching and prefetching in the SPI controller. Disable
92 * the SMM-only BIOS write and set WPD bit.
94 reg
= (read32(bcr
) & ~SRC_MASK
) | SRC_CACHE_PREFETCH
| BCR_WPD
;
99 /* Entry from cache-as-ram.inc. */
100 void * asmlinkage
romstage_main(unsigned long bist
,
101 uint32_t tsc_low
, uint32_t tsc_hi
)
103 struct romstage_params rp
= {
108 /* Save initial timestamp from bootblock. */
109 timestamp_init((((uint64_t)tsc_hi
) << 32) | (uint64_t)tsc_low
);
111 /* Save romstage begin */
112 timestamp_add_now(TS_START_ROMSTAGE
);
114 program_base_addresses();
118 byt_config_com1_and_enable();
130 #if CONFIG_EC_GOOGLE_CHROMEEC
131 /* Ensure the EC is in the right mode for recovery */
132 google_chromeec_early_init();
135 /* Call into mainboard. */
136 mainboard_romstage_entry(&rp
);
138 return setup_stack_and_mttrs();
141 static struct chipset_power_state power_state CAR_GLOBAL
;
143 static void migrate_power_state(int is_recovery
)
145 struct chipset_power_state
*ps_cbmem
;
146 struct chipset_power_state
*ps_car
;
148 ps_car
= car_get_var_ptr(&power_state
);
149 ps_cbmem
= cbmem_add(CBMEM_ID_POWER_STATE
, sizeof(*ps_cbmem
));
151 if (ps_cbmem
== NULL
) {
152 printk(BIOS_DEBUG
, "Not adding power state to cbmem!\n");
155 memcpy(ps_cbmem
, ps_car
, sizeof(*ps_cbmem
));
157 ROMSTAGE_CBMEM_INIT_HOOK(migrate_power_state
)
159 static struct chipset_power_state
*fill_power_state(void)
161 struct chipset_power_state
*ps
= car_get_var_ptr(&power_state
);
163 ps
->pm1_sts
= inw(ACPI_BASE_ADDRESS
+ PM1_STS
);
164 ps
->pm1_en
= inw(ACPI_BASE_ADDRESS
+ PM1_EN
);
165 ps
->pm1_cnt
= inl(ACPI_BASE_ADDRESS
+ PM1_CNT
);
166 ps
->gpe0_sts
= inl(ACPI_BASE_ADDRESS
+ GPE0_STS
);
167 ps
->gpe0_en
= inl(ACPI_BASE_ADDRESS
+ GPE0_EN
);
168 ps
->tco_sts
= inl(ACPI_BASE_ADDRESS
+ TCO_STS
);
169 ps
->prsts
= read32((u32
*)(PMC_BASE_ADDRESS
+ PRSTS
));
170 ps
->gen_pmcon1
= read32((u32
*)(PMC_BASE_ADDRESS
+ GEN_PMCON1
));
171 ps
->gen_pmcon2
= read32((u32
*)(PMC_BASE_ADDRESS
+ GEN_PMCON2
));
173 printk(BIOS_DEBUG
, "pm1_sts: %04x pm1_en: %04x pm1_cnt: %08x\n",
174 ps
->pm1_sts
, ps
->pm1_en
, ps
->pm1_cnt
);
175 printk(BIOS_DEBUG
, "gpe0_sts: %08x gpe0_en: %08x tco_sts: %08x\n",
176 ps
->gpe0_sts
, ps
->gpe0_en
, ps
->tco_sts
);
177 printk(BIOS_DEBUG
, "prsts: %08x gen_pmcon1: %08x gen_pmcon2: %08x\n",
178 ps
->prsts
, ps
->gen_pmcon1
, ps
->gen_pmcon2
);
183 /* Return 0, 3, or 5 to indicate the previous sleep state. */
184 static int chipset_prev_sleep_state(struct chipset_power_state
*ps
)
187 int prev_sleep_state
= 0;
189 if (ps
->pm1_sts
& WAK_STS
) {
190 switch ((ps
->pm1_cnt
& SLP_TYP
) >> SLP_TYP_SHIFT
) {
191 #if CONFIG_HAVE_ACPI_RESUME
193 prev_sleep_state
= 3;
197 prev_sleep_state
= 5;
201 outl(ps
->pm1_cnt
& ~(SLP_TYP
), ACPI_BASE_ADDRESS
+ PM1_CNT
);
204 if (ps
->gen_pmcon1
& (PWR_FLR
| SUS_PWR_FLR
)) {
205 prev_sleep_state
= 5;
208 return prev_sleep_state
;
211 /* Entry from the mainboard. */
212 void romstage_common(struct romstage_params
*params
)
214 struct romstage_handoff
*handoff
;
215 struct chipset_power_state
*ps
;
216 int prev_sleep_state
;
218 timestamp_add_now(TS_BEFORE_INITRAM
);
220 ps
= fill_power_state();
221 prev_sleep_state
= chipset_prev_sleep_state(ps
);
223 printk(BIOS_DEBUG
, "prev_sleep_state = S%d\n", prev_sleep_state
);
225 #if CONFIG_ELOG_BOOT_COUNT
226 if (prev_sleep_state
!= 3)
227 boot_count_increment();
232 raminit(params
->mrc_params
, prev_sleep_state
);
234 timestamp_add_now(TS_AFTER_INITRAM
);
236 handoff
= romstage_handoff_find_or_add();
238 handoff
->s3_resume
= (prev_sleep_state
== 3);
240 printk(BIOS_DEBUG
, "Romstage handoff structure not added!\n");
242 if (CONFIG_LPC_TPM
) {
243 init_tpm(prev_sleep_state
== 3);
247 void asmlinkage
romstage_after_car(void)
249 /* Load the ramstage. */
254 static inline uint32_t *stack_push(u32
*stack
, u32 value
)
261 /* Romstage needs quite a bit of stack for decompressing images since the lzma
262 * lib keeps its state on the stack during romstage. */
263 static unsigned long choose_top_of_stack(void)
265 unsigned long stack_top
;
266 const unsigned long romstage_ram_stack_size
= 0x5000;
268 /* cbmem_add() does a find() before add(). */
269 stack_top
= (unsigned long)cbmem_add(CBMEM_ID_ROMSTAGE_RAM_STACK
,
270 romstage_ram_stack_size
);
271 stack_top
+= romstage_ram_stack_size
;
275 /* setup_stack_and_mttrs() determines the stack to use after
276 * cache-as-ram is torn down as well as the MTRR settings to use. */
277 static void *setup_stack_and_mttrs(void)
279 unsigned long top_of_stack
;
282 uint32_t mtrr_mask_upper
;
285 /* Top of stack needs to be aligned to a 4-byte boundary. */
286 top_of_stack
= choose_top_of_stack() & ~3;
287 slot
= (void *)top_of_stack
;
290 /* The upper bits of the MTRR mask need to set according to the number
291 * of physical address bits. */
292 mtrr_mask_upper
= (1 << ((cpuid_eax(0x80000008) & 0xff) - 32)) - 1;
294 /* The order for each MTRR is value then base with upper 32-bits of
295 * each value coming before the lower 32-bits. The reasoning for
296 * this ordering is to create a stack layout like the following:
297 * +0: Number of MTRRs
298 * +4: MTRR base 0 31:0
299 * +8: MTRR base 0 63:32
300 * +12: MTRR mask 0 31:0
301 * +16: MTRR mask 0 63:32
302 * +20: MTRR base 1 31:0
303 * +24: MTRR base 1 63:32
304 * +28: MTRR mask 1 31:0
305 * +32: MTRR mask 1 63:32
308 /* Cache the ROM as WP just below 4GiB. */
309 slot
= stack_push(slot
, mtrr_mask_upper
); /* upper mask */
310 slot
= stack_push(slot
, ~(CONFIG_ROM_SIZE
- 1) | MTRR_PHYS_MASK_VALID
);
311 slot
= stack_push(slot
, 0); /* upper base */
312 slot
= stack_push(slot
, ~(CONFIG_ROM_SIZE
- 1) | MTRR_TYPE_WRPROT
);
315 /* Cache RAM as WB from 0 -> CONFIG_RAMTOP. */
316 slot
= stack_push(slot
, mtrr_mask_upper
); /* upper mask */
317 slot
= stack_push(slot
, ~(CONFIG_RAMTOP
- 1) | MTRR_PHYS_MASK_VALID
);
318 slot
= stack_push(slot
, 0); /* upper base */
319 slot
= stack_push(slot
, 0 | MTRR_TYPE_WRBACK
);
322 top_of_ram
= (uint32_t)cbmem_top();
323 /* Cache 8MiB below the top of ram. The top of ram under 4GiB is the
324 * start of the TSEG region. It is required to be 8MiB aligned. Set
325 * this area as cacheable so it can be used later for ramstage before
326 * setting up the entire RAM as cacheable. */
327 slot
= stack_push(slot
, mtrr_mask_upper
); /* upper mask */
328 slot
= stack_push(slot
, ~((8 << 20) - 1) | MTRR_PHYS_MASK_VALID
);
329 slot
= stack_push(slot
, 0); /* upper base */
330 slot
= stack_push(slot
, (top_of_ram
- (8 << 20)) | MTRR_TYPE_WRBACK
);
333 /* Cache 8MiB at the top of ram. Top of ram is where the TSEG
334 * region resides. However, it is not restricted to SMM mode until
335 * SMM has been relocated. By setting the region to cacheable it
336 * provides faster access when relocating the SMM handler as well
337 * as using the TSEG region for other purposes. */
338 slot
= stack_push(slot
, mtrr_mask_upper
); /* upper mask */
339 slot
= stack_push(slot
, ~((8 << 20) - 1) | MTRR_PHYS_MASK_VALID
);
340 slot
= stack_push(slot
, 0); /* upper base */
341 slot
= stack_push(slot
, top_of_ram
| MTRR_TYPE_WRBACK
);
344 /* Save the number of MTRRs to setup. Return the stack location
345 * pointing to the number of MTRRs. */
346 slot
= stack_push(slot
, num_mtrrs
);
351 void ramstage_cache_invalid(void)
353 #if CONFIG_RESET_ON_INVALID_RAMSTAGE_CACHE
354 /* Perform cold reset on invalid ramstage cache. */
359 int get_sw_write_protect_state(void)
362 /* Return unprotected status if status read fails. */
363 return (early_spi_read_wpsr(&status
) ? 0 : !!(status
& 0x80));