The first 16 bits of Page Size Register report the page size supported by xHC.
If bit i is set, then xHC supports a page size of 2^(i+12).
This patch replaces the code that does the lookup for the first set bit with
a call to ffs() because using ffs() the code can benefit from architecture
specific instructions that implement this computation more efficiently.

Signed-off-by: Xenia Ragiadakou <burzalod...@gmail.com>
---
 drivers/usb/host/xhci-mem.c | 9 +++------
 1 file changed, 3 insertions(+), 6 deletions(-)

diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
index 37ae98f..e1c4b79 100644
--- a/drivers/usb/host/xhci-mem.c
+++ b/drivers/usb/host/xhci-mem.c
@@ -25,6 +25,7 @@
 #include <linux/slab.h>
 #include <linux/dmapool.h>
 #include <linux/dma-mapping.h>
+#include <linux/bitops.h>
 
 #include "xhci.h"
 #include "xhci-trace.h"
@@ -2237,12 +2238,8 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
        page_size = xhci_readl(xhci, &xhci->op_regs->page_size);
        xhci_dbg_trace(xhci, trace_xhci_dbg_init,
                        "Supported page size register = 0x%x", page_size);
-       for (i = 0; i < 16; i++) {
-               if ((0x1 & page_size) != 0)
-                       break;
-               page_size = page_size >> 1;
-       }
-       if (i < 16)
+       i = ffs(page_size & 0xffff) - 1;
+       if (i > -1)
                xhci_dbg_trace(xhci, trace_xhci_dbg_init,
                        "Supported page size of %iK", (1 << (i+12)) / 1024);
        else
-- 
1.8.3.4

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to