2 * ACPI - create the Fixed ACPI Description Tables (FADT)
3 * (C) Copyright 2005 Stefan Reinauer <stepan@openbios.org>
5 /*============================================================================
6 Copyright 2005 ADVANCED MICRO DEVICES, INC. All Rights Reserved.
7 This software and any related documentation (the "Materials") are the
8 confidential proprietary information of AMD. Unless otherwise provided in a
9 software agreement specifically licensing the Materials, the Materials are
10 provided in confidence and may not be distributed, modified, or reproduced in
11 whole or in part by any means.
12 LIMITATION OF LIABILITY: THE MATERIALS ARE PROVIDED "AS IS" WITHOUT ANY
13 EXPRESS OR IMPLIED WARRANTY OF ANY KIND, INCLUDING BUT NOT LIMITED TO
14 WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT, TITLE, FITNESS FOR ANY
15 PARTICULAR PURPOSE, OR WARRANTIES ARISING FROM CONDUCT, COURSE OF DEALING, OR
16 USAGE OF TRADE. IN NO EVENT SHALL AMD OR ITS LICENSORS BE LIABLE FOR ANY
17 DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF PROFITS,
18 BUSINESS INTERRUPTION, OR LOSS OF INFORMATION) ARISING OUT OF THE USE OF OR
19 INABILITY TO USE THE MATERIALS, EVEN IF AMD HAS BEEN ADVISED OF THE
20 POSSIBILITY OF SUCH DAMAGES. BECAUSE SOME JURISDICTIONS PROHIBIT THE EXCLUSION
21 OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES, THE ABOVE
22 LIMITATION MAY NOT APPLY TO YOU.
23 AMD does not assume any responsibility for any errors which may appear in the
24 Materials nor any responsibility to support or update the Materials. AMD
25 retains the right to modify the Materials at any time, without notice, and is
26 not obligated to provide such modified Materials to you.
27 NO SUPPORT OBLIGATION: AMD is not obligated to furnish, support, or make any
28 further information, software, technical information, know-how, or show-how
30 U.S. GOVERNMENT RESTRICTED RIGHTS: The Materials are provided with "RESTRICTED
31 RIGHTS." Use, duplication, or disclosure by the Government is subject to the
32 restrictions as set forth in FAR 52.227-14 and DFAR 252.227-7013, et seq., or
33 its successor. Use of the Materials by the Government constitutes
34 acknowledgement of AMD's proprietary rights in them.
35 ============================================================================*/
36 // 2005.9 serengeti support
43 #include <console/console.h>
44 #include <arch/acpi.h>
46 extern unsigned pm_base; /* pm_base should be set in sb acpi */
48 void acpi_create_fadt(acpi_fadt_t *fadt,acpi_facs_t *facs,void *dsdt){
50 acpi_header_t *header=&(fadt->header);
52 printk_debug("pm_base: 0x%04x\n", pm_base);
54 /* Prepare the header */
55 memset((void *)fadt,0,sizeof(acpi_fadt_t));
56 memcpy(header->signature,"FACP",4);
59 memcpy(header->oem_id,OEM_ID,6);
60 memcpy(header->oem_table_id,"LXBACPI ",8);
61 memcpy(header->asl_compiler_id,ASLC,4);
62 header->asl_compiler_revision=0;
64 fadt->firmware_ctrl=(u32)facs;
65 fadt->dsdt= (u32)dsdt;
67 // 3=Workstation,4=Enterprise Server, 7=Performance Server
68 fadt->preferred_pm_profile=0x03;
70 // disable system management mode by setting to 0:
71 fadt->smi_cmd = 0;//pm_base+0x2f;
72 fadt->acpi_enable = 0xf0;
73 fadt->acpi_disable = 0xf1;
74 fadt->s4bios_req = 0x0;
75 fadt->pstate_cnt = 0xe2;
77 fadt->pm1a_evt_blk = pm_base;
78 fadt->pm1b_evt_blk = 0x0000;
79 fadt->pm1a_cnt_blk = pm_base+0x04;
80 fadt->pm1b_cnt_blk = 0x0000;
81 fadt->pm2_cnt_blk = 0x0000;
82 fadt->pm_tmr_blk = pm_base+0x08;
83 fadt->gpe0_blk = pm_base+0x20;
84 fadt->gpe1_blk = pm_base+0xb0;
86 fadt->pm1_evt_len = 4;
87 fadt->pm1_cnt_len = 2;
88 fadt->pm2_cnt_len = 0;
90 fadt->gpe0_blk_len = 4;
91 fadt->gpe1_blk_len = 8;
95 fadt->p_lvl2_lat = 101;
96 fadt->p_lvl3_lat = 1001;
98 fadt->flush_stride = 0;
99 fadt->duty_offset = 1;
100 fadt->duty_width = 3;
101 fadt->day_alrm = 0; // 0x7d these have to be
102 fadt->mon_alrm = 0; // 0x7e added to cmos.layout
103 fadt->century = 0; // 0x7f to make rtc alrm work
104 fadt->iapc_boot_arch = 0x3; // See table 5-11
109 fadt->reset_reg.space_id = 1;
110 fadt->reset_reg.bit_width = 8;
111 fadt->reset_reg.bit_offset = 0;
112 fadt->reset_reg.resv = 0;
113 fadt->reset_reg.addrl = 0xcf9;
114 fadt->reset_reg.addrh = 0x0;
116 fadt->reset_value = 6;
117 fadt->x_firmware_ctl_l = (u32)facs;
118 fadt->x_firmware_ctl_h = 0;
119 fadt->x_dsdt_l = (u32)dsdt;
122 fadt->x_pm1a_evt_blk.space_id = 1;
123 fadt->x_pm1a_evt_blk.bit_width = 32;
124 fadt->x_pm1a_evt_blk.bit_offset = 0;
125 fadt->x_pm1a_evt_blk.resv = 0;
126 fadt->x_pm1a_evt_blk.addrl = pm_base;
127 fadt->x_pm1a_evt_blk.addrh = 0x0;
129 fadt->x_pm1b_evt_blk.space_id = 1;
130 fadt->x_pm1b_evt_blk.bit_width = 4;
131 fadt->x_pm1b_evt_blk.bit_offset = 0;
132 fadt->x_pm1b_evt_blk.resv = 0;
133 fadt->x_pm1b_evt_blk.addrl = 0x0;
134 fadt->x_pm1b_evt_blk.addrh = 0x0;
137 fadt->x_pm1a_cnt_blk.space_id = 1;
138 fadt->x_pm1a_cnt_blk.bit_width = 16;
139 fadt->x_pm1a_cnt_blk.bit_offset = 0;
140 fadt->x_pm1a_cnt_blk.resv = 0;
141 fadt->x_pm1a_cnt_blk.addrl = pm_base+4;
142 fadt->x_pm1a_cnt_blk.addrh = 0x0;
144 fadt->x_pm1b_cnt_blk.space_id = 1;
145 fadt->x_pm1b_cnt_blk.bit_width = 2;
146 fadt->x_pm1b_cnt_blk.bit_offset = 0;
147 fadt->x_pm1b_cnt_blk.resv = 0;
148 fadt->x_pm1b_cnt_blk.addrl = 0x0;
149 fadt->x_pm1b_cnt_blk.addrh = 0x0;
152 fadt->x_pm2_cnt_blk.space_id = 1;
153 fadt->x_pm2_cnt_blk.bit_width = 0;
154 fadt->x_pm2_cnt_blk.bit_offset = 0;
155 fadt->x_pm2_cnt_blk.resv = 0;
156 fadt->x_pm2_cnt_blk.addrl = 0x0;
157 fadt->x_pm2_cnt_blk.addrh = 0x0;
160 fadt->x_pm_tmr_blk.space_id = 1;
161 fadt->x_pm_tmr_blk.bit_width = 32;
162 fadt->x_pm_tmr_blk.bit_offset = 0;
163 fadt->x_pm_tmr_blk.resv = 0;
164 fadt->x_pm_tmr_blk.addrl = pm_base+0x08;
165 fadt->x_pm_tmr_blk.addrh = 0x0;
168 fadt->x_gpe0_blk.space_id = 1;
169 fadt->x_gpe0_blk.bit_width = 32;
170 fadt->x_gpe0_blk.bit_offset = 0;
171 fadt->x_gpe0_blk.resv = 0;
172 fadt->x_gpe0_blk.addrl = pm_base+0x20;
173 fadt->x_gpe0_blk.addrh = 0x0;
176 fadt->x_gpe1_blk.space_id = 1;
177 fadt->x_gpe1_blk.bit_width = 64;
178 fadt->x_gpe1_blk.bit_offset = 16;
179 fadt->x_gpe1_blk.resv = 0;
180 fadt->x_gpe1_blk.addrl = pm_base+0xb0;
181 fadt->x_gpe1_blk.addrh = 0x0;
183 header->checksum = acpi_checksum((void *)fadt, sizeof(acpi_fadt_t));