Lines Matching +full:iommu +full:- +full:secure +full:- +full:id
1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (C) 2017-2025 NVIDIA CORPORATION. All rights reserved.
7 #include <linux/iommu.h>
17 #include <dt-bindings/memory/tegra186-mc.h>
28 struct platform_device *pdev = to_platform_device(mc->dev); 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()
49 dev_warn(&pdev->dev, in tegra186_mc_probe()
50 "Broadcast channel is missing, please update your device-tree\n"); 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()
61 return -ENOMEM; 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()
81 of_platform_depopulate(mc->dev); in tegra186_mc_remove()
91 if (client->regs.sid.security == 0 && client->regs.sid.override == 0) in tegra186_mc_client_sid_override()
94 value = readl(mc->regs + client->regs.sid.security); in tegra186_mc_client_sid_override()
97 * If the secure firmware has locked this down the override in tegra186_mc_client_sid_override()
105 * secure firmware will never have set this configuration. 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()
121 client->name, sid); in tegra186_mc_client_sid_override()
122 writel(sid, mc->regs + client->regs.sid.override); in tegra186_mc_client_sid_override()
137 while (!of_parse_phandle_with_args(dev->of_node, "interconnects", "#interconnect-cells", in tegra186_mc_probe_device()
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()
143 if (client->id == args.args[0]) in tegra186_mc_probe_device()
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()
183 .id = TEGRA186_MEMORY_CLIENT_PTCR,
193 .id = TEGRA186_MEMORY_CLIENT_AFIR,
203 .id = TEGRA186_MEMORY_CLIENT_HDAR,
213 .id = TEGRA186_MEMORY_CLIENT_HOST1XDMAR,
223 .id = TEGRA186_MEMORY_CLIENT_NVENCSRD,
233 .id = TEGRA186_MEMORY_CLIENT_SATAR,
243 .id = TEGRA186_MEMORY_CLIENT_MPCORER,
253 .id = TEGRA186_MEMORY_CLIENT_NVENCSWR,
263 .id = TEGRA186_MEMORY_CLIENT_AFIW,
273 .id = TEGRA186_MEMORY_CLIENT_HDAW,
283 .id = TEGRA186_MEMORY_CLIENT_MPCOREW,
293 .id = TEGRA186_MEMORY_CLIENT_SATAW,
303 .id = TEGRA186_MEMORY_CLIENT_ISPRA,
313 .id = TEGRA186_MEMORY_CLIENT_ISPWA,
323 .id = TEGRA186_MEMORY_CLIENT_ISPWB,
333 .id = TEGRA186_MEMORY_CLIENT_XUSB_HOSTR,
343 .id = TEGRA186_MEMORY_CLIENT_XUSB_HOSTW,
353 .id = TEGRA186_MEMORY_CLIENT_XUSB_DEVR,
363 .id = TEGRA186_MEMORY_CLIENT_XUSB_DEVW,
373 .id = TEGRA186_MEMORY_CLIENT_TSECSRD,
383 .id = TEGRA186_MEMORY_CLIENT_TSECSWR,
393 .id = TEGRA186_MEMORY_CLIENT_GPUSRD,
403 .id = TEGRA186_MEMORY_CLIENT_GPUSWR,
413 .id = TEGRA186_MEMORY_CLIENT_SDMMCRA,
423 .id = TEGRA186_MEMORY_CLIENT_SDMMCRAA,
433 .id = TEGRA186_MEMORY_CLIENT_SDMMCR,
443 .id = TEGRA186_MEMORY_CLIENT_SDMMCRAB,
453 .id = TEGRA186_MEMORY_CLIENT_SDMMCWA,
463 .id = TEGRA186_MEMORY_CLIENT_SDMMCWAA,
473 .id = TEGRA186_MEMORY_CLIENT_SDMMCW,
483 .id = TEGRA186_MEMORY_CLIENT_SDMMCWAB,
493 .id = TEGRA186_MEMORY_CLIENT_VICSRD,
503 .id = TEGRA186_MEMORY_CLIENT_VICSWR,
513 .id = TEGRA186_MEMORY_CLIENT_VIW,
523 .id = TEGRA186_MEMORY_CLIENT_NVDECSRD,
533 .id = TEGRA186_MEMORY_CLIENT_NVDECSWR,
543 .id = TEGRA186_MEMORY_CLIENT_APER,
553 .id = TEGRA186_MEMORY_CLIENT_APEW,
563 .id = TEGRA186_MEMORY_CLIENT_NVJPGSRD,
573 .id = TEGRA186_MEMORY_CLIENT_NVJPGSWR,
583 .id = TEGRA186_MEMORY_CLIENT_SESRD,
593 .id = TEGRA186_MEMORY_CLIENT_SESWR,
603 .id = TEGRA186_MEMORY_CLIENT_ETRR,
613 .id = TEGRA186_MEMORY_CLIENT_ETRW,
623 .id = TEGRA186_MEMORY_CLIENT_TSECSRDB,
633 .id = TEGRA186_MEMORY_CLIENT_TSECSWRB,
643 .id = TEGRA186_MEMORY_CLIENT_GPUSRD2,
653 .id = TEGRA186_MEMORY_CLIENT_GPUSWR2,
663 .id = TEGRA186_MEMORY_CLIENT_AXISR,
673 .id = TEGRA186_MEMORY_CLIENT_AXISW,
683 .id = TEGRA186_MEMORY_CLIENT_EQOSR,
693 .id = TEGRA186_MEMORY_CLIENT_EQOSW,
703 .id = TEGRA186_MEMORY_CLIENT_UFSHCR,
713 .id = TEGRA186_MEMORY_CLIENT_UFSHCW,
723 .id = TEGRA186_MEMORY_CLIENT_NVDISPLAYR,
733 .id = TEGRA186_MEMORY_CLIENT_BPMPR,
743 .id = TEGRA186_MEMORY_CLIENT_BPMPW,
753 .id = TEGRA186_MEMORY_CLIENT_BPMPDMAR,
763 .id = TEGRA186_MEMORY_CLIENT_BPMPDMAW,
773 .id = TEGRA186_MEMORY_CLIENT_AONR,
783 .id = TEGRA186_MEMORY_CLIENT_AONW,
793 .id = TEGRA186_MEMORY_CLIENT_AONDMAR,
803 .id = TEGRA186_MEMORY_CLIENT_AONDMAW,
813 .id = TEGRA186_MEMORY_CLIENT_SCER,
823 .id = TEGRA186_MEMORY_CLIENT_SCEW,
833 .id = TEGRA186_MEMORY_CLIENT_SCEDMAR,
843 .id = TEGRA186_MEMORY_CLIENT_SCEDMAW,
853 .id = TEGRA186_MEMORY_CLIENT_APEDMAR,
863 .id = TEGRA186_MEMORY_CLIENT_APEDMAW,
873 .id = TEGRA186_MEMORY_CLIENT_NVDISPLAYR1,
883 .id = TEGRA186_MEMORY_CLIENT_VICSRD1,
893 .id = TEGRA186_MEMORY_CLIENT_NVDECSRD1,