blob: 54ebcbd7a549a990f8d9f05ce827159fc718910b [file] [log] [blame]
Angel Pons89ab2502020-04-03 01:22:28 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Timothy Pearson4b373c92015-04-05 17:54:08 -05002
Kyösti Mälkkif1b58b72019-03-01 13:43:02 +02003#include <device/pci_ops.h>
Furquan Shaikh76cedd22020-05-02 10:24:23 -07004#include <acpi/acpi.h>
Timothy Pearson4b373c92015-04-05 17:54:08 -05005#include <cpu/x86/smm.h>
Elyes HAOUAS26071aa2019-02-15 08:21:33 +01006#include <version.h>
Angel Pons547fe822020-06-21 16:03:07 +02007#include <southbridge/intel/common/pmutil.h>
Timothy Pearson4b373c92015-04-05 17:54:08 -05008
Kyösti Mälkki64e07eb2020-05-30 14:50:50 +03009void acpi_fill_fadt(acpi_fadt_t *fadt)
Timothy Pearson4b373c92015-04-05 17:54:08 -050010{
Kyösti Mälkkic70eed12018-05-22 02:18:00 +030011 u16 pmbase = pci_read_config16(pcidev_on_root(0x1f, 0), 0x40) & 0xfffe;
Timothy Pearson4b373c92015-04-05 17:54:08 -050012
Timothy Pearson4b373c92015-04-05 17:54:08 -050013 fadt->sci_int = 0x9;
Kyösti Mälkki9145ce22019-11-23 07:23:40 +020014
Kyösti Mälkki0a9e72e2019-08-11 01:22:28 +030015 if (permanent_smi_handler()) {
Kyösti Mälkki9145ce22019-11-23 07:23:40 +020016 fadt->smi_cmd = APM_CNT;
17 fadt->acpi_enable = APM_CNT_ACPI_ENABLE;
18 fadt->acpi_disable = APM_CNT_ACPI_DISABLE;
Kyösti Mälkki9145ce22019-11-23 07:23:40 +020019 }
Timothy Pearson4b373c92015-04-05 17:54:08 -050020
21 fadt->pm1a_evt_blk = pmbase;
Angel Pons547fe822020-06-21 16:03:07 +020022 fadt->pm1a_cnt_blk = pmbase + PM1_CNT;
Angel Pons547fe822020-06-21 16:03:07 +020023 fadt->pm2_cnt_blk = pmbase + PM2_CNT;
24 fadt->pm_tmr_blk = pmbase + PM1_TMR;
25 fadt->gpe0_blk = pmbase + GPE0_STS;
Timothy Pearson4b373c92015-04-05 17:54:08 -050026
27 fadt->pm1_evt_len = 4;
28 fadt->pm1_cnt_len = 2; /* Upper word is reserved and
29 Linux complains about 32 bit. */
30 fadt->pm2_cnt_len = 1;
31 fadt->pm_tmr_len = 4;
32 fadt->gpe0_blk_len = 16;
Timothy Pearson4b373c92015-04-05 17:54:08 -050033 fadt->p_lvl2_lat = 1;
34 fadt->p_lvl3_lat = 0x39;
Timothy Pearson4b373c92015-04-05 17:54:08 -050035 fadt->duty_offset = 1;
36 fadt->duty_width = 3;
37 fadt->day_alrm = 0xd;
38 fadt->mon_alrm = 0x00;
Paul Menzel8ca2af12019-02-08 15:19:20 +010039 fadt->iapc_boot_arch = ACPI_FADT_LEGACY_FREE;
Angel Ponsa208c6c2020-07-13 00:02:34 +020040 fadt->flags |= ACPI_FADT_WBINVD | ACPI_FADT_C1_SUPPORTED |
Timothy Pearson4b373c92015-04-05 17:54:08 -050041 ACPI_FADT_SLEEP_BUTTON | ACPI_FADT_S4_RTC_WAKE |
Angel Pons79572e42020-07-13 00:17:43 +020042 ACPI_FADT_DOCKING_SUPPORTED | ACPI_FADT_PLATFORM_CLOCK;
Timothy Pearson4b373c92015-04-05 17:54:08 -050043
Angel Pons013711b2020-06-21 18:31:30 +020044 fadt->x_pm1a_evt_blk.space_id = ACPI_ADDRESS_SPACE_IO;
Elyes Haouasa6e053822022-10-11 12:55:36 +020045 fadt->x_pm1a_evt_blk.bit_width = fadt->pm1_evt_len * 8;
Timothy Pearson4b373c92015-04-05 17:54:08 -050046 fadt->x_pm1a_evt_blk.bit_offset = 0;
Angel Pons12a4d052020-07-14 01:31:27 +020047 fadt->x_pm1a_evt_blk.access_size = ACPI_ACCESS_SIZE_WORD_ACCESS;
Felix Held769b6572022-10-14 18:32:52 +020048 fadt->x_pm1a_evt_blk.addrl = fadt->pm1a_evt_blk;
Timothy Pearson4b373c92015-04-05 17:54:08 -050049 fadt->x_pm1a_evt_blk.addrh = 0x0;
50
Angel Pons013711b2020-06-21 18:31:30 +020051 fadt->x_pm1a_cnt_blk.space_id = ACPI_ADDRESS_SPACE_IO;
Elyes Haouas70080852022-10-11 13:09:35 +020052 fadt->x_pm1a_cnt_blk.bit_width = fadt->pm1_cnt_len * 8;
Timothy Pearson4b373c92015-04-05 17:54:08 -050053 fadt->x_pm1a_cnt_blk.bit_offset = 0;
Patrick Rudolphc02bda02020-02-28 10:19:41 +010054 fadt->x_pm1a_cnt_blk.access_size = ACPI_ACCESS_SIZE_WORD_ACCESS;
Elyes Haouasc60f3b22022-10-11 14:02:27 +020055 fadt->x_pm1a_cnt_blk.addrl = fadt->pm1a_cnt_blk;
Timothy Pearson4b373c92015-04-05 17:54:08 -050056 fadt->x_pm1a_cnt_blk.addrh = 0x0;
57
Angel Pons013711b2020-06-21 18:31:30 +020058 fadt->x_pm2_cnt_blk.space_id = ACPI_ADDRESS_SPACE_IO;
Elyes Haouas85f87e82022-10-11 13:45:44 +020059 fadt->x_pm2_cnt_blk.bit_width = fadt->pm2_cnt_len * 8;
Timothy Pearson4b373c92015-04-05 17:54:08 -050060 fadt->x_pm2_cnt_blk.bit_offset = 0;
Patrick Rudolphc02bda02020-02-28 10:19:41 +010061 fadt->x_pm2_cnt_blk.access_size = ACPI_ACCESS_SIZE_BYTE_ACCESS;
Felix Held96fa2372022-10-14 18:41:03 +020062 fadt->x_pm2_cnt_blk.addrl = fadt->pm2_cnt_blk;
Timothy Pearson4b373c92015-04-05 17:54:08 -050063 fadt->x_pm2_cnt_blk.addrh = 0x0;
64
Angel Pons013711b2020-06-21 18:31:30 +020065 fadt->x_pm_tmr_blk.space_id = ACPI_ADDRESS_SPACE_IO;
Elyes Haouas501b71e2022-10-11 13:15:37 +020066 fadt->x_pm_tmr_blk.bit_width = fadt->pm_tmr_len * 8;
Timothy Pearson4b373c92015-04-05 17:54:08 -050067 fadt->x_pm_tmr_blk.bit_offset = 0;
Patrick Rudolphc02bda02020-02-28 10:19:41 +010068 fadt->x_pm_tmr_blk.access_size = ACPI_ACCESS_SIZE_DWORD_ACCESS;
Elyes Haouas987f1f42022-10-11 13:56:30 +020069 fadt->x_pm_tmr_blk.addrl = fadt->pm_tmr_blk;
Timothy Pearson4b373c92015-04-05 17:54:08 -050070 fadt->x_pm_tmr_blk.addrh = 0x0;
71
Angel Pons013711b2020-06-21 18:31:30 +020072 fadt->x_gpe0_blk.space_id = ACPI_ADDRESS_SPACE_IO;
Elyes Haouasbaec5602022-10-11 13:20:43 +020073 fadt->x_gpe0_blk.bit_width = fadt->gpe0_blk_len * 8;
Timothy Pearson4b373c92015-04-05 17:54:08 -050074 fadt->x_gpe0_blk.bit_offset = 0;
Patrick Rudolphc02bda02020-02-28 10:19:41 +010075 fadt->x_gpe0_blk.access_size = ACPI_ACCESS_SIZE_BYTE_ACCESS;
Elyes Haouasc929f092022-10-11 13:40:51 +020076 fadt->x_gpe0_blk.addrl = fadt->gpe0_blk;
Timothy Pearson4b373c92015-04-05 17:54:08 -050077 fadt->x_gpe0_blk.addrh = 0x0;
Timothy Pearson4b373c92015-04-05 17:54:08 -050078}