diff options
Diffstat (limited to 'drivers/misc/mei/pci-txe.c')
-rw-r--r-- | drivers/misc/mei/pci-txe.c | 69 |
1 files changed, 10 insertions, 59 deletions
diff --git a/drivers/misc/mei/pci-txe.c b/drivers/misc/mei/pci-txe.c index 58ffd30dcc91..fe088b40daf9 100644 --- a/drivers/misc/mei/pci-txe.c +++ b/drivers/misc/mei/pci-txe.c | |||
@@ -52,17 +52,6 @@ static inline void mei_txe_set_pm_domain(struct mei_device *dev) {} | |||
52 | static inline void mei_txe_unset_pm_domain(struct mei_device *dev) {} | 52 | static inline void mei_txe_unset_pm_domain(struct mei_device *dev) {} |
53 | #endif /* CONFIG_PM */ | 53 | #endif /* CONFIG_PM */ |
54 | 54 | ||
55 | static void mei_txe_pci_iounmap(struct pci_dev *pdev, struct mei_txe_hw *hw) | ||
56 | { | ||
57 | int i; | ||
58 | |||
59 | for (i = SEC_BAR; i < NUM_OF_MEM_BARS; i++) { | ||
60 | if (hw->mem_addr[i]) { | ||
61 | pci_iounmap(pdev, hw->mem_addr[i]); | ||
62 | hw->mem_addr[i] = NULL; | ||
63 | } | ||
64 | } | ||
65 | } | ||
66 | /** | 55 | /** |
67 | * mei_txe_probe - Device Initialization Routine | 56 | * mei_txe_probe - Device Initialization Routine |
68 | * | 57 | * |
@@ -75,22 +64,22 @@ static int mei_txe_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
75 | { | 64 | { |
76 | struct mei_device *dev; | 65 | struct mei_device *dev; |
77 | struct mei_txe_hw *hw; | 66 | struct mei_txe_hw *hw; |
67 | const int mask = BIT(SEC_BAR) | BIT(BRIDGE_BAR); | ||
78 | int err; | 68 | int err; |
79 | int i; | ||
80 | 69 | ||
81 | /* enable pci dev */ | 70 | /* enable pci dev */ |
82 | err = pci_enable_device(pdev); | 71 | err = pcim_enable_device(pdev); |
83 | if (err) { | 72 | if (err) { |
84 | dev_err(&pdev->dev, "failed to enable pci device.\n"); | 73 | dev_err(&pdev->dev, "failed to enable pci device.\n"); |
85 | goto end; | 74 | goto end; |
86 | } | 75 | } |
87 | /* set PCI host mastering */ | 76 | /* set PCI host mastering */ |
88 | pci_set_master(pdev); | 77 | pci_set_master(pdev); |
89 | /* pci request regions for mei driver */ | 78 | /* pci request regions and mapping IO device memory for mei driver */ |
90 | err = pci_request_regions(pdev, KBUILD_MODNAME); | 79 | err = pcim_iomap_regions(pdev, mask, KBUILD_MODNAME); |
91 | if (err) { | 80 | if (err) { |
92 | dev_err(&pdev->dev, "failed to get pci regions.\n"); | 81 | dev_err(&pdev->dev, "failed to get pci regions.\n"); |
93 | goto disable_device; | 82 | goto end; |
94 | } | 83 | } |
95 | 84 | ||
96 | err = pci_set_dma_mask(pdev, DMA_BIT_MASK(36)); | 85 | err = pci_set_dma_mask(pdev, DMA_BIT_MASK(36)); |
@@ -98,7 +87,7 @@ static int mei_txe_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
98 | err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32)); | 87 | err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32)); |
99 | if (err) { | 88 | if (err) { |
100 | dev_err(&pdev->dev, "No suitable DMA available.\n"); | 89 | dev_err(&pdev->dev, "No suitable DMA available.\n"); |
101 | goto release_regions; | 90 | goto end; |
102 | } | 91 | } |
103 | } | 92 | } |
104 | 93 | ||
@@ -106,20 +95,10 @@ static int mei_txe_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
106 | dev = mei_txe_dev_init(pdev); | 95 | dev = mei_txe_dev_init(pdev); |
107 | if (!dev) { | 96 | if (!dev) { |
108 | err = -ENOMEM; | 97 | err = -ENOMEM; |
109 | goto release_regions; | 98 | goto end; |
110 | } | 99 | } |
111 | hw = to_txe_hw(dev); | 100 | hw = to_txe_hw(dev); |
112 | 101 | hw->mem_addr = pcim_iomap_table(pdev); | |
113 | /* mapping IO device memory */ | ||
114 | for (i = SEC_BAR; i < NUM_OF_MEM_BARS; i++) { | ||
115 | hw->mem_addr[i] = pci_iomap(pdev, i, 0); | ||
116 | if (!hw->mem_addr[i]) { | ||
117 | dev_err(&pdev->dev, "mapping I/O device memory failure.\n"); | ||
118 | err = -ENOMEM; | ||
119 | goto free_device; | ||
120 | } | ||
121 | } | ||
122 | |||
123 | 102 | ||
124 | pci_enable_msi(pdev); | 103 | pci_enable_msi(pdev); |
125 | 104 | ||
@@ -140,7 +119,7 @@ static int mei_txe_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
140 | if (err) { | 119 | if (err) { |
141 | dev_err(&pdev->dev, "mei: request_threaded_irq failure. irq = %d\n", | 120 | dev_err(&pdev->dev, "mei: request_threaded_irq failure. irq = %d\n", |
142 | pdev->irq); | 121 | pdev->irq); |
143 | goto free_device; | 122 | goto end; |
144 | } | 123 | } |
145 | 124 | ||
146 | if (mei_start(dev)) { | 125 | if (mei_start(dev)) { |
@@ -173,23 +152,9 @@ static int mei_txe_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
173 | stop: | 152 | stop: |
174 | mei_stop(dev); | 153 | mei_stop(dev); |
175 | release_irq: | 154 | release_irq: |
176 | |||
177 | mei_cancel_work(dev); | 155 | mei_cancel_work(dev); |
178 | |||
179 | /* disable interrupts */ | ||
180 | mei_disable_interrupts(dev); | 156 | mei_disable_interrupts(dev); |
181 | |||
182 | free_irq(pdev->irq, dev); | 157 | free_irq(pdev->irq, dev); |
183 | pci_disable_msi(pdev); | ||
184 | |||
185 | free_device: | ||
186 | mei_txe_pci_iounmap(pdev, hw); | ||
187 | |||
188 | kfree(dev); | ||
189 | release_regions: | ||
190 | pci_release_regions(pdev); | ||
191 | disable_device: | ||
192 | pci_disable_device(pdev); | ||
193 | end: | 158 | end: |
194 | dev_err(&pdev->dev, "initialization failed.\n"); | 159 | dev_err(&pdev->dev, "initialization failed.\n"); |
195 | return err; | 160 | return err; |
@@ -206,38 +171,24 @@ end: | |||
206 | static void mei_txe_remove(struct pci_dev *pdev) | 171 | static void mei_txe_remove(struct pci_dev *pdev) |
207 | { | 172 | { |
208 | struct mei_device *dev; | 173 | struct mei_device *dev; |
209 | struct mei_txe_hw *hw; | ||
210 | 174 | ||
211 | dev = pci_get_drvdata(pdev); | 175 | dev = pci_get_drvdata(pdev); |
212 | if (!dev) { | 176 | if (!dev) { |
213 | dev_err(&pdev->dev, "mei: dev =NULL\n"); | 177 | dev_err(&pdev->dev, "mei: dev == NULL\n"); |
214 | return; | 178 | return; |
215 | } | 179 | } |
216 | 180 | ||
217 | pm_runtime_get_noresume(&pdev->dev); | 181 | pm_runtime_get_noresume(&pdev->dev); |
218 | 182 | ||
219 | hw = to_txe_hw(dev); | ||
220 | |||
221 | mei_stop(dev); | 183 | mei_stop(dev); |
222 | 184 | ||
223 | if (!pci_dev_run_wake(pdev)) | 185 | if (!pci_dev_run_wake(pdev)) |
224 | mei_txe_unset_pm_domain(dev); | 186 | mei_txe_unset_pm_domain(dev); |
225 | 187 | ||
226 | /* disable interrupts */ | ||
227 | mei_disable_interrupts(dev); | 188 | mei_disable_interrupts(dev); |
228 | free_irq(pdev->irq, dev); | 189 | free_irq(pdev->irq, dev); |
229 | pci_disable_msi(pdev); | ||
230 | |||
231 | pci_set_drvdata(pdev, NULL); | ||
232 | |||
233 | mei_txe_pci_iounmap(pdev, hw); | ||
234 | 190 | ||
235 | mei_deregister(dev); | 191 | mei_deregister(dev); |
236 | |||
237 | kfree(dev); | ||
238 | |||
239 | pci_release_regions(pdev); | ||
240 | pci_disable_device(pdev); | ||
241 | } | 192 | } |
242 | 193 | ||
243 | 194 | ||