Commit graph

336 commits

Author SHA1 Message Date
Solomon Peachy
3d07ec46ee jz47x0: Minor code quality improvements in the jz47xx USB drivers
* Replace magic nubmers with #defined constant
 * Tweak some logf messages

No functional changes!

Change-Id: I6a5e4c371a471197a8edbb853967e461621d73f8
2021-11-22 08:08:12 -05:00
Aidan MacDonald
ec164c389c usb: introduce new control request API
Change-Id: I6545d8985ab683c026f28f6a7c0e23b40d0a6506
2021-10-16 15:58:43 -04:00
Aidan MacDonald
672bbe434b usb: rename usb_drv_recv() to usb_recv_recv_nonblocking()
IMHO the current name is somewhat misleading:

- usb_drv_send() is blocking and we have usb_drv_send_nonblocking()
  for the non-blocking case. This inconsistent naming can only
  promote confusion. (And what would we call a blocking receive?)

- Other hardware abstraction APIs in Rockbox are usually blocking:
  storage, LCD, backlight, audio... in other words, blocking is the
  default expected behavior, with non-blocking calls being a rarity.

Change-Id: I05b41088d09eab582697674f4f06fdca0c8950af
2021-09-20 22:41:29 +01:00
Aidan MacDonald
05d4d6a4f2 Fix remaining yellow from e532714d1f
Change-Id: If0bdd1fb3c8ee3324562638bc4c4181357a8fd53
2021-07-25 14:36:47 +00:00
Aidan MacDonald
148fac6f34 Fix yellow from e532714d1f
Change-Id: I4f49e93fc1efa78874fb76de6a436ad1fc894cc5
2021-07-25 15:22:33 +01:00
Aidan MacDonald
e532714d1f pcm: Remove unused function pcm_play_dma_get_peak_buffer()
Change-Id: Ifd20fb14a22489cdb99154c01f69809a1e70d0c5
2021-07-25 14:07:41 +00:00
Aidan MacDonald
d5695822a7 MIPS: remove .MIPS.abiflags section
The abiflags data is only used to communicate ABI information to a
program loader -- you can see what info is stored with readelf -A.
Dropping it shaves 24 bytes off of every binary (including plugins).

Change-Id: Iae78eeffe5c840ff67717707fb94821d24aac8ec
2021-04-26 12:41:06 +00:00
Aidan MacDonald
d6220f618b MIPS: emulate -ffunction-sections with macros in mmu-mips
Using a macro to put each function in its own .icode-based section
allows us to put the functions in IRAM _and_ have linker GC. This
removes a troublesome #ifdef BOOTLOADER_SPL on the X1000 target.

Change-Id: Ia7b59778f5c36b7970dee4280547e434a1f4fc5a
2021-04-25 14:04:38 +00:00
Solomon Peachy
cd64aa2b10 xduoox3: Global volume_limit now applies to the line output as well
The X3's line out is a bit hot, at ~4.3Vpp, so allow it to be backed off.

(On my X3, backing it off to -6dB brings Vpp down to ~3.4V)

Change-Id: Iea38ef1c6a1b183d0f8fb4eaf2bf9ed6b350a532
2021-04-09 15:54:04 -04:00
Solomon Peachy
961ffa61dd Use STORAGE_NEEDS_BOUNCE_BUFFER instead of STORAGE_NEEDS_ALIGN
Enable its use in the jz47xx MIPS targets.

(accidently committed g#3249 before making these changes)

Change-Id: I1791946f632901f0c7a94b04b009671aa0d71717
2021-03-27 15:02:18 -04:00
Solomon Peachy
b82298ae2c jz4740: Fix incorrect dcache flush in the USB RX DMA code.
Change-Id: I01eff581b16569bda97c55afc7adac897b29e0e3
2021-03-03 21:44:28 -05:00
Aidan MacDonald
74a3d1f5be Fix MIPS cache operations and enable HAVE_CPU_CACHE_ALIGN on MIPS
- The range-based cache operations on MIPS were broken and only worked
  properly when BOTH the address and size were multiples of the cache
  line size. If this was not the case, the last cache line of the range
  would not be touched!

  Fix is to align start/end pointers to cache lines before iterating.

- To my knowledge all MIPS processors have a cache, so I enabled
  HAVE_CPU_CACHE_ALIGN by default. This also allows mmu-mips.c to use
  the CACHEALIGN_UP/DOWN macros.

- Make jz4760/system-target.h define its cache line size properly.

Change-Id: I1fcd04a59791daa233b9699f04d5ac1cc6bacee7
2021-03-03 20:50:28 +00:00
Solomon Peachy
388adff3cc pcm: Further cleanup of unused bits of the PCM ACPI:
* pcm_get_bytes_remaining()
 * pcm_calculate_peaks()
 * pcm_get_peak_buffer()

Nothing in-tree uses these at all (except for the lua plugin wrapper)

Change-Id: I971b7beed6760250c8b1ce58f401a601e1e2d585
2020-11-12 15:59:09 +00:00
Solomon Peachy
fe2d52cc7d pcm: Get rid of pcm_play_pause() and associated APIs
Nothing in the core has used it for some time.  It's exported to the
plugin API but the last plugins to use it were switched to the mixer API
back in 2011.

This allows us to get rid of pcm_play_dma_pause() from all audio drivers

Change-Id: Ic3fa02592316f84963e41d792d1cabb436d1ff6b
2020-10-31 01:18:27 +00:00
Solomon Peachy
0cde20fadb xduoox3: Disable the DAC's digital de-emphasis filter.
Whether or not this is correct depends on how the source material was
mastered, digitized, and/or encoded.  There is no setting appropriate
for everything.

Eventually I'd like to make this configurable, but I'd want to have it
shared with more than one target first.

Change-Id: I20a0eff4b3dc2517c33db49d4f72e85bf81d1ca6
2020-10-15 13:30:48 -04:00
Solomon Peachy
7a1bf01541 Undo the hacks that allowed targets without LEFT/RIGHT (UP/DN) to build.
Replaced them with warnings until they are fixed *PROPERLY*

Change-Id: I4425200e60f8b5224262a54f105b974cec471d22
2020-10-08 20:30:08 -04:00
Solomon Peachy
f4f3255edf xduoox3: Work out clocks for 176/192KHz support.
Note:  PCM mix buffer sizes are _way_ too small for these high bitrates

(We really need to make the mixer stuff use dynamic buffer sizes based
 on the bitrate.  Maybe pre-allocate a max size based on upper bitrate limit,
 but use only part of it at lower bitrates?  So we can have sane latency..)

Change-Id: Id7b4afd73dba7f1ffb84b2e1c016859fae5d6835
2020-10-01 17:30:22 -04:00
Solomon Peachy
e404026308 jz4760: Implement USB DMA RX
Can be disabled at runtime by setting hold switch.

Boosts sysbench sequential write performance by 34-58%

Change-Id: I060c9d7dddc1b448f18aa46af8f8aff046e07843
2020-09-18 17:48:31 -04:00
William Wilgus
2df3a5b04c Headphone / lineout pause/resume #FS13237
Allow Lineout to behave like headphone port in regards to
plug/unplug pause/resume

Change-Id: I9cb2c9c40e0bdf3bf7e1e272164acd343f6b3850
2020-09-18 00:22:52 +00:00
Solomon Peachy
ec413f7692 jz4760: Heavily rework USB driver to add working DMA support
* DMA Bulk IN (ie our TX) results in sequential transfers 33-68% faster.
 * DMA Bulk OUT (ie RX) is mostly stripped out due to complete brokenness.
 * Interrupt and control endpoints remain PIO-driven.

Other improvements:

1) Use consistent endpoint references (no magic numbers)
2) Greatly enhanced logging
3) DMA support can be compiled out completely
4) Setting lockswitch will disable all DMA operations at runtime
5) Much more robust error checking and recovery

Change-Id: I57b82e655e55ced0dfe289e379b0b61d8fe443b4
2020-09-17 11:26:04 -04:00
William Wilgus
a66b908801 Xduoo X3 add headphone and lineout status to IO Ports debug menu
Change-Id: I9caf55c1249625dff7e437158afd20a526fa7499
2020-09-17 11:22:40 -04:00
William Wilgus
3c2b6809d9 Xduoo X3 no ADC after ROLO
Speachy suggested we don't shut down the adc on ROLO
this fixes the random adc drop out on ROLO

Change-Id: Ife7d679ce51a6f767963210ee650815f1de12223
2020-09-13 13:29:00 -04:00
William Wilgus
c62493e98a Xduoo X3 Add tree scrolling FS#13240, Emulate Multibutton presses
Fixes deficiencies with the button system on the X3

  The x3 has an interesting button layout.
  Multiple key presses are NOT supported unless
  [BUTTON_POWER] is one of the combined keys

  As you can imagine this causes problems as the power button takes
  precedence in the button system and initiates a shutdown if the
  key is held too long
  instead of BUTTON_POWER use BUTTON_PWRALT in combination with other keys
  IF using as a prerequsite button then BUTTON_POWER should be used

  Multiple buttons are emulated by button_read_device but there are a few
  caveats to be aware of:

  Button Order Matters!
   different keys have different priorities, higher priority keys 'overide'
   the lower priority keys
  VOLUP[7] VOLDN[6] PREV[5] NEXT[4] PLAY[3] OPTION[2] HOME[1]

  There will be no true release or repeat events, the user can let off the
   button pressed initially and it will still continue to appear to be
   pressed as long as the second key is held

Tree scrolling is PLAY+NEXT or PLAY+PREV

Change-Id: I88dfee1c70a6a99659e8227f5becacc50cc43910
2020-09-13 16:23:24 +00:00
William Wilgus
e18c2f3001 XduooX3 LCD tweaks #2
Group commands for a bit more speed

bitdelay was not being inlined
lower bitdelay to 12 cycles

Clean-up magic numbers

Change-Id: Ifeb57a5532807a598f1ec5e1c55f03e4aa1e133f
2020-09-08 14:37:46 +00:00
William Wilgus
af24ff1fc3 XduooX3 Gpio reconfigure button system #2
Fix issue with first battery sample taking 30 seconds

Clean up code

Change-Id: If2437d241e0ab4e3d23b141f5d853b6cf3209b07
2020-09-06 11:06:54 +00:00
Solomon Peachy
53142ae9f5 jz4760: Fix and re-enable the hardware udelay() timer
Change-Id: I591b4f023776b3501fce03e08bfc87a355f4c69b
2020-09-06 02:09:21 +00:00
Solomon Peachy
2dadb8c7d6 jz4760: Use a #define for the timer id, not a raw number
Change-Id: Ic31267a2ae82beede72100c1cc5ddf7211aa0abe
2020-09-06 00:27:07 +00:00
Solomon Peachy
d015165bc5 mips: Convert 'nop' to 'ssnop' -- for future-proofing
Change-Id: I17625f4d56a1f5205887cb47668a2dcb628053f4
2020-09-05 22:18:26 +00:00
Solomon Peachy
90a4f28c27 jz47xx: Audio path tweaks:
* Increase audio buffer size to better handle IRQ latency (256->2048)
 * Ensure DMA engine is idle prior to starting transfers
 * Set AIC to repeat last sample in case of underflows

Change-Id: I9c45c20481ee072e5882b7586fb7d50bd8ef2f35
2020-09-04 15:57:00 -04:00
William Wilgus
48a2b80c77 Xduoo Gpio fix bug
Change-Id: I76eda59a391a408d1a6642497d8cc4aeb93a0da1
2020-09-03 16:06:16 -04:00
Solomon Peachy
0cb162a76b mips: Heavily rework DMA & caching code
Based on code originally written by Amaury Pouly (g#1789, g#1791, g#1527)
but rebased and heavily updated.

Change-Id: Ic794abb5e8d89feb4b88fc3abe854270fb28db70
2020-09-03 15:34:28 -04:00
William Wilgus
1ae8213a64 XduooX3 Gpio reconfigure button system
only check button values with adc when buttons are actually pressed

battery level check frequency is now around 30 seconds
switched to polling for the battery voltage w/ timeout

Ifdef functions Allow BACK OPTION PLAY to be the first of a two key combo

Change-Id: Icb48d62ac8d82b4dc931df5e1c5b4a84a9a69772
2020-09-03 18:19:47 +00:00
Solomon Peachy
546212a977 jz4760: Dial down PIXCLK as low as possible
We don't use it on the X3.  Should we ever get another jz4760 target
we can revisit this.

Change-Id: I591d02c7e47b35424b3c96b776b31a38e3c8ceee
2020-09-02 13:39:05 -04:00
Solomon Peachy
f913829d06 xduoox3: Disable the LCD and MSC0 clocks as we don't use them
Change-Id: If2261aed464fcbe3ea1f036dd18376fa8ff42e69
2020-09-02 16:59:13 +00:00
William Wilgus
1a8939cc3d XduooX3 Slow down greylib framerate
halves cpu usage

Change-Id: I3797b01ecd2f7615acfed53a77d8a1f51e947c8b
2020-09-02 16:57:05 +00:00
William Wilgus
35371df671 XduooX3 Debug Menu -- HW_info
add scrolling for clocks and such

moved to a switch based structure..  this ends up a lot cleaner

Change-Id: I940506c4b8dc73f0b776d20810780527cbf7e0d4
2020-09-02 16:38:43 +00:00
Solomon Peachy
bb6fc21244 mips: use .set push/pop in asm code
Change-Id: I3e7bc7ffb8d6d0c5d18a6ab38b1a270559a62fb9
2020-09-02 08:29:04 -04:00
Solomon Peachy
a7ebd92ec8 jz4760: use SYSFONT in the hw info debug screen, and restore old font
Change-Id: I0c2df20a8c87f7a5bdf25d59904d32806171a544
2020-08-31 13:40:49 -04:00
William Wilgus
790a5bb0ca Xduoo_x3 Boot Fix red from debug menu changes
Change-Id: I1a84cf28f8a3416d661a8e2e4dd31c9e86f50ba0
2020-08-31 02:45:09 -04:00
William Wilgus
63e6aec260 xduooX3 debug menu add GPIO IO Ports
Change-Id: I6ca9f005e412240235354b9369bcc3f4a4ad256f
2020-08-31 03:07:17 +00:00
Solomon Peachy
748133cf9d xduoox3: Fix bootloader build
Change-Id: Ia2f2dba4a263c82aebc7fab9da4ad69ef90565ea
2020-08-30 21:56:11 -04:00
Solomon Peachy
8dadce5c4c jz4760: Explicitly disable UARTs at startup
(Bootloader uses UART1, and leaves it running when it hands it off to us)

Change-Id: Icde1d713574582f18e9f91b5c95f3917fe324b74
2020-08-30 21:36:26 -04:00
William Wilgus
06e9abc428 XduooX3 Tweak LCD drive strength and slew
Change-Id: Ic5ee9e700a0c8acffc39b51cedc24ff44d230fd3
2020-08-30 17:26:43 -04:00
Solomon Peachy
e06ab68166 xduoox3: Use correct "ms_clk" divider for SADC and be smarter with polling
Change-Id: Ibbbcd9fd1e7e2cfa896678cccaa00296c86c2c62
2020-08-30 01:45:15 -04:00
Solomon Peachy
cc5b0439a8 jz4760: Prioritize Audio DMA and TCU0 (systick) above all others
(And loop in the IRQ handler to make sure we catch everything!)

Change-Id: I813272c69e981fdc214ec28448ced403ad366ea0
2020-08-30 01:45:15 -04:00
Solomon Peachy
b01e9295e4 jz4760: Revert back to the delay loop udelay()
... the timer-based version used the same timer as our os tick!

Change-Id: Id84b308bfa1145cb8806e1029f2ca26159fb71e1
2020-08-30 01:45:15 -04:00
Solomon Peachy
733821b592 jz4760: Rework IRQ priorities, make audio the highest.
(it was effectively the _lowest_ prior to this.  wtf?)

Change-Id: I6905c5ba0d87a5e14aeae5d5b79f8f515ac5b806
2020-08-29 21:26:49 +00:00
Solomon Peachy
3dc4f817de jz4760: Disable dynamic clocking entirely.
Back off to 480MHz [max] clock, bus/mem clock of 120MHz.

576 is unstable on at least one unit, and 528 still glitches.

Change-Id: I020e48532524e739f3bfa42bed570381ccd34959
2020-08-29 14:59:46 -04:00
William Wilgus
3867f0b959 XduooX3 Sources WS changes
Change-Id: I17ae59e7ef0440756527ce50ab30f8bf34f79007
2020-08-29 10:14:03 -04:00
William Wilgus
31a1a29004 Xduoo X3 Tweak LCD settings
Adds contrast setting which actually sets the drive voltage

Change-Id: I173238e2efe9e50c6ef4cda9bf991e7ee5568ff5
2020-08-29 04:31:37 +00:00