Skip to content

Commit c2042a1

Browse files
mif1-nordicmasz-nordic
authored andcommitted
applications: sdp: mspi: Dummy cycles fix
Fixed dummy cycles implementation. Changed dummy cycles limit from 32 to UINT32_MAX. Signed-off-by: Michal Frankiewicz <[email protected]>
1 parent 5a8e80a commit c2042a1

File tree

4 files changed

+185
-129
lines changed

4 files changed

+185
-129
lines changed

applications/sdp/mspi/src/hrt/hrt-nrf54l15.s

Lines changed: 120 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -16,84 +16,92 @@ hrt_tx:
1616
sw a2,0(sp)
1717
sw a3,4(sp)
1818
beq a4,zero,.L1
19-
slli a3,a1,12
19+
slli s0,a1,12
2020
li a4,126976
21-
and a3,a3,a4
21+
and s0,s0,a4
2222
li a4,32
2323
div a4,a4,a1
24-
mv s0,a0
24+
mv a5,a0
2525
addi a4,a4,-1
2626
andi a4,a4,63
27-
or a4,a4,a3
27+
or a4,a4,s0
2828
ori a4,a4,1024
2929
#APP
3030
csrw 3019, a4
3131
#NO_APP
3232
li s1,0
3333
.L3:
34-
lw a4,4(s0)
35-
bltu s1,a4,.L9
34+
lw a4,4(a5)
35+
bltu s1,a4,.L10
3636
.L1:
3737
lw ra,20(sp)
3838
lw s0,16(sp)
3939
lw s1,12(sp)
4040
addi sp,sp,24
4141
jr ra
42-
.L9:
43-
lw a4,4(s0)
44-
li a1,1
42+
.L10:
43+
lw a4,4(a5)
44+
li a2,1
4545
sub a4,a4,s1
46-
beq a4,a1,.L4
47-
li a1,2
48-
beq a4,a1,.L5
46+
beq a4,a2,.L4
47+
li a2,2
48+
beq a4,a2,.L5
4949
.L6:
50-
lw a1,16(s0)
51-
lw a4,0(s0)
52-
slli a0,s1,2
53-
sw a3,8(sp)
54-
add a4,a4,a0
55-
lw a0,0(a4)
56-
jalr a1
57-
j .L12
50+
lw a4,0(a5)
51+
bne a4,zero,.L8
52+
lw a4,16(a5)
53+
sw a5,8(sp)
54+
li a0,0
55+
j .L14
5856
.L4:
59-
lbu a4,8(s0)
60-
sw a3,8(sp)
57+
lbu a4,8(a5)
6158
addi a4,a4,-1
6259
andi a4,a4,63
63-
or a4,a4,a3
60+
or a4,a4,s0
6461
ori a4,a4,1024
6562
#APP
6663
csrw 3019, a4
6764
#NO_APP
68-
lw a4,16(s0)
69-
lw a0,12(s0)
65+
lw a4,16(a5)
66+
lw a0,12(a5)
67+
sw a5,8(sp)
68+
.L14:
7069
jalr a4
71-
.L12:
72-
lw a3,8(sp)
73-
bne s1,zero,.L8
74-
lw a5,0(sp)
75-
lbu a4,0(a5)
76-
bne a4,zero,.L8
77-
lw a5,4(sp)
70+
.L13:
71+
lw a5,8(sp)
72+
bne s1,zero,.L9
73+
lw a4,0(sp)
74+
lbu a4,0(a4)
75+
bne a4,zero,.L9
76+
lw a4,4(sp)
7877
#APP
79-
csrw 2005, a5
78+
csrw 2005, a4
8079
#NO_APP
81-
lw a5,0(sp)
80+
lw a3,0(sp)
8281
li a4,1
83-
sb a4,0(a5)
84-
.L8:
82+
sb a4,0(a3)
83+
.L9:
8584
addi s1,s1,1
8685
j .L3
8786
.L5:
88-
lbu a4,9(s0)
87+
lbu a4,9(a5)
8988
addi a4,a4,-1
9089
andi a4,a4,63
91-
or a4,a4,a3
90+
or a4,a4,s0
9291
ori a4,a4,1024
9392
#APP
9493
csrw 3019, a4
9594
#NO_APP
9695
j .L6
96+
.L8:
97+
lw a2,16(a5)
98+
lw a4,0(a5)
99+
slli a1,s1,2
100+
sw a5,8(sp)
101+
add a4,a4,a1
102+
lw a0,0(a4)
103+
jalr a2
104+
j .L13
97105
.size hrt_tx, .-hrt_tx
98106
.section .text.hrt_write,"ax",@progbits
99107
.align 1
@@ -103,138 +111,154 @@ hrt_write:
103111
addi sp,sp,-16
104112
sw s0,8(sp)
105113
sw ra,12(sp)
106-
lhu a5,70(a0)
107114
mv s0,a0
108115
sb zero,3(sp)
116+
lhu a5,90(a0)
109117
#APP
110118
csrw 3009, a5
111119
#NO_APP
112-
lw a5,4(a0)
113-
beq a5,zero,.L14
114-
lbu a3,60(a0)
115120
li a5,0
116-
.L15:
121+
addi a4,a0,4
122+
li a3,4
123+
.L17:
124+
lw a2,0(a4)
125+
bne a2,zero,.L16
126+
addi a5,a5,1
127+
andi a5,a5,0xff
128+
addi a4,a4,20
129+
bne a5,a3,.L17
130+
li a5,3
131+
.L16:
132+
li a4,1
133+
beq a5,a4,.L18
134+
li a4,3
135+
beq a5,a4,.L19
136+
li a4,0
137+
bne a5,zero,.L20
138+
lbu a4,80(s0)
139+
.L20:
117140
#APP
118141
csrw 2000, 2
119142
#NO_APP
120-
lhu a4,64(s0)
143+
lhu a3,84(s0)
121144
#APP
122145
csrr a2, 2003
123146
#NO_APP
124147
li a1,-65536
125148
and a2,a2,a1
126-
or a4,a4,a2
149+
or a3,a3,a2
127150
#APP
128-
csrw 2003, a4
151+
csrw 2003, a3
129152
csrw 3011, 0
130153
#NO_APP
131154
li a2,2031616
132-
slli a4,a3,16
133-
and a4,a4,a2
134-
ori a4,a4,4
155+
slli a3,a4,16
156+
and a3,a3,a2
157+
ori a3,a3,4
135158
#APP
136-
csrw 3043, a4
159+
csrw 3043, a3
137160
#NO_APP
138-
li a4,20
139-
mul a5,a5,a4
161+
li a3,20
162+
mul a5,a5,a3
140163
li a2,1
141164
add a5,s0,a5
142-
lw a4,4(a5)
143-
beq a4,a2,.L17
165+
lw a3,4(a5)
166+
beq a3,a2,.L21
144167
li a2,2
145-
beq a4,a2,.L18
168+
beq a3,a2,.L22
146169
li a5,32
147-
div a5,a5,a3
148-
j .L33
149-
.L14:
150-
lw a5,24(a0)
151-
beq a5,zero,.L16
152-
lbu a3,61(a0)
153-
li a5,1
154-
j .L15
155-
.L16:
156-
lbu a3,62(a0)
157-
li a5,2
158-
j .L15
159-
.L17:
170+
div a5,a5,a4
171+
j .L39
172+
.L18:
173+
lbu a4,81(s0)
174+
j .L20
175+
.L19:
176+
lbu a4,83(s0)
177+
j .L20
178+
.L21:
160179
lbu a5,8(a5)
161-
.L33:
180+
.L39:
162181
#APP
163182
csrw 3022, a5
164183
#NO_APP
165-
lbu a4,66(s0)
184+
lbu a4,86(s0)
166185
li a5,1
167186
sll a5,a5,a4
168-
lbu a4,68(s0)
187+
lbu a4,88(s0)
169188
slli a5,a5,16
170189
srli a5,a5,16
171-
bne a4,zero,.L21
190+
bne a4,zero,.L25
172191
#APP
173192
csrc 3008, a5
174193
#NO_APP
175-
.L22:
176-
lhu a3,64(s0)
177-
lbu a1,60(s0)
194+
.L26:
195+
lhu a3,84(s0)
196+
lbu a1,80(s0)
178197
addi a2,sp,3
179198
mv a0,s0
180199
call hrt_tx
181-
lhu a3,64(s0)
182-
lbu a1,61(s0)
200+
lhu a3,84(s0)
201+
lbu a1,81(s0)
183202
addi a2,sp,3
184203
addi a0,s0,20
185204
call hrt_tx
186-
lhu a3,64(s0)
187-
lbu a1,62(s0)
205+
lhu a3,84(s0)
206+
lbu a1,82(s0)
188207
addi a2,sp,3
189208
addi a0,s0,40
190209
call hrt_tx
191-
lbu a5,69(s0)
192-
beq a5,zero,.L23
193-
.L24:
210+
lhu a3,84(s0)
211+
lbu a1,83(s0)
212+
addi a2,sp,3
213+
addi a0,s0,60
214+
call hrt_tx
215+
lbu a5,89(s0)
216+
beq a5,zero,.L27
217+
.L28:
194218
#APP
195219
csrr a5, 3022
196220
#NO_APP
197221
andi a5,a5,0xff
198-
bne a5,zero,.L24
222+
bne a5,zero,.L28
199223
#APP
200224
csrw 2010, 0
201225
#NO_APP
202-
.L23:
226+
.L27:
203227
li a5,16384
204228
addi a5,a5,1
205229
#APP
206230
csrw 3019, a5
207231
csrw 3017, 0
208232
csrw 2000, 0
209233
#NO_APP
210-
lbu a5,67(s0)
211-
bne a5,zero,.L13
212-
lbu a4,66(s0)
234+
lbu a5,87(s0)
235+
bne a5,zero,.L15
236+
lbu a4,86(s0)
213237
li a5,1
214238
sll a5,a5,a4
215-
lbu a4,68(s0)
239+
lbu a4,88(s0)
216240
slli a5,a5,16
217241
srli a5,a5,16
218-
bne a4,zero,.L26
242+
bne a4,zero,.L30
219243
#APP
220244
csrs 3008, a5
221245
#NO_APP
222-
.L13:
246+
.L15:
223247
lw ra,12(sp)
224248
lw s0,8(sp)
225249
addi sp,sp,16
226250
jr ra
227-
.L18:
251+
.L22:
228252
lbu a5,9(a5)
229-
j .L33
230-
.L21:
253+
j .L39
254+
.L25:
231255
#APP
232256
csrs 3008, a5
233257
#NO_APP
234-
j .L22
235-
.L26:
258+
j .L26
259+
.L30:
236260
#APP
237261
csrc 3008, a5
238262
#NO_APP
239-
j .L13
263+
j .L15
240264
.size hrt_write, .-hrt_write

applications/sdp/mspi/src/hrt/hrt.c

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,11 @@ static void hrt_tx(volatile hrt_xfer_data_t *xfer_data, uint8_t frame_width, boo
8181
SHIFTCNTB_VALUE(xfer_data->penultimate_word_clocks);
8282
nrf_vpr_csr_vio_shift_ctrl_buffered_set(&xfer_shift_ctrl);
8383
default: /* Intentional fallthrough */
84-
xfer_data->vio_out_set(((uint32_t *)xfer_data->data)[i]);
84+
if (xfer_data->data == NULL) {
85+
xfer_data->vio_out_set(0);
86+
} else {
87+
xfer_data->vio_out_set(((uint32_t *)xfer_data->data)[i]);
88+
}
8589
}
8690

8791
if ((i == 0) && (!*counter_running)) {
@@ -156,6 +160,10 @@ void hrt_write(hrt_xfer_t *hrt_xfer_params)
156160
/* Transfer address */
157161
hrt_tx(&hrt_xfer_params->xfer_data[HRT_FE_ADDRESS], hrt_xfer_params->bus_widths.address,
158162
&counter_running, hrt_xfer_params->counter_value);
163+
/* Transfer dummy cycles */
164+
hrt_tx(&hrt_xfer_params->xfer_data[HRT_FE_DUMMY_CYCLES],
165+
hrt_xfer_params->bus_widths.dummy_cycles, &counter_running,
166+
hrt_xfer_params->counter_value);
159167
/* Transfer data */
160168
hrt_tx(&hrt_xfer_params->xfer_data[HRT_FE_DATA], hrt_xfer_params->bus_widths.data,
161169
&counter_running, hrt_xfer_params->counter_value);

applications/sdp/mspi/src/hrt/hrt.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
typedef enum {
2525
HRT_FE_COMMAND,
2626
HRT_FE_ADDRESS,
27+
HRT_FE_DUMMY_CYCLES,
2728
HRT_FE_DATA,
2829
HRT_FE_MAX
2930
} hrt_frame_element_t;
@@ -32,6 +33,7 @@ typedef enum {
3233
typedef struct {
3334
uint8_t command;
3435
uint8_t address;
36+
uint8_t dummy_cycles;
3537
uint8_t data;
3638
} hrt_xfer_bus_widths_t;
3739

@@ -78,7 +80,9 @@ typedef struct {
7880
/** @brief Data for all transfer parts */
7981
hrt_xfer_data_t xfer_data[HRT_FE_MAX];
8082

81-
/** @brief Bus widths for different transfer parts (command, address, and data). */
83+
/** @brief Bus widths for different transfer parts (command, address, dummy_cycles, and
84+
* data).
85+
*/
8286
hrt_xfer_bus_widths_t bus_widths;
8387

8488
/** @brief Timer value, used for setting clock frequency

0 commit comments

Comments
 (0)