forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-13 9d77db3c730780c8ef5ccd4b66403ff5675cfe4e
kernel/drivers/hwtracing/intel_th/pci.c
....@@ -17,7 +17,13 @@
1717
1818 #define DRIVER_NAME "intel_th_pci"
1919
20
-#define BAR_MASK (BIT(TH_MMIO_CONFIG) | BIT(TH_MMIO_SW))
20
+enum {
21
+ TH_PCI_CONFIG_BAR = 0,
22
+ TH_PCI_STH_SW_BAR = 2,
23
+ TH_PCI_RTIT_BAR = 4,
24
+};
25
+
26
+#define BAR_MASK (BIT(TH_PCI_CONFIG_BAR) | BIT(TH_PCI_STH_SW_BAR))
2127
2228 #define PCI_REG_NPKDSC 0x80
2329 #define NPKDSC_TSACT BIT(5)
....@@ -66,8 +72,12 @@
6672 const struct pci_device_id *id)
6773 {
6874 struct intel_th_drvdata *drvdata = (void *)id->driver_data;
75
+ struct resource resource[TH_MMIO_END + TH_NVEC_MAX] = {
76
+ [TH_MMIO_CONFIG] = pdev->resource[TH_PCI_CONFIG_BAR],
77
+ [TH_MMIO_SW] = pdev->resource[TH_PCI_STH_SW_BAR],
78
+ };
79
+ int err, r = TH_MMIO_SW + 1, i;
6980 struct intel_th *th;
70
- int err;
7181
7282 err = pcim_enable_device(pdev);
7383 if (err)
....@@ -77,10 +87,23 @@
7787 if (err)
7888 return err;
7989
80
- th = intel_th_alloc(&pdev->dev, drvdata, pdev->resource,
81
- DEVICE_COUNT_RESOURCE, pdev->irq);
82
- if (IS_ERR(th))
83
- return PTR_ERR(th);
90
+ if (pdev->resource[TH_PCI_RTIT_BAR].start) {
91
+ resource[TH_MMIO_RTIT] = pdev->resource[TH_PCI_RTIT_BAR];
92
+ r++;
93
+ }
94
+
95
+ err = pci_alloc_irq_vectors(pdev, 1, 8, PCI_IRQ_ALL_TYPES);
96
+ if (err > 0)
97
+ for (i = 0; i < err; i++, r++) {
98
+ resource[r].flags = IORESOURCE_IRQ;
99
+ resource[r].start = pci_irq_vector(pdev, i);
100
+ }
101
+
102
+ th = intel_th_alloc(&pdev->dev, drvdata, resource, r);
103
+ if (IS_ERR(th)) {
104
+ err = PTR_ERR(th);
105
+ goto err_free_irq;
106
+ }
84107
85108 th->activate = intel_th_pci_activate;
86109 th->deactivate = intel_th_pci_deactivate;
....@@ -88,6 +111,10 @@
88111 pci_set_master(pdev);
89112
90113 return 0;
114
+
115
+err_free_irq:
116
+ pci_free_irq_vectors(pdev);
117
+ return err;
91118 }
92119
93120 static void intel_th_pci_remove(struct pci_dev *pdev)
....@@ -95,10 +122,17 @@
95122 struct intel_th *th = pci_get_drvdata(pdev);
96123
97124 intel_th_free(th);
125
+
126
+ pci_free_irq_vectors(pdev);
98127 }
128
+
129
+static const struct intel_th_drvdata intel_th_1x_multi_is_broken = {
130
+ .multi_is_broken = 1,
131
+};
99132
100133 static const struct intel_th_drvdata intel_th_2x = {
101134 .tscu_enable = 1,
135
+ .has_mintctl = 1,
102136 };
103137
104138 static const struct pci_device_id intel_th_pci_id_table[] = {
....@@ -128,7 +162,7 @@
128162 {
129163 /* Kaby Lake PCH-H */
130164 PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0xa2a6),
131
- .driver_data = (kernel_ulong_t)0,
165
+ .driver_data = (kernel_ulong_t)&intel_th_1x_multi_is_broken,
132166 },
133167 {
134168 /* Denverton */
....@@ -183,7 +217,7 @@
183217 {
184218 /* Comet Lake PCH-V */
185219 PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0xa3a6),
186
- .driver_data = (kernel_ulong_t)&intel_th_2x,
220
+ .driver_data = (kernel_ulong_t)&intel_th_1x_multi_is_broken,
187221 },
188222 {
189223 /* Ice Lake NNPI */
....@@ -231,21 +265,46 @@
231265 .driver_data = (kernel_ulong_t)&intel_th_2x,
232266 },
233267 {
234
- /* Alder Lake-P */
235
- PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x51a6),
236
- .driver_data = (kernel_ulong_t)&intel_th_2x,
237
- },
238
- {
239268 /* Emmitsburg PCH */
240269 PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x1bcc),
241270 .driver_data = (kernel_ulong_t)&intel_th_2x,
242271 },
243272 {
273
+ /* Alder Lake */
274
+ PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x7aa6),
275
+ .driver_data = (kernel_ulong_t)&intel_th_2x,
276
+ },
277
+ {
278
+ /* Alder Lake-P */
279
+ PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x51a6),
280
+ .driver_data = (kernel_ulong_t)&intel_th_2x,
281
+ },
282
+ {
244283 /* Alder Lake-M */
245284 PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x54a6),
246285 .driver_data = (kernel_ulong_t)&intel_th_2x,
247286 },
248287 {
288
+ /* Meteor Lake-P */
289
+ PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x7e24),
290
+ .driver_data = (kernel_ulong_t)&intel_th_2x,
291
+ },
292
+ {
293
+ /* Raptor Lake-S */
294
+ PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x7a26),
295
+ .driver_data = (kernel_ulong_t)&intel_th_2x,
296
+ },
297
+ {
298
+ /* Raptor Lake-S CPU */
299
+ PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0xa76f),
300
+ .driver_data = (kernel_ulong_t)&intel_th_2x,
301
+ },
302
+ {
303
+ /* Alder Lake CPU */
304
+ PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x466f),
305
+ .driver_data = (kernel_ulong_t)&intel_th_2x,
306
+ },
307
+ {
249308 /* Rocket Lake CPU */
250309 PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x4c19),
251310 .driver_data = (kernel_ulong_t)&intel_th_2x,