blob: 46afe532bd71741179fc722b64574637a9c50ca2 [file] [log] [blame]
Felix Held86024952021-02-03 23:44:28 +01001/* SPDX-License-Identifier: GPL-2.0-only */
2
3/* ACPI - create the Fixed ACPI Description Tables (FADT) */
4
5#include <acpi/acpi.h>
Jason Glenesk79542fa2021-03-10 03:50:57 -08006#include <acpi/acpigen.h>
Raul E Rangel12c6a582021-02-10 16:45:49 -07007#include <amdblocks/acpi.h>
Felix Held8f7f4bf2022-08-03 22:10:05 +02008#include <amdblocks/cppc.h>
Jason Glenesk79542fa2021-03-10 03:50:57 -08009#include <amdblocks/cpu.h>
Raul E Rangel12c6a582021-02-10 16:45:49 -070010#include <amdblocks/acpimmio.h>
Raul E Rangel65819cd2021-02-16 10:37:46 -070011#include <amdblocks/ioapic.h>
12#include <arch/ioapic.h>
Raul E Rangel12c6a582021-02-10 16:45:49 -070013#include <arch/smp/mpspec.h>
14#include <console/console.h>
Jason Glenesk79542fa2021-03-10 03:50:57 -080015#include <cpu/amd/cpuid.h>
Raul E Rangel12c6a582021-02-10 16:45:49 -070016#include <soc/acpi.h>
17#include <soc/iomap.h>
18#include <types.h>
19#include "chip.h"
Felix Held86024952021-02-03 23:44:28 +010020
21unsigned long acpi_fill_madt(unsigned long current)
22{
Raul E Rangel65819cd2021-02-16 10:37:46 -070023
Kyösti Mälkki2e65e9c2021-06-16 11:00:40 +030024 current += acpi_create_madt_ioapic_from_hw((acpi_madt_ioapic_t *)current,
25 GNB_IO_APIC_ADDR);
Raul E Rangel12c6a582021-02-10 16:45:49 -070026
Felix Held86024952021-02-03 23:44:28 +010027 return current;
28}
29
30/*
31 * Reference section 5.2.9 Fixed ACPI Description Table (FADT)
32 * in the ACPI 3.0b specification.
33 */
34void acpi_fill_fadt(acpi_fadt_t *fadt)
35{
Jason Gleneskfff318f2021-03-10 02:47:05 -080036 const struct soc_amd_cezanne_config *cfg = config_of_soc();
Raul E Rangel12c6a582021-02-10 16:45:49 -070037
38 printk(BIOS_DEBUG, "pm_base: 0x%04x\n", ACPI_IO_BASE);
39
Raul E Rangel12c6a582021-02-10 16:45:49 -070040 fadt->pm1a_evt_blk = ACPI_PM_EVT_BLK;
41 fadt->pm1a_cnt_blk = ACPI_PM1_CNT_BLK;
42 fadt->pm_tmr_blk = ACPI_PM_TMR_BLK;
43 fadt->gpe0_blk = ACPI_GPE0_BLK;
44
45 fadt->pm1_evt_len = 4; /* 32 bits */
46 fadt->pm1_cnt_len = 2; /* 16 bits */
47 fadt->pm_tmr_len = 4; /* 32 bits */
48 fadt->gpe0_blk_len = 8; /* 64 bits */
49
Felix Held164c5ed2022-10-18 00:11:48 +020050 fill_fadt_extended_pm_regs(fadt);
51
Jason Gleneskfff318f2021-03-10 02:47:05 -080052 fadt->iapc_boot_arch = cfg->common_config.fadt_boot_arch; /* legacy free default */
Raul E Rangel12c6a582021-02-10 16:45:49 -070053 fadt->flags |= ACPI_FADT_WBINVD | /* See table 5-34 ACPI 6.3 spec */
54 ACPI_FADT_C1_SUPPORTED |
55 ACPI_FADT_S4_RTC_WAKE |
56 ACPI_FADT_32BIT_TIMER |
57 ACPI_FADT_PCI_EXPRESS_WAKE |
58 ACPI_FADT_PLATFORM_CLOCK |
59 ACPI_FADT_S4_RTC_VALID |
60 ACPI_FADT_REMOTE_POWER_ON;
Jason Gleneskfff318f2021-03-10 02:47:05 -080061 if (cfg->s0ix_enable)
62 fadt->flags |= ACPI_FADT_LOW_PWR_IDLE_S0;
63
64 fadt->flags |= cfg->common_config.fadt_flags; /* additional board-specific flags */
Felix Held86024952021-02-03 23:44:28 +010065}
Jason Glenesk79542fa2021-03-10 03:50:57 -080066
Felix Heldceafcae2023-03-07 00:00:15 +010067const acpi_cstate_t cstate_cfg_table[] = {
68 [0] = {
69 .ctype = 1,
70 .latency = 1,
71 .power = 0,
72 },
73 [1] = {
74 .ctype = 2,
75 .latency = 0x12,
76 .power = 0,
77 },
78 [2] = {
79 .ctype = 3,
80 .latency = 350,
81 .power = 0,
82 },
83};
84
85const acpi_cstate_t *get_cstate_config_data(size_t *size)
86{
87 *size = ARRAY_SIZE(cstate_cfg_table);
88 return cstate_cfg_table;
89}