aboutsummaryrefslogtreecommitdiffhomepage
path: root/builder
diff options
context:
space:
mode:
authorPatricio Whittingslow <[email protected]>2024-12-18 15:36:30 -0300
committerGitHub <[email protected]>2024-12-18 19:36:30 +0100
commit37f35f8c910b05e2040433448546f41b34535b32 (patch)
tree32bdf01b1c2b8d75e9a7f1a24e5c62be9d432ce0 /builder
parent0d13e61d0cbe7aa82678a6dec7dda0115db82397 (diff)
downloadtinygo-37f35f8c910b05e2040433448546f41b34535b32.tar.gz
tinygo-37f35f8c910b05e2040433448546f41b34535b32.zip
Add RP2350 support (#4459)
machine/rp2350: add support * add linker scripts for rp2350 * add bootloader * begin melding rp2040 and rp2350 APIs * add UART * add rp2350 boot patching * Fix RP2350 memory layout (#4626) * Remove rp2040-style second stage bootloader. * Add 'minimum viable' IMAGE_DEF embedded block * Create a pico2 specific target * Implement rp2350 init, clock, and uart support * Merge rp2 reset code back together * Separate chip-specific clock definitions * Clear pad isolation bit on rp2350 * Init UART in rp2350 runtime * Correct usb/serial initialization order * Implement jump-to-bootloader * test: add pico2 to smoketests --------- Signed-off-by: deadprogram <[email protected]> Co-authored-by: Matthew Mets <[email protected]> Co-authored-by: Matt Mets <[email protected]> Co-authored-by: deadprogram <[email protected]>
Diffstat (limited to 'builder')
-rw-r--r--builder/build.go32
1 files changed, 31 insertions, 1 deletions
diff --git a/builder/build.go b/builder/build.go
index 57b67ed45..d1d2c4be6 100644
--- a/builder/build.go
+++ b/builder/build.go
@@ -822,6 +822,12 @@ func Build(pkgName, outpath, tmpdir string, config *compileopts.Config) (BuildRe
return fmt.Errorf("could not modify stack sizes: %w", err)
}
}
+
+ // Apply patches of bootloader in the order they appear.
+ if len(config.Target.BootPatches) > 0 {
+ err = applyPatches(result.Executable, config.Target.BootPatches)
+ }
+
if config.RP2040BootPatch() {
// Patch the second stage bootloader CRC into the .boot2 section
err = patchRP2040BootCRC(result.Executable)
@@ -1434,6 +1440,23 @@ func printStacks(calculatedStacks []string, stackSizes map[string]functionStackS
}
}
+func applyPatches(executable string, bootPatches []string) (err error) {
+ for _, patch := range bootPatches {
+ switch patch {
+ case "rp2040":
+ err = patchRP2040BootCRC(executable)
+ // case "rp2350":
+ // err = patchRP2350BootIMAGE_DEF(executable)
+ default:
+ err = errors.New("undefined boot patch name")
+ }
+ if err != nil {
+ return fmt.Errorf("apply boot patch %q: %w", patch, err)
+ }
+ }
+ return nil
+}
+
// RP2040 second stage bootloader CRC32 calculation
//
// Spec: https://datasheets.raspberrypi.org/rp2040/rp2040-datasheet.pdf
@@ -1445,7 +1468,7 @@ func patchRP2040BootCRC(executable string) error {
}
if len(bytes) != 256 {
- return fmt.Errorf("rp2040 .boot2 section must be exactly 256 bytes")
+ return fmt.Errorf("rp2040 .boot2 section must be exactly 256 bytes, got %d", len(bytes))
}
// From the 'official' RP2040 checksum script:
@@ -1484,3 +1507,10 @@ func lock(path string) func() {
return func() { flock.Close() }
}
+
+func b2u8(b bool) uint8 {
+ if b {
+ return 1
+ }
+ return 0
+}