sandybridge: Move common northbridge finalize to northbridge code.

Change-Id: I6d4178e5aaffc1330b0953b0601bf6b448250a8e
Signed-off-by: Vladimir Serbinenko <phcoder@gmail.com>
Reviewed-on: http://review.coreboot.org/6920
Tested-by: build bot (Jenkins)
Reviewed-by: Patrick Georgi <pgeorgi@google.com>
This commit is contained in:
Vladimir Serbinenko 2014-09-05 03:37:44 +02:00
parent dca2c468fc
commit c845b43f0a
14 changed files with 57 additions and 253 deletions

View File

@ -245,35 +245,17 @@ void main(unsigned long bist)
quick_ram_check(); quick_ram_check();
post_code(0x3e); post_code(0x3e);
MCHBAR16(SSKPD) = 0xCAFE;
cbmem_was_initted = !cbmem_recovery(boot_mode==2); cbmem_was_initted = !cbmem_recovery(boot_mode==2);
if (boot_mode!=2) if (boot_mode!=2)
save_mrc_data(&pei_data); save_mrc_data(&pei_data);
#if CONFIG_HAVE_ACPI_RESUME if (boot_mode==2 && !cbmem_was_initted) {
/* If there is no high memory area, we didn't boot before, so
* this is not a resume. In that case we just create the cbmem toc.
*/
*(u32 *)CBMEM_BOOT_MODE = 0;
*(u32 *)CBMEM_RESUME_BACKUP = 0;
if ((boot_mode == 2) && cbmem_was_initted) {
void *resume_backup_memory = cbmem_find(CBMEM_ID_RESUME);
if (resume_backup_memory) {
*(u32 *)CBMEM_BOOT_MODE = boot_mode;
*(u32 *)CBMEM_RESUME_BACKUP = (u32)resume_backup_memory;
}
/* Magic for S3 resume */
pci_write_config32(PCI_DEV(0, 0x00, 0), SKPAD, 0xcafed00d);
} else if (boot_mode == 2) {
/* Failed S3 resume, reset to come up cleanly */ /* Failed S3 resume, reset to come up cleanly */
outb(0x6, 0xcf9); outb(0x6, 0xcf9);
hlt(); hlt();
} else {
pci_write_config32(PCI_DEV(0, 0x00, 0), SKPAD, 0xcafebabe);
} }
#endif northbridge_romstage_finalize(boot_mode==2);
post_code(0x3f); post_code(0x3f);
#if CONFIG_CHROMEOS #if CONFIG_CHROMEOS
init_chromeos(boot_mode); init_chromeos(boot_mode);

View File

@ -289,35 +289,17 @@ void main(unsigned long bist)
quick_ram_check(); quick_ram_check();
post_code(0x3e); post_code(0x3e);
MCHBAR16(SSKPD) = 0xCAFE;
cbmem_was_initted = !cbmem_recovery(boot_mode==2); cbmem_was_initted = !cbmem_recovery(boot_mode==2);
if (boot_mode!=2) if (boot_mode!=2)
save_mrc_data(&pei_data); save_mrc_data(&pei_data);
#if CONFIG_HAVE_ACPI_RESUME if (boot_mode==2 && !cbmem_was_initted) {
/* If there is no high memory area, we didn't boot before, so
* this is not a resume. In that case we just create the cbmem toc.
*/
*(u32 *)CBMEM_BOOT_MODE = 0;
*(u32 *)CBMEM_RESUME_BACKUP = 0;
if ((boot_mode == 2) && cbmem_was_initted) {
void *resume_backup_memory = cbmem_find(CBMEM_ID_RESUME);
if (resume_backup_memory) {
*(u32 *)CBMEM_BOOT_MODE = boot_mode;
*(u32 *)CBMEM_RESUME_BACKUP = (u32)resume_backup_memory;
}
/* Magic for S3 resume */
pci_write_config32(PCI_DEV(0, 0x00, 0), SKPAD, 0xcafed00d);
} else if (boot_mode == 2) {
/* Failed S3 resume, reset to come up cleanly */ /* Failed S3 resume, reset to come up cleanly */
outb(0x6, 0xcf9); outb(0x6, 0xcf9);
hlt(); hlt();
} else {
pci_write_config32(PCI_DEV(0, 0x00, 0), SKPAD, 0xcafebabe);
} }
#endif northbridge_romstage_finalize(boot_mode==2);
post_code(0x3f); post_code(0x3f);
#if CONFIG_CHROMEOS #if CONFIG_CHROMEOS
init_chromeos(boot_mode); init_chromeos(boot_mode);

View File

@ -245,35 +245,17 @@ void main(unsigned long bist)
quick_ram_check(); quick_ram_check();
post_code(0x3e); post_code(0x3e);
MCHBAR16(SSKPD) = 0xCAFE;
cbmem_was_initted = !cbmem_recovery(boot_mode==2); cbmem_was_initted = !cbmem_recovery(boot_mode==2);
if (boot_mode!=2) if (boot_mode!=2)
save_mrc_data(&pei_data); save_mrc_data(&pei_data);
#if CONFIG_HAVE_ACPI_RESUME if (boot_mode==2 && !cbmem_was_initted) {
/* If there is no high memory area, we didn't boot before, so
* this is not a resume. In that case we just create the cbmem toc.
*/
*(u32 *)CBMEM_BOOT_MODE = 0;
*(u32 *)CBMEM_RESUME_BACKUP = 0;
if ((boot_mode == 2) && cbmem_was_initted) {
void *resume_backup_memory = cbmem_find(CBMEM_ID_RESUME);
if (resume_backup_memory) {
*(u32 *)CBMEM_BOOT_MODE = boot_mode;
*(u32 *)CBMEM_RESUME_BACKUP = (u32)resume_backup_memory;
}
/* Magic for S3 resume */
pci_write_config32(PCI_DEV(0, 0x00, 0), SKPAD, 0xcafed00d);
} else if (boot_mode == 2) {
/* Failed S3 resume, reset to come up cleanly */ /* Failed S3 resume, reset to come up cleanly */
outb(0x6, 0xcf9); outb(0x6, 0xcf9);
hlt(); hlt();
} else {
pci_write_config32(PCI_DEV(0, 0x00, 0), SKPAD, 0xcafebabe);
} }
#endif northbridge_romstage_finalize(boot_mode==2);
post_code(0x3f); post_code(0x3f);
#if CONFIG_CHROMEOS #if CONFIG_CHROMEOS
init_chromeos(boot_mode); init_chromeos(boot_mode);

View File

@ -299,35 +299,17 @@ void main(unsigned long bist)
quick_ram_check(); quick_ram_check();
post_code(0x3e); post_code(0x3e);
MCHBAR16(SSKPD) = 0xCAFE;
cbmem_was_initted = !cbmem_recovery(boot_mode==2); cbmem_was_initted = !cbmem_recovery(boot_mode==2);
if (boot_mode!=2) if (boot_mode!=2)
save_mrc_data(&pei_data); save_mrc_data(&pei_data);
#if CONFIG_HAVE_ACPI_RESUME if (boot_mode==2 && !cbmem_was_initted) {
/* If there is no high memory area, we didn't boot before, so
* this is not a resume. In that case we just create the cbmem toc.
*/
*(u32 *)CBMEM_BOOT_MODE = 0;
*(u32 *)CBMEM_RESUME_BACKUP = 0;
if ((boot_mode == 2) && cbmem_was_initted) {
void *resume_backup_memory = cbmem_find(CBMEM_ID_RESUME);
if (resume_backup_memory) {
*(u32 *)CBMEM_BOOT_MODE = boot_mode;
*(u32 *)CBMEM_RESUME_BACKUP = (u32)resume_backup_memory;
}
/* Magic for S3 resume */
pci_write_config32(PCI_DEV(0, 0x00, 0), SKPAD, 0xcafed00d);
} else if (boot_mode == 2) {
/* Failed S3 resume, reset to come up cleanly */ /* Failed S3 resume, reset to come up cleanly */
outb(0x6, 0xcf9); outb(0x6, 0xcf9);
hlt(); hlt();
} else {
pci_write_config32(PCI_DEV(0, 0x00, 0), SKPAD, 0xcafebabe);
} }
#endif northbridge_romstage_finalize(boot_mode==2);
post_code(0x3f); post_code(0x3f);
#if CONFIG_CHROMEOS #if CONFIG_CHROMEOS
init_chromeos(boot_mode); init_chromeos(boot_mode);

View File

@ -297,35 +297,17 @@ void main(unsigned long bist)
quick_ram_check(); quick_ram_check();
post_code(0x3e); post_code(0x3e);
MCHBAR16(SSKPD) = 0xCAFE;
cbmem_was_initted = !cbmem_recovery(boot_mode==2); cbmem_was_initted = !cbmem_recovery(boot_mode==2);
if (boot_mode!=2) if (boot_mode!=2)
save_mrc_data(&pei_data); save_mrc_data(&pei_data);
#if CONFIG_HAVE_ACPI_RESUME if (boot_mode==2 && !cbmem_was_initted) {
/* If there is no high memory area, we didn't boot before, so
* this is not a resume. In that case we just create the cbmem toc.
*/
*(u32 *)CBMEM_BOOT_MODE = 0;
*(u32 *)CBMEM_RESUME_BACKUP = 0;
if ((boot_mode == 2) && cbmem_was_initted) {
void *resume_backup_memory = cbmem_find(CBMEM_ID_RESUME);
if (resume_backup_memory) {
*(u32 *)CBMEM_BOOT_MODE = boot_mode;
*(u32 *)CBMEM_RESUME_BACKUP = (u32)resume_backup_memory;
}
/* Magic for S3 resume */
pci_write_config32(PCI_DEV(0, 0x00, 0), SKPAD, 0xcafed00d);
} else if (boot_mode == 2) {
/* Failed S3 resume, reset to come up cleanly */ /* Failed S3 resume, reset to come up cleanly */
outb(0x6, 0xcf9); outb(0x6, 0xcf9);
hlt(); hlt();
} else {
pci_write_config32(PCI_DEV(0, 0x00, 0), SKPAD, 0xcafebabe);
} }
#endif northbridge_romstage_finalize(boot_mode==2);
post_code(0x3f); post_code(0x3f);
#if CONFIG_CHROMEOS #if CONFIG_CHROMEOS
init_chromeos(boot_mode); init_chromeos(boot_mode);

View File

@ -305,35 +305,17 @@ void main(unsigned long bist)
quick_ram_check(); quick_ram_check();
post_code(0x3e); post_code(0x3e);
MCHBAR16(SSKPD) = 0xCAFE;
cbmem_was_initted = !cbmem_recovery(boot_mode==2); cbmem_was_initted = !cbmem_recovery(boot_mode==2);
if (boot_mode!=2) if (boot_mode!=2)
save_mrc_data(&pei_data); save_mrc_data(&pei_data);
#if CONFIG_HAVE_ACPI_RESUME if (boot_mode==2 && !cbmem_was_initted) {
/* If there is no high memory area, we didn't boot before, so
* this is not a resume. In that case we just create the cbmem toc.
*/
*(u32 *)CBMEM_BOOT_MODE = 0;
*(u32 *)CBMEM_RESUME_BACKUP = 0;
if ((boot_mode == 2) && cbmem_was_initted) {
void *resume_backup_memory = cbmem_find(CBMEM_ID_RESUME);
if (resume_backup_memory) {
*(u32 *)CBMEM_BOOT_MODE = boot_mode;
*(u32 *)CBMEM_RESUME_BACKUP = (u32)resume_backup_memory;
}
/* Magic for S3 resume */
pci_write_config32(PCI_DEV(0, 0x00, 0), SKPAD, 0xcafed00d);
} else if (boot_mode == 2) {
/* Failed S3 resume, reset to come up cleanly */ /* Failed S3 resume, reset to come up cleanly */
outb(0x6, 0xcf9); outb(0x6, 0xcf9);
hlt(); hlt();
} else {
pci_write_config32(PCI_DEV(0, 0x00, 0), SKPAD, 0xcafebabe);
} }
#endif northbridge_romstage_finalize(boot_mode==2);
post_code(0x3f); post_code(0x3f);
timestamp_add_now(TS_END_ROMSTAGE); timestamp_add_now(TS_END_ROMSTAGE);
} }

View File

@ -252,36 +252,18 @@ void main(unsigned long bist)
quick_ram_check(); quick_ram_check();
post_code(0x3e); post_code(0x3e);
MCHBAR16(SSKPD) = 0xCAFE;
cbmem_was_initted = !cbmem_recovery(boot_mode == 2); cbmem_was_initted = !cbmem_recovery(boot_mode == 2);
if (boot_mode != 2) { if (boot_mode != 2) {
save_mrc_data(&pei_data); save_mrc_data(&pei_data);
} }
#if CONFIG_HAVE_ACPI_RESUME if (boot_mode==2 && !cbmem_was_initted) {
/* If there is no high memory area, we didn't boot before, so
* this is not a resume. In that case we just create the cbmem toc.
*/
*(u32 *)CBMEM_BOOT_MODE = 0;
*(u32 *)CBMEM_RESUME_BACKUP = 0;
if ((boot_mode == 2) && cbmem_was_initted) {
void *resume_backup_memory = cbmem_find(CBMEM_ID_RESUME);
if (resume_backup_memory) {
*(u32 *)CBMEM_BOOT_MODE = boot_mode;
*(u32 *)CBMEM_RESUME_BACKUP = (u32)resume_backup_memory;
}
/* Magic for S3 resume */
pci_write_config32(PCI_DEV(0, 0x00, 0), SKPAD, 0xcafed00d);
} else if (boot_mode == 2) {
/* Failed S3 resume, reset to come up cleanly */ /* Failed S3 resume, reset to come up cleanly */
outb(0x6, 0xcf9); outb(0x6, 0xcf9);
hlt(); hlt();
} else {
pci_write_config32(PCI_DEV(0, 0x00, 0), SKPAD, 0xcafebabe);
} }
#endif northbridge_romstage_finalize(boot_mode==2);
post_code(0x3f); post_code(0x3f);
timestamp_add_now(TS_END_ROMSTAGE); timestamp_add_now(TS_END_ROMSTAGE);
} }

View File

@ -240,28 +240,8 @@ void main(unsigned long bist)
rcba_config(); rcba_config();
post_code(0x3d); post_code(0x3d);
MCHBAR16(SSKPD) = 0xCAFE; northbridge_romstage_finalize(s3resume);
#if CONFIG_HAVE_ACPI_RESUME
/* If there is no high memory area, we didn't boot before, so
* this is not a resume. In that case we just create the cbmem toc.
*/
*(u32 *)CBMEM_BOOT_MODE = 0;
*(u32 *)CBMEM_RESUME_BACKUP = 0;
if (s3resume) {
void *resume_backup_memory = cbmem_find(CBMEM_ID_RESUME);
if (resume_backup_memory) {
*(u32 *)CBMEM_BOOT_MODE = 2;
*(u32 *)CBMEM_RESUME_BACKUP = (u32)resume_backup_memory;
}
/* Magic for S3 resume */
pci_write_config32(PCI_DEV(0, 0x00, 0), SKPAD, 0xcafed00d);
} else {
pci_write_config32(PCI_DEV(0, 0x00, 0), SKPAD, 0xcafebabe);
}
#endif
post_code(0x3f); post_code(0x3f);
timestamp_add_now(TS_END_ROMSTAGE); timestamp_add_now(TS_END_ROMSTAGE);
} }

View File

@ -238,28 +238,8 @@ void main(unsigned long bist)
rcba_config(); rcba_config();
post_code(0x3d); post_code(0x3d);
MCHBAR16(SSKPD) = 0xCAFE; northbridge_romstage_finalize(s3resume);
#if CONFIG_HAVE_ACPI_RESUME
/* If there is no high memory area, we didn't boot before, so
* this is not a resume. In that case we just create the cbmem toc.
*/
*(u32 *)CBMEM_BOOT_MODE = 0;
*(u32 *)CBMEM_RESUME_BACKUP = 0;
if (s3resume) {
void *resume_backup_memory = cbmem_find(CBMEM_ID_RESUME);
if (resume_backup_memory) {
*(u32 *)CBMEM_BOOT_MODE = 2;
*(u32 *)CBMEM_RESUME_BACKUP = (u32)resume_backup_memory;
}
/* Magic for S3 resume */
pci_write_config32(PCI_DEV(0, 0x00, 0), SKPAD, 0xcafed00d);
} else {
pci_write_config32(PCI_DEV(0, 0x00, 0), SKPAD, 0xcafebabe);
}
#endif
post_code(0x3f); post_code(0x3f);
timestamp_add_now(TS_END_ROMSTAGE); timestamp_add_now(TS_END_ROMSTAGE);
} }

View File

@ -229,28 +229,8 @@ void main(unsigned long bist)
rcba_config(); rcba_config();
post_code(0x3d); post_code(0x3d);
MCHBAR16(SSKPD) = 0xCAFE; northbridge_romstage_finalize(s3resume);
#if CONFIG_HAVE_ACPI_RESUME
/* If there is no high memory area, we didn't boot before, so
* this is not a resume. In that case we just create the cbmem toc.
*/
*(u32 *)CBMEM_BOOT_MODE = 0;
*(u32 *)CBMEM_RESUME_BACKUP = 0;
if (s3resume) {
void *resume_backup_memory = cbmem_find(CBMEM_ID_RESUME);
if (resume_backup_memory) {
*(u32 *)CBMEM_BOOT_MODE = 2;
*(u32 *)CBMEM_RESUME_BACKUP = (u32)resume_backup_memory;
}
/* Magic for S3 resume */
pci_write_config32(PCI_DEV(0, 0x00, 0), SKPAD, 0xcafed00d);
} else {
pci_write_config32(PCI_DEV(0, 0x00, 0), SKPAD, 0xcafebabe);
}
#endif
post_code(0x3f); post_code(0x3f);
timestamp_add_now(TS_END_ROMSTAGE); timestamp_add_now(TS_END_ROMSTAGE);
} }

View File

@ -316,36 +316,16 @@ void main(unsigned long bist)
quick_ram_check(); quick_ram_check();
post_code(0x3e); post_code(0x3e);
MCHBAR16(SSKPD) = 0xCAFE;
cbmem_was_initted = !cbmem_recovery(boot_mode==2); cbmem_was_initted = !cbmem_recovery(boot_mode==2);
if (boot_mode!=2) if (boot_mode!=2)
save_mrc_data(&pei_data); save_mrc_data(&pei_data);
#if CONFIG_HAVE_ACPI_RESUME if (boot_mode == 2 && !cbmem_was_initted) {
/* If there is no high memory area, we didn't boot before, so
* this is not a resume. In that case we just create the cbmem toc.
*/
*(u32 *)CBMEM_BOOT_MODE = 0;
*(u32 *)CBMEM_RESUME_BACKUP = 0;
if ((boot_mode == 2) && cbmem_was_initted) {
void *resume_backup_memory = cbmem_find(CBMEM_ID_RESUME);
if (resume_backup_memory) {
*(u32 *)CBMEM_BOOT_MODE = boot_mode;
*(u32 *)CBMEM_RESUME_BACKUP = (u32)resume_backup_memory;
}
/* Magic for S3 resume */
pci_write_config32(PCI_DEV(0, 0x00, 0), SKPAD, 0xcafed00d);
} else if (boot_mode == 2) {
/* Failed S3 resume, reset to come up cleanly */ /* Failed S3 resume, reset to come up cleanly */
outb(0x6, 0xcf9); outb(0x6, 0xcf9);
hlt(); hlt();
} else {
pci_write_config32(PCI_DEV(0, 0x00, 0), SKPAD, 0xcafebabe);
} }
#endif northbridge_romstage_finalize(boot_mode==2);
post_code(0x3f); post_code(0x3f);
#if CONFIG_CHROMEOS #if CONFIG_CHROMEOS
init_chromeos(boot_mode); init_chromeos(boot_mode);

View File

@ -327,35 +327,17 @@ void main(unsigned long bist)
quick_ram_check(); quick_ram_check();
post_code(0x3e); post_code(0x3e);
MCHBAR16(SSKPD) = 0xCAFE;
cbmem_was_initted = !cbmem_recovery(boot_mode==2); cbmem_was_initted = !cbmem_recovery(boot_mode==2);
if (boot_mode!=2) if (boot_mode!=2)
save_mrc_data(&pei_data); save_mrc_data(&pei_data);
#if CONFIG_HAVE_ACPI_RESUME if (boot_mode==2 && !cbmem_was_initted) {
/* If there is no high memory area, we didn't boot before, so
* this is not a resume. In that case we just create the cbmem toc.
*/
*(u32 *)CBMEM_BOOT_MODE = 0;
*(u32 *)CBMEM_RESUME_BACKUP = 0;
if ((boot_mode == 2) && cbmem_was_initted) {
void *resume_backup_memory = cbmem_find(CBMEM_ID_RESUME);
if (resume_backup_memory) {
*(u32 *)CBMEM_BOOT_MODE = boot_mode;
*(u32 *)CBMEM_RESUME_BACKUP = (u32)resume_backup_memory;
}
/* Magic for S3 resume */
pci_write_config32(PCI_DEV(0, 0x00, 0), SKPAD, 0xcafed00d);
} else if (boot_mode == 2) {
/* Failed S3 resume, reset to come up cleanly */ /* Failed S3 resume, reset to come up cleanly */
outb(0x6, 0xcf9); outb(0x6, 0xcf9);
hlt(); hlt();
} else {
pci_write_config32(PCI_DEV(0, 0x00, 0), SKPAD, 0xcafebabe);
} }
#endif northbridge_romstage_finalize(boot_mode==2);
post_code(0x3f); post_code(0x3f);
#if CONFIG_CHROMEOS #if CONFIG_CHROMEOS
init_chromeos(boot_mode); init_chromeos(boot_mode);

View File

@ -24,6 +24,7 @@
#include <arch/io.h> #include <arch/io.h>
#include <device/pci_def.h> #include <device/pci_def.h>
#include <elog.h> #include <elog.h>
#include <cbmem.h>
#include <pc80/mc146818rtc.h> #include <pc80/mc146818rtc.h>
#include "sandybridge.h" #include "sandybridge.h"
@ -174,3 +175,29 @@ void sandybridge_early_initialization(int chipset_type)
sandybridge_setup_graphics(); sandybridge_setup_graphics();
} }
void northbridge_romstage_finalize(int s3resume)
{
MCHBAR16(SSKPD) = 0xCAFE;
#if CONFIG_HAVE_ACPI_RESUME
/* If there is no high memory area, we didn't boot before, so
* this is not a resume. In that case we just create the cbmem toc.
*/
*(u32 *)CBMEM_BOOT_MODE = 0;
*(u32 *)CBMEM_RESUME_BACKUP = 0;
if (s3resume) {
void *resume_backup_memory = cbmem_find(CBMEM_ID_RESUME);
if (resume_backup_memory) {
*(u32 *)CBMEM_BOOT_MODE = 2;
*(u32 *)CBMEM_RESUME_BACKUP = (u32)resume_backup_memory;
}
/* Magic for S3 resume */
pci_write_config32(PCI_DEV(0, 0x00, 0), SKPAD, 0xcafed00d);
} else {
pci_write_config32(PCI_DEV(0, 0x00, 0), SKPAD, 0xcafebabe);
}
#endif
}

View File

@ -209,6 +209,7 @@ void intel_sandybridge_finalize_smm(void);
int bridge_silicon_revision(void); int bridge_silicon_revision(void);
void sandybridge_early_initialization(int chipset_type); void sandybridge_early_initialization(int chipset_type);
void sandybridge_late_initialization(void); void sandybridge_late_initialization(void);
void northbridge_romstage_finalize(int s3resume);
/* debugging functions */ /* debugging functions */
void print_pci_devices(void); void print_pci_devices(void);