xHCI misc cleanup patches for 3.10
Hi Greg, Here's three cleanup patches for 3.10. Nothing big here, just some debugging output changes, a macro rename, and a math macro change that should have no behavioral effects. Tested on the Intel Panther Point xHCI host, with USB storage and mouse, with xHCI debugging turned on. I don't have the TI host that causes the debugging output changes to trigger. Sarah Sharp -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iQIcBAABAgAGBQJRYz84AAoJEBMGWMLi1Gc5K+8P/R7QyHd9N91wIG70Uo1B+3nJ aprCCLyQ4jYB3EtCsTsVPh4q3jat2NepbR0eMsMvMvsh4D96yPyilPBVu7y2HJ4P NUleEl2ldpEHr3RhoUlH2bJstOHTB94c0BgRq0LR3lUFKsJazf6kwZIeW1IkGxKC Ta5y+bREeFzrldE5BckEC+758JSFMjYqpZhHlPC7py+bmqgSUozq0SgRTJCO1Lf8 XQ63d2n8LlBOnoX20+1m37ABP62VsuSRVaAT2OuBQXWBCH5NMcKlHh9Y2sSqQfzC Ln1p0Bj43088GcriSMx5DMNdkqCxlLzW4BBk9V7C/3HqUa2XCgVwhTB+vHAseehB BjSE7ZQbpOLjnoOv30MhBBDZcJnu7M2/i+oLzp7ygsPgPfFcWK2yVUHizUL9uLaJ kN/eNK6H23OtLhdI6MZ5Cf71XTbQfxquLLla7FpbA/oO1oI6kxeXKD4sMCCVDS0r 3PB7ppC4uwQOKo7c5sf+1DMdqJS4M7PULuuGhtw83xodFxrsxRsZ9tLpc9s46aVh MItM5hUvBiS/y/zMmWAaIMEttpKMUeUkQsLwlwV0WG1MeEz0CqsxVLOp88rI6PM2 OO30cLQhAuc9nt5wuDHdZsPiCjet9CWh6//+actlCet1FWKnHhlf/hg0v1/i4YAa mD7f8eXuf2ATZ3P1H2Gu =rI06 -----END PGP SIGNATURE----- Merge tag 'for-usb-next-2012-04-08' of git://git.kernel.org/pub/scm/linux/kernel/git/sarah/xhci into usb-next Sarah writes: xHCI misc cleanup patches for 3.10 Hi Greg, Here's three cleanup patches for 3.10. Nothing big here, just some debugging output changes, a macro rename, and a math macro change that should have no behavioral effects. Tested on the Intel Panther Point xHCI host, with USB storage and mouse, with xHCI debugging turned on. I don't have the TI host that causes the debugging output changes to trigger. Sarah Sharp
This commit is contained in:
commit
e5ab9f1863
3 changed files with 19 additions and 15 deletions
|
@ -51,7 +51,7 @@ static struct xhci_segment *xhci_segment_alloc(struct xhci_hcd *xhci,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(seg->trbs, 0, SEGMENT_SIZE);
|
memset(seg->trbs, 0, TRB_SEGMENT_SIZE);
|
||||||
/* If the cycle state is 0, set the cycle bit to 1 for all the TRBs */
|
/* If the cycle state is 0, set the cycle bit to 1 for all the TRBs */
|
||||||
if (cycle_state == 0) {
|
if (cycle_state == 0) {
|
||||||
for (i = 0; i < TRBS_PER_SEGMENT; i++)
|
for (i = 0; i < TRBS_PER_SEGMENT; i++)
|
||||||
|
@ -467,7 +467,7 @@ struct xhci_ring *xhci_dma_to_transfer_ring(
|
||||||
{
|
{
|
||||||
if (ep->ep_state & EP_HAS_STREAMS)
|
if (ep->ep_state & EP_HAS_STREAMS)
|
||||||
return radix_tree_lookup(&ep->stream_info->trb_address_map,
|
return radix_tree_lookup(&ep->stream_info->trb_address_map,
|
||||||
address >> SEGMENT_SHIFT);
|
address >> TRB_SEGMENT_SHIFT);
|
||||||
return ep->ring;
|
return ep->ring;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -478,7 +478,7 @@ static struct xhci_ring *dma_to_stream_ring(
|
||||||
u64 address)
|
u64 address)
|
||||||
{
|
{
|
||||||
return radix_tree_lookup(&stream_info->trb_address_map,
|
return radix_tree_lookup(&stream_info->trb_address_map,
|
||||||
address >> SEGMENT_SHIFT);
|
address >> TRB_SEGMENT_SHIFT);
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_USB_XHCI_HCD_DEBUGGING */
|
#endif /* CONFIG_USB_XHCI_HCD_DEBUGGING */
|
||||||
|
|
||||||
|
@ -514,7 +514,7 @@ static int xhci_test_radix_tree(struct xhci_hcd *xhci,
|
||||||
|
|
||||||
cur_ring = stream_info->stream_rings[cur_stream];
|
cur_ring = stream_info->stream_rings[cur_stream];
|
||||||
for (addr = cur_ring->first_seg->dma;
|
for (addr = cur_ring->first_seg->dma;
|
||||||
addr < cur_ring->first_seg->dma + SEGMENT_SIZE;
|
addr < cur_ring->first_seg->dma + TRB_SEGMENT_SIZE;
|
||||||
addr += trb_size) {
|
addr += trb_size) {
|
||||||
mapped_ring = dma_to_stream_ring(stream_info, addr);
|
mapped_ring = dma_to_stream_ring(stream_info, addr);
|
||||||
if (cur_ring != mapped_ring) {
|
if (cur_ring != mapped_ring) {
|
||||||
|
@ -662,7 +662,7 @@ struct xhci_stream_info *xhci_alloc_stream_info(struct xhci_hcd *xhci,
|
||||||
cur_stream, (unsigned long long) addr);
|
cur_stream, (unsigned long long) addr);
|
||||||
|
|
||||||
key = (unsigned long)
|
key = (unsigned long)
|
||||||
(cur_ring->first_seg->dma >> SEGMENT_SHIFT);
|
(cur_ring->first_seg->dma >> TRB_SEGMENT_SHIFT);
|
||||||
ret = radix_tree_insert(&stream_info->trb_address_map,
|
ret = radix_tree_insert(&stream_info->trb_address_map,
|
||||||
key, cur_ring);
|
key, cur_ring);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
|
@ -693,7 +693,7 @@ cleanup_rings:
|
||||||
if (cur_ring) {
|
if (cur_ring) {
|
||||||
addr = cur_ring->first_seg->dma;
|
addr = cur_ring->first_seg->dma;
|
||||||
radix_tree_delete(&stream_info->trb_address_map,
|
radix_tree_delete(&stream_info->trb_address_map,
|
||||||
addr >> SEGMENT_SHIFT);
|
addr >> TRB_SEGMENT_SHIFT);
|
||||||
xhci_ring_free(xhci, cur_ring);
|
xhci_ring_free(xhci, cur_ring);
|
||||||
stream_info->stream_rings[cur_stream] = NULL;
|
stream_info->stream_rings[cur_stream] = NULL;
|
||||||
}
|
}
|
||||||
|
@ -764,7 +764,7 @@ void xhci_free_stream_info(struct xhci_hcd *xhci,
|
||||||
if (cur_ring) {
|
if (cur_ring) {
|
||||||
addr = cur_ring->first_seg->dma;
|
addr = cur_ring->first_seg->dma;
|
||||||
radix_tree_delete(&stream_info->trb_address_map,
|
radix_tree_delete(&stream_info->trb_address_map,
|
||||||
addr >> SEGMENT_SHIFT);
|
addr >> TRB_SEGMENT_SHIFT);
|
||||||
xhci_ring_free(xhci, cur_ring);
|
xhci_ring_free(xhci, cur_ring);
|
||||||
stream_info->stream_rings[cur_stream] = NULL;
|
stream_info->stream_rings[cur_stream] = NULL;
|
||||||
}
|
}
|
||||||
|
@ -2305,7 +2305,7 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
|
||||||
* so we pick the greater alignment need.
|
* so we pick the greater alignment need.
|
||||||
*/
|
*/
|
||||||
xhci->segment_pool = dma_pool_create("xHCI ring segments", dev,
|
xhci->segment_pool = dma_pool_create("xHCI ring segments", dev,
|
||||||
SEGMENT_SIZE, 64, xhci->page_size);
|
TRB_SEGMENT_SIZE, 64, xhci->page_size);
|
||||||
|
|
||||||
/* See Table 46 and Note on Figure 55 */
|
/* See Table 46 and Note on Figure 55 */
|
||||||
xhci->device_pool = dma_pool_create("xHCI input/output contexts", dev,
|
xhci->device_pool = dma_pool_create("xHCI input/output contexts", dev,
|
||||||
|
|
|
@ -417,9 +417,9 @@ static void compliance_mode_recovery(unsigned long arg)
|
||||||
* Compliance Mode Detected. Letting USB Core
|
* Compliance Mode Detected. Letting USB Core
|
||||||
* handle the Warm Reset
|
* handle the Warm Reset
|
||||||
*/
|
*/
|
||||||
xhci_dbg(xhci, "Compliance Mode Detected->Port %d!\n",
|
xhci_dbg(xhci, "Compliance mode detected->port %d\n",
|
||||||
i + 1);
|
i + 1);
|
||||||
xhci_dbg(xhci, "Attempting Recovery routine!\n");
|
xhci_dbg(xhci, "Attempting compliance mode recovery\n");
|
||||||
hcd = xhci->shared_hcd;
|
hcd = xhci->shared_hcd;
|
||||||
|
|
||||||
if (hcd->state == HC_STATE_SUSPENDED)
|
if (hcd->state == HC_STATE_SUSPENDED)
|
||||||
|
@ -457,7 +457,7 @@ static void compliance_mode_recovery_timer_init(struct xhci_hcd *xhci)
|
||||||
set_timer_slack(&xhci->comp_mode_recovery_timer,
|
set_timer_slack(&xhci->comp_mode_recovery_timer,
|
||||||
msecs_to_jiffies(COMP_MODE_RCVRY_MSECS));
|
msecs_to_jiffies(COMP_MODE_RCVRY_MSECS));
|
||||||
add_timer(&xhci->comp_mode_recovery_timer);
|
add_timer(&xhci->comp_mode_recovery_timer);
|
||||||
xhci_dbg(xhci, "Compliance Mode Recovery Timer Initialized.\n");
|
xhci_dbg(xhci, "Compliance mode recovery timer initialized\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -733,8 +733,11 @@ void xhci_stop(struct usb_hcd *hcd)
|
||||||
|
|
||||||
/* Deleting Compliance Mode Recovery Timer */
|
/* Deleting Compliance Mode Recovery Timer */
|
||||||
if ((xhci->quirks & XHCI_COMP_MODE_QUIRK) &&
|
if ((xhci->quirks & XHCI_COMP_MODE_QUIRK) &&
|
||||||
(!(xhci_all_ports_seen_u0(xhci))))
|
(!(xhci_all_ports_seen_u0(xhci)))) {
|
||||||
del_timer_sync(&xhci->comp_mode_recovery_timer);
|
del_timer_sync(&xhci->comp_mode_recovery_timer);
|
||||||
|
xhci_dbg(xhci, "%s: compliance mode recovery timer deleted\n",
|
||||||
|
__func__);
|
||||||
|
}
|
||||||
|
|
||||||
if (xhci->quirks & XHCI_AMD_PLL_FIX)
|
if (xhci->quirks & XHCI_AMD_PLL_FIX)
|
||||||
usb_amd_dev_put();
|
usb_amd_dev_put();
|
||||||
|
@ -930,7 +933,8 @@ int xhci_suspend(struct xhci_hcd *xhci)
|
||||||
if ((xhci->quirks & XHCI_COMP_MODE_QUIRK) &&
|
if ((xhci->quirks & XHCI_COMP_MODE_QUIRK) &&
|
||||||
(!(xhci_all_ports_seen_u0(xhci)))) {
|
(!(xhci_all_ports_seen_u0(xhci)))) {
|
||||||
del_timer_sync(&xhci->comp_mode_recovery_timer);
|
del_timer_sync(&xhci->comp_mode_recovery_timer);
|
||||||
xhci_dbg(xhci, "Compliance Mode Recovery Timer Deleted!\n");
|
xhci_dbg(xhci, "%s: compliance mode recovery timer deleted\n",
|
||||||
|
__func__);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* step 5: remove core well power */
|
/* step 5: remove core well power */
|
||||||
|
|
|
@ -1238,8 +1238,8 @@ union xhci_trb {
|
||||||
#define TRBS_PER_SEGMENT 64
|
#define TRBS_PER_SEGMENT 64
|
||||||
/* Allow two commands + a link TRB, along with any reserved command TRBs */
|
/* Allow two commands + a link TRB, along with any reserved command TRBs */
|
||||||
#define MAX_RSVD_CMD_TRBS (TRBS_PER_SEGMENT - 3)
|
#define MAX_RSVD_CMD_TRBS (TRBS_PER_SEGMENT - 3)
|
||||||
#define SEGMENT_SIZE (TRBS_PER_SEGMENT*16)
|
#define TRB_SEGMENT_SIZE (TRBS_PER_SEGMENT*16)
|
||||||
#define SEGMENT_SHIFT (__ffs(SEGMENT_SIZE))
|
#define TRB_SEGMENT_SHIFT (ilog2(TRB_SEGMENT_SIZE))
|
||||||
/* TRB buffer pointers can't cross 64KB boundaries */
|
/* TRB buffer pointers can't cross 64KB boundaries */
|
||||||
#define TRB_MAX_BUFF_SHIFT 16
|
#define TRB_MAX_BUFF_SHIFT 16
|
||||||
#define TRB_MAX_BUFF_SIZE (1 << TRB_MAX_BUFF_SHIFT)
|
#define TRB_MAX_BUFF_SIZE (1 << TRB_MAX_BUFF_SHIFT)
|
||||||
|
|
Loading…
Add table
Reference in a new issue