aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2023-06-05 23:40:34 +0200
committerDario Nieuwenhuis <[email protected]>2023-06-05 23:40:34 +0200
commit70e1b976d87c5bde4b07e7e0b0fcf1499e4d98ef (patch)
tree838b4e3f1c19eaa9a7828e9f582f37e90ed0f2d8
parentadf053a935d03711b48859e3243e86d3038fa7c4 (diff)
rp/flash: fix missing clobbers, do not clobber frame pointer (r7).
-rw-r--r--embassy-rp/src/flash.rs21
1 files changed, 11 insertions, 10 deletions
diff --git a/embassy-rp/src/flash.rs b/embassy-rp/src/flash.rs
index 838b987dc..cd34e605e 100644
--- a/embassy-rp/src/flash.rs
+++ b/embassy-rp/src/flash.rs
@@ -587,7 +587,6 @@ mod ram_helpers {
587 "ldr r4, [r5, #4]", 587 "ldr r4, [r5, #4]",
588 "blx r4", // flash_exit_xip() 588 "blx r4", // flash_exit_xip()
589 589
590 "mov r7, r10", // cmd
591 590
592 "movs r4, #0x18", 591 "movs r4, #0x18",
593 "lsls r4, r4, #24", // 0x18000000, SSI, RP2040 datasheet 4.10.13 592 "lsls r4, r4, #24", // 0x18000000, SSI, RP2040 datasheet 4.10.13
@@ -604,8 +603,9 @@ mod ram_helpers {
604 "str r1, [r4, #0]", 603 "str r1, [r4, #0]",
605 604
606 // Write ctrlr1 with len-1 605 // Write ctrlr1 with len-1
607 "ldr r0, [r7, #8]", // dummy_len 606 "mov r3, r10", // cmd
608 "ldr r1, [r7, #16]", // data_len 607 "ldr r0, [r3, #8]", // dummy_len
608 "ldr r1, [r3, #16]", // data_len
609 "add r0, r1", 609 "add r0, r1",
610 "subs r0, #1", 610 "subs r0, #1",
611 "str r0, [r4, #0x04]", // CTRLR1 611 "str r0, [r4, #0x04]", // CTRLR1
@@ -617,8 +617,8 @@ mod ram_helpers {
617 // Write cmd/addr phase to DR 617 // Write cmd/addr phase to DR
618 "mov r2, r4", 618 "mov r2, r4",
619 "adds r2, 0x60", // &DR 619 "adds r2, 0x60", // &DR
620 "ldr r0, [r7, #0]", // cmd_addr 620 "ldr r0, [r3, #0]", // cmd_addr
621 "ldr r1, [r7, #4]", // cmd_addr_len 621 "ldr r1, [r3, #4]", // cmd_addr_len
622 "10:", 622 "10:",
623 "ldrb r3, [r0]", 623 "ldrb r3, [r0]",
624 "strb r3, [r2]", // DR 624 "strb r3, [r2]", // DR
@@ -627,7 +627,8 @@ mod ram_helpers {
627 "bne 10b", 627 "bne 10b",
628 628
629 // Skip any dummy cycles 629 // Skip any dummy cycles
630 "ldr r1, [r7, #8]", // dummy_len 630 "mov r3, r10", // cmd
631 "ldr r1, [r3, #8]", // dummy_len
631 "cmp r1, #0", 632 "cmp r1, #0",
632 "beq 9f", 633 "beq 9f",
633 "4:", 634 "4:",
@@ -644,8 +645,9 @@ mod ram_helpers {
644 645
645 // Read RX fifo 646 // Read RX fifo
646 "9:", 647 "9:",
647 "ldr r0, [r7, #12]", // data 648 "mov r2, r10", // cmd
648 "ldr r1, [r7, #16]", // data_len 649 "ldr r0, [r2, #12]", // data
650 "ldr r1, [r2, #16]", // data_len
649 651
650 "2:", 652 "2:",
651 "ldr r3, [r4, #0x28]", // SR 653 "ldr r3, [r4, #0x28]", // SR
@@ -679,13 +681,12 @@ mod ram_helpers {
679 out("r2") _, 681 out("r2") _,
680 out("r3") _, 682 out("r3") _,
681 out("r4") _, 683 out("r4") _,
684 out("r5") _,
682 // Registers r8-r10 are used to store values 685 // Registers r8-r10 are used to store values
683 // from r0-r2 in registers not clobbered by 686 // from r0-r2 in registers not clobbered by
684 // function calls. 687 // function calls.
685 // The values can't be passed in using r8-r10 directly 688 // The values can't be passed in using r8-r10 directly
686 // due to https://github.com/rust-lang/rust/issues/99071 689 // due to https://github.com/rust-lang/rust/issues/99071
687 out("r8") _,
688 out("r9") _,
689 out("r10") _, 690 out("r10") _,
690 clobber_abi("C"), 691 clobber_abi("C"),
691 ); 692 );