Merge tag 'drm-next-2023-09-08' of git://anongit.freedesktop.org/drm/drm
[platform/kernel/linux-rpi.git] / drivers / memory / tegra / tegra186.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (C) 2017-2021 NVIDIA CORPORATION.  All rights reserved.
4  */
5
6 #include <linux/io.h>
7 #include <linux/iommu.h>
8 #include <linux/module.h>
9 #include <linux/mod_devicetable.h>
10 #include <linux/of.h>
11 #include <linux/of_platform.h>
12 #include <linux/platform_device.h>
13
14 #include <soc/tegra/mc.h>
15
16 #if defined(CONFIG_ARCH_TEGRA_186_SOC)
17 #include <dt-bindings/memory/tegra186-mc.h>
18 #endif
19
20 #include "mc.h"
21
22 #define MC_SID_STREAMID_OVERRIDE_MASK GENMASK(7, 0)
23 #define MC_SID_STREAMID_SECURITY_WRITE_ACCESS_DISABLED BIT(16)
24 #define MC_SID_STREAMID_SECURITY_OVERRIDE BIT(8)
25
26 static int tegra186_mc_probe(struct tegra_mc *mc)
27 {
28         struct platform_device *pdev = to_platform_device(mc->dev);
29         unsigned int i;
30         char name[8];
31         int err;
32
33         mc->bcast_ch_regs = devm_platform_ioremap_resource_byname(pdev, "broadcast");
34         if (IS_ERR(mc->bcast_ch_regs)) {
35                 if (PTR_ERR(mc->bcast_ch_regs) == -EINVAL) {
36                         dev_warn(&pdev->dev,
37                                  "Broadcast channel is missing, please update your device-tree\n");
38                         mc->bcast_ch_regs = NULL;
39                         goto populate;
40                 }
41
42                 return PTR_ERR(mc->bcast_ch_regs);
43         }
44
45         mc->ch_regs = devm_kcalloc(mc->dev, mc->soc->num_channels, sizeof(*mc->ch_regs),
46                                    GFP_KERNEL);
47         if (!mc->ch_regs)
48                 return -ENOMEM;
49
50         for (i = 0; i < mc->soc->num_channels; i++) {
51                 snprintf(name, sizeof(name), "ch%u", i);
52
53                 mc->ch_regs[i] = devm_platform_ioremap_resource_byname(pdev, name);
54                 if (IS_ERR(mc->ch_regs[i]))
55                         return PTR_ERR(mc->ch_regs[i]);
56         }
57
58 populate:
59         err = of_platform_populate(mc->dev->of_node, NULL, NULL, mc->dev);
60         if (err < 0)
61                 return err;
62
63         return 0;
64 }
65
66 static void tegra186_mc_remove(struct tegra_mc *mc)
67 {
68         of_platform_depopulate(mc->dev);
69 }
70
71 #if IS_ENABLED(CONFIG_IOMMU_API)
72 static void tegra186_mc_client_sid_override(struct tegra_mc *mc,
73                                             const struct tegra_mc_client *client,
74                                             unsigned int sid)
75 {
76         u32 value, old;
77
78         value = readl(mc->regs + client->regs.sid.security);
79         if ((value & MC_SID_STREAMID_SECURITY_OVERRIDE) == 0) {
80                 /*
81                  * If the secure firmware has locked this down the override
82                  * for this memory client, there's nothing we can do here.
83                  */
84                 if (value & MC_SID_STREAMID_SECURITY_WRITE_ACCESS_DISABLED)
85                         return;
86
87                 /*
88                  * Otherwise, try to set the override itself. Typically the
89                  * secure firmware will never have set this configuration.
90                  * Instead, it will either have disabled write access to
91                  * this field, or it will already have set an explicit
92                  * override itself.
93                  */
94                 WARN_ON((value & MC_SID_STREAMID_SECURITY_OVERRIDE) == 0);
95
96                 value |= MC_SID_STREAMID_SECURITY_OVERRIDE;
97                 writel(value, mc->regs + client->regs.sid.security);
98         }
99
100         value = readl(mc->regs + client->regs.sid.override);
101         old = value & MC_SID_STREAMID_OVERRIDE_MASK;
102
103         if (old != sid) {
104                 dev_dbg(mc->dev, "overriding SID %x for %s with %x\n", old,
105                         client->name, sid);
106                 writel(sid, mc->regs + client->regs.sid.override);
107         }
108 }
109 #endif
110
111 static int tegra186_mc_probe_device(struct tegra_mc *mc, struct device *dev)
112 {
113 #if IS_ENABLED(CONFIG_IOMMU_API)
114         struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
115         struct of_phandle_args args;
116         unsigned int i, index = 0;
117
118         while (!of_parse_phandle_with_args(dev->of_node, "interconnects", "#interconnect-cells",
119                                            index, &args)) {
120                 if (args.np == mc->dev->of_node && args.args_count != 0) {
121                         for (i = 0; i < mc->soc->num_clients; i++) {
122                                 const struct tegra_mc_client *client = &mc->soc->clients[i];
123
124                                 if (client->id == args.args[0]) {
125                                         u32 sid = fwspec->ids[0] & MC_SID_STREAMID_OVERRIDE_MASK;
126
127                                         tegra186_mc_client_sid_override(mc, client, sid);
128                                 }
129                         }
130                 }
131
132                 index++;
133         }
134 #endif
135
136         return 0;
137 }
138
139 const struct tegra_mc_ops tegra186_mc_ops = {
140         .probe = tegra186_mc_probe,
141         .remove = tegra186_mc_remove,
142         .probe_device = tegra186_mc_probe_device,
143         .handle_irq = tegra30_mc_handle_irq,
144 };
145
146 #if defined(CONFIG_ARCH_TEGRA_186_SOC)
147 static const struct tegra_mc_client tegra186_mc_clients[] = {
148         {
149                 .id = TEGRA186_MEMORY_CLIENT_PTCR,
150                 .name = "ptcr",
151                 .sid = TEGRA186_SID_PASSTHROUGH,
152                 .regs = {
153                         .sid = {
154                                 .override = 0x000,
155                                 .security = 0x004,
156                         },
157                 },
158         }, {
159                 .id = TEGRA186_MEMORY_CLIENT_AFIR,
160                 .name = "afir",
161                 .sid = TEGRA186_SID_AFI,
162                 .regs = {
163                         .sid = {
164                                 .override = 0x070,
165                                 .security = 0x074,
166                         },
167                 },
168         }, {
169                 .id = TEGRA186_MEMORY_CLIENT_HDAR,
170                 .name = "hdar",
171                 .sid = TEGRA186_SID_HDA,
172                 .regs = {
173                         .sid = {
174                                 .override = 0x0a8,
175                                 .security = 0x0ac,
176                         },
177                 },
178         }, {
179                 .id = TEGRA186_MEMORY_CLIENT_HOST1XDMAR,
180                 .name = "host1xdmar",
181                 .sid = TEGRA186_SID_HOST1X,
182                 .regs = {
183                         .sid = {
184                                 .override = 0x0b0,
185                                 .security = 0x0b4,
186                         },
187                 },
188         }, {
189                 .id = TEGRA186_MEMORY_CLIENT_NVENCSRD,
190                 .name = "nvencsrd",
191                 .sid = TEGRA186_SID_NVENC,
192                 .regs = {
193                         .sid = {
194                                 .override = 0x0e0,
195                                 .security = 0x0e4,
196                         },
197                 },
198         }, {
199                 .id = TEGRA186_MEMORY_CLIENT_SATAR,
200                 .name = "satar",
201                 .sid = TEGRA186_SID_SATA,
202                 .regs = {
203                         .sid = {
204                                 .override = 0x0f8,
205                                 .security = 0x0fc,
206                         },
207                 },
208         }, {
209                 .id = TEGRA186_MEMORY_CLIENT_MPCORER,
210                 .name = "mpcorer",
211                 .sid = TEGRA186_SID_PASSTHROUGH,
212                 .regs = {
213                         .sid = {
214                                 .override = 0x138,
215                                 .security = 0x13c,
216                         },
217                 },
218         }, {
219                 .id = TEGRA186_MEMORY_CLIENT_NVENCSWR,
220                 .name = "nvencswr",
221                 .sid = TEGRA186_SID_NVENC,
222                 .regs = {
223                         .sid = {
224                                 .override = 0x158,
225                                 .security = 0x15c,
226                         },
227                 },
228         }, {
229                 .id = TEGRA186_MEMORY_CLIENT_AFIW,
230                 .name = "afiw",
231                 .sid = TEGRA186_SID_AFI,
232                 .regs = {
233                         .sid = {
234                                 .override = 0x188,
235                                 .security = 0x18c,
236                         },
237                 },
238         }, {
239                 .id = TEGRA186_MEMORY_CLIENT_HDAW,
240                 .name = "hdaw",
241                 .sid = TEGRA186_SID_HDA,
242                 .regs = {
243                         .sid = {
244                                 .override = 0x1a8,
245                                 .security = 0x1ac,
246                         },
247                 },
248         }, {
249                 .id = TEGRA186_MEMORY_CLIENT_MPCOREW,
250                 .name = "mpcorew",
251                 .sid = TEGRA186_SID_PASSTHROUGH,
252                 .regs = {
253                         .sid = {
254                                 .override = 0x1c8,
255                                 .security = 0x1cc,
256                         },
257                 },
258         }, {
259                 .id = TEGRA186_MEMORY_CLIENT_SATAW,
260                 .name = "sataw",
261                 .sid = TEGRA186_SID_SATA,
262                 .regs = {
263                         .sid = {
264                                 .override = 0x1e8,
265                                 .security = 0x1ec,
266                         },
267                 },
268         }, {
269                 .id = TEGRA186_MEMORY_CLIENT_ISPRA,
270                 .name = "ispra",
271                 .sid = TEGRA186_SID_ISP,
272                 .regs = {
273                         .sid = {
274                                 .override = 0x220,
275                                 .security = 0x224,
276                         },
277                 },
278         }, {
279                 .id = TEGRA186_MEMORY_CLIENT_ISPWA,
280                 .name = "ispwa",
281                 .sid = TEGRA186_SID_ISP,
282                 .regs = {
283                         .sid = {
284                                 .override = 0x230,
285                                 .security = 0x234,
286                         },
287                 },
288         }, {
289                 .id = TEGRA186_MEMORY_CLIENT_ISPWB,
290                 .name = "ispwb",
291                 .sid = TEGRA186_SID_ISP,
292                 .regs = {
293                         .sid = {
294                                 .override = 0x238,
295                                 .security = 0x23c,
296                         },
297                 },
298         }, {
299                 .id = TEGRA186_MEMORY_CLIENT_XUSB_HOSTR,
300                 .name = "xusb_hostr",
301                 .sid = TEGRA186_SID_XUSB_HOST,
302                 .regs = {
303                         .sid = {
304                                 .override = 0x250,
305                                 .security = 0x254,
306                         },
307                 },
308         }, {
309                 .id = TEGRA186_MEMORY_CLIENT_XUSB_HOSTW,
310                 .name = "xusb_hostw",
311                 .sid = TEGRA186_SID_XUSB_HOST,
312                 .regs = {
313                         .sid = {
314                                 .override = 0x258,
315                                 .security = 0x25c,
316                         },
317                 },
318         }, {
319                 .id = TEGRA186_MEMORY_CLIENT_XUSB_DEVR,
320                 .name = "xusb_devr",
321                 .sid = TEGRA186_SID_XUSB_DEV,
322                 .regs = {
323                         .sid = {
324                                 .override = 0x260,
325                                 .security = 0x264,
326                         },
327                 },
328         }, {
329                 .id = TEGRA186_MEMORY_CLIENT_XUSB_DEVW,
330                 .name = "xusb_devw",
331                 .sid = TEGRA186_SID_XUSB_DEV,
332                 .regs = {
333                         .sid = {
334                                 .override = 0x268,
335                                 .security = 0x26c,
336                         },
337                 },
338         }, {
339                 .id = TEGRA186_MEMORY_CLIENT_TSECSRD,
340                 .name = "tsecsrd",
341                 .sid = TEGRA186_SID_TSEC,
342                 .regs = {
343                         .sid = {
344                                 .override = 0x2a0,
345                                 .security = 0x2a4,
346                         },
347                 },
348         }, {
349                 .id = TEGRA186_MEMORY_CLIENT_TSECSWR,
350                 .name = "tsecswr",
351                 .sid = TEGRA186_SID_TSEC,
352                 .regs = {
353                         .sid = {
354                                 .override = 0x2a8,
355                                 .security = 0x2ac,
356                         },
357                 },
358         }, {
359                 .id = TEGRA186_MEMORY_CLIENT_GPUSRD,
360                 .name = "gpusrd",
361                 .sid = TEGRA186_SID_GPU,
362                 .regs = {
363                         .sid = {
364                                 .override = 0x2c0,
365                                 .security = 0x2c4,
366                         },
367                 },
368         }, {
369                 .id = TEGRA186_MEMORY_CLIENT_GPUSWR,
370                 .name = "gpuswr",
371                 .sid = TEGRA186_SID_GPU,
372                 .regs = {
373                         .sid = {
374                                 .override = 0x2c8,
375                                 .security = 0x2cc,
376                         },
377                 },
378         }, {
379                 .id = TEGRA186_MEMORY_CLIENT_SDMMCRA,
380                 .name = "sdmmcra",
381                 .sid = TEGRA186_SID_SDMMC1,
382                 .regs = {
383                         .sid = {
384                                 .override = 0x300,
385                                 .security = 0x304,
386                         },
387                 },
388         }, {
389                 .id = TEGRA186_MEMORY_CLIENT_SDMMCRAA,
390                 .name = "sdmmcraa",
391                 .sid = TEGRA186_SID_SDMMC2,
392                 .regs = {
393                         .sid = {
394                                 .override = 0x308,
395                                 .security = 0x30c,
396                         },
397                 },
398         }, {
399                 .id = TEGRA186_MEMORY_CLIENT_SDMMCR,
400                 .name = "sdmmcr",
401                 .sid = TEGRA186_SID_SDMMC3,
402                 .regs = {
403                         .sid = {
404                                 .override = 0x310,
405                                 .security = 0x314,
406                         },
407                 },
408         }, {
409                 .id = TEGRA186_MEMORY_CLIENT_SDMMCRAB,
410                 .name = "sdmmcrab",
411                 .sid = TEGRA186_SID_SDMMC4,
412                 .regs = {
413                         .sid = {
414                                 .override = 0x318,
415                                 .security = 0x31c,
416                         },
417                 },
418         }, {
419                 .id = TEGRA186_MEMORY_CLIENT_SDMMCWA,
420                 .name = "sdmmcwa",
421                 .sid = TEGRA186_SID_SDMMC1,
422                 .regs = {
423                         .sid = {
424                                 .override = 0x320,
425                                 .security = 0x324,
426                         },
427                 },
428         }, {
429                 .id = TEGRA186_MEMORY_CLIENT_SDMMCWAA,
430                 .name = "sdmmcwaa",
431                 .sid = TEGRA186_SID_SDMMC2,
432                 .regs = {
433                         .sid = {
434                                 .override = 0x328,
435                                 .security = 0x32c,
436                         },
437                 },
438         }, {
439                 .id = TEGRA186_MEMORY_CLIENT_SDMMCW,
440                 .name = "sdmmcw",
441                 .sid = TEGRA186_SID_SDMMC3,
442                 .regs = {
443                         .sid = {
444                                 .override = 0x330,
445                                 .security = 0x334,
446                         },
447                 },
448         }, {
449                 .id = TEGRA186_MEMORY_CLIENT_SDMMCWAB,
450                 .name = "sdmmcwab",
451                 .sid = TEGRA186_SID_SDMMC4,
452                 .regs = {
453                         .sid = {
454                                 .override = 0x338,
455                                 .security = 0x33c,
456                         },
457                 },
458         }, {
459                 .id = TEGRA186_MEMORY_CLIENT_VICSRD,
460                 .name = "vicsrd",
461                 .sid = TEGRA186_SID_VIC,
462                 .regs = {
463                         .sid = {
464                                 .override = 0x360,
465                                 .security = 0x364,
466                         },
467                 },
468         }, {
469                 .id = TEGRA186_MEMORY_CLIENT_VICSWR,
470                 .name = "vicswr",
471                 .sid = TEGRA186_SID_VIC,
472                 .regs = {
473                         .sid = {
474                                 .override = 0x368,
475                                 .security = 0x36c,
476                         },
477                 },
478         }, {
479                 .id = TEGRA186_MEMORY_CLIENT_VIW,
480                 .name = "viw",
481                 .sid = TEGRA186_SID_VI,
482                 .regs = {
483                         .sid = {
484                                 .override = 0x390,
485                                 .security = 0x394,
486                         },
487                 },
488         }, {
489                 .id = TEGRA186_MEMORY_CLIENT_NVDECSRD,
490                 .name = "nvdecsrd",
491                 .sid = TEGRA186_SID_NVDEC,
492                 .regs = {
493                         .sid = {
494                                 .override = 0x3c0,
495                                 .security = 0x3c4,
496                         },
497                 },
498         }, {
499                 .id = TEGRA186_MEMORY_CLIENT_NVDECSWR,
500                 .name = "nvdecswr",
501                 .sid = TEGRA186_SID_NVDEC,
502                 .regs = {
503                         .sid = {
504                                 .override = 0x3c8,
505                                 .security = 0x3cc,
506                         },
507                 },
508         }, {
509                 .id = TEGRA186_MEMORY_CLIENT_APER,
510                 .name = "aper",
511                 .sid = TEGRA186_SID_APE,
512                 .regs = {
513                         .sid = {
514                                 .override = 0x3d0,
515                                 .security = 0x3d4,
516                         },
517                 },
518         }, {
519                 .id = TEGRA186_MEMORY_CLIENT_APEW,
520                 .name = "apew",
521                 .sid = TEGRA186_SID_APE,
522                 .regs = {
523                         .sid = {
524                                 .override = 0x3d8,
525                                 .security = 0x3dc,
526                         },
527                 },
528         }, {
529                 .id = TEGRA186_MEMORY_CLIENT_NVJPGSRD,
530                 .name = "nvjpgsrd",
531                 .sid = TEGRA186_SID_NVJPG,
532                 .regs = {
533                         .sid = {
534                                 .override = 0x3f0,
535                                 .security = 0x3f4,
536                         },
537                 },
538         }, {
539                 .id = TEGRA186_MEMORY_CLIENT_NVJPGSWR,
540                 .name = "nvjpgswr",
541                 .sid = TEGRA186_SID_NVJPG,
542                 .regs = {
543                         .sid = {
544                                 .override = 0x3f8,
545                                 .security = 0x3fc,
546                         },
547                 },
548         }, {
549                 .id = TEGRA186_MEMORY_CLIENT_SESRD,
550                 .name = "sesrd",
551                 .sid = TEGRA186_SID_SE,
552                 .regs = {
553                         .sid = {
554                                 .override = 0x400,
555                                 .security = 0x404,
556                         },
557                 },
558         }, {
559                 .id = TEGRA186_MEMORY_CLIENT_SESWR,
560                 .name = "seswr",
561                 .sid = TEGRA186_SID_SE,
562                 .regs = {
563                         .sid = {
564                                 .override = 0x408,
565                                 .security = 0x40c,
566                         },
567                 },
568         }, {
569                 .id = TEGRA186_MEMORY_CLIENT_ETRR,
570                 .name = "etrr",
571                 .sid = TEGRA186_SID_ETR,
572                 .regs = {
573                         .sid = {
574                                 .override = 0x420,
575                                 .security = 0x424,
576                         },
577                 },
578         }, {
579                 .id = TEGRA186_MEMORY_CLIENT_ETRW,
580                 .name = "etrw",
581                 .sid = TEGRA186_SID_ETR,
582                 .regs = {
583                         .sid = {
584                                 .override = 0x428,
585                                 .security = 0x42c,
586                         },
587                 },
588         }, {
589                 .id = TEGRA186_MEMORY_CLIENT_TSECSRDB,
590                 .name = "tsecsrdb",
591                 .sid = TEGRA186_SID_TSECB,
592                 .regs = {
593                         .sid = {
594                                 .override = 0x430,
595                                 .security = 0x434,
596                         },
597                 },
598         }, {
599                 .id = TEGRA186_MEMORY_CLIENT_TSECSWRB,
600                 .name = "tsecswrb",
601                 .sid = TEGRA186_SID_TSECB,
602                 .regs = {
603                         .sid = {
604                                 .override = 0x438,
605                                 .security = 0x43c,
606                         },
607                 },
608         }, {
609                 .id = TEGRA186_MEMORY_CLIENT_GPUSRD2,
610                 .name = "gpusrd2",
611                 .sid = TEGRA186_SID_GPU,
612                 .regs = {
613                         .sid = {
614                                 .override = 0x440,
615                                 .security = 0x444,
616                         },
617                 },
618         }, {
619                 .id = TEGRA186_MEMORY_CLIENT_GPUSWR2,
620                 .name = "gpuswr2",
621                 .sid = TEGRA186_SID_GPU,
622                 .regs = {
623                         .sid = {
624                                 .override = 0x448,
625                                 .security = 0x44c,
626                         },
627                 },
628         }, {
629                 .id = TEGRA186_MEMORY_CLIENT_AXISR,
630                 .name = "axisr",
631                 .sid = TEGRA186_SID_GPCDMA_0,
632                 .regs = {
633                         .sid = {
634                                 .override = 0x460,
635                                 .security = 0x464,
636                         },
637                 },
638         }, {
639                 .id = TEGRA186_MEMORY_CLIENT_AXISW,
640                 .name = "axisw",
641                 .sid = TEGRA186_SID_GPCDMA_0,
642                 .regs = {
643                         .sid = {
644                                 .override = 0x468,
645                                 .security = 0x46c,
646                         },
647                 },
648         }, {
649                 .id = TEGRA186_MEMORY_CLIENT_EQOSR,
650                 .name = "eqosr",
651                 .sid = TEGRA186_SID_EQOS,
652                 .regs = {
653                         .sid = {
654                                 .override = 0x470,
655                                 .security = 0x474,
656                         },
657                 },
658         }, {
659                 .id = TEGRA186_MEMORY_CLIENT_EQOSW,
660                 .name = "eqosw",
661                 .sid = TEGRA186_SID_EQOS,
662                 .regs = {
663                         .sid = {
664                                 .override = 0x478,
665                                 .security = 0x47c,
666                         },
667                 },
668         }, {
669                 .id = TEGRA186_MEMORY_CLIENT_UFSHCR,
670                 .name = "ufshcr",
671                 .sid = TEGRA186_SID_UFSHC,
672                 .regs = {
673                         .sid = {
674                                 .override = 0x480,
675                                 .security = 0x484,
676                         },
677                 },
678         }, {
679                 .id = TEGRA186_MEMORY_CLIENT_UFSHCW,
680                 .name = "ufshcw",
681                 .sid = TEGRA186_SID_UFSHC,
682                 .regs = {
683                         .sid = {
684                                 .override = 0x488,
685                                 .security = 0x48c,
686                         },
687                 },
688         }, {
689                 .id = TEGRA186_MEMORY_CLIENT_NVDISPLAYR,
690                 .name = "nvdisplayr",
691                 .sid = TEGRA186_SID_NVDISPLAY,
692                 .regs = {
693                         .sid = {
694                                 .override = 0x490,
695                                 .security = 0x494,
696                         },
697                 },
698         }, {
699                 .id = TEGRA186_MEMORY_CLIENT_BPMPR,
700                 .name = "bpmpr",
701                 .sid = TEGRA186_SID_BPMP,
702                 .regs = {
703                         .sid = {
704                                 .override = 0x498,
705                                 .security = 0x49c,
706                         },
707                 },
708         }, {
709                 .id = TEGRA186_MEMORY_CLIENT_BPMPW,
710                 .name = "bpmpw",
711                 .sid = TEGRA186_SID_BPMP,
712                 .regs = {
713                         .sid = {
714                                 .override = 0x4a0,
715                                 .security = 0x4a4,
716                         },
717                 },
718         }, {
719                 .id = TEGRA186_MEMORY_CLIENT_BPMPDMAR,
720                 .name = "bpmpdmar",
721                 .sid = TEGRA186_SID_BPMP,
722                 .regs = {
723                         .sid = {
724                                 .override = 0x4a8,
725                                 .security = 0x4ac,
726                         },
727                 },
728         }, {
729                 .id = TEGRA186_MEMORY_CLIENT_BPMPDMAW,
730                 .name = "bpmpdmaw",
731                 .sid = TEGRA186_SID_BPMP,
732                 .regs = {
733                         .sid = {
734                                 .override = 0x4b0,
735                                 .security = 0x4b4,
736                         },
737                 },
738         }, {
739                 .id = TEGRA186_MEMORY_CLIENT_AONR,
740                 .name = "aonr",
741                 .sid = TEGRA186_SID_AON,
742                 .regs = {
743                         .sid = {
744                                 .override = 0x4b8,
745                                 .security = 0x4bc,
746                         },
747                 },
748         }, {
749                 .id = TEGRA186_MEMORY_CLIENT_AONW,
750                 .name = "aonw",
751                 .sid = TEGRA186_SID_AON,
752                 .regs = {
753                         .sid = {
754                                 .override = 0x4c0,
755                                 .security = 0x4c4,
756                         },
757                 },
758         }, {
759                 .id = TEGRA186_MEMORY_CLIENT_AONDMAR,
760                 .name = "aondmar",
761                 .sid = TEGRA186_SID_AON,
762                 .regs = {
763                         .sid = {
764                                 .override = 0x4c8,
765                                 .security = 0x4cc,
766                         },
767                 },
768         }, {
769                 .id = TEGRA186_MEMORY_CLIENT_AONDMAW,
770                 .name = "aondmaw",
771                 .sid = TEGRA186_SID_AON,
772                 .regs = {
773                         .sid = {
774                                 .override = 0x4d0,
775                                 .security = 0x4d4,
776                         },
777                 },
778         }, {
779                 .id = TEGRA186_MEMORY_CLIENT_SCER,
780                 .name = "scer",
781                 .sid = TEGRA186_SID_SCE,
782                 .regs = {
783                         .sid = {
784                                 .override = 0x4d8,
785                                 .security = 0x4dc,
786                         },
787                 },
788         }, {
789                 .id = TEGRA186_MEMORY_CLIENT_SCEW,
790                 .name = "scew",
791                 .sid = TEGRA186_SID_SCE,
792                 .regs = {
793                         .sid = {
794                                 .override = 0x4e0,
795                                 .security = 0x4e4,
796                         },
797                 },
798         }, {
799                 .id = TEGRA186_MEMORY_CLIENT_SCEDMAR,
800                 .name = "scedmar",
801                 .sid = TEGRA186_SID_SCE,
802                 .regs = {
803                         .sid = {
804                                 .override = 0x4e8,
805                                 .security = 0x4ec,
806                         },
807                 },
808         }, {
809                 .id = TEGRA186_MEMORY_CLIENT_SCEDMAW,
810                 .name = "scedmaw",
811                 .sid = TEGRA186_SID_SCE,
812                 .regs = {
813                         .sid = {
814                                 .override = 0x4f0,
815                                 .security = 0x4f4,
816                         },
817                 },
818         }, {
819                 .id = TEGRA186_MEMORY_CLIENT_APEDMAR,
820                 .name = "apedmar",
821                 .sid = TEGRA186_SID_APE,
822                 .regs = {
823                         .sid = {
824                                 .override = 0x4f8,
825                                 .security = 0x4fc,
826                         },
827                 },
828         }, {
829                 .id = TEGRA186_MEMORY_CLIENT_APEDMAW,
830                 .name = "apedmaw",
831                 .sid = TEGRA186_SID_APE,
832                 .regs = {
833                         .sid = {
834                                 .override = 0x500,
835                                 .security = 0x504,
836                         },
837                 },
838         }, {
839                 .id = TEGRA186_MEMORY_CLIENT_NVDISPLAYR1,
840                 .name = "nvdisplayr1",
841                 .sid = TEGRA186_SID_NVDISPLAY,
842                 .regs = {
843                         .sid = {
844                                 .override = 0x508,
845                                 .security = 0x50c,
846                         },
847                 },
848         }, {
849                 .id = TEGRA186_MEMORY_CLIENT_VICSRD1,
850                 .name = "vicsrd1",
851                 .sid = TEGRA186_SID_VIC,
852                 .regs = {
853                         .sid = {
854                                 .override = 0x510,
855                                 .security = 0x514,
856                         },
857                 },
858         }, {
859                 .id = TEGRA186_MEMORY_CLIENT_NVDECSRD1,
860                 .name = "nvdecsrd1",
861                 .sid = TEGRA186_SID_NVDEC,
862                 .regs = {
863                         .sid = {
864                                 .override = 0x518,
865                                 .security = 0x51c,
866                         },
867                 },
868         },
869 };
870
871 const struct tegra_mc_soc tegra186_mc_soc = {
872         .num_clients = ARRAY_SIZE(tegra186_mc_clients),
873         .clients = tegra186_mc_clients,
874         .num_address_bits = 40,
875         .num_channels = 4,
876         .client_id_mask = 0xff,
877         .intmask = MC_INT_DECERR_GENERALIZED_CARVEOUT | MC_INT_DECERR_MTS |
878                    MC_INT_SECERR_SEC | MC_INT_DECERR_VPR |
879                    MC_INT_SECURITY_VIOLATION | MC_INT_DECERR_EMEM,
880         .ops = &tegra186_mc_ops,
881         .ch_intmask = 0x0000000f,
882         .global_intstatus_channel_shift = 0,
883 };
884 #endif