Implanting xhci_run and some free functions
This commit is contained in:
parent
bed67b388f
commit
f322fce778
|
@ -1050,21 +1050,28 @@ static void xhci_run ( struct xhci_host *xhci ) {
|
||||||
uint32_t runtime;
|
uint32_t runtime;
|
||||||
|
|
||||||
/* Configure number of device slots */
|
/* Configure number of device slots */
|
||||||
config = readl ( xhci->op + XHCI_OP_CONFIG );
|
// config = readl ( xhci->op + XHCI_OP_CONFIG );
|
||||||
|
config = readl ( xhci->op_addr + XHCI_OP_CONFIG );
|
||||||
config &= ~XHCI_CONFIG_MAX_SLOTS_EN_MASK;
|
config &= ~XHCI_CONFIG_MAX_SLOTS_EN_MASK;
|
||||||
config |= XHCI_CONFIG_MAX_SLOTS_EN ( xhci->slots );
|
config |= XHCI_CONFIG_MAX_SLOTS_EN ( xhci->slots );
|
||||||
writel ( config, xhci->op + XHCI_OP_CONFIG );
|
// writel ( config, xhci->op + XHCI_OP_CONFIG );
|
||||||
|
writel ( config, xhci->op_addr + XHCI_OP_CONFIG );
|
||||||
|
|
||||||
/* Enable port interrupt */
|
/* Enable port interrupt */
|
||||||
writel ( 500U, xhci->run + XHCI_RUN_IR_IMOD ( 0 ) );
|
// writel ( 500U, xhci->run + XHCI_RUN_IR_IMOD ( 0 ) );
|
||||||
runtime = readl(xhci->run + XHCI_RUN_IR_IMAN ( 0 ));
|
writel ( 500U, xhci->run_addr + XHCI_RUN_IR_IMOD ( 0 ) );
|
||||||
|
// runtime = readl(xhci->run + XHCI_RUN_IR_IMAN ( 0 ));
|
||||||
|
runtime = readl(xhci->run_addr + XHCI_RUN_IR_IMAN ( 0 ));
|
||||||
runtime |= XHCI_RUN_IR_IMAN_IE;
|
runtime |= XHCI_RUN_IR_IMAN_IE;
|
||||||
writel (runtime, xhci->run + XHCI_RUN_IR_IMAN ( 0 ));
|
// writel (runtime, xhci->run + XHCI_RUN_IR_IMAN ( 0 ));
|
||||||
|
writel (runtime, xhci->run_addr + XHCI_RUN_IR_IMAN ( 0 ));
|
||||||
|
|
||||||
/* Set run/stop bit and enable interrupt */
|
/* Set run/stop bit and enable interrupt */
|
||||||
usbcmd = readl ( xhci->op + XHCI_OP_USBCMD );
|
// usbcmd = readl ( xhci->op + XHCI_OP_USBCMD );
|
||||||
|
usbcmd = readl ( xhci->op_addr + XHCI_OP_USBCMD );
|
||||||
usbcmd |= XHCI_USBCMD_RUN | XHCI_USBCMD_INTE;
|
usbcmd |= XHCI_USBCMD_RUN | XHCI_USBCMD_INTE;
|
||||||
writel ( usbcmd, xhci->op + XHCI_OP_USBCMD );
|
// writel ( usbcmd, xhci->op + XHCI_OP_USBCMD );
|
||||||
|
writel ( usbcmd, xhci->op_addr + XHCI_OP_USBCMD );
|
||||||
|
|
||||||
USB_LOG_DBG("XHCI %s start running\n", xhci->name );
|
USB_LOG_DBG("XHCI %s start running\n", xhci->name );
|
||||||
}
|
}
|
||||||
|
@ -1077,15 +1084,18 @@ static void xhci_run ( struct xhci_host *xhci ) {
|
||||||
static void xhci_event_free ( struct xhci_host *xhci ) {
|
static void xhci_event_free ( struct xhci_host *xhci ) {
|
||||||
|
|
||||||
/* Clear event ring registers */
|
/* Clear event ring registers */
|
||||||
writel ( 0, xhci->run + XHCI_RUN_ERSTSZ ( 0 ) );
|
// writel ( 0, xhci->run + XHCI_RUN_ERSTSZ ( 0 ) );
|
||||||
xhci_writeq ( xhci, 0, xhci->run + XHCI_RUN_ERSTBA ( 0 ) );
|
writel ( 0, xhci->run_addr + XHCI_RUN_ERSTSZ ( 0 ) );
|
||||||
xhci_writeq ( xhci, 0, xhci->run + XHCI_RUN_ERDP ( 0 ) );
|
// xhci_writeq ( xhci, 0, xhci->run + XHCI_RUN_ERSTBA ( 0 ) );
|
||||||
|
xhci_writeq ( xhci, 0, xhci->run_addr + XHCI_RUN_ERSTBA ( 0 ) );
|
||||||
|
// xhci_writeq ( xhci, 0, xhci->run + XHCI_RUN_ERDP ( 0 ) );
|
||||||
|
xhci_writeq ( xhci, 0, xhci->run_addr + XHCI_RUN_ERDP ( 0 ) );
|
||||||
|
|
||||||
/* Free event ring segment table */
|
/* Free event ring segment table */
|
||||||
usb_free ( xhci->eseg );
|
// usb_free ( xhci->eseg );
|
||||||
|
|
||||||
/* Free event ring */
|
/* Free event ring */
|
||||||
usb_free ( xhci->evts );
|
// usb_free ( xhci->evts );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1099,10 +1109,11 @@ static void xhci_command_free ( struct xhci_host *xhci ) {
|
||||||
USB_ASSERT ( ( readl ( xhci->op + XHCI_OP_CRCR ) & XHCI_CRCR_CRR ) == 0 );
|
USB_ASSERT ( ( readl ( xhci->op + XHCI_OP_CRCR ) & XHCI_CRCR_CRR ) == 0 );
|
||||||
|
|
||||||
/* Clear command ring control register */
|
/* Clear command ring control register */
|
||||||
xhci_writeq ( xhci, 0, xhci->op + XHCI_OP_CRCR );
|
// xhci_writeq ( xhci, 0, xhci->op + XHCI_OP_CRCR );
|
||||||
|
xhci_writeq ( xhci, 0, xhci->op_addr + XHCI_OP_CRCR );
|
||||||
|
|
||||||
/* Free TRB ring */
|
/* Free TRB ring */
|
||||||
usb_free ( xhci->cmds );
|
// usb_free ( xhci->cmds );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1125,11 +1136,11 @@ static void xhci_scratchpad_free ( struct xhci_host *xhci ) {
|
||||||
|
|
||||||
/* Free scratchpad array */
|
/* Free scratchpad array */
|
||||||
array_len = ( scratch->count * sizeof ( scratch->array[0] ) );
|
array_len = ( scratch->count * sizeof ( scratch->array[0] ) );
|
||||||
usb_free ( scratch->array );
|
// usb_free ( scratch->array );
|
||||||
|
|
||||||
/* Free scratchpad buffers */
|
/* Free scratchpad buffers */
|
||||||
buffer_len = ( scratch->count * xhci->pagesize );
|
buffer_len = ( scratch->count * xhci->pagesize );
|
||||||
usb_free ( scratch->buffer );
|
// usb_free ( scratch->buffer );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue