blob: 1695ddda30a9e9b04c17b2fc28b8b3c1936bc5ce [file] [log] [blame]
Patrick Georgiac959032020-05-05 22:49:26 +02001/* SPDX-License-Identifier: GPL-2.0-or-later */
Arthur Heymansbf53acc2019-11-11 21:14:39 +01002
Arthur Heymansbf53acc2019-11-11 21:14:39 +01003#include <console/console.h>
Kyösti Mälkki4ce0a072021-02-17 18:10:49 +02004#include <romstage_handoff.h>
Arthur Heymansbf53acc2019-11-11 21:14:39 +01005#include <southbridge/intel/common/pmclib.h>
Arthur Heymansbf53acc2019-11-11 21:14:39 +01006#include <arch/romstage.h>
7
8#if CONFIG(SOUTHBRIDGE_INTEL_I82801JX)
9#include <southbridge/intel/i82801jx/i82801jx.h>
10#elif CONFIG(SOUTHBRIDGE_INTEL_I82801GX)
11#include <southbridge/intel/i82801gx/i82801gx.h>
12#endif
13
Angel Pons41e66ac2020-09-15 13:17:23 +020014#include "raminit.h"
15#include "x4x.h"
16
Arthur Heymansbf53acc2019-11-11 21:14:39 +010017__weak void mb_pre_raminit_setup(int s3_resume)
18{
19}
20
21void mainboard_romstage_entry(void)
22{
23 u8 spd_addr_map[4] = {};
24 u8 boot_path = 0;
25 u8 s3_resume;
26
Arthur Heymansbf53acc2019-11-11 21:14:39 +010027#if CONFIG(SOUTHBRIDGE_INTEL_I82801JX)
28 i82801jx_early_init();
29#elif CONFIG(SOUTHBRIDGE_INTEL_I82801GX)
30 i82801gx_early_init();
31#endif
32
33 x4x_early_init();
34
35 s3_resume = southbridge_detect_s3_resume();
36 mb_pre_raminit_setup(s3_resume);
37
38 if (s3_resume)
39 boot_path = BOOT_PATH_RESUME;
Angel Ponsa5146f32021-03-27 09:35:57 +010040 if (mchbar_read32(PMSTS_MCHBAR) & PMSTS_WARM_RESET)
Arthur Heymansbf53acc2019-11-11 21:14:39 +010041 boot_path = BOOT_PATH_WARM_RESET;
42
43 mb_get_spd_map(spd_addr_map);
44 sdram_initialize(boot_path, spd_addr_map);
45
Kyösti Mälkki4ce0a072021-02-17 18:10:49 +020046 x4x_late_init();
Arthur Heymansbf53acc2019-11-11 21:14:39 +010047 printk(BIOS_DEBUG, "x4x late init complete\n");
Kyösti Mälkki4ce0a072021-02-17 18:10:49 +020048
49 romstage_handoff_init(s3_resume);
Arthur Heymansbf53acc2019-11-11 21:14:39 +010050}