summaryrefslogtreecommitdiff
path: root/src/portable
AgeCommit message (Collapse)Author
2022-02-22Merge pull request #1280 from kasjer/kasjer/nrf5x-dma-raceHa Thach
nrf5x: Fix DMA access race condition
2022-02-09Merge pull request #1304 from kkitayam/add_hcd_for_frdm_kl25zHa Thach
Add hcd driver for frdm kl25z
2022-02-02Merge pull request #1291 from kasjer/kasjer/da1469x-fix-resumeHa Thach
da1469x: fix resume
2022-01-28OHCI: Fix array out of bounds issueRyzee119
If using a USB hub, a request outside the array size can occur Original line: https://github.com/hathach/tinyusb/blob/ffb257ac17f162bc5a4c26596d7a1e954db98aa5/src/portable/ohci/ohci.h#L162 It can happen in a few places but one such example is here: https://github.com/hathach/tinyusb/blob/ffb257ac17f162bc5a4c26596d7a1e954db98aa5/src/portable/ohci/ohci.c#L460 ie. if HUB address is 5, this would be an array index out of bounds on control endpoints as `CFG_TUH_DEVICE_MAX+1` is only 5. This fix just includes num of hubs in the reserve array size. Fixing locally fixed this issue.
2022-01-27Fix handling for pending transferskkitayam
2022-01-27Change hcd_edpt_xfer to send at the next SOFkkitayam
2022-01-27Add handling for NAK responsekkitayam
2022-01-27Fix handling control transferkkitayam
2022-01-27Add HCD functions for KL25Zkkitayam
2022-01-26fix mynewt build sunxihathach
2022-01-25Merge branch 'master' into masterHa Thach
2022-01-20dcd_da1469x: Re-enable RX after resumeJerzy Kasenberg
Going to suspend states disable reception on non-0 RX endpoints. Now when USB resume condition is detected, all RX endpoints with pending transfers are resumed.
2022-01-20dcd_da1469x: Fix over-run/under-run maskJerzy Kasenberg
Bit mask enabling/disabling over-run/unde-run was shifted by one nibble, so interrupt was never enabled. It did not force any issue as this situation could only happen on ISO endpoints without DMA.
2022-01-19Merge pull request #1265 from kkitayam/add_hcd_for_renesas_rxHa Thach
Add HCD driver for Renesas RX
2022-01-19nrf5x: Fix EP OUT race conditions in OS buildJerzy Kasenberg
When two tasks entered dcd_edpt_xfer() it was possible that first disabled interrupt to setup total_len and actual_len but second task for another endpoint enabled interrupt between total_len and actual_len resulting in race condition with interrupt, hence mutex is added on top of interrupt being blocked.
2022-01-19nrf5x: Fix DMA access race conditionJerzy Kasenberg
In multi-thread mode starting DMA in thread mode was prone to race condition resulting in infinite loop. It may happen on single core CPU with strict priority based tasks scheduler where ready high prio task never yields to ready low prio task (Mynewt). Sequence that failed (T1 - low priority task, T2 - high priority task) - T1 called start_dma() - T1 set _dcd.dma_running (DMA not started yet, context switch happens) - T2 took CPU and saw that _dcd.dma_running is set, so waits for _dcd.dma_running to be 0 - T1 never gets CPU again, DMA is not started T2 waits forever OSAL mutex resolves problem of DMA starting from thread-context.
2022-01-19Merge pull request #1279 from kasjer/kasjer/nrf5x-int-raceHa Thach
nrf5x: Fix EP OUT race conditions
2022-01-19Merge pull request #1283 from kasjer/kasjer/olimex-pic32-board-fixesHa Thach
olimex pic32 board fixes
2022-01-18Merge pull request #1274 from kasjer/kasjer/nrf5x-request-clock-in-mynewtHa Thach
nrf5x: Request HFXO via OS
2022-01-18nrf5x: Request HFXO via OSJerzy Kasenberg
Mynewt (similar to Soft Device) has its own reference counting for HFXO oscillator. So far TinyUSB requested HFXO when VBUS was detected and stopped when VBUS was removed. But with Mynewt running HFXO can be stopped when other interested parties don't require HFXO anymore. This results in very difficult to track USB transmission errors. This change enables Mynewt specific HFXO management in Soft Device fashion.
2022-01-17pic32mz: Fix remote_wakeup without OSJerzy Kasenberg
Remote wakeup requires 10ms of delay when RESUME bit is toggled. It was covered for OS build. For non-OS build simple delay based on board_millis() is used to wait required amount of time. Without this remote wakup may not work.
2022-01-17ft9xx: Fix Mynewt buildJerzy Kasenberg
Includes were moved few lines down to restore build with Mynewt build system.
2022-01-17Merge branch 'master' into port-ft90xHa Thach
2022-01-16Merge pull request #1270 from kasjer/kasjer/pic32mzHa Thach
Driver for Microchip PIC32MZ family
2022-01-14nrf5x: Fix EP OUT race conditionsJerzy Kasenberg
When dcd_edpt_xfer() starts new transfer two separate problems were observed. For both problems stream of OUT packets was pouring from host. First problem was that total_len and actual_len were not atomic. In case where incoming OUT packets are less (63) than MPS (64), actual_len and total_len are set 63. Then transfer complete from USBD is called that will schedule next 64 bytes transfer. At that point incoming packet would start DMA if there is place in RAM, normally it does not happen since actual_len == total_len. If packets arrives and interrupt is raised after total_len is set (64) but actual_len is still 63 from previous transfer, interrupt code sees that there is place in ram (1 byte) and transfer this 1 byte to buffer that was already filled with previous packet. To remedy this USB interrupt is blocked during transfer setup. Second problem can happen when dcd_edpt_xfer setups xfer->total_len and actual_len correctly but then context switch happens before xfer->data_received is checked. If during this time two packets arrive one will be copied to RAM second will stay in endpoint with data_received set to 1. Then when xfer_edpt_xfer() checks data_receive flag it starts DMA again overwriting data. To remedy this, data_received is checked together with check if data was already transferred. If transfer was complete, there is no need to start DMA yet. In such case data_received will be handled in same place by next xfer_edpt_xfer() correctly.
2022-01-07Add driver for PIC32MZ MCUsJerzy Kasenberg
Device-only driver for PIC32MZ MCUs.
2022-01-05Add Raspberry Pi Zero W and Zero 2 WScott Shawcroft
These are different Broadcom chips. The peripherals are essentially the same. The main differences are: * The CPU(s) * The interrupt controller * The peripheral base address (but not the peripherals that we use)
2021-12-31Add register file for Microchip PIC32MZJerzy Kasenberg
2021-12-29update docshathach
2021-12-29add license to dcd file, slightly update readmehathach
2021-12-29Merge branch 'master' of https://github.com/t123yh/tinyusb into t123yh-masterhathach
2021-12-27Fix hcd_edpt_clear_stallkkitayam
2021-12-27Add statements for control VBUSkkitayam
2021-12-27Add hcd for Renesas RXkkitayam
2021-12-27Fix Mynewt build for Microchip PIC32MZ devices.Jerzy Kasenberg
definition of DEBUG breaks Microchip pic32 builds for Mynewt. When MCU is not VALENTYUSB_EPTRI there is no need to have any preprocessor definitions. It may not look like a big deal but for xc32 builds, compiler automatically force-includes some file that have structure with field name DEBUG that result in build error in dcd_eptri.c when this file is not really needed. Moving DEBUG and LOG_USB few lines down should not break eptri builds.
2021-12-15Update midi_test endpoints and FT9xx codeGordon McNab
2021-12-09Merge pull request #1233 from vmilea/rp2040_bugfix/ep_closeHa Thach
Handle the closing of endpoints on RP2040
2021-12-09Merge pull request #1221 from kasjer/kasjer/fix-nrf5x-vbus-race-conditionHa Thach
nrf5x: Fix race condition during startup
2021-12-08Handle xfer events before closing EPValentin Milea
2021-12-08Update code to implement changes from upstream masterGordon McNab
2021-12-08Merge branch 'master' into port-ft90xGordon McNab
2021-12-08nrf5x: Fix race condition during startupJerzy Kasenberg
When NRF5x device is reset by software (after DFU for example), power event is ready from the beginning. When power interrupt is triggered before tud_init() finished USBD_IRQn is enabled before it would be enabled in tud_init(). This in turn may result in BUS RESET event being sent from USB interrupt to USB task when queue is not initialized yet. This scenario often happens in Mynewt build where queue creation takes more time. To prevent this scenario USBD_IRQn is not enabled in power event interrupt handler before dcd_init() was called.
2021-12-07Remove buffer reclaim logsValentin Milea
2021-12-07Merge pull request #1213 from kkitayam/add_hcd_for_msp_exp432e401yHa Thach
Add a HCD driver for MSP-EXP432E401Y
2021-12-06Fix handling of RXRDY bitYunhao Tian
2021-12-05Change FIFO size to 4KB (not sure)Yunhao Tian
The datasheet says 2KB FIFO, but accroding to many code examples, the F1C100s has at least 4KB of FIFO memory. This is working with cdc_msc example, but I'm not sure, this should be checked.
2021-12-05Fix a typo that leads to incorrect RX handlingYunhao Tian
2021-12-05Add FIFO size checkYunhao Tian
2021-12-05Close all EPs upon resetYunhao Tian
2021-12-05Save current EP before querying other EPsYunhao Tian