forked from ~ljy/RK356X_SDK_RELEASE

hc
2023-12-09 b22da3d8526a935aa31e086e63f60ff3246cb61c
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,40 @@
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)},
123119
124120 /* required last entry */
125121 {0, }
....@@ -134,6 +130,13 @@
134130 static inline void mei_me_set_pm_domain(struct mei_device *dev) {}
135131 static inline void mei_me_unset_pm_domain(struct mei_device *dev) {}
136132 #endif /* CONFIG_PM */
133
+
134
+static int mei_me_read_fws(const struct mei_device *dev, int where, u32 *val)
135
+{
136
+ struct pci_dev *pdev = to_pci_dev(dev->dev);
137
+
138
+ return pci_read_config_dword(pdev, where, val);
139
+}
137140
138141 /**
139142 * mei_me_quirk_probe - probe for devices that doesn't valid ME interface
....@@ -206,15 +209,18 @@
206209 }
207210
208211 /* allocates and initializes the mei dev structure */
209
- dev = mei_me_dev_init(pdev, cfg);
212
+ dev = mei_me_dev_init(&pdev->dev, cfg);
210213 if (!dev) {
211214 err = -ENOMEM;
212215 goto end;
213216 }
214217 hw = to_me_hw(dev);
215218 hw->mem_addr = pcim_iomap_table(pdev)[0];
219
+ hw->read_fws = mei_me_read_fws;
216220
217221 pci_enable_msi(pdev);
222
+
223
+ hw->irq = pdev->irq;
218224
219225 /* request and enable interrupt */
220226 irqflags = pci_dev_msi_enabled(pdev) ? IRQF_ONESHOT : IRQF_SHARED;
....@@ -248,7 +254,7 @@
248254 * MEI requires to resume from runtime suspend mode
249255 * in order to perform link reset flow upon system suspend.
250256 */
251
- dev_pm_set_driver_flags(&pdev->dev, DPM_FLAG_NEVER_SKIP);
257
+ dev_pm_set_driver_flags(&pdev->dev, DPM_FLAG_NO_DIRECT_COMPLETE);
252258
253259 /*
254260 * ME maps runtime suspend/resume to D0i states,
....@@ -401,12 +407,11 @@
401407 #ifdef CONFIG_PM
402408 static int mei_me_pm_runtime_idle(struct device *device)
403409 {
404
- struct pci_dev *pdev = to_pci_dev(device);
405410 struct mei_device *dev;
406411
407
- dev_dbg(&pdev->dev, "rpm: me: runtime_idle\n");
412
+ dev_dbg(device, "rpm: me: runtime_idle\n");
408413
409
- dev = pci_get_drvdata(pdev);
414
+ dev = dev_get_drvdata(device);
410415 if (!dev)
411416 return -ENODEV;
412417 if (mei_write_is_idle(dev))
....@@ -417,13 +422,12 @@
417422
418423 static int mei_me_pm_runtime_suspend(struct device *device)
419424 {
420
- struct pci_dev *pdev = to_pci_dev(device);
421425 struct mei_device *dev;
422426 int ret;
423427
424
- dev_dbg(&pdev->dev, "rpm: me: runtime suspend\n");
428
+ dev_dbg(device, "rpm: me: runtime suspend\n");
425429
426
- dev = pci_get_drvdata(pdev);
430
+ dev = dev_get_drvdata(device);
427431 if (!dev)
428432 return -ENODEV;
429433
....@@ -436,7 +440,7 @@
436440
437441 mutex_unlock(&dev->device_lock);
438442
439
- dev_dbg(&pdev->dev, "rpm: me: runtime suspend ret=%d\n", ret);
443
+ dev_dbg(device, "rpm: me: runtime suspend ret=%d\n", ret);
440444
441445 if (ret && ret != -EAGAIN)
442446 schedule_work(&dev->reset_work);
....@@ -446,13 +450,12 @@
446450
447451 static int mei_me_pm_runtime_resume(struct device *device)
448452 {
449
- struct pci_dev *pdev = to_pci_dev(device);
450453 struct mei_device *dev;
451454 int ret;
452455
453
- dev_dbg(&pdev->dev, "rpm: me: runtime resume\n");
456
+ dev_dbg(device, "rpm: me: runtime resume\n");
454457
455
- dev = pci_get_drvdata(pdev);
458
+ dev = dev_get_drvdata(device);
456459 if (!dev)
457460 return -ENODEV;
458461
....@@ -462,7 +465,7 @@
462465
463466 mutex_unlock(&dev->device_lock);
464467
465
- dev_dbg(&pdev->dev, "rpm: me: runtime resume ret = %d\n", ret);
468
+ dev_dbg(device, "rpm: me: runtime resume ret = %d\n", ret);
466469
467470 if (ret)
468471 schedule_work(&dev->reset_work);