forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-01-31 f70575805708cabdedea7498aaa3f710fde4d920
kernel/drivers/misc/mei/pci-me.c
....@@ -1,34 +1,16 @@
1
+// SPDX-License-Identifier: GPL-2.0
12 /*
2
- *
3
+ * Copyright (c) 2003-2020, Intel Corporation. All rights reserved.
34 * Intel Management Engine Interface (Intel MEI) Linux driver
4
- * Copyright (c) 2003-2012, Intel Corporation.
5
- *
6
- * This program is free software; you can redistribute it and/or modify it
7
- * under the terms and conditions of the GNU General Public License,
8
- * version 2, as published by the Free Software Foundation.
9
- *
10
- * This program is distributed in the hope it will be useful, but WITHOUT
11
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
13
- * more details.
14
- *
155 */
6
+
167 #include <linux/module.h>
17
-#include <linux/moduleparam.h>
188 #include <linux/kernel.h>
199 #include <linux/device.h>
20
-#include <linux/fs.h>
2110 #include <linux/errno.h>
2211 #include <linux/types.h>
23
-#include <linux/fcntl.h>
2412 #include <linux/pci.h>
25
-#include <linux/poll.h>
26
-#include <linux/ioctl.h>
27
-#include <linux/cdev.h>
2813 #include <linux/sched.h>
29
-#include <linux/uuid.h>
30
-#include <linux/compat.h>
31
-#include <linux/jiffies.h>
3214 #include <linux/interrupt.h>
3315
3416 #include <linux/pm_domain.h>
....@@ -77,18 +59,19 @@
7759 {MEI_PCI_DEVICE(MEI_DEV_ID_PPT_1, MEI_ME_PCH7_CFG)},
7860 {MEI_PCI_DEVICE(MEI_DEV_ID_PPT_2, MEI_ME_PCH7_CFG)},
7961 {MEI_PCI_DEVICE(MEI_DEV_ID_PPT_3, MEI_ME_PCH7_CFG)},
80
- {MEI_PCI_DEVICE(MEI_DEV_ID_LPT_H, MEI_ME_PCH8_SPS_CFG)},
81
- {MEI_PCI_DEVICE(MEI_DEV_ID_LPT_W, MEI_ME_PCH8_SPS_CFG)},
62
+ {MEI_PCI_DEVICE(MEI_DEV_ID_LPT_H, MEI_ME_PCH8_SPS_4_CFG)},
63
+ {MEI_PCI_DEVICE(MEI_DEV_ID_LPT_W, MEI_ME_PCH8_SPS_4_CFG)},
8264 {MEI_PCI_DEVICE(MEI_DEV_ID_LPT_LP, MEI_ME_PCH8_CFG)},
83
- {MEI_PCI_DEVICE(MEI_DEV_ID_LPT_HR, MEI_ME_PCH8_SPS_CFG)},
65
+ {MEI_PCI_DEVICE(MEI_DEV_ID_LPT_HR, MEI_ME_PCH8_SPS_4_CFG)},
8466 {MEI_PCI_DEVICE(MEI_DEV_ID_WPT_LP, MEI_ME_PCH8_CFG)},
8567 {MEI_PCI_DEVICE(MEI_DEV_ID_WPT_LP_2, MEI_ME_PCH8_CFG)},
8668
8769 {MEI_PCI_DEVICE(MEI_DEV_ID_SPT, MEI_ME_PCH8_CFG)},
8870 {MEI_PCI_DEVICE(MEI_DEV_ID_SPT_2, MEI_ME_PCH8_CFG)},
89
- {MEI_PCI_DEVICE(MEI_DEV_ID_SPT_H, MEI_ME_PCH8_SPS_CFG)},
90
- {MEI_PCI_DEVICE(MEI_DEV_ID_SPT_H_2, MEI_ME_PCH8_SPS_CFG)},
91
- {MEI_PCI_DEVICE(MEI_DEV_ID_LBG, MEI_ME_PCH12_CFG)},
71
+ {MEI_PCI_DEVICE(MEI_DEV_ID_SPT_3, MEI_ME_PCH8_ITOUCH_CFG)},
72
+ {MEI_PCI_DEVICE(MEI_DEV_ID_SPT_H, MEI_ME_PCH8_SPS_4_CFG)},
73
+ {MEI_PCI_DEVICE(MEI_DEV_ID_SPT_H_2, MEI_ME_PCH8_SPS_4_CFG)},
74
+ {MEI_PCI_DEVICE(MEI_DEV_ID_LBG, MEI_ME_PCH12_SPS_4_CFG)},
9275
9376 {MEI_PCI_DEVICE(MEI_DEV_ID_BXT_M, MEI_ME_PCH8_CFG)},
9477 {MEI_PCI_DEVICE(MEI_DEV_ID_APL_I, MEI_ME_PCH8_CFG)},
....@@ -99,27 +82,42 @@
9982
10083 {MEI_PCI_DEVICE(MEI_DEV_ID_KBP, MEI_ME_PCH8_CFG)},
10184 {MEI_PCI_DEVICE(MEI_DEV_ID_KBP_2, MEI_ME_PCH8_CFG)},
85
+ {MEI_PCI_DEVICE(MEI_DEV_ID_KBP_3, MEI_ME_PCH8_CFG)},
10286
103
- {MEI_PCI_DEVICE(MEI_DEV_ID_CNP_LP, MEI_ME_PCH8_CFG)},
104
- {MEI_PCI_DEVICE(MEI_DEV_ID_CNP_LP_4, MEI_ME_PCH8_CFG)},
105
- {MEI_PCI_DEVICE(MEI_DEV_ID_CNP_H, MEI_ME_PCH8_CFG)},
106
- {MEI_PCI_DEVICE(MEI_DEV_ID_CNP_H_4, MEI_ME_PCH8_CFG)},
87
+ {MEI_PCI_DEVICE(MEI_DEV_ID_CNP_LP, MEI_ME_PCH12_CFG)},
88
+ {MEI_PCI_DEVICE(MEI_DEV_ID_CNP_LP_3, MEI_ME_PCH8_ITOUCH_CFG)},
89
+ {MEI_PCI_DEVICE(MEI_DEV_ID_CNP_H, MEI_ME_PCH12_SPS_CFG)},
90
+ {MEI_PCI_DEVICE(MEI_DEV_ID_CNP_H_3, MEI_ME_PCH12_SPS_ITOUCH_CFG)},
10791
10892 {MEI_PCI_DEVICE(MEI_DEV_ID_CMP_LP, MEI_ME_PCH12_CFG)},
109
- {MEI_PCI_DEVICE(MEI_DEV_ID_CMP_LP_3, MEI_ME_PCH8_CFG)},
93
+ {MEI_PCI_DEVICE(MEI_DEV_ID_CMP_LP_3, MEI_ME_PCH8_ITOUCH_CFG)},
11094 {MEI_PCI_DEVICE(MEI_DEV_ID_CMP_V, MEI_ME_PCH12_CFG)},
11195 {MEI_PCI_DEVICE(MEI_DEV_ID_CMP_H, MEI_ME_PCH12_CFG)},
112
- {MEI_PCI_DEVICE(MEI_DEV_ID_CMP_H_3, MEI_ME_PCH8_CFG)},
96
+ {MEI_PCI_DEVICE(MEI_DEV_ID_CMP_H_3, MEI_ME_PCH8_ITOUCH_CFG)},
11397
11498 {MEI_PCI_DEVICE(MEI_DEV_ID_ICP_LP, MEI_ME_PCH12_CFG)},
11599 {MEI_PCI_DEVICE(MEI_DEV_ID_ICP_N, MEI_ME_PCH12_CFG)},
116100
117
- {MEI_PCI_DEVICE(MEI_DEV_ID_TGP_LP, MEI_ME_PCH12_CFG)},
101
+ {MEI_PCI_DEVICE(MEI_DEV_ID_TGP_LP, MEI_ME_PCH15_CFG)},
102
+ {MEI_PCI_DEVICE(MEI_DEV_ID_TGP_H, MEI_ME_PCH15_SPS_CFG)},
118103
119
- {MEI_PCI_DEVICE(MEI_DEV_ID_MCC, MEI_ME_PCH12_CFG)},
104
+ {MEI_PCI_DEVICE(MEI_DEV_ID_JSP_N, MEI_ME_PCH15_CFG)},
105
+
106
+ {MEI_PCI_DEVICE(MEI_DEV_ID_MCC, MEI_ME_PCH15_CFG)},
120107 {MEI_PCI_DEVICE(MEI_DEV_ID_MCC_4, MEI_ME_PCH8_CFG)},
121108
122109 {MEI_PCI_DEVICE(MEI_DEV_ID_CDF, MEI_ME_PCH8_CFG)},
110
+
111
+ {MEI_PCI_DEVICE(MEI_DEV_ID_EBG, MEI_ME_PCH15_SPS_CFG)},
112
+
113
+ {MEI_PCI_DEVICE(MEI_DEV_ID_ADP_S, MEI_ME_PCH15_CFG)},
114
+ {MEI_PCI_DEVICE(MEI_DEV_ID_ADP_LP, MEI_ME_PCH15_CFG)},
115
+ {MEI_PCI_DEVICE(MEI_DEV_ID_ADP_P, MEI_ME_PCH15_CFG)},
116
+ {MEI_PCI_DEVICE(MEI_DEV_ID_ADP_N, MEI_ME_PCH15_CFG)},
117
+
118
+ {MEI_PCI_DEVICE(MEI_DEV_ID_RPL_S, MEI_ME_PCH15_CFG)},
119
+
120
+ {MEI_PCI_DEVICE(MEI_DEV_ID_MTL_M, MEI_ME_PCH15_CFG)},
123121
124122 /* required last entry */
125123 {0, }
....@@ -134,6 +132,13 @@
134132 static inline void mei_me_set_pm_domain(struct mei_device *dev) {}
135133 static inline void mei_me_unset_pm_domain(struct mei_device *dev) {}
136134 #endif /* CONFIG_PM */
135
+
136
+static int mei_me_read_fws(const struct mei_device *dev, int where, u32 *val)
137
+{
138
+ struct pci_dev *pdev = to_pci_dev(dev->dev);
139
+
140
+ return pci_read_config_dword(pdev, where, val);
141
+}
137142
138143 /**
139144 * mei_me_quirk_probe - probe for devices that doesn't valid ME interface
....@@ -206,15 +211,18 @@
206211 }
207212
208213 /* allocates and initializes the mei dev structure */
209
- dev = mei_me_dev_init(pdev, cfg);
214
+ dev = mei_me_dev_init(&pdev->dev, cfg);
210215 if (!dev) {
211216 err = -ENOMEM;
212217 goto end;
213218 }
214219 hw = to_me_hw(dev);
215220 hw->mem_addr = pcim_iomap_table(pdev)[0];
221
+ hw->read_fws = mei_me_read_fws;
216222
217223 pci_enable_msi(pdev);
224
+
225
+ hw->irq = pdev->irq;
218226
219227 /* request and enable interrupt */
220228 irqflags = pci_dev_msi_enabled(pdev) ? IRQF_ONESHOT : IRQF_SHARED;
....@@ -248,7 +256,7 @@
248256 * MEI requires to resume from runtime suspend mode
249257 * in order to perform link reset flow upon system suspend.
250258 */
251
- dev_pm_set_driver_flags(&pdev->dev, DPM_FLAG_NEVER_SKIP);
259
+ dev_pm_set_driver_flags(&pdev->dev, DPM_FLAG_NO_DIRECT_COMPLETE);
252260
253261 /*
254262 * ME maps runtime suspend/resume to D0i states,
....@@ -401,12 +409,11 @@
401409 #ifdef CONFIG_PM
402410 static int mei_me_pm_runtime_idle(struct device *device)
403411 {
404
- struct pci_dev *pdev = to_pci_dev(device);
405412 struct mei_device *dev;
406413
407
- dev_dbg(&pdev->dev, "rpm: me: runtime_idle\n");
414
+ dev_dbg(device, "rpm: me: runtime_idle\n");
408415
409
- dev = pci_get_drvdata(pdev);
416
+ dev = dev_get_drvdata(device);
410417 if (!dev)
411418 return -ENODEV;
412419 if (mei_write_is_idle(dev))
....@@ -417,13 +424,12 @@
417424
418425 static int mei_me_pm_runtime_suspend(struct device *device)
419426 {
420
- struct pci_dev *pdev = to_pci_dev(device);
421427 struct mei_device *dev;
422428 int ret;
423429
424
- dev_dbg(&pdev->dev, "rpm: me: runtime suspend\n");
430
+ dev_dbg(device, "rpm: me: runtime suspend\n");
425431
426
- dev = pci_get_drvdata(pdev);
432
+ dev = dev_get_drvdata(device);
427433 if (!dev)
428434 return -ENODEV;
429435
....@@ -436,7 +442,7 @@
436442
437443 mutex_unlock(&dev->device_lock);
438444
439
- dev_dbg(&pdev->dev, "rpm: me: runtime suspend ret=%d\n", ret);
445
+ dev_dbg(device, "rpm: me: runtime suspend ret=%d\n", ret);
440446
441447 if (ret && ret != -EAGAIN)
442448 schedule_work(&dev->reset_work);
....@@ -446,13 +452,12 @@
446452
447453 static int mei_me_pm_runtime_resume(struct device *device)
448454 {
449
- struct pci_dev *pdev = to_pci_dev(device);
450455 struct mei_device *dev;
451456 int ret;
452457
453
- dev_dbg(&pdev->dev, "rpm: me: runtime resume\n");
458
+ dev_dbg(device, "rpm: me: runtime resume\n");
454459
455
- dev = pci_get_drvdata(pdev);
460
+ dev = dev_get_drvdata(device);
456461 if (!dev)
457462 return -ENODEV;
458463
....@@ -462,7 +467,7 @@
462467
463468 mutex_unlock(&dev->device_lock);
464469
465
- dev_dbg(&pdev->dev, "rpm: me: runtime resume ret = %d\n", ret);
470
+ dev_dbg(device, "rpm: me: runtime resume ret = %d\n", ret);
466471
467472 if (ret)
468473 schedule_work(&dev->reset_work);