162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Copyright (C) 2014 NVIDIA CORPORATION.  All rights reserved.
462306a36Sopenharmony_ci */
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#include <linux/of.h>
762306a36Sopenharmony_ci#include <linux/device.h>
862306a36Sopenharmony_ci#include <linux/slab.h>
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#include <dt-bindings/memory/tegra124-mc.h>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci#include "mc.h"
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_cistatic const struct tegra_mc_client tegra124_mc_clients[] = {
1562306a36Sopenharmony_ci	{
1662306a36Sopenharmony_ci		.id = 0x00,
1762306a36Sopenharmony_ci		.name = "ptcr",
1862306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_PTC,
1962306a36Sopenharmony_ci		.regs = {
2062306a36Sopenharmony_ci			.la = {
2162306a36Sopenharmony_ci				.reg = 0x34c,
2262306a36Sopenharmony_ci				.shift = 0,
2362306a36Sopenharmony_ci				.mask = 0xff,
2462306a36Sopenharmony_ci				.def = 0x0,
2562306a36Sopenharmony_ci			},
2662306a36Sopenharmony_ci		},
2762306a36Sopenharmony_ci	}, {
2862306a36Sopenharmony_ci		.id = 0x01,
2962306a36Sopenharmony_ci		.name = "display0a",
3062306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_DC,
3162306a36Sopenharmony_ci		.regs = {
3262306a36Sopenharmony_ci			.smmu = {
3362306a36Sopenharmony_ci				.reg = 0x228,
3462306a36Sopenharmony_ci				.bit = 1,
3562306a36Sopenharmony_ci			},
3662306a36Sopenharmony_ci			.la = {
3762306a36Sopenharmony_ci				.reg = 0x2e8,
3862306a36Sopenharmony_ci				.shift = 0,
3962306a36Sopenharmony_ci				.mask = 0xff,
4062306a36Sopenharmony_ci				.def = 0xc2,
4162306a36Sopenharmony_ci			},
4262306a36Sopenharmony_ci		},
4362306a36Sopenharmony_ci	}, {
4462306a36Sopenharmony_ci		.id = 0x02,
4562306a36Sopenharmony_ci		.name = "display0ab",
4662306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_DCB,
4762306a36Sopenharmony_ci		.regs = {
4862306a36Sopenharmony_ci			.smmu = {
4962306a36Sopenharmony_ci				.reg = 0x228,
5062306a36Sopenharmony_ci				.bit = 2,
5162306a36Sopenharmony_ci			},
5262306a36Sopenharmony_ci			.la = {
5362306a36Sopenharmony_ci				.reg = 0x2f4,
5462306a36Sopenharmony_ci				.shift = 0,
5562306a36Sopenharmony_ci				.mask = 0xff,
5662306a36Sopenharmony_ci				.def = 0xc6,
5762306a36Sopenharmony_ci			},
5862306a36Sopenharmony_ci		},
5962306a36Sopenharmony_ci	}, {
6062306a36Sopenharmony_ci		.id = 0x03,
6162306a36Sopenharmony_ci		.name = "display0b",
6262306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_DC,
6362306a36Sopenharmony_ci		.regs = {
6462306a36Sopenharmony_ci			.smmu = {
6562306a36Sopenharmony_ci				.reg = 0x228,
6662306a36Sopenharmony_ci				.bit = 3,
6762306a36Sopenharmony_ci			},
6862306a36Sopenharmony_ci			.la = {
6962306a36Sopenharmony_ci				.reg = 0x2e8,
7062306a36Sopenharmony_ci				.shift = 16,
7162306a36Sopenharmony_ci				.mask = 0xff,
7262306a36Sopenharmony_ci				.def = 0x50,
7362306a36Sopenharmony_ci			},
7462306a36Sopenharmony_ci		},
7562306a36Sopenharmony_ci	}, {
7662306a36Sopenharmony_ci		.id = 0x04,
7762306a36Sopenharmony_ci		.name = "display0bb",
7862306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_DCB,
7962306a36Sopenharmony_ci		.regs = {
8062306a36Sopenharmony_ci			.smmu = {
8162306a36Sopenharmony_ci				.reg = 0x228,
8262306a36Sopenharmony_ci				.bit = 4,
8362306a36Sopenharmony_ci			},
8462306a36Sopenharmony_ci			.la = {
8562306a36Sopenharmony_ci				.reg = 0x2f4,
8662306a36Sopenharmony_ci				.shift = 16,
8762306a36Sopenharmony_ci				.mask = 0xff,
8862306a36Sopenharmony_ci				.def = 0x50,
8962306a36Sopenharmony_ci			},
9062306a36Sopenharmony_ci		},
9162306a36Sopenharmony_ci	}, {
9262306a36Sopenharmony_ci		.id = 0x05,
9362306a36Sopenharmony_ci		.name = "display0c",
9462306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_DC,
9562306a36Sopenharmony_ci		.regs = {
9662306a36Sopenharmony_ci			.smmu = {
9762306a36Sopenharmony_ci				.reg = 0x228,
9862306a36Sopenharmony_ci				.bit = 5,
9962306a36Sopenharmony_ci			},
10062306a36Sopenharmony_ci			.la = {
10162306a36Sopenharmony_ci				.reg = 0x2ec,
10262306a36Sopenharmony_ci				.shift = 0,
10362306a36Sopenharmony_ci				.mask = 0xff,
10462306a36Sopenharmony_ci				.def = 0x50,
10562306a36Sopenharmony_ci			},
10662306a36Sopenharmony_ci		},
10762306a36Sopenharmony_ci	}, {
10862306a36Sopenharmony_ci		.id = 0x06,
10962306a36Sopenharmony_ci		.name = "display0cb",
11062306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_DCB,
11162306a36Sopenharmony_ci		.regs = {
11262306a36Sopenharmony_ci			.smmu = {
11362306a36Sopenharmony_ci				.reg = 0x228,
11462306a36Sopenharmony_ci				.bit = 6,
11562306a36Sopenharmony_ci			},
11662306a36Sopenharmony_ci			.la = {
11762306a36Sopenharmony_ci				.reg = 0x2f8,
11862306a36Sopenharmony_ci				.shift = 0,
11962306a36Sopenharmony_ci				.mask = 0xff,
12062306a36Sopenharmony_ci				.def = 0x50,
12162306a36Sopenharmony_ci			},
12262306a36Sopenharmony_ci		},
12362306a36Sopenharmony_ci	}, {
12462306a36Sopenharmony_ci		.id = 0x0e,
12562306a36Sopenharmony_ci		.name = "afir",
12662306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_AFI,
12762306a36Sopenharmony_ci		.regs = {
12862306a36Sopenharmony_ci			.smmu = {
12962306a36Sopenharmony_ci				.reg = 0x228,
13062306a36Sopenharmony_ci				.bit = 14,
13162306a36Sopenharmony_ci			},
13262306a36Sopenharmony_ci			.la = {
13362306a36Sopenharmony_ci				.reg = 0x2e0,
13462306a36Sopenharmony_ci				.shift = 0,
13562306a36Sopenharmony_ci				.mask = 0xff,
13662306a36Sopenharmony_ci				.def = 0x13,
13762306a36Sopenharmony_ci			},
13862306a36Sopenharmony_ci		},
13962306a36Sopenharmony_ci	}, {
14062306a36Sopenharmony_ci		.id = 0x0f,
14162306a36Sopenharmony_ci		.name = "avpcarm7r",
14262306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_AVPC,
14362306a36Sopenharmony_ci		.regs = {
14462306a36Sopenharmony_ci			.smmu = {
14562306a36Sopenharmony_ci				.reg = 0x228,
14662306a36Sopenharmony_ci				.bit = 15,
14762306a36Sopenharmony_ci			},
14862306a36Sopenharmony_ci			.la = {
14962306a36Sopenharmony_ci				.reg = 0x2e4,
15062306a36Sopenharmony_ci				.shift = 0,
15162306a36Sopenharmony_ci				.mask = 0xff,
15262306a36Sopenharmony_ci				.def = 0x04,
15362306a36Sopenharmony_ci			},
15462306a36Sopenharmony_ci		},
15562306a36Sopenharmony_ci	}, {
15662306a36Sopenharmony_ci		.id = 0x10,
15762306a36Sopenharmony_ci		.name = "displayhc",
15862306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_DC,
15962306a36Sopenharmony_ci		.regs = {
16062306a36Sopenharmony_ci			.smmu = {
16162306a36Sopenharmony_ci				.reg = 0x228,
16262306a36Sopenharmony_ci				.bit = 16,
16362306a36Sopenharmony_ci			},
16462306a36Sopenharmony_ci			.la = {
16562306a36Sopenharmony_ci				.reg = 0x2f0,
16662306a36Sopenharmony_ci				.shift = 0,
16762306a36Sopenharmony_ci				.mask = 0xff,
16862306a36Sopenharmony_ci				.def = 0x50,
16962306a36Sopenharmony_ci			},
17062306a36Sopenharmony_ci		},
17162306a36Sopenharmony_ci	}, {
17262306a36Sopenharmony_ci		.id = 0x11,
17362306a36Sopenharmony_ci		.name = "displayhcb",
17462306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_DCB,
17562306a36Sopenharmony_ci		.regs = {
17662306a36Sopenharmony_ci			.smmu = {
17762306a36Sopenharmony_ci				.reg = 0x228,
17862306a36Sopenharmony_ci				.bit = 17,
17962306a36Sopenharmony_ci			},
18062306a36Sopenharmony_ci			.la = {
18162306a36Sopenharmony_ci				.reg = 0x2fc,
18262306a36Sopenharmony_ci				.shift = 0,
18362306a36Sopenharmony_ci				.mask = 0xff,
18462306a36Sopenharmony_ci				.def = 0x50,
18562306a36Sopenharmony_ci			},
18662306a36Sopenharmony_ci		},
18762306a36Sopenharmony_ci	}, {
18862306a36Sopenharmony_ci		.id = 0x15,
18962306a36Sopenharmony_ci		.name = "hdar",
19062306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_HDA,
19162306a36Sopenharmony_ci		.regs = {
19262306a36Sopenharmony_ci			.smmu = {
19362306a36Sopenharmony_ci				.reg = 0x228,
19462306a36Sopenharmony_ci				.bit = 21,
19562306a36Sopenharmony_ci			},
19662306a36Sopenharmony_ci			.la = {
19762306a36Sopenharmony_ci				.reg = 0x318,
19862306a36Sopenharmony_ci				.shift = 0,
19962306a36Sopenharmony_ci				.mask = 0xff,
20062306a36Sopenharmony_ci				.def = 0x24,
20162306a36Sopenharmony_ci			},
20262306a36Sopenharmony_ci		},
20362306a36Sopenharmony_ci	}, {
20462306a36Sopenharmony_ci		.id = 0x16,
20562306a36Sopenharmony_ci		.name = "host1xdmar",
20662306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_HC,
20762306a36Sopenharmony_ci		.regs = {
20862306a36Sopenharmony_ci			.smmu = {
20962306a36Sopenharmony_ci				.reg = 0x228,
21062306a36Sopenharmony_ci				.bit = 22,
21162306a36Sopenharmony_ci			},
21262306a36Sopenharmony_ci			.la = {
21362306a36Sopenharmony_ci				.reg = 0x310,
21462306a36Sopenharmony_ci				.shift = 0,
21562306a36Sopenharmony_ci				.mask = 0xff,
21662306a36Sopenharmony_ci				.def = 0x1e,
21762306a36Sopenharmony_ci			},
21862306a36Sopenharmony_ci		},
21962306a36Sopenharmony_ci	}, {
22062306a36Sopenharmony_ci		.id = 0x17,
22162306a36Sopenharmony_ci		.name = "host1xr",
22262306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_HC,
22362306a36Sopenharmony_ci		.regs = {
22462306a36Sopenharmony_ci			.smmu = {
22562306a36Sopenharmony_ci				.reg = 0x228,
22662306a36Sopenharmony_ci				.bit = 23,
22762306a36Sopenharmony_ci			},
22862306a36Sopenharmony_ci			.la = {
22962306a36Sopenharmony_ci				.reg = 0x310,
23062306a36Sopenharmony_ci				.shift = 16,
23162306a36Sopenharmony_ci				.mask = 0xff,
23262306a36Sopenharmony_ci				.def = 0x50,
23362306a36Sopenharmony_ci			},
23462306a36Sopenharmony_ci		},
23562306a36Sopenharmony_ci	}, {
23662306a36Sopenharmony_ci		.id = 0x1c,
23762306a36Sopenharmony_ci		.name = "msencsrd",
23862306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_MSENC,
23962306a36Sopenharmony_ci		.regs = {
24062306a36Sopenharmony_ci			.smmu = {
24162306a36Sopenharmony_ci				.reg = 0x228,
24262306a36Sopenharmony_ci				.bit = 28,
24362306a36Sopenharmony_ci			},
24462306a36Sopenharmony_ci			.la = {
24562306a36Sopenharmony_ci				.reg = 0x328,
24662306a36Sopenharmony_ci				.shift = 0,
24762306a36Sopenharmony_ci				.mask = 0xff,
24862306a36Sopenharmony_ci				.def = 0x23,
24962306a36Sopenharmony_ci			},
25062306a36Sopenharmony_ci		},
25162306a36Sopenharmony_ci	}, {
25262306a36Sopenharmony_ci		.id = 0x1d,
25362306a36Sopenharmony_ci		.name = "ppcsahbdmar",
25462306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_PPCS,
25562306a36Sopenharmony_ci		.regs = {
25662306a36Sopenharmony_ci			.smmu = {
25762306a36Sopenharmony_ci				.reg = 0x228,
25862306a36Sopenharmony_ci				.bit = 29,
25962306a36Sopenharmony_ci			},
26062306a36Sopenharmony_ci			.la = {
26162306a36Sopenharmony_ci				.reg = 0x344,
26262306a36Sopenharmony_ci				.shift = 0,
26362306a36Sopenharmony_ci				.mask = 0xff,
26462306a36Sopenharmony_ci				.def = 0x49,
26562306a36Sopenharmony_ci			},
26662306a36Sopenharmony_ci		},
26762306a36Sopenharmony_ci	}, {
26862306a36Sopenharmony_ci		.id = 0x1e,
26962306a36Sopenharmony_ci		.name = "ppcsahbslvr",
27062306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_PPCS,
27162306a36Sopenharmony_ci		.regs = {
27262306a36Sopenharmony_ci			.smmu = {
27362306a36Sopenharmony_ci				.reg = 0x228,
27462306a36Sopenharmony_ci				.bit = 30,
27562306a36Sopenharmony_ci			},
27662306a36Sopenharmony_ci			.la = {
27762306a36Sopenharmony_ci				.reg = 0x344,
27862306a36Sopenharmony_ci				.shift = 16,
27962306a36Sopenharmony_ci				.mask = 0xff,
28062306a36Sopenharmony_ci				.def = 0x1a,
28162306a36Sopenharmony_ci			},
28262306a36Sopenharmony_ci		},
28362306a36Sopenharmony_ci	}, {
28462306a36Sopenharmony_ci		.id = 0x1f,
28562306a36Sopenharmony_ci		.name = "satar",
28662306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_SATA,
28762306a36Sopenharmony_ci		.regs = {
28862306a36Sopenharmony_ci			.smmu = {
28962306a36Sopenharmony_ci				.reg = 0x228,
29062306a36Sopenharmony_ci				.bit = 31,
29162306a36Sopenharmony_ci			},
29262306a36Sopenharmony_ci			.la = {
29362306a36Sopenharmony_ci				.reg = 0x350,
29462306a36Sopenharmony_ci				.shift = 0,
29562306a36Sopenharmony_ci				.mask = 0xff,
29662306a36Sopenharmony_ci				.def = 0x65,
29762306a36Sopenharmony_ci			},
29862306a36Sopenharmony_ci		},
29962306a36Sopenharmony_ci	}, {
30062306a36Sopenharmony_ci		.id = 0x22,
30162306a36Sopenharmony_ci		.name = "vdebsevr",
30262306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_VDE,
30362306a36Sopenharmony_ci		.regs = {
30462306a36Sopenharmony_ci			.smmu = {
30562306a36Sopenharmony_ci				.reg = 0x22c,
30662306a36Sopenharmony_ci				.bit = 2,
30762306a36Sopenharmony_ci			},
30862306a36Sopenharmony_ci			.la = {
30962306a36Sopenharmony_ci				.reg = 0x354,
31062306a36Sopenharmony_ci				.shift = 0,
31162306a36Sopenharmony_ci				.mask = 0xff,
31262306a36Sopenharmony_ci				.def = 0x4f,
31362306a36Sopenharmony_ci			},
31462306a36Sopenharmony_ci		},
31562306a36Sopenharmony_ci	}, {
31662306a36Sopenharmony_ci		.id = 0x23,
31762306a36Sopenharmony_ci		.name = "vdember",
31862306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_VDE,
31962306a36Sopenharmony_ci		.regs = {
32062306a36Sopenharmony_ci			.smmu = {
32162306a36Sopenharmony_ci				.reg = 0x22c,
32262306a36Sopenharmony_ci				.bit = 3,
32362306a36Sopenharmony_ci			},
32462306a36Sopenharmony_ci			.la = {
32562306a36Sopenharmony_ci				.reg = 0x354,
32662306a36Sopenharmony_ci				.shift = 16,
32762306a36Sopenharmony_ci				.mask = 0xff,
32862306a36Sopenharmony_ci				.def = 0x3d,
32962306a36Sopenharmony_ci			},
33062306a36Sopenharmony_ci		},
33162306a36Sopenharmony_ci	}, {
33262306a36Sopenharmony_ci		.id = 0x24,
33362306a36Sopenharmony_ci		.name = "vdemcer",
33462306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_VDE,
33562306a36Sopenharmony_ci		.regs = {
33662306a36Sopenharmony_ci			.smmu = {
33762306a36Sopenharmony_ci				.reg = 0x22c,
33862306a36Sopenharmony_ci				.bit = 4,
33962306a36Sopenharmony_ci			},
34062306a36Sopenharmony_ci			.la = {
34162306a36Sopenharmony_ci				.reg = 0x358,
34262306a36Sopenharmony_ci				.shift = 0,
34362306a36Sopenharmony_ci				.mask = 0xff,
34462306a36Sopenharmony_ci				.def = 0x66,
34562306a36Sopenharmony_ci			},
34662306a36Sopenharmony_ci		},
34762306a36Sopenharmony_ci	}, {
34862306a36Sopenharmony_ci		.id = 0x25,
34962306a36Sopenharmony_ci		.name = "vdetper",
35062306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_VDE,
35162306a36Sopenharmony_ci		.regs = {
35262306a36Sopenharmony_ci			.smmu = {
35362306a36Sopenharmony_ci				.reg = 0x22c,
35462306a36Sopenharmony_ci				.bit = 5,
35562306a36Sopenharmony_ci			},
35662306a36Sopenharmony_ci			.la = {
35762306a36Sopenharmony_ci				.reg = 0x358,
35862306a36Sopenharmony_ci				.shift = 16,
35962306a36Sopenharmony_ci				.mask = 0xff,
36062306a36Sopenharmony_ci				.def = 0xa5,
36162306a36Sopenharmony_ci			},
36262306a36Sopenharmony_ci		},
36362306a36Sopenharmony_ci	}, {
36462306a36Sopenharmony_ci		.id = 0x26,
36562306a36Sopenharmony_ci		.name = "mpcorelpr",
36662306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_MPCORELP,
36762306a36Sopenharmony_ci		.regs = {
36862306a36Sopenharmony_ci			.la = {
36962306a36Sopenharmony_ci				.reg = 0x324,
37062306a36Sopenharmony_ci				.shift = 0,
37162306a36Sopenharmony_ci				.mask = 0xff,
37262306a36Sopenharmony_ci				.def = 0x04,
37362306a36Sopenharmony_ci			},
37462306a36Sopenharmony_ci		},
37562306a36Sopenharmony_ci	}, {
37662306a36Sopenharmony_ci		.id = 0x27,
37762306a36Sopenharmony_ci		.name = "mpcorer",
37862306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_MPCORE,
37962306a36Sopenharmony_ci		.regs = {
38062306a36Sopenharmony_ci			.la = {
38162306a36Sopenharmony_ci				.reg = 0x320,
38262306a36Sopenharmony_ci				.shift = 0,
38362306a36Sopenharmony_ci				.mask = 0xff,
38462306a36Sopenharmony_ci				.def = 0x04,
38562306a36Sopenharmony_ci			},
38662306a36Sopenharmony_ci		},
38762306a36Sopenharmony_ci	}, {
38862306a36Sopenharmony_ci		.id = 0x2b,
38962306a36Sopenharmony_ci		.name = "msencswr",
39062306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_MSENC,
39162306a36Sopenharmony_ci		.regs = {
39262306a36Sopenharmony_ci			.smmu = {
39362306a36Sopenharmony_ci				.reg = 0x22c,
39462306a36Sopenharmony_ci				.bit = 11,
39562306a36Sopenharmony_ci			},
39662306a36Sopenharmony_ci			.la = {
39762306a36Sopenharmony_ci				.reg = 0x328,
39862306a36Sopenharmony_ci				.shift = 16,
39962306a36Sopenharmony_ci				.mask = 0xff,
40062306a36Sopenharmony_ci				.def = 0x80,
40162306a36Sopenharmony_ci			},
40262306a36Sopenharmony_ci		},
40362306a36Sopenharmony_ci	}, {
40462306a36Sopenharmony_ci		.id = 0x31,
40562306a36Sopenharmony_ci		.name = "afiw",
40662306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_AFI,
40762306a36Sopenharmony_ci		.regs = {
40862306a36Sopenharmony_ci			.smmu = {
40962306a36Sopenharmony_ci				.reg = 0x22c,
41062306a36Sopenharmony_ci				.bit = 17,
41162306a36Sopenharmony_ci			},
41262306a36Sopenharmony_ci			.la = {
41362306a36Sopenharmony_ci				.reg = 0x2e0,
41462306a36Sopenharmony_ci				.shift = 16,
41562306a36Sopenharmony_ci				.mask = 0xff,
41662306a36Sopenharmony_ci				.def = 0x80,
41762306a36Sopenharmony_ci			},
41862306a36Sopenharmony_ci		},
41962306a36Sopenharmony_ci	}, {
42062306a36Sopenharmony_ci		.id = 0x32,
42162306a36Sopenharmony_ci		.name = "avpcarm7w",
42262306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_AVPC,
42362306a36Sopenharmony_ci		.regs = {
42462306a36Sopenharmony_ci			.smmu = {
42562306a36Sopenharmony_ci				.reg = 0x22c,
42662306a36Sopenharmony_ci				.bit = 18,
42762306a36Sopenharmony_ci			},
42862306a36Sopenharmony_ci			.la = {
42962306a36Sopenharmony_ci				.reg = 0x2e4,
43062306a36Sopenharmony_ci				.shift = 16,
43162306a36Sopenharmony_ci				.mask = 0xff,
43262306a36Sopenharmony_ci				.def = 0x80,
43362306a36Sopenharmony_ci			},
43462306a36Sopenharmony_ci		},
43562306a36Sopenharmony_ci	}, {
43662306a36Sopenharmony_ci		.id = 0x35,
43762306a36Sopenharmony_ci		.name = "hdaw",
43862306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_HDA,
43962306a36Sopenharmony_ci		.regs = {
44062306a36Sopenharmony_ci			.smmu = {
44162306a36Sopenharmony_ci				.reg = 0x22c,
44262306a36Sopenharmony_ci				.bit = 21,
44362306a36Sopenharmony_ci			},
44462306a36Sopenharmony_ci			.la = {
44562306a36Sopenharmony_ci				.reg = 0x318,
44662306a36Sopenharmony_ci				.shift = 16,
44762306a36Sopenharmony_ci				.mask = 0xff,
44862306a36Sopenharmony_ci				.def = 0x80,
44962306a36Sopenharmony_ci			},
45062306a36Sopenharmony_ci		},
45162306a36Sopenharmony_ci	}, {
45262306a36Sopenharmony_ci		.id = 0x36,
45362306a36Sopenharmony_ci		.name = "host1xw",
45462306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_HC,
45562306a36Sopenharmony_ci		.regs = {
45662306a36Sopenharmony_ci			.smmu = {
45762306a36Sopenharmony_ci				.reg = 0x22c,
45862306a36Sopenharmony_ci				.bit = 22,
45962306a36Sopenharmony_ci			},
46062306a36Sopenharmony_ci			.la = {
46162306a36Sopenharmony_ci				.reg = 0x314,
46262306a36Sopenharmony_ci				.shift = 0,
46362306a36Sopenharmony_ci				.mask = 0xff,
46462306a36Sopenharmony_ci				.def = 0x80,
46562306a36Sopenharmony_ci			},
46662306a36Sopenharmony_ci		},
46762306a36Sopenharmony_ci	}, {
46862306a36Sopenharmony_ci		.id = 0x38,
46962306a36Sopenharmony_ci		.name = "mpcorelpw",
47062306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_MPCORELP,
47162306a36Sopenharmony_ci		.regs = {
47262306a36Sopenharmony_ci			.la = {
47362306a36Sopenharmony_ci				.reg = 0x324,
47462306a36Sopenharmony_ci				.shift = 16,
47562306a36Sopenharmony_ci				.mask = 0xff,
47662306a36Sopenharmony_ci				.def = 0x80,
47762306a36Sopenharmony_ci			},
47862306a36Sopenharmony_ci		},
47962306a36Sopenharmony_ci	}, {
48062306a36Sopenharmony_ci		.id = 0x39,
48162306a36Sopenharmony_ci		.name = "mpcorew",
48262306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_MPCORE,
48362306a36Sopenharmony_ci		.regs = {
48462306a36Sopenharmony_ci			.la = {
48562306a36Sopenharmony_ci				.reg = 0x320,
48662306a36Sopenharmony_ci				.shift = 16,
48762306a36Sopenharmony_ci				.mask = 0xff,
48862306a36Sopenharmony_ci				.def = 0x80,
48962306a36Sopenharmony_ci			},
49062306a36Sopenharmony_ci		},
49162306a36Sopenharmony_ci	}, {
49262306a36Sopenharmony_ci		.id = 0x3b,
49362306a36Sopenharmony_ci		.name = "ppcsahbdmaw",
49462306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_PPCS,
49562306a36Sopenharmony_ci		.regs = {
49662306a36Sopenharmony_ci			.smmu = {
49762306a36Sopenharmony_ci				.reg = 0x22c,
49862306a36Sopenharmony_ci				.bit = 27,
49962306a36Sopenharmony_ci			},
50062306a36Sopenharmony_ci			.la = {
50162306a36Sopenharmony_ci				.reg = 0x348,
50262306a36Sopenharmony_ci				.shift = 0,
50362306a36Sopenharmony_ci				.mask = 0xff,
50462306a36Sopenharmony_ci				.def = 0x80,
50562306a36Sopenharmony_ci			},
50662306a36Sopenharmony_ci		},
50762306a36Sopenharmony_ci	}, {
50862306a36Sopenharmony_ci		.id = 0x3c,
50962306a36Sopenharmony_ci		.name = "ppcsahbslvw",
51062306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_PPCS,
51162306a36Sopenharmony_ci		.regs = {
51262306a36Sopenharmony_ci			.smmu = {
51362306a36Sopenharmony_ci				.reg = 0x22c,
51462306a36Sopenharmony_ci				.bit = 28,
51562306a36Sopenharmony_ci			},
51662306a36Sopenharmony_ci			.la = {
51762306a36Sopenharmony_ci				.reg = 0x348,
51862306a36Sopenharmony_ci				.shift = 16,
51962306a36Sopenharmony_ci				.mask = 0xff,
52062306a36Sopenharmony_ci				.def = 0x80,
52162306a36Sopenharmony_ci			},
52262306a36Sopenharmony_ci		},
52362306a36Sopenharmony_ci	}, {
52462306a36Sopenharmony_ci		.id = 0x3d,
52562306a36Sopenharmony_ci		.name = "sataw",
52662306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_SATA,
52762306a36Sopenharmony_ci		.regs = {
52862306a36Sopenharmony_ci			.smmu = {
52962306a36Sopenharmony_ci				.reg = 0x22c,
53062306a36Sopenharmony_ci				.bit = 29,
53162306a36Sopenharmony_ci			},
53262306a36Sopenharmony_ci			.la = {
53362306a36Sopenharmony_ci				.reg = 0x350,
53462306a36Sopenharmony_ci				.shift = 16,
53562306a36Sopenharmony_ci				.mask = 0xff,
53662306a36Sopenharmony_ci				.def = 0x65,
53762306a36Sopenharmony_ci			},
53862306a36Sopenharmony_ci		},
53962306a36Sopenharmony_ci	}, {
54062306a36Sopenharmony_ci		.id = 0x3e,
54162306a36Sopenharmony_ci		.name = "vdebsevw",
54262306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_VDE,
54362306a36Sopenharmony_ci		.regs = {
54462306a36Sopenharmony_ci			.smmu = {
54562306a36Sopenharmony_ci				.reg = 0x22c,
54662306a36Sopenharmony_ci				.bit = 30,
54762306a36Sopenharmony_ci			},
54862306a36Sopenharmony_ci			.la = {
54962306a36Sopenharmony_ci				.reg = 0x35c,
55062306a36Sopenharmony_ci				.shift = 0,
55162306a36Sopenharmony_ci				.mask = 0xff,
55262306a36Sopenharmony_ci				.def = 0x80,
55362306a36Sopenharmony_ci			},
55462306a36Sopenharmony_ci		},
55562306a36Sopenharmony_ci	}, {
55662306a36Sopenharmony_ci		.id = 0x3f,
55762306a36Sopenharmony_ci		.name = "vdedbgw",
55862306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_VDE,
55962306a36Sopenharmony_ci		.regs = {
56062306a36Sopenharmony_ci			.smmu = {
56162306a36Sopenharmony_ci				.reg = 0x22c,
56262306a36Sopenharmony_ci				.bit = 31,
56362306a36Sopenharmony_ci			},
56462306a36Sopenharmony_ci			.la = {
56562306a36Sopenharmony_ci				.reg = 0x35c,
56662306a36Sopenharmony_ci				.shift = 16,
56762306a36Sopenharmony_ci				.mask = 0xff,
56862306a36Sopenharmony_ci				.def = 0x80,
56962306a36Sopenharmony_ci			},
57062306a36Sopenharmony_ci		},
57162306a36Sopenharmony_ci	}, {
57262306a36Sopenharmony_ci		.id = 0x40,
57362306a36Sopenharmony_ci		.name = "vdembew",
57462306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_VDE,
57562306a36Sopenharmony_ci		.regs = {
57662306a36Sopenharmony_ci			.smmu = {
57762306a36Sopenharmony_ci				.reg = 0x230,
57862306a36Sopenharmony_ci				.bit = 0,
57962306a36Sopenharmony_ci			},
58062306a36Sopenharmony_ci			.la = {
58162306a36Sopenharmony_ci				.reg = 0x360,
58262306a36Sopenharmony_ci				.shift = 0,
58362306a36Sopenharmony_ci				.mask = 0xff,
58462306a36Sopenharmony_ci				.def = 0x80,
58562306a36Sopenharmony_ci			},
58662306a36Sopenharmony_ci		},
58762306a36Sopenharmony_ci	}, {
58862306a36Sopenharmony_ci		.id = 0x41,
58962306a36Sopenharmony_ci		.name = "vdetpmw",
59062306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_VDE,
59162306a36Sopenharmony_ci		.regs = {
59262306a36Sopenharmony_ci			.smmu = {
59362306a36Sopenharmony_ci				.reg = 0x230,
59462306a36Sopenharmony_ci				.bit = 1,
59562306a36Sopenharmony_ci			},
59662306a36Sopenharmony_ci			.la = {
59762306a36Sopenharmony_ci				.reg = 0x360,
59862306a36Sopenharmony_ci				.shift = 16,
59962306a36Sopenharmony_ci				.mask = 0xff,
60062306a36Sopenharmony_ci				.def = 0x80,
60162306a36Sopenharmony_ci			},
60262306a36Sopenharmony_ci		},
60362306a36Sopenharmony_ci	}, {
60462306a36Sopenharmony_ci		.id = 0x44,
60562306a36Sopenharmony_ci		.name = "ispra",
60662306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_ISP2,
60762306a36Sopenharmony_ci		.regs = {
60862306a36Sopenharmony_ci			.smmu = {
60962306a36Sopenharmony_ci				.reg = 0x230,
61062306a36Sopenharmony_ci				.bit = 4,
61162306a36Sopenharmony_ci			},
61262306a36Sopenharmony_ci			.la = {
61362306a36Sopenharmony_ci				.reg = 0x370,
61462306a36Sopenharmony_ci				.shift = 0,
61562306a36Sopenharmony_ci				.mask = 0xff,
61662306a36Sopenharmony_ci				.def = 0x18,
61762306a36Sopenharmony_ci			},
61862306a36Sopenharmony_ci		},
61962306a36Sopenharmony_ci	}, {
62062306a36Sopenharmony_ci		.id = 0x46,
62162306a36Sopenharmony_ci		.name = "ispwa",
62262306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_ISP2,
62362306a36Sopenharmony_ci		.regs = {
62462306a36Sopenharmony_ci			.smmu = {
62562306a36Sopenharmony_ci				.reg = 0x230,
62662306a36Sopenharmony_ci				.bit = 6,
62762306a36Sopenharmony_ci			},
62862306a36Sopenharmony_ci			.la = {
62962306a36Sopenharmony_ci				.reg = 0x374,
63062306a36Sopenharmony_ci				.shift = 0,
63162306a36Sopenharmony_ci				.mask = 0xff,
63262306a36Sopenharmony_ci				.def = 0x80,
63362306a36Sopenharmony_ci			},
63462306a36Sopenharmony_ci		},
63562306a36Sopenharmony_ci	}, {
63662306a36Sopenharmony_ci		.id = 0x47,
63762306a36Sopenharmony_ci		.name = "ispwb",
63862306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_ISP2,
63962306a36Sopenharmony_ci		.regs = {
64062306a36Sopenharmony_ci			.smmu = {
64162306a36Sopenharmony_ci				.reg = 0x230,
64262306a36Sopenharmony_ci				.bit = 7,
64362306a36Sopenharmony_ci			},
64462306a36Sopenharmony_ci			.la = {
64562306a36Sopenharmony_ci				.reg = 0x374,
64662306a36Sopenharmony_ci				.shift = 16,
64762306a36Sopenharmony_ci				.mask = 0xff,
64862306a36Sopenharmony_ci				.def = 0x80,
64962306a36Sopenharmony_ci			},
65062306a36Sopenharmony_ci		},
65162306a36Sopenharmony_ci	}, {
65262306a36Sopenharmony_ci		.id = 0x4a,
65362306a36Sopenharmony_ci		.name = "xusb_hostr",
65462306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_XUSB_HOST,
65562306a36Sopenharmony_ci		.regs = {
65662306a36Sopenharmony_ci			.smmu = {
65762306a36Sopenharmony_ci				.reg = 0x230,
65862306a36Sopenharmony_ci				.bit = 10,
65962306a36Sopenharmony_ci			},
66062306a36Sopenharmony_ci			.la = {
66162306a36Sopenharmony_ci				.reg = 0x37c,
66262306a36Sopenharmony_ci				.shift = 0,
66362306a36Sopenharmony_ci				.mask = 0xff,
66462306a36Sopenharmony_ci				.def = 0x39,
66562306a36Sopenharmony_ci			},
66662306a36Sopenharmony_ci		},
66762306a36Sopenharmony_ci	}, {
66862306a36Sopenharmony_ci		.id = 0x4b,
66962306a36Sopenharmony_ci		.name = "xusb_hostw",
67062306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_XUSB_HOST,
67162306a36Sopenharmony_ci		.regs = {
67262306a36Sopenharmony_ci			.smmu = {
67362306a36Sopenharmony_ci				.reg = 0x230,
67462306a36Sopenharmony_ci				.bit = 11,
67562306a36Sopenharmony_ci			},
67662306a36Sopenharmony_ci			.la = {
67762306a36Sopenharmony_ci				.reg = 0x37c,
67862306a36Sopenharmony_ci				.shift = 16,
67962306a36Sopenharmony_ci				.mask = 0xff,
68062306a36Sopenharmony_ci				.def = 0x80,
68162306a36Sopenharmony_ci			},
68262306a36Sopenharmony_ci		},
68362306a36Sopenharmony_ci	}, {
68462306a36Sopenharmony_ci		.id = 0x4c,
68562306a36Sopenharmony_ci		.name = "xusb_devr",
68662306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_XUSB_DEV,
68762306a36Sopenharmony_ci		.regs = {
68862306a36Sopenharmony_ci			.smmu = {
68962306a36Sopenharmony_ci				.reg = 0x230,
69062306a36Sopenharmony_ci				.bit = 12,
69162306a36Sopenharmony_ci			},
69262306a36Sopenharmony_ci			.la = {
69362306a36Sopenharmony_ci				.reg = 0x380,
69462306a36Sopenharmony_ci				.shift = 0,
69562306a36Sopenharmony_ci				.mask = 0xff,
69662306a36Sopenharmony_ci				.def = 0x39,
69762306a36Sopenharmony_ci			},
69862306a36Sopenharmony_ci		},
69962306a36Sopenharmony_ci	}, {
70062306a36Sopenharmony_ci		.id = 0x4d,
70162306a36Sopenharmony_ci		.name = "xusb_devw",
70262306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_XUSB_DEV,
70362306a36Sopenharmony_ci		.regs = {
70462306a36Sopenharmony_ci			.smmu = {
70562306a36Sopenharmony_ci				.reg = 0x230,
70662306a36Sopenharmony_ci				.bit = 13,
70762306a36Sopenharmony_ci			},
70862306a36Sopenharmony_ci			.la = {
70962306a36Sopenharmony_ci				.reg = 0x380,
71062306a36Sopenharmony_ci				.shift = 16,
71162306a36Sopenharmony_ci				.mask = 0xff,
71262306a36Sopenharmony_ci				.def = 0x80,
71362306a36Sopenharmony_ci			},
71462306a36Sopenharmony_ci		},
71562306a36Sopenharmony_ci	}, {
71662306a36Sopenharmony_ci		.id = 0x4e,
71762306a36Sopenharmony_ci		.name = "isprab",
71862306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_ISP2B,
71962306a36Sopenharmony_ci		.regs = {
72062306a36Sopenharmony_ci			.smmu = {
72162306a36Sopenharmony_ci				.reg = 0x230,
72262306a36Sopenharmony_ci				.bit = 14,
72362306a36Sopenharmony_ci			},
72462306a36Sopenharmony_ci			.la = {
72562306a36Sopenharmony_ci				.reg = 0x384,
72662306a36Sopenharmony_ci				.shift = 0,
72762306a36Sopenharmony_ci				.mask = 0xff,
72862306a36Sopenharmony_ci				.def = 0x18,
72962306a36Sopenharmony_ci			},
73062306a36Sopenharmony_ci		},
73162306a36Sopenharmony_ci	}, {
73262306a36Sopenharmony_ci		.id = 0x50,
73362306a36Sopenharmony_ci		.name = "ispwab",
73462306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_ISP2B,
73562306a36Sopenharmony_ci		.regs = {
73662306a36Sopenharmony_ci			.smmu = {
73762306a36Sopenharmony_ci				.reg = 0x230,
73862306a36Sopenharmony_ci				.bit = 16,
73962306a36Sopenharmony_ci			},
74062306a36Sopenharmony_ci			.la = {
74162306a36Sopenharmony_ci				.reg = 0x388,
74262306a36Sopenharmony_ci				.shift = 0,
74362306a36Sopenharmony_ci				.mask = 0xff,
74462306a36Sopenharmony_ci				.def = 0x80,
74562306a36Sopenharmony_ci			},
74662306a36Sopenharmony_ci		},
74762306a36Sopenharmony_ci	}, {
74862306a36Sopenharmony_ci		.id = 0x51,
74962306a36Sopenharmony_ci		.name = "ispwbb",
75062306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_ISP2B,
75162306a36Sopenharmony_ci		.regs = {
75262306a36Sopenharmony_ci			.smmu = {
75362306a36Sopenharmony_ci				.reg = 0x230,
75462306a36Sopenharmony_ci				.bit = 17,
75562306a36Sopenharmony_ci			},
75662306a36Sopenharmony_ci			.la = {
75762306a36Sopenharmony_ci				.reg = 0x388,
75862306a36Sopenharmony_ci				.shift = 16,
75962306a36Sopenharmony_ci				.mask = 0xff,
76062306a36Sopenharmony_ci				.def = 0x80,
76162306a36Sopenharmony_ci			},
76262306a36Sopenharmony_ci		},
76362306a36Sopenharmony_ci	}, {
76462306a36Sopenharmony_ci		.id = 0x54,
76562306a36Sopenharmony_ci		.name = "tsecsrd",
76662306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_TSEC,
76762306a36Sopenharmony_ci		.regs = {
76862306a36Sopenharmony_ci			.smmu = {
76962306a36Sopenharmony_ci				.reg = 0x230,
77062306a36Sopenharmony_ci				.bit = 20,
77162306a36Sopenharmony_ci			},
77262306a36Sopenharmony_ci			.la = {
77362306a36Sopenharmony_ci				.reg = 0x390,
77462306a36Sopenharmony_ci				.shift = 0,
77562306a36Sopenharmony_ci				.mask = 0xff,
77662306a36Sopenharmony_ci				.def = 0x9b,
77762306a36Sopenharmony_ci			},
77862306a36Sopenharmony_ci		},
77962306a36Sopenharmony_ci	}, {
78062306a36Sopenharmony_ci		.id = 0x55,
78162306a36Sopenharmony_ci		.name = "tsecswr",
78262306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_TSEC,
78362306a36Sopenharmony_ci		.regs = {
78462306a36Sopenharmony_ci			.smmu = {
78562306a36Sopenharmony_ci				.reg = 0x230,
78662306a36Sopenharmony_ci				.bit = 21,
78762306a36Sopenharmony_ci			},
78862306a36Sopenharmony_ci			.la = {
78962306a36Sopenharmony_ci				.reg = 0x390,
79062306a36Sopenharmony_ci				.shift = 16,
79162306a36Sopenharmony_ci				.mask = 0xff,
79262306a36Sopenharmony_ci				.def = 0x80,
79362306a36Sopenharmony_ci			},
79462306a36Sopenharmony_ci		},
79562306a36Sopenharmony_ci	}, {
79662306a36Sopenharmony_ci		.id = 0x56,
79762306a36Sopenharmony_ci		.name = "a9avpscr",
79862306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_A9AVP,
79962306a36Sopenharmony_ci		.regs = {
80062306a36Sopenharmony_ci			.smmu = {
80162306a36Sopenharmony_ci				.reg = 0x230,
80262306a36Sopenharmony_ci				.bit = 22,
80362306a36Sopenharmony_ci			},
80462306a36Sopenharmony_ci			.la = {
80562306a36Sopenharmony_ci				.reg = 0x3a4,
80662306a36Sopenharmony_ci				.shift = 0,
80762306a36Sopenharmony_ci				.mask = 0xff,
80862306a36Sopenharmony_ci				.def = 0x04,
80962306a36Sopenharmony_ci			},
81062306a36Sopenharmony_ci		},
81162306a36Sopenharmony_ci	}, {
81262306a36Sopenharmony_ci		.id = 0x57,
81362306a36Sopenharmony_ci		.name = "a9avpscw",
81462306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_A9AVP,
81562306a36Sopenharmony_ci		.regs = {
81662306a36Sopenharmony_ci			.smmu = {
81762306a36Sopenharmony_ci				.reg = 0x230,
81862306a36Sopenharmony_ci				.bit = 23,
81962306a36Sopenharmony_ci			},
82062306a36Sopenharmony_ci			.la = {
82162306a36Sopenharmony_ci				.reg = 0x3a4,
82262306a36Sopenharmony_ci				.shift = 16,
82362306a36Sopenharmony_ci				.mask = 0xff,
82462306a36Sopenharmony_ci				.def = 0x80,
82562306a36Sopenharmony_ci			},
82662306a36Sopenharmony_ci		},
82762306a36Sopenharmony_ci	}, {
82862306a36Sopenharmony_ci		.id = 0x58,
82962306a36Sopenharmony_ci		.name = "gpusrd",
83062306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_GPU,
83162306a36Sopenharmony_ci		.regs = {
83262306a36Sopenharmony_ci			.smmu = {
83362306a36Sopenharmony_ci				/* read-only */
83462306a36Sopenharmony_ci				.reg = 0x230,
83562306a36Sopenharmony_ci				.bit = 24,
83662306a36Sopenharmony_ci			},
83762306a36Sopenharmony_ci			.la = {
83862306a36Sopenharmony_ci				.reg = 0x3c8,
83962306a36Sopenharmony_ci				.shift = 0,
84062306a36Sopenharmony_ci				.mask = 0xff,
84162306a36Sopenharmony_ci				.def = 0x1a,
84262306a36Sopenharmony_ci			},
84362306a36Sopenharmony_ci		},
84462306a36Sopenharmony_ci	}, {
84562306a36Sopenharmony_ci		.id = 0x59,
84662306a36Sopenharmony_ci		.name = "gpuswr",
84762306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_GPU,
84862306a36Sopenharmony_ci		.regs = {
84962306a36Sopenharmony_ci			.smmu = {
85062306a36Sopenharmony_ci				/* read-only */
85162306a36Sopenharmony_ci				.reg = 0x230,
85262306a36Sopenharmony_ci				.bit = 25,
85362306a36Sopenharmony_ci			},
85462306a36Sopenharmony_ci			.la = {
85562306a36Sopenharmony_ci				.reg = 0x3c8,
85662306a36Sopenharmony_ci				.shift = 16,
85762306a36Sopenharmony_ci				.mask = 0xff,
85862306a36Sopenharmony_ci				.def = 0x80,
85962306a36Sopenharmony_ci			},
86062306a36Sopenharmony_ci		},
86162306a36Sopenharmony_ci	}, {
86262306a36Sopenharmony_ci		.id = 0x5a,
86362306a36Sopenharmony_ci		.name = "displayt",
86462306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_DC,
86562306a36Sopenharmony_ci		.regs = {
86662306a36Sopenharmony_ci			.smmu = {
86762306a36Sopenharmony_ci				.reg = 0x230,
86862306a36Sopenharmony_ci				.bit = 26,
86962306a36Sopenharmony_ci			},
87062306a36Sopenharmony_ci			.la = {
87162306a36Sopenharmony_ci				.reg = 0x2f0,
87262306a36Sopenharmony_ci				.shift = 16,
87362306a36Sopenharmony_ci				.mask = 0xff,
87462306a36Sopenharmony_ci				.def = 0x50,
87562306a36Sopenharmony_ci			},
87662306a36Sopenharmony_ci		},
87762306a36Sopenharmony_ci	}, {
87862306a36Sopenharmony_ci		.id = 0x60,
87962306a36Sopenharmony_ci		.name = "sdmmcra",
88062306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_SDMMC1A,
88162306a36Sopenharmony_ci		.regs = {
88262306a36Sopenharmony_ci			.smmu = {
88362306a36Sopenharmony_ci				.reg = 0x234,
88462306a36Sopenharmony_ci				.bit = 0,
88562306a36Sopenharmony_ci			},
88662306a36Sopenharmony_ci			.la = {
88762306a36Sopenharmony_ci				.reg = 0x3b8,
88862306a36Sopenharmony_ci				.shift = 0,
88962306a36Sopenharmony_ci				.mask = 0xff,
89062306a36Sopenharmony_ci				.def = 0x49,
89162306a36Sopenharmony_ci			},
89262306a36Sopenharmony_ci		},
89362306a36Sopenharmony_ci	}, {
89462306a36Sopenharmony_ci		.id = 0x61,
89562306a36Sopenharmony_ci		.name = "sdmmcraa",
89662306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_SDMMC2A,
89762306a36Sopenharmony_ci		.regs = {
89862306a36Sopenharmony_ci			.smmu = {
89962306a36Sopenharmony_ci				.reg = 0x234,
90062306a36Sopenharmony_ci				.bit = 1,
90162306a36Sopenharmony_ci			},
90262306a36Sopenharmony_ci			.la = {
90362306a36Sopenharmony_ci				.reg = 0x3bc,
90462306a36Sopenharmony_ci				.shift = 0,
90562306a36Sopenharmony_ci				.mask = 0xff,
90662306a36Sopenharmony_ci				.def = 0x49,
90762306a36Sopenharmony_ci			},
90862306a36Sopenharmony_ci		},
90962306a36Sopenharmony_ci	}, {
91062306a36Sopenharmony_ci		.id = 0x62,
91162306a36Sopenharmony_ci		.name = "sdmmcr",
91262306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_SDMMC3A,
91362306a36Sopenharmony_ci		.regs = {
91462306a36Sopenharmony_ci			.smmu = {
91562306a36Sopenharmony_ci				.reg = 0x234,
91662306a36Sopenharmony_ci				.bit = 2,
91762306a36Sopenharmony_ci			},
91862306a36Sopenharmony_ci			.la = {
91962306a36Sopenharmony_ci				.reg = 0x3c0,
92062306a36Sopenharmony_ci				.shift = 0,
92162306a36Sopenharmony_ci				.mask = 0xff,
92262306a36Sopenharmony_ci				.def = 0x49,
92362306a36Sopenharmony_ci			},
92462306a36Sopenharmony_ci		},
92562306a36Sopenharmony_ci	}, {
92662306a36Sopenharmony_ci		.id = 0x63,
92762306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_SDMMC4A,
92862306a36Sopenharmony_ci		.name = "sdmmcrab",
92962306a36Sopenharmony_ci		.regs = {
93062306a36Sopenharmony_ci			.smmu = {
93162306a36Sopenharmony_ci				.reg = 0x234,
93262306a36Sopenharmony_ci				.bit = 3,
93362306a36Sopenharmony_ci			},
93462306a36Sopenharmony_ci			.la = {
93562306a36Sopenharmony_ci				.reg = 0x3c4,
93662306a36Sopenharmony_ci				.shift = 0,
93762306a36Sopenharmony_ci				.mask = 0xff,
93862306a36Sopenharmony_ci				.def = 0x49,
93962306a36Sopenharmony_ci			},
94062306a36Sopenharmony_ci		},
94162306a36Sopenharmony_ci	}, {
94262306a36Sopenharmony_ci		.id = 0x64,
94362306a36Sopenharmony_ci		.name = "sdmmcwa",
94462306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_SDMMC1A,
94562306a36Sopenharmony_ci		.regs = {
94662306a36Sopenharmony_ci			.smmu = {
94762306a36Sopenharmony_ci				.reg = 0x234,
94862306a36Sopenharmony_ci				.bit = 4,
94962306a36Sopenharmony_ci			},
95062306a36Sopenharmony_ci			.la = {
95162306a36Sopenharmony_ci				.reg = 0x3b8,
95262306a36Sopenharmony_ci				.shift = 16,
95362306a36Sopenharmony_ci				.mask = 0xff,
95462306a36Sopenharmony_ci				.def = 0x80,
95562306a36Sopenharmony_ci			},
95662306a36Sopenharmony_ci		},
95762306a36Sopenharmony_ci	}, {
95862306a36Sopenharmony_ci		.id = 0x65,
95962306a36Sopenharmony_ci		.name = "sdmmcwaa",
96062306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_SDMMC2A,
96162306a36Sopenharmony_ci		.regs = {
96262306a36Sopenharmony_ci			.smmu = {
96362306a36Sopenharmony_ci				.reg = 0x234,
96462306a36Sopenharmony_ci				.bit = 5,
96562306a36Sopenharmony_ci			},
96662306a36Sopenharmony_ci			.la = {
96762306a36Sopenharmony_ci				.reg = 0x3bc,
96862306a36Sopenharmony_ci				.shift = 16,
96962306a36Sopenharmony_ci				.mask = 0xff,
97062306a36Sopenharmony_ci				.def = 0x80,
97162306a36Sopenharmony_ci			},
97262306a36Sopenharmony_ci		},
97362306a36Sopenharmony_ci	}, {
97462306a36Sopenharmony_ci		.id = 0x66,
97562306a36Sopenharmony_ci		.name = "sdmmcw",
97662306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_SDMMC3A,
97762306a36Sopenharmony_ci		.regs = {
97862306a36Sopenharmony_ci			.smmu = {
97962306a36Sopenharmony_ci				.reg = 0x234,
98062306a36Sopenharmony_ci				.bit = 6,
98162306a36Sopenharmony_ci			},
98262306a36Sopenharmony_ci			.la = {
98362306a36Sopenharmony_ci				.reg = 0x3c0,
98462306a36Sopenharmony_ci				.shift = 16,
98562306a36Sopenharmony_ci				.mask = 0xff,
98662306a36Sopenharmony_ci				.def = 0x80,
98762306a36Sopenharmony_ci			},
98862306a36Sopenharmony_ci		},
98962306a36Sopenharmony_ci	}, {
99062306a36Sopenharmony_ci		.id = 0x67,
99162306a36Sopenharmony_ci		.name = "sdmmcwab",
99262306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_SDMMC4A,
99362306a36Sopenharmony_ci		.regs = {
99462306a36Sopenharmony_ci			.smmu = {
99562306a36Sopenharmony_ci				.reg = 0x234,
99662306a36Sopenharmony_ci				.bit = 7,
99762306a36Sopenharmony_ci			},
99862306a36Sopenharmony_ci			.la = {
99962306a36Sopenharmony_ci				.reg = 0x3c4,
100062306a36Sopenharmony_ci				.shift = 16,
100162306a36Sopenharmony_ci				.mask = 0xff,
100262306a36Sopenharmony_ci				.def = 0x80,
100362306a36Sopenharmony_ci			},
100462306a36Sopenharmony_ci		},
100562306a36Sopenharmony_ci	}, {
100662306a36Sopenharmony_ci		.id = 0x6c,
100762306a36Sopenharmony_ci		.name = "vicsrd",
100862306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_VIC,
100962306a36Sopenharmony_ci		.regs = {
101062306a36Sopenharmony_ci			.smmu = {
101162306a36Sopenharmony_ci				.reg = 0x234,
101262306a36Sopenharmony_ci				.bit = 12,
101362306a36Sopenharmony_ci			},
101462306a36Sopenharmony_ci			.la = {
101562306a36Sopenharmony_ci				.reg = 0x394,
101662306a36Sopenharmony_ci				.shift = 0,
101762306a36Sopenharmony_ci				.mask = 0xff,
101862306a36Sopenharmony_ci				.def = 0x1a,
101962306a36Sopenharmony_ci			},
102062306a36Sopenharmony_ci		},
102162306a36Sopenharmony_ci	}, {
102262306a36Sopenharmony_ci		.id = 0x6d,
102362306a36Sopenharmony_ci		.name = "vicswr",
102462306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_VIC,
102562306a36Sopenharmony_ci		.regs = {
102662306a36Sopenharmony_ci			.smmu = {
102762306a36Sopenharmony_ci				.reg = 0x234,
102862306a36Sopenharmony_ci				.bit = 13,
102962306a36Sopenharmony_ci			},
103062306a36Sopenharmony_ci			.la = {
103162306a36Sopenharmony_ci				.reg = 0x394,
103262306a36Sopenharmony_ci				.shift = 16,
103362306a36Sopenharmony_ci				.mask = 0xff,
103462306a36Sopenharmony_ci				.def = 0x80,
103562306a36Sopenharmony_ci			},
103662306a36Sopenharmony_ci		},
103762306a36Sopenharmony_ci	}, {
103862306a36Sopenharmony_ci		.id = 0x72,
103962306a36Sopenharmony_ci		.name = "viw",
104062306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_VI,
104162306a36Sopenharmony_ci		.regs = {
104262306a36Sopenharmony_ci			.smmu = {
104362306a36Sopenharmony_ci				.reg = 0x234,
104462306a36Sopenharmony_ci				.bit = 18,
104562306a36Sopenharmony_ci			},
104662306a36Sopenharmony_ci			.la = {
104762306a36Sopenharmony_ci				.reg = 0x398,
104862306a36Sopenharmony_ci				.shift = 0,
104962306a36Sopenharmony_ci				.mask = 0xff,
105062306a36Sopenharmony_ci				.def = 0x80,
105162306a36Sopenharmony_ci			},
105262306a36Sopenharmony_ci		},
105362306a36Sopenharmony_ci	}, {
105462306a36Sopenharmony_ci		.id = 0x73,
105562306a36Sopenharmony_ci		.name = "displayd",
105662306a36Sopenharmony_ci		.swgroup = TEGRA_SWGROUP_DC,
105762306a36Sopenharmony_ci		.regs = {
105862306a36Sopenharmony_ci			.smmu = {
105962306a36Sopenharmony_ci				.reg = 0x234,
106062306a36Sopenharmony_ci				.bit = 19,
106162306a36Sopenharmony_ci			},
106262306a36Sopenharmony_ci			.la = {
106362306a36Sopenharmony_ci				.reg = 0x3c8,
106462306a36Sopenharmony_ci				.shift = 0,
106562306a36Sopenharmony_ci				.mask = 0xff,
106662306a36Sopenharmony_ci				.def = 0x50,
106762306a36Sopenharmony_ci			},
106862306a36Sopenharmony_ci		},
106962306a36Sopenharmony_ci	},
107062306a36Sopenharmony_ci};
107162306a36Sopenharmony_ci
107262306a36Sopenharmony_cistatic const struct tegra_smmu_swgroup tegra124_swgroups[] = {
107362306a36Sopenharmony_ci	{ .name = "dc",        .swgroup = TEGRA_SWGROUP_DC,        .reg = 0x240 },
107462306a36Sopenharmony_ci	{ .name = "dcb",       .swgroup = TEGRA_SWGROUP_DCB,       .reg = 0x244 },
107562306a36Sopenharmony_ci	{ .name = "afi",       .swgroup = TEGRA_SWGROUP_AFI,       .reg = 0x238 },
107662306a36Sopenharmony_ci	{ .name = "avpc",      .swgroup = TEGRA_SWGROUP_AVPC,      .reg = 0x23c },
107762306a36Sopenharmony_ci	{ .name = "hda",       .swgroup = TEGRA_SWGROUP_HDA,       .reg = 0x254 },
107862306a36Sopenharmony_ci	{ .name = "hc",        .swgroup = TEGRA_SWGROUP_HC,        .reg = 0x250 },
107962306a36Sopenharmony_ci	{ .name = "msenc",     .swgroup = TEGRA_SWGROUP_MSENC,     .reg = 0x264 },
108062306a36Sopenharmony_ci	{ .name = "ppcs",      .swgroup = TEGRA_SWGROUP_PPCS,      .reg = 0x270 },
108162306a36Sopenharmony_ci	{ .name = "sata",      .swgroup = TEGRA_SWGROUP_SATA,      .reg = 0x274 },
108262306a36Sopenharmony_ci	{ .name = "vde",       .swgroup = TEGRA_SWGROUP_VDE,       .reg = 0x27c },
108362306a36Sopenharmony_ci	{ .name = "isp2",      .swgroup = TEGRA_SWGROUP_ISP2,      .reg = 0x258 },
108462306a36Sopenharmony_ci	{ .name = "xusb_host", .swgroup = TEGRA_SWGROUP_XUSB_HOST, .reg = 0x288 },
108562306a36Sopenharmony_ci	{ .name = "xusb_dev",  .swgroup = TEGRA_SWGROUP_XUSB_DEV,  .reg = 0x28c },
108662306a36Sopenharmony_ci	{ .name = "isp2b",     .swgroup = TEGRA_SWGROUP_ISP2B,     .reg = 0xaa4 },
108762306a36Sopenharmony_ci	{ .name = "tsec",      .swgroup = TEGRA_SWGROUP_TSEC,      .reg = 0x294 },
108862306a36Sopenharmony_ci	{ .name = "a9avp",     .swgroup = TEGRA_SWGROUP_A9AVP,     .reg = 0x290 },
108962306a36Sopenharmony_ci	{ .name = "gpu",       .swgroup = TEGRA_SWGROUP_GPU,       .reg = 0xaac },
109062306a36Sopenharmony_ci	{ .name = "sdmmc1a",   .swgroup = TEGRA_SWGROUP_SDMMC1A,   .reg = 0xa94 },
109162306a36Sopenharmony_ci	{ .name = "sdmmc2a",   .swgroup = TEGRA_SWGROUP_SDMMC2A,   .reg = 0xa98 },
109262306a36Sopenharmony_ci	{ .name = "sdmmc3a",   .swgroup = TEGRA_SWGROUP_SDMMC3A,   .reg = 0xa9c },
109362306a36Sopenharmony_ci	{ .name = "sdmmc4a",   .swgroup = TEGRA_SWGROUP_SDMMC4A,   .reg = 0xaa0 },
109462306a36Sopenharmony_ci	{ .name = "vic",       .swgroup = TEGRA_SWGROUP_VIC,       .reg = 0x284 },
109562306a36Sopenharmony_ci	{ .name = "vi",        .swgroup = TEGRA_SWGROUP_VI,        .reg = 0x280 },
109662306a36Sopenharmony_ci};
109762306a36Sopenharmony_ci
109862306a36Sopenharmony_cistatic const unsigned int tegra124_group_drm[] = {
109962306a36Sopenharmony_ci	TEGRA_SWGROUP_DC,
110062306a36Sopenharmony_ci	TEGRA_SWGROUP_DCB,
110162306a36Sopenharmony_ci	TEGRA_SWGROUP_VIC,
110262306a36Sopenharmony_ci};
110362306a36Sopenharmony_ci
110462306a36Sopenharmony_cistatic const struct tegra_smmu_group_soc tegra124_groups[] = {
110562306a36Sopenharmony_ci	{
110662306a36Sopenharmony_ci		.name = "drm",
110762306a36Sopenharmony_ci		.swgroups = tegra124_group_drm,
110862306a36Sopenharmony_ci		.num_swgroups = ARRAY_SIZE(tegra124_group_drm),
110962306a36Sopenharmony_ci	},
111062306a36Sopenharmony_ci};
111162306a36Sopenharmony_ci
111262306a36Sopenharmony_ci#define TEGRA124_MC_RESET(_name, _control, _status, _bit)	\
111362306a36Sopenharmony_ci	{							\
111462306a36Sopenharmony_ci		.name = #_name,					\
111562306a36Sopenharmony_ci		.id = TEGRA124_MC_RESET_##_name,		\
111662306a36Sopenharmony_ci		.control = _control,				\
111762306a36Sopenharmony_ci		.status = _status,				\
111862306a36Sopenharmony_ci		.bit = _bit,					\
111962306a36Sopenharmony_ci	}
112062306a36Sopenharmony_ci
112162306a36Sopenharmony_cistatic const struct tegra_mc_reset tegra124_mc_resets[] = {
112262306a36Sopenharmony_ci	TEGRA124_MC_RESET(AFI,       0x200, 0x204,  0),
112362306a36Sopenharmony_ci	TEGRA124_MC_RESET(AVPC,      0x200, 0x204,  1),
112462306a36Sopenharmony_ci	TEGRA124_MC_RESET(DC,        0x200, 0x204,  2),
112562306a36Sopenharmony_ci	TEGRA124_MC_RESET(DCB,       0x200, 0x204,  3),
112662306a36Sopenharmony_ci	TEGRA124_MC_RESET(HC,        0x200, 0x204,  6),
112762306a36Sopenharmony_ci	TEGRA124_MC_RESET(HDA,       0x200, 0x204,  7),
112862306a36Sopenharmony_ci	TEGRA124_MC_RESET(ISP2,      0x200, 0x204,  8),
112962306a36Sopenharmony_ci	TEGRA124_MC_RESET(MPCORE,    0x200, 0x204,  9),
113062306a36Sopenharmony_ci	TEGRA124_MC_RESET(MPCORELP,  0x200, 0x204, 10),
113162306a36Sopenharmony_ci	TEGRA124_MC_RESET(MSENC,     0x200, 0x204, 11),
113262306a36Sopenharmony_ci	TEGRA124_MC_RESET(PPCS,      0x200, 0x204, 14),
113362306a36Sopenharmony_ci	TEGRA124_MC_RESET(SATA,      0x200, 0x204, 15),
113462306a36Sopenharmony_ci	TEGRA124_MC_RESET(VDE,       0x200, 0x204, 16),
113562306a36Sopenharmony_ci	TEGRA124_MC_RESET(VI,        0x200, 0x204, 17),
113662306a36Sopenharmony_ci	TEGRA124_MC_RESET(VIC,       0x200, 0x204, 18),
113762306a36Sopenharmony_ci	TEGRA124_MC_RESET(XUSB_HOST, 0x200, 0x204, 19),
113862306a36Sopenharmony_ci	TEGRA124_MC_RESET(XUSB_DEV,  0x200, 0x204, 20),
113962306a36Sopenharmony_ci	TEGRA124_MC_RESET(TSEC,      0x200, 0x204, 21),
114062306a36Sopenharmony_ci	TEGRA124_MC_RESET(SDMMC1,    0x200, 0x204, 22),
114162306a36Sopenharmony_ci	TEGRA124_MC_RESET(SDMMC2,    0x200, 0x204, 23),
114262306a36Sopenharmony_ci	TEGRA124_MC_RESET(SDMMC3,    0x200, 0x204, 25),
114362306a36Sopenharmony_ci	TEGRA124_MC_RESET(SDMMC4,    0x970, 0x974,  0),
114462306a36Sopenharmony_ci	TEGRA124_MC_RESET(ISP2B,     0x970, 0x974,  1),
114562306a36Sopenharmony_ci	TEGRA124_MC_RESET(GPU,       0x970, 0x974,  2),
114662306a36Sopenharmony_ci};
114762306a36Sopenharmony_ci
114862306a36Sopenharmony_cistatic int tegra124_mc_icc_set(struct icc_node *src, struct icc_node *dst)
114962306a36Sopenharmony_ci{
115062306a36Sopenharmony_ci	/* TODO: program PTSA */
115162306a36Sopenharmony_ci	return 0;
115262306a36Sopenharmony_ci}
115362306a36Sopenharmony_ci
115462306a36Sopenharmony_cistatic int tegra124_mc_icc_aggreate(struct icc_node *node, u32 tag, u32 avg_bw,
115562306a36Sopenharmony_ci				    u32 peak_bw, u32 *agg_avg, u32 *agg_peak)
115662306a36Sopenharmony_ci{
115762306a36Sopenharmony_ci	/*
115862306a36Sopenharmony_ci	 * ISO clients need to reserve extra bandwidth up-front because
115962306a36Sopenharmony_ci	 * there could be high bandwidth pressure during initial filling
116062306a36Sopenharmony_ci	 * of the client's FIFO buffers.  Secondly, we need to take into
116162306a36Sopenharmony_ci	 * account impurities of the memory subsystem.
116262306a36Sopenharmony_ci	 */
116362306a36Sopenharmony_ci	if (tag & TEGRA_MC_ICC_TAG_ISO)
116462306a36Sopenharmony_ci		peak_bw = tegra_mc_scale_percents(peak_bw, 400);
116562306a36Sopenharmony_ci
116662306a36Sopenharmony_ci	*agg_avg += avg_bw;
116762306a36Sopenharmony_ci	*agg_peak = max(*agg_peak, peak_bw);
116862306a36Sopenharmony_ci
116962306a36Sopenharmony_ci	return 0;
117062306a36Sopenharmony_ci}
117162306a36Sopenharmony_ci
117262306a36Sopenharmony_cistatic struct icc_node_data *
117362306a36Sopenharmony_citegra124_mc_of_icc_xlate_extended(struct of_phandle_args *spec, void *data)
117462306a36Sopenharmony_ci{
117562306a36Sopenharmony_ci	struct tegra_mc *mc = icc_provider_to_tegra_mc(data);
117662306a36Sopenharmony_ci	const struct tegra_mc_client *client;
117762306a36Sopenharmony_ci	unsigned int i, idx = spec->args[0];
117862306a36Sopenharmony_ci	struct icc_node_data *ndata;
117962306a36Sopenharmony_ci	struct icc_node *node;
118062306a36Sopenharmony_ci
118162306a36Sopenharmony_ci	list_for_each_entry(node, &mc->provider.nodes, node_list) {
118262306a36Sopenharmony_ci		if (node->id != idx)
118362306a36Sopenharmony_ci			continue;
118462306a36Sopenharmony_ci
118562306a36Sopenharmony_ci		ndata = kzalloc(sizeof(*ndata), GFP_KERNEL);
118662306a36Sopenharmony_ci		if (!ndata)
118762306a36Sopenharmony_ci			return ERR_PTR(-ENOMEM);
118862306a36Sopenharmony_ci
118962306a36Sopenharmony_ci		client = &mc->soc->clients[idx];
119062306a36Sopenharmony_ci		ndata->node = node;
119162306a36Sopenharmony_ci
119262306a36Sopenharmony_ci		switch (client->swgroup) {
119362306a36Sopenharmony_ci		case TEGRA_SWGROUP_DC:
119462306a36Sopenharmony_ci		case TEGRA_SWGROUP_DCB:
119562306a36Sopenharmony_ci		case TEGRA_SWGROUP_PTC:
119662306a36Sopenharmony_ci		case TEGRA_SWGROUP_VI:
119762306a36Sopenharmony_ci			/* these clients are isochronous by default */
119862306a36Sopenharmony_ci			ndata->tag = TEGRA_MC_ICC_TAG_ISO;
119962306a36Sopenharmony_ci			break;
120062306a36Sopenharmony_ci
120162306a36Sopenharmony_ci		default:
120262306a36Sopenharmony_ci			ndata->tag = TEGRA_MC_ICC_TAG_DEFAULT;
120362306a36Sopenharmony_ci			break;
120462306a36Sopenharmony_ci		}
120562306a36Sopenharmony_ci
120662306a36Sopenharmony_ci		return ndata;
120762306a36Sopenharmony_ci	}
120862306a36Sopenharmony_ci
120962306a36Sopenharmony_ci	for (i = 0; i < mc->soc->num_clients; i++) {
121062306a36Sopenharmony_ci		if (mc->soc->clients[i].id == idx)
121162306a36Sopenharmony_ci			return ERR_PTR(-EPROBE_DEFER);
121262306a36Sopenharmony_ci	}
121362306a36Sopenharmony_ci
121462306a36Sopenharmony_ci	dev_err(mc->dev, "invalid ICC client ID %u\n", idx);
121562306a36Sopenharmony_ci
121662306a36Sopenharmony_ci	return ERR_PTR(-EINVAL);
121762306a36Sopenharmony_ci}
121862306a36Sopenharmony_ci
121962306a36Sopenharmony_cistatic const struct tegra_mc_icc_ops tegra124_mc_icc_ops = {
122062306a36Sopenharmony_ci	.xlate_extended = tegra124_mc_of_icc_xlate_extended,
122162306a36Sopenharmony_ci	.aggregate = tegra124_mc_icc_aggreate,
122262306a36Sopenharmony_ci	.set = tegra124_mc_icc_set,
122362306a36Sopenharmony_ci};
122462306a36Sopenharmony_ci
122562306a36Sopenharmony_ci#ifdef CONFIG_ARCH_TEGRA_124_SOC
122662306a36Sopenharmony_cistatic const unsigned long tegra124_mc_emem_regs[] = {
122762306a36Sopenharmony_ci	MC_EMEM_ARB_CFG,
122862306a36Sopenharmony_ci	MC_EMEM_ARB_OUTSTANDING_REQ,
122962306a36Sopenharmony_ci	MC_EMEM_ARB_TIMING_RCD,
123062306a36Sopenharmony_ci	MC_EMEM_ARB_TIMING_RP,
123162306a36Sopenharmony_ci	MC_EMEM_ARB_TIMING_RC,
123262306a36Sopenharmony_ci	MC_EMEM_ARB_TIMING_RAS,
123362306a36Sopenharmony_ci	MC_EMEM_ARB_TIMING_FAW,
123462306a36Sopenharmony_ci	MC_EMEM_ARB_TIMING_RRD,
123562306a36Sopenharmony_ci	MC_EMEM_ARB_TIMING_RAP2PRE,
123662306a36Sopenharmony_ci	MC_EMEM_ARB_TIMING_WAP2PRE,
123762306a36Sopenharmony_ci	MC_EMEM_ARB_TIMING_R2R,
123862306a36Sopenharmony_ci	MC_EMEM_ARB_TIMING_W2W,
123962306a36Sopenharmony_ci	MC_EMEM_ARB_TIMING_R2W,
124062306a36Sopenharmony_ci	MC_EMEM_ARB_TIMING_W2R,
124162306a36Sopenharmony_ci	MC_EMEM_ARB_DA_TURNS,
124262306a36Sopenharmony_ci	MC_EMEM_ARB_DA_COVERS,
124362306a36Sopenharmony_ci	MC_EMEM_ARB_MISC0,
124462306a36Sopenharmony_ci	MC_EMEM_ARB_MISC1,
124562306a36Sopenharmony_ci	MC_EMEM_ARB_RING1_THROTTLE
124662306a36Sopenharmony_ci};
124762306a36Sopenharmony_ci
124862306a36Sopenharmony_cistatic const struct tegra_smmu_soc tegra124_smmu_soc = {
124962306a36Sopenharmony_ci	.clients = tegra124_mc_clients,
125062306a36Sopenharmony_ci	.num_clients = ARRAY_SIZE(tegra124_mc_clients),
125162306a36Sopenharmony_ci	.swgroups = tegra124_swgroups,
125262306a36Sopenharmony_ci	.num_swgroups = ARRAY_SIZE(tegra124_swgroups),
125362306a36Sopenharmony_ci	.groups = tegra124_groups,
125462306a36Sopenharmony_ci	.num_groups = ARRAY_SIZE(tegra124_groups),
125562306a36Sopenharmony_ci	.supports_round_robin_arbitration = true,
125662306a36Sopenharmony_ci	.supports_request_limit = true,
125762306a36Sopenharmony_ci	.num_tlb_lines = 32,
125862306a36Sopenharmony_ci	.num_asids = 128,
125962306a36Sopenharmony_ci};
126062306a36Sopenharmony_ci
126162306a36Sopenharmony_ciconst struct tegra_mc_soc tegra124_mc_soc = {
126262306a36Sopenharmony_ci	.clients = tegra124_mc_clients,
126362306a36Sopenharmony_ci	.num_clients = ARRAY_SIZE(tegra124_mc_clients),
126462306a36Sopenharmony_ci	.num_address_bits = 34,
126562306a36Sopenharmony_ci	.atom_size = 32,
126662306a36Sopenharmony_ci	.client_id_mask = 0x7f,
126762306a36Sopenharmony_ci	.smmu = &tegra124_smmu_soc,
126862306a36Sopenharmony_ci	.emem_regs = tegra124_mc_emem_regs,
126962306a36Sopenharmony_ci	.num_emem_regs = ARRAY_SIZE(tegra124_mc_emem_regs),
127062306a36Sopenharmony_ci	.intmask = MC_INT_DECERR_MTS | MC_INT_SECERR_SEC | MC_INT_DECERR_VPR |
127162306a36Sopenharmony_ci		   MC_INT_INVALID_APB_ASID_UPDATE | MC_INT_INVALID_SMMU_PAGE |
127262306a36Sopenharmony_ci		   MC_INT_SECURITY_VIOLATION | MC_INT_DECERR_EMEM,
127362306a36Sopenharmony_ci	.reset_ops = &tegra_mc_reset_ops_common,
127462306a36Sopenharmony_ci	.resets = tegra124_mc_resets,
127562306a36Sopenharmony_ci	.num_resets = ARRAY_SIZE(tegra124_mc_resets),
127662306a36Sopenharmony_ci	.icc_ops = &tegra124_mc_icc_ops,
127762306a36Sopenharmony_ci	.ops = &tegra30_mc_ops,
127862306a36Sopenharmony_ci};
127962306a36Sopenharmony_ci#endif /* CONFIG_ARCH_TEGRA_124_SOC */
128062306a36Sopenharmony_ci
128162306a36Sopenharmony_ci#ifdef CONFIG_ARCH_TEGRA_132_SOC
128262306a36Sopenharmony_cistatic const struct tegra_smmu_soc tegra132_smmu_soc = {
128362306a36Sopenharmony_ci	.clients = tegra124_mc_clients,
128462306a36Sopenharmony_ci	.num_clients = ARRAY_SIZE(tegra124_mc_clients),
128562306a36Sopenharmony_ci	.swgroups = tegra124_swgroups,
128662306a36Sopenharmony_ci	.num_swgroups = ARRAY_SIZE(tegra124_swgroups),
128762306a36Sopenharmony_ci	.groups = tegra124_groups,
128862306a36Sopenharmony_ci	.num_groups = ARRAY_SIZE(tegra124_groups),
128962306a36Sopenharmony_ci	.supports_round_robin_arbitration = true,
129062306a36Sopenharmony_ci	.supports_request_limit = true,
129162306a36Sopenharmony_ci	.num_tlb_lines = 32,
129262306a36Sopenharmony_ci	.num_asids = 128,
129362306a36Sopenharmony_ci};
129462306a36Sopenharmony_ci
129562306a36Sopenharmony_ciconst struct tegra_mc_soc tegra132_mc_soc = {
129662306a36Sopenharmony_ci	.clients = tegra124_mc_clients,
129762306a36Sopenharmony_ci	.num_clients = ARRAY_SIZE(tegra124_mc_clients),
129862306a36Sopenharmony_ci	.num_address_bits = 34,
129962306a36Sopenharmony_ci	.atom_size = 32,
130062306a36Sopenharmony_ci	.client_id_mask = 0x7f,
130162306a36Sopenharmony_ci	.smmu = &tegra132_smmu_soc,
130262306a36Sopenharmony_ci	.intmask = MC_INT_DECERR_MTS | MC_INT_SECERR_SEC | MC_INT_DECERR_VPR |
130362306a36Sopenharmony_ci		   MC_INT_INVALID_APB_ASID_UPDATE | MC_INT_INVALID_SMMU_PAGE |
130462306a36Sopenharmony_ci		   MC_INT_SECURITY_VIOLATION | MC_INT_DECERR_EMEM,
130562306a36Sopenharmony_ci	.reset_ops = &tegra_mc_reset_ops_common,
130662306a36Sopenharmony_ci	.resets = tegra124_mc_resets,
130762306a36Sopenharmony_ci	.num_resets = ARRAY_SIZE(tegra124_mc_resets),
130862306a36Sopenharmony_ci	.icc_ops = &tegra124_mc_icc_ops,
130962306a36Sopenharmony_ci	.ops = &tegra30_mc_ops,
131062306a36Sopenharmony_ci};
131162306a36Sopenharmony_ci#endif /* CONFIG_ARCH_TEGRA_132_SOC */
1312