diff options
author | Wolfram Sang <wsa@the-dreams.de> | 2017-10-26 16:24:15 -0400 |
---|---|---|
committer | Wolfram Sang <wsa@the-dreams.de> | 2017-10-26 16:24:15 -0400 |
commit | 3990bedea6e96cb1f182dbeadd62215dbb9e1c85 (patch) | |
tree | 90ac0ab8ae1d4339dc17eb42a853042ea06d6b13 /drivers/misc | |
parent | 631de7a4603439eaa1d7a2a1a7b5b49edcd87f67 (diff) | |
parent | 3997fb74846f35d0364c5e88e54bc9b166d5a1bc (diff) |
Merge branch 'i2c-mux/for-next' of https://github.com/peda-r/i2c-mux into i2c/for-4.15
This cycle has been real quiet for me. There's only the one trivial
patch that somewhat simplifies DT parsing in the i2c-mux-reg driver.
Diffstat (limited to 'drivers/misc')
-rw-r--r-- | drivers/misc/cxl/cxllib.c | 13 | ||||
-rw-r--r-- | drivers/misc/mei/hw-me-regs.h | 2 | ||||
-rw-r--r-- | drivers/misc/mei/pci-me.c | 23 | ||||
-rw-r--r-- | drivers/misc/mei/pci-txe.c | 30 |
4 files changed, 37 insertions, 31 deletions
diff --git a/drivers/misc/cxl/cxllib.c b/drivers/misc/cxl/cxllib.c index 5dba23ca2e5f..dc9bc1807fdf 100644 --- a/drivers/misc/cxl/cxllib.c +++ b/drivers/misc/cxl/cxllib.c | |||
@@ -219,8 +219,17 @@ int cxllib_handle_fault(struct mm_struct *mm, u64 addr, u64 size, u64 flags) | |||
219 | 219 | ||
220 | down_read(&mm->mmap_sem); | 220 | down_read(&mm->mmap_sem); |
221 | 221 | ||
222 | for (dar = addr; dar < addr + size; dar += page_size) { | 222 | vma = find_vma(mm, addr); |
223 | if (!vma || dar < vma->vm_start || dar > vma->vm_end) { | 223 | if (!vma) { |
224 | pr_err("Can't find vma for addr %016llx\n", addr); | ||
225 | rc = -EFAULT; | ||
226 | goto out; | ||
227 | } | ||
228 | /* get the size of the pages allocated */ | ||
229 | page_size = vma_kernel_pagesize(vma); | ||
230 | |||
231 | for (dar = (addr & ~(page_size - 1)); dar < (addr + size); dar += page_size) { | ||
232 | if (dar < vma->vm_start || dar >= vma->vm_end) { | ||
224 | vma = find_vma(mm, addr); | 233 | vma = find_vma(mm, addr); |
225 | if (!vma) { | 234 | if (!vma) { |
226 | pr_err("Can't find vma for addr %016llx\n", addr); | 235 | pr_err("Can't find vma for addr %016llx\n", addr); |
diff --git a/drivers/misc/mei/hw-me-regs.h b/drivers/misc/mei/hw-me-regs.h index c8307e8b4c16..0ccccbaf530d 100644 --- a/drivers/misc/mei/hw-me-regs.h +++ b/drivers/misc/mei/hw-me-regs.h | |||
@@ -127,6 +127,8 @@ | |||
127 | #define MEI_DEV_ID_BXT_M 0x1A9A /* Broxton M */ | 127 | #define MEI_DEV_ID_BXT_M 0x1A9A /* Broxton M */ |
128 | #define MEI_DEV_ID_APL_I 0x5A9A /* Apollo Lake I */ | 128 | #define MEI_DEV_ID_APL_I 0x5A9A /* Apollo Lake I */ |
129 | 129 | ||
130 | #define MEI_DEV_ID_GLK 0x319A /* Gemini Lake */ | ||
131 | |||
130 | #define MEI_DEV_ID_KBP 0xA2BA /* Kaby Point */ | 132 | #define MEI_DEV_ID_KBP 0xA2BA /* Kaby Point */ |
131 | #define MEI_DEV_ID_KBP_2 0xA2BB /* Kaby Point 2 */ | 133 | #define MEI_DEV_ID_KBP_2 0xA2BB /* Kaby Point 2 */ |
132 | 134 | ||
diff --git a/drivers/misc/mei/pci-me.c b/drivers/misc/mei/pci-me.c index 4ff40d319676..78b3172c8e6e 100644 --- a/drivers/misc/mei/pci-me.c +++ b/drivers/misc/mei/pci-me.c | |||
@@ -93,6 +93,8 @@ static const struct pci_device_id mei_me_pci_tbl[] = { | |||
93 | {MEI_PCI_DEVICE(MEI_DEV_ID_BXT_M, MEI_ME_PCH8_CFG)}, | 93 | {MEI_PCI_DEVICE(MEI_DEV_ID_BXT_M, MEI_ME_PCH8_CFG)}, |
94 | {MEI_PCI_DEVICE(MEI_DEV_ID_APL_I, MEI_ME_PCH8_CFG)}, | 94 | {MEI_PCI_DEVICE(MEI_DEV_ID_APL_I, MEI_ME_PCH8_CFG)}, |
95 | 95 | ||
96 | {MEI_PCI_DEVICE(MEI_DEV_ID_GLK, MEI_ME_PCH8_CFG)}, | ||
97 | |||
96 | {MEI_PCI_DEVICE(MEI_DEV_ID_KBP, MEI_ME_PCH8_CFG)}, | 98 | {MEI_PCI_DEVICE(MEI_DEV_ID_KBP, MEI_ME_PCH8_CFG)}, |
97 | {MEI_PCI_DEVICE(MEI_DEV_ID_KBP_2, MEI_ME_PCH8_CFG)}, | 99 | {MEI_PCI_DEVICE(MEI_DEV_ID_KBP_2, MEI_ME_PCH8_CFG)}, |
98 | 100 | ||
@@ -226,12 +228,15 @@ static int mei_me_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
226 | pdev->dev_flags |= PCI_DEV_FLAGS_NEEDS_RESUME; | 228 | pdev->dev_flags |= PCI_DEV_FLAGS_NEEDS_RESUME; |
227 | 229 | ||
228 | /* | 230 | /* |
229 | * For not wake-able HW runtime pm framework | 231 | * ME maps runtime suspend/resume to D0i states, |
230 | * can't be used on pci device level. | 232 | * hence we need to go around native PCI runtime service which |
231 | * Use domain runtime pm callbacks instead. | 233 | * eventually brings the device into D3cold/hot state, |
232 | */ | 234 | * but the mei device cannot wake up from D3 unlike from D0i3. |
233 | if (!pci_dev_run_wake(pdev)) | 235 | * To get around the PCI device native runtime pm, |
234 | mei_me_set_pm_domain(dev); | 236 | * ME uses runtime pm domain handlers which take precedence |
237 | * over the driver's pm handlers. | ||
238 | */ | ||
239 | mei_me_set_pm_domain(dev); | ||
235 | 240 | ||
236 | if (mei_pg_is_enabled(dev)) | 241 | if (mei_pg_is_enabled(dev)) |
237 | pm_runtime_put_noidle(&pdev->dev); | 242 | pm_runtime_put_noidle(&pdev->dev); |
@@ -271,8 +276,7 @@ static void mei_me_shutdown(struct pci_dev *pdev) | |||
271 | dev_dbg(&pdev->dev, "shutdown\n"); | 276 | dev_dbg(&pdev->dev, "shutdown\n"); |
272 | mei_stop(dev); | 277 | mei_stop(dev); |
273 | 278 | ||
274 | if (!pci_dev_run_wake(pdev)) | 279 | mei_me_unset_pm_domain(dev); |
275 | mei_me_unset_pm_domain(dev); | ||
276 | 280 | ||
277 | mei_disable_interrupts(dev); | 281 | mei_disable_interrupts(dev); |
278 | free_irq(pdev->irq, dev); | 282 | free_irq(pdev->irq, dev); |
@@ -300,8 +304,7 @@ static void mei_me_remove(struct pci_dev *pdev) | |||
300 | dev_dbg(&pdev->dev, "stop\n"); | 304 | dev_dbg(&pdev->dev, "stop\n"); |
301 | mei_stop(dev); | 305 | mei_stop(dev); |
302 | 306 | ||
303 | if (!pci_dev_run_wake(pdev)) | 307 | mei_me_unset_pm_domain(dev); |
304 | mei_me_unset_pm_domain(dev); | ||
305 | 308 | ||
306 | mei_disable_interrupts(dev); | 309 | mei_disable_interrupts(dev); |
307 | 310 | ||
diff --git a/drivers/misc/mei/pci-txe.c b/drivers/misc/mei/pci-txe.c index e38a5f144373..0566f9bfa7de 100644 --- a/drivers/misc/mei/pci-txe.c +++ b/drivers/misc/mei/pci-txe.c | |||
@@ -144,12 +144,14 @@ static int mei_txe_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
144 | pdev->dev_flags |= PCI_DEV_FLAGS_NEEDS_RESUME; | 144 | pdev->dev_flags |= PCI_DEV_FLAGS_NEEDS_RESUME; |
145 | 145 | ||
146 | /* | 146 | /* |
147 | * For not wake-able HW runtime pm framework | 147 | * TXE maps runtime suspend/resume to own power gating states, |
148 | * can't be used on pci device level. | 148 | * hence we need to go around native PCI runtime service which |
149 | * Use domain runtime pm callbacks instead. | 149 | * eventually brings the device into D3cold/hot state. |
150 | */ | 150 | * But the TXE device cannot wake up from D3 unlike from own |
151 | if (!pci_dev_run_wake(pdev)) | 151 | * power gating. To get around PCI device native runtime pm, |
152 | mei_txe_set_pm_domain(dev); | 152 | * TXE uses runtime pm domain handlers which take precedence. |
153 | */ | ||
154 | mei_txe_set_pm_domain(dev); | ||
153 | 155 | ||
154 | pm_runtime_put_noidle(&pdev->dev); | 156 | pm_runtime_put_noidle(&pdev->dev); |
155 | 157 | ||
@@ -186,8 +188,7 @@ static void mei_txe_shutdown(struct pci_dev *pdev) | |||
186 | dev_dbg(&pdev->dev, "shutdown\n"); | 188 | dev_dbg(&pdev->dev, "shutdown\n"); |
187 | mei_stop(dev); | 189 | mei_stop(dev); |
188 | 190 | ||
189 | if (!pci_dev_run_wake(pdev)) | 191 | mei_txe_unset_pm_domain(dev); |
190 | mei_txe_unset_pm_domain(dev); | ||
191 | 192 | ||
192 | mei_disable_interrupts(dev); | 193 | mei_disable_interrupts(dev); |
193 | free_irq(pdev->irq, dev); | 194 | free_irq(pdev->irq, dev); |
@@ -215,8 +216,7 @@ static void mei_txe_remove(struct pci_dev *pdev) | |||
215 | 216 | ||
216 | mei_stop(dev); | 217 | mei_stop(dev); |
217 | 218 | ||
218 | if (!pci_dev_run_wake(pdev)) | 219 | mei_txe_unset_pm_domain(dev); |
219 | mei_txe_unset_pm_domain(dev); | ||
220 | 220 | ||
221 | mei_disable_interrupts(dev); | 221 | mei_disable_interrupts(dev); |
222 | free_irq(pdev->irq, dev); | 222 | free_irq(pdev->irq, dev); |
@@ -318,15 +318,7 @@ static int mei_txe_pm_runtime_suspend(struct device *device) | |||
318 | else | 318 | else |
319 | ret = -EAGAIN; | 319 | ret = -EAGAIN; |
320 | 320 | ||
321 | /* | 321 | /* keep irq on we are staying in D0 */ |
322 | * If everything is okay we're about to enter PCI low | ||
323 | * power state (D3) therefor we need to disable the | ||
324 | * interrupts towards host. | ||
325 | * However if device is not wakeable we do not enter | ||
326 | * D-low state and we need to keep the interrupt kicking | ||
327 | */ | ||
328 | if (!ret && pci_dev_run_wake(pdev)) | ||
329 | mei_disable_interrupts(dev); | ||
330 | 322 | ||
331 | dev_dbg(&pdev->dev, "rpm: txe: runtime suspend ret=%d\n", ret); | 323 | dev_dbg(&pdev->dev, "rpm: txe: runtime suspend ret=%d\n", ret); |
332 | 324 | ||