mirror of https://gitee.com/openkylin/linux.git
Merge branch 'lorenzo/pci/armada8k'
- enable register clock for Armada 7K/8K (Gregory CLEMENT) * lorenzo/pci/armada8k: PCI: armada8k: Fix clock resource by adding a register clock PCI: armada8k: Remove useless test before clk_disable_unprepare()
This commit is contained in:
commit
bdc4bb1377
|
@ -12,7 +12,10 @@ Required properties:
|
||||||
- "ctrl" for the control register region
|
- "ctrl" for the control register region
|
||||||
- "config" for the config space region
|
- "config" for the config space region
|
||||||
- interrupts: Interrupt specifier for the PCIe controler
|
- interrupts: Interrupt specifier for the PCIe controler
|
||||||
- clocks: reference to the PCIe controller clock
|
- clocks: reference to the PCIe controller clocks
|
||||||
|
- clock-names: mandatory if there is a second clock, in this case the
|
||||||
|
name must be "core" for the first clock and "reg" for the second
|
||||||
|
one
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
struct armada8k_pcie {
|
struct armada8k_pcie {
|
||||||
struct dw_pcie *pci;
|
struct dw_pcie *pci;
|
||||||
struct clk *clk;
|
struct clk *clk;
|
||||||
|
struct clk *clk_reg;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define PCIE_VENDOR_REGS_OFFSET 0x8000
|
#define PCIE_VENDOR_REGS_OFFSET 0x8000
|
||||||
|
@ -229,26 +230,38 @@ static int armada8k_pcie_probe(struct platform_device *pdev)
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
pcie->clk_reg = devm_clk_get(dev, "reg");
|
||||||
|
if (pcie->clk_reg == ERR_PTR(-EPROBE_DEFER)) {
|
||||||
|
ret = -EPROBE_DEFER;
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
if (!IS_ERR(pcie->clk_reg)) {
|
||||||
|
ret = clk_prepare_enable(pcie->clk_reg);
|
||||||
|
if (ret)
|
||||||
|
goto fail_clkreg;
|
||||||
|
}
|
||||||
|
|
||||||
/* Get the dw-pcie unit configuration/control registers base. */
|
/* Get the dw-pcie unit configuration/control registers base. */
|
||||||
base = platform_get_resource_byname(pdev, IORESOURCE_MEM, "ctrl");
|
base = platform_get_resource_byname(pdev, IORESOURCE_MEM, "ctrl");
|
||||||
pci->dbi_base = devm_pci_remap_cfg_resource(dev, base);
|
pci->dbi_base = devm_pci_remap_cfg_resource(dev, base);
|
||||||
if (IS_ERR(pci->dbi_base)) {
|
if (IS_ERR(pci->dbi_base)) {
|
||||||
dev_err(dev, "couldn't remap regs base %p\n", base);
|
dev_err(dev, "couldn't remap regs base %p\n", base);
|
||||||
ret = PTR_ERR(pci->dbi_base);
|
ret = PTR_ERR(pci->dbi_base);
|
||||||
goto fail;
|
goto fail_clkreg;
|
||||||
}
|
}
|
||||||
|
|
||||||
platform_set_drvdata(pdev, pcie);
|
platform_set_drvdata(pdev, pcie);
|
||||||
|
|
||||||
ret = armada8k_add_pcie_port(pcie, pdev);
|
ret = armada8k_add_pcie_port(pcie, pdev);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto fail;
|
goto fail_clkreg;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
fail_clkreg:
|
||||||
|
clk_disable_unprepare(pcie->clk_reg);
|
||||||
fail:
|
fail:
|
||||||
if (!IS_ERR(pcie->clk))
|
clk_disable_unprepare(pcie->clk);
|
||||||
clk_disable_unprepare(pcie->clk);
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue