1 /* SPDX-License-Identifier: GPL-2.0-only */
4 #include <cpu/x86/smm.h>
5 #include <device/pci_ops.h>
7 void acpi_fill_fadt(acpi_fadt_t
*fadt
)
9 u16 pmbase
= pci_read_config16(pcidev_on_root(0x1f, 0), 0x40) & 0xfffe;
13 if (permanent_smi_handler()) {
14 fadt
->smi_cmd
= APM_CNT
;
15 fadt
->acpi_enable
= APM_CNT_ACPI_ENABLE
;
16 fadt
->acpi_disable
= APM_CNT_ACPI_DISABLE
;
19 fadt
->pm1a_evt_blk
= pmbase
;
20 fadt
->pm1a_cnt_blk
= pmbase
+ 0x4;
21 fadt
->pm_tmr_blk
= pmbase
+ 0x8;
22 fadt
->gpe0_blk
= pmbase
+ 0x28;
24 fadt
->pm1_evt_len
= 4;
25 fadt
->pm1_cnt_len
= 2;
27 fadt
->gpe0_blk_len
= 8;
29 fadt
->p_lvl3_lat
= 85;
30 fadt
->duty_offset
= 1;
33 fadt
->mon_alrm
= 0x00;
34 fadt
->iapc_boot_arch
= ACPI_FADT_LEGACY_DEVICES
| ACPI_FADT_8042
;
36 fadt
->flags
|= ACPI_FADT_WBINVD
| ACPI_FADT_C1_SUPPORTED
|
37 ACPI_FADT_C2_MP_SUPPORTED
| ACPI_FADT_SLEEP_BUTTON
|
38 ACPI_FADT_S4_RTC_WAKE
| ACPI_FADT_PLATFORM_CLOCK
;
40 fadt
->x_pm1a_evt_blk
.space_id
= ACPI_ADDRESS_SPACE_IO
;
41 fadt
->x_pm1a_evt_blk
.bit_width
= fadt
->pm1_evt_len
* 8;
42 fadt
->x_pm1a_evt_blk
.bit_offset
= 0;
43 fadt
->x_pm1a_evt_blk
.access_size
= ACPI_ACCESS_SIZE_UNDEFINED
;
44 fadt
->x_pm1a_evt_blk
.addrl
= fadt
->pm1a_evt_blk
;
45 fadt
->x_pm1a_evt_blk
.addrh
= 0x0;
47 fadt
->x_pm1a_cnt_blk
.space_id
= ACPI_ADDRESS_SPACE_IO
;
48 fadt
->x_pm1a_cnt_blk
.bit_width
= fadt
->pm1_cnt_len
* 8;
49 fadt
->x_pm1a_cnt_blk
.bit_offset
= 0;
50 fadt
->x_pm1a_cnt_blk
.access_size
= ACPI_ACCESS_SIZE_UNDEFINED
;
51 fadt
->x_pm1a_cnt_blk
.addrl
= fadt
->pm1a_cnt_blk
;
52 fadt
->x_pm1a_cnt_blk
.addrh
= 0x0;
54 fadt
->x_pm_tmr_blk
.space_id
= ACPI_ADDRESS_SPACE_IO
;
55 fadt
->x_pm_tmr_blk
.bit_width
= fadt
->pm_tmr_len
* 8;
56 fadt
->x_pm_tmr_blk
.bit_offset
= 0;
57 fadt
->x_pm_tmr_blk
.access_size
= ACPI_ACCESS_SIZE_UNDEFINED
;
58 fadt
->x_pm_tmr_blk
.addrl
= fadt
->pm_tmr_blk
;
59 fadt
->x_pm_tmr_blk
.addrh
= 0x0;
61 fadt
->x_gpe0_blk
.space_id
= ACPI_ADDRESS_SPACE_IO
;
62 fadt
->x_gpe0_blk
.bit_width
= fadt
->gpe0_blk_len
* 8;
63 fadt
->x_gpe0_blk
.bit_offset
= 0;
64 fadt
->x_gpe0_blk
.access_size
= ACPI_ACCESS_SIZE_UNDEFINED
;
65 fadt
->x_gpe0_blk
.addrl
= fadt
->gpe0_blk
;
66 fadt
->x_gpe0_blk
.addrh
= 0x0;