Lines Matching full:tegra
20 #include <soc/tegra/fuse.h>
21 #include <soc/tegra/pmc.h>
25 #define DRV_NAME "tegra-ahci"
184 struct tegra_ahci_priv *tegra = hpriv->plat_data; in tegra_ahci_handle_quirks() local
187 if (tegra->sata_aux_regs && !tegra->soc->supports_devslp) { in tegra_ahci_handle_quirks()
188 val = readl(tegra->sata_aux_regs + SATA_AUX_MISC_CNTL_1_0); in tegra_ahci_handle_quirks()
190 writel(val, tegra->sata_aux_regs + SATA_AUX_MISC_CNTL_1_0); in tegra_ahci_handle_quirks()
196 struct tegra_ahci_priv *tegra = hpriv->plat_data; in tegra124_ahci_init() local
208 writel(BIT(0), tegra->sata_regs + SCFG_OFFSET + T_SATA0_INDEX); in tegra124_ahci_init()
210 val = readl(tegra->sata_regs + in tegra124_ahci_init()
216 writel(val, tegra->sata_regs + SCFG_OFFSET + in tegra124_ahci_init()
219 val = readl(tegra->sata_regs + in tegra124_ahci_init()
225 writel(val, tegra->sata_regs + SCFG_OFFSET + in tegra124_ahci_init()
229 tegra->sata_regs + SCFG_OFFSET + T_SATA0_CHX_PHY_CTRL11); in tegra124_ahci_init()
231 tegra->sata_regs + SCFG_OFFSET + T_SATA0_CHX_PHY_CTRL2); in tegra124_ahci_init()
233 writel(0, tegra->sata_regs + SCFG_OFFSET + T_SATA0_INDEX); in tegra124_ahci_init()
240 struct tegra_ahci_priv *tegra = hpriv->plat_data; in tegra_ahci_power_on() local
243 ret = regulator_bulk_enable(tegra->soc->num_supplies, in tegra_ahci_power_on()
244 tegra->supplies); in tegra_ahci_power_on()
248 if (!tegra->pdev->dev.pm_domain) { in tegra_ahci_power_on()
250 tegra->sata_clk, in tegra_ahci_power_on()
251 tegra->sata_rst); in tegra_ahci_power_on()
256 reset_control_assert(tegra->sata_oob_rst); in tegra_ahci_power_on()
257 reset_control_assert(tegra->sata_cold_rst); in tegra_ahci_power_on()
263 reset_control_deassert(tegra->sata_cold_rst); in tegra_ahci_power_on()
264 reset_control_deassert(tegra->sata_oob_rst); in tegra_ahci_power_on()
269 clk_disable_unprepare(tegra->sata_clk); in tegra_ahci_power_on()
271 if (!tegra->pdev->dev.pm_domain) in tegra_ahci_power_on()
275 regulator_bulk_disable(tegra->soc->num_supplies, tegra->supplies); in tegra_ahci_power_on()
282 struct tegra_ahci_priv *tegra = hpriv->plat_data; in tegra_ahci_power_off() local
286 reset_control_assert(tegra->sata_rst); in tegra_ahci_power_off()
287 reset_control_assert(tegra->sata_oob_rst); in tegra_ahci_power_off()
288 reset_control_assert(tegra->sata_cold_rst); in tegra_ahci_power_off()
290 clk_disable_unprepare(tegra->sata_clk); in tegra_ahci_power_off()
291 if (!tegra->pdev->dev.pm_domain) in tegra_ahci_power_off()
294 regulator_bulk_disable(tegra->soc->num_supplies, tegra->supplies); in tegra_ahci_power_off()
299 struct tegra_ahci_priv *tegra = hpriv->plat_data; in tegra_ahci_controller_init() local
305 dev_err(&tegra->pdev->dev, in tegra_ahci_controller_init()
314 val = readl(tegra->sata_regs + SATA_FPCI_BAR5); in tegra_ahci_controller_init()
317 writel(val, tegra->sata_regs + SATA_FPCI_BAR5); in tegra_ahci_controller_init()
320 val = readl(tegra->sata_regs + SATA_CONFIGURATION_0); in tegra_ahci_controller_init()
322 writel(val, tegra->sata_regs + SATA_CONFIGURATION_0); in tegra_ahci_controller_init()
326 writel(val, tegra->sata_regs + SCFG_OFFSET + T_SATA0_CHX_PHY_CTRL17_0); in tegra_ahci_controller_init()
328 writel(val, tegra->sata_regs + SCFG_OFFSET + T_SATA0_CHX_PHY_CTRL18_0); in tegra_ahci_controller_init()
330 writel(val, tegra->sata_regs + SCFG_OFFSET + T_SATA0_CHX_PHY_CTRL20_0); in tegra_ahci_controller_init()
332 writel(val, tegra->sata_regs + SCFG_OFFSET + T_SATA0_CHX_PHY_CTRL21_0); in tegra_ahci_controller_init()
336 val = readl(tegra->sata_regs + SCFG_OFFSET + T_SATA_CFG_PHY_0); in tegra_ahci_controller_init()
339 writel(val, tegra->sata_regs + SCFG_OFFSET + T_SATA_CFG_PHY_0); in tegra_ahci_controller_init()
341 val = readl(tegra->sata_regs + SCFG_OFFSET + T_SATA0_NVOOB); in tegra_ahci_controller_init()
342 val &= ~(tegra->soc->regs->nvoob_comma_cnt_mask | in tegra_ahci_controller_init()
345 val |= (tegra->soc->regs->nvoob_comma_cnt_val | in tegra_ahci_controller_init()
348 writel(val, tegra->sata_regs + SCFG_OFFSET + T_SATA0_NVOOB); in tegra_ahci_controller_init()
353 val = readl(tegra->sata_regs + SCFG_OFFSET + T_SATA0_CFG2NVOOB_2); in tegra_ahci_controller_init()
356 writel(val, tegra->sata_regs + SCFG_OFFSET + T_SATA0_CFG2NVOOB_2); in tegra_ahci_controller_init()
358 if (tegra->soc->ops && tegra->soc->ops->init) in tegra_ahci_controller_init()
359 tegra->soc->ops->init(hpriv); in tegra_ahci_controller_init()
365 val = readl(tegra->sata_regs + SCFG_OFFSET + T_SATA0_CFG_1); in tegra_ahci_controller_init()
368 writel(val, tegra->sata_regs + SCFG_OFFSET + T_SATA0_CFG_1); in tegra_ahci_controller_init()
370 writel(val, tegra->sata_regs + SCFG_OFFSET + T_SATA0_CFG_9); in tegra_ahci_controller_init()
373 val = readl(tegra->sata_regs + SCFG_OFFSET + T_SATA0_CFG_SATA); in tegra_ahci_controller_init()
375 writel(val, tegra->sata_regs + SCFG_OFFSET + T_SATA0_CFG_SATA); in tegra_ahci_controller_init()
377 val = readl(tegra->sata_regs + SCFG_OFFSET + T_SATA0_BKDOOR_CC); in tegra_ahci_controller_init()
382 writel(val, tegra->sata_regs + SCFG_OFFSET + T_SATA0_BKDOOR_CC); in tegra_ahci_controller_init()
384 val = readl(tegra->sata_regs + SCFG_OFFSET + T_SATA0_CFG_SATA); in tegra_ahci_controller_init()
386 writel(val, tegra->sata_regs + SCFG_OFFSET + T_SATA0_CFG_SATA); in tegra_ahci_controller_init()
389 val = readl(tegra->sata_regs + SCFG_OFFSET + T_SATA0_AHCI_HBA_CAP_BKDR); in tegra_ahci_controller_init()
394 writel(val, tegra->sata_regs + SCFG_OFFSET + T_SATA0_AHCI_HBA_CAP_BKDR); in tegra_ahci_controller_init()
400 val = readl(tegra->sata_regs + SCFG_OFFSET + T_SATA0_CFG_35); in tegra_ahci_controller_init()
403 writel(val, tegra->sata_regs + SCFG_OFFSET + T_SATA0_CFG_35); in tegra_ahci_controller_init()
406 writel(val, tegra->sata_regs + SCFG_OFFSET + T_SATA0_AHCI_IDP1); in tegra_ahci_controller_init()
408 val = readl(tegra->sata_regs + SCFG_OFFSET + T_SATA0_CFG_PHY_1); in tegra_ahci_controller_init()
411 writel(val, tegra->sata_regs + SCFG_OFFSET + T_SATA0_CFG_PHY_1); in tegra_ahci_controller_init()
414 val = readl(tegra->sata_regs + SATA_CONFIGURATION_0); in tegra_ahci_controller_init()
416 writel(val, tegra->sata_regs + SATA_CONFIGURATION_0); in tegra_ahci_controller_init()
422 val = readl(tegra->sata_regs + SATA_INTR_MASK); in tegra_ahci_controller_init()
424 writel(val, tegra->sata_regs + SATA_INTR_MASK); in tegra_ahci_controller_init()
516 struct tegra_ahci_priv *tegra; in tegra_ahci_probe() local
524 tegra = devm_kzalloc(&pdev->dev, sizeof(*tegra), GFP_KERNEL); in tegra_ahci_probe()
525 if (!tegra) in tegra_ahci_probe()
528 hpriv->plat_data = tegra; in tegra_ahci_probe()
530 tegra->pdev = pdev; in tegra_ahci_probe()
531 tegra->soc = of_device_get_match_data(&pdev->dev); in tegra_ahci_probe()
534 tegra->sata_regs = devm_ioremap_resource(&pdev->dev, res); in tegra_ahci_probe()
535 if (IS_ERR(tegra->sata_regs)) in tegra_ahci_probe()
536 return PTR_ERR(tegra->sata_regs); in tegra_ahci_probe()
543 tegra->sata_aux_regs = devm_ioremap_resource(&pdev->dev, res); in tegra_ahci_probe()
544 if (IS_ERR(tegra->sata_aux_regs)) in tegra_ahci_probe()
545 return PTR_ERR(tegra->sata_aux_regs); in tegra_ahci_probe()
548 tegra->sata_rst = devm_reset_control_get(&pdev->dev, "sata"); in tegra_ahci_probe()
549 if (IS_ERR(tegra->sata_rst)) { in tegra_ahci_probe()
551 return PTR_ERR(tegra->sata_rst); in tegra_ahci_probe()
554 if (tegra->soc->has_sata_oob_rst) { in tegra_ahci_probe()
555 tegra->sata_oob_rst = devm_reset_control_get(&pdev->dev, in tegra_ahci_probe()
557 if (IS_ERR(tegra->sata_oob_rst)) { in tegra_ahci_probe()
559 return PTR_ERR(tegra->sata_oob_rst); in tegra_ahci_probe()
563 tegra->sata_cold_rst = devm_reset_control_get(&pdev->dev, "sata-cold"); in tegra_ahci_probe()
564 if (IS_ERR(tegra->sata_cold_rst)) { in tegra_ahci_probe()
566 return PTR_ERR(tegra->sata_cold_rst); in tegra_ahci_probe()
569 tegra->sata_clk = devm_clk_get(&pdev->dev, "sata"); in tegra_ahci_probe()
570 if (IS_ERR(tegra->sata_clk)) { in tegra_ahci_probe()
572 return PTR_ERR(tegra->sata_clk); in tegra_ahci_probe()
575 tegra->supplies = devm_kcalloc(&pdev->dev, in tegra_ahci_probe()
576 tegra->soc->num_supplies, in tegra_ahci_probe()
577 sizeof(*tegra->supplies), GFP_KERNEL); in tegra_ahci_probe()
578 if (!tegra->supplies) in tegra_ahci_probe()
581 regulator_bulk_set_supply_names(tegra->supplies, in tegra_ahci_probe()
582 tegra->soc->supply_names, in tegra_ahci_probe()
583 tegra->soc->num_supplies); in tegra_ahci_probe()
586 tegra->soc->num_supplies, in tegra_ahci_probe()
587 tegra->supplies); in tegra_ahci_probe()
622 MODULE_DESCRIPTION("Tegra AHCI SATA driver");