val = histb_pcie_readl(hipcie, PCIE_SYS_CTRL0); if (enable)
val |= PCIE_ELBI_SLV_DBI_ENABLE; else
val &= ~PCIE_ELBI_SLV_DBI_ENABLE;
histb_pcie_writel(hipcie, PCIE_SYS_CTRL0, val);
}
val = histb_pcie_readl(hipcie, PCIE_SYS_CTRL1); if (enable)
val |= PCIE_ELBI_SLV_DBI_ENABLE; else
val &= ~PCIE_ELBI_SLV_DBI_ENABLE;
histb_pcie_writel(hipcie, PCIE_SYS_CTRL1, val);
}
/* power on PCIe device if have */ if (hipcie->vpcie) {
ret = regulator_enable(hipcie->vpcie); if (ret) {
dev_err(dev, "failed to enable regulator: %d\n", ret); return ret;
}
}
if (hipcie->reset_gpio)
gpiod_set_value_cansleep(hipcie->reset_gpio, 0);
ret = clk_prepare_enable(hipcie->bus_clk); if (ret) {
dev_err(dev, "cannot prepare/enable bus clk\n"); goto err_bus_clk;
}
ret = clk_prepare_enable(hipcie->sys_clk); if (ret) {
dev_err(dev, "cannot prepare/enable sys clk\n"); goto err_sys_clk;
}
ret = clk_prepare_enable(hipcie->pipe_clk); if (ret) {
dev_err(dev, "cannot prepare/enable pipe clk\n"); goto err_pipe_clk;
}
ret = clk_prepare_enable(hipcie->aux_clk); if (ret) {
dev_err(dev, "cannot prepare/enable aux clk\n"); goto err_aux_clk;
}
hipcie->ctrl = devm_platform_ioremap_resource_byname(pdev, "control"); if (IS_ERR(hipcie->ctrl)) {
dev_err(dev, "cannot get control reg base\n"); return PTR_ERR(hipcie->ctrl);
}
pci->dbi_base = devm_platform_ioremap_resource_byname(pdev, "rc-dbi"); if (IS_ERR(pci->dbi_base)) {
dev_err(dev, "cannot get rc-dbi base\n"); return PTR_ERR(pci->dbi_base);
}
hipcie->vpcie = devm_regulator_get_optional(dev, "vpcie"); if (IS_ERR(hipcie->vpcie)) { if (PTR_ERR(hipcie->vpcie) != -ENODEV) return PTR_ERR(hipcie->vpcie);
hipcie->vpcie = NULL;
}
hipcie->reset_gpio = devm_gpiod_get_optional(dev, "reset",
GPIOD_OUT_HIGH);
ret = PTR_ERR_OR_ZERO(hipcie->reset_gpio); if (ret) {
dev_err(dev, "unable to request reset gpio: %d\n", ret); return ret;
}
ret = gpiod_set_consumer_name(hipcie->reset_gpio, "PCIe device power control"); if (ret) {
dev_err(dev, "unable to set reset gpio name: %d\n", ret); return ret;
}
hipcie->aux_clk = devm_clk_get(dev, "aux"); if (IS_ERR(hipcie->aux_clk)) {
dev_err(dev, "Failed to get PCIe aux clk\n"); return PTR_ERR(hipcie->aux_clk);
}
hipcie->pipe_clk = devm_clk_get(dev, "pipe"); if (IS_ERR(hipcie->pipe_clk)) {
dev_err(dev, "Failed to get PCIe pipe clk\n"); return PTR_ERR(hipcie->pipe_clk);
}
hipcie->sys_clk = devm_clk_get(dev, "sys"); if (IS_ERR(hipcie->sys_clk)) {
dev_err(dev, "Failed to get PCIEe sys clk\n"); return PTR_ERR(hipcie->sys_clk);
}
hipcie->bus_clk = devm_clk_get(dev, "bus"); if (IS_ERR(hipcie->bus_clk)) {
dev_err(dev, "Failed to get PCIe bus clk\n"); return PTR_ERR(hipcie->bus_clk);
}
hipcie->soft_reset = devm_reset_control_get(dev, "soft"); if (IS_ERR(hipcie->soft_reset)) {
dev_err(dev, "couldn't get soft reset\n"); return PTR_ERR(hipcie->soft_reset);
}
hipcie->sys_reset = devm_reset_control_get(dev, "sys"); if (IS_ERR(hipcie->sys_reset)) {
dev_err(dev, "couldn't get sys reset\n"); return PTR_ERR(hipcie->sys_reset);
}
hipcie->bus_reset = devm_reset_control_get(dev, "bus"); if (IS_ERR(hipcie->bus_reset)) {
dev_err(dev, "couldn't get bus reset\n"); return PTR_ERR(hipcie->bus_reset);
}
hipcie->phy = devm_phy_get(dev, "phy"); if (IS_ERR(hipcie->phy)) {
dev_info(dev, "no pcie-phy found\n");
hipcie->phy = NULL; /* fall through here! *ifnopcie-phyfound,phyinit *shouldbedoneunderboot!
*/
} else {
phy_init(hipcie->phy);
}
pp->ops = &histb_pcie_host_ops;
platform_set_drvdata(pdev, hipcie);
ret = histb_pcie_host_enable(pp); if (ret) {
dev_err(dev, "failed to enable host\n"); goto err_exit_phy;
}
ret = dw_pcie_host_init(pp); if (ret) {
dev_err(dev, "failed to initialize host\n"); goto err_exit_phy;
}
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.11Bemerkung:
(Wie Sie bei der Firma Beratungs- und Dienstleistungen beauftragen können 2026-10-02)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.