Lines Matching refs:kirin_pcie

81 struct kirin_pcie {
96 static inline void kirin_apb_ctrl_writel(struct kirin_pcie *kirin_pcie,
99 writel(val, kirin_pcie->apb_base + reg);
102 static inline u32 kirin_apb_ctrl_readl(struct kirin_pcie *kirin_pcie, u32 reg)
104 return readl(kirin_pcie->apb_base + reg);
108 static inline void kirin_apb_phy_writel(struct kirin_pcie *kirin_pcie,
111 writel(val, kirin_pcie->phy_base + reg);
114 static inline u32 kirin_apb_phy_readl(struct kirin_pcie *kirin_pcie, u32 reg)
116 return readl(kirin_pcie->phy_base + reg);
119 static long kirin_pcie_get_clk(struct kirin_pcie *kirin_pcie,
124 kirin_pcie->phy_ref_clk = devm_clk_get(dev, "pcie_phy_ref");
125 if (IS_ERR(kirin_pcie->phy_ref_clk))
126 return PTR_ERR(kirin_pcie->phy_ref_clk);
128 kirin_pcie->pcie_aux_clk = devm_clk_get(dev, "pcie_aux");
129 if (IS_ERR(kirin_pcie->pcie_aux_clk))
130 return PTR_ERR(kirin_pcie->pcie_aux_clk);
132 kirin_pcie->apb_phy_clk = devm_clk_get(dev, "pcie_apb_phy");
133 if (IS_ERR(kirin_pcie->apb_phy_clk))
134 return PTR_ERR(kirin_pcie->apb_phy_clk);
136 kirin_pcie->apb_sys_clk = devm_clk_get(dev, "pcie_apb_sys");
137 if (IS_ERR(kirin_pcie->apb_sys_clk))
138 return PTR_ERR(kirin_pcie->apb_sys_clk);
140 kirin_pcie->pcie_aclk = devm_clk_get(dev, "pcie_aclk");
141 if (IS_ERR(kirin_pcie->pcie_aclk))
142 return PTR_ERR(kirin_pcie->pcie_aclk);
147 static long kirin_pcie_get_resource(struct kirin_pcie *kirin_pcie,
150 kirin_pcie->apb_base =
152 if (IS_ERR(kirin_pcie->apb_base))
153 return PTR_ERR(kirin_pcie->apb_base);
155 kirin_pcie->phy_base =
157 if (IS_ERR(kirin_pcie->phy_base))
158 return PTR_ERR(kirin_pcie->phy_base);
160 kirin_pcie->pci->dbi_base =
162 if (IS_ERR(kirin_pcie->pci->dbi_base))
163 return PTR_ERR(kirin_pcie->pci->dbi_base);
165 kirin_pcie->crgctrl =
167 if (IS_ERR(kirin_pcie->crgctrl))
168 return PTR_ERR(kirin_pcie->crgctrl);
170 kirin_pcie->sysctrl =
172 if (IS_ERR(kirin_pcie->sysctrl))
173 return PTR_ERR(kirin_pcie->sysctrl);
178 static int kirin_pcie_phy_init(struct kirin_pcie *kirin_pcie)
180 struct device *dev = kirin_pcie->pci->dev;
183 reg_val = kirin_apb_phy_readl(kirin_pcie, PCIE_APB_PHY_CTRL1);
185 kirin_apb_phy_writel(kirin_pcie, reg_val, PCIE_APB_PHY_CTRL1);
187 reg_val = kirin_apb_phy_readl(kirin_pcie, PCIE_APB_PHY_CTRL0);
189 kirin_apb_phy_writel(kirin_pcie, reg_val, PCIE_APB_PHY_CTRL0);
192 reg_val = kirin_apb_phy_readl(kirin_pcie, PCIE_APB_PHY_CTRL1);
194 kirin_apb_phy_writel(kirin_pcie, reg_val, PCIE_APB_PHY_CTRL1);
197 reg_val = kirin_apb_phy_readl(kirin_pcie, PCIE_APB_PHY_STATUS0);
206 static void kirin_pcie_oe_enable(struct kirin_pcie *kirin_pcie)
210 regmap_read(kirin_pcie->sysctrl, SCTRL_PCIE_OE_OFFSET, &val);
213 regmap_write(kirin_pcie->sysctrl, SCTRL_PCIE_OE_OFFSET, val);
216 static int kirin_pcie_clk_ctrl(struct kirin_pcie *kirin_pcie, bool enable)
223 ret = clk_set_rate(kirin_pcie->phy_ref_clk, REF_CLK_FREQ);
227 ret = clk_prepare_enable(kirin_pcie->phy_ref_clk);
231 ret = clk_prepare_enable(kirin_pcie->apb_sys_clk);
235 ret = clk_prepare_enable(kirin_pcie->apb_phy_clk);
239 ret = clk_prepare_enable(kirin_pcie->pcie_aclk);
243 ret = clk_prepare_enable(kirin_pcie->pcie_aux_clk);
250 clk_disable_unprepare(kirin_pcie->pcie_aux_clk);
252 clk_disable_unprepare(kirin_pcie->pcie_aclk);
254 clk_disable_unprepare(kirin_pcie->apb_phy_clk);
256 clk_disable_unprepare(kirin_pcie->apb_sys_clk);
258 clk_disable_unprepare(kirin_pcie->phy_ref_clk);
263 static int kirin_pcie_power_on(struct kirin_pcie *kirin_pcie)
268 regmap_write(kirin_pcie->sysctrl,
271 kirin_pcie_oe_enable(kirin_pcie);
273 ret = kirin_pcie_clk_ctrl(kirin_pcie, true);
278 regmap_write(kirin_pcie->sysctrl,
280 regmap_write(kirin_pcie->crgctrl,
282 regmap_write(kirin_pcie->sysctrl,
285 ret = kirin_pcie_phy_init(kirin_pcie);
290 if (!gpio_request(kirin_pcie->gpio_id_reset, "pcie_perst")) {
292 ret = gpio_direction_output(kirin_pcie->gpio_id_reset, 1);
301 kirin_pcie_clk_ctrl(kirin_pcie, false);
305 static void kirin_pcie_sideband_dbi_w_mode(struct kirin_pcie *kirin_pcie,
310 val = kirin_apb_ctrl_readl(kirin_pcie, SOC_PCIECTRL_CTRL0_ADDR);
316 kirin_apb_ctrl_writel(kirin_pcie, val, SOC_PCIECTRL_CTRL0_ADDR);
319 static void kirin_pcie_sideband_dbi_r_mode(struct kirin_pcie *kirin_pcie,
324 val = kirin_apb_ctrl_readl(kirin_pcie, SOC_PCIECTRL_CTRL1_ADDR);
330 kirin_apb_ctrl_writel(kirin_pcie, val, SOC_PCIECTRL_CTRL1_ADDR);
367 struct kirin_pcie *kirin_pcie = to_kirin_pcie(pci);
370 kirin_pcie_sideband_dbi_r_mode(kirin_pcie, true);
372 kirin_pcie_sideband_dbi_r_mode(kirin_pcie, false);
380 struct kirin_pcie *kirin_pcie = to_kirin_pcie(pci);
382 kirin_pcie_sideband_dbi_w_mode(kirin_pcie, true);
384 kirin_pcie_sideband_dbi_w_mode(kirin_pcie, false);
389 struct kirin_pcie *kirin_pcie = to_kirin_pcie(pci);
390 u32 val = kirin_apb_ctrl_readl(kirin_pcie, PCIE_APB_PHY_STATUS0);
401 struct kirin_pcie *kirin_pcie = to_kirin_pcie(pci);
402 struct device *dev = kirin_pcie->pci->dev;
411 kirin_apb_ctrl_writel(kirin_pcie, PCIE_LTSSM_ENABLE_BIT,
480 struct kirin_pcie *kirin_pcie;
489 kirin_pcie = devm_kzalloc(dev, sizeof(struct kirin_pcie), GFP_KERNEL);
490 if (!kirin_pcie)
499 kirin_pcie->pci = pci;
501 ret = kirin_pcie_get_clk(kirin_pcie, pdev);
505 ret = kirin_pcie_get_resource(kirin_pcie, pdev);
509 kirin_pcie->gpio_id_reset = of_get_named_gpio(dev->of_node,
511 if (kirin_pcie->gpio_id_reset == -EPROBE_DEFER) {
513 } else if (!gpio_is_valid(kirin_pcie->gpio_id_reset)) {
518 ret = kirin_pcie_power_on(kirin_pcie);
522 platform_set_drvdata(pdev, kirin_pcie);