blob: 61b9bcff439fde24c83174602d956a2c7945231a [file] [log] [blame]
Angel Pons4b429832020-04-02 23:48:50 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Arthur Heymansdc584c32019-11-12 20:37:21 +01002
Arthur Heymansdc584c32019-11-12 20:37:21 +01003#include <arch/romstage.h>
Elyes Haouas1a847a12022-10-07 10:41:42 +02004#include <cf9_reset.h>
Arthur Heymansdc584c32019-11-12 20:37:21 +01005#include <northbridge/intel/i945/i945.h>
6#include <northbridge/intel/i945/raminit.h>
Arthur Heymansdc584c32019-11-12 20:37:21 +01007#include <southbridge/intel/common/pmclib.h>
Elyes Haouas1a847a12022-10-07 10:41:42 +02008#include <southbridge/intel/i82801gx/i82801gx.h>
9#include <stdint.h>
Arthur Heymansdc584c32019-11-12 20:37:21 +010010
11__weak void mainboard_lpc_decode(void)
12{
13}
14
Arthur Heymansdc584c32019-11-12 20:37:21 +010015__weak void mainboard_pre_raminit_config(int s3_resume)
16{
17}
18
19__weak void mainboard_get_spd_map(u8 spd_map[4])
20{
21 spd_map[0] = 0x50;
22 spd_map[1] = 0x51;
23 spd_map[2] = 0x52;
24 spd_map[3] = 0x53;
25}
26
27void mainboard_romstage_entry(void)
28{
29 int s3resume = 0;
30 u8 spd_map[4] = {};
31
Arthur Heymansdc584c32019-11-12 20:37:21 +010032 mainboard_lpc_decode();
Arthur Heymansdc584c32019-11-12 20:37:21 +010033
Angel Pons1d4044a2021-03-27 19:11:51 +010034 if (mchbar_read16(SSKPD) == 0xcafe) {
Arthur Heymansdc584c32019-11-12 20:37:21 +010035 system_reset();
36 }
37
38 /* Perform some early chipset initialization required
39 * before RAM initialization can work
40 */
41 i82801gx_early_init();
42 i945_early_initialization();
43
44 s3resume = southbridge_detect_s3_resume();
45
Arthur Heymansdc584c32019-11-12 20:37:21 +010046 mainboard_pre_raminit_config(s3resume);
47
Arthur Heymansdc584c32019-11-12 20:37:21 +010048 mainboard_get_spd_map(spd_map);
49
Angel Ponsa60b42a2021-03-28 14:06:55 +020050 if (CONFIG(DEBUG_RAM_SETUP))
51 dump_spd_registers(spd_map);
52
Paul Menzele0cd2eb2020-01-19 00:07:05 +010053 sdram_initialize(s3resume ? BOOT_PATH_RESUME : BOOT_PATH_NORMAL, spd_map);
Arthur Heymansdc584c32019-11-12 20:37:21 +010054
55 /* This should probably go away. Until now it is required
56 * and mainboard specific
57 */
58 mainboard_late_rcba_config();
59
60 /* Chipset Errata! */
Elyes HAOUAS8273e132020-03-10 22:17:12 +010061 if (CONFIG(NORTHBRIDGE_INTEL_SUBTYPE_I945GM))
62 fixup_i945gm_errata();
Arthur Heymansdc584c32019-11-12 20:37:21 +010063
64 /* Initialize the internal PCIe links before we go into stage2 */
65 i945_late_initialization(s3resume);
66}