aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjorn Helgaas <bhelgaas@google.com>2014-09-29 15:24:24 -0400
committerBjorn Helgaas <bhelgaas@google.com>2014-09-29 15:24:24 -0400
commit1104528bc769bef26f837097459e1a6e4dae240c (patch)
treecd2a4c8bf4c929abd7dfff94b76b1ca8daf12b56
parentc0ed74e9d026af7b4f79bc29aaac37aac5b6e0a4 (diff)
parent24832b4de315ad00e5430a53772750dfcf18514d (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.c2
-rw-r--r--drivers/pci/host/pci-keystone.c2
-rw-r--r--drivers/pci/host/pci-keystone.h2
-rw-r--r--drivers/pci/host/pcie-designware.c17
-rw-r--r--drivers/pci/host/pcie-designware.h3
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
73u32 ks_dw_pcie_get_msi_data(struct pcie_port *pp) 73u32 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 */
39void ks_dw_pcie_handle_msi_irq(struct keystone_pcie *ks_pcie, int offset); 39void ks_dw_pcie_handle_msi_irq(struct keystone_pcie *ks_pcie, int offset);
40u32 ks_dw_pcie_get_msi_data(struct pcie_port *pp); 40u32 ks_dw_pcie_get_msi_addr(struct pcie_port *pp);
41 41
42/* Keystone specific PCI controller APIs */ 42/* Keystone specific PCI controller APIs */
43void ks_dw_pcie_enable_legacy_irqs(struct keystone_pcie *ks_pcie); 43void 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};