Lines Matching +full:tegra186 +full:- +full:mc
1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (C) 2017-2021 NVIDIA CORPORATION. All rights reserved.
13 #include <soc/tegra/mc.h>
16 #include <dt-bindings/memory/tegra186-mc.h>
23 static void tegra186_mc_program_sid(struct tegra_mc *mc) in tegra186_mc_program_sid() argument
27 for (i = 0; i < mc->soc->num_clients; i++) { in tegra186_mc_program_sid()
28 const struct tegra_mc_client *client = &mc->soc->clients[i]; in tegra186_mc_program_sid()
31 override = readl(mc->regs + client->regs.sid.override); in tegra186_mc_program_sid()
32 security = readl(mc->regs + client->regs.sid.security); in tegra186_mc_program_sid()
34 dev_dbg(mc->dev, "client %s: override: %x security: %x\n", in tegra186_mc_program_sid()
35 client->name, override, security); in tegra186_mc_program_sid()
37 dev_dbg(mc->dev, "setting SID %u for %s\n", client->sid, in tegra186_mc_program_sid()
38 client->name); in tegra186_mc_program_sid()
39 writel(client->sid, mc->regs + client->regs.sid.override); in tegra186_mc_program_sid()
41 override = readl(mc->regs + client->regs.sid.override); in tegra186_mc_program_sid()
42 security = readl(mc->regs + client->regs.sid.security); in tegra186_mc_program_sid()
44 dev_dbg(mc->dev, "client %s: override: %x security: %x\n", in tegra186_mc_program_sid()
45 client->name, override, security); in tegra186_mc_program_sid()
49 static int tegra186_mc_probe(struct tegra_mc *mc) in tegra186_mc_probe() argument
53 err = of_platform_populate(mc->dev->of_node, NULL, NULL, mc->dev); in tegra186_mc_probe()
57 tegra186_mc_program_sid(mc); in tegra186_mc_probe()
62 static void tegra186_mc_remove(struct tegra_mc *mc) in tegra186_mc_remove() argument
64 of_platform_depopulate(mc->dev); in tegra186_mc_remove()
67 static int tegra186_mc_resume(struct tegra_mc *mc) in tegra186_mc_resume() argument
69 tegra186_mc_program_sid(mc); in tegra186_mc_resume()
75 static void tegra186_mc_client_sid_override(struct tegra_mc *mc, in tegra186_mc_client_sid_override() argument
81 value = readl(mc->regs + client->regs.sid.security); in tegra186_mc_client_sid_override()
100 writel(value, mc->regs + client->regs.sid.security); in tegra186_mc_client_sid_override()
103 value = readl(mc->regs + client->regs.sid.override); in tegra186_mc_client_sid_override()
107 dev_dbg(mc->dev, "overriding SID %x for %s with %x\n", old, in tegra186_mc_client_sid_override()
108 client->name, sid); in tegra186_mc_client_sid_override()
109 writel(sid, mc->regs + client->regs.sid.override); in tegra186_mc_client_sid_override()
114 static int tegra186_mc_probe_device(struct tegra_mc *mc, struct device *dev) in tegra186_mc_probe_device() argument
121 while (!of_parse_phandle_with_args(dev->of_node, "interconnects", "#interconnect-cells", in tegra186_mc_probe_device()
123 if (args.np == mc->dev->of_node && args.args_count != 0) { in tegra186_mc_probe_device()
124 for (i = 0; i < mc->soc->num_clients; i++) { in tegra186_mc_probe_device()
125 const struct tegra_mc_client *client = &mc->soc->clients[i]; in tegra186_mc_probe_device()
127 if (client->id == args.args[0]) { in tegra186_mc_probe_device()
128 u32 sid = fwspec->ids[0] & MC_SID_STREAMID_OVERRIDE_MASK; in tegra186_mc_probe_device()
130 tegra186_mc_client_sid_override(mc, client, sid); in tegra186_mc_probe_device()