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:
parent
dca2c468fc
commit
c845b43f0a
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue