usb: host: xhci: use __ffs() instead of hardcoding shift
authorFelipe Balbi <balbi@ti.com>
Fri, 27 Jan 2012 14:19:15 +0000 (16:19 +0200)
committerSarah Sharp <sarah.a.sharp@linux.intel.com>
Mon, 12 Mar 2012 16:31:24 +0000 (09:31 -0700)
__ffs() can tell us which is the SEGMENT_SHIFT value
to be used. This will prevent problems when users are
too fast and don't pay attention to the need of fixing
the Shift after changing TRBS_PER_SEGMENT.

Signed-off-by: Felipe Balbi <balbi@ti.com>
Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
drivers/usb/host/xhci.h

index 0f49369..9a7138c 100644 (file)
@@ -1223,10 +1223,7 @@ union xhci_trb {
 /* Allow two commands + a link TRB, along with any reserved command TRBs */
 #define MAX_RSVD_CMD_TRBS      (TRBS_PER_SEGMENT - 3)
 #define SEGMENT_SIZE           (TRBS_PER_SEGMENT*16)
-/* SEGMENT_SHIFT should be log2(SEGMENT_SIZE).
- * Change this if you change TRBS_PER_SEGMENT!
- */
-#define SEGMENT_SHIFT          10
+#define SEGMENT_SHIFT          (__ffs(SEGMENT_SIZE))
 /* TRB buffer pointers can't cross 64KB boundaries */
 #define TRB_MAX_BUFF_SHIFT             16
 #define TRB_MAX_BUFF_SIZE      (1 << TRB_MAX_BUFF_SHIFT)