coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
fadt.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 /*
4  * ACPI - create the Fixed ACPI Description Tables (FADT)
5  */
6 
7 #include <console/console.h>
8 #include <acpi/acpi.h>
9 #include <arch/io.h>
10 #include <device/device.h>
11 #include <version.h>
12 
13 #include "SBPLATFORM.h"
14 
15 #ifndef FADT_BOOT_ARCH
16 #if LEGACY_FREE
17  #define FADT_BOOT_ARCH ACPI_FADT_LEGACY_FREE
18 #else
19  #define FADT_BOOT_ARCH (ACPI_FADT_LEGACY_DEVICES | ACPI_FADT_8042)
20 #endif
21 #endif
22 
23 /*
24  * Reference section 5.2.9 Fixed ACPI Description Table (FADT)
25  * in the ACPI 3.0b specification.
26  */
28 {
29  u16 val = 0;
30 
31  printk(BIOS_DEBUG, "ACPI_BLK_BASE: 0x%04x\n", ACPI_BLK_BASE);
32 
33  fadt->sci_int = 9; /* HUDSON 1 - IRQ 09 - ACPI SCI */
34 
35  val = PM1_EVT_BLK_ADDRESS;
36  WritePMIO(SB_PMIOA_REG60, AccWidthUint16, &val);
37  val = PM1_CNT_BLK_ADDRESS;
38  WritePMIO(SB_PMIOA_REG62, AccWidthUint16, &val);
39  val = PM1_TMR_BLK_ADDRESS;
40  WritePMIO(SB_PMIOA_REG64, AccWidthUint16, &val);
41  val = GPE0_BLK_ADDRESS;
42  WritePMIO(SB_PMIOA_REG68, AccWidthUint16, &val);
43 
44  /* CpuControl is in \_PR.CP00, 6 bytes */
45  val = CPU_CNT_BLK_ADDRESS;
46  WritePMIO(SB_PMIOA_REG66, AccWidthUint16, &val);
47  val = 0;
48  WritePMIO(SB_PMIOA_REG6A, AccWidthUint16, &val);
49  val = ACPI_PMA_CNT_BLK_ADDRESS;
50  WritePMIO(SB_PMIOA_REG6E, AccWidthUint16, &val);
51 
52  /* AcpiDecodeEnable, When set, SB uses the contents of the
53  * PM registers at index 60-6B to decode ACPI I/O address.
54  * AcpiSmiEn & SmiCmdEn*/
55  val = BIT0 | BIT1 | BIT2 | BIT4;
56  WritePMIO(SB_PMIOA_REG74, AccWidthUint16, &val);
57 
58  /* RTC_En_En, TMR_En_En, GBL_EN_EN */
59  outl(0x1, PM1_CNT_BLK_ADDRESS); /* set SCI_EN */
60  fadt->pm1a_evt_blk = PM1_EVT_BLK_ADDRESS;
61  fadt->pm1a_cnt_blk = PM1_CNT_BLK_ADDRESS;
62  fadt->pm2_cnt_blk = ACPI_PMA_CNT_BLK_ADDRESS;
63  fadt->pm_tmr_blk = PM1_TMR_BLK_ADDRESS;
64  fadt->gpe0_blk = GPE0_BLK_ADDRESS;
65 
66  fadt->pm1_evt_len = 4; /* 32 bits */
67  fadt->pm1_cnt_len = 2; /* 16 bits */
68  fadt->pm2_cnt_len = 1; /* 8 bits */
69  fadt->pm_tmr_len = 4; /* 32 bits */
70  fadt->gpe0_blk_len = 8; /* 64 bits */
71 
74  fadt->duty_offset = 1; /* CLK_VAL bits 3:1 */
75  fadt->duty_width = 3; /* CLK_VAL bits 3:1 */
76  fadt->day_alrm = 0; /* 0x7d these have to be */
77  fadt->mon_alrm = 0; /* 0x7e added to cmos.layout */
78  fadt->iapc_boot_arch = FADT_BOOT_ARCH; /* See table 5-10 */
79  fadt->res2 = 0; /* reserved, MUST be 0 ACPI 3.0 */
80  fadt->flags |= ACPI_FADT_WBINVD | /* See table 5-10 ACPI 3.0a spec */
88 
89  fadt->ARM_boot_arch = 0; /* Must be zero if ACPI Revision <= 5.0 */
90 
92  fadt->x_pm1a_evt_blk.bit_width = 32;
93  fadt->x_pm1a_evt_blk.bit_offset = 0;
95  fadt->x_pm1a_evt_blk.addrl = PM1_EVT_BLK_ADDRESS;
96  fadt->x_pm1a_evt_blk.addrh = 0x0;
97 
99  fadt->x_pm1a_cnt_blk.bit_width = 16;
100  fadt->x_pm1a_cnt_blk.bit_offset = 0;
102  fadt->x_pm1a_cnt_blk.addrl = PM1_CNT_BLK_ADDRESS;
103  fadt->x_pm1a_cnt_blk.addrh = 0x0;
104 
106  fadt->x_pm2_cnt_blk.bit_width = 8; /* Hudson 1 Pm2Control is 8 bits */
107  fadt->x_pm2_cnt_blk.bit_offset = 0;
109  fadt->x_pm2_cnt_blk.addrl = ACPI_PMA_CNT_BLK_ADDRESS;
110  fadt->x_pm2_cnt_blk.addrh = 0x0;
111 
113  fadt->x_pm_tmr_blk.bit_width = 32;
114  fadt->x_pm_tmr_blk.bit_offset = 0;
116  fadt->x_pm_tmr_blk.addrl = PM1_TMR_BLK_ADDRESS;
117  fadt->x_pm_tmr_blk.addrh = 0x0;
118 
120  fadt->x_gpe0_blk.bit_width = 64; /* EventStatus + Event Enable */
121  fadt->x_gpe0_blk.bit_offset = 0;
123  fadt->x_gpe0_blk.addrl = GPE0_BLK_ADDRESS;
124  fadt->x_gpe0_blk.addrh = 0x0;
125 }
@ AccWidthUint16
Definition: AmdSbLib.h:137
#define BIT1
Definition: Ioh.h:8
#define BIT2
Definition: Ioh.h:9
#define BIT4
Definition: Ioh.h:11
#define BIT0
Definition: Ioh.h:7
#define printk(level,...)
Definition: stdlib.h:16
void outl(u32 val, u16 port)
#define ACPI_FADT_S4_RTC_WAKE
Definition: acpi.h:799
#define ACPI_FADT_32BIT_TIMER
Definition: acpi.h:800
#define ACPI_FADT_C2_NOT_SUPPORTED
Definition: acpi.h:788
#define ACPI_ACCESS_SIZE_UNDEFINED
Definition: acpi.h:126
#define ACPI_ACCESS_SIZE_WORD_ACCESS
Definition: acpi.h:128
#define ACPI_FADT_S4_RTC_VALID
Definition: acpi.h:808
#define ACPI_ACCESS_SIZE_DWORD_ACCESS
Definition: acpi.h:129
#define ACPI_FADT_SLEEP_BUTTON
Definition: acpi.h:797
#define ACPI_FADT_REMOTE_POWER_ON
Definition: acpi.h:809
#define ACPI_FADT_WBINVD
Definition: acpi.h:792
#define ACPI_FADT_PCI_EXPRESS_WAKE
Definition: acpi.h:806
#define ACPI_FADT_C1_SUPPORTED
Definition: acpi.h:794
#define ACPI_ACCESS_SIZE_BYTE_ACCESS
Definition: acpi.h:127
#define ACPI_FADT_C3_NOT_SUPPORTED
Definition: acpi.h:789
#define ACPI_ADDRESS_SPACE_IO
Definition: acpi.h:105
#define BIOS_DEBUG
BIOS_DEBUG - Verbose output.
Definition: loglevel.h:128
void acpi_fill_fadt(acpi_fadt_t *fadt)
Definition: fadt.c:10
#define FADT_BOOT_ARCH
Definition: fadt.c:19
uint16_t u16
Definition: stdint.h:48
u32 pm1a_cnt_blk
Definition: acpi.h:721
u32 pm_tmr_blk
Definition: acpi.h:724
u8 duty_offset
Definition: acpi.h:739
u8 pm1_evt_len
Definition: acpi.h:727
u16 ARM_boot_arch
Definition: acpi.h:749
u32 gpe0_blk
Definition: acpi.h:725
acpi_addr_t x_gpe0_blk
Definition: acpi.h:761
acpi_addr_t x_pm2_cnt_blk
Definition: acpi.h:759
u8 pm_tmr_len
Definition: acpi.h:730
u8 day_alrm
Definition: acpi.h:741
u8 duty_width
Definition: acpi.h:740
u8 pm2_cnt_len
Definition: acpi.h:729
u8 pm1_cnt_len
Definition: acpi.h:728
acpi_addr_t x_pm1a_evt_blk
Definition: acpi.h:755
u32 pm1a_evt_blk
Definition: acpi.h:719
acpi_addr_t x_pm1a_cnt_blk
Definition: acpi.h:757
u16 p_lvl2_lat
Definition: acpi.h:735
u8 gpe0_blk_len
Definition: acpi.h:731
u16 p_lvl3_lat
Definition: acpi.h:736
u8 res2
Definition: acpi.h:745
u32 flags
Definition: acpi.h:746
u16 iapc_boot_arch
Definition: acpi.h:744
acpi_addr_t x_pm_tmr_blk
Definition: acpi.h:760
u16 sci_int
Definition: acpi.h:713
u32 pm2_cnt_blk
Definition: acpi.h:723
u8 mon_alrm
Definition: acpi.h:742
u8 bit_offset
Definition: acpi.h:98
u8 bit_width
Definition: acpi.h:97
u8 access_size
Definition: acpi.h:99
u8 val
Definition: sys.c:300