Commit graph

11917 commits

Author SHA1 Message Date
Vencislav Atanasov
f040c4c9ec Rename CPU_S5L870X to CPU_S5L87XX
This is a preparation to introduce support for the following SoC models: S5L8720 (iPod Nano 4G, iPod Touch 2G), S5L8730 (iPod Nano 5G), S5L8723 (iPod Nano 6G) and S5L8740 (iPod Nano 7G)

The whole family consists of SoCs which are similar, running ARMv6 and Thumb2 instructions, but some peripherals are located at a different address.

No functional change is to be expected so far.

Change-Id: If1f7669c49cf110ccc52c5234cc42ffd6f2b4e80
2024-11-20 10:58:32 -05:00
Solomon Peachy
9bf033dd66 ata: Prefer using "virtual" sector size where possible
Normally, if a device uses larger physical sector size than the logical
size and supports so-called "512e" mode, we let the device deal with
partial sector reads/writes.

However, if MAX_VIRT_SECTOR_SIZE is defined, we support
partitioning/filesystems that use a larger "virtual" sector than the
logical sector.  typically this matches the physical sector size of the
drive, which means that despite a small logical sector size, all I/O
is done in terms of the physical sector size.

Therefore, when MAX_VIRT_SECTOR_SIZE and MAX_PHYS_SECTOR_SIZE are
enabled (currently only ipod5g and ipod6g), prefer software-based
partial sector I/O.

Change-Id: I0815ad0a2f987b89bb2debfbf3d0ed64cdf85525
2024-11-15 07:24:08 -05:00
Solomon Peachy
120906dc8b ata: Ensure that the bounce buffer is minimum 32-bit aligned
Basically, if STORAGE_ALIGN_ATTR isn't defined, define it to be
sizeof(uint32_t) in the ATA code.

Change-Id: I13de61788cb71e3e8d3a956ab5f2e251471ce76d
2024-11-15 07:24:08 -05:00
Solomon Peachy
d36ef610c2 x1000: fix yellow in prior commit
Change-Id: I5809fab0148d4869cdc86212e8386590090d4320
2024-11-13 19:58:48 -05:00
Dana Conrad
1fb906500a x1000: LCD DMA fix
Credit ZappBranigan2972 on the forums

Change-Id: Ia4d498d215d8f365156f15965b715832202bec8a
2024-11-13 18:26:30 -05:00
Solomon Peachy
d0aaa37d33 ata: Panic if we get a drive with unaligned logical sectors.
If identify device word 209 is valid, check to see if the drive report
on the alignment of LBA0 with respect to physical sector 0.

If it's not aligned, bail immediately.  Supporting this properly
won't be hard, but it's not someting we want to do unless necessary.

Change-Id: I3d5bb8fad9e32fff43dfb6454393728d7c01b93b
2024-11-13 07:27:56 -05:00
Solomon Peachy
044ba60bcf ATA: Add some more logf debugging
Change-Id: If1f919c43d02a974e478018750c60e3619db1505
2024-11-12 08:11:18 -05:00
Solomon Peachy
461704f803 misc: Fix some compile warnings when logf is enabled
Change-Id: I67b611cbbbe33113853f36da5047ba799f1dda5d
2024-11-12 08:11:18 -05:00
Solomon Peachy
3d1dcebebb ipod6g: Wrap more DMA functionality with HAVE_ATA_DMA
No functional change.

We always have it turned in for ipod6g, but this makes some of the
flow/logic easier to follow.

Change-Id: I3abeace4f70afb197e819e0944e0e76f4edc4800
2024-11-12 08:11:18 -05:00
Solomon Peachy
d6e2b5d3cf Enable use of ATA DMA on Philips GoGear HDD1630 and HDD6630
These are PP502x-based devices shipped with ATA drives.  However,
PIO is flaky when used with the various ATA/CF<->SD adapters, so
turn it in across the board.

Change-Id: I65384d95e2e4498eb03f43ac990b01e0c6d060c5
2024-11-11 16:29:56 -05:00
Solomon Peachy
a4fe20a278 filestr_cache: Some more 64-bit sector_t fixes
This isn't strictly needed for FAT32, but the core file cache code
needs to be able to reference >32bit sector addresses.

Change-Id: I57838f1228c1d45f6a8c4755c5d1f9063c13b3dd
2024-11-11 10:38:58 -05:00
Solomon Peachy
3e95b13b7a ata: Fix yellow in some bootloaders, introduced in c61ad40812
Change-Id: I0058fd5339e27505b6f8e4533fda07a1352a5329
2024-11-09 18:07:14 -05:00
Solomon Peachy
c8e1da8e90 ipod5g/6g: support DEFAULT_VIRT_SECTOR_SIZE
This way if there's no valid partition/filesystem we still report the
"correct" sector size out via USB.

Update the ipod5g/6g bootloaders so they do the right thing too.

Change-Id: I0d93ae7e6664f1591d8edf1c0252c586e329cd4b
2024-11-09 17:48:09 -05:00
Solomon Peachy
1516c48a37 storage: Support a default virtual sector size
Normally, we figure out the virual sector size from the filesystem info.
However, if there's no filesystem, we fall back to the hardware's
logical sector size.

Some device firmware (eg ipod5g/6g) need their partition tables set up
with larger-than-logical sector sizes; this way we can present the
"correct" sector size to maintain interoperability with the stock
firmware and make it so that the drive can still be properly partitioned
from within rockbox.

This patch adds support for DEFAULT_VIRT_SECTOR_SIZE.  Nothing uses it yet.

Change-Id: Iae746a50ffc37c51abb2c9b82d3c4596f1fa7559
2024-11-09 17:48:00 -05:00
Solomon Peachy
c61ad40812 storage: Wrap runtime variable sector size with MAX_VARIABLE_LOG_SECTOR
When enabled this allows 512n and 4Kn drives to be used with a single build.
(So far all ATA SSDs use 512 byte logical sectors)

Change-Id: I902d2318ca8abb581699c0bca68d6e3ec227d064
2024-11-09 16:34:06 -05:00
Solomon Peachy
bc6c189dcb storage: rename MAX_LOG_SECTOR_SIZE to MAX_VIRT_SECTOR_SIZE
Change-Id: I34f00748c1b0935d65af5f0fc6bdd13356ff31e1
2024-11-09 16:32:40 -05:00
Solomon Peachy
7ecab006c0 fat: Allow use of variable logical sector sizes
Only used if MAX_LOG_SECTOR_SIZE is defined

This allows a single build to seamlessly work with (eg) 512B or 4K sectors.

Change-Id: I85d2a6612afca6a1d7a3bd49c588b5745ab2b220
2024-11-09 16:32:40 -05:00
Solomon Peachy
42b63daebb ipod6g: Swap STORAGE_NEEDS_BOUNCE_BUFFER for STORAGE_WANTS_ALIGN
Change-Id: Ie34ffe0e022c8416ec9b2d4c39733a15c205eb3d
2024-11-07 21:08:15 -05:00
Solomon Peachy
3664d382e0 ata: if drive doesn't advertise a nonstandard sector size, default to 512
...Instead of SECTOR_SIZE, which might be different.  This way
we can properly validate the value.

Change-Id: I8e6ae5882792f301ac580a144556af94772f4cfe
2024-11-07 18:15:26 -05:00
Solomon Peachy
9dd2781b87 ipod6g: Use storage bounce buffer for ipod6g
Change-Id: I987357bd6795b988802997f92b6d64f36cd24f43
2024-11-07 16:44:25 -05:00
Solomon Peachy
9e70991174 disk: Simplify LOG_SECTOR_SIZE() definition
Change-Id: I49cca4fe5e92f7b443427c2b8e95bae8955b9ea0
2024-11-07 07:51:14 -05:00
Solomon Peachy
f58fad943e diskcache: Size the buffers for MAX_LOG_SECTOR_SIZE
Because if we get a logical sector size > min sector size
we'll trigger buffer overflows.

Change-Id: Ibd24f91a0f8601fbd8c5a5dfeef4ebe5c081f664
2024-11-07 07:49:17 -05:00
Solomon Peachy
e29ddfb6be ata: Support for ATA logical sector sizes > 512B
Basically this requires un-hardcoding SECTOR_SIZE everywhere, in
favor of using a variable containing what was reported in IDENTIFY INFO.

Note that the rest of the storage subsystem still needs to be fixed up!

Change-Id: I7f2dbd54ff2bc16b15010721e011949cbf308e12
2024-11-07 07:48:17 -05:00
Solomon Peachy
000a575d13 storage: Make ramdisk use the global SECTOR_SIZE definition
Change-Id: I0c2fe75ea425107f1cd64acf42ff8c00cee07456
2024-11-04 21:10:51 -05:00
Solomon Peachy
2824bd5f16 ipod6g: Support MAX_PHYS_SECTOR_SIZE of 4K
This lets us *natively* handle varying physical sector sizes
without playing games and lying about the logical sector size.

(The original drives use 4K _physical_ sectors with 512B logical
 sectors, but you have to access everything in 4K blocks...)

Achieve this by splitting the MAX_PHYS_SECTOR_SIZE code out
of the main ATA driver and re-using it.

Change-Id: I0bc615ab4562f1e3e83171a8633c74fb60c7da1f
2024-11-04 07:33:26 -05:00
Solomon Peachy
f3026cd072 xduoox3: Try to distinguish between "USB Plugged in" and "Charging"
Change-Id: I1879dbe6a95df215afa32012a72e1431c03a8653
2024-11-02 20:54:17 -04:00
Solomon Peachy
67ad6589fb Fix additional red introduced in 04dc052a96
Change-Id: Ie553673c5899d8399fa1cb1d7029f0d48075a420
2024-11-02 14:58:49 -04:00
Solomon Peachy
4be6285444 disk: MAX_LOG_SECTOR_SIZE also applies to a few non-ATA targets
Fuze+, native Sonys, and some of the Zens use 2K sectoring from
 the partition/filesystem perspective, even though the underlying
 storage used 512-byte sectoring.

Change-Id: I247d8cae2582c63ec1d4dda0fb225b1a25c8e16a
2024-11-02 14:48:54 -04:00
Solomon Peachy
04dc052a96 Fix (most of) the red in a8c52b1bfb
HAVE_STORAGE_INFO needs to be defined for all non-sim/hostfs targets

Change-Id: Id0d6f88306776cfc286fc0d852b77b70ba389efc
2024-11-02 14:46:23 -04:00
Solomon Peachy
a8c52b1bfb disk: Support a non-fixed (logical) SECTOR_SIZE
This allows a single build to support ATA drives with (eg) 512B and 4K
 logical sector sizes.  This is needed because ATA drives are user-
 replaceable and we don't know what could get plugged in.

 * Add disk_get_log_sector_size() API  (no-op for non-ATA storage)
 * Mostly a no-op if MAX_LOG_SECTOR_SIZE is not enabled
 * Sanity-check that storage's logical sector size is not larger
   than what we're built for

NOTE:  Other layers (eg ATA, FAT, etc) still need to be made aware of this.

Change-Id: Id6183ef0573cb0778fa9a91302e600c3e710eebd
2024-11-02 13:50:53 -04:00
Solomon Peachy
209aeff5b1 usb: Multiple improvements:
* Support varying-sized logical sectors in a single build, instead
   of a hardcoded SECTOR_SIZE.
 * Properly truncate READ CAPACITY(10) if drive has over 2^32 sectors
   And fix potential alignment issues
 * Properly truncate READ_FORMAT_CAPACITY if drive has over 2^32 sectors
 * Support READ CAPACITY(16)

Change-Id: I744b8629131f9ede31e1a972a6700b2244f2e798
2024-11-02 13:03:40 -04:00
Solomon Peachy
f91604cf0e ata: Comments, function/variable renames, and stylistic cleanups
No functional change.  Goal is to share common code between the
ATA drivers.

Change-Id: I0532c43123e422219cea95834ce44ebb23a8b5db
2024-11-01 20:26:09 -04:00
Solomon Peachy
51ba8b3eee erosqhosted: Support HW volume control on rev2+ hardware
This also adds hwrev info to the debug output.

Change-Id: Ia75218cacb8f756a23a77334ea6ab69ac3b20d10
2024-11-01 14:12:31 -04:00
Solomon Peachy
0a11b06d93 ata: Correct parsing of the logical sector size in the IDENTIFY DEVICE
....It's specified in 16-bit words, not bytes.  So multiply it by 2.

(This hasn't been a problem in practice as everything uses 512B logical
 sectors so far..)

Change-Id: I0b1abd0f6184330f0b7f5c000c5ad547038f7c95
2024-10-31 21:51:42 -04:00
Solomon Peachy
d401501fda disk: Clean up identing (no funcitonal change)
Change-Id: I7a689132b155579ab3938231330f5bde7566809b
2024-10-31 21:51:42 -04:00
Solomon Peachy
e829ea9a5e ata: Rework how flushing, sleeping, and power off interacts
* FLUSH_EXT is used if featureflag is set and we are using LBA48
   (unconditionally used for CE-ATA on ipod6g)
 * FLUSH is used if featureflag is set (ATA6+) or if device claims to be ATA5+

 * Rename ata_disk_can_power_off() to ata_disk_can_sleep() as that is
   what it actually tests for.  Only use it to gate issuing the
   STANDBY IMMEDIATE command.
 * Restore behavior of ata_disk_is_active() to return 1 if drive is
   "spinning" or powered up.
 * Allow poweroff if drive claims PM support OR we are able to issue
   FLUSH/FLUSH_EXT commands.

 * Added ata_flush() to explicitly trigger a flush operation, and hook it
   up to storage_flush() in the device shutdown path. (Flushes were
   only previously used in the storage device power management path)

 * After issuing all settings, re-issue IDENTIFY_DEVICE to make sure
   it reflects everything we've enabled.

 * Update manual section on Flash/SSD mods.

Change-Id: I6770a54ef3a87f4c47120bcb96c944a6652f1bf4
2024-10-31 12:51:54 -04:00
Amaury Pouly
9bd13865b7 imx233: make clkctrl code aware of hbus fractional divider
This is just to display the frequency correctly in the debug menu and prepare
for future use of said divider

Change-Id: Ib4c80ec71b3300bdf17edf6cc590229f7640d0f5
2024-10-27 10:46:28 -04:00
Amaury Pouly
d22bb548b2 rda5802: document some registers
This information is available in the RDA5802N or RDA5807 datasheet. I suspect
that register SYSCONFIG6 is not actually used by the tuner. Based on an
obscure statement in the datasheet, I guess SYSCONFIG5 is a frequency in Khz
called freq_direct that offsets the lower band frequency (56/67 MHz) but
1) it is not enabled (FREQ_MODE=0) and 2) it is not clear if this offset is
really just to avoid interference (ie the RF and IF are simply shifted by this
amount) or an actual offset.

Change-Id: Ia469f5370aee7c8c3390324d0cef1193c64df755
2024-10-27 09:10:15 -04:00
Amaury Pouly
977308c95c rda5802: rewrite detection routine
The current code relies on the initial value of some RDS register(which is
documented) but this assumption will be broken when we start enabling RDS.
This commit changes the code to really read the chip ID, although it is more
involved.

Change-Id: I0ed630322a94523612d2f0297dbcbea5f869eb6d
2024-10-27 09:10:08 -04:00
Solomon Peachy
9281ec2e42 Fix red in 3951fbf9d2
...Toshiba Gigabeat S is the only user of the ATA driver with UDMA>2

Change-Id: Ifb854da1c6a8ff1f696b908cc7c1f11d7d10be3f
2024-10-26 17:13:38 -04:00
Solomon Peachy
3951fbf9d2 ATA: Restrict to UDMA2 if we don't detect an "80-pin" cable
Change-Id: I55861065741f3365491445f1f3f5b0041f33e1c6
2024-10-26 15:09:10 -04:00
Solomon Peachy
563da70139 ipod6g: Reworking the bespoke ATA driver
ipod6g was configured with SECTOR_SIZE of 4096, but this ATA driver
unconditionally translated these to 512B operations on the actual
storage device.

Rockbox's storage layer already has robust support for "logical sectors
larger than physical storage sectors" through use of
MAX_LOG_SECTOR_SIZE.  So switch to that mechanism, allowing the ipod6g
ATA driver to be simplified.

If we want to support drives with physical sector sizes > 512B, then
we need to port the MAX_PHYS_SECTOR_SIZE logic from the primary ATA driver.

Additional changes:

 * Simplify MWDMA/UDMA selection logic
 * Report CE-ATA mode in debug menu
 * Use LBA48 commands only if drive is over 128GiB.
 * Drop default sleep/poweroff time from 20s to 7s (matching main ATA driver)

Finally, the bulk of the changes are the first phase of a badly needed
style cleanup that made reading this driver a lot harder than it should
be. I intend to split this into a separate patch.

Change-Id: I2feca9fd319c8d6cfb3c2610208970428d2fa947
2024-10-17 20:30:37 -04:00
Solomon Peachy
d3b7eba405 debug: Correct formatting when displaying drive size.
Change-Id: I95e9a257dcad548ec4378d01c0f9b4370ebf5318
2024-10-15 18:25:28 -04:00
Solomon Peachy
8daf1f1bfe ata: SSDs: Only check for _legal_ "rotational rate" values
I'm 98% sure that the "byteswapped" value I saw was due to another bug
(bad PIO timings on ipods leading to data corruption) and none of the
growing pile of identify device data files that I have include the
backwards one.

Change-Id: Iea47b7419b120a3c8a282b2e3a8f65b8965356ce
2024-10-15 17:00:46 -04:00
Solomon Peachy
cda2f90e10 nano2g: Work around GCC9 warning in the FTL code.
As far as I can tell it's a false positive.

Change-Id: Ib4f993c717d673e53f1ec70b9f4701acc0ca6f27
2024-10-14 08:56:12 -04:00
Christian Soffke
152ec1946c ipod 4g/color: Fix unresponsive buttons after booting
The iPod 4g and color always ignored the very first
button press after booting, i.e. you needed to either
press another button or scroll for a bit first.

Not sure whether any other PP iPods exhibit the same
behavior, although it is not reproducible on an iPod
video.

This patch basically copies the code from FS#5230
that fixed unresponsive buttons whenever the HOLD
switch was turned off (committed as a5961c944b).

Change-Id: I8d3444094e5d000e0f8e30e39a23f054abeeb0f5
2024-10-13 11:36:33 +02:00
Solomon Peachy
38211e627d AS3525: Get rid of duplicate 'const' in a single definition
(Another GCC9-produced warning)

Change-Id: I9fd1ec692faded8afc52d7f3e522bc7198366dc5
2024-10-12 15:09:18 -04:00
Solomon Peachy
6cb0bc3468 coldfire: Silence a warning generated by GCC >= 9
Basically, there are weak aliases for all possible IRQ handlers,
pointing at a NORETURN function. GCC complains that the aliases
don't have the same attribute, but that's actually what we want.

Change-Id: I7f877e00193ed457589c8442db82e93ddea0d60a
2024-10-12 13:54:22 -04:00
Solomon Peachy
8dc42711b4 libc: Correct definition of labs()' and add llabs()
Change-Id: Ie1f4a5660ef17ea3ba383441f257ad7ee02c2061
2024-10-12 12:01:36 -04:00
Solomon Peachy
94d6265df0 gcc9: Move structure packing to the struct definition
Silences GCC9 warnings about possible casting misalignments.

Change-Id: I2120638d4d143e9e539b7f240c31653ad55ae4e0
2024-10-12 09:23:37 -04:00