platform/x86/amd/hsmp: Non-ACPI support for AMD F1A_M00~0Fh
authorSuma Hegde <suma.hegde@amd.com>
Sat, 6 Jan 2024 02:25:29 +0000 (02:25 +0000)
committerIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Wed, 31 Jan 2024 08:30:59 +0000 (10:30 +0200)
AMD EPYC family 0x1A and Model 0x0-0xF are having different
mailbox message ID offset compared to previous
platforms. In case of ACPI based BIOS, this information will be read
from ACPI table, for non-ACPI BIOS, this needs to be #defined.

Signed-off-by: Suma Hegde <suma.hegde@amd.com>
Signed-off-by: Naveen Krishna Chatradhi <nchatrad@amd.com>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Link: https://lore.kernel.org/r/20240106022532.1746932-8-suma.hegde@amd.com
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
drivers/platform/x86/amd/hsmp.c

index 9dc8e036ed7279c35f9965e4165fadd529cf9ec0..aecc64a72d20acc1a4b6af8882a9002ebe5b518c 100644 (file)
@@ -44,6 +44,7 @@
  */
 #define SMN_HSMP_BASE          0x3B00000
 #define SMN_HSMP_MSG_ID                0x0010534
+#define SMN_HSMP_MSG_ID_F1A_M0H        0x0010934
 #define SMN_HSMP_MSG_RESP      0x0010980
 #define SMN_HSMP_MSG_DATA      0x00109E0
 
@@ -734,6 +735,14 @@ static int hsmp_cache_proto_ver(u16 sock_ind)
        return ret;
 }
 
+static inline bool is_f1a_m0h(void)
+{
+       if (boot_cpu_data.x86 == 0x1A && boot_cpu_data.x86_model <= 0x0F)
+               return true;
+
+       return false;
+}
+
 static int init_platform_device(struct device *dev)
 {
        struct hsmp_socket *sock;
@@ -747,7 +756,16 @@ static int init_platform_device(struct device *dev)
                sock->sock_ind                  = i;
                sock->dev                       = dev;
                sock->mbinfo.base_addr          = SMN_HSMP_BASE;
-               sock->mbinfo.msg_id_off         = SMN_HSMP_MSG_ID;
+
+               /*
+                * This is a transitional change from non-ACPI to ACPI, only
+                * family 0x1A, model 0x00 platform is supported for both ACPI and non-ACPI.
+                */
+               if (is_f1a_m0h())
+                       sock->mbinfo.msg_id_off = SMN_HSMP_MSG_ID_F1A_M0H;
+               else
+                       sock->mbinfo.msg_id_off = SMN_HSMP_MSG_ID;
+
                sock->mbinfo.msg_resp_off       = SMN_HSMP_MSG_RESP;
                sock->mbinfo.msg_arg_off        = SMN_HSMP_MSG_DATA;
                sema_init(&sock->hsmp_sem, 1);