0001
0002
0003
0004
0005
0006 #include <linux/io.h>
0007 #include <linux/iommu.h>
0008 #include <linux/module.h>
0009 #include <linux/mod_devicetable.h>
0010 #include <linux/of_device.h>
0011 #include <linux/platform_device.h>
0012
0013 #include <soc/tegra/mc.h>
0014
0015 #if defined(CONFIG_ARCH_TEGRA_186_SOC)
0016 #include <dt-bindings/memory/tegra186-mc.h>
0017 #endif
0018
0019 #include "mc.h"
0020
0021 #define MC_SID_STREAMID_OVERRIDE_MASK GENMASK(7, 0)
0022 #define MC_SID_STREAMID_SECURITY_WRITE_ACCESS_DISABLED BIT(16)
0023 #define MC_SID_STREAMID_SECURITY_OVERRIDE BIT(8)
0024
0025 static void tegra186_mc_program_sid(struct tegra_mc *mc)
0026 {
0027 unsigned int i;
0028
0029 for (i = 0; i < mc->soc->num_clients; i++) {
0030 const struct tegra_mc_client *client = &mc->soc->clients[i];
0031 u32 override, security;
0032
0033 override = readl(mc->regs + client->regs.sid.override);
0034 security = readl(mc->regs + client->regs.sid.security);
0035
0036 dev_dbg(mc->dev, "client %s: override: %x security: %x\n",
0037 client->name, override, security);
0038
0039 dev_dbg(mc->dev, "setting SID %u for %s\n", client->sid,
0040 client->name);
0041 writel(client->sid, mc->regs + client->regs.sid.override);
0042
0043 override = readl(mc->regs + client->regs.sid.override);
0044 security = readl(mc->regs + client->regs.sid.security);
0045
0046 dev_dbg(mc->dev, "client %s: override: %x security: %x\n",
0047 client->name, override, security);
0048 }
0049 }
0050
0051 static int tegra186_mc_probe(struct tegra_mc *mc)
0052 {
0053 struct platform_device *pdev = to_platform_device(mc->dev);
0054 unsigned int i;
0055 char name[8];
0056 int err;
0057
0058 mc->bcast_ch_regs = devm_platform_ioremap_resource_byname(pdev, "broadcast");
0059 if (IS_ERR(mc->bcast_ch_regs)) {
0060 if (PTR_ERR(mc->bcast_ch_regs) == -EINVAL) {
0061 dev_warn(&pdev->dev,
0062 "Broadcast channel is missing, please update your device-tree\n");
0063 mc->bcast_ch_regs = NULL;
0064 goto populate;
0065 }
0066
0067 return PTR_ERR(mc->bcast_ch_regs);
0068 }
0069
0070 mc->ch_regs = devm_kcalloc(mc->dev, mc->soc->num_channels, sizeof(*mc->ch_regs),
0071 GFP_KERNEL);
0072 if (!mc->ch_regs)
0073 return -ENOMEM;
0074
0075 for (i = 0; i < mc->soc->num_channels; i++) {
0076 snprintf(name, sizeof(name), "ch%u", i);
0077
0078 mc->ch_regs[i] = devm_platform_ioremap_resource_byname(pdev, name);
0079 if (IS_ERR(mc->ch_regs[i]))
0080 return PTR_ERR(mc->ch_regs[i]);
0081 }
0082
0083 populate:
0084 err = of_platform_populate(mc->dev->of_node, NULL, NULL, mc->dev);
0085 if (err < 0)
0086 return err;
0087
0088 tegra186_mc_program_sid(mc);
0089
0090 return 0;
0091 }
0092
0093 static void tegra186_mc_remove(struct tegra_mc *mc)
0094 {
0095 of_platform_depopulate(mc->dev);
0096 }
0097
0098 static int tegra186_mc_resume(struct tegra_mc *mc)
0099 {
0100 tegra186_mc_program_sid(mc);
0101
0102 return 0;
0103 }
0104
0105 #if IS_ENABLED(CONFIG_IOMMU_API)
0106 static void tegra186_mc_client_sid_override(struct tegra_mc *mc,
0107 const struct tegra_mc_client *client,
0108 unsigned int sid)
0109 {
0110 u32 value, old;
0111
0112 value = readl(mc->regs + client->regs.sid.security);
0113 if ((value & MC_SID_STREAMID_SECURITY_OVERRIDE) == 0) {
0114
0115
0116
0117
0118 if (value & MC_SID_STREAMID_SECURITY_WRITE_ACCESS_DISABLED)
0119 return;
0120
0121
0122
0123
0124
0125
0126
0127
0128 WARN_ON((value & MC_SID_STREAMID_SECURITY_OVERRIDE) == 0);
0129
0130 value |= MC_SID_STREAMID_SECURITY_OVERRIDE;
0131 writel(value, mc->regs + client->regs.sid.security);
0132 }
0133
0134 value = readl(mc->regs + client->regs.sid.override);
0135 old = value & MC_SID_STREAMID_OVERRIDE_MASK;
0136
0137 if (old != sid) {
0138 dev_dbg(mc->dev, "overriding SID %x for %s with %x\n", old,
0139 client->name, sid);
0140 writel(sid, mc->regs + client->regs.sid.override);
0141 }
0142 }
0143 #endif
0144
0145 static int tegra186_mc_probe_device(struct tegra_mc *mc, struct device *dev)
0146 {
0147 #if IS_ENABLED(CONFIG_IOMMU_API)
0148 struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
0149 struct of_phandle_args args;
0150 unsigned int i, index = 0;
0151
0152 while (!of_parse_phandle_with_args(dev->of_node, "interconnects", "#interconnect-cells",
0153 index, &args)) {
0154 if (args.np == mc->dev->of_node && args.args_count != 0) {
0155 for (i = 0; i < mc->soc->num_clients; i++) {
0156 const struct tegra_mc_client *client = &mc->soc->clients[i];
0157
0158 if (client->id == args.args[0]) {
0159 u32 sid = fwspec->ids[0] & MC_SID_STREAMID_OVERRIDE_MASK;
0160
0161 tegra186_mc_client_sid_override(mc, client, sid);
0162 }
0163 }
0164 }
0165
0166 index++;
0167 }
0168 #endif
0169
0170 return 0;
0171 }
0172
0173 const struct tegra_mc_ops tegra186_mc_ops = {
0174 .probe = tegra186_mc_probe,
0175 .remove = tegra186_mc_remove,
0176 .resume = tegra186_mc_resume,
0177 .probe_device = tegra186_mc_probe_device,
0178 .handle_irq = tegra30_mc_handle_irq,
0179 };
0180
0181 #if defined(CONFIG_ARCH_TEGRA_186_SOC)
0182 static const struct tegra_mc_client tegra186_mc_clients[] = {
0183 {
0184 .id = TEGRA186_MEMORY_CLIENT_PTCR,
0185 .name = "ptcr",
0186 .sid = TEGRA186_SID_PASSTHROUGH,
0187 .regs = {
0188 .sid = {
0189 .override = 0x000,
0190 .security = 0x004,
0191 },
0192 },
0193 }, {
0194 .id = TEGRA186_MEMORY_CLIENT_AFIR,
0195 .name = "afir",
0196 .sid = TEGRA186_SID_AFI,
0197 .regs = {
0198 .sid = {
0199 .override = 0x070,
0200 .security = 0x074,
0201 },
0202 },
0203 }, {
0204 .id = TEGRA186_MEMORY_CLIENT_HDAR,
0205 .name = "hdar",
0206 .sid = TEGRA186_SID_HDA,
0207 .regs = {
0208 .sid = {
0209 .override = 0x0a8,
0210 .security = 0x0ac,
0211 },
0212 },
0213 }, {
0214 .id = TEGRA186_MEMORY_CLIENT_HOST1XDMAR,
0215 .name = "host1xdmar",
0216 .sid = TEGRA186_SID_HOST1X,
0217 .regs = {
0218 .sid = {
0219 .override = 0x0b0,
0220 .security = 0x0b4,
0221 },
0222 },
0223 }, {
0224 .id = TEGRA186_MEMORY_CLIENT_NVENCSRD,
0225 .name = "nvencsrd",
0226 .sid = TEGRA186_SID_NVENC,
0227 .regs = {
0228 .sid = {
0229 .override = 0x0e0,
0230 .security = 0x0e4,
0231 },
0232 },
0233 }, {
0234 .id = TEGRA186_MEMORY_CLIENT_SATAR,
0235 .name = "satar",
0236 .sid = TEGRA186_SID_SATA,
0237 .regs = {
0238 .sid = {
0239 .override = 0x0f8,
0240 .security = 0x0fc,
0241 },
0242 },
0243 }, {
0244 .id = TEGRA186_MEMORY_CLIENT_MPCORER,
0245 .name = "mpcorer",
0246 .sid = TEGRA186_SID_PASSTHROUGH,
0247 .regs = {
0248 .sid = {
0249 .override = 0x138,
0250 .security = 0x13c,
0251 },
0252 },
0253 }, {
0254 .id = TEGRA186_MEMORY_CLIENT_NVENCSWR,
0255 .name = "nvencswr",
0256 .sid = TEGRA186_SID_NVENC,
0257 .regs = {
0258 .sid = {
0259 .override = 0x158,
0260 .security = 0x15c,
0261 },
0262 },
0263 }, {
0264 .id = TEGRA186_MEMORY_CLIENT_AFIW,
0265 .name = "afiw",
0266 .sid = TEGRA186_SID_AFI,
0267 .regs = {
0268 .sid = {
0269 .override = 0x188,
0270 .security = 0x18c,
0271 },
0272 },
0273 }, {
0274 .id = TEGRA186_MEMORY_CLIENT_HDAW,
0275 .name = "hdaw",
0276 .sid = TEGRA186_SID_HDA,
0277 .regs = {
0278 .sid = {
0279 .override = 0x1a8,
0280 .security = 0x1ac,
0281 },
0282 },
0283 }, {
0284 .id = TEGRA186_MEMORY_CLIENT_MPCOREW,
0285 .name = "mpcorew",
0286 .sid = TEGRA186_SID_PASSTHROUGH,
0287 .regs = {
0288 .sid = {
0289 .override = 0x1c8,
0290 .security = 0x1cc,
0291 },
0292 },
0293 }, {
0294 .id = TEGRA186_MEMORY_CLIENT_SATAW,
0295 .name = "sataw",
0296 .sid = TEGRA186_SID_SATA,
0297 .regs = {
0298 .sid = {
0299 .override = 0x1e8,
0300 .security = 0x1ec,
0301 },
0302 },
0303 }, {
0304 .id = TEGRA186_MEMORY_CLIENT_ISPRA,
0305 .name = "ispra",
0306 .sid = TEGRA186_SID_ISP,
0307 .regs = {
0308 .sid = {
0309 .override = 0x220,
0310 .security = 0x224,
0311 },
0312 },
0313 }, {
0314 .id = TEGRA186_MEMORY_CLIENT_ISPWA,
0315 .name = "ispwa",
0316 .sid = TEGRA186_SID_ISP,
0317 .regs = {
0318 .sid = {
0319 .override = 0x230,
0320 .security = 0x234,
0321 },
0322 },
0323 }, {
0324 .id = TEGRA186_MEMORY_CLIENT_ISPWB,
0325 .name = "ispwb",
0326 .sid = TEGRA186_SID_ISP,
0327 .regs = {
0328 .sid = {
0329 .override = 0x238,
0330 .security = 0x23c,
0331 },
0332 },
0333 }, {
0334 .id = TEGRA186_MEMORY_CLIENT_XUSB_HOSTR,
0335 .name = "xusb_hostr",
0336 .sid = TEGRA186_SID_XUSB_HOST,
0337 .regs = {
0338 .sid = {
0339 .override = 0x250,
0340 .security = 0x254,
0341 },
0342 },
0343 }, {
0344 .id = TEGRA186_MEMORY_CLIENT_XUSB_HOSTW,
0345 .name = "xusb_hostw",
0346 .sid = TEGRA186_SID_XUSB_HOST,
0347 .regs = {
0348 .sid = {
0349 .override = 0x258,
0350 .security = 0x25c,
0351 },
0352 },
0353 }, {
0354 .id = TEGRA186_MEMORY_CLIENT_XUSB_DEVR,
0355 .name = "xusb_devr",
0356 .sid = TEGRA186_SID_XUSB_DEV,
0357 .regs = {
0358 .sid = {
0359 .override = 0x260,
0360 .security = 0x264,
0361 },
0362 },
0363 }, {
0364 .id = TEGRA186_MEMORY_CLIENT_XUSB_DEVW,
0365 .name = "xusb_devw",
0366 .sid = TEGRA186_SID_XUSB_DEV,
0367 .regs = {
0368 .sid = {
0369 .override = 0x268,
0370 .security = 0x26c,
0371 },
0372 },
0373 }, {
0374 .id = TEGRA186_MEMORY_CLIENT_TSECSRD,
0375 .name = "tsecsrd",
0376 .sid = TEGRA186_SID_TSEC,
0377 .regs = {
0378 .sid = {
0379 .override = 0x2a0,
0380 .security = 0x2a4,
0381 },
0382 },
0383 }, {
0384 .id = TEGRA186_MEMORY_CLIENT_TSECSWR,
0385 .name = "tsecswr",
0386 .sid = TEGRA186_SID_TSEC,
0387 .regs = {
0388 .sid = {
0389 .override = 0x2a8,
0390 .security = 0x2ac,
0391 },
0392 },
0393 }, {
0394 .id = TEGRA186_MEMORY_CLIENT_GPUSRD,
0395 .name = "gpusrd",
0396 .sid = TEGRA186_SID_GPU,
0397 .regs = {
0398 .sid = {
0399 .override = 0x2c0,
0400 .security = 0x2c4,
0401 },
0402 },
0403 }, {
0404 .id = TEGRA186_MEMORY_CLIENT_GPUSWR,
0405 .name = "gpuswr",
0406 .sid = TEGRA186_SID_GPU,
0407 .regs = {
0408 .sid = {
0409 .override = 0x2c8,
0410 .security = 0x2cc,
0411 },
0412 },
0413 }, {
0414 .id = TEGRA186_MEMORY_CLIENT_SDMMCRA,
0415 .name = "sdmmcra",
0416 .sid = TEGRA186_SID_SDMMC1,
0417 .regs = {
0418 .sid = {
0419 .override = 0x300,
0420 .security = 0x304,
0421 },
0422 },
0423 }, {
0424 .id = TEGRA186_MEMORY_CLIENT_SDMMCRAA,
0425 .name = "sdmmcraa",
0426 .sid = TEGRA186_SID_SDMMC2,
0427 .regs = {
0428 .sid = {
0429 .override = 0x308,
0430 .security = 0x30c,
0431 },
0432 },
0433 }, {
0434 .id = TEGRA186_MEMORY_CLIENT_SDMMCR,
0435 .name = "sdmmcr",
0436 .sid = TEGRA186_SID_SDMMC3,
0437 .regs = {
0438 .sid = {
0439 .override = 0x310,
0440 .security = 0x314,
0441 },
0442 },
0443 }, {
0444 .id = TEGRA186_MEMORY_CLIENT_SDMMCRAB,
0445 .name = "sdmmcrab",
0446 .sid = TEGRA186_SID_SDMMC4,
0447 .regs = {
0448 .sid = {
0449 .override = 0x318,
0450 .security = 0x31c,
0451 },
0452 },
0453 }, {
0454 .id = TEGRA186_MEMORY_CLIENT_SDMMCWA,
0455 .name = "sdmmcwa",
0456 .sid = TEGRA186_SID_SDMMC1,
0457 .regs = {
0458 .sid = {
0459 .override = 0x320,
0460 .security = 0x324,
0461 },
0462 },
0463 }, {
0464 .id = TEGRA186_MEMORY_CLIENT_SDMMCWAA,
0465 .name = "sdmmcwaa",
0466 .sid = TEGRA186_SID_SDMMC2,
0467 .regs = {
0468 .sid = {
0469 .override = 0x328,
0470 .security = 0x32c,
0471 },
0472 },
0473 }, {
0474 .id = TEGRA186_MEMORY_CLIENT_SDMMCW,
0475 .name = "sdmmcw",
0476 .sid = TEGRA186_SID_SDMMC3,
0477 .regs = {
0478 .sid = {
0479 .override = 0x330,
0480 .security = 0x334,
0481 },
0482 },
0483 }, {
0484 .id = TEGRA186_MEMORY_CLIENT_SDMMCWAB,
0485 .name = "sdmmcwab",
0486 .sid = TEGRA186_SID_SDMMC4,
0487 .regs = {
0488 .sid = {
0489 .override = 0x338,
0490 .security = 0x33c,
0491 },
0492 },
0493 }, {
0494 .id = TEGRA186_MEMORY_CLIENT_VICSRD,
0495 .name = "vicsrd",
0496 .sid = TEGRA186_SID_VIC,
0497 .regs = {
0498 .sid = {
0499 .override = 0x360,
0500 .security = 0x364,
0501 },
0502 },
0503 }, {
0504 .id = TEGRA186_MEMORY_CLIENT_VICSWR,
0505 .name = "vicswr",
0506 .sid = TEGRA186_SID_VIC,
0507 .regs = {
0508 .sid = {
0509 .override = 0x368,
0510 .security = 0x36c,
0511 },
0512 },
0513 }, {
0514 .id = TEGRA186_MEMORY_CLIENT_VIW,
0515 .name = "viw",
0516 .sid = TEGRA186_SID_VI,
0517 .regs = {
0518 .sid = {
0519 .override = 0x390,
0520 .security = 0x394,
0521 },
0522 },
0523 }, {
0524 .id = TEGRA186_MEMORY_CLIENT_NVDECSRD,
0525 .name = "nvdecsrd",
0526 .sid = TEGRA186_SID_NVDEC,
0527 .regs = {
0528 .sid = {
0529 .override = 0x3c0,
0530 .security = 0x3c4,
0531 },
0532 },
0533 }, {
0534 .id = TEGRA186_MEMORY_CLIENT_NVDECSWR,
0535 .name = "nvdecswr",
0536 .sid = TEGRA186_SID_NVDEC,
0537 .regs = {
0538 .sid = {
0539 .override = 0x3c8,
0540 .security = 0x3cc,
0541 },
0542 },
0543 }, {
0544 .id = TEGRA186_MEMORY_CLIENT_APER,
0545 .name = "aper",
0546 .sid = TEGRA186_SID_APE,
0547 .regs = {
0548 .sid = {
0549 .override = 0x3d0,
0550 .security = 0x3d4,
0551 },
0552 },
0553 }, {
0554 .id = TEGRA186_MEMORY_CLIENT_APEW,
0555 .name = "apew",
0556 .sid = TEGRA186_SID_APE,
0557 .regs = {
0558 .sid = {
0559 .override = 0x3d8,
0560 .security = 0x3dc,
0561 },
0562 },
0563 }, {
0564 .id = TEGRA186_MEMORY_CLIENT_NVJPGSRD,
0565 .name = "nvjpgsrd",
0566 .sid = TEGRA186_SID_NVJPG,
0567 .regs = {
0568 .sid = {
0569 .override = 0x3f0,
0570 .security = 0x3f4,
0571 },
0572 },
0573 }, {
0574 .id = TEGRA186_MEMORY_CLIENT_NVJPGSWR,
0575 .name = "nvjpgswr",
0576 .sid = TEGRA186_SID_NVJPG,
0577 .regs = {
0578 .sid = {
0579 .override = 0x3f8,
0580 .security = 0x3fc,
0581 },
0582 },
0583 }, {
0584 .id = TEGRA186_MEMORY_CLIENT_SESRD,
0585 .name = "sesrd",
0586 .sid = TEGRA186_SID_SE,
0587 .regs = {
0588 .sid = {
0589 .override = 0x400,
0590 .security = 0x404,
0591 },
0592 },
0593 }, {
0594 .id = TEGRA186_MEMORY_CLIENT_SESWR,
0595 .name = "seswr",
0596 .sid = TEGRA186_SID_SE,
0597 .regs = {
0598 .sid = {
0599 .override = 0x408,
0600 .security = 0x40c,
0601 },
0602 },
0603 }, {
0604 .id = TEGRA186_MEMORY_CLIENT_ETRR,
0605 .name = "etrr",
0606 .sid = TEGRA186_SID_ETR,
0607 .regs = {
0608 .sid = {
0609 .override = 0x420,
0610 .security = 0x424,
0611 },
0612 },
0613 }, {
0614 .id = TEGRA186_MEMORY_CLIENT_ETRW,
0615 .name = "etrw",
0616 .sid = TEGRA186_SID_ETR,
0617 .regs = {
0618 .sid = {
0619 .override = 0x428,
0620 .security = 0x42c,
0621 },
0622 },
0623 }, {
0624 .id = TEGRA186_MEMORY_CLIENT_TSECSRDB,
0625 .name = "tsecsrdb",
0626 .sid = TEGRA186_SID_TSECB,
0627 .regs = {
0628 .sid = {
0629 .override = 0x430,
0630 .security = 0x434,
0631 },
0632 },
0633 }, {
0634 .id = TEGRA186_MEMORY_CLIENT_TSECSWRB,
0635 .name = "tsecswrb",
0636 .sid = TEGRA186_SID_TSECB,
0637 .regs = {
0638 .sid = {
0639 .override = 0x438,
0640 .security = 0x43c,
0641 },
0642 },
0643 }, {
0644 .id = TEGRA186_MEMORY_CLIENT_GPUSRD2,
0645 .name = "gpusrd2",
0646 .sid = TEGRA186_SID_GPU,
0647 .regs = {
0648 .sid = {
0649 .override = 0x440,
0650 .security = 0x444,
0651 },
0652 },
0653 }, {
0654 .id = TEGRA186_MEMORY_CLIENT_GPUSWR2,
0655 .name = "gpuswr2",
0656 .sid = TEGRA186_SID_GPU,
0657 .regs = {
0658 .sid = {
0659 .override = 0x448,
0660 .security = 0x44c,
0661 },
0662 },
0663 }, {
0664 .id = TEGRA186_MEMORY_CLIENT_AXISR,
0665 .name = "axisr",
0666 .sid = TEGRA186_SID_GPCDMA_0,
0667 .regs = {
0668 .sid = {
0669 .override = 0x460,
0670 .security = 0x464,
0671 },
0672 },
0673 }, {
0674 .id = TEGRA186_MEMORY_CLIENT_AXISW,
0675 .name = "axisw",
0676 .sid = TEGRA186_SID_GPCDMA_0,
0677 .regs = {
0678 .sid = {
0679 .override = 0x468,
0680 .security = 0x46c,
0681 },
0682 },
0683 }, {
0684 .id = TEGRA186_MEMORY_CLIENT_EQOSR,
0685 .name = "eqosr",
0686 .sid = TEGRA186_SID_EQOS,
0687 .regs = {
0688 .sid = {
0689 .override = 0x470,
0690 .security = 0x474,
0691 },
0692 },
0693 }, {
0694 .id = TEGRA186_MEMORY_CLIENT_EQOSW,
0695 .name = "eqosw",
0696 .sid = TEGRA186_SID_EQOS,
0697 .regs = {
0698 .sid = {
0699 .override = 0x478,
0700 .security = 0x47c,
0701 },
0702 },
0703 }, {
0704 .id = TEGRA186_MEMORY_CLIENT_UFSHCR,
0705 .name = "ufshcr",
0706 .sid = TEGRA186_SID_UFSHC,
0707 .regs = {
0708 .sid = {
0709 .override = 0x480,
0710 .security = 0x484,
0711 },
0712 },
0713 }, {
0714 .id = TEGRA186_MEMORY_CLIENT_UFSHCW,
0715 .name = "ufshcw",
0716 .sid = TEGRA186_SID_UFSHC,
0717 .regs = {
0718 .sid = {
0719 .override = 0x488,
0720 .security = 0x48c,
0721 },
0722 },
0723 }, {
0724 .id = TEGRA186_MEMORY_CLIENT_NVDISPLAYR,
0725 .name = "nvdisplayr",
0726 .sid = TEGRA186_SID_NVDISPLAY,
0727 .regs = {
0728 .sid = {
0729 .override = 0x490,
0730 .security = 0x494,
0731 },
0732 },
0733 }, {
0734 .id = TEGRA186_MEMORY_CLIENT_BPMPR,
0735 .name = "bpmpr",
0736 .sid = TEGRA186_SID_BPMP,
0737 .regs = {
0738 .sid = {
0739 .override = 0x498,
0740 .security = 0x49c,
0741 },
0742 },
0743 }, {
0744 .id = TEGRA186_MEMORY_CLIENT_BPMPW,
0745 .name = "bpmpw",
0746 .sid = TEGRA186_SID_BPMP,
0747 .regs = {
0748 .sid = {
0749 .override = 0x4a0,
0750 .security = 0x4a4,
0751 },
0752 },
0753 }, {
0754 .id = TEGRA186_MEMORY_CLIENT_BPMPDMAR,
0755 .name = "bpmpdmar",
0756 .sid = TEGRA186_SID_BPMP,
0757 .regs = {
0758 .sid = {
0759 .override = 0x4a8,
0760 .security = 0x4ac,
0761 },
0762 },
0763 }, {
0764 .id = TEGRA186_MEMORY_CLIENT_BPMPDMAW,
0765 .name = "bpmpdmaw",
0766 .sid = TEGRA186_SID_BPMP,
0767 .regs = {
0768 .sid = {
0769 .override = 0x4b0,
0770 .security = 0x4b4,
0771 },
0772 },
0773 }, {
0774 .id = TEGRA186_MEMORY_CLIENT_AONR,
0775 .name = "aonr",
0776 .sid = TEGRA186_SID_AON,
0777 .regs = {
0778 .sid = {
0779 .override = 0x4b8,
0780 .security = 0x4bc,
0781 },
0782 },
0783 }, {
0784 .id = TEGRA186_MEMORY_CLIENT_AONW,
0785 .name = "aonw",
0786 .sid = TEGRA186_SID_AON,
0787 .regs = {
0788 .sid = {
0789 .override = 0x4c0,
0790 .security = 0x4c4,
0791 },
0792 },
0793 }, {
0794 .id = TEGRA186_MEMORY_CLIENT_AONDMAR,
0795 .name = "aondmar",
0796 .sid = TEGRA186_SID_AON,
0797 .regs = {
0798 .sid = {
0799 .override = 0x4c8,
0800 .security = 0x4cc,
0801 },
0802 },
0803 }, {
0804 .id = TEGRA186_MEMORY_CLIENT_AONDMAW,
0805 .name = "aondmaw",
0806 .sid = TEGRA186_SID_AON,
0807 .regs = {
0808 .sid = {
0809 .override = 0x4d0,
0810 .security = 0x4d4,
0811 },
0812 },
0813 }, {
0814 .id = TEGRA186_MEMORY_CLIENT_SCER,
0815 .name = "scer",
0816 .sid = TEGRA186_SID_SCE,
0817 .regs = {
0818 .sid = {
0819 .override = 0x4d8,
0820 .security = 0x4dc,
0821 },
0822 },
0823 }, {
0824 .id = TEGRA186_MEMORY_CLIENT_SCEW,
0825 .name = "scew",
0826 .sid = TEGRA186_SID_SCE,
0827 .regs = {
0828 .sid = {
0829 .override = 0x4e0,
0830 .security = 0x4e4,
0831 },
0832 },
0833 }, {
0834 .id = TEGRA186_MEMORY_CLIENT_SCEDMAR,
0835 .name = "scedmar",
0836 .sid = TEGRA186_SID_SCE,
0837 .regs = {
0838 .sid = {
0839 .override = 0x4e8,
0840 .security = 0x4ec,
0841 },
0842 },
0843 }, {
0844 .id = TEGRA186_MEMORY_CLIENT_SCEDMAW,
0845 .name = "scedmaw",
0846 .sid = TEGRA186_SID_SCE,
0847 .regs = {
0848 .sid = {
0849 .override = 0x4f0,
0850 .security = 0x4f4,
0851 },
0852 },
0853 }, {
0854 .id = TEGRA186_MEMORY_CLIENT_APEDMAR,
0855 .name = "apedmar",
0856 .sid = TEGRA186_SID_APE,
0857 .regs = {
0858 .sid = {
0859 .override = 0x4f8,
0860 .security = 0x4fc,
0861 },
0862 },
0863 }, {
0864 .id = TEGRA186_MEMORY_CLIENT_APEDMAW,
0865 .name = "apedmaw",
0866 .sid = TEGRA186_SID_APE,
0867 .regs = {
0868 .sid = {
0869 .override = 0x500,
0870 .security = 0x504,
0871 },
0872 },
0873 }, {
0874 .id = TEGRA186_MEMORY_CLIENT_NVDISPLAYR1,
0875 .name = "nvdisplayr1",
0876 .sid = TEGRA186_SID_NVDISPLAY,
0877 .regs = {
0878 .sid = {
0879 .override = 0x508,
0880 .security = 0x50c,
0881 },
0882 },
0883 }, {
0884 .id = TEGRA186_MEMORY_CLIENT_VICSRD1,
0885 .name = "vicsrd1",
0886 .sid = TEGRA186_SID_VIC,
0887 .regs = {
0888 .sid = {
0889 .override = 0x510,
0890 .security = 0x514,
0891 },
0892 },
0893 }, {
0894 .id = TEGRA186_MEMORY_CLIENT_NVDECSRD1,
0895 .name = "nvdecsrd1",
0896 .sid = TEGRA186_SID_NVDEC,
0897 .regs = {
0898 .sid = {
0899 .override = 0x518,
0900 .security = 0x51c,
0901 },
0902 },
0903 },
0904 };
0905
0906 const struct tegra_mc_soc tegra186_mc_soc = {
0907 .num_clients = ARRAY_SIZE(tegra186_mc_clients),
0908 .clients = tegra186_mc_clients,
0909 .num_address_bits = 40,
0910 .num_channels = 4,
0911 .client_id_mask = 0xff,
0912 .intmask = MC_INT_DECERR_GENERALIZED_CARVEOUT | MC_INT_DECERR_MTS |
0913 MC_INT_SECERR_SEC | MC_INT_DECERR_VPR |
0914 MC_INT_SECURITY_VIOLATION | MC_INT_DECERR_EMEM,
0915 .ops = &tegra186_mc_ops,
0916 .ch_intmask = 0x0000000f,
0917 .global_intstatus_channel_shift = 0,
0918 };
0919 #endif