Lines Matching refs:mc

65 static int tegra_mc_setup_latency_allowance(struct tegra_mc *mc)  in tegra_mc_setup_latency_allowance()  argument
72 tick = mc->tick * clk_get_rate(mc->clk); in tegra_mc_setup_latency_allowance()
75 value = readl(mc->regs + MC_EMEM_ARB_CFG); in tegra_mc_setup_latency_allowance()
78 writel(value, mc->regs + MC_EMEM_ARB_CFG); in tegra_mc_setup_latency_allowance()
81 for (i = 0; i < mc->soc->num_clients; i++) { in tegra_mc_setup_latency_allowance()
82 const struct tegra_mc_la *la = &mc->soc->clients[i].la; in tegra_mc_setup_latency_allowance()
85 value = readl(mc->regs + la->reg); in tegra_mc_setup_latency_allowance()
88 writel(value, mc->regs + la->reg); in tegra_mc_setup_latency_allowance()
115 struct tegra_mc *mc = data; in tegra_mc_irq() local
120 status = mc_readl(mc, MC_INTSTATUS); in tegra_mc_irq()
121 mask = mc_readl(mc, MC_INTMASK); in tegra_mc_irq()
133 value = mc_readl(mc, MC_ERR_STATUS); in tegra_mc_irq()
136 if (mc->soc->num_address_bits > 32) { in tegra_mc_irq()
155 for (i = 0; i < mc->soc->num_clients; i++) { in tegra_mc_irq()
156 if (mc->soc->clients[i].id == id) { in tegra_mc_irq()
157 client = mc->soc->clients[i].name; in tegra_mc_irq()
195 value = mc_readl(mc, MC_ERR_ADR); in tegra_mc_irq()
198 dev_err_ratelimited(mc->dev, "%s: %s%s @%pa: %s (%s%s)\n", in tegra_mc_irq()
204 mc_writel(mc, status, MC_INTSTATUS); in tegra_mc_irq()
213 struct tegra_mc *mc; in tegra_mc_probe() local
221 mc = devm_kzalloc(&pdev->dev, sizeof(*mc), GFP_KERNEL); in tegra_mc_probe()
222 if (!mc) in tegra_mc_probe()
225 platform_set_drvdata(pdev, mc); in tegra_mc_probe()
226 mc->soc = match->data; in tegra_mc_probe()
227 mc->dev = &pdev->dev; in tegra_mc_probe()
230 mc->tick = 30; in tegra_mc_probe()
233 mc->regs = devm_ioremap_resource(&pdev->dev, res); in tegra_mc_probe()
234 if (IS_ERR(mc->regs)) in tegra_mc_probe()
235 return PTR_ERR(mc->regs); in tegra_mc_probe()
237 mc->clk = devm_clk_get(&pdev->dev, "mc"); in tegra_mc_probe()
238 if (IS_ERR(mc->clk)) { in tegra_mc_probe()
240 PTR_ERR(mc->clk)); in tegra_mc_probe()
241 return PTR_ERR(mc->clk); in tegra_mc_probe()
244 err = tegra_mc_setup_latency_allowance(mc); in tegra_mc_probe()
252 mc->smmu = tegra_smmu_probe(&pdev->dev, mc->soc->smmu, mc); in tegra_mc_probe()
253 if (IS_ERR(mc->smmu)) { in tegra_mc_probe()
255 PTR_ERR(mc->smmu)); in tegra_mc_probe()
256 return PTR_ERR(mc->smmu); in tegra_mc_probe()
260 mc->irq = platform_get_irq(pdev, 0); in tegra_mc_probe()
261 if (mc->irq < 0) { in tegra_mc_probe()
263 return mc->irq; in tegra_mc_probe()
266 err = devm_request_irq(&pdev->dev, mc->irq, tegra_mc_irq, IRQF_SHARED, in tegra_mc_probe()
267 dev_name(&pdev->dev), mc); in tegra_mc_probe()
269 dev_err(&pdev->dev, "failed to request IRQ#%u: %d\n", mc->irq, in tegra_mc_probe()
278 mc_writel(mc, value, MC_INTMASK); in tegra_mc_probe()