Commit df99d6a4 authored by Bjorn Helgaas's avatar Bjorn Helgaas

Merge branch 'pci/misc' into next

* pci/misc:
  PCI: exynos: Split into Synopsys part and Exynos part
  PCI: mvebu: Make Marvell PCIe driver depend on OF
  PCI: mvebu: Convert to use devm_ioremap_resource
parents e3ec221b 4b1ced84
...@@ -18,6 +18,7 @@ Required properties: ...@@ -18,6 +18,7 @@ Required properties:
- interrupt-map-mask and interrupt-map: standard PCI properties - interrupt-map-mask and interrupt-map: standard PCI properties
to define the mapping of the PCIe interface to interrupt to define the mapping of the PCIe interface to interrupt
numbers. numbers.
- num-lanes: number of lanes to use
- reset-gpio: gpio pin number of power good signal - reset-gpio: gpio pin number of power good signal
Example: Example:
...@@ -41,6 +42,7 @@ SoC specific DT Entry: ...@@ -41,6 +42,7 @@ SoC specific DT Entry:
#interrupt-cells = <1>; #interrupt-cells = <1>;
interrupt-map-mask = <0 0 0 0>; interrupt-map-mask = <0 0 0 0>;
interrupt-map = <0x0 0 &gic 53>; interrupt-map = <0x0 0 &gic 53>;
num-lanes = <4>;
}; };
pcie@2a0000 { pcie@2a0000 {
...@@ -60,6 +62,7 @@ SoC specific DT Entry: ...@@ -60,6 +62,7 @@ SoC specific DT Entry:
#interrupt-cells = <1>; #interrupt-cells = <1>;
interrupt-map-mask = <0 0 0 0>; interrupt-map-mask = <0 0 0 0>;
interrupt-map = <0x0 0 &gic 56>; interrupt-map = <0x0 0 &gic 56>;
num-lanes = <4>;
}; };
Board specific DT Entry: Board specific DT Entry:
......
...@@ -248,6 +248,7 @@ pcie@290000 { ...@@ -248,6 +248,7 @@ pcie@290000 {
#interrupt-cells = <1>; #interrupt-cells = <1>;
interrupt-map-mask = <0 0 0 0>; interrupt-map-mask = <0 0 0 0>;
interrupt-map = <0x0 0 &gic 53>; interrupt-map = <0x0 0 &gic 53>;
num-lanes = <4>;
}; };
pcie@2a0000 { pcie@2a0000 {
...@@ -267,5 +268,6 @@ pcie@2a0000 { ...@@ -267,5 +268,6 @@ pcie@2a0000 {
#interrupt-cells = <1>; #interrupt-cells = <1>;
interrupt-map-mask = <0 0 0 0>; interrupt-map-mask = <0 0 0 0>;
interrupt-map = <0x0 0 &gic 56>; interrupt-map = <0x0 0 &gic 56>;
num-lanes = <4>;
}; };
}; };
...@@ -4,6 +4,7 @@ menu "PCI host controller drivers" ...@@ -4,6 +4,7 @@ menu "PCI host controller drivers"
config PCI_MVEBU config PCI_MVEBU
bool "Marvell EBU PCIe controller" bool "Marvell EBU PCIe controller"
depends on ARCH_MVEBU || ARCH_KIRKWOOD depends on ARCH_MVEBU || ARCH_KIRKWOOD
depends on OF
config PCIE_DW config PCIE_DW
bool bool
......
obj-$(CONFIG_PCI_MVEBU) += pci-mvebu.o
obj-$(CONFIG_PCIE_DW) += pcie-designware.o obj-$(CONFIG_PCIE_DW) += pcie-designware.o
obj-$(CONFIG_PCI_EXYNOS) += pci-exynos.o
obj-$(CONFIG_PCI_MVEBU) += pci-mvebu.o
This diff is collapsed.
...@@ -750,9 +750,9 @@ mvebu_pcie_map_registers(struct platform_device *pdev, ...@@ -750,9 +750,9 @@ mvebu_pcie_map_registers(struct platform_device *pdev,
ret = of_address_to_resource(np, 0, &regs); ret = of_address_to_resource(np, 0, &regs);
if (ret) if (ret)
return NULL; return ERR_PTR(ret);
return devm_request_and_ioremap(&pdev->dev, &regs); return devm_ioremap_resource(&pdev->dev, &regs);
} }
static int __init mvebu_pcie_probe(struct platform_device *pdev) static int __init mvebu_pcie_probe(struct platform_device *pdev)
...@@ -842,9 +842,10 @@ static int __init mvebu_pcie_probe(struct platform_device *pdev) ...@@ -842,9 +842,10 @@ static int __init mvebu_pcie_probe(struct platform_device *pdev)
continue; continue;
port->base = mvebu_pcie_map_registers(pdev, child, port); port->base = mvebu_pcie_map_registers(pdev, child, port);
if (!port->base) { if (IS_ERR(port->base)) {
dev_err(&pdev->dev, "PCIe%d.%d: cannot map registers\n", dev_err(&pdev->dev, "PCIe%d.%d: cannot map registers\n",
port->port, port->lane); port->port, port->lane);
port->base = NULL;
continue; continue;
} }
......
This diff is collapsed.
/*
* Synopsys Designware PCIe host controller driver
*
* Copyright (C) 2013 Samsung Electronics Co., Ltd.
* http://www.samsung.com
*
* Author: Jingoo Han <jg1.han@samsung.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
struct pcie_port_info {
u32 cfg0_size;
u32 cfg1_size;
u32 io_size;
u32 mem_size;
phys_addr_t io_bus_addr;
phys_addr_t mem_bus_addr;
};
struct pcie_port {
struct device *dev;
u8 root_bus_nr;
void __iomem *dbi_base;
u64 cfg0_base;
void __iomem *va_cfg0_base;
u64 cfg1_base;
void __iomem *va_cfg1_base;
u64 io_base;
u64 mem_base;
spinlock_t conf_lock;
struct resource cfg;
struct resource io;
struct resource mem;
struct pcie_port_info config;
int irq;
u32 lanes;
struct pcie_host_ops *ops;
};
struct pcie_host_ops {
void (*readl_rc)(struct pcie_port *pp,
void __iomem *dbi_base, u32 *val);
void (*writel_rc)(struct pcie_port *pp,
u32 val, void __iomem *dbi_base);
int (*rd_own_conf)(struct pcie_port *pp, int where, int size, u32 *val);
int (*wr_own_conf)(struct pcie_port *pp, int where, int size, u32 val);
int (*link_up)(struct pcie_port *pp);
void (*host_init)(struct pcie_port *pp);
};
extern unsigned long global_io_offset;
int cfg_read(void __iomem *addr, int where, int size, u32 *val);
int cfg_write(void __iomem *addr, int where, int size, u32 val);
int dw_pcie_wr_own_conf(struct pcie_port *pp, int where, int size, u32 val);
int dw_pcie_rd_own_conf(struct pcie_port *pp, int where, int size, u32 *val);
int dw_pcie_link_up(struct pcie_port *pp);
void dw_pcie_setup_rc(struct pcie_port *pp);
int dw_pcie_host_init(struct pcie_port *pp);
int dw_pcie_setup(int nr, struct pci_sys_data *sys);
struct pci_bus *dw_pcie_scan_bus(int nr, struct pci_sys_data *sys);
int dw_pcie_map_irq(const struct pci_dev *dev, u8 slot, u8 pin);
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment