From 714e36a9970d891289e3d76263cc678b920859b3 Mon Sep 17 00:00:00 2001 From: Magdalena Pastula Date: Wed, 5 Feb 2025 14:48:57 +0100 Subject: [PATCH] applications: sdp: mspi: add fix for max frequency Add temporary fix for not starting VTIM when max frequency is set (counter value 0). Signed-off-by: Magdalena Pastula --- applications/sdp/mspi/src/hrt/hrt-nrf54l15.s | 264 ++++++++++--------- applications/sdp/mspi/src/hrt/hrt.c | 7 + 2 files changed, 142 insertions(+), 129 deletions(-) diff --git a/applications/sdp/mspi/src/hrt/hrt-nrf54l15.s b/applications/sdp/mspi/src/hrt/hrt-nrf54l15.s index 1442265212a..4ad82c27493 100644 --- a/applications/sdp/mspi/src/hrt/hrt-nrf54l15.s +++ b/applications/sdp/mspi/src/hrt/hrt-nrf54l15.s @@ -9,33 +9,32 @@ .type hrt_tx, @function hrt_tx: lw a5,4(a0) - addi sp,sp,-20 - sw s0,16(sp) - sw s1,12(sp) + addi sp,sp,-16 + sw s0,12(sp) + sw s1,8(sp) sw a2,0(sp) - sw a3,8(sp) beq a5,zero,.L1 li a4,32 div a4,a4,a1 - lui t0,%hi(xfer_shift_ctrl) - addi a3,t0,%lo(xfer_shift_ctrl) - lbu s0,2(a3) - lbu a5,1(a3) - sb a1,2(a3) - lbu a3,3(a3) - li a2,3145728 + lui t2,%hi(xfer_shift_ctrl) + addi a2,t2,%lo(xfer_shift_ctrl) + lbu s1,2(a2) + lbu a5,1(a2) + sb a1,2(a2) + lbu a2,3(a2) + li t1,3145728 slli a5,a5,8 - slli a3,a3,20 - and a3,a3,a2 + slli a2,a2,20 + and a2,a2,t1 andi a5,a5,1792 - or a5,a5,a3 - li a2,126976 - slli a3,a1,12 - and a3,a3,a2 - or a5,a5,a3 + or a5,a5,a2 + li t1,126976 + slli a2,a1,12 + and a2,a2,t1 + or a5,a5,a2 addi a4,a4,-1 andi a4,a4,0xff - sb a4,%lo(xfer_shift_ctrl)(t0) + sb a4,%lo(xfer_shift_ctrl)(t2) andi a4,a4,63 or a5,a5,a4 #APP @@ -46,21 +45,21 @@ hrt_tx: and a5,a5,a4 ori a5,a5,4 sw a5,4(sp) - li a2,0 - li t2,1 - addi t1,t0,%lo(xfer_shift_ctrl) + li t1,0 + addi t0,t2,%lo(xfer_shift_ctrl) .L3: lw a5,4(a0) - bltu a2,a5,.L13 + bltu t1,a5,.L14 .L1: - lw s0,16(sp) - lw s1,12(sp) - addi sp,sp,20 + lw s0,12(sp) + lw s1,8(sp) + addi sp,sp,16 jr ra -.L13: +.L14: lw a5,4(a0) - sub a5,a5,a2 - beq a5,t2,.L4 + li a4,1 + sub a5,a5,t1 + beq a5,a4,.L4 li a4,2 beq a5,a4,.L5 .L6: @@ -68,28 +67,28 @@ hrt_tx: li a5,0 beq a4,zero,.L7 lw a5,0(a0) - slli a4,a2,2 + slli a4,t1,2 add a5,a5,a4 lw a5,0(a5) j .L7 .L4: - lbu a3,1(t1) - lbu a5,2(t1) - li s1,126976 - slli a3,a3,8 + lbu a2,1(t0) + lbu a5,2(t0) + li s0,126976 + slli a2,a2,8 slli a5,a5,12 - and a5,a5,s1 - andi a3,a3,1792 - or a3,a3,a5 + and a5,a5,s0 + andi a2,a2,1792 + or a2,a2,a5 lbu a4,8(a0) - lbu a5,3(t1) - li s1,3145728 + lbu a5,3(t0) + li s0,3145728 addi a4,a4,-1 slli a5,a5,20 andi a4,a4,0xff - and a5,a5,s1 - sb a4,%lo(xfer_shift_ctrl)(t0) - or a5,a3,a5 + and a5,a5,s0 + sb a4,%lo(xfer_shift_ctrl)(t2) + or a5,a2,a5 andi a4,a4,63 or a5,a5,a4 #APP @@ -97,7 +96,7 @@ hrt_tx: #NO_APP lw a5,12(a0) .L7: - beq a1,s0,.L8 + beq a1,s1,.L8 .L9: #APP csrr a4, 3022 @@ -108,47 +107,54 @@ hrt_tx: #APP csrw 3043, a4 #NO_APP - mv s0,a1 + mv s1,a1 .L8: lbu a4,16(a0) - andi a3,a4,0xff + andi a2,a4,0xff beq a4,zero,.L10 - bne a3,t2,.L11 + li a4,1 + bne a2,a4,.L11 #APP csrw 3017, a5 #NO_APP .L11: - bne a2,zero,.L12 + bne t1,zero,.L12 lw a5,0(sp) lbu a5,0(a5) bne a5,zero,.L12 - lw a5,8(sp) + mv a5,a3 + bne a3,zero,.L13 + li a5,1 +.L13: + slli a3,a5,16 + srli a3,a3,16 #APP - csrw 2005, a5 + csrw 2005, a3 #NO_APP lw a5,0(sp) - sb t2,0(a5) + li a4,1 + sb a4,0(a5) .L12: - addi a2,a2,1 + addi t1,t1,1 j .L3 .L5: - lbu a3,1(t1) - lbu a5,2(t1) - li s1,126976 - slli a3,a3,8 + lbu a2,1(t0) + lbu a5,2(t0) + li s0,126976 + slli a2,a2,8 slli a5,a5,12 - and a5,a5,s1 - andi a3,a3,1792 - or a3,a3,a5 + and a5,a5,s0 + andi a2,a2,1792 + or a2,a2,a5 lbu a4,9(a0) - lbu a5,3(t1) - li s1,3145728 + lbu a5,3(t0) + li s0,3145728 addi a4,a4,-1 slli a5,a5,20 andi a4,a4,0xff - and a5,a5,s1 - sb a4,%lo(xfer_shift_ctrl)(t0) - or a5,a3,a5 + and a5,a5,s0 + sb a4,%lo(xfer_shift_ctrl)(t2) + or a5,a2,a5 andi a4,a4,63 or a5,a5,a4 #APP @@ -167,7 +173,7 @@ hrt_tx: hrt_tx_rx.constprop.0: lw a5,0(a0) lw a4,4(a0) - beq a4,zero,.L18 + beq a4,zero,.L19 lw a4,0(a5) slli a1,a1,12 li a5,126976 @@ -183,41 +189,41 @@ hrt_tx_rx.constprop.0: li a1,-16777216 li t0,1 add a3,a3,t1 -.L20: +.L21: lw t1,4(a0) - bltu a5,t1,.L25 -.L18: + bltu a5,t1,.L26 +.L19: ret -.L25: +.L26: lbu t1,16(a0) andi t2,t1,0xff - beq t1,zero,.L21 - bne t2,t0,.L22 + beq t1,zero,.L22 + bne t2,t0,.L23 and t1,a4,a1 #APP csrw 3017, t1 #NO_APP -.L22: +.L23: slli a4,a4,8 - bne a5,zero,.L23 - beq a2,zero,.L23 + bne a5,zero,.L24 + beq a2,zero,.L24 #APP csrw 2002, a3 #NO_APP -.L24: +.L25: addi a5,a5,1 - j .L20 -.L21: + j .L21 +.L22: and t1,a4,a1 #APP csrw 3016, t1 #NO_APP - j .L22 -.L23: + j .L23 +.L24: #APP csrr t1, 3018 #NO_APP - j .L24 + j .L25 .size hrt_tx_rx.constprop.0, .-hrt_tx_rx.constprop.0 .section .text.hrt_write,"ax",@progbits .align 1 @@ -236,23 +242,23 @@ hrt_write: li a5,0 addi a4,a0,4 li a3,4 -.L32: +.L33: lw a2,0(a4) - bne a2,zero,.L31 + bne a2,zero,.L32 addi a5,a5,1 andi a5,a5,0xff addi a4,a4,20 - bne a5,a3,.L32 + bne a5,a3,.L33 li a5,3 -.L31: +.L32: li a4,1 - beq a5,a4,.L33 - li a4,3 beq a5,a4,.L34 + li a4,3 + beq a5,a4,.L35 li a4,0 - bne a5,zero,.L35 + bne a5,zero,.L36 lbu a4,80(s0) -.L35: +.L36: lui a3,%hi(xfer_shift_ctrl+2) sb a4,%lo(xfer_shift_ctrl+2)(a3) #APP @@ -281,21 +287,21 @@ hrt_write: li a2,1 add a5,s0,a5 lw a3,4(a5) - beq a3,a2,.L36 - li a2,2 beq a3,a2,.L37 + li a2,2 + beq a3,a2,.L38 li a5,32 div a5,a5,a4 - j .L53 -.L33: - lbu a4,81(s0) - j .L35 + j .L54 .L34: + lbu a4,81(s0) + j .L36 +.L35: lbu a4,83(s0) - j .L35 -.L36: + j .L36 +.L37: lbu a5,8(a5) -.L53: +.L54: #APP csrw 3022, a5 #NO_APP @@ -305,11 +311,11 @@ hrt_write: lbu a4,89(s0) slli a5,a5,16 srli a5,a5,16 - bne a4,zero,.L40 + bne a4,zero,.L41 #APP csrc 3008, a5 #NO_APP -.L41: +.L42: lhu a3,84(s0) lbu a1,80(s0) addi a2,sp,3 @@ -331,7 +337,7 @@ hrt_write: addi a0,s0,60 call hrt_tx lbu a5,94(s0) - bne a5,zero,.L42 + bne a5,zero,.L43 li a5,16384 addi a5,a5,1 #APP @@ -339,41 +345,41 @@ hrt_write: csrw 3017, 0 csrw 2000, 0 #NO_APP -.L43: +.L44: #APP csrw 2005, 0 #NO_APP lbu a5,88(s0) - bne a5,zero,.L30 + bne a5,zero,.L31 lbu a4,87(s0) li a5,1 sll a5,a5,a4 lbu a4,89(s0) slli a5,a5,16 srli a5,a5,16 - bne a4,zero,.L46 + bne a4,zero,.L47 #APP csrs 3008, a5 #NO_APP -.L30: +.L31: lw ra,12(sp) lw s0,8(sp) addi sp,sp,16 jr ra -.L37: +.L38: lbu a5,9(a5) - j .L53 -.L40: + j .L54 +.L41: #APP csrs 3008, a5 #NO_APP - j .L41 -.L42: + j .L42 +.L43: #APP csrr a5, 3022 #NO_APP andi a5,a5,0xff - bne a5,zero,.L42 + bne a5,zero,.L43 #APP csrw 2000, 0 #NO_APP @@ -384,7 +390,7 @@ hrt_write: #NO_APP lbu a5,94(s0) li a4,1 - bne a5,a4,.L44 + bne a5,a4,.L45 lbu a4,86(s0) sll a5,a5,a4 slli a5,a5,16 @@ -392,10 +398,10 @@ hrt_write: #APP csrc 3008, a5 #NO_APP - j .L43 -.L44: + j .L44 +.L45: li a3,3 - bne a5,a3,.L43 + bne a5,a3,.L44 lbu a5,86(s0) sll a4,a4,a5 slli a4,a4,16 @@ -403,12 +409,12 @@ hrt_write: #APP csrs 3008, a4 #NO_APP - j .L43 -.L46: + j .L44 +.L47: #APP csrc 3008, a5 #NO_APP - j .L30 + j .L31 .size hrt_write, .-hrt_write .section .text.hrt_read,"ax",@progbits .align 1 @@ -421,7 +427,7 @@ hrt_read: lbu a5,89(a0) lbu a4,87(a0) mv s0,a0 - bne a5,zero,.L55 + bne a5,zero,.L56 li a5,1 sll a5,a5,a4 slli a5,a5,16 @@ -429,7 +435,7 @@ hrt_read: #APP csrc 3008, a5 #NO_APP -.L56: +.L57: lhu a5,90(s0) slli a5,a5,16 srli a5,a5,16 @@ -488,19 +494,19 @@ hrt_read: addi a0,s0,20 call hrt_tx_rx.constprop.0 li a5,0 -.L57: +.L58: lw a4,64(s0) - bgtu a4,a5,.L58 + bgtu a4,a5,.L59 #APP csrw 2000, 0 csrw 2001, 0 csrw 3019, 0 #NO_APP lbu a5,88(s0) - bne a5,zero,.L59 + bne a5,zero,.L60 lbu a5,89(s0) lbu a4,87(s0) - bne a5,zero,.L60 + bne a5,zero,.L61 li a5,1 sll a5,a5,a4 slli a5,a5,16 @@ -508,7 +514,7 @@ hrt_read: #APP csrs 3008, a5 #NO_APP -.L59: +.L60: lhu a5,90(s0) ori a5,a5,4 sh a5,90(s0) @@ -520,7 +526,7 @@ hrt_read: lw s0,4(sp) addi sp,sp,12 jr ra -.L55: +.L56: li a5,1 sll a5,a5,a4 slli a5,a5,16 @@ -528,8 +534,8 @@ hrt_read: #APP csrs 3008, a5 #NO_APP - j .L56 -.L58: + j .L57 +.L59: #APP csrr a3, 3018 #NO_APP @@ -538,8 +544,8 @@ hrt_read: add a4,a4,a5 sb a3,0(a4) addi a5,a5,1 - j .L57 -.L60: + j .L58 +.L61: li a5,1 sll a5,a5,a4 slli a5,a5,16 @@ -547,7 +553,7 @@ hrt_read: #APP csrc 3008, a5 #NO_APP - j .L59 + j .L60 .size hrt_read, .-hrt_read .section .sdata.xfer_shift_ctrl,"aw" .align 2 diff --git a/applications/sdp/mspi/src/hrt/hrt.c b/applications/sdp/mspi/src/hrt/hrt.c index 14cf6770f72..15885a11fd3 100644 --- a/applications/sdp/mspi/src/hrt/hrt.c +++ b/applications/sdp/mspi/src/hrt/hrt.c @@ -102,6 +102,13 @@ static void hrt_tx(volatile hrt_xfer_data_t *xfer_data, uint8_t frame_width, boo } if ((i == 0) && (!*counter_running)) { + /* + * Temporary fix for max frequency. Top value can be set to 0, + * but initial value cannot, because counter will not start. + */ + if (counter_value == 0) { + counter_value = 1; + } /* Start counter */ nrf_vpr_csr_vtim_simple_counter_set(0, counter_value); *counter_running = true;