diff options
author | Pratyush Anand <pratyush.anand@st.com> | 2014-09-05 19:48:54 -0400 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2014-09-05 19:48:54 -0400 |
commit | adf70fc087b1750c3792cd56abc6a45e49bb3a11 (patch) | |
tree | 367e52effec28c366b7d2c9adf1f2db9f1a4d09f | |
parent | 84a263f39403ca3b399af77499876e02e634b00b (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.c | 55 | ||||
-rw-r--r-- | drivers/pci/host/pcie-designware.h | 16 |
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 | ||
834 | void dw_pcie_setup_rc(struct pcie_port *pp) | 834 | void 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 | ||
17 | struct 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; |