Now that we have the ability to enable an AML fan object,
allow the user to select the temperature at which the
fan cycles on.

Cc: Leif Lindholm <l...@nuviainc.com>
Cc: Pete Batard <p...@akeo.ie>
Cc: Andrei Warkentin <awarken...@vmware.com>
Cc: Ard Biesheuvel <ard.biesheu...@arm.com>
Cc: Samer El-Haj-Mahmoud <samer.el-haj-mahm...@arm.com>
Signed-off-by: Jeremy Linton <jeremy.lin...@arm.com>
---
 Platform/RaspberryPi/AcpiTables/SsdtThermal.asl         |  9 +++++----
 Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.c      | 11 ++++++++++-
 Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.inf    |  1 +
 Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxeHii.uni |  5 ++++-
 Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxeHii.vfr | 16 ++++++++++++++++
 Platform/RaspberryPi/Include/ConfigVars.h               |  4 ++++
 Platform/RaspberryPi/RPi3/RPi3.dsc                      |  1 +
 Platform/RaspberryPi/RPi4/RPi4.dsc                      |  1 +
 Platform/RaspberryPi/RaspberryPi.dec                    |  1 +
 9 files changed, 43 insertions(+), 6 deletions(-)

diff --git a/Platform/RaspberryPi/AcpiTables/SsdtThermal.asl 
b/Platform/RaspberryPi/AcpiTables/SsdtThermal.asl
index ee028173e1..acfa4699bb 100644
--- a/Platform/RaspberryPi/AcpiTables/SsdtThermal.asl
+++ b/Platform/RaspberryPi/AcpiTables/SsdtThermal.asl
@@ -23,6 +23,7 @@ DefinitionBlock (__FILE__, "SSDT", 5, "RPIFDN", "RPITHFAN", 2)
   {
     // Define a NameOp we will modify during InstallTable
     Name (GIOP, 0x2) //08 47 49 4f 50 0a 02 (value must be >1)
+    Name (FTMP, 0x2)
     // Describe a fan
     PowerResource (PFAN, 0, 0) {
       OperationRegion (GPIO, SystemMemory, GPIO_BASE_ADDRESS, 0x1000)
@@ -68,9 +69,9 @@ DefinitionBlock (__FILE__, "SSDT", 5, "RPIFDN", "RPITHFAN", 2)
   // merge in an active cooling point.
   Scope (\_SB_.EC00.TZ00)
   {
-    Method (_AC0) { Return (3332) }        // (60C) active cooling trip point,
-                                           // if this is lower than PSV then we
-                                           // prefer active cooling
-    Name (_AL0, Package () { \_SB_.EC00.FAN0 }) // the fan used for AC0 above
+    Method (_AC0) { Return ( (FTMP * 10) + 2732) } // (60C) active cooling 
trip point,
+                                                   // if this is lower than 
PSV then we
+                                                   // prefer active cooling
+    Name (_AL0, Package () { \_SB_.EC00.FAN0 })    // the fan used for AC0 
above
   }
 }
diff --git a/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.c 
b/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.c
index d58cbbdfe7..e8f964a329 100644
--- a/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.c
+++ b/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.c
@@ -256,8 +256,16 @@ SetupVariables (
     PcdSet32 (PcdFanOnGpio, PcdGet32 (PcdFanOnGpio));
   }
 
-  Size = sizeof(AssetTagVar);
+  Size = sizeof (UINT32);
+  Status = gRT->GetVariable (L"FanTemp",
+                  &gConfigDxeFormSetGuid,
+                  NULL, &Size, &Var32);
+  if (EFI_ERROR (Status)) {
+    PcdSet32 (PcdFanTemp, PcdGet32 (PcdFanTemp));
+  }
+
 
+  Size = sizeof (AssetTagVar);
   Status = gRT->GetVariable(L"AssetTag",
                   &gConfigDxeFormSetGuid,
                   NULL, &Size, AssetTagVar);
@@ -697,6 +705,7 @@ VerifyUpdateTable(
 
 STATIC AML_NAME_OP_REPLACE SsdtNameOpReplace[] = {
   {"GIOP", PcdToken(PcdFanOnGpio)},
+  {"FTMP", PcdToken(PcdFanTemp)},
   {}
 };
 
diff --git a/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.inf 
b/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.inf
index 321e402e65..544e3b3e10 100644
--- a/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.inf
+++ b/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.inf
@@ -91,6 +91,7 @@
   gRaspberryPiTokenSpaceGuid.PcdRamMoreThan3GB
   gRaspberryPiTokenSpaceGuid.PcdRamLimitTo3GB
   gRaspberryPiTokenSpaceGuid.PcdFanOnGpio
+  gRaspberryPiTokenSpaceGuid.PcdFanTemp
 
 [Depex]
   gPcdProtocolGuid AND gRaspberryPiFirmwareProtocolGuid
diff --git a/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxeHii.uni 
b/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxeHii.uni
index e2d1bb4b39..2afe8f32ae 100644
--- a/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxeHii.uni
+++ b/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxeHii.uni
@@ -49,11 +49,14 @@
 #string STR_ADVANCED_SYSTAB_DT       #language en-US "Devicetree"
 
 #string STR_ADVANCED_FANONGPIO_PROMPT #language en-US "ACPI fan control"
-#string STR_ADVANCED_FANONGPIO_HELP   #language en-US "Cycle a fan via GPIO if 
temp exceeds 60C"
+#string STR_ADVANCED_FANONGPIO_HELP   #language en-US "Cycle a fan via GPIO at 
given temperature"
 #string STR_ADVANCED_FANONGPIO_OFF    #language en-US "Disabled"
 #string STR_ADVANCED_FANONGPIO_18     #language en-US "Fan Shim/GPIO-18"
 #string STR_ADVANCED_FANONGPIO_19     #language en-US "GPIO-19"
 
+#string STR_ADVANCED_FANTEMP_PROMPT   #language en-US "ACPI fan temperature"
+#string STR_ADVANCED_FANTEMP_HELP     #language en-US "Cycle a fan at C"
+
 #string STR_ADVANCED_ASSET_TAG_PROMPT #language en-US "Asset Tag"
 #string STR_ADVANCED_ASSET_TAG_HELP   #language en-US "Set the system Asset 
Tag"
 
diff --git a/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxeHii.vfr 
b/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxeHii.vfr
index 94332caab3..de5e43471a 100644
--- a/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxeHii.vfr
+++ b/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxeHii.vfr
@@ -51,6 +51,11 @@ formset
       name  = FanOnGpio,
       guid  = CONFIGDXE_FORM_SET_GUID;
 
+    efivarstore ADVANCED_FANTEMP_VARSTORE_DATA,
+      attribute = EFI_VARIABLE_BOOTSERVICE_ACCESS | 
EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,
+      name  = FanTemp,
+      guid  = CONFIGDXE_FORM_SET_GUID;
+
     efivarstore SYSTEM_TABLE_MODE_VARSTORE_DATA,
       attribute = EFI_VARIABLE_BOOTSERVICE_ACCESS | 
EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,
       name  = SystemTableMode,
@@ -191,6 +196,17 @@ formset
               option text = STRING_TOKEN(STR_ADVANCED_FANONGPIO_19), value = 
19, flags = 0;
           endoneof;
         endif;
+
+        grayoutif ideqval FanOnGpio.Enabled == 0;
+          numeric varid = FanTemp.Value,
+              prompt      = STRING_TOKEN(STR_ADVANCED_FANTEMP_PROMPT),
+              help        = STRING_TOKEN(STR_ADVANCED_FANTEMP_HELP),
+              flags       = DISPLAY_UINT_DEC | NUMERIC_SIZE_4 | INTERACTIVE | 
RESET_REQUIRED,
+             minimum = 50,
+              maximum = 80,
+              default = 60,
+          endnumeric;
+        endif;
 #endif
         string varid = AssetTag.AssetTag,
             prompt  = STRING_TOKEN(STR_ADVANCED_ASSET_TAG_PROMPT),
diff --git a/Platform/RaspberryPi/Include/ConfigVars.h 
b/Platform/RaspberryPi/Include/ConfigVars.h
index 1a40469bfa..8094d4ef9a 100644
--- a/Platform/RaspberryPi/Include/ConfigVars.h
+++ b/Platform/RaspberryPi/Include/ConfigVars.h
@@ -73,6 +73,10 @@ typedef struct {
 } ADVANCED_FAN_ON_GPIO_VARSTORE_DATA;
 
 typedef struct {
+  UINT32 Value;
+} ADVANCED_FANTEMP_VARSTORE_DATA;
+
+typedef struct {
 #define SYSTEM_TABLE_MODE_ACPI 0
 #define SYSTEM_TABLE_MODE_BOTH 1
 #define SYSTEM_TABLE_MODE_DT   2
diff --git a/Platform/RaspberryPi/RPi3/RPi3.dsc 
b/Platform/RaspberryPi/RPi3/RPi3.dsc
index cef8932ca2..484a46ffba 100644
--- a/Platform/RaspberryPi/RPi3/RPi3.dsc
+++ b/Platform/RaspberryPi/RPi3/RPi3.dsc
@@ -502,6 +502,7 @@
   # Enable a fan in the ACPI thermal zone on GPIO pin #
   #
   
gRaspberryPiTokenSpaceGuid.PcdFanOnGpio|L"FanOnGpio"|gConfigDxeFormSetGuid|0x0|0
+  gRaspberryPiTokenSpaceGuid.PcdFanTemp|L"FanTemp"|gConfigDxeFormSetGuid|0x0|0
 
   #
   # Common UEFI ones.
diff --git a/Platform/RaspberryPi/RPi4/RPi4.dsc 
b/Platform/RaspberryPi/RPi4/RPi4.dsc
index 9d0eaf10a1..823c9fc007 100644
--- a/Platform/RaspberryPi/RPi4/RPi4.dsc
+++ b/Platform/RaspberryPi/RPi4/RPi4.dsc
@@ -516,6 +516,7 @@
   # 19 - Enabled on pin 19
   #
   
gRaspberryPiTokenSpaceGuid.PcdFanOnGpio|L"FanOnGpio"|gConfigDxeFormSetGuid|0x0|0
+  gRaspberryPiTokenSpaceGuid.PcdFanTemp|L"FanTemp"|gConfigDxeFormSetGuid|0x0|60
 
   #
   # Common UEFI ones.
diff --git a/Platform/RaspberryPi/RaspberryPi.dec 
b/Platform/RaspberryPi/RaspberryPi.dec
index a73650f2c3..c64c61930e 100644
--- a/Platform/RaspberryPi/RaspberryPi.dec
+++ b/Platform/RaspberryPi/RaspberryPi.dec
@@ -67,3 +67,4 @@
   gRaspberryPiTokenSpaceGuid.PcdRamMoreThan3GB|0|UINT32|0x00000019
   gRaspberryPiTokenSpaceGuid.PcdRamLimitTo3GB|0|UINT32|0x0000001A
   gRaspberryPiTokenSpaceGuid.PcdFanOnGpio|0|UINT32|0x0000001C
+  gRaspberryPiTokenSpaceGuid.PcdFanTemp|0|UINT32|0x0000001D
-- 
2.13.7


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#64855): https://edk2.groups.io/g/devel/message/64855
Mute This Topic: https://groups.io/mt/76538749/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to