Commit graph

12094 commits

Author SHA1 Message Date
Aidan MacDonald
53862c7eed Remove Sansa View port
It doesn't seem to have been functional ever and currently
doesn't build; eg. the last commit to the LCD driver added
a syntax error, and there's some duplicate functions between
mmu-armv6.S and system-pp502x.c. Doesn't seem worth the
effort to fix.

Change-Id: I82b5bec3ed9686f28aedbe283818af792b96daf4
2026-02-03 22:04:41 +00:00
Aidan MacDonald
1a33d7990a Remove Meizu M3/M6SL/M6SP and Samsung YP-S3 ports
These targets haven't seen any changes since 2008-09
have bitrotted to the point they don't compile anymore.
With only internal NAND flash for storage which doesn't
seem to have ever been accessible from Rockbox, they've
never been usable and there's probably not much point
keeping them around any more.

Change-Id: I2fc63da20682b439126672065ae013044cb2d1c4
2026-02-03 16:32:56 +00:00
Aidan MacDonald
78542df466 Nuke GDB stub
It looks like the GDB stub only ever worked for the Archos
Recorder and iRiver IFP-7xx, neither of which are in-tree
any more.

Change-Id: If1910675b88b4707d26df9bc095818902af2d25b
2026-02-03 10:55:53 +00:00
Aidan MacDonald
2429e117d0 Replace all uses of PLUGIN_USE_IRAM with USE_IRAM
PLUGIN_USE_IRAM is almost equivalent to USE_IRAM except
that USE_IRAM might be defined in core, but not plugins.
All remaining uses of PLUGIN_USE_IRAM are inside plugins,
however, so there is no point keeping both defines around.

Change-Id: I6902c85651f3d82b7d19ea32eaa60fc5c19eded7
2026-02-02 17:11:04 -05:00
Aidan MacDonald
828fd7941f x1000: ensure sections are 4-byte aligned
The section copy loops in crt0.S rely on sections starting
and ending on 4-byte aligned addresses. If the last variable
alloacted in the BSS section isn't a multiple of 4 bytes,
then _bssend can get misaligned and break the copy loop.

This problem was masked by -fcommon since COMMON variables
go at the end of the BSS section, and they were for the most
part a multiple of 4 bytes. The switch to -fno-common broke
the bootloader because with COMMON gone, the last thing in
BSS was a 1-byte variable in led.o. The main binary appears
to have had the correct alignments by sheer luck.

Change-Id: I21ee3653d89d1607a2f458c457f1a51e33c22f05
2026-02-02 20:50:05 +00:00
Solomon Peachy
84e5d193fb x1000: Turn on QSPI mode for W25N01GV and XT26G01C flashes
With the QSPI TMODE fix, they are confirmed working

Change-Id: Ic47b13312299bab8a632ebf517015362a0cb6a49
2026-02-02 08:22:46 -05:00
Solomon Peachy
9f216921b8 x1000: Correct SFC TMODE bit definitions
We were using a definition of 0b100 for "Quad Input / Quad Output" mode
which is marked as "reserved" in the X1000 TRM.  The correct value is
0b101.

Somehow this "worked" for some devices but failed for others?

Credit for this discovery+fix goes to forum user ZappBranigan2972

Change-Id: Iedbd2d1b6da55113e266ad8aa51fc9c3130bf2b8
2026-02-02 08:22:46 -05:00
Aidan MacDonald
ad9471be3b echoplayer: add shadow framebuffer to avoid tearing
Using a simple memcpy to a separate framebuffer prevents
objectionable levels of flickering caused by scanning out
the main framebuffer while it's modified between updates.

With optimized memcpy, copying the whole framebuffer takes
about 260us at maximum CPU+bus frequency. Using DMA would
likely be a bit faster and more power-efficient, but that
can be left as a future optimization.

Change-Id: Ia6dc36d797cdb7a5f6663078c0ecce661267bedf
2026-02-01 10:18:20 -05:00
Aidan MacDonald
7adb9cd1b4 arm: add optimized ARMv7-M memcpy implementation
This assembly implementation is marginally faster than
the non-size-optimized C version for large copies, but
is around half the code size.

Unaligned loads/stores will be used on platforms that
support it: though slower than aligned accesses, this
is still faster than copying byte-by-byte and has the
advantage of simplicity and small code size.

Change-Id: Ieee73d7557318d510601583f190ef3aa018c9121
2026-02-01 10:02:55 -05:00
Solomon Peachy
c458f4663c x1000: Do not use QSPI mode on the XT26G01C flash
Either QSPI is not wired up, or there is some other issue preventing
them from working correctly.

If this doesn't show any more issues then we should be able to produce a
new set of bootloader builds enabling support for the HifiWalker H2 v2.3
variant. We will eventually find out if other OEMs have chosen dfferent
flash parts for their specific ErosQ/K variations.

(Credit for these experiments goes to the forum users
 ZappBranigan2972 and gonzyfrigus)

Change-Id: I349f4bbac509010753ac2ad24ad42a234cccdea5
2026-02-01 07:45:29 -05:00
Christian Soffke
2556cfc7b3 usb: fix hang when disconnecting from USB
regression introduced in 33d0a3efa3

Change-Id: I0ded61d70a09b27820e65979381d2c38410d2923
2026-01-30 13:55:30 +01:00
Solomon Peachy
c23e1ba09a x1000: Drop XT26G01C flash clock speed to 104MHz as per datasheet
Change-Id: I17da992c608a6ad1340c500c34d42009eccf6fbb
2026-01-30 06:07:00 -05:00
Solomon Peachy
5563643b38 x1000: Bump NAND_DRV_MAXPAGESIZE to (2048+128)
X6G01C flash has 128B of ECC data per page, overruning our
buffer.

Change-Id: I8caa8bec6291f1b3391af9c7da1ee22805ff01e2
2026-01-30 06:07:00 -05:00
Aidan MacDonald
b8b55128b1 firmware: make config.h IRAM usage defines more readable
Split up the single massive '#if' condition into several
smaller blocks to make it easier to understand what is
happening. Compiled binaries should remain unchanged.

Change-Id: I65359cb55c60d71d5a424cafda83c83bddb20974
2026-01-29 18:38:16 -05:00
Solomon Peachy
2a4cb29b27 synopsis-dwmac: Make ep0_buffer (and friends) static.
Looks like an oversight

Change-Id: Ia730fd1f9e19ca31add581400372dfacead7b452
2026-01-28 15:55:45 -05:00
Solomon Peachy
b349eea2c9 usb: fix yellow in eb69211791
Bootloaders with HAVE_USBSTACK but without HAVE_BOOTLOADER_USB_MODE end
up with USB_NUM_DRIVERS of 0 which leads to a warning due to a signed
number being checked to see if it's >= 0.

Work around this temporarily; the proper fix is to not build usb_core
and its class drivers when BOOTLOADER & !HAVE_BOOTLOADER_USB_MODE

Change-Id: I1b41140d31ba9df6b4c760478c4265d4e5584963
2026-01-27 15:23:47 -05:00
mojyack
eb69211791 usb: introduce USB_NOTIFY_CLASS_DRIVER
this invokes specified class driver's notify_event method.
initial purpose is to trigger a callback from isr, like a timer event.

Change-Id: Id600e9f0d8840a12da779d5a15783edf14bd76b5
2026-01-27 13:39:58 -05:00
Solomon Peachy
fce8248267 usb: Hopefully resolve the red in 41f9285def
First, leave USB_FULL_INIT on for all non-bootloader builds; this is
needed for devices that don't have a USBSTACK (such as most hosted
targets and ones that provide USB<>ATA in hardware)

Then unwind another hack that is no longer needed now that USB_FULL_INIT
is not set in most bootloaders.

Change-Id: I00881ac76b2469e5cd7700bad2203c58ef1e09e7
2026-01-27 13:05:57 -05:00
Solomon Peachy
a5b589cf5b vx747: Target needs HAVE_BOOTLOADER_USB_MODE
Change-Id: I735cbf5575b0368741f2b8147eb80a71e0a67c98
2026-01-27 12:21:42 -05:00
Solomon Peachy
41f9285def usb: Clean up the pile of USB_FULL_INIT exceptions
The intent here is that when HAVE_USBSTACK is not defined, or we are
in a bootloader wthout HAVE_BOOTLOADER_USB_MODE, a device may still
some of USB subsystem initialized.  For example, this may be needed
to enable USB-based charging functionality.

So, get rid of the blanket enables of USB_FULL_INIT based on target SoC,
enabling HAVE_BOOTLOADER_USB_MODE on targets that need it, and clean up
the initial mess. Most of this mess is because usb_core.c has no sense
of USB_FULL_INIT or not, and is always included when HAVE_USBSTACK is
set (even in bootloaders without BOOTLOADER_USB_MODE), but dealing with
that latter case will come later.

Change-Id: I7f805b89dded39aeea2db9038209780069e3b600
2026-01-27 10:27:09 -05:00
Aidan MacDonald
7b77752aff echoplayer: reduce USB storage buffer size for bootloader
This saves 64k of BSS, freeing up space in AXI SRAM.

Change-Id: I37079c5fa5ed2b969d70622491dbf0f4dca2c759
2026-01-27 10:05:20 -05:00
Aidan MacDonald
d15bb5f848 stm32h7: move LCD framebuffer to AXI SRAM
Framebuffer access consumes a lot of SDRAM bandwidth.
Moving it to AXI SRAM should be a big improvement as
it's around 8x faster (2x clock speed, 4x bus width).

Also take advantage of explicitly assigning sections
to the special :NONE segment, which means they will
not appear in any ELF program header and thus aren't
visible to the bootloader. They can then overlap
areas used by the bootloader -- by the time they're
written, the bootloader will be long gone -- making
it easier to make efficient use of SRAM.

Change-Id: I2392fd23b17472cc08dc5fe4556f6def3cc186ed
2026-01-27 10:04:59 -05:00
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
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
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
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
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
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
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
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