m1n1.agx.initdata: Port to G14G

Signed-off-by: Asahi Lina <lina@asahilina.net>
This commit is contained in:
Asahi Lina 2022-11-25 20:30:29 +09:00 committed by Hector Martin
parent 80266ff93e
commit 696cdee114
2 changed files with 234 additions and 64 deletions

View file

@ -36,7 +36,30 @@ def build_iomappings(agx, chip_id):
IOMapping(), #
IOMapping(), #
]
elif chip_id in (0x6001, 0x6002):
elif chip_id == 0x8112:
return [
iomap(0x204d00000, 0x14000, 0x14000, 1), # Fender
iomap(0x20e100000, 0x4000, 0x4000, 0), # AICTimer
iomap(0x23b0c4000, 0x4000, 0x4000, 1), # AICSWInt
iomap(0x204000000, 0x20000, 0x20000, 1), # RGX
IOMapping(), # UVD
IOMapping(), # unused
IOMapping(), # DisplayUnderrunWA
iomap(0x23b2c0000, 0x1000, 0x1000, 0), # AnalogTempSensorControllerRegs
IOMapping(), # PMPDoorbell
iomap(0x204d80000, 0x8000, 0x8000, 1), # MetrologySensorRegs
iomap(0x204d61000, 0x1000, 0x1000, 1), # GMGIFAFRegs
iomap(0x200000000, 0xd6400, 0xd6400, 1), # MCache registers
IOMapping(), # AICBankedRegisters
IOMapping(), # PMGRScratch
IOMapping(), # NIA Special agent idle register die 0
IOMapping(), # NIA Special agent idle register die 1
iomap(0x204e00000, 0x10000, 0x10000, 0), # CRE registers
iomap(0x27d050000, 0x4000, 0x4000, 0), # Streaming codec registers
iomap(0x23b3d0000, 0x1000, 0x1000, 0), #
iomap(0x23b3c0000, 0x1000, 0x1000, 0), #
]
elif chip_id in (0x6000, 0x6001, 0x6002):
mcc_cnt = {0x6002: 16, 0x6001: 8, 0x6000: 4}
return [
iomap(0x404d00000, 0x1c000, 0x1c000, 1), # Fender
@ -73,12 +96,14 @@ CHIP_INFO = {
unk_924 = [[0] * 8] * 8,
unk_e48 = [[0] * 8] * 8,
unk_e24 = 112,
gpu_fast_die0_sensor_mask64 = 0x12,
gpu_fast_die0_sensor_mask64_alt = 0x12,
gpu_fast_die0_sensor_present = 0x01,
shared1_tab = [
-1, 0x7282, 0x50ea, 0x370a, 0x25be, 0x1c1f, 0x16fb
] + ([-1] * 9),
shared2_tab = [0x800, 0x1555, -1, -1, -1, -1, -1, -1],
] + ([-1] * 10),
shared1_a4 = 0xffff,
shared2_tab = [0x800, 0x1555, -1, -1, -1, -1, -1, -1, 0, 0],
shared2_unk_508 = 0xc0007,
unk_3cf4 = [1000.0, 0, 0, 0, 0, 0, 0, 0],
unk_3d14 = [45.0, 0, 0, 0, 0, 0, 0, 0],
@ -86,10 +111,12 @@ CHIP_INFO = {
hwdb_4e0 = 0,
hwdb_534 = 0,
num_cores = 8,
hwdb_560 = 11,
hwdb_564 = 4,
gpu_core = 11,
gpu_rev = 4,
hwdb_ab8 = 0x48,
hwdb_abc = 0x8,
hwdb_b30 = 0,
rel_max_powers = [0, 19, 26, 38, 60, 87, 100],
),
0x6001: Container(
chip_id = 0x6001,
@ -106,10 +133,12 @@ CHIP_INFO = {
13, 13, 13, 13, 0, 0, 0, 0,
]],
unk_e24 = 125,
gpu_fast_die0_sensor_mask64 = 0x80808080,
gpu_fast_die0_sensor_mask64_alt = 0x90909090,
gpu_fast_die0_sensor_present = 0x0f,
shared1_tab = [0] + ([0xffff] * 15),
shared2_tab = [-1, -1, -1, -1, 0x2aa, 0xaaa, -1, -1],
shared1_tab = [0] + ([0xffff] * 16),
shared1_a4 = 0xffff,
shared2_tab = [-1, -1, -1, -1, 0x2aa, 0xaaa, -1, -1, 0, 0],
shared2_unk_508 = 0xcc00001,
unk_3cf4 = [1314.0, 1330.0, 1314.0, 1288.0, 0, 0, 0, 0],
unk_3d14 = [21.0, 21.0, 22.0, 21.0, 0, 0, 0, 0],
@ -122,10 +151,12 @@ CHIP_INFO = {
hwdb_4e0 = 4,
hwdb_534 = 1,
num_cores = 32,
hwdb_560 = 13,
hwdb_564 = 5,
gpu_core = 13,
gpu_rev = 5,
hwdb_ab8 = 0x2084,
hwdb_abc = 0x80,
hwdb_b30 = 0,
rel_max_powers = [0, 15, 20, 27, 36, 52, 100],
),
0x6002: Container(
chip_id = 0x6002,
@ -143,10 +174,12 @@ CHIP_INFO = {
13, 13, 13, 13, 13, 13, 13, 13,
]],
unk_e24 = 125,
gpu_fast_die0_sensor_mask64 = 0x8080808080808080,
gpu_fast_die0_sensor_mask64_alt = 0x9090909090909090,
gpu_fast_die0_sensor_present = 0xff,
shared1_tab = [0] + ([0xffff] * 15),
shared2_tab = [-1, -1, -1, -1, 0x2aa, 0xaaa, -1, -1],
shared1_tab = [0] + ([0xffff] * 16),
shared1_a4 = 0xffff,
shared2_tab = [-1, -1, -1, -1, 0x2aa, 0xaaa, -1, -1, 0, 0],
shared2_unk_508 = 0xcc00001,
unk_3cf4 = [1244.0, 1260.0, 1242.0, 1214.0,
1072.0, 1066.0, 1044.0, 1042.0],
@ -161,10 +194,48 @@ CHIP_INFO = {
hwdb_4e0 = 4,
hwdb_534 = 1,
num_cores = 64,
hwdb_560 = 13,
hwdb_564 = 5,
gpu_core = 13,
gpu_rev = 5,
hwdb_ab8 = 0x2084,
hwdb_abc = 0x80,
hwdb_b30 = 0,
rel_max_powers = [0, 15, 19, 25, 34, 50, 100],
),
0x8112: Container(
chip_id = 0x8112,
min_sram_volt = 780,
max_power = 22800,
max_freq_mhz = 1398,
unk_87c = 900,
unk_8cc = 11000,
unk_924 = [[
0.0, 0.0, 0.0, 0.0,
5.3, 0.0, 5.3, 6.6,
]] + ([[0] * 8] * 7),
unk_e48 = [[
0.0, 0.0, 0.0, 0.0,
5.3, 0.0, 5.3, 6.6,
]] + ([[0] * 8] * 7),
unk_e24 = 125,
gpu_fast_die0_sensor_mask64 = 0x6800,
gpu_fast_die0_sensor_mask64_alt = 0x6800,
gpu_fast_die0_sensor_present = 0x02,
shared1_tab = [0] + ([0xffff] * 16),
shared1_a4 = 0,
shared2_tab = [-1, -1, -1, -1, -1, -1, -1, -1, 0xaa5aa, 0],
shared2_unk_508 = 0xc00000,
unk_3cf4 = [1920.0, 0, 0, 0, 0, 0, 0, 0],
unk_3d14 = [74.0, 0, 0, 0, 0, 0, 0, 0],
unk_118ec = None,
hwdb_4e0 = 4,
hwdb_534 = 0,
num_cores = 10,
gpu_core = 15,
gpu_rev = 3,
hwdb_ab8 = 0x2048,
hwdb_abc = 0x4000,
hwdb_b30 = 1,
rel_max_powers = [0, 18, 27, 37, 52, 66, 82, 96, 100],
),
}
def build_initdata(agx):
@ -191,7 +262,7 @@ def build_initdata(agx):
regionB.stats_cp = agx.kobj.new_buf(0x980, "RegionB.unkptr_180").push()
# size: 0x3b80, few floats, few ints, needed for init
regionB.hwdata_a = agx.kobj.new(AGXHWDataA(sgx, chip_info), track=False).push()
regionB.hwdata_a = agx.kobj.new(AGXHWDataA(sgx, chip_info), track=False)
# size: 0x80, empty
regionB.unk_190 = agx.kobj.new_buf(0x80, "RegionB.unkptr_190").push()
@ -203,11 +274,12 @@ def build_initdata(agx):
hwdata = agx.kobj.new(AGXHWDataB(sgx, chip_info), track=False)
hwdata.io_mappings = build_iomappings(agx, chosen.chip_id)
# how is this computed?
perf_levels = [0, 19, 26, 38, 60, 87, 100]
k = 1.02 #?
count = sgx.perf_state_count
table_count = sgx.perf_state_table_count
base_pstate = sgx.getprop("gpu-perf-base-pstate", 3)
base_freq = sgx.perf_states[base_pstate].freq
max_freq = sgx.perf_states[count - 1].freq
for i in range(count):
ps = sgx.perf_states[i]
hwdata.frequencies[i] = ps.freq // 1000000
@ -222,14 +294,10 @@ def build_initdata(agx):
regionB.hwdata_a.unk_74[i] = k
hwdata.unk_9b4[i] = k
hwdata.rel_max_powers[i] = perf_levels[i]
hwdata.rel_max_powers[i] = chip_info.rel_max_powers[i]
hwdata.rel_boost_freqs[i] = max(0, int((ps.freq - base_freq) / (max_freq - base_freq) * 100))
# Mac Mini t8103
#hwdata.rel_unk = [0, 0, 0, 0, 36, 73, 100] + [0]*9
# Mac Studio t6002
hwdata.rel_unk = [0, 0, 0, 0, 20, 50, 100] + [0]*9
# Macbook 14" t6001
#hwdata.rel_unk = [0, 0, 10, 28, 42, 64, 100] + [0]*9
regionB.hwdata_a.push()
regionB.hwdata_b = hwdata.push()
regionB.hwdata_b_addr2 = hwdata._addr
@ -315,5 +383,5 @@ def build_initdata(agx):
initdata.regionC.push()
initdata.push()
print(initdata.val)
#print(InitData.parse_stream(agx.uat.iostream(0, initdata._addr)))
return initdata

View file

@ -38,8 +38,7 @@ class InitData_FWStatus(ConstructClass):
class AGXHWDataShared1(ConstructClass):
subcon = Struct(
"table" / Array(16, Int32sl),
"unk_40" / Int32ul,
"table" / Array(17, Int32sl),
"unk_44" / HexDump(Bytes(0x60)),
"unk_a4" / Int32ul,
"unk_a8" / Int32ul,
@ -48,19 +47,115 @@ class AGXHWDataShared1(ConstructClass):
def __init__(self, chip_info):
super().__init__()
self.table = chip_info.shared1_tab
self.unk_40 = 0xffff
self.unk_44 = bytes(0x60)
self.unk_a4 = 0xffff
self.unk_a4 = chip_info.shared1_a4
self.unk_a8 = 0
class AGXHWDataShared2Curve(ConstructClass):
subcon = Struct(
"unk_0" / Int32ul,
"unk_4" / Int32ul,
"t1" / Array(16, Int16sl),
"t2" / Array(16, Int16sl),
"t3" / Array(8, Array(16, Int32sl)),
)
def __init__(self, unk_0=0, unk_4=0, t1=None, t2=None, t3=None):
self.unk_0 = unk_0
self.unk_4 = unk_4
if not t1:
self.t1 = [0] * 16
else:
self.t1 = t1 + [t1[0]] * (16 - len(t1))
if not t2:
self.t2 = [0] * 16
else:
self.t2 = t2 + [t2[0]] * (16 - len(t2))
if t3 is None:
self.t3 = [[0] * 16] * 8
else:
self.t3 = ([(i + [0x3ffffff] * (16 - len(i))) for i in t3] +
[[0x3ffffff] * 16] * (8 - len(t3)))
class AGXHWDataShared2T8112(ConstructClass):
subcon = Struct(
"unk_0" / Array(5, Int32ul),
"unk_14" / Int32ul,
"unk_18" / Array(8, Int32ul),
"curve1" / AGXHWDataShared2Curve,
"curve2" / AGXHWDataShared2Curve,
)
def __init__(self, chip_info):
self.unk_0 = [0] * 5
self.unk_18 = [0] * 8
if chip_info.chip_id == 0x8112:
self.unk_14 = 0x6000000
self.curve1 = AGXHWDataShared2Curve(
0, 0x20000000,
[-1], [0x0f07], [[]]
)
self.curve2 = AGXHWDataShared2Curve(
7, 0x80000000,
[
-1, 25740, 17429, 12550, 9597, 7910, 6657, 5881, 5421
], [
0x0F07, 0x04C0, 0x06C0, 0x08C0,
0x0AC0, 0x0C40, 0x0DC0, 0x0EC0,
0x0F80
], [
[0x03FFFFFF, 107, 101, 94, 87, 82, 77, 73, 71],
[0x03FFFFFF, 38240, 36251, 33562,
31368, 29379, 27693, 26211, 25370],
[0x03FFFFFF, 123933, 117485, 108771,
101661, 95217, 89751, 84948, 82222],
]
)
else:
self.unk_14 = 0
self.curve1 = AGXHWDataShared2Curve()
self.curve2 = AGXHWDataShared2Curve()
class AGXHWDataShared3(ConstructClass):
subcon = Struct(
"unk_0" / Int32ul,
"unk_4" / Int32ul,
"unk_8" / Int32ul,
"table" / Array(16, Int32ul),
"unk_4c" / Int32ul,
)
def __init__(self, chip_info):
if chip_info.chip_id == 0x8112:
self.unk_0 = 1
self.unk_4 = 500
self.unk_8 = 5
self.table = [
10700, 10700, 10700, 10700,
10700, 6000, 1000, 1000,
1000, 10700, 10700, 10700,
10700, 10700, 10700, 10700,
]
self.unk_4c = 1
else:
self.unk_0 = 0
self.unk_4 = 0
self.unk_8 = 0
self.table = [0] * 16
self.unk_4c = 0
class AGXHWDataShared2(ConstructClass):
subcon = Struct(
"table" / Array(8, Int32sl),
"unk_20" / HexDump(Bytes(0x8)),
"table" / Array(10, Int32sl),
"unk_28" / HexDump(Bytes(0x10)),
"unk_38" / HexDump(Bytes(0x8)),
"unk_40" / HexDump(Bytes(0x4c8)),
"unk_38" / AGXHWDataShared2T8112,
"unk_500" / Int32ul,
"unk_504" / Int32ul,
"unk_508" / Int32ul,
"unk_50c" / Int32ul,
"unk_510" / Int32ul,
)
def __init__(self, chip_info):
@ -68,9 +163,12 @@ class AGXHWDataShared2(ConstructClass):
self.table = chip_info.shared2_tab
self.unk_20 = bytes(8)
self.unk_28 = b"\xff" * 16
self.unk_38 = bytes(8)
self.unk_40 = bytes(0x4c8)
self.unk_38 = AGXHWDataShared2T8112(chip_info)
self.unk_500 = 0
self.unk_504 = 0
self.unk_508 = chip_info.shared2_unk_508
self.unk_50c = 0
self.unk_510 = 0
class AGXHWDataA130Extra(ConstructClass):
subcon = Struct(
@ -169,7 +267,7 @@ class AGXHWDataA130Extra(ConstructClass):
self.unk_128 = 600
self.unk_12c = bytes(0x8c)
class AGXHWDataT8103(ConstructClass):
class AGXHWDataT81xx(ConstructClass):
subcon = Struct(
"unk_d8c" / Int32ul,
"unk_d90" / Int32ul,
@ -189,8 +287,8 @@ class AGXHWDataT8103(ConstructClass):
"unk_dc8" / Int32ul,
"unk_dcc" / Int32ul,
)
def __init__(self, chip_info):
if chip_info.chip_id == 0x8103:
def __init__(self, sgx, chip_info):
if chip_info.chip_id in (0x8103, 0x8112):
self.unk_d8c = 0x80000000
self.unk_d90 = 4
self.unk_d94 = 0
@ -207,7 +305,7 @@ class AGXHWDataT8103(ConstructClass):
self.unk_dc0 = 0
self.unk_dc4 = 0
self.unk_dc8 = 0
self.unk_dcc = 600
self.unk_dcc = 100 * sgx.gpu_num_perf_states
else:
self.unk_d8c = 0
self.unk_d90 = 0
@ -520,7 +618,7 @@ class AGXHWDataA(ConstructClass):
"max_pstate_scaled_14" / Int32ul,
"unk_d68" / Bytes(0x24),
"t8103_data" / AGXHWDataT8103,
"t81xx_data" / AGXHWDataT81xx,
"unk_dd0" / HexDump(Bytes(0x40)),
Ver("V >= V13_0B4", "unk_e10_0" / AGXHWDataA130Extra),
@ -540,8 +638,11 @@ class AGXHWDataA(ConstructClass):
"hws1" / AGXHWDataShared1,
Ver("V >= V13_0B4", "unk_pad1" / HexDump(Bytes(0x20))),
"hws2" / AGXHWDataShared2,
"unk_3bfc" / Int32ul,
"unk_3c00" / HexDump(Bytes(0xa0)),
"unk_3c04" / Int32ul,
"hws3" / AGXHWDataShared3,
"unk_3c58" / HexDump(Bytes(0x3c)),
"unk_3c94" / Int32ul,
"unk_3c98" / Int64ul,
"unk_3ca0" / Int64ul,
"unk_3ca8" / Int64ul,
"unk_3cb0" / Int64ul,
@ -610,15 +711,15 @@ class AGXHWDataA(ConstructClass):
self.unk_64c = 625
self.unk_650 = 0
self.pad_654 = 0
self.pwr_filter_a_neg = 1 - 1 / sgx.gpu_pwr_filter_time_constant
self.pwr_filter_a_neg = 1 - 1 / sgx.getprop("gpu-pwr-filter-time-constant", 313)
self.pad_65c = 0
self.pwr_filter_a = 1 - self.pwr_filter_a_neg
self.pad_664 = 0
self.pwr_integral_gain = sgx.gpu_pwr_integral_gain
self.pwr_integral_gain = sgx.getprop("gpu-pwr-integral-gain", 0.0202129)
self.pad_66c = 0
self.pwr_integral_min_clamp = sgx.gpu_pwr_integral_min_clamp
self.pwr_integral_min_clamp = sgx.getprop("gpu-pwr-integral-min-clamp", 0)
self.max_power_1 = chip_info.max_power
self.pwr_proportional_gain = sgx.gpu_pwr_proportional_gain
self.pwr_proportional_gain = sgx.getprop("gpu-pwr-proportional-gain", 5.2831855)
self.pad_67c = 0
self.pwr_pstate_related_k = -self.max_pstate_scaled / chip_info.max_power
self.pwr_pstate_max_dc_offset = sgx.gpu_pwr_min_duty_cycle - self.max_pstate_scaled
@ -645,7 +746,7 @@ class AGXHWDataA(ConstructClass):
self.pad_6ec = 0
self.ppm_ki_dt = sgx.gpu_ppm_ki * (period_ms / 1000)
self.pad_6f4 = 0
self.pwr_integral_min_clamp_2 = sgx.gpu_pwr_integral_min_clamp
self.pwr_integral_min_clamp_2 = self.pwr_integral_min_clamp
if Ver.check("V >= V13_0B4") or chip_info.chip_id != 0x8103:
self.unk_6fc = 65536.0
else:
@ -729,10 +830,7 @@ class AGXHWDataA(ConstructClass):
self.unk_83c = 0x0
self.pad_840 = bytes(0x2c)
self.unk_86c = 0x0
mask = sgx.getprop("gpu-fast-die0-sensor-mask64", None)
if mask is None:
mask = sgx.gpu_fast_die0_sensor_mask
self.fast_die0_sensor_mask64 = mask
self.fast_die0_sensor_mask64 = chip_info.gpu_fast_die0_sensor_mask64
self.fast_die0_release_temp_cc = 100 * sgx.getprop("gpu-fast-die0-release-temp", 80)
self.unk_87c = chip_info.unk_87c
self.unk_880 = 0x4
@ -835,13 +933,13 @@ class AGXHWDataA(ConstructClass):
self.max_pstate_scaled_14 = self.max_pstate_scaled
self.unk_d68 = bytes(0x24)
self.t8103_data = AGXHWDataT8103(chip_info)
self.t81xx_data = AGXHWDataT81xx(sgx, chip_info)
self.unk_dd0 = bytes(0x40)
self.unk_e10_0 = AGXHWDataA130Extra()
self.unk_e10 = bytes(0xc)
self.fast_die0_sensor_mask64_2 = mask
self.fast_die0_sensor_mask64_2 = chip_info.gpu_fast_die0_sensor_mask64
self.unk_e24 = chip_info.unk_e24
self.unk_e28 = 1
self.unk_e2c = bytes(0x1c)
@ -856,8 +954,11 @@ class AGXHWDataA(ConstructClass):
self.hws1 = AGXHWDataShared1(chip_info)
self.unk_pad1 = bytes(0x20)
self.hws2 = AGXHWDataShared2(chip_info)
self.unk_3bfc = 0
self.unk_3c00 = bytes(0xa0)
self.unk_3c04 = 0
self.hws3 = AGXHWDataShared3(chip_info)
self.unk_3c58 = bytes(0x3c)
self.unk_3c94 = 0 # flag
self.unk_3c98 = 0 # timestamp?
self.unk_3ca0 = 0 # timestamp?
self.unk_3ca8 = 0
self.unk_3cb0 = 0
@ -868,7 +969,6 @@ class AGXHWDataA(ConstructClass):
self.unk_3cd8 = 0
self.unk_3ce0_0 = 0
self.unk_3ce0 = 0
self.unk_3ce4 = 0
self.unk_3ce8 = 1
@ -1007,8 +1107,8 @@ class AGXHWDataB(ConstructClass):
"unk_550" / Int32ul,
"unk_554" / Int32ul,
"gpu_region_base" / Int64ul,
"unk_560" / Int32ul,
"unk_564" / Int32ul,
"gpu_core" / Int32ul,
"gpu_rev" / Int32ul,
"num_cores" / Int32ul,
"max_pstate" / Int32ul,
Ver("V < V13_0B4", "num_pstates" / Int32ul),
@ -1018,7 +1118,7 @@ class AGXHWDataB(ConstructClass):
"unk_9b4" / Array(16, Float32l),
"unk_9f4" / Array(16, Int32ul),
"rel_max_powers" / Array(16, Dec(Int32ul)),
"rel_boost_powers" / Array(16, Dec(Int32ul)),
"rel_boost_freqs" / Array(16, Dec(Int32ul)),
Ver("V < V13_0B4", "min_sram_volt" / Dec(Int32ul)),
Ver("V < V13_0B4", "unk_ab8" / Int32ul),
Ver("V < V13_0B4", "unk_abc" / Int32ul),
@ -1220,8 +1320,8 @@ class AGXHWDataB(ConstructClass):
self.unk_550 = 0x0
self.unk_554 = 0x1
self.gpu_region_base = sgx.gpu_region_base
self.unk_560 = chip_info.hwdb_560
self.unk_564 = chip_info.hwdb_564
self.gpu_core = chip_info.gpu_core
self.gpu_rev = chip_info.gpu_rev
self.num_cores = chip_info.num_cores
self.max_pstate = sgx.gpu_num_perf_states
self.num_pstates = sgx.gpu_num_perf_states + 1
@ -1232,7 +1332,7 @@ class AGXHWDataB(ConstructClass):
self.unk_9b4 = [0.] * 16
self.unk_9f4 = [0] * 16
self.rel_max_powers = [0] * 16
self.rel_boost_powers = [0] * 16
self.rel_boost_freqs = [0] * 16
self.min_sram_volt = chip_info.min_sram_volt
self.unk_ab8 = chip_info.hwdb_ab8
self.unk_abc = chip_info.hwdb_abc
@ -1256,7 +1356,7 @@ class AGXHWDataB(ConstructClass):
self.unk_b24 = 0x1
self.unk_b28 = 0x1
self.unk_b2c = 0x1
self.unk_b30 = 0x0
self.unk_b30 = chip_info.hwdb_b30
self.unk_b34 = 0x0
self.unk_b38_0 = 1
self.unk_b38_4 = 1
@ -1594,7 +1694,8 @@ class InitData_RegionC(ConstructClass):
Ver("V >= V13_0B4", "unk_89f4_c" / HexDump(Bytes(0x50))),
"hws1" / AGXHWDataShared1,
"hws2" / AGXHWDataShared2,
"unk_8fac" / HexDump(Bytes(0x60)),
"hws3" / AGXHWDataShared3,
"unk_9004" / HexDump(Bytes(8)),
Ver("V >= V13_0B4", "unk_900c_0" / HexDump(Bytes(0x28))),
"unk_900c" / Int32ul,
Ver("V >= V13_0B4", "unk_9010_0" / Int32ul),
@ -1715,7 +1816,8 @@ class InitData_RegionC(ConstructClass):
self.unk_89f4_c = bytes(0x50)
self.hws1 = AGXHWDataShared1(chip_info)
self.hws2 = AGXHWDataShared2(chip_info)
self.unk_8fac = bytes(0x60)
self.hws3 = AGXHWDataShared3(chip_info)
self.unk_9004 = bytes(8)
self.unk_900c_0 = bytes(0x28)
self.unk_900c = 1
self.unk_9010_0 = 1