Skip to content

Commit 23d4f99

Browse files
hoshinolinamarcan
authored andcommitted
m1n1.trace.isp: t8112 etc changes
Signed-off-by: Asahi Lina <[email protected]>
1 parent 250f96b commit 23d4f99

3 files changed

Lines changed: 115 additions & 76 deletions

File tree

proxyclient/m1n1/fw/isp/isp_opcodes.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
CISP_CMD_RPC_ENABLE = 0x0013
1111
CISP_CMD_PMP_CTRL_SET = 0x001c
1212
CISP_CMD_TRACE_ENABLE = 0x001d
13+
CISP_CMD_FLICKER_SENSOR_SET = 0x0024
1314
CISP_CMD_CH_START = 0x0100
1415
CISP_CMD_CH_STOP = 0x0101
1516
CISP_CMD_CH_BUFFER_RETURN = 0x0104
@@ -39,11 +40,14 @@
3940
CISP_CMD_CH_SENSOR_NVM_GET = 0x0501
4041
CISP_CMD_CH_SENSOR_PERMODULE_LSC_INFO_GET = 0x0507
4142
CISP_CMD_CH_SENSOR_PERMODULE_LSC_GRID_GET = 0x0511
43+
CISP_CMD_CH_LPDP_HS_RECEIVER_TUNING_SET = 0x051b
4244
CISP_CMD_CH_FOCUS_LIMITS_GET = 0x0701
4345
CISP_CMD_CH_CROP_SET = 0x0801
46+
CISP_CMD_CH_CROP_SCL1_SET = 0x080c
4447
CISP_CMD_CH_CNR_START = 0x0a2f
4548
CISP_CMD_CH_MBNR_ENABLE = 0x0a3a
4649
CISP_CMD_CH_OUTPUT_CONFIG_SET = 0x0b01
50+
CISP_CMD_CH_OUTPUT_CONFIG_SCL1_SET = 0x0b09
4751
CISP_CMD_CH_PREVIEW_STREAM_SET = 0x0b0d
4852
CISP_CMD_CH_FACE_DETECTION_START = 0x0d00
4953
CISP_CMD_CH_FACE_DETECTION_CONFIG_GET = 0x0d02
@@ -71,6 +75,7 @@
7175
0x0013 : "CISP_CMD_RPC_ENABLE",
7276
0x001c : "CISP_CMD_PMP_CTRL_SET",
7377
0x001d : "CISP_CMD_TRACE_ENABLE",
78+
0x0024 : "CISP_CMD_FLICKER_SENSOR_SET",
7479
0x0100 : "CISP_CMD_CH_START",
7580
0x0101 : "CISP_CMD_CH_STOP",
7681
0x0104 : "CISP_CMD_CH_BUFFER_RETURN",
@@ -100,11 +105,14 @@
100105
0x0501 : "CISP_CMD_CH_SENSOR_NVM_GET",
101106
0x0507 : "CISP_CMD_CH_SENSOR_PERMODULE_LSC_INFO_GET",
102107
0x0511 : "CISP_CMD_CH_SENSOR_PERMODULE_LSC_GRID_GET",
108+
0x051b : "CISP_CMD_CH_LPDP_HS_RECEIVER_TUNING_SET",
103109
0x0701 : "CISP_CMD_CH_FOCUS_LIMITS_GET",
104110
0x0801 : "CISP_CMD_CH_CROP_SET",
111+
0x080c : "CISP_CMD_CH_CROP_SCL1_SET",
105112
0x0a2f : "CISP_CMD_CH_CNR_START",
106113
0x0a3a : "CISP_CMD_CH_MBNR_ENABLE",
107114
0x0b01 : "CISP_CMD_CH_OUTPUT_CONFIG_SET",
115+
0x0b09 : "CISP_CMD_CH_OUTPUT_CONFIG_SCL1_SET",
108116
0x0b0d : "CISP_CMD_CH_PREVIEW_STREAM_SET",
109117
0x0d00 : "CISP_CMD_CH_FACE_DETECTION_START",
110118
0x0d02 : "CISP_CMD_CH_FACE_DETECTION_CONFIG_GET",

proxyclient/m1n1/hw/isp.py

Lines changed: 83 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -1,70 +1,83 @@
1-
# SPDX-License-Identifier: MIT
2-
from ..utils import *
3-
4-
class ISP_REVISION(Register32):
5-
REVISION = 15, 0
6-
7-
class ISPRegs(RegMap):
8-
ISP_PMGR_0 = 0x738, Register32
9-
ISP_PMGR_1 = 0x798, Register32
10-
ISP_PMGR_2 = 0x7f8, Register32
11-
ISP_PMGR_3 = 0x858, Register32
12-
13-
ISP_ASC_RVBAR = 0x1050000, Register64
14-
ISP_ASC_EDPRCR = 0x1010310, Register32
15-
ISP_ASC_CONTROL = 0x1400044, Register32
16-
ISP_ASC_STATUS = 0x1400048, Register32
17-
18-
ISP_ASC_POWER_CYCLE_0 = 0x1400a00, Register32
19-
ISP_ASC_POWER_CYCLE_1 = 0x1400a04, Register32
20-
ISP_ASC_POWER_CYCLE_2 = 0x1400a08, Register32
21-
ISP_ASC_POWER_CYCLE_3 = 0x1400a0c, Register32
22-
ISP_ASC_POWER_CYCLE_4 = 0x1400a10, Register32
23-
ISP_ASC_POWER_CYCLE_5 = 0x1400a14, Register32
24-
25-
ISP_REVISION = 0x1800000, ISP_REVISION
26-
27-
ISP_POWER_UNK_0 = 0x20e0080, Register32
28-
ISP_POWER_UNK_1 = 0x20f0020, Register32
29-
ISP_POWER_UNK_2 = 0x20f8020, Register32
30-
31-
ISP_GPIO_0 = 0x2104170, Register32
32-
ISP_GPIO_1 = 0x2104174, Register32
33-
ISP_GPIO_2 = 0x2104178, Register32
34-
ISP_GPIO_3 = 0x210417c, Register32
35-
ISP_GPIO_4 = 0x2104180, Register32
36-
ISP_GPIO_5 = 0x2104184, Register32
37-
ISP_GPIO_6 = 0x2104188, Register32
38-
ISP_GPIO_7 = 0x210418c, Register32
39-
40-
ISP_SENSOR_CLOCK_0_EN = 0x2104190, Register32
41-
ISP_SENSOR_CLOCK_1_EN = 0x2104194, Register32
42-
ISP_SENSOR_CLOCK_2_EN = 0x2104198, Register32
43-
44-
ISP_IRQ_INTERRUPT = 0x2104000, Register32
45-
ISP_IRQ_ENABLE = 0x2104004, Register32
46-
ISP_IRQ_DOORBELL = 0x21043f0, Register32
47-
ISP_IRQ_ACK = 0x21043fc, Register32
48-
49-
ISP_IRQ_INTERRUPT_1 = 0x2104008, Register32
50-
ISP_IRQ_INTERRUPT_2 = 0x2104010, Register32
51-
ISP_IRQ_INTERRUPT_3 = 0x2104018, Register32
52-
ISP_IRQ_INTERRUPT_4 = 0x21043f8, Register32
53-
54-
ISP_DPE_UNK_0 = 0x2504000, Register32
55-
ISP_DPE_UNK_1 = 0x2508000, Register32
56-
57-
class ISPPSRegs(RegMap): # This doesn't really make sense
58-
ISP_PS_00 = 0x4000, Register32
59-
ISP_PS_08 = 0x4008, Register32
60-
ISP_PS_10 = 0x4010, Register32
61-
ISP_PS_18 = 0x4018, Register32
62-
ISP_PS_20 = 0x4020, Register32
63-
ISP_PS_28 = 0x4028, Register32
64-
ISP_PS_30 = 0x4030, Register32
65-
ISP_PS_38 = 0x4038, Register32
66-
ISP_PS_40 = 0x4040, Register32
67-
ISP_PS_48 = 0x4048, Register32
68-
ISP_PS_50 = 0x4050, Register32
69-
ISP_PS_58 = 0x4058, Register32
70-
ISP_PS_60 = 0x4060, Register32
1+
# SPDX-License-Identifier: MIT
2+
from ..utils import *
3+
4+
class ISP_REVISION(Register32):
5+
REVISION = 15, 0
6+
7+
class ISPRegs(RegMap):
8+
ISP_PMGR_0 = 0x738, Register32
9+
ISP_PMGR_1 = 0x798, Register32
10+
ISP_PMGR_2 = 0x7f8, Register32
11+
ISP_PMGR_3 = 0x858, Register32
12+
13+
ISP_ASC_RVBAR = 0x1050000, Register64
14+
ISP_ASC_EDPRCR = 0x1010310, Register32
15+
ISP_ASC_CONTROL = 0x1400044, Register32
16+
ISP_ASC_STATUS = 0x1400048, Register32
17+
18+
ISP_ASC_POWER_CYCLE_0 = 0x1400a00, Register32
19+
ISP_ASC_POWER_CYCLE_1 = 0x1400a04, Register32
20+
ISP_ASC_POWER_CYCLE_2 = 0x1400a08, Register32
21+
ISP_ASC_POWER_CYCLE_3 = 0x1400a0c, Register32
22+
ISP_ASC_POWER_CYCLE_4 = 0x1400a10, Register32
23+
ISP_ASC_POWER_CYCLE_5 = 0x1400a14, Register32
24+
25+
ISP_REVISION = 0x1800000, ISP_REVISION
26+
27+
ISP_POWER_UNK_0 = 0x20e0080, Register32
28+
ISP_POWER_UNK_1 = 0x20f0020, Register32
29+
ISP_POWER_UNK_2 = 0x20f8020, Register32
30+
31+
ISP_GPIO_0 = 0x2104170, Register32
32+
ISP_GPIO_1 = 0x2104174, Register32
33+
ISP_GPIO_2 = 0x2104178, Register32
34+
ISP_GPIO_3 = 0x210417c, Register32
35+
ISP_GPIO_4 = 0x2104180, Register32
36+
ISP_GPIO_5 = 0x2104184, Register32
37+
ISP_GPIO_6 = 0x2104188, Register32
38+
ISP_GPIO_7 = 0x210418c, Register32
39+
40+
ISP_GPIO_0_T8112 = 0x24c41b0, Register32
41+
ISP_GPIO_1_T8112 = 0x24c41b4, Register32
42+
ISP_GPIO_2_T8112 = 0x24c41b8, Register32
43+
ISP_GPIO_3_T8112 = 0x24c41bc, Register32
44+
ISP_GPIO_4_T8112 = 0x24c41c0, Register32
45+
ISP_GPIO_5_T8112 = 0x24c41c4, Register32
46+
ISP_GPIO_6_T8112 = 0x24c41c8, Register32
47+
ISP_GPIO_7_T8112 = 0x24c41cc, Register32
48+
49+
ISP_SENSOR_CLOCK_0_EN = 0x2104190, Register32
50+
ISP_SENSOR_CLOCK_1_EN = 0x2104194, Register32
51+
ISP_SENSOR_CLOCK_2_EN = 0x2104198, Register32
52+
53+
ISP_IRQ_INTERRUPT = 0x2104000, Register32
54+
ISP_IRQ_ENABLE = 0x2104004, Register32
55+
ISP_IRQ_DOORBELL = 0x21043f0, Register32
56+
ISP_IRQ_ACK = 0x21043fc, Register32
57+
ISP_IRQ_INTERRUPT_T8112 = 0x24c4000, Register32
58+
ISP_IRQ_DOORBELL_T8112 = 0x24c4430, Register32
59+
ISP_IRQ_ACK_T8112 = 0x24c443c, Register32
60+
61+
ISP_IRQ_INTERRUPT_1 = 0x2104008, Register32
62+
ISP_IRQ_INTERRUPT_2 = 0x2104010, Register32
63+
ISP_IRQ_INTERRUPT_3 = 0x2104018, Register32
64+
ISP_IRQ_INTERRUPT_4 = 0x21043f8, Register32
65+
ISP_IRQ_INTERRUPT_4_T8112 = 0x24c4438, Register32
66+
67+
ISP_DPE_UNK_0 = 0x2504000, Register32
68+
ISP_DPE_UNK_1 = 0x2508000, Register32
69+
70+
class ISPPSRegs(RegMap): # This doesn't really make sense
71+
ISP_PS_00 = 0x4000, Register32
72+
ISP_PS_08 = 0x4008, Register32
73+
ISP_PS_10 = 0x4010, Register32
74+
ISP_PS_18 = 0x4018, Register32
75+
ISP_PS_20 = 0x4020, Register32
76+
ISP_PS_28 = 0x4028, Register32
77+
ISP_PS_30 = 0x4030, Register32
78+
ISP_PS_38 = 0x4038, Register32
79+
ISP_PS_40 = 0x4040, Register32
80+
ISP_PS_48 = 0x4048, Register32
81+
ISP_PS_50 = 0x4050, Register32
82+
ISP_PS_58 = 0x4058, Register32
83+
ISP_PS_60 = 0x4060, Register32

proxyclient/m1n1/trace/isp.py

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,7 @@ def dump(self):
6363
class ISPT2HBufferCommand(ISPCommand):
6464
def __init__(self, chan, msg, direction):
6565
super().__init__(chan, msg, direction)
66-
#self.contents = self.read_iova(0x1013140, 0x4000)
67-
self.contents = None
66+
self.contents = self.read_iova(self.iova, 0x280)
6867

6968
def dump(self):
7069
super().dump()
@@ -75,8 +74,8 @@ def dump(self):
7574
class ISPH2TBufferCommand(ISPCommand):
7675
def __init__(self, chan, msg, direction):
7776
super().__init__(chan, msg, direction)
78-
#self.contents = self.read_iova(0x1013140, 0x4000)
79-
self.contents = None
77+
self.contents = self.read_iova(self.iova, 0x4000)
78+
#self.contents = None
8079

8180
def dump(self):
8281
super().dump()
@@ -182,11 +181,21 @@ def __init__(self, hv, dev_path, dart_dev_path, verbose):
182181
self.dart_tracer = DARTTracer(hv, dart_dev_path, verbose=0)
183182
self.dart_tracer.start()
184183
self.dart = self.dart_tracer.dart
184+
self.iova_base = 0
185+
chip_id = hv.adt["/chosen"].chip_id
186+
if 0x6020 <= chip_id <= 0x6fff:
187+
self.iova_base = 0x100_0000_0000
185188

186189
self.ignored_ranges = [
187190
(0x22c0e8000, 0x4000), # dart 1
188191
(0x22c0f4000, 0x4000), # dart 2
189192
(0x22c0fc000, 0x4000), # dart 3
193+
(0x3860e8000, 0x4000), # dart 1
194+
(0x3860f4000, 0x4000), # dart 2
195+
(0x3860fc000, 0x4000), # dart 3
196+
(0x22c4a8000, 0x4000), # dart 1
197+
(0x22c4b4000, 0x4000), # dart 2
198+
(0x22c4bc000, 0x4000), # dart 3
190199
]
191200

192201
self.table = None
@@ -196,43 +205,52 @@ def r_ISP_GPIO_0(self, val):
196205
self.log("ISP_GPIO_0 r32: 0x%x" % (val.value))
197206
if val.value == 0x8042006:
198207
self.log(f"ISP_GPIO0 = ACK")
199-
elif val.value < 64:
208+
elif val.value == 0xf7fbdff9:
209+
self.log(f"ISP_GPIO0 = NACK?")
210+
elif val.value < 64:
200211
self.log(f"ISP_IPC_CHANNELS = {val!s}")
201212
self.num_chans = val.value
202213
elif val.value > 0:
203214
self.log(f"IPC BASE IOVA: {val!s}")
204215
self.ipc_iova = val.value
216+
# self.dart_tracer.trace_range(0, irange(val.value | self.iova_base, 0x40000))
205217
self.table = ISPChannelTable(self, self.num_chans, val.value)
206218
self.log("======== CHANNEL TABLE ========")
207219
for chan in self.table.chans:
208220
self.log(f"ISPIPC: {str(chan)}")
209221
self.log("======== END OF CHANNEL TABLE ========")
222+
r_ISP_GPIO_0_T8112 = r_ISP_GPIO_0
210223

211224
def r_ISP_IRQ_INTERRUPT(self, val):
212225
#self.log("ISP_IRQ_INTERRUPT r32: 0x%x" % (val.value))
213226
#self.log(f"======== BEGIN IRQ ========")
214227
self.table.get_last_rx_commands(int(val.value))
215228
#self.log(f"======== END IRQ ========")
229+
r_ISP_IRQ_INTERRUPT_T8112 = r_ISP_IRQ_INTERRUPT
216230

217231
def w_ISP_IRQ_DOORBELL(self, val):
218232
#self.log("ISP_IRQ_DOORBELL w32: 0x%x" % (val.value))
219233
#self.log(f"======== BEGIN DOORBELL ========")
220234
self.table.get_last_tx_commands(int(val.value))
221235
#self.log(f"======== END DOORBELL ========")
236+
w_ISP_IRQ_DOORBELL_T8112 = w_ISP_IRQ_DOORBELL
222237

223238
def w_ISP_GPIO_0(self, val):
224239
self.log("ISP_GPIO_0 w32: 0x%x" % (val.value))
225240
if (val.value >= 0xe00000) and (val.value <= 0x1100000): # dunno
226241
self.log("ISP bootargs at 0x%x:" % val.value)
227-
bootargs = self.dart.ioread(0, val.value, 0x200) # justt in case
242+
bootargs = self.dart.ioread(0, val.value | self.iova_base, 0x200) # justt in case
228243
chexdump32(bootargs, print_fn=self.log)
229244
x = ISPIPCBootArgs.parse(bootargs[:ISPIPCBootArgs.sizeof()])
230245
self.log(x)
246+
w_ISP_GPIO_0_T8112 = w_ISP_GPIO_0
231247

232248
def ioread(self, iova, size):
249+
iova |= self.iova_base
233250
return self.dart.ioread(0, iova, size)
234251

235252
def iowrite(self, iova, data):
253+
iova |= self.iova_base
236254
return self.dart.iowrite(0, iova, data)
237255

238256
def start(self):

0 commit comments

Comments
 (0)