blob: 6be0181578bb0824c692e321ee6fa62968b39f24 [file] [log] [blame]
Angel Ponsaf4ecc22020-04-05 13:21:45 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Matt DeVillier89683c02015-12-25 01:15:41 -06002
Arthur Heymansf7d1c8d2018-11-28 12:22:59 +01003/* Generated by acpigen */
4External (\PPKG, MethodObj)
5
Matt DeVillier89683c02015-12-25 01:15:41 -06006#include "../thermal.h"
7
8// Thermal Zone
9
Martin Rotha50b1f92018-05-06 18:13:19 -050010#define HAVE_THERMALZONE
Matt DeVillier89683c02015-12-25 01:15:41 -060011Scope (\_TZ)
12{
13 ThermalZone (THRM)
14 {
15 Name (_TC1, 0x02)
16 Name (_TC2, 0x05)
17
18 // Thermal zone polling frequency: 10 seconds
19 Name (_TZP, 100)
20
21 // Thermal sampling period for passive cooling: 2 seconds
22 Name (_TSP, 20)
23
24 Name (F0ON, FAN0_2_THRESHOLD_ON)
25 Name (F0OF, FAN0_2_THRESHOLD_OFF)
26 Name (F0PW, FAN0_2_PWM)
27 Name (F1ON, FAN1_2_THRESHOLD_ON)
28 Name (F1OF, FAN1_2_THRESHOLD_OFF)
29 Name (F1PW, FAN1_2_PWM)
30 Name (F2ON, FAN2_2_THRESHOLD_ON)
31 Name (F2OF, FAN2_2_THRESHOLD_OFF)
32 Name (F2PW, FAN2_2_PWM)
33 Name (F3ON, FAN3_2_THRESHOLD_ON)
34 Name (F3OF, FAN3_2_THRESHOLD_OFF)
35 Name (F3PW, FAN3_2_PWM)
36 Name (F4PW, FAN4_2_PWM)
37 Name (THTB, 2)
38
39 // Convert from Degrees C to 1/10 Kelvin for ACPI
40 Method (CTOK, 1) {
41 // 10th of Degrees C
Felix Singerfc127472022-01-01 23:49:26 +010042 Local0 = Arg0 * 10
Matt DeVillier89683c02015-12-25 01:15:41 -060043
44 // Convert to Kelvin
Felix Singerfe62d692021-12-30 01:35:49 +010045 Local0 += 2732
Matt DeVillier89683c02015-12-25 01:15:41 -060046
47 Return (Local0)
48 }
49
50 // Thermal Table 0
51 Method (TTB0, 0) {
Felix Singer69b48d82022-12-12 05:00:01 +010052 F0ON = FAN0_0_THRESHOLD_ON
53 F0OF = FAN0_0_THRESHOLD_OFF
54 F0PW = FAN0_0_PWM
55 F1ON = FAN1_0_THRESHOLD_ON
56 F1OF = FAN1_0_THRESHOLD_OFF
57 F1PW = FAN1_0_PWM
58 F2ON = FAN2_0_THRESHOLD_ON
59 F2OF = FAN2_0_THRESHOLD_OFF
60 F2PW = FAN2_0_PWM
61 F3ON = FAN3_0_THRESHOLD_ON
62 F3OF = FAN3_0_THRESHOLD_OFF
63 F3PW = FAN3_0_PWM
64 F4PW = FAN4_0_PWM
65 THTB = 0
Matt DeVillier89683c02015-12-25 01:15:41 -060066 }
67
68 // Thermal Table 1
69 Method (TTB1, 0) {
Felix Singer69b48d82022-12-12 05:00:01 +010070 F0ON = FAN0_1_THRESHOLD_ON
71 F0OF = FAN0_1_THRESHOLD_OFF
72 F0PW = FAN0_1_PWM
73 F1ON = FAN1_1_THRESHOLD_ON
74 F1OF = FAN1_1_THRESHOLD_OFF
75 F1PW = FAN1_1_PWM
76 F2ON = FAN2_1_THRESHOLD_ON
77 F2OF = FAN2_1_THRESHOLD_OFF
78 F2PW = FAN2_1_PWM
79 F3ON = FAN3_1_THRESHOLD_ON
80 F3OF = FAN3_1_THRESHOLD_OFF
81 F3PW = FAN3_1_PWM
82 F4PW = FAN4_1_PWM
83 THTB = 1
Matt DeVillier89683c02015-12-25 01:15:41 -060084 }
85
86 // Thermal Table 2
87 Method (TTB2, 0) {
Felix Singer69b48d82022-12-12 05:00:01 +010088 F0ON = FAN0_2_THRESHOLD_ON
89 F0OF = FAN0_2_THRESHOLD_OFF
90 F0PW = FAN0_2_PWM
91 F1ON = FAN1_2_THRESHOLD_ON
92 F1OF = FAN1_2_THRESHOLD_OFF
93 F1PW = FAN1_2_PWM
94 F2ON = FAN2_2_THRESHOLD_ON
95 F2OF = FAN2_2_THRESHOLD_OFF
96 F2PW = FAN2_2_PWM
97 F3ON = FAN3_2_THRESHOLD_ON
98 F3OF = FAN3_2_THRESHOLD_OFF
99 F3PW = FAN3_2_PWM
100 F4PW = FAN4_2_PWM
101 THTB = 2
Matt DeVillier89683c02015-12-25 01:15:41 -0600102 }
103
104 // Update Thermal Table
105 Method (UPTB, 0) {
106 // Get System Temperature via SuperIO TMPIN2
Felix Singer69b48d82022-12-12 05:00:01 +0100107 Local0 = \_SB.PCI0.LPCB.SIO.ENVC.TIN2
Matt DeVillier89683c02015-12-25 01:15:41 -0600108
109 // Check for "no reading available
Felix Singerb6cbda22022-12-11 22:49:56 +0100110 If (Local0 == 0x80) {
Felix Singer69b48d82022-12-12 05:00:01 +0100111 Local0 = THERMAL_POLICY_0_THRESHOLD_ON
Matt DeVillier89683c02015-12-25 01:15:41 -0600112 }
113
114 // Check for invalid readings
Felix Singerb6cbda22022-12-11 22:49:56 +0100115 If (Local0 == 255 || Local0 == 0) {
Felix Singer69b48d82022-12-12 05:00:01 +0100116 Local0 = THERMAL_POLICY_0_THRESHOLD_ON
Matt DeVillier89683c02015-12-25 01:15:41 -0600117 }
118
Felix Singerb6cbda22022-12-11 22:49:56 +0100119 If (THTB == 2) {
Felix Singer6c848322022-01-02 02:28:21 +0100120 If (Local0 >= THERMAL_POLICY_0_THRESHOLD_ON) {
Matt DeVillier89683c02015-12-25 01:15:41 -0600121 TTB0 ()
Felix Singer6c848322022-01-02 02:28:21 +0100122 } ElseIf (Local0 >= THERMAL_POLICY_1_THRESHOLD_ON) {
Matt DeVillier89683c02015-12-25 01:15:41 -0600123 TTB1 ()
124 }
Felix Singerb6cbda22022-12-11 22:49:56 +0100125 } ElseIf (THTB == 1) {
Felix Singer6c848322022-01-02 02:28:21 +0100126 If (Local0 >= THERMAL_POLICY_0_THRESHOLD_ON) {
Matt DeVillier89683c02015-12-25 01:15:41 -0600127 TTB0 ()
Felix Singer9a37ae62022-12-12 00:21:53 +0100128 } ElseIf (Local0 <= THERMAL_POLICY_1_THRESHOLD_OFF) {
Matt DeVillier89683c02015-12-25 01:15:41 -0600129 TTB2 ()
130 }
131 } Else {
Felix Singerc0ce14c2022-01-02 01:47:26 +0100132 If (Local0 < THERMAL_POLICY_1_THRESHOLD_OFF) {
Matt DeVillier89683c02015-12-25 01:15:41 -0600133 TTB2 ()
Felix Singer9a37ae62022-12-12 00:21:53 +0100134 } ElseIf (Local0 <= THERMAL_POLICY_0_THRESHOLD_OFF) {
Matt DeVillier89683c02015-12-25 01:15:41 -0600135 TTB1 ()
136 }
137 }
138 }
139
140 // Threshold for OS to shutdown
141 Method (_CRT, 0, Serialized)
142 {
143 Return (CTOK (\TCRT))
144 }
145
146 // Threshold for passive cooling
147 Method (_PSV, 0, Serialized)
148 {
149 Return (CTOK (\TPSV))
150 }
151
152 // Processors used for passive cooling
153 Method (_PSL, 0, Serialized)
154 {
155 Return (\PPKG ())
156 }
157
158 // Start fan at state 4 = lowest temp state
159 Method (_INI)
160 {
Felix Singer69b48d82022-12-12 05:00:01 +0100161 \FLVL = 4
162 \_SB.PCI0.LPCB.SIO.ENVC.F2PS = FAN4_2_PWM
Matt DeVillier89683c02015-12-25 01:15:41 -0600163 Notify (\_TZ.THRM, 0x81)
164 }
165
166 Method (TCHK, 0, Serialized)
167 {
168 // Update Thermal Table
169 UPTB ()
170
171 // Get CPU Temperature from PECI via SuperIO TMPIN3
Felix Singer69b48d82022-12-12 05:00:01 +0100172 Local0 = \_SB.PCI0.LPCB.SIO.ENVC.TIN3
Matt DeVillier89683c02015-12-25 01:15:41 -0600173
174 // Check for "no reading available
Felix Singerb6cbda22022-12-11 22:49:56 +0100175 If (Local0 == 0x80) {
Matt DeVillier89683c02015-12-25 01:15:41 -0600176 Return (CTOK (FAN0_0_THRESHOLD_ON))
177 }
178
179 // Check for invalid readings
Felix Singerb6cbda22022-12-11 22:49:56 +0100180 If (Local0 == 255 || Local0 == 0) {
Matt DeVillier89683c02015-12-25 01:15:41 -0600181 Return (CTOK (FAN0_0_THRESHOLD_ON))
182 }
183
184 // PECI raw value is an offset from Tj_max
Felix Singer931a1ce2021-12-29 23:36:13 +0100185 Local1 = 255 - Local0
Matt DeVillier89683c02015-12-25 01:15:41 -0600186
187 // Handle values greater than Tj_max
Felix Singer6c848322022-01-02 02:28:21 +0100188 If (Local1 >= \TMAX) {
Matt DeVillier89683c02015-12-25 01:15:41 -0600189 Return (CTOK (\TMAX))
190 }
191
192 // Subtract from Tj_max to get temperature
Felix Singer931a1ce2021-12-29 23:36:13 +0100193 Local0 = \TMAX - Local1
Matt DeVillier89683c02015-12-25 01:15:41 -0600194 Return (CTOK (Local0))
195 }
196
197 Method (_TMP, 0, Serialized)
198 {
199 // Get temperature from SuperIO in deci-kelvin
Felix Singer69b48d82022-12-12 05:00:01 +0100200 Local0 = TCHK ()
Matt DeVillier89683c02015-12-25 01:15:41 -0600201
202 // Critical temperature in deci-kelvin
Felix Singer69b48d82022-12-12 05:00:01 +0100203 Local1 = CTOK (\TMAX)
Matt DeVillier89683c02015-12-25 01:15:41 -0600204
Felix Singer6c848322022-01-02 02:28:21 +0100205 If (Local0 >= Local1) {
Felix Singer34dde852021-12-28 17:16:12 +0100206 Printf ("CRITICAL TEMPERATURE: %o", Local0)
Matt DeVillier89683c02015-12-25 01:15:41 -0600207
208 // Wait 1 second for SuperIO to re-poll
209 Sleep (1000)
210
211 // Re-read temperature from SuperIO
Felix Singer69b48d82022-12-12 05:00:01 +0100212 Local0 = TCHK ()
Matt DeVillier89683c02015-12-25 01:15:41 -0600213
Felix Singer34dde852021-12-28 17:16:12 +0100214 Printf ("RE-READ TEMPERATURE: %o", Local0)
Matt DeVillier89683c02015-12-25 01:15:41 -0600215 }
216
217 Return (Local0)
218 }
219
220 Method (_AC0) {
Felix Singer9a37ae62022-12-12 00:21:53 +0100221 If (\FLVL <= 0) {
Matt DeVillier89683c02015-12-25 01:15:41 -0600222 Return (CTOK (F0OF))
223 } Else {
224 Return (CTOK (F0ON))
225 }
226 }
227
228 Method (_AC1) {
Felix Singer9a37ae62022-12-12 00:21:53 +0100229 If (\FLVL <= 1) {
Matt DeVillier89683c02015-12-25 01:15:41 -0600230 Return (CTOK (F1OF))
231 } Else {
232 Return (CTOK (F1ON))
233 }
234 }
235
236 Method (_AC2) {
Felix Singer9a37ae62022-12-12 00:21:53 +0100237 If (\FLVL <= 2) {
Matt DeVillier89683c02015-12-25 01:15:41 -0600238 Return (CTOK (F2OF))
239 } Else {
240 Return (CTOK (F2ON))
241 }
242 }
243
244 Method (_AC3) {
Felix Singer9a37ae62022-12-12 00:21:53 +0100245 If (\FLVL <= 3) {
Matt DeVillier89683c02015-12-25 01:15:41 -0600246 Return (CTOK (F3OF))
247 } Else {
248 Return (CTOK (F3ON))
249 }
250 }
251
252 Method (_AC4) {
Felix Singer9a37ae62022-12-12 00:21:53 +0100253 If (\FLVL <= 4) {
Matt DeVillier89683c02015-12-25 01:15:41 -0600254 Return (CTOK (0))
255 } Else {
256 Return (CTOK (0))
257 }
258 }
259
260 Name (_AL0, Package () { FAN0 })
261 Name (_AL1, Package () { FAN1 })
262 Name (_AL2, Package () { FAN2 })
263 Name (_AL3, Package () { FAN3 })
264 Name (_AL4, Package () { FAN4 })
265
266 PowerResource (FNP0, 0, 0)
267 {
268 Method (_STA) {
Felix Singer9a37ae62022-12-12 00:21:53 +0100269 If (\FLVL <= 0) {
Felix Singerdfbb6342022-12-26 08:39:35 +0100270 Return (1)
Matt DeVillier89683c02015-12-25 01:15:41 -0600271 } Else {
Felix Singerfa06bcb2022-12-26 09:32:47 +0100272 Return (0)
Matt DeVillier89683c02015-12-25 01:15:41 -0600273 }
274 }
275 Method (_ON) {
Felix Singer6af42002021-12-31 14:41:37 +0100276 If (! _STA ()) {
Felix Singer69b48d82022-12-12 05:00:01 +0100277 \FLVL = 0
278 \_SB.PCI0.LPCB.SIO.ENVC.F2PS = F0PW
Matt DeVillier89683c02015-12-25 01:15:41 -0600279 Notify (\_TZ.THRM, 0x81)
280 }
281 }
282 Method (_OFF) {
283 If (_STA ()) {
Felix Singer69b48d82022-12-12 05:00:01 +0100284 \FLVL = 1
285 \_SB.PCI0.LPCB.SIO.ENVC.F2PS = F1PW
Matt DeVillier89683c02015-12-25 01:15:41 -0600286 Notify (\_TZ.THRM, 0x81)
287 }
288 }
289 }
290
291 PowerResource (FNP1, 0, 0)
292 {
293 Method (_STA) {
Felix Singer9a37ae62022-12-12 00:21:53 +0100294 If (\FLVL <= 1) {
Felix Singerdfbb6342022-12-26 08:39:35 +0100295 Return (1)
Matt DeVillier89683c02015-12-25 01:15:41 -0600296 } Else {
Felix Singerfa06bcb2022-12-26 09:32:47 +0100297 Return (0)
Matt DeVillier89683c02015-12-25 01:15:41 -0600298 }
299 }
300 Method (_ON) {
Felix Singer6af42002021-12-31 14:41:37 +0100301 If (! _STA ()) {
Felix Singer69b48d82022-12-12 05:00:01 +0100302 \FLVL = 1
303 \_SB.PCI0.LPCB.SIO.ENVC.F2PS = F1PW
Matt DeVillier89683c02015-12-25 01:15:41 -0600304 Notify (\_TZ.THRM, 0x81)
305 }
306 }
307 Method (_OFF) {
308 If (_STA ()) {
Felix Singer69b48d82022-12-12 05:00:01 +0100309 \FLVL = 2
310 \_SB.PCI0.LPCB.SIO.ENVC.F2PS = F2PW
Matt DeVillier89683c02015-12-25 01:15:41 -0600311 Notify (\_TZ.THRM, 0x81)
312 }
313 }
314 }
315
316 PowerResource (FNP2, 0, 0)
317 {
318 Method (_STA) {
Felix Singer9a37ae62022-12-12 00:21:53 +0100319 If (\FLVL <= 2) {
Felix Singerdfbb6342022-12-26 08:39:35 +0100320 Return (1)
Matt DeVillier89683c02015-12-25 01:15:41 -0600321 } Else {
Felix Singerfa06bcb2022-12-26 09:32:47 +0100322 Return (0)
Matt DeVillier89683c02015-12-25 01:15:41 -0600323 }
324 }
325 Method (_ON) {
Felix Singer6af42002021-12-31 14:41:37 +0100326 If (! _STA ()) {
Felix Singer69b48d82022-12-12 05:00:01 +0100327 \FLVL = 2
328 \_SB.PCI0.LPCB.SIO.ENVC.F2PS = F2PW
Matt DeVillier89683c02015-12-25 01:15:41 -0600329 Notify (\_TZ.THRM, 0x81)
330 }
331 }
332 Method (_OFF) {
333 If (_STA ()) {
Felix Singer69b48d82022-12-12 05:00:01 +0100334 \FLVL = 3
335 \_SB.PCI0.LPCB.SIO.ENVC.F2PS = F3PW
Matt DeVillier89683c02015-12-25 01:15:41 -0600336 Notify (\_TZ.THRM, 0x81)
337 }
338 }
339 }
340
341 PowerResource (FNP3, 0, 0)
342 {
343 Method (_STA) {
Felix Singer9a37ae62022-12-12 00:21:53 +0100344 If (\FLVL <= 3) {
Felix Singerdfbb6342022-12-26 08:39:35 +0100345 Return (1)
Matt DeVillier89683c02015-12-25 01:15:41 -0600346 } Else {
Felix Singerfa06bcb2022-12-26 09:32:47 +0100347 Return (0)
Matt DeVillier89683c02015-12-25 01:15:41 -0600348 }
349 }
350 Method (_ON) {
Felix Singer6af42002021-12-31 14:41:37 +0100351 If (! _STA ()) {
Felix Singer69b48d82022-12-12 05:00:01 +0100352 \FLVL = 3
353 \_SB.PCI0.LPCB.SIO.ENVC.F2PS = F3PW
Matt DeVillier89683c02015-12-25 01:15:41 -0600354 Notify (\_TZ.THRM, 0x81)
355 }
356 }
357 Method (_OFF) {
358 If (_STA ()) {
Felix Singer69b48d82022-12-12 05:00:01 +0100359 \FLVL = 4
360 \_SB.PCI0.LPCB.SIO.ENVC.F2PS = F4PW
Matt DeVillier89683c02015-12-25 01:15:41 -0600361 Notify (\_TZ.THRM, 0x81)
362 }
363 }
364 }
365
366 PowerResource (FNP4, 0, 0)
367 {
368 Method (_STA) {
Felix Singer9a37ae62022-12-12 00:21:53 +0100369 If (\FLVL <= 4) {
Felix Singerdfbb6342022-12-26 08:39:35 +0100370 Return (1)
Matt DeVillier89683c02015-12-25 01:15:41 -0600371 } Else {
Felix Singerfa06bcb2022-12-26 09:32:47 +0100372 Return (0)
Matt DeVillier89683c02015-12-25 01:15:41 -0600373 }
374 }
375 Method (_ON) {
Felix Singer6af42002021-12-31 14:41:37 +0100376 If (! _STA ()) {
Felix Singer69b48d82022-12-12 05:00:01 +0100377 \FLVL = 4
378 \_SB.PCI0.LPCB.SIO.ENVC.F2PS = F4PW
Matt DeVillier89683c02015-12-25 01:15:41 -0600379 Notify (\_TZ.THRM, 0x81)
380 }
381 }
382 Method (_OFF) {
383 If (_STA ()) {
Felix Singer69b48d82022-12-12 05:00:01 +0100384 \FLVL = 4
385 \_SB.PCI0.LPCB.SIO.ENVC.F2PS = F4PW
Matt DeVillier89683c02015-12-25 01:15:41 -0600386 Notify (\_TZ.THRM, 0x81)
387 }
388 }
389 }
390
391 Device (FAN0)
392 {
393 Name (_HID, EISAID ("PNP0C0B"))
394 Name (_UID, 0)
395 Name (_PR0, Package () { FNP0 })
396 }
397
398 Device (FAN1)
399 {
400 Name (_HID, EISAID ("PNP0C0B"))
401 Name (_UID, 1)
402 Name (_PR0, Package () { FNP1 })
403 }
404
405 Device (FAN2)
406 {
407 Name (_HID, EISAID ("PNP0C0B"))
408 Name (_UID, 2)
409 Name (_PR0, Package () { FNP2 })
410 }
411
412 Device (FAN3)
413 {
414 Name (_HID, EISAID ("PNP0C0B"))
415 Name (_UID, 3)
416 Name (_PR0, Package () { FNP3 })
417 }
418
419 Device (FAN4)
420 {
421 Name (_HID, EISAID ("PNP0C0B"))
422 Name (_UID, 4)
423 Name (_PR0, Package () { FNP4 })
424 }
425 }
426}