diff options
author | Scott Wood <scottwood@freescale.com> | 2014-09-19 16:20:36 -0400 |
---|---|---|
committer | Scott Wood <scottwood@freescale.com> | 2014-09-19 16:20:42 -0400 |
commit | cb0446c1b625326682ec4f9d1dd10779433646bc (patch) | |
tree | 9579440c40470de0686518ad274487fb5b41005c /arch/powerpc/sysdev/fsl_msi.c | |
parent | 6db35ad2373eed5deb3b105ae7c1e9de3e34ae94 (diff) |
Revert "powerpc/fsl_msi: spread msi ints across different MSIRs"
This reverts commit c822e73731fce3b49a4887140878d084d8a44c08.
This commit conflicted with a bitmap allocator change that partially
accomplishes the same thing, but which does so more correctly. Revert
this one until it can be respun on top of the correct change.
Signed-off-by: Scott Wood <scottwood@freescale.com>
Diffstat (limited to 'arch/powerpc/sysdev/fsl_msi.c')
-rw-r--r-- | arch/powerpc/sysdev/fsl_msi.c | 31 |
1 files changed, 1 insertions, 30 deletions
diff --git a/arch/powerpc/sysdev/fsl_msi.c b/arch/powerpc/sysdev/fsl_msi.c index 37254eff7324..e2ee226464f8 100644 --- a/arch/powerpc/sysdev/fsl_msi.c +++ b/arch/powerpc/sysdev/fsl_msi.c | |||
@@ -213,8 +213,6 @@ static int fsl_setup_msi_irqs(struct pci_dev *pdev, int nvec, int type) | |||
213 | * available interrupt. | 213 | * available interrupt. |
214 | */ | 214 | */ |
215 | list_for_each_entry(msi_data, &msi_head, list) { | 215 | list_for_each_entry(msi_data, &msi_head, list) { |
216 | int off; | ||
217 | |||
218 | /* | 216 | /* |
219 | * If the PCI node has an fsl,msi property, then we | 217 | * If the PCI node has an fsl,msi property, then we |
220 | * restrict our search to the corresponding MSI node. | 218 | * restrict our search to the corresponding MSI node. |
@@ -226,28 +224,7 @@ static int fsl_setup_msi_irqs(struct pci_dev *pdev, int nvec, int type) | |||
226 | if (phandle && (phandle != msi_data->phandle)) | 224 | if (phandle && (phandle != msi_data->phandle)) |
227 | continue; | 225 | continue; |
228 | 226 | ||
229 | /* | 227 | hwirq = msi_bitmap_alloc_hwirqs(&msi_data->bitmap, 1); |
230 | * Allocate the msi message so that it fits on distinct | ||
231 | * MSIR registers. Obviously, since MSIR registers are | ||
232 | * limited they will overlap at one point. | ||
233 | * | ||
234 | * Due to the format of the newly introduced MSIIR1 in | ||
235 | * mpic 4.3, consecutive msi message values map to | ||
236 | * distinct MSIRs, thus distinct msi irq cascades, so | ||
237 | * nothing special needs to be done in this case. | ||
238 | * On older mpic versions the chose distinct SRS | ||
239 | * values by aligning the msi message value to the | ||
240 | * SRS field shift. | ||
241 | */ | ||
242 | if (msi_data->feature & FSL_PIC_FTR_MPIC_4_3) { | ||
243 | off = 0; | ||
244 | } else { | ||
245 | off = atomic_inc_return(&msi_data->msi_alloc_cnt) % | ||
246 | msi_data->msir_num; | ||
247 | off <<= msi_data->srs_shift; | ||
248 | } | ||
249 | hwirq = msi_bitmap_alloc_hwirqs_from_offset( | ||
250 | &msi_data->bitmap, off, 1); | ||
251 | if (hwirq >= 0) | 228 | if (hwirq >= 0) |
252 | break; | 229 | break; |
253 | } | 230 | } |
@@ -487,17 +464,12 @@ static int fsl_of_msi_probe(struct platform_device *dev) | |||
487 | goto error_out; | 464 | goto error_out; |
488 | } | 465 | } |
489 | 466 | ||
490 | atomic_set(&msi->msi_alloc_cnt, -1); | ||
491 | |||
492 | p = of_get_property(dev->dev.of_node, "msi-available-ranges", &len); | 467 | p = of_get_property(dev->dev.of_node, "msi-available-ranges", &len); |
493 | 468 | ||
494 | if (of_device_is_compatible(dev->dev.of_node, "fsl,mpic-msi-v4.3") || | 469 | if (of_device_is_compatible(dev->dev.of_node, "fsl,mpic-msi-v4.3") || |
495 | of_device_is_compatible(dev->dev.of_node, "fsl,vmpic-msi-v4.3")) { | 470 | of_device_is_compatible(dev->dev.of_node, "fsl,vmpic-msi-v4.3")) { |
496 | msi->srs_shift = MSIIR1_SRS_SHIFT; | 471 | msi->srs_shift = MSIIR1_SRS_SHIFT; |
497 | msi->ibs_shift = MSIIR1_IBS_SHIFT; | 472 | msi->ibs_shift = MSIIR1_IBS_SHIFT; |
498 | msi->msir_num = NR_MSI_REG_MSIIR1; | ||
499 | msi->feature |= FSL_PIC_FTR_MPIC_4_3; | ||
500 | |||
501 | if (p) | 473 | if (p) |
502 | dev_warn(&dev->dev, "%s: dose not support msi-available-ranges property\n", | 474 | dev_warn(&dev->dev, "%s: dose not support msi-available-ranges property\n", |
503 | __func__); | 475 | __func__); |
@@ -515,7 +487,6 @@ static int fsl_of_msi_probe(struct platform_device *dev) | |||
515 | 487 | ||
516 | msi->srs_shift = MSIIR_SRS_SHIFT; | 488 | msi->srs_shift = MSIIR_SRS_SHIFT; |
517 | msi->ibs_shift = MSIIR_IBS_SHIFT; | 489 | msi->ibs_shift = MSIIR_IBS_SHIFT; |
518 | msi->msir_num = NR_MSI_REG_MSIIR; | ||
519 | 490 | ||
520 | if (p && len % (2 * sizeof(u32)) != 0) { | 491 | if (p && len % (2 * sizeof(u32)) != 0) { |
521 | dev_err(&dev->dev, "%s: Malformed msi-available-ranges property\n", | 492 | dev_err(&dev->dev, "%s: Malformed msi-available-ranges property\n", |