Skip to content

Commit ef69da0

Browse files
committed
use standard EHCI USB INT instead of chipidea async/period interrupt to be compatible with other EHCI implementation
1 parent 9554283 commit ef69da0

File tree

2 files changed

+9
-21
lines changed

2 files changed

+9
-21
lines changed

src/portable/ehci/ehci.c

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -307,8 +307,8 @@ bool ehci_init(uint8_t rhport, uint32_t capability_reg, uint32_t operatial_reg)
307307
regs->status = (EHCI_INT_MASK_ALL & ~EHCI_INT_MASK_PORT_CHANGE);
308308

309309
// Enable interrupts
310-
regs->inten = EHCI_INT_MASK_ERROR | EHCI_INT_MASK_PORT_CHANGE | EHCI_INT_MASK_ASYNC_ADVANCE |
311-
EHCI_INT_MASK_NXP_PERIODIC | EHCI_INT_MASK_NXP_ASYNC | EHCI_INT_MASK_FRAMELIST_ROLLOVER;
310+
regs->inten = EHCI_INT_MASK_USB | EHCI_INT_MASK_ERROR | EHCI_INT_MASK_PORT_CHANGE |
311+
EHCI_INT_MASK_ASYNC_ADVANCE | EHCI_INT_MASK_FRAMELIST_ROLLOVER;
312312

313313
//------------- Asynchronous List -------------//
314314
ehci_qhd_t * const async_head = list_get_async_head(rhport);
@@ -768,28 +768,20 @@ void hcd_int_handler(uint8_t rhport)
768768
regs->status = EHCI_INT_MASK_PORT_CHANGE; // Acknowledge
769769
}
770770

771+
// A USB transfer is completed with error
771772
if (int_status & EHCI_INT_MASK_ERROR) {
772773
xfer_error_isr(rhport);
773774
regs->status = EHCI_INT_MASK_ERROR; // Acknowledge
774775
}
775776

776-
//------------- some QTD/SITD/ITD with IOC set is completed -------------//
777-
if (int_status & EHCI_INT_MASK_NXP_ASYNC) {
778-
async_list_xfer_complete_isr(list_get_async_head(rhport));
779-
regs->status = EHCI_INT_MASK_NXP_ASYNC; // Acknowledge
780-
}
781-
782-
if (int_status & EHCI_INT_MASK_NXP_PERIODIC)
783-
{
784-
for (uint32_t i=1; i <= FRAMELIST_SIZE; i *= 2)
785-
{
777+
// A USB transfer is completed
778+
if (int_status & EHCI_INT_MASK_USB) {
779+
for ( uint32_t i = 1; i <= FRAMELIST_SIZE; i *= 2 ) {
786780
period_list_xfer_complete_isr(rhport, i);
787781
}
788-
regs->status = EHCI_INT_MASK_NXP_PERIODIC; // Acknowledge
789-
}
790782

791-
if (int_status & EHCI_INT_MASK_USB) {
792-
// TODO standard EHCI xfer complete
783+
async_list_xfer_complete_isr(list_get_async_head(rhport));
784+
793785
regs->status = EHCI_INT_MASK_USB; // Acknowledge
794786
}
795787

src/portable/ehci/ehci.h

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -278,14 +278,10 @@ enum {
278278
EHCI_INT_MASK_PERIODIC_SCHED_STATUS = TU_BIT(14),
279279
EHCI_INT_MASK_ASYNC_SCHED_STATUS = TU_BIT(15),
280280

281-
EHCI_INT_MASK_NXP_ASYNC = TU_BIT(18),
282-
EHCI_INT_MASK_NXP_PERIODIC = TU_BIT(19),
283-
284281
EHCI_INT_MASK_ALL =
285282
EHCI_INT_MASK_USB | EHCI_INT_MASK_ERROR | EHCI_INT_MASK_PORT_CHANGE |
286283
EHCI_INT_MASK_FRAMELIST_ROLLOVER | EHCI_INT_MASK_PCI_HOST_SYSTEM_ERROR |
287-
EHCI_INT_MASK_ASYNC_ADVANCE | EHCI_INT_MASK_NXP_SOF |
288-
EHCI_INT_MASK_NXP_ASYNC | EHCI_INT_MASK_NXP_PERIODIC
284+
EHCI_INT_MASK_ASYNC_ADVANCE | EHCI_INT_MASK_NXP_SOF
289285
};
290286

291287
enum {

0 commit comments

Comments
 (0)