|
@@ -933,6 +933,51 @@ static int rockchip_pcie_get_phys(struct rockchip_pcie *rockchip)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static int rockchip_pcie_setup_irq(struct rockchip_pcie *rockchip)
|
|
|
+{
|
|
|
+ int irq, err;
|
|
|
+ struct device *dev = rockchip->dev;
|
|
|
+ struct platform_device *pdev = to_platform_device(dev);
|
|
|
+
|
|
|
+ irq = platform_get_irq_byname(pdev, "sys");
|
|
|
+ if (irq < 0) {
|
|
|
+ dev_err(dev, "missing sys IRQ resource\n");
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
+
|
|
|
+ err = devm_request_irq(dev, irq, rockchip_pcie_subsys_irq_handler,
|
|
|
+ IRQF_SHARED, "pcie-sys", rockchip);
|
|
|
+ if (err) {
|
|
|
+ dev_err(dev, "failed to request PCIe subsystem IRQ\n");
|
|
|
+ return err;
|
|
|
+ }
|
|
|
+
|
|
|
+ irq = platform_get_irq_byname(pdev, "legacy");
|
|
|
+ if (irq < 0) {
|
|
|
+ dev_err(dev, "missing legacy IRQ resource\n");
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
+
|
|
|
+ irq_set_chained_handler_and_data(irq,
|
|
|
+ rockchip_pcie_legacy_int_handler,
|
|
|
+ rockchip);
|
|
|
+
|
|
|
+ irq = platform_get_irq_byname(pdev, "client");
|
|
|
+ if (irq < 0) {
|
|
|
+ dev_err(dev, "missing client IRQ resource\n");
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
+
|
|
|
+ err = devm_request_irq(dev, irq, rockchip_pcie_client_irq_handler,
|
|
|
+ IRQF_SHARED, "pcie-client", rockchip);
|
|
|
+ if (err) {
|
|
|
+ dev_err(dev, "failed to request PCIe client IRQ\n");
|
|
|
+ return err;
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* rockchip_pcie_parse_dt - Parse Device Tree
|
|
|
* @rockchip: PCIe port information
|
|
@@ -945,7 +990,6 @@ static int rockchip_pcie_parse_dt(struct rockchip_pcie *rockchip)
|
|
|
struct platform_device *pdev = to_platform_device(dev);
|
|
|
struct device_node *node = dev->of_node;
|
|
|
struct resource *regs;
|
|
|
- int irq;
|
|
|
int err;
|
|
|
|
|
|
regs = platform_get_resource_byname(pdev,
|
|
@@ -1059,41 +1103,9 @@ static int rockchip_pcie_parse_dt(struct rockchip_pcie *rockchip)
|
|
|
return PTR_ERR(rockchip->clk_pcie_pm);
|
|
|
}
|
|
|
|
|
|
- irq = platform_get_irq_byname(pdev, "sys");
|
|
|
- if (irq < 0) {
|
|
|
- dev_err(dev, "missing sys IRQ resource\n");
|
|
|
- return -EINVAL;
|
|
|
- }
|
|
|
-
|
|
|
- err = devm_request_irq(dev, irq, rockchip_pcie_subsys_irq_handler,
|
|
|
- IRQF_SHARED, "pcie-sys", rockchip);
|
|
|
- if (err) {
|
|
|
- dev_err(dev, "failed to request PCIe subsystem IRQ\n");
|
|
|
- return err;
|
|
|
- }
|
|
|
-
|
|
|
- irq = platform_get_irq_byname(pdev, "legacy");
|
|
|
- if (irq < 0) {
|
|
|
- dev_err(dev, "missing legacy IRQ resource\n");
|
|
|
- return -EINVAL;
|
|
|
- }
|
|
|
-
|
|
|
- irq_set_chained_handler_and_data(irq,
|
|
|
- rockchip_pcie_legacy_int_handler,
|
|
|
- rockchip);
|
|
|
-
|
|
|
- irq = platform_get_irq_byname(pdev, "client");
|
|
|
- if (irq < 0) {
|
|
|
- dev_err(dev, "missing client IRQ resource\n");
|
|
|
- return -EINVAL;
|
|
|
- }
|
|
|
-
|
|
|
- err = devm_request_irq(dev, irq, rockchip_pcie_client_irq_handler,
|
|
|
- IRQF_SHARED, "pcie-client", rockchip);
|
|
|
- if (err) {
|
|
|
- dev_err(dev, "failed to request PCIe client IRQ\n");
|
|
|
+ err = rockchip_pcie_setup_irq(rockchip);
|
|
|
+ if (err)
|
|
|
return err;
|
|
|
- }
|
|
|
|
|
|
rockchip->vpcie12v = devm_regulator_get_optional(dev, "vpcie12v");
|
|
|
if (IS_ERR(rockchip->vpcie12v)) {
|