Commit graph

39805 commits

Author SHA1 Message Date
Paul Sauro
e2ee665cce usb storage: defer commands until exclusive storage handover completes
A host may send a command after SET_CONFIGURATION while filesystem clients are still acknowledging the storage handover. Previously TEST UNIT READY could report no medium, while other commands could reach storage before exclusive access was granted.

Retain the first CBW until exclusive access is available. Notify the mass-storage class when handover completes, then execute the retained command and keep the OUT endpoint unarmed until its CSW. On BOT reset, discard the retained CBW and accept a new command.

This changes command handling while waiting for ownership. The policy for requesting, preserving and releasing exclusive storage is handled by a separate preparatory patch.

Change-Id: If82fc87160e9d7da930a3217445fea92e58dd1ec
2026-09-25 07:49:36 -04:00
Paul Sauro
2b664d6025 usb: preserve exclusive storage ownership across repeated configuration and reset
Do not release and reacquire the disk when a host repeats configuration
or resets the bus before selecting mass storage again. This avoids
remounting local filesystems while the host still owns the disk.

After reset the filesystems remain unmounted until the host selects a
configuration which releases storage, or the cable is unplugged. A host
normally reconfigures promptly; one that never does leaves the disk
unavailable locally until unplug, rather than risking simultaneous access.

Change-Id: I6e296247dd2227e549105d85760613c1a81554a1
2026-09-25 07:48:31 -04:00
Michael Giacomelli
ff762858c7 opus: build the decoder without the encoder halves
Rockbox lists no encoder, so CELT_DECODE_ONLY folds away the thirteen
encoder branches in celt/bands.c and stops gcc keeping their values live
across quant_partition's recursive calls.  2,976 bytes smaller.

Modelled: -0.47% ARMv4, -0.69% ARMv5E.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Change-Id: Ie96a0a63e035ab0cdcdbe9eeeb6691f24fecfa41
2026-09-24 17:47:58 -04:00
Michael Giacomelli
07557038b4 opus: tabulate bitexact_log2tan on PP5022/5024
Its reachable input set is 2,985 (qn,i) pairs for any stream ever, so it
tabulates exactly in 6,484 bytes.  Verified exhaustively against the
compiled functions.  Only built for PP5022/PP5024, where the tables fit
the 80 KB IRAM window; elsewhere it measured no gain.

Measured, e200v1: 39.18 -> 38.96 MHz with the tables in IRAM, 39.07 with
them in DRAM.  Clip+: 28.05 -> 28.08 MHz, so not built there.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Change-Id: I38417793dc337ec6cb61139cc919d23ac09b04dd
2026-09-24 17:47:33 -04:00
Solomon Peachy
0918a068eb opus: More surgical update to 9a972e7f51
This re-enables upstream ASM optimizations for Cortex-M.  Only the
our downstream improvements are disabled, as they do not assemble in
thumb2 mode.

Change-Id: Icca1b3dbf04786c7714fb4eef92ad66aa55132f3
2026-09-24 17:24:24 -04:00
Solomon Peachy
9a972e7f51 opus: Correct enablement of new ARMv5e optimizations
* Only use new ARMv5e optimizations on classic (non-M) profile
 * fix inconsistent ARM_ARCH >= 5 vs == 5

Fixes red in 0c4345475a and ae223933bf

Change-Id: Ieb688679d2d698a19870b1a63b4151a8593e04e0
2026-09-24 16:59:07 -04:00
Michael Giacomelli
ae223933bf opus: ARMv5E FFT butterflies
radix-3, 4 and 5.  The gain is bookkeeping: twiddles addressed by
displacement from one base register, post-indexed stores, and C_MUL's
Q15 doubling folded into the add that consumes it.

Modelled: -4.72% ARMv5E, opus_fft_impl -25.3%.
Measured: Clip+ 30.89 -> 29.33 MHz.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Change-Id: I173667ebb13308f83bd6fcb4e876f5a56c698cd3
2026-09-24 16:33:04 -04:00
Michael Giacomelli
0c4345475a opus: ARMv5E assembly for the backward MDCT inner loops
Pre-rotation, post-rotation and mirror, with a packed-twiddle complex
multiply throughout.

Modelled: -8.0% ARMv5E against the C loops.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Change-Id: I3fcaf2343e04e3f3f4462fc442f8fac623729631
2026-09-24 16:32:52 -04:00
Michael Giacomelli
08d3332edf opus: ARM stereo de-emphasis kernel
deemphasis_stereo_simple on both cores, with the filter state kept
unshifted and shifted inside the add that consumes it.

Modelled: -0.53% ARMv4, -0.96% ARMv5E.
Measured with the three preceding commits: e200v1 49.42 -> 48.96 MHz,
Clip+ 32.83 -> 30.89 MHz.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Change-Id: Id09297974f3b66a5a193b524d68fd8844f71cc02
2026-09-24 15:50:19 -04:00
Solomon Peachy
bdbbb753c5 ipod6gboot: Silence build warning introduced in af2a3b74f4
(ipod6g doesn't utilize the QR Code stuff used by the nano3g)

Change-Id: I99c9e565b5a4c7212662eab097f1bae2f4ed0ea4
2026-09-24 15:46:23 -04:00
Vencislav Atanasov
af2a3b74f4 ipodnano3g: Show a QR code if the NAND is not supported
Currently, the link points to the unofficial bootloader builds and installation instructions by freemyipod.org, but it can be changed at any time by the rockbox.org website maintainer.

Co-authored-by: ChatGPT-5.6 Luna
Change-Id: I05a78a6540ebcc0e03a1f12f5d765e69e68af00c
2026-09-24 14:29:36 -04:00
Michael Giacomelli
31f2a27f1e opus: inline EC_ILOG on ARMv4
ARMv4 has no CLZ, so all 8,680 ilog2 calls went through libgcc's
__clzsi2.  Fifteen branchless instructions replace it.

Modelled: -0.91% ARMv4; ARMv5E unaffected, it already emits CLZ.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Change-Id: Ib84b97acb687da4101e02bad1b0e8bbd256d32df
2026-09-24 10:39:52 -04:00
Paul Sauro
d1fab121f8 usb arc: flush both EP0 directions when SETUP replaces a transfer
The USB core can accept a replacement SETUP while the previous control transfer is unfinished. Before dispatching that SETUP, flush both EP0 directions and discard their old completion bits so old descriptors cannot be reported as the new transfer. Leave non-control endpoints alone.

The register-stub test verifies both flushes, EP0 completion clearing and release of old EP0 waiters. This complements the separate generic control-request state-machine fix.

Change-Id: If595c7c0cfade7d855f113587621847926143606
2026-09-24 09:55:26 -04:00
Solomon Peachy
9101f35519 ROLO: Get rid of redundant call to audio_hard_stop()
audio_hard_stop() should be called *prior* to rolo_load(), and indeed
already is at every call site.

The reason to remove it from inside rolo_load() as opposed to the call
sites is because those already show a feedback splash while the audio
path is being shut down.

Change-Id: Ib6b995f7172c6a92599ace75245909730b2e941a
2026-09-23 16:52:01 -04:00
Solomon Peachy
5448dd99a3 fix red in c6abf3382a -- iriver h1xx/h3xx simulator
Change-Id: I2b6f207aa8b349ca9cf12f8f9334848a65c4f48a
2026-09-23 14:17:24 -04:00
Solomon Peachy
4e4198af7a fix red in c6abf3382a -- iriver h1xx bootloader
Change-Id: Id81dc1e89941ddc1102e60138907c0d07fa9f538
2026-09-23 14:17:24 -04:00
Aidan MacDonald
c6abf3382a firmware: move iriver flash helper functions into target tree
Move the iriver-specific functions for detecting flashed
Rockbox/OF images into system-iriver.c and remove the
HAVE_FLASHED_ROCKBOX define which is now redundant (all
targets using system-iriver.c enable it).

Copyright attribution on the new system-iriver.h header
is a best guess from Git history.

Change-Id: If1933f881a63fd517162ab9ca8f4a3007b997739
2026-09-23 13:44:45 -04:00
Aidan MacDonald
190822f261 firmware: limit system_memory_guard() to coldfire targets
Only Coldfire targets have ever implemented this. Gate it
behind CPU_COLDFIRE so the stub functions won't be needed
in other targets.

Change-Id: I507952c40a04d813a40296142a6eba1df24b0a68
2026-09-23 13:12:48 -04:00
Aidan MacDonald
d27af08ff6 hw_h264: remove redundant ifdef guards
Change-Id: I5fa1abc1226ec5a35888713da83467a71a3c4caf
2026-09-23 16:22:18 +01:00
Aidan MacDonald
29eef25ac7 hw_h264: use standard rockbox copyright headers
Some files were not using the standard header with the
Rockbox logo. Add this and move any technical notes into
a separate comment.

Change-Id: Idaac932cd56154c7b785ba0e6c0231a21878f786
2026-09-23 16:22:18 +01:00
Paul Sauro
b1385d831e usb arc: reset endpoint data toggles when clearing halt
CLEAR_FEATURE(ENDPOINT_HALT) must reset the selected non-control endpoint data toggle as well as removing STALL. Set the corresponding ARC toggle-reset bit when clearing the halt, including when the endpoint is already unstalled. EP0 keeps its SETUP-controlled toggle handling.

The register-stub test checks IN/OUT independently and verifies that EP0 does not receive a non-control toggle reset.

Change-Id: I18bce488ec250336512bfda4db6ff369d21d9180
2026-09-23 08:37:39 -04:00
Paul Sauro
63978def70 usb arc: discard stale transfers and audio work on bus reset
If RESET and IOC/SOF are reported together, the old interrupt order can refill audio or report completions from descriptors invalidated by the reset. Handle RESET first and return without dispatching those stale events. Disable SOF refill and stop the batch ring when resetting the controller.

The register-stub regression exercises simultaneous RESET, IOC and SOF and checks that no old completion or refill is dispatched.

Change-Id: Iac98df59aea30dfee155302f7ad31c6ba9902975
2026-09-23 08:37:23 -04:00
Vencislav Atanasov
d43cc0e829 rbutilqt/themeeditor: Fix description of KEYCHAIN_PROFILE
Change-Id: I993da51351c01b35fe49cfca3750f2757c5c21ce
2026-09-22 20:47:28 -04:00
Michael Giacomelli
8eb6b05945 opus: ARM comb filter and saturation kernels
comb_filter_const on both cores, and celt_synthesis's SIG_SAT clamp
four samples at a time through one ldm and one stm.

Modelled for the saturation loop: -1.05% ARMv4, -1.42% ARMv5E.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Change-Id: I381afab451eb29a91513ce6ab29c1b2d565b7ee9
2026-09-22 17:26:11 -04:00
Michael Giacomelli
f26c9557c2 opus: ARM kernels for the 16-bit band loops
denormalise_bands on both cores; exp_rotation1, haar1 and the
normalise_residual scaling loop on ARMv5E.  Bit-exact.

Modelled: -0.50% ARMv4, -2.91% ARMv5E.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Change-Id: If40f5dbe7cb9e7c12aa0a5b4ac9e73433a850b6e
2026-09-22 17:20:32 -04:00
Michael Giacomelli
9e7b81f269 opus: exact bounded divide for the range decoder
98.6% of __udivsi3 calls are ec_decode and ec_decode_bin computing
val/ext, where the quotient only matters below 2^16.  Exact over 80
million cases including corrupt-stream values.

Modelled: -1.34% ARMv4, -2.37% ARMv5E.
Measured with the previous commit: e200v1 50.80 -> 49.42 MHz,
Clip+ 33.40 -> 32.83 MHz.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Change-Id: Ia09cb6cd8e42d4885e4d5be0f84862b9b951136c
2026-09-22 16:34:14 -04:00
Solomon Peachy
44e7c009ae as3525: Increase bootloader firmware buffer to 2MB
Modern rockbox builds are just larger than 1MB on the Sansa Fuze/Fuzev2,
which exceeds the reserved space to load the firmware.

The other AMS targets are a little under 1MB, so their time is likely
to come soon.  Bump the buffer to 2MB so we never have to worry about
this again.

Change-Id: Ie6bf998596f5e55f5cc8e576a2a22639344306a4
2026-09-22 11:46:28 -04:00
Andrew Rice
be35fdfe1a docs: add Andrew Rice to CREDITS
For the iPod Nano 3G port.

Change-Id: I43f169bfc4adfa9fb45b1b9bb4a173d71e5a41e3
2026-09-22 07:27:53 -04:00
Vencislav Atanasov
cbaf66f372 rbutilqt/themeeditor: Introduce a new KEYCHAIN_PROFILE variable for Apple notarization
If the variable is provided, the resulting .dmg will be uploaded to Apple's servers for notarization. If successful, Apple's notarization ticket is attached to the image.

Notarization of ~30MiB .dmg takes 40-50 seconds including upload time, ~30 seconds sans the upload time.

Tested building and notarizing of Rockbox Utility, Rockbox Theme Editor, and both as a single target, i.e. deploy.

Co-authored-by: ChatGPT-5.6 Luna
Change-Id: Ib31b1f825893111d23248fb8511fe5b6c73d5525
2026-09-22 07:27:16 -04:00
Michael Giacomelli
d514ee9282 opus: ARMv4 assembly for the backward MDCT inner loops
Cuts realtime decode on the Sansa e200v1 from 52.1 MHz to 50.8 MHz.
clt_mdct_backward was the largest remaining item at 13.5% of decode.

Only the three inner loops move to assembly.  The setup stays in C, so
mdct.c remains readable and the assembly needs no knowledge of
mdct_lookup.

What the compiled loops lose is registers.  Each needs more live values
than gcc can hold, so it spills the loop-invariant pointers, strides and
limits and reloads them every pass: five stack accesses per iteration in
the post-rotation alone.  Holding the twiddle as a 16-bit value and
accumulating the product pair with smull/smlal is what makes the
bookkeeping fit, needing seven live registers where the shifted
MULT16_32_Q15 form needs nine.

ldm/stm helps only where the addressing allows.  The post-rotation walks
the buffer from both ends and so reads and writes contiguous pairs.  The
pre-rotation reads the spectrum through a runtime stride and writes
through the bitrev table, so only its 8-byte output pair merges, and the
TDAC mirror merges nothing.

Over 160 ms of stereo music, traced under qemu:

  clt_mdct_backward  1,037,962 ->   900,982   -13.2%
  whole decode       7,695,876 -> 7,558,896    -1.8%
  loads                650,157 ->   611,667    -5.9%
  stores               350,605 ->   323,605    -7.7%
  multiplies           337,493 ->   337,493   unchanged

Accuracy improves substantially, because all three loops keep 32 bits of
each Q15 product where MULT16_32_Q15_armv4 drops the low bit, and the
backward MDCT applies three such rounds per sample.  The rounding SNR of
the backward transform rises about 9.5 dB, and its worst case error falls
from 708 to 186.  Decoded output differs from the previous build in 90 of
15,360 samples, each by one LSB.

Build with OPUS_ARM_NO_MDCT_ASM to select the C loops instead.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Change-Id: I3c4404b4dbe581d8bcf1f357266a658a068fdb50
2026-09-22 07:26:56 -04:00
Michael Giacomelli
b18f5d6d65 opus: ARMv4 assembly FFT butterflies, and an exact radix-5 rewrite
Cuts realtime Opus decode on the Sansa e200v1 (PP502x, ARM7TDMI) from
55.55 MHz to 52.1 MHz.

Two exact changes to celt/kiss_fft.c first:

 - kf_bfly5 folds the four cosine products into a shift and a single
   multiply.  cos(2*pi/5) + cos(4*pi/5) is exactly -1/2, and the Q15
   constants satisfy that identity exactly (10126 - 26510 == -16384), so
   the substitution gives up no accuracy.
 - kf_bfly3, kf_bfly4 and kf_bfly5 peel the pass that twiddles by
   twiddles[0], which is 1, by rotating the loop rather than duplicating
   the body.  In fixed point twiddles[0] is 32767 rather than 32768, so
   skipping it also drops a small systematic gain error.

Then celt/arm/kiss_fft_armv4_asm.S replaces the radix-3, radix-4 and
radix-5 bodies, reached through OVERRIDE_kf_bfly3/4/5.  The compiled
kernels spill their loop-invariant pointers and reload them every pass,
and gcc will not form ldm/stm from contiguous C accesses: it reorders the
loads while scheduling and does not hand out ascending register pairs.
The assembly keeps the bookkeeping resident and sends the transient
butterfly values to the frame instead, in bursts.

Over 160 ms of stereo music, traced under qemu and costed with an
ARM7TDMI model:

  FFT cycles    1,876,926 -> 1,430,748   -23.8%
  whole decode  8,142,054 -> 7,695,876    -5.5%
  loads           769,935 ->   650,157   -15.6%
  stores          409,999 ->   350,605   -14.5%
  multiplies      350,909 ->   337,493    -3.8%
  text              3,368 ->     2,656 bytes

The radix-5 fold accounts for the whole multiply reduction.  The assembly
leaves the count untouched and wins purely on memory traffic.

Accuracy improves by up to 2.9 dB rather than degrading, because the
assembly keeps all 32 bits of each Q15 product where MULT16_32_Q15_armv4
drops the low bit.  Decoded output differs from the C build in 27 of
15,360 samples, each by one LSB.

Build with OPUS_ARM_NO_FFT_ASM to select the C butterflies instead.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Change-Id: I2e8a0904da8a85b654ff648a01234348977a0edc
2026-09-22 07:26:29 -04:00
Andrew Rice
bd24fddb7e ipodnano3g: mark the 4-CE B614D5EC row checked
A contributor's check archive matches the row exactly and passes
test_crash clean. test_ftl disagrees with the oracle on two logical
pages in one block - a second, distinct false positive from the
A5D5D589 x2 case: a closed data block addressed purely by position,
with one stale leftover page. Confirmed against the decode notes
(_FTLRestore's "closed blocks -> map" step) and documented in
test_ftl.c alongside the existing false positive.

Testing evidence: utils/ipodnano3g/RESULTS.md.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Change-Id: Ib24d2df18e2b0e60e000ee6ea43bef9c214f7f72
2026-09-21 09:16:33 -04:00
Andrew Rice
413f17b8ce ipodnano3g: mark the 4-CE Toshiba BA94D598 row checked
A contributor's check archive matches the row exactly and passes both
host tests clean: test_ftl agrees with the oracle on all 3,964,928
sectors, test_crash survives 100 power cuts with 0 sectors wrong.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Change-Id: I7c651c94332e0a04686ce8855a274735ae39546c
2026-09-20 21:02:05 -04:00
Andrew Rice
00829f2258 ipodnano3g: mark four contributors' chips checked
Four check archives (B614D5EC x2, A5D5D589 x2, A5D5D589 x4, 3E94D589 x2)
all match their table rows and pass test_crash clean. Three pass test_ftl
outright; A5D5D589 x2 disagrees with the oracle on two logical pages,
traced to _FTLRestore's own tie-break between two competing logs
(verified instruction-for-instruction against osos 1.1.3) - Apple's own
firmware would resolve the same medium the same way, so this is not a
defect. test_ftl.c gets a note explaining the false positive for future
archives that hit it.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Change-Id: If8de0d6b1175981a292c5c45fbc092d5a6e0891a
2026-09-20 21:01:48 -04:00
Andrew Rice
01925dd5d0 ipodnano3g: enable the 2-CE Micron A5D5D52C NAND
A contributor's check archive for a 2-chip-enable A5D5D52C unit matches
the row exactly and replays clean against the host FTL suite. The row
moves in with the validated chips on this evidence alone - no on-device
write test has been run.

Testing evidence: utils/ipodnano3g/RESULTS.md.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Change-Id: Ia9e00c0e880b10785da3ab52bc98dc93e94acfaf
2026-09-20 21:01:09 -04:00
Andrew Rice
9ee5873770 utils: update the Nano 3G NAND check tool
The contributor NAND check tool went in before the driver changes that
followed it. This brings it up to the current tree.

Testing evidence: utils/ipodnano3g/RESULTS.md.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Change-Id: Ie7712e0d7eaf75b880a9d134715ce1396a8545f8
2026-09-20 21:00:24 -04:00
Andrew Rice
4dad9a0489 utils: iPod Nano 3G NAND and FTL tooling
The host-side tools the Nano 3G NAND driver and FTL were developed and
tested with, so the evidence in those changes can be reproduced and the
next chip can be added without rediscovering any of it: regdiff (register-
write comparison against Apple's sequencer programs), ftltest (the host
FTL test suite), chiptable.py, the FTL decode notes, and RESULTS.md, the
measurements the earlier changes quote.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Change-Id: I321e06291ca393e18dbd5f71c2c6371fcda9a94d
2026-09-21 10:55:20 +10:00
Paul Sauro
404e2c7626 usb: validate configuration descriptor indices and failed drivers
Reject the first out-of-range configuration index and omit class descriptors for drivers whose initialization failed.

Change-Id: I1f74dcceb69f19b52650aa6ae3f38331e320b151
2026-09-20 18:14:54 -04:00
Paul Sauro
93b49594d5 usb storage: fix BOT residue, rejected commands and ATA IDENTIFY
Account only completed data-stage bytes in the CSW residue. Halt the requested data pipe before returning failed status for an unsupported command with a data phase.

Send ATA IDENTIFY from the initialized transfer buffer rather than a stale READ/WRITE buffer pointer, and reject unsupported WRITE BUFFER variants.

Change-Id: I9855f56b3555c2a69724681cb028e57f733dae0e
2026-09-20 18:14:11 -04:00
Vencislav Atanasov
7f01029439 rbutilqt/themeeditor: Move the CODESIGN_IDENTITY variable definition before the targets which depend on it.
Change-Id: I786be5b7dfaee94cf31ef9e72f43dce9700056c0
2026-09-20 22:09:09 +03:00
Vencislav Atanasov
6719578e29 rbutilqt/themeeditor: Fix Apple code signing issues
- The main binary in *.app/Contents/MacOS/ was not signed using the "hardened runtime" option.
- The ipodpatcher and sansapatcher binaries in RockboxUtility.app/Contents/bin/ were not signed at all.

The produced .dmg images are now suitable for notarization so the app inside can be installed and started with no security warnings.
They are not notarized yet, as this takes a significant amount of time, but it can be done manually using:
xcrun notarytool submit build-qt/RockboxUtility.dmg --keychain-profile <your-profile> --wait
xcrun stapler staple build-qt/RockboxUtility.dmg
Only ARM macOS is supported at the moment.

Co-authored-by: ChatGPT-5.6 Luna
Change-Id: Id88d7da18f541f9f503172f5dcb5b17d64e0602e
2026-09-20 09:00:42 -04:00
Andrew Rice
1ad17c9b57 manual: add the iPod Nano 3G
Adds the platform file, modelled on the Nano 2G's and the iPod
Classic's, and corrects the supported-versions text shared by the Nano
manuals, which said Rockbox does not run on the third generation.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Change-Id: Ie6290d67ae113086cb8a63c825eb9db9544c1d49
2026-09-20 08:58:09 -04:00
Andrew Rice
76f8925d23 ipodnano3g: power, RTC, backlight, battery and audio
Fills in the stubs the Nano 3G port was left with, taking each from how
the original firmware drives the same hardware.

Testing evidence: firmware/target/arm/s5l8702/ipodnano3g/TESTING.md.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Change-Id: Iea5314769502f5941a176600869591756c5e3233
2026-09-20 08:53:53 -04:00
Andrew Rice
e4c010be98 ipodnano3g: NAND check image for validating other chips
Rockbox only drives NAND parts proven on hardware, and this tree has one
model to prove them on. This is the image that lets an owner of another
Nano 3G supply what validating theirs takes: a bootloader built with
-DNAND_CHECK and run from DFU, which never touches the NOR flash or
writes to the NAND.

Testing evidence: firmware/target/arm/s5l8702/ipodnano3g/TESTING.md.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Change-Id: I46328b69f8011337790f35a195de97b5bcf347a5
2026-09-19 21:26:45 -04:00
Solomon Peachy
f834e02af8 pacbox: Add missing function annotation to arm asm functions
Change-Id: If920186cfdc4e22ec9a6dc154b0d2979b9a1f541
2026-09-19 21:23:48 -04:00
Solomon Peachy
305acca1f0 dsp: Add missing .type <symbol>, %function to arm asm
Several symbols were missing these annotations so the compiler wasn't
handling thumb interworking correctly.

Should resolve tone control crashes seen on clipv1 and our handful of
other 2MB armv5 targets that we build (mostly) in thumb mode.

Change-Id: If8c533a5f10b6592a2d2bec519f2c4d6539d7a66
2026-09-19 21:18:30 -04:00
Solomon Peachy
af9b65485b build: move '-mthumb-interwork' into the configure script
When we request a thumb build on a non-thumb-only target, we hand
compilation to a script that tries to build everything as thumb, falling
back to non-thumb arm mode if the thumb build fails.  In order for
this to work, the compiler flag -mthumb-interwork is required.

Move this definition out of the thumb-cc script, and into the configure
script (ie along with the other target-specific definitions)

Change-Id: Idc1f8caa088dbbf710b169b272de61cc0b7c9ca6
2026-09-19 21:18:30 -04:00
Andrew Rice
34a18e7616 ipodnano3g: NAND driver, FTL and storage
The Nano 3G keeps everything behind the S5L8702 flash controller and
Apple's FTL ("Whimory"), and nand-nano3g.c was a stub, so the port had
no storage at all. This is the flash driver, the FTL and the wiring that
makes the NAND Rockbox's disk. The three are one change because neither
half is usable without the other: the driver alone cannot see a
filesystem, and the FTL alone has nothing to drive.

Testing evidence: firmware/target/arm/s5l8702/ipodnano3g/TESTING.md.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Change-Id: Ib04a991489ff3a1a63cd55552e4a8d7ec7a5fc8c
2026-09-19 20:08:03 -04:00
Holden McFarland
d23a19dc2d ibasso dx50/dx90: Fix physical buttons on yes/no screens
The DX50 keymap already defines button_context_yesno, but
target_get_context_mapping() did not select it for
CONTEXT_YESNOSCREEN. As a result, physical buttons could not
operate dialogs such as "Playlist finished. Play again?".

Add the missing context mapping.

Tested on iBasso DX50 hardware: Play and Previous accept Yes;
Next and Power cancel.

Change-Id: I9f6078b45a48047a662aad5f231d0adac9a42d5d
2026-09-19 07:29:10 -05:00
Aidan MacDonald
98a55f623b Fix errors in ipod-specific h264_player from 3a57f2f721
Change-Id: I40148d33932eeefb5de73f07104cef78d0739b5d
2026-09-17 21:59:52 +01:00