Lines Matching full:mc

14 #include <soc/tegra/mc.h>
17 #include <dt-bindings/memory/tegra186-mc.h>
20 #include "mc.h"
26 static int tegra186_mc_probe(struct tegra_mc *mc) in tegra186_mc_probe() argument
28 struct platform_device *pdev = to_platform_device(mc->dev); in tegra186_mc_probe()
35 * From Tegra264, the SID region is not present in MC node and BROADCAST is first. in tegra186_mc_probe()
38 * the first entry mapped in mc probe as the BROADCAST region. This is done to avoid in tegra186_mc_probe()
43 mc->bcast_ch_regs = devm_platform_ioremap_resource_byname(pdev, "broadcast"); in tegra186_mc_probe()
45 mc->bcast_ch_regs = mc->regs; in tegra186_mc_probe()
47 if (IS_ERR(mc->bcast_ch_regs)) { in tegra186_mc_probe()
48 if (PTR_ERR(mc->bcast_ch_regs) == -EINVAL) { in tegra186_mc_probe()
51 mc->bcast_ch_regs = NULL; in tegra186_mc_probe()
55 return PTR_ERR(mc->bcast_ch_regs); in tegra186_mc_probe()
58 mc->ch_regs = devm_kcalloc(mc->dev, mc->soc->num_channels, sizeof(*mc->ch_regs), in tegra186_mc_probe()
60 if (!mc->ch_regs) in tegra186_mc_probe()
63 for (i = 0; i < mc->soc->num_channels; i++) { in tegra186_mc_probe()
66 mc->ch_regs[i] = devm_platform_ioremap_resource_byname(pdev, name); in tegra186_mc_probe()
67 if (IS_ERR(mc->ch_regs[i])) in tegra186_mc_probe()
68 return PTR_ERR(mc->ch_regs[i]); in tegra186_mc_probe()
72 err = of_platform_populate(mc->dev->of_node, NULL, NULL, mc->dev); in tegra186_mc_probe()
79 static void tegra186_mc_remove(struct tegra_mc *mc) in tegra186_mc_remove() argument
81 of_platform_depopulate(mc->dev); in tegra186_mc_remove()
85 static void tegra186_mc_client_sid_override(struct tegra_mc *mc, in tegra186_mc_client_sid_override() argument
94 value = readl(mc->regs + client->regs.sid.security); in tegra186_mc_client_sid_override()
113 writel(value, mc->regs + client->regs.sid.security); in tegra186_mc_client_sid_override()
116 value = readl(mc->regs + client->regs.sid.override); in tegra186_mc_client_sid_override()
120 dev_dbg(mc->dev, "overriding SID %x for %s with %x\n", old, in tegra186_mc_client_sid_override()
122 writel(sid, mc->regs + client->regs.sid.override); in tegra186_mc_client_sid_override()
127 static int tegra186_mc_probe_device(struct tegra_mc *mc, struct device *dev) in tegra186_mc_probe_device() argument
139 if (args.np == mc->dev->of_node && args.args_count != 0) { in tegra186_mc_probe_device()
140 for (i = 0; i < mc->soc->num_clients; i++) { in tegra186_mc_probe_device()
141 const struct tegra_mc_client *client = &mc->soc->clients[i]; in tegra186_mc_probe_device()
145 mc, client, in tegra186_mc_probe_device()
157 static int tegra186_mc_resume(struct tegra_mc *mc) in tegra186_mc_resume() argument
162 for (i = 0; i < mc->soc->num_clients; i++) { in tegra186_mc_resume()
163 const struct tegra_mc_client *client = &mc->soc->clients[i]; in tegra186_mc_resume()
165 tegra186_mc_client_sid_override(mc, client, client->sid); in tegra186_mc_resume()