99
1010p .smp_start_secondaries ()
1111
12- p .set32 (0x28e580208 , 1 << 31 )
13- p .clear32 (0x28e580208 , 1 << 31 )
14-
15- spi = u .adt ["arm-io/spi3" ].get_reg (0 )[0 ]
12+ spi = u .adt ["arm-io/spi2" ].get_reg (0 )[0 ] + 0x8000
1613regs = SPIRegs (u , spi )
1714
18- mon .add (spi , 0x10 )
19- mon .add (spi + 0x30 , 0x10 )
20- mon .add (spi + 0x40 , 0x400 )
21-
2215aic = u .adt ["arm-io/aic" ].get_reg (0 )[0 ]
23- mon .add (aic + 0x6800 + (1109 // 32 ) * 4 , 4 )
2416
2517gpio = u .adt ["arm-io/gpio0" ].get_reg (0 )[0 ]
18+ count = u .adt ["arm-io/gpio0" ].getprop ("#gpio-pins" )
2619
27- mon .add (gpio , 0x1c8 )
28- mon .add (gpio + 0x1e0 , 0x300 )
29-
30- mon .poll ()
20+ pins = {}
21+ for i in range (150 , 150 + 32 ):
22+ pins [f"pin{ i } " ] = i
3123
3224m = GPIOLogicAnalyzer (u , "arm-io/gpio0" ,
33- pins = { "miso" : 0x34 , "mosi" : 0x35 , "clk" : 0x36 , "cs" : 0x37 } ,
34- #pins ={"miso ": 0xa, "mosi": 0xb, "clk": 0x20, "cs": 0x21 },
35- #pins={"clk": 46, "mosi": 47, "miso": 48, "cs": 49} ,
36- div = 1 , on_pin_change = False )
37-
38- #p.write32(spi + 0x100, 0xffffffff )
25+ pins = pins ,
26+ regs = {"a " : gpio },
27+ div = 1 ,
28+ cpu = 1 ,
29+ on_pin_change = True ,
30+ on_reg_change = False )
3931
4032regs .CTRL .val = 0xc
4133regs .PIN .val = 0x2
42- regs .CONFIG .val = 0x20 | (1 << 15 ) | 6
43- regs .CONFIG .val = 0x20 | (1 << 15 ) | 4
44- regs .CONFIG .val = 0x20 | (1 << 15 ) | 2
45- regs .CONFIG .val = 0x20 | (3 << 15 ) | 0
46-
47- def try_all_bits ():
48- for i in range (0 , 0x200 , 4 ):
49- v = p .read32 (spi + i )
50- for j in range (32 ):
51- p .write32 (spi + i , v ^ (1 << j ))
52- print (f"{ i :4x} :{ v :8x} :{ j :2d} FIFO level:" , regs .FIFO_LEVEL .reg .LEVEL_TX )
53- mon .poll ()
54- p .write32 (spi + i , v )
55-
56-
57- m .regs = {
58- "CTRL" : (spi + 0x00 , R_CTRL ),
59- "STATUS" : (spi + 0x08 , R_STATUS ),
60- "RXCNT" : (spi + 0x34 ),
61- "TXCNT" : (spi + 0x4c ),
62- "FIFO_STAT" : (spi + 0x10c , R_FIFO_STAT ),
63- "ISTATUS1" : (spi + 0x134 , R_ISTATUS1 ),
64- "ISTATUS2" : (spi + 0x13c , R_ISTATUS2 ),
65- "XFSTATUS" : (spi + 0x1c0 ),
66- "SHIFTCONFIG" : (spi + 0x150 ),
67- "PINCONFIG" : (spi + 0x154 ),
68- "PIN" : (spi + 0xc ),
69- "3c" : (spi + 0x3c ),
70- "DIVSTATUS" : (spi + 0x1e0 , R_DIVSTATUS )
71- }
34+ regs .CFG .val = 0x20 | (1 << 15 ) | 6
35+ regs .CFG .val = 0x20 | (1 << 15 ) | 4
36+ regs .CFG .val = 0x20 | (1 << 15 ) | 2
37+ regs .CFG .val = 0x20 | (3 << 15 ) | 0
7238
7339m .regs = {}
7440
75- m .start (300000 , bufsize = 0x80000 )
76-
41+ m .start (30000000 , bufsize = 0x80000 )
7742
7843regs .STATUS .val = 0xffffffff
79- regs .ISTATUS1 .val = 0xffffffff
80- regs .ISTATUS2 .val = 0xffffffff
44+ regs .IF_XFER .val = 0xffffffff
45+ regs .IF_FIFO .val = 0xffffffff
8146
8247regs .CLKDIV .val = 0xfff
83- regs .INTER_DLY .val = 0x1000
48+ regs .INTER_DELAY .val = 0x1000
8449
85- regs .SHIFTCONFIG .val = 0x20fcf7
50+ regs .SHIFTCFG .val = 0x21fcf7
8651
8752regs .PIN .val = 0x2
88- print ("pinconfig" , hex (regs .PINCONFIG .val ))
89- regs .PINCONFIG .val = 0x100
53+ print ("pinconfig" , hex (regs .PINCFG .val ))
54+ regs .PINCFG .val = 0x100
9055#regs.PINCONFIG.val = 0x2-7
91- print ("pinconfig" , hex (regs .PINCONFIG .val ))
92- print ("shiftconfig" , hex (regs .SHIFTCONFIG .val ))
93-
94- #regs.PIN.val = 0x0
95- #regs.PIN.val = 0x2
96- # auto_cs OR pin_cs
97-
98- #p.write32(spi + 0x150, 0x80c07)
99- #p.write32(spi + 0x150, 0x88c07)
100- print (hex (p .read32 (spi + 0x150 )))
101-
102- #p.write32(spi + 0x160, 0)
103- p .write32 (spi + 0x160 , 0xfff0020 )
104- p .write32 (spi + 0x168 , 0xffffb20 )
105- #p.write32(spi + 0x164, 0x06000210)
106- #p.write32(spi + 0x180, 0x02000000)
107- #p.write32(spi + 0x18c, 0x500)
108- #regs.INTER_DLY2 = 0x20000001
109-
110- p .write32 (spi + 0x200 , 0x0010 )
56+ print ("pinconfig" , hex (regs .PINCFG .val ))
57+ print ("shiftconfig" , hex (regs .SHIFTCFG .val ))
11158
11259p .write32 (spi + 0x3c , 0xffffffff )
11360
114- regs .PINCONFIG .val = 0x002
115- regs .PINCONFIG .val = 0x200
116-
61+ regs .PINCFG .val = 0x002
62+ regs .PINCFG .val = 0x200
11763
11864#p.write32(0x28e0380bc, 0x80100000)
11965#p.write32(0x28e0380c4, 0x80100000)
12066
121- data = b"Asahi Linux "
67+ data = b"\xff \xff \xff \xff \x00 \x00 \xff \xff "
12268
12369for i in range (2 ):
12470 for j in data :
125- regs .TXDATA .val = j
71+ regs .TXDATA .val = j | 0xffffff00
12672 regs .RXCNT .val = len (data )
12773 regs .TXCNT .val = len (data )
12874
12975 regs .STATUS .val = 0xffffffff
130- regs .ISTATUS1 .val = 0xffffffff
131- regs .ISTATUS2 .val = 0xffffffff
76+ regs .IF_XFER .val = 0xffffffff
77+ regs .IF_FIFO .val = 0xffffffff
13278
13379 regs .PIN .val = 0x0
13480 regs .CTRL .val = 0x1
@@ -137,10 +83,10 @@ def try_all_bits():
13783
13884 i = 0
13985 while regs .TXCNT .val != 0 :
140- print (f"{ regs .TXCNT .val :#x} { regs .FIFO_STAT .reg } { regs .STATUS .val :#x} { regs .ISTATUS2 .val :#x} { p .read32 (spi + 0x134 ):#x} " )
86+ print (f"{ regs .TXCNT .val :#x} { regs .FIFOSTAT .reg } { regs .STATUS .val :#x} { regs .IF_FIFO .val :#x} { p .read32 (spi + 0x134 ):#x} " )
14187 regs .STATUS .val = 0xffffffff
142- regs .ISTATUS1 .val = 0xffffffff
143- regs .ISTATUS2 .val = 0xffffffff
88+ regs .IF_XFER .val = 0xffffffff
89+ regs .IF_FIFO .val = 0xffffffff
14490 #regs.CTRL.val = 0x0
14591 #time.sleep(0.1)
14692 #regs.CTRL.val = 0x1[
@@ -151,32 +97,21 @@ def try_all_bits():
15197 if i > 0x100 :
15298 break
15399 time .sleep (0.001 )
154- print (f"{ regs .RXCNT .val :#x} { regs .FIFO_STAT .reg } { regs .STATUS .val :#x} { regs .ISTATUS2 .val :#x} " )
100+ print (f"{ regs .RXCNT .val :#x} { regs .FIFOSTAT .reg } { regs .STATUS .val :#x} { regs .IF_FIFO .val :#x} " )
155101 regs .STATUS .val = 0xffffffff
156- regs .ISTATUS1 .val = 0xffffffff
157- regs .ISTATUS2 .val = 0xffffffff
102+ regs .IF_XFER .val = 0xffffffff
103+ regs .IF_FIFO .val = 0xffffffff
158104
159105 mon .poll ()
160106
161- while regs .FIFO_STAT .reg .LEVEL_RX :
107+ while regs .FIFOSTAT .reg .LEVEL_RX :
162108 print ("RX" , hex (regs .RXDATA .val ))
163109
164110 regs .CTRL .val = 0
165111
166112m .complete ()
167113m .show ()
168114
169- def poll (count = 1000 ):
170- lval = None
171- for i in range (count ):
172- pins = 0x35 , 0x36 , 0x37
173- vals = [p .read32 (gpio + 4 * pin ) & 1 for pin in pins ]
174- if vals != lval :
175- print (f"{ i :6d} : { vals } " )
176- lval = vals
177-
178- mon .poll ()
179-
180115#run_shell(globals(), msg="Have fun!")
181116
182117
0 commit comments