]> git.proxmox.com Git - pve-kernel-jessie.git/blobdiff - mei_bus-whitelist-watchdog-client.patch
watchdog: mei_wdt: implement MEI iAMT watchdog driver
[pve-kernel-jessie.git] / mei_bus-whitelist-watchdog-client.patch
diff --git a/mei_bus-whitelist-watchdog-client.patch b/mei_bus-whitelist-watchdog-client.patch
new file mode 100644 (file)
index 0000000..5870e51
--- /dev/null
@@ -0,0 +1,74 @@
+From e97cdb303c04bfe60283094bdced68a0d363bd5d Mon Sep 17 00:00:00 2001
+From: Tomas Winkler <tomas.winkler@intel.com>
+Date: Fri, 8 Jan 2016 00:49:24 +0200
+Subject: mei: bus: whitelist the watchdog client
+
+The iAMT WD client has to be whitelisted sice it has two connections
+and is filtered out by number_of_connections fixup.
+Also the API has changed for BDW and SKL but firmware haven't updated
+the protocol version.
+
+Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
+Signed-off-by: Alexander Usyskin <alexander.usyskin@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/misc/mei/bus-fixup.c | 29 +++++++++++++++++++++++++++++
+ 1 file changed, 29 insertions(+)
+
+diff --git a/drivers/misc/mei/bus-fixup.c b/drivers/misc/mei/bus-fixup.c
+index b2d2a6e..b87323f 100644
+--- a/drivers/misc/mei/bus-fixup.c
++++ b/drivers/misc/mei/bus-fixup.c
+@@ -35,6 +35,9 @@ static const uuid_le mei_nfc_info_guid = MEI_UUID_NFC_INFO;
+ #define MEI_UUID_NFC_HCI UUID_LE(0x0bb17a78, 0x2a8e, 0x4c50, \
+                       0x94, 0xd4, 0x50, 0x26, 0x67, 0x23, 0x77, 0x5c)
++#define MEI_UUID_WD UUID_LE(0x05B79A6F, 0x4628, 0x4D7F, \
++                          0x89, 0x9D, 0xA9, 0x15, 0x14, 0xCB, 0x32, 0xAB)
++
+ #define MEI_UUID_ANY NULL_UUID_LE
+ /**
+@@ -66,6 +69,31 @@ static void blacklist(struct mei_cl_device *cldev)
+       cldev->do_match = 0;
+ }
++/**
++ * mei_wd - wd client on the bus, change protocol version
++ *   as the API has changed.
++ *
++ * @cldev: me clients device
++ */
++#if IS_ENABLED(CONFIG_INTEL_MEI_ME)
++#include <linux/pci.h>
++#include "hw-me-regs.h"
++static void mei_wd(struct mei_cl_device *cldev)
++{
++      struct pci_dev *pdev = to_pci_dev(cldev->dev.parent);
++
++      dev_dbg(&cldev->dev, "running hook %s\n", __func__);
++      if (pdev->device == MEI_DEV_ID_WPT_LP ||
++          pdev->device == MEI_DEV_ID_SPT ||
++          pdev->device == MEI_DEV_ID_SPT_H)
++              cldev->me_cl->props.protocol_version = 0x2;
++
++      cldev->do_match = 1;
++}
++#else
++static inline void mei_wd(struct mei_cl_device *cldev) {}
++#endif /* CONFIG_INTEL_MEI_ME */
++
+ struct mei_nfc_cmd {
+       u8 command;
+       u8 status;
+@@ -280,6 +308,7 @@ static struct mei_fixup {
+       MEI_FIXUP(MEI_UUID_ANY, number_of_connections),
+       MEI_FIXUP(MEI_UUID_NFC_INFO, blacklist),
+       MEI_FIXUP(MEI_UUID_NFC_HCI, mei_nfc),
++      MEI_FIXUP(MEI_UUID_WD, mei_wd),
+ };
+ /**
+-- 
+cgit v0.12
+