forked from ~ljy/RK356X_SDK_RELEASE

hc
2023-12-11 072de836f53be56a70cecf70b43ae43b7ce17376
kernel/drivers/xen/xen-pciback/conf_space_header.c
....@@ -6,6 +6,7 @@
66 */
77
88 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
9
+#define dev_fmt pr_fmt
910
1011 #include <linux/kernel.h>
1112 #include <linux/pci.h>
....@@ -67,54 +68,59 @@
6768
6869 dev_data = pci_get_drvdata(dev);
6970 if (!pci_is_enabled(dev) && is_enable_cmd(value)) {
70
- if (unlikely(verbose_request))
71
- printk(KERN_DEBUG DRV_NAME ": %s: enable\n",
72
- pci_name(dev));
71
+ dev_dbg(&dev->dev, "enable\n");
7372 err = pci_enable_device(dev);
7473 if (err)
7574 return err;
7675 if (dev_data)
7776 dev_data->enable_intx = 1;
7877 } else if (pci_is_enabled(dev) && !is_enable_cmd(value)) {
79
- if (unlikely(verbose_request))
80
- printk(KERN_DEBUG DRV_NAME ": %s: disable\n",
81
- pci_name(dev));
78
+ dev_dbg(&dev->dev, "disable\n");
8279 pci_disable_device(dev);
8380 if (dev_data)
8481 dev_data->enable_intx = 0;
8582 }
8683
8784 if (!dev->is_busmaster && is_master_cmd(value)) {
88
- if (unlikely(verbose_request))
89
- printk(KERN_DEBUG DRV_NAME ": %s: set bus master\n",
90
- pci_name(dev));
85
+ dev_dbg(&dev->dev, "set bus master\n");
9186 pci_set_master(dev);
9287 } else if (dev->is_busmaster && !is_master_cmd(value)) {
93
- if (unlikely(verbose_request))
94
- printk(KERN_DEBUG DRV_NAME ": %s: clear bus master\n",
95
- pci_name(dev));
88
+ dev_dbg(&dev->dev, "clear bus master\n");
9689 pci_clear_master(dev);
9790 }
9891
9992 if (!(cmd->val & PCI_COMMAND_INVALIDATE) &&
10093 (value & PCI_COMMAND_INVALIDATE)) {
101
- if (unlikely(verbose_request))
102
- printk(KERN_DEBUG
103
- DRV_NAME ": %s: enable memory-write-invalidate\n",
104
- pci_name(dev));
94
+ dev_dbg(&dev->dev, "enable memory-write-invalidate\n");
10595 err = pci_set_mwi(dev);
10696 if (err) {
107
- pr_warn("%s: cannot enable memory-write-invalidate (%d)\n",
108
- pci_name(dev), err);
97
+ dev_warn(&dev->dev, "cannot enable memory-write-invalidate (%d)\n",
98
+ err);
10999 value &= ~PCI_COMMAND_INVALIDATE;
110100 }
111101 } else if ((cmd->val & PCI_COMMAND_INVALIDATE) &&
112102 !(value & PCI_COMMAND_INVALIDATE)) {
113
- if (unlikely(verbose_request))
114
- printk(KERN_DEBUG
115
- DRV_NAME ": %s: disable memory-write-invalidate\n",
116
- pci_name(dev));
103
+ dev_dbg(&dev->dev, "disable memory-write-invalidate\n");
117104 pci_clear_mwi(dev);
105
+ }
106
+
107
+ if (dev_data && dev_data->allow_interrupt_control) {
108
+ if ((cmd->val ^ value) & PCI_COMMAND_INTX_DISABLE) {
109
+ if (value & PCI_COMMAND_INTX_DISABLE) {
110
+ pci_intx(dev, 0);
111
+ } else {
112
+ /* Do not allow enabling INTx together with MSI or MSI-X. */
113
+ switch (xen_pcibk_get_interrupt_type(dev)) {
114
+ case INTERRUPT_TYPE_NONE:
115
+ pci_intx(dev, 1);
116
+ break;
117
+ case INTERRUPT_TYPE_INTX:
118
+ break;
119
+ default:
120
+ return PCIBIOS_SET_FAILED;
121
+ }
122
+ }
123
+ }
118124 }
119125
120126 cmd->val = value;
....@@ -138,8 +144,7 @@
138144 struct pci_bar_info *bar = data;
139145
140146 if (unlikely(!bar)) {
141
- pr_warn(DRV_NAME ": driver data not found for %s\n",
142
- pci_name(dev));
147
+ dev_warn(&dev->dev, "driver data not found\n");
143148 return XEN_PCI_ERR_op_failed;
144149 }
145150
....@@ -175,8 +180,7 @@
175180 u32 mask;
176181
177182 if (unlikely(!bar)) {
178
- pr_warn(DRV_NAME ": driver data not found for %s\n",
179
- pci_name(dev));
183
+ dev_warn(&dev->dev, "driver data not found\n");
180184 return XEN_PCI_ERR_op_failed;
181185 }
182186
....@@ -209,8 +213,7 @@
209213 struct pci_bar_info *bar = data;
210214
211215 if (unlikely(!bar)) {
212
- pr_warn(DRV_NAME ": driver data not found for %s\n",
213
- pci_name(dev));
216
+ dev_warn(&dev->dev, "driver data not found\n");
214217 return XEN_PCI_ERR_op_failed;
215218 }
216219
....@@ -414,8 +417,8 @@
414417
415418 default:
416419 err = -EINVAL;
417
- pr_err("%s: Unsupported header type %d!\n",
418
- pci_name(dev), dev->hdr_type);
420
+ dev_err(&dev->dev, "Unsupported header type %d!\n",
421
+ dev->hdr_type);
419422 break;
420423 }
421424