1d2912cb1SThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only
289184651SThierry Reding /*
389184651SThierry Reding * Copyright (C) 2014 NVIDIA CORPORATION. All rights reserved.
489184651SThierry Reding */
589184651SThierry Reding
689184651SThierry Reding #include <linux/of.h>
7*0b483871SRob Herring #include <linux/device.h>
8380def2dSDmitry Osipenko #include <linux/slab.h>
989184651SThierry Reding
1089184651SThierry Reding #include <dt-bindings/memory/tegra124-mc.h>
1189184651SThierry Reding
1289184651SThierry Reding #include "mc.h"
1389184651SThierry Reding
1489184651SThierry Reding static const struct tegra_mc_client tegra124_mc_clients[] = {
1589184651SThierry Reding {
1689184651SThierry Reding .id = 0x00,
1789184651SThierry Reding .name = "ptcr",
1889184651SThierry Reding .swgroup = TEGRA_SWGROUP_PTC,
194f1ac76eSThierry Reding .regs = {
20d5ecac0aSDmitry Osipenko .la = {
21d5ecac0aSDmitry Osipenko .reg = 0x34c,
22d5ecac0aSDmitry Osipenko .shift = 0,
23d5ecac0aSDmitry Osipenko .mask = 0xff,
24d5ecac0aSDmitry Osipenko .def = 0x0,
25d5ecac0aSDmitry Osipenko },
264f1ac76eSThierry Reding },
2789184651SThierry Reding }, {
2889184651SThierry Reding .id = 0x01,
2989184651SThierry Reding .name = "display0a",
3089184651SThierry Reding .swgroup = TEGRA_SWGROUP_DC,
314f1ac76eSThierry Reding .regs = {
3289184651SThierry Reding .smmu = {
3389184651SThierry Reding .reg = 0x228,
3489184651SThierry Reding .bit = 1,
3589184651SThierry Reding },
3689184651SThierry Reding .la = {
3789184651SThierry Reding .reg = 0x2e8,
3889184651SThierry Reding .shift = 0,
3989184651SThierry Reding .mask = 0xff,
4089184651SThierry Reding .def = 0xc2,
4189184651SThierry Reding },
424f1ac76eSThierry Reding },
4389184651SThierry Reding }, {
4489184651SThierry Reding .id = 0x02,
4589184651SThierry Reding .name = "display0ab",
4689184651SThierry Reding .swgroup = TEGRA_SWGROUP_DCB,
474f1ac76eSThierry Reding .regs = {
4889184651SThierry Reding .smmu = {
4989184651SThierry Reding .reg = 0x228,
5089184651SThierry Reding .bit = 2,
5189184651SThierry Reding },
5289184651SThierry Reding .la = {
5389184651SThierry Reding .reg = 0x2f4,
5489184651SThierry Reding .shift = 0,
5589184651SThierry Reding .mask = 0xff,
5689184651SThierry Reding .def = 0xc6,
5789184651SThierry Reding },
584f1ac76eSThierry Reding },
5989184651SThierry Reding }, {
6089184651SThierry Reding .id = 0x03,
6189184651SThierry Reding .name = "display0b",
6289184651SThierry Reding .swgroup = TEGRA_SWGROUP_DC,
634f1ac76eSThierry Reding .regs = {
6489184651SThierry Reding .smmu = {
6589184651SThierry Reding .reg = 0x228,
6689184651SThierry Reding .bit = 3,
6789184651SThierry Reding },
6889184651SThierry Reding .la = {
6989184651SThierry Reding .reg = 0x2e8,
7089184651SThierry Reding .shift = 16,
7189184651SThierry Reding .mask = 0xff,
7289184651SThierry Reding .def = 0x50,
7389184651SThierry Reding },
744f1ac76eSThierry Reding },
7589184651SThierry Reding }, {
7689184651SThierry Reding .id = 0x04,
7789184651SThierry Reding .name = "display0bb",
7889184651SThierry Reding .swgroup = TEGRA_SWGROUP_DCB,
794f1ac76eSThierry Reding .regs = {
8089184651SThierry Reding .smmu = {
8189184651SThierry Reding .reg = 0x228,
8289184651SThierry Reding .bit = 4,
8389184651SThierry Reding },
8489184651SThierry Reding .la = {
8589184651SThierry Reding .reg = 0x2f4,
8689184651SThierry Reding .shift = 16,
8789184651SThierry Reding .mask = 0xff,
8889184651SThierry Reding .def = 0x50,
8989184651SThierry Reding },
904f1ac76eSThierry Reding },
9189184651SThierry Reding }, {
9289184651SThierry Reding .id = 0x05,
9389184651SThierry Reding .name = "display0c",
9489184651SThierry Reding .swgroup = TEGRA_SWGROUP_DC,
954f1ac76eSThierry Reding .regs = {
9689184651SThierry Reding .smmu = {
9789184651SThierry Reding .reg = 0x228,
9889184651SThierry Reding .bit = 5,
9989184651SThierry Reding },
10089184651SThierry Reding .la = {
10189184651SThierry Reding .reg = 0x2ec,
10289184651SThierry Reding .shift = 0,
10389184651SThierry Reding .mask = 0xff,
10489184651SThierry Reding .def = 0x50,
10589184651SThierry Reding },
1064f1ac76eSThierry Reding },
10789184651SThierry Reding }, {
10889184651SThierry Reding .id = 0x06,
10989184651SThierry Reding .name = "display0cb",
11089184651SThierry Reding .swgroup = TEGRA_SWGROUP_DCB,
1114f1ac76eSThierry Reding .regs = {
11289184651SThierry Reding .smmu = {
11389184651SThierry Reding .reg = 0x228,
11489184651SThierry Reding .bit = 6,
11589184651SThierry Reding },
11689184651SThierry Reding .la = {
11789184651SThierry Reding .reg = 0x2f8,
11889184651SThierry Reding .shift = 0,
11989184651SThierry Reding .mask = 0xff,
12089184651SThierry Reding .def = 0x50,
12189184651SThierry Reding },
1224f1ac76eSThierry Reding },
12389184651SThierry Reding }, {
12489184651SThierry Reding .id = 0x0e,
12589184651SThierry Reding .name = "afir",
12689184651SThierry Reding .swgroup = TEGRA_SWGROUP_AFI,
1274f1ac76eSThierry Reding .regs = {
12889184651SThierry Reding .smmu = {
12989184651SThierry Reding .reg = 0x228,
13089184651SThierry Reding .bit = 14,
13189184651SThierry Reding },
13289184651SThierry Reding .la = {
13389184651SThierry Reding .reg = 0x2e0,
13489184651SThierry Reding .shift = 0,
13589184651SThierry Reding .mask = 0xff,
13689184651SThierry Reding .def = 0x13,
13789184651SThierry Reding },
1384f1ac76eSThierry Reding },
13989184651SThierry Reding }, {
14089184651SThierry Reding .id = 0x0f,
14189184651SThierry Reding .name = "avpcarm7r",
14289184651SThierry Reding .swgroup = TEGRA_SWGROUP_AVPC,
1434f1ac76eSThierry Reding .regs = {
14489184651SThierry Reding .smmu = {
14589184651SThierry Reding .reg = 0x228,
14689184651SThierry Reding .bit = 15,
14789184651SThierry Reding },
14889184651SThierry Reding .la = {
14989184651SThierry Reding .reg = 0x2e4,
15089184651SThierry Reding .shift = 0,
15189184651SThierry Reding .mask = 0xff,
15289184651SThierry Reding .def = 0x04,
15389184651SThierry Reding },
1544f1ac76eSThierry Reding },
15589184651SThierry Reding }, {
15689184651SThierry Reding .id = 0x10,
15789184651SThierry Reding .name = "displayhc",
15889184651SThierry Reding .swgroup = TEGRA_SWGROUP_DC,
1594f1ac76eSThierry Reding .regs = {
16089184651SThierry Reding .smmu = {
16189184651SThierry Reding .reg = 0x228,
16289184651SThierry Reding .bit = 16,
16389184651SThierry Reding },
16489184651SThierry Reding .la = {
16589184651SThierry Reding .reg = 0x2f0,
16689184651SThierry Reding .shift = 0,
16789184651SThierry Reding .mask = 0xff,
16889184651SThierry Reding .def = 0x50,
16989184651SThierry Reding },
1704f1ac76eSThierry Reding },
17189184651SThierry Reding }, {
17289184651SThierry Reding .id = 0x11,
17389184651SThierry Reding .name = "displayhcb",
17489184651SThierry Reding .swgroup = TEGRA_SWGROUP_DCB,
1754f1ac76eSThierry Reding .regs = {
17689184651SThierry Reding .smmu = {
17789184651SThierry Reding .reg = 0x228,
17889184651SThierry Reding .bit = 17,
17989184651SThierry Reding },
18089184651SThierry Reding .la = {
18189184651SThierry Reding .reg = 0x2fc,
18289184651SThierry Reding .shift = 0,
18389184651SThierry Reding .mask = 0xff,
18489184651SThierry Reding .def = 0x50,
18589184651SThierry Reding },
1864f1ac76eSThierry Reding },
18789184651SThierry Reding }, {
18889184651SThierry Reding .id = 0x15,
18989184651SThierry Reding .name = "hdar",
19089184651SThierry Reding .swgroup = TEGRA_SWGROUP_HDA,
1914f1ac76eSThierry Reding .regs = {
19289184651SThierry Reding .smmu = {
19389184651SThierry Reding .reg = 0x228,
19489184651SThierry Reding .bit = 21,
19589184651SThierry Reding },
19689184651SThierry Reding .la = {
19789184651SThierry Reding .reg = 0x318,
19889184651SThierry Reding .shift = 0,
19989184651SThierry Reding .mask = 0xff,
20089184651SThierry Reding .def = 0x24,
20189184651SThierry Reding },
2024f1ac76eSThierry Reding },
20389184651SThierry Reding }, {
20489184651SThierry Reding .id = 0x16,
20589184651SThierry Reding .name = "host1xdmar",
20689184651SThierry Reding .swgroup = TEGRA_SWGROUP_HC,
2074f1ac76eSThierry Reding .regs = {
20889184651SThierry Reding .smmu = {
20989184651SThierry Reding .reg = 0x228,
21089184651SThierry Reding .bit = 22,
21189184651SThierry Reding },
21289184651SThierry Reding .la = {
21389184651SThierry Reding .reg = 0x310,
21489184651SThierry Reding .shift = 0,
21589184651SThierry Reding .mask = 0xff,
21689184651SThierry Reding .def = 0x1e,
21789184651SThierry Reding },
2184f1ac76eSThierry Reding },
21989184651SThierry Reding }, {
22089184651SThierry Reding .id = 0x17,
22189184651SThierry Reding .name = "host1xr",
22289184651SThierry Reding .swgroup = TEGRA_SWGROUP_HC,
2234f1ac76eSThierry Reding .regs = {
22489184651SThierry Reding .smmu = {
22589184651SThierry Reding .reg = 0x228,
22689184651SThierry Reding .bit = 23,
22789184651SThierry Reding },
22889184651SThierry Reding .la = {
22989184651SThierry Reding .reg = 0x310,
23089184651SThierry Reding .shift = 16,
23189184651SThierry Reding .mask = 0xff,
23289184651SThierry Reding .def = 0x50,
23389184651SThierry Reding },
2344f1ac76eSThierry Reding },
23589184651SThierry Reding }, {
23689184651SThierry Reding .id = 0x1c,
23789184651SThierry Reding .name = "msencsrd",
23889184651SThierry Reding .swgroup = TEGRA_SWGROUP_MSENC,
2394f1ac76eSThierry Reding .regs = {
24089184651SThierry Reding .smmu = {
24189184651SThierry Reding .reg = 0x228,
24289184651SThierry Reding .bit = 28,
24389184651SThierry Reding },
24489184651SThierry Reding .la = {
24589184651SThierry Reding .reg = 0x328,
24689184651SThierry Reding .shift = 0,
24789184651SThierry Reding .mask = 0xff,
24889184651SThierry Reding .def = 0x23,
24989184651SThierry Reding },
2504f1ac76eSThierry Reding },
25189184651SThierry Reding }, {
25289184651SThierry Reding .id = 0x1d,
25389184651SThierry Reding .name = "ppcsahbdmar",
25489184651SThierry Reding .swgroup = TEGRA_SWGROUP_PPCS,
2554f1ac76eSThierry Reding .regs = {
25689184651SThierry Reding .smmu = {
25789184651SThierry Reding .reg = 0x228,
25889184651SThierry Reding .bit = 29,
25989184651SThierry Reding },
26089184651SThierry Reding .la = {
26189184651SThierry Reding .reg = 0x344,
26289184651SThierry Reding .shift = 0,
26389184651SThierry Reding .mask = 0xff,
26489184651SThierry Reding .def = 0x49,
26589184651SThierry Reding },
2664f1ac76eSThierry Reding },
26789184651SThierry Reding }, {
26889184651SThierry Reding .id = 0x1e,
26989184651SThierry Reding .name = "ppcsahbslvr",
27089184651SThierry Reding .swgroup = TEGRA_SWGROUP_PPCS,
2714f1ac76eSThierry Reding .regs = {
27289184651SThierry Reding .smmu = {
27389184651SThierry Reding .reg = 0x228,
27489184651SThierry Reding .bit = 30,
27589184651SThierry Reding },
27689184651SThierry Reding .la = {
27789184651SThierry Reding .reg = 0x344,
27889184651SThierry Reding .shift = 16,
27989184651SThierry Reding .mask = 0xff,
28089184651SThierry Reding .def = 0x1a,
28189184651SThierry Reding },
2824f1ac76eSThierry Reding },
28389184651SThierry Reding }, {
28489184651SThierry Reding .id = 0x1f,
28589184651SThierry Reding .name = "satar",
28689184651SThierry Reding .swgroup = TEGRA_SWGROUP_SATA,
2874f1ac76eSThierry Reding .regs = {
28889184651SThierry Reding .smmu = {
28989184651SThierry Reding .reg = 0x228,
29089184651SThierry Reding .bit = 31,
29189184651SThierry Reding },
29289184651SThierry Reding .la = {
29389184651SThierry Reding .reg = 0x350,
29489184651SThierry Reding .shift = 0,
29589184651SThierry Reding .mask = 0xff,
29689184651SThierry Reding .def = 0x65,
29789184651SThierry Reding },
2984f1ac76eSThierry Reding },
29989184651SThierry Reding }, {
30089184651SThierry Reding .id = 0x22,
30189184651SThierry Reding .name = "vdebsevr",
30289184651SThierry Reding .swgroup = TEGRA_SWGROUP_VDE,
3034f1ac76eSThierry Reding .regs = {
30489184651SThierry Reding .smmu = {
30589184651SThierry Reding .reg = 0x22c,
30689184651SThierry Reding .bit = 2,
30789184651SThierry Reding },
30889184651SThierry Reding .la = {
30989184651SThierry Reding .reg = 0x354,
31089184651SThierry Reding .shift = 0,
31189184651SThierry Reding .mask = 0xff,
31289184651SThierry Reding .def = 0x4f,
31389184651SThierry Reding },
3144f1ac76eSThierry Reding },
31589184651SThierry Reding }, {
31689184651SThierry Reding .id = 0x23,
31789184651SThierry Reding .name = "vdember",
31889184651SThierry Reding .swgroup = TEGRA_SWGROUP_VDE,
3194f1ac76eSThierry Reding .regs = {
32089184651SThierry Reding .smmu = {
32189184651SThierry Reding .reg = 0x22c,
32289184651SThierry Reding .bit = 3,
32389184651SThierry Reding },
32489184651SThierry Reding .la = {
32589184651SThierry Reding .reg = 0x354,
32689184651SThierry Reding .shift = 16,
32789184651SThierry Reding .mask = 0xff,
32889184651SThierry Reding .def = 0x3d,
32989184651SThierry Reding },
3304f1ac76eSThierry Reding },
33189184651SThierry Reding }, {
33289184651SThierry Reding .id = 0x24,
33389184651SThierry Reding .name = "vdemcer",
33489184651SThierry Reding .swgroup = TEGRA_SWGROUP_VDE,
3354f1ac76eSThierry Reding .regs = {
33689184651SThierry Reding .smmu = {
33789184651SThierry Reding .reg = 0x22c,
33889184651SThierry Reding .bit = 4,
33989184651SThierry Reding },
34089184651SThierry Reding .la = {
34189184651SThierry Reding .reg = 0x358,
34289184651SThierry Reding .shift = 0,
34389184651SThierry Reding .mask = 0xff,
34489184651SThierry Reding .def = 0x66,
34589184651SThierry Reding },
3464f1ac76eSThierry Reding },
34789184651SThierry Reding }, {
34889184651SThierry Reding .id = 0x25,
34989184651SThierry Reding .name = "vdetper",
35089184651SThierry Reding .swgroup = TEGRA_SWGROUP_VDE,
3514f1ac76eSThierry Reding .regs = {
35289184651SThierry Reding .smmu = {
35389184651SThierry Reding .reg = 0x22c,
35489184651SThierry Reding .bit = 5,
35589184651SThierry Reding },
35689184651SThierry Reding .la = {
35789184651SThierry Reding .reg = 0x358,
35889184651SThierry Reding .shift = 16,
35989184651SThierry Reding .mask = 0xff,
36089184651SThierry Reding .def = 0xa5,
36189184651SThierry Reding },
3624f1ac76eSThierry Reding },
36389184651SThierry Reding }, {
36489184651SThierry Reding .id = 0x26,
36589184651SThierry Reding .name = "mpcorelpr",
36689184651SThierry Reding .swgroup = TEGRA_SWGROUP_MPCORELP,
3674f1ac76eSThierry Reding .regs = {
36889184651SThierry Reding .la = {
36989184651SThierry Reding .reg = 0x324,
37089184651SThierry Reding .shift = 0,
37189184651SThierry Reding .mask = 0xff,
37289184651SThierry Reding .def = 0x04,
37389184651SThierry Reding },
3744f1ac76eSThierry Reding },
37589184651SThierry Reding }, {
37689184651SThierry Reding .id = 0x27,
37789184651SThierry Reding .name = "mpcorer",
37889184651SThierry Reding .swgroup = TEGRA_SWGROUP_MPCORE,
3794f1ac76eSThierry Reding .regs = {
38089184651SThierry Reding .la = {
38189184651SThierry Reding .reg = 0x320,
38289184651SThierry Reding .shift = 0,
38389184651SThierry Reding .mask = 0xff,
38489184651SThierry Reding .def = 0x04,
38589184651SThierry Reding },
3864f1ac76eSThierry Reding },
38789184651SThierry Reding }, {
38889184651SThierry Reding .id = 0x2b,
38989184651SThierry Reding .name = "msencswr",
39089184651SThierry Reding .swgroup = TEGRA_SWGROUP_MSENC,
3914f1ac76eSThierry Reding .regs = {
39289184651SThierry Reding .smmu = {
39389184651SThierry Reding .reg = 0x22c,
39489184651SThierry Reding .bit = 11,
39589184651SThierry Reding },
39689184651SThierry Reding .la = {
39789184651SThierry Reding .reg = 0x328,
39889184651SThierry Reding .shift = 16,
39989184651SThierry Reding .mask = 0xff,
40089184651SThierry Reding .def = 0x80,
40189184651SThierry Reding },
4024f1ac76eSThierry Reding },
40389184651SThierry Reding }, {
40489184651SThierry Reding .id = 0x31,
40589184651SThierry Reding .name = "afiw",
40689184651SThierry Reding .swgroup = TEGRA_SWGROUP_AFI,
4074f1ac76eSThierry Reding .regs = {
40889184651SThierry Reding .smmu = {
40989184651SThierry Reding .reg = 0x22c,
41089184651SThierry Reding .bit = 17,
41189184651SThierry Reding },
41289184651SThierry Reding .la = {
41389184651SThierry Reding .reg = 0x2e0,
41489184651SThierry Reding .shift = 16,
41589184651SThierry Reding .mask = 0xff,
41689184651SThierry Reding .def = 0x80,
41789184651SThierry Reding },
4184f1ac76eSThierry Reding },
41989184651SThierry Reding }, {
42089184651SThierry Reding .id = 0x32,
42189184651SThierry Reding .name = "avpcarm7w",
42289184651SThierry Reding .swgroup = TEGRA_SWGROUP_AVPC,
4234f1ac76eSThierry Reding .regs = {
42489184651SThierry Reding .smmu = {
42589184651SThierry Reding .reg = 0x22c,
42689184651SThierry Reding .bit = 18,
42789184651SThierry Reding },
42889184651SThierry Reding .la = {
42989184651SThierry Reding .reg = 0x2e4,
43089184651SThierry Reding .shift = 16,
43189184651SThierry Reding .mask = 0xff,
43289184651SThierry Reding .def = 0x80,
43389184651SThierry Reding },
4344f1ac76eSThierry Reding },
43589184651SThierry Reding }, {
43689184651SThierry Reding .id = 0x35,
43789184651SThierry Reding .name = "hdaw",
43889184651SThierry Reding .swgroup = TEGRA_SWGROUP_HDA,
4394f1ac76eSThierry Reding .regs = {
44089184651SThierry Reding .smmu = {
44189184651SThierry Reding .reg = 0x22c,
44289184651SThierry Reding .bit = 21,
44389184651SThierry Reding },
44489184651SThierry Reding .la = {
44589184651SThierry Reding .reg = 0x318,
44689184651SThierry Reding .shift = 16,
44789184651SThierry Reding .mask = 0xff,
44889184651SThierry Reding .def = 0x80,
44989184651SThierry Reding },
4504f1ac76eSThierry Reding },
45189184651SThierry Reding }, {
45289184651SThierry Reding .id = 0x36,
45389184651SThierry Reding .name = "host1xw",
45489184651SThierry Reding .swgroup = TEGRA_SWGROUP_HC,
4554f1ac76eSThierry Reding .regs = {
45689184651SThierry Reding .smmu = {
45789184651SThierry Reding .reg = 0x22c,
45889184651SThierry Reding .bit = 22,
45989184651SThierry Reding },
46089184651SThierry Reding .la = {
46189184651SThierry Reding .reg = 0x314,
46289184651SThierry Reding .shift = 0,
46389184651SThierry Reding .mask = 0xff,
46489184651SThierry Reding .def = 0x80,
46589184651SThierry Reding },
4664f1ac76eSThierry Reding },
46789184651SThierry Reding }, {
46889184651SThierry Reding .id = 0x38,
46989184651SThierry Reding .name = "mpcorelpw",
47089184651SThierry Reding .swgroup = TEGRA_SWGROUP_MPCORELP,
4714f1ac76eSThierry Reding .regs = {
47289184651SThierry Reding .la = {
47389184651SThierry Reding .reg = 0x324,
47489184651SThierry Reding .shift = 16,
47589184651SThierry Reding .mask = 0xff,
47689184651SThierry Reding .def = 0x80,
47789184651SThierry Reding },
4784f1ac76eSThierry Reding },
47989184651SThierry Reding }, {
48089184651SThierry Reding .id = 0x39,
48189184651SThierry Reding .name = "mpcorew",
48289184651SThierry Reding .swgroup = TEGRA_SWGROUP_MPCORE,
4834f1ac76eSThierry Reding .regs = {
48489184651SThierry Reding .la = {
48589184651SThierry Reding .reg = 0x320,
48689184651SThierry Reding .shift = 16,
48789184651SThierry Reding .mask = 0xff,
48889184651SThierry Reding .def = 0x80,
48989184651SThierry Reding },
4904f1ac76eSThierry Reding },
49189184651SThierry Reding }, {
49289184651SThierry Reding .id = 0x3b,
49389184651SThierry Reding .name = "ppcsahbdmaw",
49489184651SThierry Reding .swgroup = TEGRA_SWGROUP_PPCS,
4954f1ac76eSThierry Reding .regs = {
49689184651SThierry Reding .smmu = {
49789184651SThierry Reding .reg = 0x22c,
49889184651SThierry Reding .bit = 27,
49989184651SThierry Reding },
50089184651SThierry Reding .la = {
50189184651SThierry Reding .reg = 0x348,
50289184651SThierry Reding .shift = 0,
50389184651SThierry Reding .mask = 0xff,
50489184651SThierry Reding .def = 0x80,
50589184651SThierry Reding },
5064f1ac76eSThierry Reding },
50789184651SThierry Reding }, {
50889184651SThierry Reding .id = 0x3c,
50989184651SThierry Reding .name = "ppcsahbslvw",
51089184651SThierry Reding .swgroup = TEGRA_SWGROUP_PPCS,
5114f1ac76eSThierry Reding .regs = {
51289184651SThierry Reding .smmu = {
51389184651SThierry Reding .reg = 0x22c,
51489184651SThierry Reding .bit = 28,
51589184651SThierry Reding },
51689184651SThierry Reding .la = {
51789184651SThierry Reding .reg = 0x348,
51889184651SThierry Reding .shift = 16,
51989184651SThierry Reding .mask = 0xff,
52089184651SThierry Reding .def = 0x80,
52189184651SThierry Reding },
5224f1ac76eSThierry Reding },
52389184651SThierry Reding }, {
52489184651SThierry Reding .id = 0x3d,
52589184651SThierry Reding .name = "sataw",
52689184651SThierry Reding .swgroup = TEGRA_SWGROUP_SATA,
5274f1ac76eSThierry Reding .regs = {
52889184651SThierry Reding .smmu = {
52989184651SThierry Reding .reg = 0x22c,
53089184651SThierry Reding .bit = 29,
53189184651SThierry Reding },
53289184651SThierry Reding .la = {
53389184651SThierry Reding .reg = 0x350,
53489184651SThierry Reding .shift = 16,
53589184651SThierry Reding .mask = 0xff,
53689184651SThierry Reding .def = 0x65,
53789184651SThierry Reding },
5384f1ac76eSThierry Reding },
53989184651SThierry Reding }, {
54089184651SThierry Reding .id = 0x3e,
54189184651SThierry Reding .name = "vdebsevw",
54289184651SThierry Reding .swgroup = TEGRA_SWGROUP_VDE,
5434f1ac76eSThierry Reding .regs = {
54489184651SThierry Reding .smmu = {
54589184651SThierry Reding .reg = 0x22c,
54689184651SThierry Reding .bit = 30,
54789184651SThierry Reding },
54889184651SThierry Reding .la = {
54989184651SThierry Reding .reg = 0x35c,
55089184651SThierry Reding .shift = 0,
55189184651SThierry Reding .mask = 0xff,
55289184651SThierry Reding .def = 0x80,
55389184651SThierry Reding },
5544f1ac76eSThierry Reding },
55589184651SThierry Reding }, {
55689184651SThierry Reding .id = 0x3f,
55789184651SThierry Reding .name = "vdedbgw",
55889184651SThierry Reding .swgroup = TEGRA_SWGROUP_VDE,
5594f1ac76eSThierry Reding .regs = {
56089184651SThierry Reding .smmu = {
56189184651SThierry Reding .reg = 0x22c,
56289184651SThierry Reding .bit = 31,
56389184651SThierry Reding },
56489184651SThierry Reding .la = {
56589184651SThierry Reding .reg = 0x35c,
56689184651SThierry Reding .shift = 16,
56789184651SThierry Reding .mask = 0xff,
56889184651SThierry Reding .def = 0x80,
56989184651SThierry Reding },
5704f1ac76eSThierry Reding },
57189184651SThierry Reding }, {
57289184651SThierry Reding .id = 0x40,
57389184651SThierry Reding .name = "vdembew",
57489184651SThierry Reding .swgroup = TEGRA_SWGROUP_VDE,
5754f1ac76eSThierry Reding .regs = {
57689184651SThierry Reding .smmu = {
57789184651SThierry Reding .reg = 0x230,
57889184651SThierry Reding .bit = 0,
57989184651SThierry Reding },
58089184651SThierry Reding .la = {
58189184651SThierry Reding .reg = 0x360,
58289184651SThierry Reding .shift = 0,
58389184651SThierry Reding .mask = 0xff,
58489184651SThierry Reding .def = 0x80,
58589184651SThierry Reding },
5864f1ac76eSThierry Reding },
58789184651SThierry Reding }, {
58889184651SThierry Reding .id = 0x41,
58989184651SThierry Reding .name = "vdetpmw",
59089184651SThierry Reding .swgroup = TEGRA_SWGROUP_VDE,
5914f1ac76eSThierry Reding .regs = {
59289184651SThierry Reding .smmu = {
59389184651SThierry Reding .reg = 0x230,
59489184651SThierry Reding .bit = 1,
59589184651SThierry Reding },
59689184651SThierry Reding .la = {
59789184651SThierry Reding .reg = 0x360,
59889184651SThierry Reding .shift = 16,
59989184651SThierry Reding .mask = 0xff,
60089184651SThierry Reding .def = 0x80,
60189184651SThierry Reding },
6024f1ac76eSThierry Reding },
60389184651SThierry Reding }, {
60489184651SThierry Reding .id = 0x44,
60589184651SThierry Reding .name = "ispra",
60689184651SThierry Reding .swgroup = TEGRA_SWGROUP_ISP2,
6074f1ac76eSThierry Reding .regs = {
60889184651SThierry Reding .smmu = {
60989184651SThierry Reding .reg = 0x230,
61089184651SThierry Reding .bit = 4,
61189184651SThierry Reding },
61289184651SThierry Reding .la = {
61389184651SThierry Reding .reg = 0x370,
61489184651SThierry Reding .shift = 0,
61589184651SThierry Reding .mask = 0xff,
61689184651SThierry Reding .def = 0x18,
61789184651SThierry Reding },
6184f1ac76eSThierry Reding },
61989184651SThierry Reding }, {
62089184651SThierry Reding .id = 0x46,
62189184651SThierry Reding .name = "ispwa",
62289184651SThierry Reding .swgroup = TEGRA_SWGROUP_ISP2,
6234f1ac76eSThierry Reding .regs = {
62489184651SThierry Reding .smmu = {
62589184651SThierry Reding .reg = 0x230,
62689184651SThierry Reding .bit = 6,
62789184651SThierry Reding },
62889184651SThierry Reding .la = {
62989184651SThierry Reding .reg = 0x374,
63089184651SThierry Reding .shift = 0,
63189184651SThierry Reding .mask = 0xff,
63289184651SThierry Reding .def = 0x80,
63389184651SThierry Reding },
6344f1ac76eSThierry Reding },
63589184651SThierry Reding }, {
63689184651SThierry Reding .id = 0x47,
63789184651SThierry Reding .name = "ispwb",
63889184651SThierry Reding .swgroup = TEGRA_SWGROUP_ISP2,
6394f1ac76eSThierry Reding .regs = {
64089184651SThierry Reding .smmu = {
64189184651SThierry Reding .reg = 0x230,
64289184651SThierry Reding .bit = 7,
64389184651SThierry Reding },
64489184651SThierry Reding .la = {
64589184651SThierry Reding .reg = 0x374,
64689184651SThierry Reding .shift = 16,
64789184651SThierry Reding .mask = 0xff,
64889184651SThierry Reding .def = 0x80,
64989184651SThierry Reding },
6504f1ac76eSThierry Reding },
65189184651SThierry Reding }, {
65289184651SThierry Reding .id = 0x4a,
65389184651SThierry Reding .name = "xusb_hostr",
65489184651SThierry Reding .swgroup = TEGRA_SWGROUP_XUSB_HOST,
6554f1ac76eSThierry Reding .regs = {
65689184651SThierry Reding .smmu = {
65789184651SThierry Reding .reg = 0x230,
65889184651SThierry Reding .bit = 10,
65989184651SThierry Reding },
66089184651SThierry Reding .la = {
66189184651SThierry Reding .reg = 0x37c,
66289184651SThierry Reding .shift = 0,
66389184651SThierry Reding .mask = 0xff,
66489184651SThierry Reding .def = 0x39,
66589184651SThierry Reding },
6664f1ac76eSThierry Reding },
66789184651SThierry Reding }, {
66889184651SThierry Reding .id = 0x4b,
66989184651SThierry Reding .name = "xusb_hostw",
67089184651SThierry Reding .swgroup = TEGRA_SWGROUP_XUSB_HOST,
6714f1ac76eSThierry Reding .regs = {
67289184651SThierry Reding .smmu = {
67389184651SThierry Reding .reg = 0x230,
67489184651SThierry Reding .bit = 11,
67589184651SThierry Reding },
67689184651SThierry Reding .la = {
67789184651SThierry Reding .reg = 0x37c,
67889184651SThierry Reding .shift = 16,
67989184651SThierry Reding .mask = 0xff,
68089184651SThierry Reding .def = 0x80,
68189184651SThierry Reding },
6824f1ac76eSThierry Reding },
68389184651SThierry Reding }, {
68489184651SThierry Reding .id = 0x4c,
68589184651SThierry Reding .name = "xusb_devr",
68689184651SThierry Reding .swgroup = TEGRA_SWGROUP_XUSB_DEV,
6874f1ac76eSThierry Reding .regs = {
68889184651SThierry Reding .smmu = {
68989184651SThierry Reding .reg = 0x230,
69089184651SThierry Reding .bit = 12,
69189184651SThierry Reding },
69289184651SThierry Reding .la = {
69389184651SThierry Reding .reg = 0x380,
69489184651SThierry Reding .shift = 0,
69589184651SThierry Reding .mask = 0xff,
69689184651SThierry Reding .def = 0x39,
69789184651SThierry Reding },
6984f1ac76eSThierry Reding },
69989184651SThierry Reding }, {
70089184651SThierry Reding .id = 0x4d,
70189184651SThierry Reding .name = "xusb_devw",
70289184651SThierry Reding .swgroup = TEGRA_SWGROUP_XUSB_DEV,
7034f1ac76eSThierry Reding .regs = {
70489184651SThierry Reding .smmu = {
70589184651SThierry Reding .reg = 0x230,
70689184651SThierry Reding .bit = 13,
70789184651SThierry Reding },
70889184651SThierry Reding .la = {
70989184651SThierry Reding .reg = 0x380,
71089184651SThierry Reding .shift = 16,
71189184651SThierry Reding .mask = 0xff,
71289184651SThierry Reding .def = 0x80,
71389184651SThierry Reding },
7144f1ac76eSThierry Reding },
71589184651SThierry Reding }, {
71689184651SThierry Reding .id = 0x4e,
71789184651SThierry Reding .name = "isprab",
71889184651SThierry Reding .swgroup = TEGRA_SWGROUP_ISP2B,
7194f1ac76eSThierry Reding .regs = {
72089184651SThierry Reding .smmu = {
72189184651SThierry Reding .reg = 0x230,
72289184651SThierry Reding .bit = 14,
72389184651SThierry Reding },
72489184651SThierry Reding .la = {
72589184651SThierry Reding .reg = 0x384,
72689184651SThierry Reding .shift = 0,
72789184651SThierry Reding .mask = 0xff,
72889184651SThierry Reding .def = 0x18,
72989184651SThierry Reding },
7304f1ac76eSThierry Reding },
73189184651SThierry Reding }, {
73289184651SThierry Reding .id = 0x50,
73389184651SThierry Reding .name = "ispwab",
73489184651SThierry Reding .swgroup = TEGRA_SWGROUP_ISP2B,
7354f1ac76eSThierry Reding .regs = {
73689184651SThierry Reding .smmu = {
73789184651SThierry Reding .reg = 0x230,
73889184651SThierry Reding .bit = 16,
73989184651SThierry Reding },
74089184651SThierry Reding .la = {
74189184651SThierry Reding .reg = 0x388,
74289184651SThierry Reding .shift = 0,
74389184651SThierry Reding .mask = 0xff,
74489184651SThierry Reding .def = 0x80,
74589184651SThierry Reding },
7464f1ac76eSThierry Reding },
74789184651SThierry Reding }, {
74889184651SThierry Reding .id = 0x51,
74989184651SThierry Reding .name = "ispwbb",
75089184651SThierry Reding .swgroup = TEGRA_SWGROUP_ISP2B,
7514f1ac76eSThierry Reding .regs = {
75289184651SThierry Reding .smmu = {
75389184651SThierry Reding .reg = 0x230,
75489184651SThierry Reding .bit = 17,
75589184651SThierry Reding },
75689184651SThierry Reding .la = {
75789184651SThierry Reding .reg = 0x388,
75889184651SThierry Reding .shift = 16,
75989184651SThierry Reding .mask = 0xff,
76089184651SThierry Reding .def = 0x80,
76189184651SThierry Reding },
7624f1ac76eSThierry Reding },
76389184651SThierry Reding }, {
76489184651SThierry Reding .id = 0x54,
76589184651SThierry Reding .name = "tsecsrd",
76689184651SThierry Reding .swgroup = TEGRA_SWGROUP_TSEC,
7674f1ac76eSThierry Reding .regs = {
76889184651SThierry Reding .smmu = {
76989184651SThierry Reding .reg = 0x230,
77089184651SThierry Reding .bit = 20,
77189184651SThierry Reding },
77289184651SThierry Reding .la = {
77389184651SThierry Reding .reg = 0x390,
77489184651SThierry Reding .shift = 0,
77589184651SThierry Reding .mask = 0xff,
77689184651SThierry Reding .def = 0x9b,
77789184651SThierry Reding },
7784f1ac76eSThierry Reding },
77989184651SThierry Reding }, {
78089184651SThierry Reding .id = 0x55,
78189184651SThierry Reding .name = "tsecswr",
78289184651SThierry Reding .swgroup = TEGRA_SWGROUP_TSEC,
7834f1ac76eSThierry Reding .regs = {
78489184651SThierry Reding .smmu = {
78589184651SThierry Reding .reg = 0x230,
78689184651SThierry Reding .bit = 21,
78789184651SThierry Reding },
78889184651SThierry Reding .la = {
78989184651SThierry Reding .reg = 0x390,
79089184651SThierry Reding .shift = 16,
79189184651SThierry Reding .mask = 0xff,
79289184651SThierry Reding .def = 0x80,
79389184651SThierry Reding },
7944f1ac76eSThierry Reding },
79589184651SThierry Reding }, {
79689184651SThierry Reding .id = 0x56,
79789184651SThierry Reding .name = "a9avpscr",
79889184651SThierry Reding .swgroup = TEGRA_SWGROUP_A9AVP,
7994f1ac76eSThierry Reding .regs = {
80089184651SThierry Reding .smmu = {
80189184651SThierry Reding .reg = 0x230,
80289184651SThierry Reding .bit = 22,
80389184651SThierry Reding },
80489184651SThierry Reding .la = {
80589184651SThierry Reding .reg = 0x3a4,
80689184651SThierry Reding .shift = 0,
80789184651SThierry Reding .mask = 0xff,
80889184651SThierry Reding .def = 0x04,
80989184651SThierry Reding },
8104f1ac76eSThierry Reding },
81189184651SThierry Reding }, {
81289184651SThierry Reding .id = 0x57,
81389184651SThierry Reding .name = "a9avpscw",
81489184651SThierry Reding .swgroup = TEGRA_SWGROUP_A9AVP,
8154f1ac76eSThierry Reding .regs = {
81689184651SThierry Reding .smmu = {
81789184651SThierry Reding .reg = 0x230,
81889184651SThierry Reding .bit = 23,
81989184651SThierry Reding },
82089184651SThierry Reding .la = {
82189184651SThierry Reding .reg = 0x3a4,
82289184651SThierry Reding .shift = 16,
82389184651SThierry Reding .mask = 0xff,
82489184651SThierry Reding .def = 0x80,
82589184651SThierry Reding },
8264f1ac76eSThierry Reding },
82789184651SThierry Reding }, {
82889184651SThierry Reding .id = 0x58,
82989184651SThierry Reding .name = "gpusrd",
83089184651SThierry Reding .swgroup = TEGRA_SWGROUP_GPU,
8314f1ac76eSThierry Reding .regs = {
83289184651SThierry Reding .smmu = {
83389184651SThierry Reding /* read-only */
83489184651SThierry Reding .reg = 0x230,
83589184651SThierry Reding .bit = 24,
83689184651SThierry Reding },
83789184651SThierry Reding .la = {
83889184651SThierry Reding .reg = 0x3c8,
83989184651SThierry Reding .shift = 0,
84089184651SThierry Reding .mask = 0xff,
84189184651SThierry Reding .def = 0x1a,
84289184651SThierry Reding },
8434f1ac76eSThierry Reding },
84489184651SThierry Reding }, {
84589184651SThierry Reding .id = 0x59,
84689184651SThierry Reding .name = "gpuswr",
84789184651SThierry Reding .swgroup = TEGRA_SWGROUP_GPU,
8484f1ac76eSThierry Reding .regs = {
84989184651SThierry Reding .smmu = {
85089184651SThierry Reding /* read-only */
85189184651SThierry Reding .reg = 0x230,
85289184651SThierry Reding .bit = 25,
85389184651SThierry Reding },
85489184651SThierry Reding .la = {
85589184651SThierry Reding .reg = 0x3c8,
85689184651SThierry Reding .shift = 16,
85789184651SThierry Reding .mask = 0xff,
85889184651SThierry Reding .def = 0x80,
85989184651SThierry Reding },
8604f1ac76eSThierry Reding },
86189184651SThierry Reding }, {
86289184651SThierry Reding .id = 0x5a,
86389184651SThierry Reding .name = "displayt",
86489184651SThierry Reding .swgroup = TEGRA_SWGROUP_DC,
8654f1ac76eSThierry Reding .regs = {
86689184651SThierry Reding .smmu = {
86789184651SThierry Reding .reg = 0x230,
86889184651SThierry Reding .bit = 26,
86989184651SThierry Reding },
87089184651SThierry Reding .la = {
87189184651SThierry Reding .reg = 0x2f0,
87289184651SThierry Reding .shift = 16,
87389184651SThierry Reding .mask = 0xff,
87489184651SThierry Reding .def = 0x50,
87589184651SThierry Reding },
8764f1ac76eSThierry Reding },
87789184651SThierry Reding }, {
87889184651SThierry Reding .id = 0x60,
87989184651SThierry Reding .name = "sdmmcra",
88089184651SThierry Reding .swgroup = TEGRA_SWGROUP_SDMMC1A,
8814f1ac76eSThierry Reding .regs = {
88289184651SThierry Reding .smmu = {
88389184651SThierry Reding .reg = 0x234,
88489184651SThierry Reding .bit = 0,
88589184651SThierry Reding },
88689184651SThierry Reding .la = {
88789184651SThierry Reding .reg = 0x3b8,
88889184651SThierry Reding .shift = 0,
88989184651SThierry Reding .mask = 0xff,
89089184651SThierry Reding .def = 0x49,
89189184651SThierry Reding },
8924f1ac76eSThierry Reding },
89389184651SThierry Reding }, {
89489184651SThierry Reding .id = 0x61,
89589184651SThierry Reding .name = "sdmmcraa",
89689184651SThierry Reding .swgroup = TEGRA_SWGROUP_SDMMC2A,
8974f1ac76eSThierry Reding .regs = {
89889184651SThierry Reding .smmu = {
89989184651SThierry Reding .reg = 0x234,
90089184651SThierry Reding .bit = 1,
90189184651SThierry Reding },
90289184651SThierry Reding .la = {
90389184651SThierry Reding .reg = 0x3bc,
90489184651SThierry Reding .shift = 0,
90589184651SThierry Reding .mask = 0xff,
90689184651SThierry Reding .def = 0x49,
90789184651SThierry Reding },
9084f1ac76eSThierry Reding },
90989184651SThierry Reding }, {
91089184651SThierry Reding .id = 0x62,
91189184651SThierry Reding .name = "sdmmcr",
91289184651SThierry Reding .swgroup = TEGRA_SWGROUP_SDMMC3A,
9134f1ac76eSThierry Reding .regs = {
91489184651SThierry Reding .smmu = {
91589184651SThierry Reding .reg = 0x234,
91689184651SThierry Reding .bit = 2,
91789184651SThierry Reding },
91889184651SThierry Reding .la = {
91989184651SThierry Reding .reg = 0x3c0,
92089184651SThierry Reding .shift = 0,
92189184651SThierry Reding .mask = 0xff,
92289184651SThierry Reding .def = 0x49,
92389184651SThierry Reding },
9244f1ac76eSThierry Reding },
92589184651SThierry Reding }, {
92689184651SThierry Reding .id = 0x63,
92789184651SThierry Reding .swgroup = TEGRA_SWGROUP_SDMMC4A,
92889184651SThierry Reding .name = "sdmmcrab",
9294f1ac76eSThierry Reding .regs = {
93089184651SThierry Reding .smmu = {
93189184651SThierry Reding .reg = 0x234,
93289184651SThierry Reding .bit = 3,
93389184651SThierry Reding },
93489184651SThierry Reding .la = {
93589184651SThierry Reding .reg = 0x3c4,
93689184651SThierry Reding .shift = 0,
93789184651SThierry Reding .mask = 0xff,
93889184651SThierry Reding .def = 0x49,
93989184651SThierry Reding },
9404f1ac76eSThierry Reding },
94189184651SThierry Reding }, {
94289184651SThierry Reding .id = 0x64,
94389184651SThierry Reding .name = "sdmmcwa",
94489184651SThierry Reding .swgroup = TEGRA_SWGROUP_SDMMC1A,
9454f1ac76eSThierry Reding .regs = {
94689184651SThierry Reding .smmu = {
94789184651SThierry Reding .reg = 0x234,
94889184651SThierry Reding .bit = 4,
94989184651SThierry Reding },
95089184651SThierry Reding .la = {
95189184651SThierry Reding .reg = 0x3b8,
95289184651SThierry Reding .shift = 16,
95389184651SThierry Reding .mask = 0xff,
95489184651SThierry Reding .def = 0x80,
95589184651SThierry Reding },
9564f1ac76eSThierry Reding },
95789184651SThierry Reding }, {
95889184651SThierry Reding .id = 0x65,
95989184651SThierry Reding .name = "sdmmcwaa",
96089184651SThierry Reding .swgroup = TEGRA_SWGROUP_SDMMC2A,
9614f1ac76eSThierry Reding .regs = {
96289184651SThierry Reding .smmu = {
96389184651SThierry Reding .reg = 0x234,
96489184651SThierry Reding .bit = 5,
96589184651SThierry Reding },
96689184651SThierry Reding .la = {
96789184651SThierry Reding .reg = 0x3bc,
96889184651SThierry Reding .shift = 16,
96989184651SThierry Reding .mask = 0xff,
97089184651SThierry Reding .def = 0x80,
97189184651SThierry Reding },
9724f1ac76eSThierry Reding },
97389184651SThierry Reding }, {
97489184651SThierry Reding .id = 0x66,
97589184651SThierry Reding .name = "sdmmcw",
97689184651SThierry Reding .swgroup = TEGRA_SWGROUP_SDMMC3A,
9774f1ac76eSThierry Reding .regs = {
97889184651SThierry Reding .smmu = {
97989184651SThierry Reding .reg = 0x234,
98089184651SThierry Reding .bit = 6,
98189184651SThierry Reding },
98289184651SThierry Reding .la = {
98389184651SThierry Reding .reg = 0x3c0,
98489184651SThierry Reding .shift = 16,
98589184651SThierry Reding .mask = 0xff,
98689184651SThierry Reding .def = 0x80,
98789184651SThierry Reding },
9884f1ac76eSThierry Reding },
98989184651SThierry Reding }, {
99089184651SThierry Reding .id = 0x67,
99189184651SThierry Reding .name = "sdmmcwab",
99289184651SThierry Reding .swgroup = TEGRA_SWGROUP_SDMMC4A,
9934f1ac76eSThierry Reding .regs = {
99489184651SThierry Reding .smmu = {
99589184651SThierry Reding .reg = 0x234,
99689184651SThierry Reding .bit = 7,
99789184651SThierry Reding },
99889184651SThierry Reding .la = {
99989184651SThierry Reding .reg = 0x3c4,
100089184651SThierry Reding .shift = 16,
100189184651SThierry Reding .mask = 0xff,
100289184651SThierry Reding .def = 0x80,
100389184651SThierry Reding },
10044f1ac76eSThierry Reding },
100589184651SThierry Reding }, {
100689184651SThierry Reding .id = 0x6c,
100789184651SThierry Reding .name = "vicsrd",
100889184651SThierry Reding .swgroup = TEGRA_SWGROUP_VIC,
10094f1ac76eSThierry Reding .regs = {
101089184651SThierry Reding .smmu = {
101189184651SThierry Reding .reg = 0x234,
101289184651SThierry Reding .bit = 12,
101389184651SThierry Reding },
101489184651SThierry Reding .la = {
101589184651SThierry Reding .reg = 0x394,
101689184651SThierry Reding .shift = 0,
101789184651SThierry Reding .mask = 0xff,
101889184651SThierry Reding .def = 0x1a,
101989184651SThierry Reding },
10204f1ac76eSThierry Reding },
102189184651SThierry Reding }, {
102289184651SThierry Reding .id = 0x6d,
102389184651SThierry Reding .name = "vicswr",
102489184651SThierry Reding .swgroup = TEGRA_SWGROUP_VIC,
10254f1ac76eSThierry Reding .regs = {
102689184651SThierry Reding .smmu = {
102789184651SThierry Reding .reg = 0x234,
102889184651SThierry Reding .bit = 13,
102989184651SThierry Reding },
103089184651SThierry Reding .la = {
103189184651SThierry Reding .reg = 0x394,
103289184651SThierry Reding .shift = 16,
103389184651SThierry Reding .mask = 0xff,
103489184651SThierry Reding .def = 0x80,
103589184651SThierry Reding },
10364f1ac76eSThierry Reding },
103789184651SThierry Reding }, {
103889184651SThierry Reding .id = 0x72,
103989184651SThierry Reding .name = "viw",
104089184651SThierry Reding .swgroup = TEGRA_SWGROUP_VI,
10414f1ac76eSThierry Reding .regs = {
104289184651SThierry Reding .smmu = {
104389184651SThierry Reding .reg = 0x234,
104489184651SThierry Reding .bit = 18,
104589184651SThierry Reding },
104689184651SThierry Reding .la = {
104789184651SThierry Reding .reg = 0x398,
104889184651SThierry Reding .shift = 0,
104989184651SThierry Reding .mask = 0xff,
105089184651SThierry Reding .def = 0x80,
105189184651SThierry Reding },
10524f1ac76eSThierry Reding },
105389184651SThierry Reding }, {
105489184651SThierry Reding .id = 0x73,
105589184651SThierry Reding .name = "displayd",
105689184651SThierry Reding .swgroup = TEGRA_SWGROUP_DC,
10574f1ac76eSThierry Reding .regs = {
105889184651SThierry Reding .smmu = {
105989184651SThierry Reding .reg = 0x234,
106089184651SThierry Reding .bit = 19,
106189184651SThierry Reding },
106289184651SThierry Reding .la = {
106389184651SThierry Reding .reg = 0x3c8,
106489184651SThierry Reding .shift = 0,
106589184651SThierry Reding .mask = 0xff,
106689184651SThierry Reding .def = 0x50,
106789184651SThierry Reding },
106889184651SThierry Reding },
10694f1ac76eSThierry Reding },
107089184651SThierry Reding };
107189184651SThierry Reding
107289184651SThierry Reding static const struct tegra_smmu_swgroup tegra124_swgroups[] = {
1073e660df07SThierry Reding { .name = "dc", .swgroup = TEGRA_SWGROUP_DC, .reg = 0x240 },
1074e660df07SThierry Reding { .name = "dcb", .swgroup = TEGRA_SWGROUP_DCB, .reg = 0x244 },
1075e660df07SThierry Reding { .name = "afi", .swgroup = TEGRA_SWGROUP_AFI, .reg = 0x238 },
1076e660df07SThierry Reding { .name = "avpc", .swgroup = TEGRA_SWGROUP_AVPC, .reg = 0x23c },
1077e660df07SThierry Reding { .name = "hda", .swgroup = TEGRA_SWGROUP_HDA, .reg = 0x254 },
1078e660df07SThierry Reding { .name = "hc", .swgroup = TEGRA_SWGROUP_HC, .reg = 0x250 },
1079e660df07SThierry Reding { .name = "msenc", .swgroup = TEGRA_SWGROUP_MSENC, .reg = 0x264 },
1080e660df07SThierry Reding { .name = "ppcs", .swgroup = TEGRA_SWGROUP_PPCS, .reg = 0x270 },
1081e660df07SThierry Reding { .name = "sata", .swgroup = TEGRA_SWGROUP_SATA, .reg = 0x274 },
1082e660df07SThierry Reding { .name = "vde", .swgroup = TEGRA_SWGROUP_VDE, .reg = 0x27c },
1083e660df07SThierry Reding { .name = "isp2", .swgroup = TEGRA_SWGROUP_ISP2, .reg = 0x258 },
1084e660df07SThierry Reding { .name = "xusb_host", .swgroup = TEGRA_SWGROUP_XUSB_HOST, .reg = 0x288 },
1085e660df07SThierry Reding { .name = "xusb_dev", .swgroup = TEGRA_SWGROUP_XUSB_DEV, .reg = 0x28c },
1086e660df07SThierry Reding { .name = "isp2b", .swgroup = TEGRA_SWGROUP_ISP2B, .reg = 0xaa4 },
1087e660df07SThierry Reding { .name = "tsec", .swgroup = TEGRA_SWGROUP_TSEC, .reg = 0x294 },
1088e660df07SThierry Reding { .name = "a9avp", .swgroup = TEGRA_SWGROUP_A9AVP, .reg = 0x290 },
1089e660df07SThierry Reding { .name = "gpu", .swgroup = TEGRA_SWGROUP_GPU, .reg = 0xaac },
1090e660df07SThierry Reding { .name = "sdmmc1a", .swgroup = TEGRA_SWGROUP_SDMMC1A, .reg = 0xa94 },
1091e660df07SThierry Reding { .name = "sdmmc2a", .swgroup = TEGRA_SWGROUP_SDMMC2A, .reg = 0xa98 },
1092e660df07SThierry Reding { .name = "sdmmc3a", .swgroup = TEGRA_SWGROUP_SDMMC3A, .reg = 0xa9c },
1093e660df07SThierry Reding { .name = "sdmmc4a", .swgroup = TEGRA_SWGROUP_SDMMC4A, .reg = 0xaa0 },
1094e660df07SThierry Reding { .name = "vic", .swgroup = TEGRA_SWGROUP_VIC, .reg = 0x284 },
1095e660df07SThierry Reding { .name = "vi", .swgroup = TEGRA_SWGROUP_VI, .reg = 0x280 },
109689184651SThierry Reding };
109789184651SThierry Reding
109863a613fdSThierry Reding static const unsigned int tegra124_group_drm[] = {
10992a8102dfSThierry Reding TEGRA_SWGROUP_DC,
11002a8102dfSThierry Reding TEGRA_SWGROUP_DCB,
110163a613fdSThierry Reding TEGRA_SWGROUP_VIC,
11022a8102dfSThierry Reding };
11032a8102dfSThierry Reding
11042a8102dfSThierry Reding static const struct tegra_smmu_group_soc tegra124_groups[] = {
11052a8102dfSThierry Reding {
110663a613fdSThierry Reding .name = "drm",
110763a613fdSThierry Reding .swgroups = tegra124_group_drm,
110863a613fdSThierry Reding .num_swgroups = ARRAY_SIZE(tegra124_group_drm),
11092a8102dfSThierry Reding },
11102a8102dfSThierry Reding };
11112a8102dfSThierry Reding
11121b19b056SDmitry Osipenko #define TEGRA124_MC_RESET(_name, _control, _status, _bit) \
11131b19b056SDmitry Osipenko { \
11141b19b056SDmitry Osipenko .name = #_name, \
11151b19b056SDmitry Osipenko .id = TEGRA124_MC_RESET_##_name, \
11161b19b056SDmitry Osipenko .control = _control, \
11171b19b056SDmitry Osipenko .status = _status, \
11181b19b056SDmitry Osipenko .bit = _bit, \
11191b19b056SDmitry Osipenko }
11201b19b056SDmitry Osipenko
11211b19b056SDmitry Osipenko static const struct tegra_mc_reset tegra124_mc_resets[] = {
11221b19b056SDmitry Osipenko TEGRA124_MC_RESET(AFI, 0x200, 0x204, 0),
11231b19b056SDmitry Osipenko TEGRA124_MC_RESET(AVPC, 0x200, 0x204, 1),
11241b19b056SDmitry Osipenko TEGRA124_MC_RESET(DC, 0x200, 0x204, 2),
11251b19b056SDmitry Osipenko TEGRA124_MC_RESET(DCB, 0x200, 0x204, 3),
11261b19b056SDmitry Osipenko TEGRA124_MC_RESET(HC, 0x200, 0x204, 6),
11271b19b056SDmitry Osipenko TEGRA124_MC_RESET(HDA, 0x200, 0x204, 7),
11281b19b056SDmitry Osipenko TEGRA124_MC_RESET(ISP2, 0x200, 0x204, 8),
11291b19b056SDmitry Osipenko TEGRA124_MC_RESET(MPCORE, 0x200, 0x204, 9),
11301b19b056SDmitry Osipenko TEGRA124_MC_RESET(MPCORELP, 0x200, 0x204, 10),
11311b19b056SDmitry Osipenko TEGRA124_MC_RESET(MSENC, 0x200, 0x204, 11),
11321b19b056SDmitry Osipenko TEGRA124_MC_RESET(PPCS, 0x200, 0x204, 14),
11331b19b056SDmitry Osipenko TEGRA124_MC_RESET(SATA, 0x200, 0x204, 15),
11341b19b056SDmitry Osipenko TEGRA124_MC_RESET(VDE, 0x200, 0x204, 16),
11351b19b056SDmitry Osipenko TEGRA124_MC_RESET(VI, 0x200, 0x204, 17),
11361b19b056SDmitry Osipenko TEGRA124_MC_RESET(VIC, 0x200, 0x204, 18),
11371b19b056SDmitry Osipenko TEGRA124_MC_RESET(XUSB_HOST, 0x200, 0x204, 19),
11381b19b056SDmitry Osipenko TEGRA124_MC_RESET(XUSB_DEV, 0x200, 0x204, 20),
11391b19b056SDmitry Osipenko TEGRA124_MC_RESET(TSEC, 0x200, 0x204, 21),
11401b19b056SDmitry Osipenko TEGRA124_MC_RESET(SDMMC1, 0x200, 0x204, 22),
11411b19b056SDmitry Osipenko TEGRA124_MC_RESET(SDMMC2, 0x200, 0x204, 23),
11421b19b056SDmitry Osipenko TEGRA124_MC_RESET(SDMMC3, 0x200, 0x204, 25),
11431b19b056SDmitry Osipenko TEGRA124_MC_RESET(SDMMC4, 0x970, 0x974, 0),
11441b19b056SDmitry Osipenko TEGRA124_MC_RESET(ISP2B, 0x970, 0x974, 1),
11451b19b056SDmitry Osipenko TEGRA124_MC_RESET(GPU, 0x970, 0x974, 2),
11461b19b056SDmitry Osipenko };
11471b19b056SDmitry Osipenko
tegra124_mc_icc_set(struct icc_node * src,struct icc_node * dst)1148380def2dSDmitry Osipenko static int tegra124_mc_icc_set(struct icc_node *src, struct icc_node *dst)
1149380def2dSDmitry Osipenko {
1150380def2dSDmitry Osipenko /* TODO: program PTSA */
1151380def2dSDmitry Osipenko return 0;
1152380def2dSDmitry Osipenko }
1153380def2dSDmitry Osipenko
tegra124_mc_icc_aggreate(struct icc_node * node,u32 tag,u32 avg_bw,u32 peak_bw,u32 * agg_avg,u32 * agg_peak)1154380def2dSDmitry Osipenko static int tegra124_mc_icc_aggreate(struct icc_node *node, u32 tag, u32 avg_bw,
1155380def2dSDmitry Osipenko u32 peak_bw, u32 *agg_avg, u32 *agg_peak)
1156380def2dSDmitry Osipenko {
1157380def2dSDmitry Osipenko /*
1158380def2dSDmitry Osipenko * ISO clients need to reserve extra bandwidth up-front because
1159380def2dSDmitry Osipenko * there could be high bandwidth pressure during initial filling
1160380def2dSDmitry Osipenko * of the client's FIFO buffers. Secondly, we need to take into
1161380def2dSDmitry Osipenko * account impurities of the memory subsystem.
1162380def2dSDmitry Osipenko */
1163380def2dSDmitry Osipenko if (tag & TEGRA_MC_ICC_TAG_ISO)
1164380def2dSDmitry Osipenko peak_bw = tegra_mc_scale_percents(peak_bw, 400);
1165380def2dSDmitry Osipenko
1166380def2dSDmitry Osipenko *agg_avg += avg_bw;
1167380def2dSDmitry Osipenko *agg_peak = max(*agg_peak, peak_bw);
1168380def2dSDmitry Osipenko
1169380def2dSDmitry Osipenko return 0;
1170380def2dSDmitry Osipenko }
1171380def2dSDmitry Osipenko
1172380def2dSDmitry Osipenko static struct icc_node_data *
tegra124_mc_of_icc_xlate_extended(struct of_phandle_args * spec,void * data)1173380def2dSDmitry Osipenko tegra124_mc_of_icc_xlate_extended(struct of_phandle_args *spec, void *data)
1174380def2dSDmitry Osipenko {
1175380def2dSDmitry Osipenko struct tegra_mc *mc = icc_provider_to_tegra_mc(data);
1176380def2dSDmitry Osipenko const struct tegra_mc_client *client;
1177380def2dSDmitry Osipenko unsigned int i, idx = spec->args[0];
1178380def2dSDmitry Osipenko struct icc_node_data *ndata;
1179380def2dSDmitry Osipenko struct icc_node *node;
1180380def2dSDmitry Osipenko
1181380def2dSDmitry Osipenko list_for_each_entry(node, &mc->provider.nodes, node_list) {
1182380def2dSDmitry Osipenko if (node->id != idx)
1183380def2dSDmitry Osipenko continue;
1184380def2dSDmitry Osipenko
1185380def2dSDmitry Osipenko ndata = kzalloc(sizeof(*ndata), GFP_KERNEL);
1186380def2dSDmitry Osipenko if (!ndata)
1187380def2dSDmitry Osipenko return ERR_PTR(-ENOMEM);
1188380def2dSDmitry Osipenko
1189380def2dSDmitry Osipenko client = &mc->soc->clients[idx];
1190380def2dSDmitry Osipenko ndata->node = node;
1191380def2dSDmitry Osipenko
1192380def2dSDmitry Osipenko switch (client->swgroup) {
1193380def2dSDmitry Osipenko case TEGRA_SWGROUP_DC:
1194380def2dSDmitry Osipenko case TEGRA_SWGROUP_DCB:
1195380def2dSDmitry Osipenko case TEGRA_SWGROUP_PTC:
1196380def2dSDmitry Osipenko case TEGRA_SWGROUP_VI:
1197380def2dSDmitry Osipenko /* these clients are isochronous by default */
1198380def2dSDmitry Osipenko ndata->tag = TEGRA_MC_ICC_TAG_ISO;
1199380def2dSDmitry Osipenko break;
1200380def2dSDmitry Osipenko
1201380def2dSDmitry Osipenko default:
1202380def2dSDmitry Osipenko ndata->tag = TEGRA_MC_ICC_TAG_DEFAULT;
1203380def2dSDmitry Osipenko break;
1204380def2dSDmitry Osipenko }
1205380def2dSDmitry Osipenko
1206380def2dSDmitry Osipenko return ndata;
1207380def2dSDmitry Osipenko }
1208380def2dSDmitry Osipenko
1209380def2dSDmitry Osipenko for (i = 0; i < mc->soc->num_clients; i++) {
1210380def2dSDmitry Osipenko if (mc->soc->clients[i].id == idx)
1211380def2dSDmitry Osipenko return ERR_PTR(-EPROBE_DEFER);
1212380def2dSDmitry Osipenko }
1213380def2dSDmitry Osipenko
1214380def2dSDmitry Osipenko dev_err(mc->dev, "invalid ICC client ID %u\n", idx);
1215380def2dSDmitry Osipenko
1216380def2dSDmitry Osipenko return ERR_PTR(-EINVAL);
1217380def2dSDmitry Osipenko }
1218380def2dSDmitry Osipenko
1219380def2dSDmitry Osipenko static const struct tegra_mc_icc_ops tegra124_mc_icc_ops = {
1220380def2dSDmitry Osipenko .xlate_extended = tegra124_mc_of_icc_xlate_extended,
1221380def2dSDmitry Osipenko .aggregate = tegra124_mc_icc_aggreate,
1222380def2dSDmitry Osipenko .set = tegra124_mc_icc_set,
1223380def2dSDmitry Osipenko };
1224380def2dSDmitry Osipenko
122589184651SThierry Reding #ifdef CONFIG_ARCH_TEGRA_124_SOC
122676ce48bdSNathan Huckleberry static const unsigned long tegra124_mc_emem_regs[] = {
122776ce48bdSNathan Huckleberry MC_EMEM_ARB_CFG,
122876ce48bdSNathan Huckleberry MC_EMEM_ARB_OUTSTANDING_REQ,
122976ce48bdSNathan Huckleberry MC_EMEM_ARB_TIMING_RCD,
123076ce48bdSNathan Huckleberry MC_EMEM_ARB_TIMING_RP,
123176ce48bdSNathan Huckleberry MC_EMEM_ARB_TIMING_RC,
123276ce48bdSNathan Huckleberry MC_EMEM_ARB_TIMING_RAS,
123376ce48bdSNathan Huckleberry MC_EMEM_ARB_TIMING_FAW,
123476ce48bdSNathan Huckleberry MC_EMEM_ARB_TIMING_RRD,
123576ce48bdSNathan Huckleberry MC_EMEM_ARB_TIMING_RAP2PRE,
123676ce48bdSNathan Huckleberry MC_EMEM_ARB_TIMING_WAP2PRE,
123776ce48bdSNathan Huckleberry MC_EMEM_ARB_TIMING_R2R,
123876ce48bdSNathan Huckleberry MC_EMEM_ARB_TIMING_W2W,
123976ce48bdSNathan Huckleberry MC_EMEM_ARB_TIMING_R2W,
124076ce48bdSNathan Huckleberry MC_EMEM_ARB_TIMING_W2R,
124176ce48bdSNathan Huckleberry MC_EMEM_ARB_DA_TURNS,
124276ce48bdSNathan Huckleberry MC_EMEM_ARB_DA_COVERS,
124376ce48bdSNathan Huckleberry MC_EMEM_ARB_MISC0,
124476ce48bdSNathan Huckleberry MC_EMEM_ARB_MISC1,
124576ce48bdSNathan Huckleberry MC_EMEM_ARB_RING1_THROTTLE
124676ce48bdSNathan Huckleberry };
124776ce48bdSNathan Huckleberry
124889184651SThierry Reding static const struct tegra_smmu_soc tegra124_smmu_soc = {
124989184651SThierry Reding .clients = tegra124_mc_clients,
125089184651SThierry Reding .num_clients = ARRAY_SIZE(tegra124_mc_clients),
125189184651SThierry Reding .swgroups = tegra124_swgroups,
125289184651SThierry Reding .num_swgroups = ARRAY_SIZE(tegra124_swgroups),
12532a8102dfSThierry Reding .groups = tegra124_groups,
12542a8102dfSThierry Reding .num_groups = ARRAY_SIZE(tegra124_groups),
125589184651SThierry Reding .supports_round_robin_arbitration = true,
125689184651SThierry Reding .supports_request_limit = true,
1257e2127ae7SVince Hsu .num_tlb_lines = 32,
125889184651SThierry Reding .num_asids = 128,
125989184651SThierry Reding };
126089184651SThierry Reding
126189184651SThierry Reding const struct tegra_mc_soc tegra124_mc_soc = {
126289184651SThierry Reding .clients = tegra124_mc_clients,
126389184651SThierry Reding .num_clients = ARRAY_SIZE(tegra124_mc_clients),
126489184651SThierry Reding .num_address_bits = 34,
126589184651SThierry Reding .atom_size = 32,
12663c01cf3bSPaul Walmsley .client_id_mask = 0x7f,
126789184651SThierry Reding .smmu = &tegra124_smmu_soc,
12683d9dd6fdSMikko Perttunen .emem_regs = tegra124_mc_emem_regs,
12693d9dd6fdSMikko Perttunen .num_emem_regs = ARRAY_SIZE(tegra124_mc_emem_regs),
12701c74d5c0SDmitry Osipenko .intmask = MC_INT_DECERR_MTS | MC_INT_SECERR_SEC | MC_INT_DECERR_VPR |
12711c74d5c0SDmitry Osipenko MC_INT_INVALID_APB_ASID_UPDATE | MC_INT_INVALID_SMMU_PAGE |
12721c74d5c0SDmitry Osipenko MC_INT_SECURITY_VIOLATION | MC_INT_DECERR_EMEM,
1273cb2b5839SThierry Reding .reset_ops = &tegra_mc_reset_ops_common,
12741b19b056SDmitry Osipenko .resets = tegra124_mc_resets,
12751b19b056SDmitry Osipenko .num_resets = ARRAY_SIZE(tegra124_mc_resets),
1276380def2dSDmitry Osipenko .icc_ops = &tegra124_mc_icc_ops,
1277ddeceab0SThierry Reding .ops = &tegra30_mc_ops,
127889184651SThierry Reding };
127989184651SThierry Reding #endif /* CONFIG_ARCH_TEGRA_124_SOC */
1280242b1d71SThierry Reding
1281242b1d71SThierry Reding #ifdef CONFIG_ARCH_TEGRA_132_SOC
1282242b1d71SThierry Reding static const struct tegra_smmu_soc tegra132_smmu_soc = {
1283242b1d71SThierry Reding .clients = tegra124_mc_clients,
1284242b1d71SThierry Reding .num_clients = ARRAY_SIZE(tegra124_mc_clients),
1285242b1d71SThierry Reding .swgroups = tegra124_swgroups,
1286242b1d71SThierry Reding .num_swgroups = ARRAY_SIZE(tegra124_swgroups),
12872a8102dfSThierry Reding .groups = tegra124_groups,
12882a8102dfSThierry Reding .num_groups = ARRAY_SIZE(tegra124_groups),
1289242b1d71SThierry Reding .supports_round_robin_arbitration = true,
1290242b1d71SThierry Reding .supports_request_limit = true,
129111cec15bSThierry Reding .num_tlb_lines = 32,
1292242b1d71SThierry Reding .num_asids = 128,
1293242b1d71SThierry Reding };
1294242b1d71SThierry Reding
1295242b1d71SThierry Reding const struct tegra_mc_soc tegra132_mc_soc = {
1296242b1d71SThierry Reding .clients = tegra124_mc_clients,
1297242b1d71SThierry Reding .num_clients = ARRAY_SIZE(tegra124_mc_clients),
1298242b1d71SThierry Reding .num_address_bits = 34,
1299242b1d71SThierry Reding .atom_size = 32,
13003c01cf3bSPaul Walmsley .client_id_mask = 0x7f,
1301242b1d71SThierry Reding .smmu = &tegra132_smmu_soc,
13021c74d5c0SDmitry Osipenko .intmask = MC_INT_DECERR_MTS | MC_INT_SECERR_SEC | MC_INT_DECERR_VPR |
13031c74d5c0SDmitry Osipenko MC_INT_INVALID_APB_ASID_UPDATE | MC_INT_INVALID_SMMU_PAGE |
13041c74d5c0SDmitry Osipenko MC_INT_SECURITY_VIOLATION | MC_INT_DECERR_EMEM,
1305cb2b5839SThierry Reding .reset_ops = &tegra_mc_reset_ops_common,
13061b19b056SDmitry Osipenko .resets = tegra124_mc_resets,
13071b19b056SDmitry Osipenko .num_resets = ARRAY_SIZE(tegra124_mc_resets),
1308380def2dSDmitry Osipenko .icc_ops = &tegra124_mc_icc_ops,
1309ddeceab0SThierry Reding .ops = &tegra30_mc_ops,
1310242b1d71SThierry Reding };
1311242b1d71SThierry Reding #endif /* CONFIG_ARCH_TEGRA_132_SOC */
1312