aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPratyush Anand <pratyush.anand@st.com>2014-09-05 19:48:54 -0400
committerBjorn Helgaas <bhelgaas@google.com>2014-09-05 19:48:54 -0400
commitadf70fc087b1750c3792cd56abc6a45e49bb3a11 (patch)
tree367e52effec28c366b7d2c9adf1f2db9f1a4d09f
parent84a263f39403ca3b399af77499876e02e634b00b (diff)
PCI: designware: Fold struct pcie_port_info into struct pcie_port
The struct pcie_port_info doesn't contain any exclusive information compared to other elements of struct pcie_port. So, keeping a separate structure does not seem very logical. Therefore remove this struct and embed its elements directly into struct pcie_port. Signed-off-by: Pratyush Anand <pratyush.anand@st.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Acked-by: Mohit Kumar <mohit.kumar@st.com>
-rw-r--r--drivers/pci/host/pcie-designware.c55
-rw-r--r--drivers/pci/host/pcie-designware.h16
2 files changed, 33 insertions, 38 deletions
diff --git a/drivers/pci/host/pcie-designware.c b/drivers/pci/host/pcie-designware.c
index 12c42fcd7c35..5d720c21fdc0 100644
--- a/drivers/pci/host/pcie-designware.c
+++ b/drivers/pci/host/pcie-designware.c
@@ -423,16 +423,16 @@ int __init dw_pcie_host_init(struct pcie_port *pp)
423 423
424 cfg_res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "config"); 424 cfg_res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "config");
425 if (cfg_res) { 425 if (cfg_res) {
426 pp->config.cfg0_size = resource_size(cfg_res)/2; 426 pp->cfg0_size = resource_size(cfg_res)/2;
427 pp->config.cfg1_size = resource_size(cfg_res)/2; 427 pp->cfg1_size = resource_size(cfg_res)/2;
428 pp->cfg0_base = cfg_res->start; 428 pp->cfg0_base = cfg_res->start;
429 pp->cfg1_base = cfg_res->start + pp->config.cfg0_size; 429 pp->cfg1_base = cfg_res->start + pp->cfg0_size;
430 430
431 /* Find the untranslated configuration space address */ 431 /* Find the untranslated configuration space address */
432 index = of_property_match_string(np, "reg-names", "config"); 432 index = of_property_match_string(np, "reg-names", "config");
433 addrp = of_get_address(np, index, false, false); 433 addrp = of_get_address(np, index, false, false);
434 pp->cfg0_mod_base = of_read_number(addrp, ns); 434 pp->cfg0_mod_base = of_read_number(addrp, ns);
435 pp->cfg1_mod_base = pp->cfg0_mod_base + pp->config.cfg0_size; 435 pp->cfg1_mod_base = pp->cfg0_mod_base + pp->cfg0_size;
436 } else { 436 } else {
437 dev_err(pp->dev, "missing *config* reg space\n"); 437 dev_err(pp->dev, "missing *config* reg space\n");
438 } 438 }
@@ -455,8 +455,8 @@ int __init dw_pcie_host_init(struct pcie_port *pp)
455 IO_SPACE_LIMIT, 455 IO_SPACE_LIMIT,
456 range.pci_addr + range.size 456 range.pci_addr + range.size
457 + global_io_offset); 457 + global_io_offset);
458 pp->config.io_size = resource_size(&pp->io); 458 pp->io_size = resource_size(&pp->io);
459 pp->config.io_bus_addr = range.pci_addr; 459 pp->io_bus_addr = range.pci_addr;
460 pp->io_base = range.cpu_addr; 460 pp->io_base = range.cpu_addr;
461 461
462 /* Find the untranslated IO space address */ 462 /* Find the untranslated IO space address */
@@ -466,8 +466,8 @@ int __init dw_pcie_host_init(struct pcie_port *pp)
466 if (restype == IORESOURCE_MEM) { 466 if (restype == IORESOURCE_MEM) {
467 of_pci_range_to_resource(&range, np, &pp->mem); 467 of_pci_range_to_resource(&range, np, &pp->mem);
468 pp->mem.name = "MEM"; 468 pp->mem.name = "MEM";
469 pp->config.mem_size = resource_size(&pp->mem); 469 pp->mem_size = resource_size(&pp->mem);
470 pp->config.mem_bus_addr = range.pci_addr; 470 pp->mem_bus_addr = range.pci_addr;
471 471
472 /* Find the untranslated MEM space address */ 472 /* Find the untranslated MEM space address */
473 pp->mem_mod_base = of_read_number(parser.range - 473 pp->mem_mod_base = of_read_number(parser.range -
@@ -475,16 +475,16 @@ int __init dw_pcie_host_init(struct pcie_port *pp)
475 } 475 }
476 if (restype == 0) { 476 if (restype == 0) {
477 of_pci_range_to_resource(&range, np, &pp->cfg); 477 of_pci_range_to_resource(&range, np, &pp->cfg);
478 pp->config.cfg0_size = resource_size(&pp->cfg)/2; 478 pp->cfg0_size = resource_size(&pp->cfg)/2;
479 pp->config.cfg1_size = resource_size(&pp->cfg)/2; 479 pp->cfg1_size = resource_size(&pp->cfg)/2;
480 pp->cfg0_base = pp->cfg.start; 480 pp->cfg0_base = pp->cfg.start;
481 pp->cfg1_base = pp->cfg.start + pp->config.cfg0_size; 481 pp->cfg1_base = pp->cfg.start + pp->cfg0_size;
482 482
483 /* Find the untranslated configuration space address */ 483 /* Find the untranslated configuration space address */
484 pp->cfg0_mod_base = of_read_number(parser.range - 484 pp->cfg0_mod_base = of_read_number(parser.range -
485 parser.np + na, ns); 485 parser.np + na, ns);
486 pp->cfg1_mod_base = pp->cfg0_mod_base + 486 pp->cfg1_mod_base = pp->cfg0_mod_base +
487 pp->config.cfg0_size; 487 pp->cfg0_size;
488 } 488 }
489 } 489 }
490 490
@@ -512,7 +512,7 @@ int __init dw_pcie_host_init(struct pcie_port *pp)
512 if (!pp->va_cfg0_base) { 512 if (!pp->va_cfg0_base) {
513 pp->cfg0_base = pp->cfg.start; 513 pp->cfg0_base = pp->cfg.start;
514 pp->va_cfg0_base = devm_ioremap(pp->dev, pp->cfg0_base, 514 pp->va_cfg0_base = devm_ioremap(pp->dev, pp->cfg0_base,
515 pp->config.cfg0_size); 515 pp->cfg0_size);
516 if (!pp->va_cfg0_base) { 516 if (!pp->va_cfg0_base) {
517 dev_err(pp->dev, "error with ioremap in function\n"); 517 dev_err(pp->dev, "error with ioremap in function\n");
518 return -ENOMEM; 518 return -ENOMEM;
@@ -520,9 +520,9 @@ int __init dw_pcie_host_init(struct pcie_port *pp)
520 } 520 }
521 521
522 if (!pp->va_cfg1_base) { 522 if (!pp->va_cfg1_base) {
523 pp->cfg1_base = pp->cfg.start + pp->config.cfg0_size; 523 pp->cfg1_base = pp->cfg.start + pp->cfg0_size;
524 pp->va_cfg1_base = devm_ioremap(pp->dev, pp->cfg1_base, 524 pp->va_cfg1_base = devm_ioremap(pp->dev, pp->cfg1_base,
525 pp->config.cfg1_size); 525 pp->cfg1_size);
526 if (!pp->va_cfg1_base) { 526 if (!pp->va_cfg1_base) {
527 dev_err(pp->dev, "error with ioremap\n"); 527 dev_err(pp->dev, "error with ioremap\n");
528 return -ENOMEM; 528 return -ENOMEM;
@@ -583,7 +583,7 @@ static void dw_pcie_prog_viewport_cfg0(struct pcie_port *pp, u32 busdev)
583 PCIE_ATU_VIEWPORT); 583 PCIE_ATU_VIEWPORT);
584 dw_pcie_writel_rc(pp, pp->cfg0_mod_base, PCIE_ATU_LOWER_BASE); 584 dw_pcie_writel_rc(pp, pp->cfg0_mod_base, PCIE_ATU_LOWER_BASE);
585 dw_pcie_writel_rc(pp, (pp->cfg0_mod_base >> 32), PCIE_ATU_UPPER_BASE); 585 dw_pcie_writel_rc(pp, (pp->cfg0_mod_base >> 32), PCIE_ATU_UPPER_BASE);
586 dw_pcie_writel_rc(pp, pp->cfg0_mod_base + pp->config.cfg0_size - 1, 586 dw_pcie_writel_rc(pp, pp->cfg0_mod_base + pp->cfg0_size - 1,
587 PCIE_ATU_LIMIT); 587 PCIE_ATU_LIMIT);
588 dw_pcie_writel_rc(pp, busdev, PCIE_ATU_LOWER_TARGET); 588 dw_pcie_writel_rc(pp, busdev, PCIE_ATU_LOWER_TARGET);
589 dw_pcie_writel_rc(pp, 0, PCIE_ATU_UPPER_TARGET); 589 dw_pcie_writel_rc(pp, 0, PCIE_ATU_UPPER_TARGET);
@@ -599,7 +599,7 @@ static void dw_pcie_prog_viewport_cfg1(struct pcie_port *pp, u32 busdev)
599 dw_pcie_writel_rc(pp, PCIE_ATU_TYPE_CFG1, PCIE_ATU_CR1); 599 dw_pcie_writel_rc(pp, PCIE_ATU_TYPE_CFG1, PCIE_ATU_CR1);
600 dw_pcie_writel_rc(pp, pp->cfg1_mod_base, PCIE_ATU_LOWER_BASE); 600 dw_pcie_writel_rc(pp, pp->cfg1_mod_base, PCIE_ATU_LOWER_BASE);
601 dw_pcie_writel_rc(pp, (pp->cfg1_mod_base >> 32), PCIE_ATU_UPPER_BASE); 601 dw_pcie_writel_rc(pp, (pp->cfg1_mod_base >> 32), PCIE_ATU_UPPER_BASE);
602 dw_pcie_writel_rc(pp, pp->cfg1_mod_base + pp->config.cfg1_size - 1, 602 dw_pcie_writel_rc(pp, pp->cfg1_mod_base + pp->cfg1_size - 1,
603 PCIE_ATU_LIMIT); 603 PCIE_ATU_LIMIT);
604 dw_pcie_writel_rc(pp, busdev, PCIE_ATU_LOWER_TARGET); 604 dw_pcie_writel_rc(pp, busdev, PCIE_ATU_LOWER_TARGET);
605 dw_pcie_writel_rc(pp, 0, PCIE_ATU_UPPER_TARGET); 605 dw_pcie_writel_rc(pp, 0, PCIE_ATU_UPPER_TARGET);
@@ -614,10 +614,10 @@ static void dw_pcie_prog_viewport_mem_outbound(struct pcie_port *pp)
614 dw_pcie_writel_rc(pp, PCIE_ATU_TYPE_MEM, PCIE_ATU_CR1); 614 dw_pcie_writel_rc(pp, PCIE_ATU_TYPE_MEM, PCIE_ATU_CR1);
615 dw_pcie_writel_rc(pp, pp->mem_mod_base, PCIE_ATU_LOWER_BASE); 615 dw_pcie_writel_rc(pp, pp->mem_mod_base, PCIE_ATU_LOWER_BASE);
616 dw_pcie_writel_rc(pp, (pp->mem_mod_base >> 32), PCIE_ATU_UPPER_BASE); 616 dw_pcie_writel_rc(pp, (pp->mem_mod_base >> 32), PCIE_ATU_UPPER_BASE);
617 dw_pcie_writel_rc(pp, pp->mem_mod_base + pp->config.mem_size - 1, 617 dw_pcie_writel_rc(pp, pp->mem_mod_base + pp->mem_size - 1,
618 PCIE_ATU_LIMIT); 618 PCIE_ATU_LIMIT);
619 dw_pcie_writel_rc(pp, pp->config.mem_bus_addr, PCIE_ATU_LOWER_TARGET); 619 dw_pcie_writel_rc(pp, pp->mem_bus_addr, PCIE_ATU_LOWER_TARGET);
620 dw_pcie_writel_rc(pp, upper_32_bits(pp->config.mem_bus_addr), 620 dw_pcie_writel_rc(pp, upper_32_bits(pp->mem_bus_addr),
621 PCIE_ATU_UPPER_TARGET); 621 PCIE_ATU_UPPER_TARGET);
622 dw_pcie_writel_rc(pp, PCIE_ATU_ENABLE, PCIE_ATU_CR2); 622 dw_pcie_writel_rc(pp, PCIE_ATU_ENABLE, PCIE_ATU_CR2);
623} 623}
@@ -630,10 +630,10 @@ static void dw_pcie_prog_viewport_io_outbound(struct pcie_port *pp)
630 dw_pcie_writel_rc(pp, PCIE_ATU_TYPE_IO, PCIE_ATU_CR1); 630 dw_pcie_writel_rc(pp, PCIE_ATU_TYPE_IO, PCIE_ATU_CR1);
631 dw_pcie_writel_rc(pp, pp->io_mod_base, PCIE_ATU_LOWER_BASE); 631 dw_pcie_writel_rc(pp, pp->io_mod_base, PCIE_ATU_LOWER_BASE);
632 dw_pcie_writel_rc(pp, (pp->io_mod_base >> 32), PCIE_ATU_UPPER_BASE); 632 dw_pcie_writel_rc(pp, (pp->io_mod_base >> 32), PCIE_ATU_UPPER_BASE);
633 dw_pcie_writel_rc(pp, pp->io_mod_base + pp->config.io_size - 1, 633 dw_pcie_writel_rc(pp, pp->io_mod_base + pp->io_size - 1,
634 PCIE_ATU_LIMIT); 634 PCIE_ATU_LIMIT);
635 dw_pcie_writel_rc(pp, pp->config.io_bus_addr, PCIE_ATU_LOWER_TARGET); 635 dw_pcie_writel_rc(pp, pp->io_bus_addr, PCIE_ATU_LOWER_TARGET);
636 dw_pcie_writel_rc(pp, upper_32_bits(pp->config.io_bus_addr), 636 dw_pcie_writel_rc(pp, upper_32_bits(pp->io_bus_addr),
637 PCIE_ATU_UPPER_TARGET); 637 PCIE_ATU_UPPER_TARGET);
638 dw_pcie_writel_rc(pp, PCIE_ATU_ENABLE, PCIE_ATU_CR2); 638 dw_pcie_writel_rc(pp, PCIE_ATU_ENABLE, PCIE_ATU_CR2);
639} 639}
@@ -768,15 +768,15 @@ static int dw_pcie_setup(int nr, struct pci_sys_data *sys)
768 768
769 pp = sys_to_pcie(sys); 769 pp = sys_to_pcie(sys);
770 770
771 if (global_io_offset < SZ_1M && pp->config.io_size > 0) { 771 if (global_io_offset < SZ_1M && pp->io_size > 0) {
772 sys->io_offset = global_io_offset - pp->config.io_bus_addr; 772 sys->io_offset = global_io_offset - pp->io_bus_addr;
773 pci_ioremap_io(global_io_offset, pp->io_base); 773 pci_ioremap_io(global_io_offset, pp->io_base);
774 global_io_offset += SZ_64K; 774 global_io_offset += SZ_64K;
775 pci_add_resource_offset(&sys->resources, &pp->io, 775 pci_add_resource_offset(&sys->resources, &pp->io,
776 sys->io_offset); 776 sys->io_offset);
777 } 777 }
778 778
779 sys->mem_offset = pp->mem.start - pp->config.mem_bus_addr; 779 sys->mem_offset = pp->mem.start - pp->mem_bus_addr;
780 pci_add_resource_offset(&sys->resources, &pp->mem, sys->mem_offset); 780 pci_add_resource_offset(&sys->resources, &pp->mem, sys->mem_offset);
781 pci_add_resource(&sys->resources, &pp->busn); 781 pci_add_resource(&sys->resources, &pp->busn);
782 782
@@ -833,7 +833,6 @@ static struct hw_pci dw_pci = {
833 833
834void dw_pcie_setup_rc(struct pcie_port *pp) 834void dw_pcie_setup_rc(struct pcie_port *pp)
835{ 835{
836 struct pcie_port_info *config = &pp->config;
837 u32 val; 836 u32 val;
838 u32 membase; 837 u32 membase;
839 u32 memlimit; 838 u32 memlimit;
@@ -888,7 +887,7 @@ void dw_pcie_setup_rc(struct pcie_port *pp)
888 887
889 /* setup memory base, memory limit */ 888 /* setup memory base, memory limit */
890 membase = ((u32)pp->mem_base & 0xfff00000) >> 16; 889 membase = ((u32)pp->mem_base & 0xfff00000) >> 16;
891 memlimit = (config->mem_size + (u32)pp->mem_base) & 0xfff00000; 890 memlimit = (pp->mem_size + (u32)pp->mem_base) & 0xfff00000;
892 val = memlimit | membase; 891 val = memlimit | membase;
893 dw_pcie_writel_rc(pp, val, PCI_MEMORY_BASE); 892 dw_pcie_writel_rc(pp, val, PCI_MEMORY_BASE);
894 893
diff --git a/drivers/pci/host/pcie-designware.h b/drivers/pci/host/pcie-designware.h
index a476e60993cb..48f86702cc9c 100644
--- a/drivers/pci/host/pcie-designware.h
+++ b/drivers/pci/host/pcie-designware.h
@@ -14,15 +14,6 @@
14#ifndef _PCIE_DESIGNWARE_H 14#ifndef _PCIE_DESIGNWARE_H
15#define _PCIE_DESIGNWARE_H 15#define _PCIE_DESIGNWARE_H
16 16
17struct pcie_port_info {
18 u32 cfg0_size;
19 u32 cfg1_size;
20 u32 io_size;
21 u32 mem_size;
22 phys_addr_t io_bus_addr;
23 phys_addr_t mem_bus_addr;
24};
25
26/* 17/*
27 * Maximum number of MSI IRQs can be 256 per controller. But keep 18 * Maximum number of MSI IRQs can be 256 per controller. But keep
28 * it 32 as of now. Probably we will never need more than 32. If needed, 19 * it 32 as of now. Probably we will never need more than 32. If needed,
@@ -38,18 +29,23 @@ struct pcie_port {
38 u64 cfg0_base; 29 u64 cfg0_base;
39 u64 cfg0_mod_base; 30 u64 cfg0_mod_base;
40 void __iomem *va_cfg0_base; 31 void __iomem *va_cfg0_base;
32 u32 cfg0_size;
41 u64 cfg1_base; 33 u64 cfg1_base;
42 u64 cfg1_mod_base; 34 u64 cfg1_mod_base;
43 void __iomem *va_cfg1_base; 35 void __iomem *va_cfg1_base;
36 u32 cfg1_size;
44 u64 io_base; 37 u64 io_base;
45 u64 io_mod_base; 38 u64 io_mod_base;
39 phys_addr_t io_bus_addr;
40 u32 io_size;
46 u64 mem_base; 41 u64 mem_base;
47 u64 mem_mod_base; 42 u64 mem_mod_base;
43 phys_addr_t mem_bus_addr;
44 u32 mem_size;
48 struct resource cfg; 45 struct resource cfg;
49 struct resource io; 46 struct resource io;
50 struct resource mem; 47 struct resource mem;
51 struct resource busn; 48 struct resource busn;
52 struct pcie_port_info config;
53 int irq; 49 int irq;
54 u32 lanes; 50 u32 lanes;
55 struct pcie_host_ops *ops; 51 struct pcie_host_ops *ops;