Commit graph

38848 commits

Author SHA1 Message Date
Aidan MacDonald
2b09078b92 stm32h7: set 8-byte alignment on main and irq stack
Explicitly set 8-byte alignment as per the AAPCS, which
says the stack should be 8-byte aligned at a public ABI
boundary.

Change-Id: Ie60b664718119ea576e7c6b5efaac011eb907531
2026-01-27 13:31:12 +00:00
Solomon Peachy
e1d10c938a config: Targets must opt-in to bootloader USB storage support
ie by only using HAVE_BOOTLOADER_USB_MODE, instead of blanket-enabling
USB_ENABLE_STORAGE for numerous SoC families

Change-Id: Ief433a1d693876072779e714883438c0012ba2e0
2026-01-27 07:36:40 -05:00
Solomon Peachy
33678c6c3c s3c2440: Fix some compilation failures in the mini2440 bootloader
This whole platform has bitrotten, may be prudent to just nuke it.

Change-Id: Ia12e7ebc160484e57a74dd689d6095d22f3dbfd9
2026-01-27 07:11:32 -05:00
Solomon Peachy
b562c9d58f Fix red introduced in 33d0a3ef
Many bootloaders broke because they have only partial USB
implementations -- HAVE_USBSTACK but without HAVE_BOOTLOADER_USB_MODE...
and a pile of exceptions.

Those exceptions need to be cleaned up properly, but for now, get the
build going again by wrapping the new ack-tracking bits with the
USB_FULL_INIT define created by the above conditions.

Change-Id: I936d4989b8c8195ee30d53808f61104a4986942a
2026-01-26 22:56:47 -05:00
Solomon Peachy
89cf5b57e6 Fix yellow from 1951c17e0b on targets with USB_NONE
gui_usb_screen_run() is a do{} while(0) macro, resulting in an unused
variable warning in the "caller"

Change-Id: I4b4b00ef38decfb5cc9db0da3d81ad0c9a4207d1
2026-01-26 20:36:58 -05:00
mojyack
33d0a3efa3 usb: enter to exclusive disk mode only when required by usb config
currently, exclusive disk mode was enabled at the same time as the
usb insertion. when multiple usb configurations exist, this is not
appropriate.

manage it in the core and enable it only when necessary.

Change-Id: Iadbec05fad1d1319471233227ae0e72c12079295
2026-01-26 19:52:22 -05:00
mojyack
1951c17e0b pass event data to usb_acknowledge
add second argument to usb_acknowledge.
it can be used for more appropriate connection tracking that does not
rely on timeout in the future.

Change-Id: I8a44366b7c7a1f944524c4ba8ecd6d9673746a65
2026-01-26 19:47:09 -05:00
Aidan MacDonald
d5506dfa22 echoplayer: implement boot from debugger
Add a 'make start' target which starts Rockbox using a
debugger. This only works to load the main binary, but
makes it much faster to test changes that don't affect
plugins/codecs.

Because SDRAM isn't accessible at reset and the main
binary is usually too big to fit in SRAM, the bootloader
must be flashed first before Rockbox can be loaded in
this way.

The boot protocol involves GDB writing a check pattern
to SRAM while the CPU is held in reset. The bootloader
detects the pattern and takes a breakpoint, by which
time SDRAM is accessible; GDB can then upload a binary
ELF image (copied as a raw file, since the ELF will be
loaded using RB's ELF loader) and leave the breakpoint
to continue booting.

From there the bootloader can load the ELF binary from
memory, exactly like a normal SD card boot.

Change-Id: I4eb971b4162ea422e38660455cfa0958cefaa18d
2026-01-26 08:55:01 -05:00
Aidan MacDonald
603c5bb2be echoplayer: load Rockbox from SD card in bootloader
To avoid problems with SDMMC DMA not being able to
access all SRAMs equally, the ELF binary is loaded
at the top of SDRAM and then copied into place.

Change-Id: Icf16d02bc15605539cbe781dd27709225abca8f9
2026-01-25 19:51:56 -05:00
Aidan MacDonald
7868e45edb elf_loader: add elf_loadmem() to load file from memory
Change-Id: Ib68b0e8b610d45713a2d5480da015cc4295f2676
2026-01-25 19:51:07 -05:00
Aidan MacDonald
843322f898 elf_loader: add generic callback-based loader
Change-Id: I1dd972a585bc7c805e32c9665d13e248663ccc73
2026-01-25 19:50:12 -05:00
Aidan MacDonald
a610998ea4 firmware: add simple ELF loader for static binaries
This is a small & simple ELF loader which just copies
program segments from disk to memory. It only supports
static binaries right now.

Change-Id: I8944feb5b9dafcc5c56e12383aed25e2718ad7ea
2026-01-25 18:19:51 -05:00
Aidan MacDonald
21ba79d431 echoplayer: disable parts of system_init() for application
Most of system_init() should only be performed once after
reset, and is not safe to re-run when the bootloader jumps
to the application.

Change-Id: I4d2e804ce4884da13b9167ddcda860ef3b5ba7d0
2026-01-25 14:12:29 -05:00
Aidan MacDonald
f642d19c20 echoplayer: initial Echo R1 keymap
Change-Id: Id720378a55425070ef69ca002c2e954cc1e147cf
2026-01-25 17:26:44 +00:00
Solomon Peachy
ecb8014a06 FS#13766: Updated Vietnamese Translation (Chu Khanh Hanh)
Change-Id: I3cf9cf9814a549e49eecd7bed0e364c2b2b1439b
2026-01-25 08:59:10 -05:00
Aidan MacDonald
98990df08f stm32h7: update linker scripts for ELF boot
Use flash & AXI SRAM for the bootloader, ITCM/DTCM and
SDRAM for Rockbox. Hardly the most optimal use of SRAMs
but it's good enough to get started.

Fixes the Echo R1 app build, which wasn't fitting in
AXI SRAM.

Change-Id: I4f7e5f618d27b553e5ff8dec1d5c4c61ac9d8eb0
2026-01-25 08:48:44 -05:00
Aidan MacDonald
174b33cc07 stm32h7: rename startup code .init.text section to .init
Do this for compatibility with INIT_ATTR, which uses the
.init section.

Change-Id: I473c29e3d38e5d5a563c98fc910d725024072735
2026-01-25 08:47:44 -05:00
Aidan MacDonald
bd73e0dd42 stm32h7: do bss/data setup in crt0 for bootloader only
Change-Id: I67798a4370b01127364c40328549a6d3081545cf
2026-01-25 07:47:32 -05:00
Aidan MacDonald
e3bf9210ab echoplayer: disable boot data
The current bootdata mechanism won't work well for
ELF binaries so disable it.

Change-Id: If6721ef88a38af76711bbdc6b561529dc3b33557
2026-01-25 07:47:22 -05:00
Aidan MacDonald
0f5c42122c echoplayer: implement bootloader power on/off logic
On the Echo R1, the main regulator is enabled primarily by
the power button and USB input, and secondarily by the CPU's
own output pins (cpu_power_on signal or RTC alarm output).

From a user perspective, the player should appear to power
up and down only if the power button is long pressed, which
must be implemented in software. These logical power states
are called "active" and "inactive" in the bootloader.

Going from inactive to active will attempt to boot Rockbox
unless a button (d-pad down) is held to enter bootloader
USB mode instead. Going from active to inactive will shut
down the player. The bootloader will also automatically
shut down after a short timeout, if USB is not plugged in.

In the inactive state, the player is supposed to enumerate
over USB so it can negotiate a charging current, but should
otherwise appear "off". In particular it shouldn't expose
mass storage or even power up the SD card, nor power up the
LCD/backight. This isn't implemented yet, because there's
no way to dynamically change USB configurations (eg. going
from active to inactive should trigger re-enumeration to
switch to charge only mode). To avoid surprising behavior,
the bootloader will just boot Rockbox immediately if USB is
plugged in at boot.

Change-Id: Icd1d48ef49a31eb32b54d440e9211aaf40c6b974
2026-01-25 07:46:31 -05:00
Roman Artiukhin
58ace97a4e hiby: r1_patcher: embed hiby_player.sh
Make it a single-file, self-contained script.

Change-Id: Idb3e375f1f9774c9328288765c7d1c7c1e01e2d3
2026-01-24 20:20:01 -05:00
Roman Artiukhin
db8494d4e0 hiby: r1_patcher: quote path variables
Change-Id: I5d03b4ecec1847c404a2f2400b648469023942e2
2026-01-24 20:20:01 -05:00
Solomon Peachy
b056191e89 Translation updates:
* German (Wilfried Winkler)
 * Korean (Hoseok Seo)
 * Polish (Adam Rak)
 * Slovak (Matej Golian)
 * US English (Myself)

Change-Id: Ief4de3c8f6aa88aba6ffae9969d22763a1969743
2026-01-24 17:44:36 -05:00
Aidan MacDonald
721bfac475 echoplayer: don't wake LCD automatically in bootloader
Normally the bootloader won't enable the LCD, but we
still want to call lcd_init() at startup to keep the
code simple.

Change-Id: I866ecd7c81b6c5e6acdd57f5d7680400df3f54f4
2026-01-24 14:05:21 -05:00
Aidan MacDonald
1afa2ca50d echoplayer: implement LCD enable and shutdown
This also gets rid of the long startup delays which were
leftovers from debugging.

Change-Id: Iee9fec1fb210a006a1af53bf47535d7ba2ffa904
2026-01-24 14:02:57 -05:00
Aidan MacDonald
025d641d1f echoplayer: detect boot reason during system_init
Change-Id: I6fdc16e7476044b43e11d3f63d971bd8de860c58
2026-01-24 14:02:26 -05:00
Aidan MacDonald
86c975ee88 echoplayer: set cpu_power_on pin high as early as possible
Change-Id: I6b7343cc81973c4c0a14396b2ecd622fc1c65d30
2026-01-24 13:02:03 -05:00
Aidan MacDonald
319fdcc506 echoplayer: implement reboot using RTC_OUT pin
Change-Id: Ibeda362030c2885abe1366fb3256e925ea27538c
2026-01-24 13:01:56 -05:00
William Wilgus
6035b1fc1b [lua][BUGFIX] splash_scroller FS#13753, 13754 unicode + default font/fg/bg
FS#13753 - Rocklua error splash don't display part or full filename when
it is non-ASCII
FS#13754 - Rocklua error splash don't reset gui settings (bg, fg and font)

when using signed char unicode codepoints can show up as < '0'
code was looking to remove control chars < ' ' which also removed
unicode code points in the process

Change-Id: I48074a7854f2bee195ca554e1f86505fe5567db6
2026-01-24 09:19:19 -05:00
Solomon Peachy
4e4d5ac25b Fix yellow in echoplayer bootloader
Regression introduced in 7f0bc4bd95

Change-Id: I1341319d23a2813b8473e3fceb3370bf6371ef86
2026-01-24 09:13:49 -05:00
Aidan MacDonald
65b97917ca echoplayer: replace stm32 clock init with target specific init
Change-Id: Ib858f95b4cedba261ea669d3339ea1497e970982
2026-01-24 08:09:42 -05:00
Aidan MacDonald
eea0c128f4 echoplayer: move system_init() out of generic stm32 code
With only one target, it doesn't make sense to have a
common system_init() yet.

Change-Id: I0f6d37709d60bb309fb16ecb9b0870297a189cc4
2026-01-24 08:08:40 -05:00
Aidan MacDonald
386be9dfcc stm32h7: refactor and simplify clock helper functions
The clock helpers are only used for leaf clocks of single
peripherals, which don't benefit from reference counting.

Change-Id: Ica5685e7bc0fce621ae46f758f0ad0b1dcfb2789
2026-01-24 08:07:25 -05:00
Aidan MacDonald
9471cec2ab stm32h7: make cache initialization function public
Change-Id: I460887977f18bfb411d33b6d4efc24ac04cb4050
2026-01-24 08:04:34 -05:00
Aidan MacDonald
62332841cf stm32h7: refactor systick code
Make systick setup less hardcoded, and create a public API
for use by targets, in preparation for moving system_init()
into target-specific code.

Improve the implementation of udelay to make it more robust
against timer wraparound.

Change-Id: I21bb8821cfd1d7e4049fac6e6a4548d80a4276f7
2026-01-24 08:03:50 -05:00
Solomon Peachy
b76cb3bf62 xduoox3: A couple of minor cleanups in the bootloader
* When SHOW_LOGO is not defined, print the version at the
   same time as the logo would have been displayed
 * Don't re-init the display after every message in USB mode

Change-Id: Ida0f5643b1d57004877ec5c42fc14028f53b1c89
2026-01-24 07:55:56 -05:00
Solomon Peachy
7f0bc4bd95 bootloader: Share definition of show_logo via common.h
For some reason it was locally defined everywhere.  Move a single
definition into common.h instead.

Change-Id: Ie2fad74acccd89e40fcbb0f47258d2e14e0f8285
2026-01-24 07:54:24 -05:00
mojyack
5af0a50031 arm: pp: usb-fw-pp502x: remove hack in usb_attach()
not only is this unnecessary, but it causes a bus reset on certain iPod
docks.

Change-Id: I2c2cbf3e5660d0cf25fc6ff4367c23396c521a3f
2026-01-24 07:25:59 -05:00
William Wilgus
2b6029ae8d rliimg add flip image example (#FS13745) Try #2
FS#13745 - Add transpose (like in python pillow module) and smooth resizing in rocklua

most of this is supplied 'require image'

flipping an image is built-in to the image generator function

add image flip example to rliimg

pushed the wrong script

Change-Id: I2c512a70ed26b0457e46f2f2a187d3365783af67
2026-01-24 01:43:58 -05:00
William Wilgus
b3683c84d8 [FIX Yellow] kbd_helper.c unsigned / signed
Change-Id: I10382b5ad930d350945da950a5d829c000e18f31
2026-01-23 23:00:12 -05:00
William Wilgus
a0bd28a408 rliimg add flip image example (#FS13745)
FS#13745 - Add transpose (like in python pillow module) and smooth resizing in rocklua

most of this is supplied 'require image'

flipping an image is built-in to the image generator function

add image flip example to rliimg

Change-Id: Ia53933c9ad09d2a5b92af45eb7a1140b64b6ae01
2026-01-23 22:43:08 -05:00
William Wilgus
1194a968bd [BUGFIX] pluginlib kbd_helper.c buffer ovfl
sizeof is in bytes len counts as a ucschar
should also be added to total_len

yep buffer ovfl

Change-Id: Ibebb8574e6dbab0ca78d1cdfeb04cbbda38f05e9
2026-01-23 21:58:32 -05:00
William Wilgus
163c3723bc announce_status re-fix splashf voice prompts, add missing lang entry
%s thru an ID2P() won't be voiced

Change-Id: Ibce1e818a6ae35c388f75182c3a8226371b420b3
2026-01-23 21:05:44 -05:00
Aidan MacDonald
d7a2aa7208 arm: add more Cortex-M SCB registers
Fix a typo in the CCR register while here.

Change-Id: I9b41ca48f466557683c4b678831f3e5eccec5587
2026-01-23 23:29:47 +00:00
Aidan MacDonald
72dd8bc4d0 sdmmc_host: implement sd_enable()
This is mainly useful for bootloaders that want to safely
disable the SD/MMC controller before booting. Disabling a
controller will reset and power down the bus; all attempts
to read or write to a disabled controller will fail.

Change-Id: I4a7ec4287f2b8510a35d964cc806c74be8c86406
2026-01-23 17:48:08 -05:00
Aidan MacDonald
80fec463df stm32h7: panic on sdmmc FIFO or DMA errors
FIFO errors shouldn't be possible with hardware flow
control enabled. DMA errors shouldn't occur unless a
bad memory address was passed.

Don't bother checking for ITCM/DTCM in the transfer
setup and instead just wait for the IDMATE error; if
the RM0433 reference manual is to be believed then
SDMMC1 _only_ has access to AXI bus memories, and
checking for all invalid destinations would be very
verbose.

Change-Id: I2b22b56009933e16c5adde4d36b7a906cee57791
2026-01-23 17:47:46 -05:00
Aidan MacDonald
a74ee4c04f sdm32h7: enable sdmmc hardware flow control
Hardware flow control prevents FIFO underruns/overruns
by stopping the bus clock if one would occur. This can
slow down transfers, but that's better than having data
transfer fail due to AXI/AHB bus contention.

Change-Id: I8696d3aff78c17dbbe85907160fa37fd4ee11e85
2026-01-23 17:47:27 -05:00
Aidan MacDonald
5442622d88 arm: fix Cortex-M IRQ masking
The following inline assembly in set_irq_level() turned out
to have incorrect constraints:

    int newvalue = /* input parameter */;
    int oldvalue;

    asm volatile ("mrs %0, primask\n"
                  "msr primask, %1\n"
                  : "=r"(oldvalue) : "r"(newvalue));

leading to incorrect code generation for common cases like
disable_irq_save(), which compiles to:

    mov r5, #1
    mrs r5, primask
    msr primask, r5

...which doesn't disable IRQs at all, since both of the
operands got assigned to the same register; the write of
'oldvalue' clobbers the 'newvalue' input before it's used.

Apparently GCC assumes that input operands are read before
output operands are written. One way to fix this is adding
the '&' constraint: "=&r"(oldvalue), but it's better to
break things down into separate, simpler asm statements
which GCC can figure out itself.

Also add compiler memory barriers where primask is modified
to ensure loads/stores aren't incorrectly moved outside of
critical sections.

While here, optimize disable_irq_save() a bit by using the
cpsid instruction, which avoids the extra "mov" and register
allocation needed by "msr primask".

Change-Id: Iac94a76db5bac399a1cf028da4241a0473259a46
2026-01-23 16:47:46 -05:00
Aidan MacDonald
0474dca7c3 x1000: add XT26G01CWSIGA flash chip
Recently seen in Hifi Walker H2 units. Links:

- https://datasheet.lcsc.com/lcsc/2108141930_XTX-XT26G01CWSIGA_C2833378.pdf
- https://www.xtxtech.com/en/Products/info.aspx?productModel=XT26G01CWSIGA

Change-Id: Ieef9974d2b13723047b020ff0ab2498bf18ca00d
2026-01-23 16:26:28 -05:00
Aidan MacDonald
17faa6abc7 stm32h743: fix 'make zip' error caused by config header
Change-Id: I12521cbfdab3c768015f4eafdfe95adf81ba520a
2026-01-23 16:21:57 +00:00