diff options
author | Bjorn Helgaas <bhelgaas@google.com> | 2014-09-29 15:24:24 -0400 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2014-09-29 15:24:24 -0400 |
commit | 1104528bc769bef26f837097459e1a6e4dae240c (patch) | |
tree | cd2a4c8bf4c929abd7dfff94b76b1ca8daf12b56 | |
parent | c0ed74e9d026af7b4f79bc29aaac37aac5b6e0a4 (diff) | |
parent | 24832b4de315ad00e5430a53772750dfcf18514d (diff) |
Merge branch 'pci/host-designware' into next
* pci/host-designware:
PCI: designware: Add get_msi_data() to pcie_host_ops
PCI: designware: Rename get_msi_data() to get_msi_addr()
PCI: designware: Fix IO resource end address calculation
PCI: designware: Fix configuration base address when using 'reg'
PCI: designware: Use NULL instead of false
[bhelgaas: Fixup keystone for "PCI: designware: Rename get_msi_data() to
get_msi_addr()"]
-rw-r--r-- | drivers/pci/host/pci-keystone-dw.c | 2 | ||||
-rw-r--r-- | drivers/pci/host/pci-keystone.c | 2 | ||||
-rw-r--r-- | drivers/pci/host/pci-keystone.h | 2 | ||||
-rw-r--r-- | drivers/pci/host/pcie-designware.c | 17 | ||||
-rw-r--r-- | drivers/pci/host/pcie-designware.h | 3 |
5 files changed, 15 insertions, 11 deletions
diff --git a/drivers/pci/host/pci-keystone-dw.c b/drivers/pci/host/pci-keystone-dw.c index 2434786ca40b..34086ce88e8e 100644 --- a/drivers/pci/host/pci-keystone-dw.c +++ b/drivers/pci/host/pci-keystone-dw.c | |||
@@ -70,7 +70,7 @@ static inline void update_reg_offset_bit_pos(u32 offset, u32 *reg_offset, | |||
70 | *bit_pos = offset >> 3; | 70 | *bit_pos = offset >> 3; |
71 | } | 71 | } |
72 | 72 | ||
73 | u32 ks_dw_pcie_get_msi_data(struct pcie_port *pp) | 73 | u32 ks_dw_pcie_get_msi_addr(struct pcie_port *pp) |
74 | { | 74 | { |
75 | struct keystone_pcie *ks_pcie = to_keystone_pcie(pp); | 75 | struct keystone_pcie *ks_pcie = to_keystone_pcie(pp); |
76 | 76 | ||
diff --git a/drivers/pci/host/pci-keystone.c b/drivers/pci/host/pci-keystone.c index c95608368508..1b893bc8b842 100644 --- a/drivers/pci/host/pci-keystone.c +++ b/drivers/pci/host/pci-keystone.c | |||
@@ -287,7 +287,7 @@ static struct pcie_host_ops keystone_pcie_host_ops = { | |||
287 | .host_init = ks_pcie_host_init, | 287 | .host_init = ks_pcie_host_init, |
288 | .msi_set_irq = ks_dw_pcie_msi_set_irq, | 288 | .msi_set_irq = ks_dw_pcie_msi_set_irq, |
289 | .msi_clear_irq = ks_dw_pcie_msi_clear_irq, | 289 | .msi_clear_irq = ks_dw_pcie_msi_clear_irq, |
290 | .get_msi_data = ks_dw_pcie_get_msi_data, | 290 | .get_msi_addr = ks_dw_pcie_get_msi_addr, |
291 | .msi_host_init = ks_dw_pcie_msi_host_init, | 291 | .msi_host_init = ks_dw_pcie_msi_host_init, |
292 | .scan_bus = ks_dw_pcie_v3_65_scan_bus, | 292 | .scan_bus = ks_dw_pcie_v3_65_scan_bus, |
293 | }; | 293 | }; |
diff --git a/drivers/pci/host/pci-keystone.h b/drivers/pci/host/pci-keystone.h index 80cfa8e80632..1fc1fceede9e 100644 --- a/drivers/pci/host/pci-keystone.h +++ b/drivers/pci/host/pci-keystone.h | |||
@@ -37,7 +37,7 @@ struct keystone_pcie { | |||
37 | 37 | ||
38 | /* Keystone DW specific MSI controller APIs/definitions */ | 38 | /* Keystone DW specific MSI controller APIs/definitions */ |
39 | void ks_dw_pcie_handle_msi_irq(struct keystone_pcie *ks_pcie, int offset); | 39 | void ks_dw_pcie_handle_msi_irq(struct keystone_pcie *ks_pcie, int offset); |
40 | u32 ks_dw_pcie_get_msi_data(struct pcie_port *pp); | 40 | u32 ks_dw_pcie_get_msi_addr(struct pcie_port *pp); |
41 | 41 | ||
42 | /* Keystone specific PCI controller APIs */ | 42 | /* Keystone specific PCI controller APIs */ |
43 | void ks_dw_pcie_enable_legacy_irqs(struct keystone_pcie *ks_pcie); | 43 | void ks_dw_pcie_enable_legacy_irqs(struct keystone_pcie *ks_pcie); |
diff --git a/drivers/pci/host/pcie-designware.c b/drivers/pci/host/pcie-designware.c index 5d720c21fdc0..34e736601259 100644 --- a/drivers/pci/host/pcie-designware.c +++ b/drivers/pci/host/pcie-designware.c | |||
@@ -361,12 +361,17 @@ static int dw_msi_setup_irq(struct msi_chip *chip, struct pci_dev *pdev, | |||
361 | */ | 361 | */ |
362 | desc->msi_attrib.multiple = msgvec; | 362 | desc->msi_attrib.multiple = msgvec; |
363 | 363 | ||
364 | if (pp->ops->get_msi_data) | 364 | if (pp->ops->get_msi_addr) |
365 | msg.address_lo = pp->ops->get_msi_data(pp); | 365 | msg.address_lo = pp->ops->get_msi_addr(pp); |
366 | else | 366 | else |
367 | msg.address_lo = virt_to_phys((void *)pp->msi_data); | 367 | msg.address_lo = virt_to_phys((void *)pp->msi_data); |
368 | msg.address_hi = 0x0; | 368 | msg.address_hi = 0x0; |
369 | msg.data = pos; | 369 | |
370 | if (pp->ops->get_msi_data) | ||
371 | msg.data = pp->ops->get_msi_data(pp, pos); | ||
372 | else | ||
373 | msg.data = pos; | ||
374 | |||
370 | write_msi_msg(irq, &msg); | 375 | write_msi_msg(irq, &msg); |
371 | 376 | ||
372 | return 0; | 377 | return 0; |
@@ -430,7 +435,7 @@ int __init dw_pcie_host_init(struct pcie_port *pp) | |||
430 | 435 | ||
431 | /* Find the untranslated configuration space address */ | 436 | /* Find the untranslated configuration space address */ |
432 | index = of_property_match_string(np, "reg-names", "config"); | 437 | index = of_property_match_string(np, "reg-names", "config"); |
433 | addrp = of_get_address(np, index, false, false); | 438 | addrp = of_get_address(np, index, NULL, NULL); |
434 | pp->cfg0_mod_base = of_read_number(addrp, ns); | 439 | pp->cfg0_mod_base = of_read_number(addrp, ns); |
435 | pp->cfg1_mod_base = pp->cfg0_mod_base + pp->cfg0_size; | 440 | pp->cfg1_mod_base = pp->cfg0_mod_base + pp->cfg0_size; |
436 | } else { | 441 | } else { |
@@ -454,7 +459,7 @@ int __init dw_pcie_host_init(struct pcie_port *pp) | |||
454 | pp->io.end = min_t(resource_size_t, | 459 | pp->io.end = min_t(resource_size_t, |
455 | IO_SPACE_LIMIT, | 460 | IO_SPACE_LIMIT, |
456 | range.pci_addr + range.size | 461 | range.pci_addr + range.size |
457 | + global_io_offset); | 462 | + global_io_offset - 1); |
458 | pp->io_size = resource_size(&pp->io); | 463 | pp->io_size = resource_size(&pp->io); |
459 | pp->io_bus_addr = range.pci_addr; | 464 | pp->io_bus_addr = range.pci_addr; |
460 | pp->io_base = range.cpu_addr; | 465 | pp->io_base = range.cpu_addr; |
@@ -510,7 +515,6 @@ int __init dw_pcie_host_init(struct pcie_port *pp) | |||
510 | pp->mem_base = pp->mem.start; | 515 | pp->mem_base = pp->mem.start; |
511 | 516 | ||
512 | if (!pp->va_cfg0_base) { | 517 | if (!pp->va_cfg0_base) { |
513 | pp->cfg0_base = pp->cfg.start; | ||
514 | pp->va_cfg0_base = devm_ioremap(pp->dev, pp->cfg0_base, | 518 | pp->va_cfg0_base = devm_ioremap(pp->dev, pp->cfg0_base, |
515 | pp->cfg0_size); | 519 | pp->cfg0_size); |
516 | if (!pp->va_cfg0_base) { | 520 | if (!pp->va_cfg0_base) { |
@@ -520,7 +524,6 @@ int __init dw_pcie_host_init(struct pcie_port *pp) | |||
520 | } | 524 | } |
521 | 525 | ||
522 | if (!pp->va_cfg1_base) { | 526 | if (!pp->va_cfg1_base) { |
523 | pp->cfg1_base = pp->cfg.start + pp->cfg0_size; | ||
524 | pp->va_cfg1_base = devm_ioremap(pp->dev, pp->cfg1_base, | 527 | pp->va_cfg1_base = devm_ioremap(pp->dev, pp->cfg1_base, |
525 | pp->cfg1_size); | 528 | pp->cfg1_size); |
526 | if (!pp->va_cfg1_base) { | 529 | if (!pp->va_cfg1_base) { |
diff --git a/drivers/pci/host/pcie-designware.h b/drivers/pci/host/pcie-designware.h index 48f86702cc9c..c6256751daff 100644 --- a/drivers/pci/host/pcie-designware.h +++ b/drivers/pci/host/pcie-designware.h | |||
@@ -70,7 +70,8 @@ struct pcie_host_ops { | |||
70 | void (*host_init)(struct pcie_port *pp); | 70 | void (*host_init)(struct pcie_port *pp); |
71 | void (*msi_set_irq)(struct pcie_port *pp, int irq); | 71 | void (*msi_set_irq)(struct pcie_port *pp, int irq); |
72 | void (*msi_clear_irq)(struct pcie_port *pp, int irq); | 72 | void (*msi_clear_irq)(struct pcie_port *pp, int irq); |
73 | u32 (*get_msi_data)(struct pcie_port *pp); | 73 | u32 (*get_msi_addr)(struct pcie_port *pp); |
74 | u32 (*get_msi_data)(struct pcie_port *pp, int pos); | ||
74 | void (*scan_bus)(struct pcie_port *pp); | 75 | void (*scan_bus)(struct pcie_port *pp); |
75 | int (*msi_host_init)(struct pcie_port *pp, struct msi_chip *chip); | 76 | int (*msi_host_init)(struct pcie_port *pp, struct msi_chip *chip); |
76 | }; | 77 | }; |