Merge tag 'kbuild-v5.13' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy...
[linux-2.6-microblaze.git] / drivers / memory / tegra / tegra186.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (C) 2017 NVIDIA CORPORATION.  All rights reserved.
4  */
5
6 #include <linux/io.h>
7 #include <linux/module.h>
8 #include <linux/mod_devicetable.h>
9 #include <linux/of_device.h>
10 #include <linux/platform_device.h>
11
12 #if defined(CONFIG_ARCH_TEGRA_186_SOC)
13 #include <dt-bindings/memory/tegra186-mc.h>
14 #endif
15
16 #if defined(CONFIG_ARCH_TEGRA_194_SOC)
17 #include <dt-bindings/memory/tegra194-mc.h>
18 #endif
19
20 struct tegra186_mc_client {
21         const char *name;
22         unsigned int sid;
23         struct {
24                 unsigned int override;
25                 unsigned int security;
26         } regs;
27 };
28
29 struct tegra186_mc_soc {
30         const struct tegra186_mc_client *clients;
31         unsigned int num_clients;
32 };
33
34 struct tegra186_mc {
35         struct device *dev;
36         void __iomem *regs;
37
38         const struct tegra186_mc_soc *soc;
39 };
40
41 static void tegra186_mc_program_sid(struct tegra186_mc *mc)
42 {
43         unsigned int i;
44
45         for (i = 0; i < mc->soc->num_clients; i++) {
46                 const struct tegra186_mc_client *client = &mc->soc->clients[i];
47                 u32 override, security;
48
49                 override = readl(mc->regs + client->regs.override);
50                 security = readl(mc->regs + client->regs.security);
51
52                 dev_dbg(mc->dev, "client %s: override: %x security: %x\n",
53                         client->name, override, security);
54
55                 dev_dbg(mc->dev, "setting SID %u for %s\n", client->sid,
56                         client->name);
57                 writel(client->sid, mc->regs + client->regs.override);
58
59                 override = readl(mc->regs + client->regs.override);
60                 security = readl(mc->regs + client->regs.security);
61
62                 dev_dbg(mc->dev, "client %s: override: %x security: %x\n",
63                         client->name, override, security);
64         }
65 }
66
67 #if defined(CONFIG_ARCH_TEGRA_186_SOC)
68 static const struct tegra186_mc_client tegra186_mc_clients[] = {
69         {
70                 .name = "ptcr",
71                 .sid = TEGRA186_SID_PASSTHROUGH,
72                 .regs = {
73                         .override = 0x000,
74                         .security = 0x004,
75                 },
76         }, {
77                 .name = "afir",
78                 .sid = TEGRA186_SID_AFI,
79                 .regs = {
80                         .override = 0x070,
81                         .security = 0x074,
82                 },
83         }, {
84                 .name = "hdar",
85                 .sid = TEGRA186_SID_HDA,
86                 .regs = {
87                         .override = 0x0a8,
88                         .security = 0x0ac,
89                 },
90         }, {
91                 .name = "host1xdmar",
92                 .sid = TEGRA186_SID_HOST1X,
93                 .regs = {
94                         .override = 0x0b0,
95                         .security = 0x0b4,
96                 },
97         }, {
98                 .name = "nvencsrd",
99                 .sid = TEGRA186_SID_NVENC,
100                 .regs = {
101                         .override = 0x0e0,
102                         .security = 0x0e4,
103                 },
104         }, {
105                 .name = "satar",
106                 .sid = TEGRA186_SID_SATA,
107                 .regs = {
108                         .override = 0x0f8,
109                         .security = 0x0fc,
110                 },
111         }, {
112                 .name = "mpcorer",
113                 .sid = TEGRA186_SID_PASSTHROUGH,
114                 .regs = {
115                         .override = 0x138,
116                         .security = 0x13c,
117                 },
118         }, {
119                 .name = "nvencswr",
120                 .sid = TEGRA186_SID_NVENC,
121                 .regs = {
122                         .override = 0x158,
123                         .security = 0x15c,
124                 },
125         }, {
126                 .name = "afiw",
127                 .sid = TEGRA186_SID_AFI,
128                 .regs = {
129                         .override = 0x188,
130                         .security = 0x18c,
131                 },
132         }, {
133                 .name = "hdaw",
134                 .sid = TEGRA186_SID_HDA,
135                 .regs = {
136                         .override = 0x1a8,
137                         .security = 0x1ac,
138                 },
139         }, {
140                 .name = "mpcorew",
141                 .sid = TEGRA186_SID_PASSTHROUGH,
142                 .regs = {
143                         .override = 0x1c8,
144                         .security = 0x1cc,
145                 },
146         }, {
147                 .name = "sataw",
148                 .sid = TEGRA186_SID_SATA,
149                 .regs = {
150                         .override = 0x1e8,
151                         .security = 0x1ec,
152                 },
153         }, {
154                 .name = "ispra",
155                 .sid = TEGRA186_SID_ISP,
156                 .regs = {
157                         .override = 0x220,
158                         .security = 0x224,
159                 },
160         }, {
161                 .name = "ispwa",
162                 .sid = TEGRA186_SID_ISP,
163                 .regs = {
164                         .override = 0x230,
165                         .security = 0x234,
166                 },
167         }, {
168                 .name = "ispwb",
169                 .sid = TEGRA186_SID_ISP,
170                 .regs = {
171                         .override = 0x238,
172                         .security = 0x23c,
173                 },
174         }, {
175                 .name = "xusb_hostr",
176                 .sid = TEGRA186_SID_XUSB_HOST,
177                 .regs = {
178                         .override = 0x250,
179                         .security = 0x254,
180                 },
181         }, {
182                 .name = "xusb_hostw",
183                 .sid = TEGRA186_SID_XUSB_HOST,
184                 .regs = {
185                         .override = 0x258,
186                         .security = 0x25c,
187                 },
188         }, {
189                 .name = "xusb_devr",
190                 .sid = TEGRA186_SID_XUSB_DEV,
191                 .regs = {
192                         .override = 0x260,
193                         .security = 0x264,
194                 },
195         }, {
196                 .name = "xusb_devw",
197                 .sid = TEGRA186_SID_XUSB_DEV,
198                 .regs = {
199                         .override = 0x268,
200                         .security = 0x26c,
201                 },
202         }, {
203                 .name = "tsecsrd",
204                 .sid = TEGRA186_SID_TSEC,
205                 .regs = {
206                         .override = 0x2a0,
207                         .security = 0x2a4,
208                 },
209         }, {
210                 .name = "tsecswr",
211                 .sid = TEGRA186_SID_TSEC,
212                 .regs = {
213                         .override = 0x2a8,
214                         .security = 0x2ac,
215                 },
216         }, {
217                 .name = "gpusrd",
218                 .sid = TEGRA186_SID_GPU,
219                 .regs = {
220                         .override = 0x2c0,
221                         .security = 0x2c4,
222                 },
223         }, {
224                 .name = "gpuswr",
225                 .sid = TEGRA186_SID_GPU,
226                 .regs = {
227                         .override = 0x2c8,
228                         .security = 0x2cc,
229                 },
230         }, {
231                 .name = "sdmmcra",
232                 .sid = TEGRA186_SID_SDMMC1,
233                 .regs = {
234                         .override = 0x300,
235                         .security = 0x304,
236                 },
237         }, {
238                 .name = "sdmmcraa",
239                 .sid = TEGRA186_SID_SDMMC2,
240                 .regs = {
241                         .override = 0x308,
242                         .security = 0x30c,
243                 },
244         }, {
245                 .name = "sdmmcr",
246                 .sid = TEGRA186_SID_SDMMC3,
247                 .regs = {
248                         .override = 0x310,
249                         .security = 0x314,
250                 },
251         }, {
252                 .name = "sdmmcrab",
253                 .sid = TEGRA186_SID_SDMMC4,
254                 .regs = {
255                         .override = 0x318,
256                         .security = 0x31c,
257                 },
258         }, {
259                 .name = "sdmmcwa",
260                 .sid = TEGRA186_SID_SDMMC1,
261                 .regs = {
262                         .override = 0x320,
263                         .security = 0x324,
264                 },
265         }, {
266                 .name = "sdmmcwaa",
267                 .sid = TEGRA186_SID_SDMMC2,
268                 .regs = {
269                         .override = 0x328,
270                         .security = 0x32c,
271                 },
272         }, {
273                 .name = "sdmmcw",
274                 .sid = TEGRA186_SID_SDMMC3,
275                 .regs = {
276                         .override = 0x330,
277                         .security = 0x334,
278                 },
279         }, {
280                 .name = "sdmmcwab",
281                 .sid = TEGRA186_SID_SDMMC4,
282                 .regs = {
283                         .override = 0x338,
284                         .security = 0x33c,
285                 },
286         }, {
287                 .name = "vicsrd",
288                 .sid = TEGRA186_SID_VIC,
289                 .regs = {
290                         .override = 0x360,
291                         .security = 0x364,
292                 },
293         }, {
294                 .name = "vicswr",
295                 .sid = TEGRA186_SID_VIC,
296                 .regs = {
297                         .override = 0x368,
298                         .security = 0x36c,
299                 },
300         }, {
301                 .name = "viw",
302                 .sid = TEGRA186_SID_VI,
303                 .regs = {
304                         .override = 0x390,
305                         .security = 0x394,
306                 },
307         }, {
308                 .name = "nvdecsrd",
309                 .sid = TEGRA186_SID_NVDEC,
310                 .regs = {
311                         .override = 0x3c0,
312                         .security = 0x3c4,
313                 },
314         }, {
315                 .name = "nvdecswr",
316                 .sid = TEGRA186_SID_NVDEC,
317                 .regs = {
318                         .override = 0x3c8,
319                         .security = 0x3cc,
320                 },
321         }, {
322                 .name = "aper",
323                 .sid = TEGRA186_SID_APE,
324                 .regs = {
325                         .override = 0x3d0,
326                         .security = 0x3d4,
327                 },
328         }, {
329                 .name = "apew",
330                 .sid = TEGRA186_SID_APE,
331                 .regs = {
332                         .override = 0x3d8,
333                         .security = 0x3dc,
334                 },
335         }, {
336                 .name = "nvjpgsrd",
337                 .sid = TEGRA186_SID_NVJPG,
338                 .regs = {
339                         .override = 0x3f0,
340                         .security = 0x3f4,
341                 },
342         }, {
343                 .name = "nvjpgswr",
344                 .sid = TEGRA186_SID_NVJPG,
345                 .regs = {
346                         .override = 0x3f8,
347                         .security = 0x3fc,
348                 },
349         }, {
350                 .name = "sesrd",
351                 .sid = TEGRA186_SID_SE,
352                 .regs = {
353                         .override = 0x400,
354                         .security = 0x404,
355                 },
356         }, {
357                 .name = "seswr",
358                 .sid = TEGRA186_SID_SE,
359                 .regs = {
360                         .override = 0x408,
361                         .security = 0x40c,
362                 },
363         }, {
364                 .name = "etrr",
365                 .sid = TEGRA186_SID_ETR,
366                 .regs = {
367                         .override = 0x420,
368                         .security = 0x424,
369                 },
370         }, {
371                 .name = "etrw",
372                 .sid = TEGRA186_SID_ETR,
373                 .regs = {
374                         .override = 0x428,
375                         .security = 0x42c,
376                 },
377         }, {
378                 .name = "tsecsrdb",
379                 .sid = TEGRA186_SID_TSECB,
380                 .regs = {
381                         .override = 0x430,
382                         .security = 0x434,
383                 },
384         }, {
385                 .name = "tsecswrb",
386                 .sid = TEGRA186_SID_TSECB,
387                 .regs = {
388                         .override = 0x438,
389                         .security = 0x43c,
390                 },
391         }, {
392                 .name = "gpusrd2",
393                 .sid = TEGRA186_SID_GPU,
394                 .regs = {
395                         .override = 0x440,
396                         .security = 0x444,
397                 },
398         }, {
399                 .name = "gpuswr2",
400                 .sid = TEGRA186_SID_GPU,
401                 .regs = {
402                         .override = 0x448,
403                         .security = 0x44c,
404                 },
405         }, {
406                 .name = "axisr",
407                 .sid = TEGRA186_SID_GPCDMA_0,
408                 .regs = {
409                         .override = 0x460,
410                         .security = 0x464,
411                 },
412         }, {
413                 .name = "axisw",
414                 .sid = TEGRA186_SID_GPCDMA_0,
415                 .regs = {
416                         .override = 0x468,
417                         .security = 0x46c,
418                 },
419         }, {
420                 .name = "eqosr",
421                 .sid = TEGRA186_SID_EQOS,
422                 .regs = {
423                         .override = 0x470,
424                         .security = 0x474,
425                 },
426         }, {
427                 .name = "eqosw",
428                 .sid = TEGRA186_SID_EQOS,
429                 .regs = {
430                         .override = 0x478,
431                         .security = 0x47c,
432                 },
433         }, {
434                 .name = "ufshcr",
435                 .sid = TEGRA186_SID_UFSHC,
436                 .regs = {
437                         .override = 0x480,
438                         .security = 0x484,
439                 },
440         }, {
441                 .name = "ufshcw",
442                 .sid = TEGRA186_SID_UFSHC,
443                 .regs = {
444                         .override = 0x488,
445                         .security = 0x48c,
446                 },
447         }, {
448                 .name = "nvdisplayr",
449                 .sid = TEGRA186_SID_NVDISPLAY,
450                 .regs = {
451                         .override = 0x490,
452                         .security = 0x494,
453                 },
454         }, {
455                 .name = "bpmpr",
456                 .sid = TEGRA186_SID_BPMP,
457                 .regs = {
458                         .override = 0x498,
459                         .security = 0x49c,
460                 },
461         }, {
462                 .name = "bpmpw",
463                 .sid = TEGRA186_SID_BPMP,
464                 .regs = {
465                         .override = 0x4a0,
466                         .security = 0x4a4,
467                 },
468         }, {
469                 .name = "bpmpdmar",
470                 .sid = TEGRA186_SID_BPMP,
471                 .regs = {
472                         .override = 0x4a8,
473                         .security = 0x4ac,
474                 },
475         }, {
476                 .name = "bpmpdmaw",
477                 .sid = TEGRA186_SID_BPMP,
478                 .regs = {
479                         .override = 0x4b0,
480                         .security = 0x4b4,
481                 },
482         }, {
483                 .name = "aonr",
484                 .sid = TEGRA186_SID_AON,
485                 .regs = {
486                         .override = 0x4b8,
487                         .security = 0x4bc,
488                 },
489         }, {
490                 .name = "aonw",
491                 .sid = TEGRA186_SID_AON,
492                 .regs = {
493                         .override = 0x4c0,
494                         .security = 0x4c4,
495                 },
496         }, {
497                 .name = "aondmar",
498                 .sid = TEGRA186_SID_AON,
499                 .regs = {
500                         .override = 0x4c8,
501                         .security = 0x4cc,
502                 },
503         }, {
504                 .name = "aondmaw",
505                 .sid = TEGRA186_SID_AON,
506                 .regs = {
507                         .override = 0x4d0,
508                         .security = 0x4d4,
509                 },
510         }, {
511                 .name = "scer",
512                 .sid = TEGRA186_SID_SCE,
513                 .regs = {
514                         .override = 0x4d8,
515                         .security = 0x4dc,
516                 },
517         }, {
518                 .name = "scew",
519                 .sid = TEGRA186_SID_SCE,
520                 .regs = {
521                         .override = 0x4e0,
522                         .security = 0x4e4,
523                 },
524         }, {
525                 .name = "scedmar",
526                 .sid = TEGRA186_SID_SCE,
527                 .regs = {
528                         .override = 0x4e8,
529                         .security = 0x4ec,
530                 },
531         }, {
532                 .name = "scedmaw",
533                 .sid = TEGRA186_SID_SCE,
534                 .regs = {
535                         .override = 0x4f0,
536                         .security = 0x4f4,
537                 },
538         }, {
539                 .name = "apedmar",
540                 .sid = TEGRA186_SID_APE,
541                 .regs = {
542                         .override = 0x4f8,
543                         .security = 0x4fc,
544                 },
545         }, {
546                 .name = "apedmaw",
547                 .sid = TEGRA186_SID_APE,
548                 .regs = {
549                         .override = 0x500,
550                         .security = 0x504,
551                 },
552         }, {
553                 .name = "nvdisplayr1",
554                 .sid = TEGRA186_SID_NVDISPLAY,
555                 .regs = {
556                         .override = 0x508,
557                         .security = 0x50c,
558                 },
559         }, {
560                 .name = "vicsrd1",
561                 .sid = TEGRA186_SID_VIC,
562                 .regs = {
563                         .override = 0x510,
564                         .security = 0x514,
565                 },
566         }, {
567                 .name = "nvdecsrd1",
568                 .sid = TEGRA186_SID_NVDEC,
569                 .regs = {
570                         .override = 0x518,
571                         .security = 0x51c,
572                 },
573         },
574 };
575
576 static const struct tegra186_mc_soc tegra186_mc_soc = {
577         .num_clients = ARRAY_SIZE(tegra186_mc_clients),
578         .clients = tegra186_mc_clients,
579 };
580 #endif
581
582 #if defined(CONFIG_ARCH_TEGRA_194_SOC)
583 static const struct tegra186_mc_client tegra194_mc_clients[] = {
584         {
585                 .name = "ptcr",
586                 .sid = TEGRA194_SID_PASSTHROUGH,
587                 .regs = {
588                         .override = 0x000,
589                         .security = 0x004,
590                 },
591         }, {
592                 .name = "miu7r",
593                 .sid = TEGRA194_SID_MIU,
594                 .regs = {
595                         .override = 0x008,
596                         .security = 0x00c,
597                 },
598         }, {
599                 .name = "miu7w",
600                 .sid = TEGRA194_SID_MIU,
601                 .regs = {
602                         .override = 0x010,
603                         .security = 0x014,
604                 },
605         }, {
606                 .name = "hdar",
607                 .sid = TEGRA194_SID_HDA,
608                 .regs = {
609                         .override = 0x0a8,
610                         .security = 0x0ac,
611                 },
612         }, {
613                 .name = "host1xdmar",
614                 .sid = TEGRA194_SID_HOST1X,
615                 .regs = {
616                         .override = 0x0b0,
617                         .security = 0x0b4,
618                 },
619         }, {
620                 .name = "nvencsrd",
621                 .sid = TEGRA194_SID_NVENC,
622                 .regs = {
623                         .override = 0x0e0,
624                         .security = 0x0e4,
625                 },
626         }, {
627                 .name = "satar",
628                 .sid = TEGRA194_SID_SATA,
629                 .regs = {
630                         .override = 0x0f8,
631                         .security = 0x0fc,
632                 },
633         }, {
634                 .name = "mpcorer",
635                 .sid = TEGRA194_SID_PASSTHROUGH,
636                 .regs = {
637                         .override = 0x138,
638                         .security = 0x13c,
639                 },
640         }, {
641                 .name = "nvencswr",
642                 .sid = TEGRA194_SID_NVENC,
643                 .regs = {
644                         .override = 0x158,
645                         .security = 0x15c,
646                 },
647         }, {
648                 .name = "hdaw",
649                 .sid = TEGRA194_SID_HDA,
650                 .regs = {
651                         .override = 0x1a8,
652                         .security = 0x1ac,
653                 },
654         }, {
655                 .name = "mpcorew",
656                 .sid = TEGRA194_SID_PASSTHROUGH,
657                 .regs = {
658                         .override = 0x1c8,
659                         .security = 0x1cc,
660                 },
661         }, {
662                 .name = "sataw",
663                 .sid = TEGRA194_SID_SATA,
664                 .regs = {
665                         .override = 0x1e8,
666                         .security = 0x1ec,
667                 },
668         }, {
669                 .name = "ispra",
670                 .sid = TEGRA194_SID_ISP,
671                 .regs = {
672                         .override = 0x220,
673                         .security = 0x224,
674                 },
675         }, {
676                 .name = "ispfalr",
677                 .sid = TEGRA194_SID_ISP_FALCON,
678                 .regs = {
679                         .override = 0x228,
680                         .security = 0x22c,
681                 },
682         }, {
683                 .name = "ispwa",
684                 .sid = TEGRA194_SID_ISP,
685                 .regs = {
686                         .override = 0x230,
687                         .security = 0x234,
688                 },
689         }, {
690                 .name = "ispwb",
691                 .sid = TEGRA194_SID_ISP,
692                 .regs = {
693                         .override = 0x238,
694                         .security = 0x23c,
695                 },
696         }, {
697                 .name = "xusb_hostr",
698                 .sid = TEGRA194_SID_XUSB_HOST,
699                 .regs = {
700                         .override = 0x250,
701                         .security = 0x254,
702                 },
703         }, {
704                 .name = "xusb_hostw",
705                 .sid = TEGRA194_SID_XUSB_HOST,
706                 .regs = {
707                         .override = 0x258,
708                         .security = 0x25c,
709                 },
710         }, {
711                 .name = "xusb_devr",
712                 .sid = TEGRA194_SID_XUSB_DEV,
713                 .regs = {
714                         .override = 0x260,
715                         .security = 0x264,
716                 },
717         }, {
718                 .name = "xusb_devw",
719                 .sid = TEGRA194_SID_XUSB_DEV,
720                 .regs = {
721                         .override = 0x268,
722                         .security = 0x26c,
723                 },
724         }, {
725                 .name = "sdmmcra",
726                 .sid = TEGRA194_SID_SDMMC1,
727                 .regs = {
728                         .override = 0x300,
729                         .security = 0x304,
730                 },
731         }, {
732                 .name = "sdmmcr",
733                 .sid = TEGRA194_SID_SDMMC3,
734                 .regs = {
735                         .override = 0x310,
736                         .security = 0x314,
737                 },
738         }, {
739                 .name = "sdmmcrab",
740                 .sid = TEGRA194_SID_SDMMC4,
741                 .regs = {
742                         .override = 0x318,
743                         .security = 0x31c,
744                 },
745         }, {
746                 .name = "sdmmcwa",
747                 .sid = TEGRA194_SID_SDMMC1,
748                 .regs = {
749                         .override = 0x320,
750                         .security = 0x324,
751                 },
752         }, {
753                 .name = "sdmmcw",
754                 .sid = TEGRA194_SID_SDMMC3,
755                 .regs = {
756                         .override = 0x330,
757                         .security = 0x334,
758                 },
759         }, {
760                 .name = "sdmmcwab",
761                 .sid = TEGRA194_SID_SDMMC4,
762                 .regs = {
763                         .override = 0x338,
764                         .security = 0x33c,
765                 },
766         }, {
767                 .name = "vicsrd",
768                 .sid = TEGRA194_SID_VIC,
769                 .regs = {
770                         .override = 0x360,
771                         .security = 0x364,
772                 },
773         }, {
774                 .name = "vicswr",
775                 .sid = TEGRA194_SID_VIC,
776                 .regs = {
777                         .override = 0x368,
778                         .security = 0x36c,
779                 },
780         }, {
781                 .name = "viw",
782                 .sid = TEGRA194_SID_VI,
783                 .regs = {
784                         .override = 0x390,
785                         .security = 0x394,
786                 },
787         }, {
788                 .name = "nvdecsrd",
789                 .sid = TEGRA194_SID_NVDEC,
790                 .regs = {
791                         .override = 0x3c0,
792                         .security = 0x3c4,
793                 },
794         }, {
795                 .name = "nvdecswr",
796                 .sid = TEGRA194_SID_NVDEC,
797                 .regs = {
798                         .override = 0x3c8,
799                         .security = 0x3cc,
800                 },
801         }, {
802                 .name = "aper",
803                 .sid = TEGRA194_SID_APE,
804                 .regs = {
805                         .override = 0x3c0,
806                         .security = 0x3c4,
807                 },
808         }, {
809                 .name = "apew",
810                 .sid = TEGRA194_SID_APE,
811                 .regs = {
812                         .override = 0x3d0,
813                         .security = 0x3d4,
814                 },
815         }, {
816                 .name = "nvjpgsrd",
817                 .sid = TEGRA194_SID_NVJPG,
818                 .regs = {
819                         .override = 0x3f0,
820                         .security = 0x3f4,
821                 },
822         }, {
823                 .name = "nvjpgswr",
824                 .sid = TEGRA194_SID_NVJPG,
825                 .regs = {
826                         .override = 0x3f0,
827                         .security = 0x3f4,
828                 },
829         }, {
830                 .name = "axiapr",
831                 .sid = TEGRA194_SID_PASSTHROUGH,
832                 .regs = {
833                         .override = 0x410,
834                         .security = 0x414,
835                 },
836         }, {
837                 .name = "axiapw",
838                 .sid = TEGRA194_SID_PASSTHROUGH,
839                 .regs = {
840                         .override = 0x418,
841                         .security = 0x41c,
842                 },
843         }, {
844                 .name = "etrr",
845                 .sid = TEGRA194_SID_ETR,
846                 .regs = {
847                         .override = 0x420,
848                         .security = 0x424,
849                 },
850         }, {
851                 .name = "etrw",
852                 .sid = TEGRA194_SID_ETR,
853                 .regs = {
854                         .override = 0x428,
855                         .security = 0x42c,
856                 },
857         }, {
858                 .name = "axisr",
859                 .sid = TEGRA194_SID_PASSTHROUGH,
860                 .regs = {
861                         .override = 0x460,
862                         .security = 0x464,
863                 },
864         }, {
865                 .name = "axisw",
866                 .sid = TEGRA194_SID_PASSTHROUGH,
867                 .regs = {
868                         .override = 0x468,
869                         .security = 0x46c,
870                 },
871         }, {
872                 .name = "eqosr",
873                 .sid = TEGRA194_SID_EQOS,
874                 .regs = {
875                         .override = 0x470,
876                         .security = 0x474,
877                 },
878         }, {
879                 .name = "eqosw",
880                 .sid = TEGRA194_SID_EQOS,
881                 .regs = {
882                         .override = 0x478,
883                         .security = 0x47c,
884                 },
885         }, {
886                 .name = "ufshcr",
887                 .sid = TEGRA194_SID_UFSHC,
888                 .regs = {
889                         .override = 0x480,
890                         .security = 0x484,
891                 },
892         }, {
893                 .name = "ufshcw",
894                 .sid = TEGRA194_SID_UFSHC,
895                 .regs = {
896                         .override = 0x488,
897                         .security = 0x48c,
898                 },
899         }, {
900                 .name = "nvdisplayr",
901                 .sid = TEGRA194_SID_NVDISPLAY,
902                 .regs = {
903                         .override = 0x490,
904                         .security = 0x494,
905                 },
906         }, {
907                 .name = "bpmpr",
908                 .sid = TEGRA194_SID_BPMP,
909                 .regs = {
910                         .override = 0x498,
911                         .security = 0x49c,
912                 },
913         }, {
914                 .name = "bpmpw",
915                 .sid = TEGRA194_SID_BPMP,
916                 .regs = {
917                         .override = 0x4a0,
918                         .security = 0x4a4,
919                 },
920         }, {
921                 .name = "bpmpdmar",
922                 .sid = TEGRA194_SID_BPMP,
923                 .regs = {
924                         .override = 0x4a8,
925                         .security = 0x4ac,
926                 },
927         }, {
928                 .name = "bpmpdmaw",
929                 .sid = TEGRA194_SID_BPMP,
930                 .regs = {
931                         .override = 0x4b0,
932                         .security = 0x4b4,
933                 },
934         }, {
935                 .name = "aonr",
936                 .sid = TEGRA194_SID_AON,
937                 .regs = {
938                         .override = 0x4b8,
939                         .security = 0x4bc,
940                 },
941         }, {
942                 .name = "aonw",
943                 .sid = TEGRA194_SID_AON,
944                 .regs = {
945                         .override = 0x4c0,
946                         .security = 0x4c4,
947                 },
948         }, {
949                 .name = "aondmar",
950                 .sid = TEGRA194_SID_AON,
951                 .regs = {
952                         .override = 0x4c8,
953                         .security = 0x4cc,
954                 },
955         }, {
956                 .name = "aondmaw",
957                 .sid = TEGRA194_SID_AON,
958                 .regs = {
959                         .override = 0x4d0,
960                         .security = 0x4d4,
961                 },
962         }, {
963                 .name = "scer",
964                 .sid = TEGRA194_SID_SCE,
965                 .regs = {
966                         .override = 0x4d8,
967                         .security = 0x4dc,
968                 },
969         }, {
970                 .name = "scew",
971                 .sid = TEGRA194_SID_SCE,
972                 .regs = {
973                         .override = 0x4e0,
974                         .security = 0x4e4,
975                 },
976         }, {
977                 .name = "scedmar",
978                 .sid = TEGRA194_SID_SCE,
979                 .regs = {
980                         .override = 0x4e8,
981                         .security = 0x4ec,
982                 },
983         }, {
984                 .name = "scedmaw",
985                 .sid = TEGRA194_SID_SCE,
986                 .regs = {
987                         .override = 0x4f0,
988                         .security = 0x4f4,
989                 },
990         }, {
991                 .name = "apedmar",
992                 .sid = TEGRA194_SID_APE,
993                 .regs = {
994                         .override = 0x4f8,
995                         .security = 0x4fc,
996                 },
997         }, {
998                 .name = "apedmaw",
999                 .sid = TEGRA194_SID_APE,
1000                 .regs = {
1001                         .override = 0x500,
1002                         .security = 0x504,
1003                 },
1004         }, {
1005                 .name = "nvdisplayr1",
1006                 .sid = TEGRA194_SID_NVDISPLAY,
1007                 .regs = {
1008                         .override = 0x508,
1009                         .security = 0x50c,
1010                 },
1011         }, {
1012                 .name = "vicsrd1",
1013                 .sid = TEGRA194_SID_VIC,
1014                 .regs = {
1015                         .override = 0x510,
1016                         .security = 0x514,
1017                 },
1018         }, {
1019                 .name = "nvdecsrd1",
1020                 .sid = TEGRA194_SID_NVDEC,
1021                 .regs = {
1022                         .override = 0x518,
1023                         .security = 0x51c,
1024                 },
1025         }, {
1026                 .name = "miu0r",
1027                 .sid = TEGRA194_SID_MIU,
1028                 .regs = {
1029                         .override = 0x530,
1030                         .security = 0x534,
1031                 },
1032         }, {
1033                 .name = "miu0w",
1034                 .sid = TEGRA194_SID_MIU,
1035                 .regs = {
1036                         .override = 0x538,
1037                         .security = 0x53c,
1038                 },
1039         }, {
1040                 .name = "miu1r",
1041                 .sid = TEGRA194_SID_MIU,
1042                 .regs = {
1043                         .override = 0x540,
1044                         .security = 0x544,
1045                 },
1046         }, {
1047                 .name = "miu1w",
1048                 .sid = TEGRA194_SID_MIU,
1049                 .regs = {
1050                         .override = 0x548,
1051                         .security = 0x54c,
1052                 },
1053         }, {
1054                 .name = "miu2r",
1055                 .sid = TEGRA194_SID_MIU,
1056                 .regs = {
1057                         .override = 0x570,
1058                         .security = 0x574,
1059                 },
1060         }, {
1061                 .name = "miu2w",
1062                 .sid = TEGRA194_SID_MIU,
1063                 .regs = {
1064                         .override = 0x578,
1065                         .security = 0x57c,
1066                 },
1067         }, {
1068                 .name = "miu3r",
1069                 .sid = TEGRA194_SID_MIU,
1070                 .regs = {
1071                         .override = 0x580,
1072                         .security = 0x584,
1073                 },
1074         }, {
1075                 .name = "miu3w",
1076                 .sid = TEGRA194_SID_MIU,
1077                 .regs = {
1078                         .override = 0x588,
1079                         .security = 0x58c,
1080                 },
1081         }, {
1082                 .name = "miu4r",
1083                 .sid = TEGRA194_SID_MIU,
1084                 .regs = {
1085                         .override = 0x590,
1086                         .security = 0x594,
1087                 },
1088         }, {
1089                 .name = "miu4w",
1090                 .sid = TEGRA194_SID_MIU,
1091                 .regs = {
1092                         .override = 0x598,
1093                         .security = 0x59c,
1094                 },
1095         }, {
1096                 .name = "dpmur",
1097                 .sid = TEGRA194_SID_PASSTHROUGH,
1098                 .regs = {
1099                         .override = 0x598,
1100                         .security = 0x59c,
1101                 },
1102         }, {
1103                 .name = "vifalr",
1104                 .sid = TEGRA194_SID_VI_FALCON,
1105                 .regs = {
1106                         .override = 0x5e0,
1107                         .security = 0x5e4,
1108                 },
1109         }, {
1110                 .name = "vifalw",
1111                 .sid = TEGRA194_SID_VI_FALCON,
1112                 .regs = {
1113                         .override = 0x5e8,
1114                         .security = 0x5ec,
1115                 },
1116         }, {
1117                 .name = "dla0rda",
1118                 .sid = TEGRA194_SID_NVDLA0,
1119                 .regs = {
1120                         .override = 0x5f0,
1121                         .security = 0x5f4,
1122                 },
1123         }, {
1124                 .name = "dla0falrdb",
1125                 .sid = TEGRA194_SID_NVDLA0,
1126                 .regs = {
1127                         .override = 0x5f8,
1128                         .security = 0x5fc,
1129                 },
1130         }, {
1131                 .name = "dla0wra",
1132                 .sid = TEGRA194_SID_NVDLA0,
1133                 .regs = {
1134                         .override = 0x600,
1135                         .security = 0x604,
1136                 },
1137         }, {
1138                 .name = "dla0falwrb",
1139                 .sid = TEGRA194_SID_NVDLA0,
1140                 .regs = {
1141                         .override = 0x608,
1142                         .security = 0x60c,
1143                 },
1144         }, {
1145                 .name = "dla1rda",
1146                 .sid = TEGRA194_SID_NVDLA1,
1147                 .regs = {
1148                         .override = 0x610,
1149                         .security = 0x614,
1150                 },
1151         }, {
1152                 .name = "dla1falrdb",
1153                 .sid = TEGRA194_SID_NVDLA1,
1154                 .regs = {
1155                         .override = 0x618,
1156                         .security = 0x61c,
1157                 },
1158         }, {
1159                 .name = "dla1wra",
1160                 .sid = TEGRA194_SID_NVDLA1,
1161                 .regs = {
1162                         .override = 0x620,
1163                         .security = 0x624,
1164                 },
1165         }, {
1166                 .name = "dla1falwrb",
1167                 .sid = TEGRA194_SID_NVDLA1,
1168                 .regs = {
1169                         .override = 0x628,
1170                         .security = 0x62c,
1171                 },
1172         }, {
1173                 .name = "pva0rda",
1174                 .sid = TEGRA194_SID_PVA0,
1175                 .regs = {
1176                         .override = 0x630,
1177                         .security = 0x634,
1178                 },
1179         }, {
1180                 .name = "pva0rdb",
1181                 .sid = TEGRA194_SID_PVA0,
1182                 .regs = {
1183                         .override = 0x638,
1184                         .security = 0x63c,
1185                 },
1186         }, {
1187                 .name = "pva0rdc",
1188                 .sid = TEGRA194_SID_PVA0,
1189                 .regs = {
1190                         .override = 0x640,
1191                         .security = 0x644,
1192                 },
1193         }, {
1194                 .name = "pva0wra",
1195                 .sid = TEGRA194_SID_PVA0,
1196                 .regs = {
1197                         .override = 0x648,
1198                         .security = 0x64c,
1199                 },
1200         }, {
1201                 .name = "pva0wrb",
1202                 .sid = TEGRA194_SID_PVA0,
1203                 .regs = {
1204                         .override = 0x650,
1205                         .security = 0x654,
1206                 },
1207         }, {
1208                 .name = "pva0wrc",
1209                 .sid = TEGRA194_SID_PVA0,
1210                 .regs = {
1211                         .override = 0x658,
1212                         .security = 0x65c,
1213                 },
1214         }, {
1215                 .name = "pva1rda",
1216                 .sid = TEGRA194_SID_PVA1,
1217                 .regs = {
1218                         .override = 0x660,
1219                         .security = 0x664,
1220                 },
1221         }, {
1222                 .name = "pva1rdb",
1223                 .sid = TEGRA194_SID_PVA1,
1224                 .regs = {
1225                         .override = 0x668,
1226                         .security = 0x66c,
1227                 },
1228         }, {
1229                 .name = "pva1rdc",
1230                 .sid = TEGRA194_SID_PVA1,
1231                 .regs = {
1232                         .override = 0x670,
1233                         .security = 0x674,
1234                 },
1235         }, {
1236                 .name = "pva1wra",
1237                 .sid = TEGRA194_SID_PVA1,
1238                 .regs = {
1239                         .override = 0x678,
1240                         .security = 0x67c,
1241                 },
1242         }, {
1243                 .name = "pva1wrb",
1244                 .sid = TEGRA194_SID_PVA1,
1245                 .regs = {
1246                         .override = 0x680,
1247                         .security = 0x684,
1248                 },
1249         }, {
1250                 .name = "pva1wrc",
1251                 .sid = TEGRA194_SID_PVA1,
1252                 .regs = {
1253                         .override = 0x688,
1254                         .security = 0x68c,
1255                 },
1256         }, {
1257                 .name = "rcer",
1258                 .sid = TEGRA194_SID_RCE,
1259                 .regs = {
1260                         .override = 0x690,
1261                         .security = 0x694,
1262                 },
1263         }, {
1264                 .name = "rcew",
1265                 .sid = TEGRA194_SID_RCE,
1266                 .regs = {
1267                         .override = 0x698,
1268                         .security = 0x69c,
1269                 },
1270         }, {
1271                 .name = "rcedmar",
1272                 .sid = TEGRA194_SID_RCE,
1273                 .regs = {
1274                         .override = 0x6a0,
1275                         .security = 0x6a4,
1276                 },
1277         }, {
1278                 .name = "rcedmaw",
1279                 .sid = TEGRA194_SID_RCE,
1280                 .regs = {
1281                         .override = 0x6a8,
1282                         .security = 0x6ac,
1283                 },
1284         }, {
1285                 .name = "nvenc1srd",
1286                 .sid = TEGRA194_SID_NVENC1,
1287                 .regs = {
1288                         .override = 0x6b0,
1289                         .security = 0x6b4,
1290                 },
1291         }, {
1292                 .name = "nvenc1swr",
1293                 .sid = TEGRA194_SID_NVENC1,
1294                 .regs = {
1295                         .override = 0x6b8,
1296                         .security = 0x6bc,
1297                 },
1298         }, {
1299                 .name = "pcie0r",
1300                 .sid = TEGRA194_SID_PCIE0,
1301                 .regs = {
1302                         .override = 0x6c0,
1303                         .security = 0x6c4,
1304                 },
1305         }, {
1306                 .name = "pcie0w",
1307                 .sid = TEGRA194_SID_PCIE0,
1308                 .regs = {
1309                         .override = 0x6c8,
1310                         .security = 0x6cc,
1311                 },
1312         }, {
1313                 .name = "pcie1r",
1314                 .sid = TEGRA194_SID_PCIE1,
1315                 .regs = {
1316                         .override = 0x6d0,
1317                         .security = 0x6d4,
1318                 },
1319         }, {
1320                 .name = "pcie1w",
1321                 .sid = TEGRA194_SID_PCIE1,
1322                 .regs = {
1323                         .override = 0x6d8,
1324                         .security = 0x6dc,
1325                 },
1326         }, {
1327                 .name = "pcie2ar",
1328                 .sid = TEGRA194_SID_PCIE2,
1329                 .regs = {
1330                         .override = 0x6e0,
1331                         .security = 0x6e4,
1332                 },
1333         }, {
1334                 .name = "pcie2aw",
1335                 .sid = TEGRA194_SID_PCIE2,
1336                 .regs = {
1337                         .override = 0x6e8,
1338                         .security = 0x6ec,
1339                 },
1340         }, {
1341                 .name = "pcie3r",
1342                 .sid = TEGRA194_SID_PCIE3,
1343                 .regs = {
1344                         .override = 0x6f0,
1345                         .security = 0x6f4,
1346                 },
1347         }, {
1348                 .name = "pcie3w",
1349                 .sid = TEGRA194_SID_PCIE3,
1350                 .regs = {
1351                         .override = 0x6f8,
1352                         .security = 0x6fc,
1353                 },
1354         }, {
1355                 .name = "pcie4r",
1356                 .sid = TEGRA194_SID_PCIE4,
1357                 .regs = {
1358                         .override = 0x700,
1359                         .security = 0x704,
1360                 },
1361         }, {
1362                 .name = "pcie4w",
1363                 .sid = TEGRA194_SID_PCIE4,
1364                 .regs = {
1365                         .override = 0x708,
1366                         .security = 0x70c,
1367                 },
1368         }, {
1369                 .name = "pcie5r",
1370                 .sid = TEGRA194_SID_PCIE5,
1371                 .regs = {
1372                         .override = 0x710,
1373                         .security = 0x714,
1374                 },
1375         }, {
1376                 .name = "pcie5w",
1377                 .sid = TEGRA194_SID_PCIE5,
1378                 .regs = {
1379                         .override = 0x718,
1380                         .security = 0x71c,
1381                 },
1382         }, {
1383                 .name = "ispfalw",
1384                 .sid = TEGRA194_SID_ISP_FALCON,
1385                 .regs = {
1386                         .override = 0x720,
1387                         .security = 0x724,
1388                 },
1389         }, {
1390                 .name = "dla0rda1",
1391                 .sid = TEGRA194_SID_NVDLA0,
1392                 .regs = {
1393                         .override = 0x748,
1394                         .security = 0x74c,
1395                 },
1396         }, {
1397                 .name = "dla1rda1",
1398                 .sid = TEGRA194_SID_NVDLA1,
1399                 .regs = {
1400                         .override = 0x750,
1401                         .security = 0x754,
1402                 },
1403         }, {
1404                 .name = "pva0rda1",
1405                 .sid = TEGRA194_SID_PVA0,
1406                 .regs = {
1407                         .override = 0x758,
1408                         .security = 0x75c,
1409                 },
1410         }, {
1411                 .name = "pva0rdb1",
1412                 .sid = TEGRA194_SID_PVA0,
1413                 .regs = {
1414                         .override = 0x760,
1415                         .security = 0x764,
1416                 },
1417         }, {
1418                 .name = "pva1rda1",
1419                 .sid = TEGRA194_SID_PVA1,
1420                 .regs = {
1421                         .override = 0x768,
1422                         .security = 0x76c,
1423                 },
1424         }, {
1425                 .name = "pva1rdb1",
1426                 .sid = TEGRA194_SID_PVA1,
1427                 .regs = {
1428                         .override = 0x770,
1429                         .security = 0x774,
1430                 },
1431         }, {
1432                 .name = "pcie5r1",
1433                 .sid = TEGRA194_SID_PCIE5,
1434                 .regs = {
1435                         .override = 0x778,
1436                         .security = 0x77c,
1437                 },
1438         }, {
1439                 .name = "nvencsrd1",
1440                 .sid = TEGRA194_SID_NVENC,
1441                 .regs = {
1442                         .override = 0x780,
1443                         .security = 0x784,
1444                 },
1445         }, {
1446                 .name = "nvenc1srd1",
1447                 .sid = TEGRA194_SID_NVENC1,
1448                 .regs = {
1449                         .override = 0x788,
1450                         .security = 0x78c,
1451                 },
1452         }, {
1453                 .name = "ispra1",
1454                 .sid = TEGRA194_SID_ISP,
1455                 .regs = {
1456                         .override = 0x790,
1457                         .security = 0x794,
1458                 },
1459         }, {
1460                 .name = "pcie0r1",
1461                 .sid = TEGRA194_SID_PCIE0,
1462                 .regs = {
1463                         .override = 0x798,
1464                         .security = 0x79c,
1465                 },
1466         }, {
1467                 .name = "nvdec1srd",
1468                 .sid = TEGRA194_SID_NVDEC1,
1469                 .regs = {
1470                         .override = 0x7c8,
1471                         .security = 0x7cc,
1472                 },
1473         }, {
1474                 .name = "nvdec1srd1",
1475                 .sid = TEGRA194_SID_NVDEC1,
1476                 .regs = {
1477                         .override = 0x7d0,
1478                         .security = 0x7d4,
1479                 },
1480         }, {
1481                 .name = "nvdec1swr",
1482                 .sid = TEGRA194_SID_NVDEC1,
1483                 .regs = {
1484                         .override = 0x7d8,
1485                         .security = 0x7dc,
1486                 },
1487         }, {
1488                 .name = "miu5r",
1489                 .sid = TEGRA194_SID_MIU,
1490                 .regs = {
1491                         .override = 0x7e0,
1492                         .security = 0x7e4,
1493                 },
1494         }, {
1495                 .name = "miu5w",
1496                 .sid = TEGRA194_SID_MIU,
1497                 .regs = {
1498                         .override = 0x7e8,
1499                         .security = 0x7ec,
1500                 },
1501         }, {
1502                 .name = "miu6r",
1503                 .sid = TEGRA194_SID_MIU,
1504                 .regs = {
1505                         .override = 0x7f0,
1506                         .security = 0x7f4,
1507                 },
1508         }, {
1509                 .name = "miu6w",
1510                 .sid = TEGRA194_SID_MIU,
1511                 .regs = {
1512                         .override = 0x7f8,
1513                         .security = 0x7fc,
1514                 },
1515         },
1516 };
1517
1518 static const struct tegra186_mc_soc tegra194_mc_soc = {
1519         .num_clients = ARRAY_SIZE(tegra194_mc_clients),
1520         .clients = tegra194_mc_clients,
1521 };
1522 #endif
1523
1524 static int tegra186_mc_probe(struct platform_device *pdev)
1525 {
1526         struct tegra186_mc *mc;
1527         struct resource *res;
1528         int err;
1529
1530         mc = devm_kzalloc(&pdev->dev, sizeof(*mc), GFP_KERNEL);
1531         if (!mc)
1532                 return -ENOMEM;
1533
1534         mc->soc = of_device_get_match_data(&pdev->dev);
1535
1536         res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1537         mc->regs = devm_ioremap_resource(&pdev->dev, res);
1538         if (IS_ERR(mc->regs))
1539                 return PTR_ERR(mc->regs);
1540
1541         mc->dev = &pdev->dev;
1542
1543         err = of_platform_populate(pdev->dev.of_node, NULL, NULL, &pdev->dev);
1544         if (err < 0)
1545                 return err;
1546
1547         platform_set_drvdata(pdev, mc);
1548         tegra186_mc_program_sid(mc);
1549
1550         return 0;
1551 }
1552
1553 static int tegra186_mc_remove(struct platform_device *pdev)
1554 {
1555         struct tegra186_mc *mc = platform_get_drvdata(pdev);
1556
1557         of_platform_depopulate(mc->dev);
1558
1559         return 0;
1560 }
1561
1562 static const struct of_device_id tegra186_mc_of_match[] = {
1563 #if defined(CONFIG_ARCH_TEGRA_186_SOC)
1564         { .compatible = "nvidia,tegra186-mc", .data = &tegra186_mc_soc },
1565 #endif
1566 #if defined(CONFIG_ARCH_TEGRA_194_SOC)
1567         { .compatible = "nvidia,tegra194-mc", .data = &tegra194_mc_soc },
1568 #endif
1569         { /* sentinel */ }
1570 };
1571 MODULE_DEVICE_TABLE(of, tegra186_mc_of_match);
1572
1573 static int __maybe_unused tegra186_mc_suspend(struct device *dev)
1574 {
1575         return 0;
1576 }
1577
1578 static int __maybe_unused tegra186_mc_resume(struct device *dev)
1579 {
1580         struct tegra186_mc *mc = dev_get_drvdata(dev);
1581
1582         tegra186_mc_program_sid(mc);
1583
1584         return 0;
1585 }
1586
1587 static const struct dev_pm_ops tegra186_mc_pm_ops = {
1588         SET_SYSTEM_SLEEP_PM_OPS(tegra186_mc_suspend, tegra186_mc_resume)
1589 };
1590
1591 static struct platform_driver tegra186_mc_driver = {
1592         .driver = {
1593                 .name = "tegra186-mc",
1594                 .of_match_table = tegra186_mc_of_match,
1595                 .pm = &tegra186_mc_pm_ops,
1596                 .suppress_bind_attrs = true,
1597         },
1598         .probe = tegra186_mc_probe,
1599         .remove = tegra186_mc_remove,
1600 };
1601 module_platform_driver(tegra186_mc_driver);
1602
1603 MODULE_AUTHOR("Thierry Reding <treding@nvidia.com>");
1604 MODULE_DESCRIPTION("NVIDIA Tegra186 Memory Controller driver");
1605 MODULE_LICENSE("GPL v2");