|
@@ -514,74 +514,6 @@ static int isp1760_hc_setup(struct usb_hcd *hcd)
|
|
|
return priv_init(hcd);
|
|
|
}
|
|
|
|
|
|
-static int isp1760_run(struct usb_hcd *hcd)
|
|
|
-{
|
|
|
- int retval;
|
|
|
- u32 temp;
|
|
|
- u32 command;
|
|
|
- u32 chipid;
|
|
|
-
|
|
|
- hcd->uses_new_polling = 1;
|
|
|
-
|
|
|
- hcd->state = HC_STATE_RUNNING;
|
|
|
-
|
|
|
- /* Set PTD interrupt AND & OR maps */
|
|
|
- reg_write32(hcd->regs, HC_ATL_IRQ_MASK_AND_REG, 0);
|
|
|
- reg_write32(hcd->regs, HC_ATL_IRQ_MASK_OR_REG, 0xffffffff);
|
|
|
- reg_write32(hcd->regs, HC_INT_IRQ_MASK_AND_REG, 0);
|
|
|
- reg_write32(hcd->regs, HC_INT_IRQ_MASK_OR_REG, 0xffffffff);
|
|
|
- reg_write32(hcd->regs, HC_ISO_IRQ_MASK_AND_REG, 0);
|
|
|
- reg_write32(hcd->regs, HC_ISO_IRQ_MASK_OR_REG, 0xffffffff);
|
|
|
- /* step 23 passed */
|
|
|
-
|
|
|
- temp = reg_read32(hcd->regs, HC_HW_MODE_CTRL);
|
|
|
- reg_write32(hcd->regs, HC_HW_MODE_CTRL, temp | HW_GLOBAL_INTR_EN);
|
|
|
-
|
|
|
- command = reg_read32(hcd->regs, HC_USBCMD);
|
|
|
- command &= ~(CMD_LRESET|CMD_RESET);
|
|
|
- command |= CMD_RUN;
|
|
|
- reg_write32(hcd->regs, HC_USBCMD, command);
|
|
|
-
|
|
|
- retval = handshake(hcd, HC_USBCMD, CMD_RUN, CMD_RUN, 250 * 1000);
|
|
|
- if (retval)
|
|
|
- return retval;
|
|
|
-
|
|
|
- /*
|
|
|
- * XXX
|
|
|
- * Spec says to write FLAG_CF as last config action, priv code grabs
|
|
|
- * the semaphore while doing so.
|
|
|
- */
|
|
|
- down_write(&ehci_cf_port_reset_rwsem);
|
|
|
- reg_write32(hcd->regs, HC_CONFIGFLAG, FLAG_CF);
|
|
|
-
|
|
|
- retval = handshake(hcd, HC_CONFIGFLAG, FLAG_CF, FLAG_CF, 250 * 1000);
|
|
|
- up_write(&ehci_cf_port_reset_rwsem);
|
|
|
- if (retval)
|
|
|
- return retval;
|
|
|
-
|
|
|
- chipid = reg_read32(hcd->regs, HC_CHIP_ID_REG);
|
|
|
- dev_info(hcd->self.controller, "USB ISP %04x HW rev. %d started\n",
|
|
|
- chipid & 0xffff, chipid >> 16);
|
|
|
-
|
|
|
- /* PTD Register Init Part 2, Step 28 */
|
|
|
-
|
|
|
- /* Setup registers controlling PTD checking */
|
|
|
- reg_write32(hcd->regs, HC_ATL_PTD_LASTPTD_REG, 0x80000000);
|
|
|
- reg_write32(hcd->regs, HC_INT_PTD_LASTPTD_REG, 0x80000000);
|
|
|
- reg_write32(hcd->regs, HC_ISO_PTD_LASTPTD_REG, 0x00000001);
|
|
|
- reg_write32(hcd->regs, HC_ATL_PTD_SKIPMAP_REG, 0xffffffff);
|
|
|
- reg_write32(hcd->regs, HC_INT_PTD_SKIPMAP_REG, 0xffffffff);
|
|
|
- reg_write32(hcd->regs, HC_ISO_PTD_SKIPMAP_REG, 0xffffffff);
|
|
|
- reg_write32(hcd->regs, HC_BUFFER_STATUS_REG,
|
|
|
- ATL_BUF_FILL | INT_BUF_FILL);
|
|
|
-
|
|
|
- /* GRR this is run-once init(), being done every time the HC starts.
|
|
|
- * So long as they're part of class devices, we can't do it init()
|
|
|
- * since the class device isn't created that early.
|
|
|
- */
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
static u32 base_to_chip(u32 base)
|
|
|
{
|
|
|
return ((base - 0x400) >> 3);
|
|
@@ -1326,6 +1258,74 @@ leave:
|
|
|
return irqret;
|
|
|
}
|
|
|
|
|
|
+static int isp1760_run(struct usb_hcd *hcd)
|
|
|
+{
|
|
|
+ int retval;
|
|
|
+ u32 temp;
|
|
|
+ u32 command;
|
|
|
+ u32 chipid;
|
|
|
+
|
|
|
+ hcd->uses_new_polling = 1;
|
|
|
+
|
|
|
+ hcd->state = HC_STATE_RUNNING;
|
|
|
+
|
|
|
+ /* Set PTD interrupt AND & OR maps */
|
|
|
+ reg_write32(hcd->regs, HC_ATL_IRQ_MASK_AND_REG, 0);
|
|
|
+ reg_write32(hcd->regs, HC_ATL_IRQ_MASK_OR_REG, 0xffffffff);
|
|
|
+ reg_write32(hcd->regs, HC_INT_IRQ_MASK_AND_REG, 0);
|
|
|
+ reg_write32(hcd->regs, HC_INT_IRQ_MASK_OR_REG, 0xffffffff);
|
|
|
+ reg_write32(hcd->regs, HC_ISO_IRQ_MASK_AND_REG, 0);
|
|
|
+ reg_write32(hcd->regs, HC_ISO_IRQ_MASK_OR_REG, 0xffffffff);
|
|
|
+ /* step 23 passed */
|
|
|
+
|
|
|
+ temp = reg_read32(hcd->regs, HC_HW_MODE_CTRL);
|
|
|
+ reg_write32(hcd->regs, HC_HW_MODE_CTRL, temp | HW_GLOBAL_INTR_EN);
|
|
|
+
|
|
|
+ command = reg_read32(hcd->regs, HC_USBCMD);
|
|
|
+ command &= ~(CMD_LRESET|CMD_RESET);
|
|
|
+ command |= CMD_RUN;
|
|
|
+ reg_write32(hcd->regs, HC_USBCMD, command);
|
|
|
+
|
|
|
+ retval = handshake(hcd, HC_USBCMD, CMD_RUN, CMD_RUN, 250 * 1000);
|
|
|
+ if (retval)
|
|
|
+ return retval;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * XXX
|
|
|
+ * Spec says to write FLAG_CF as last config action, priv code grabs
|
|
|
+ * the semaphore while doing so.
|
|
|
+ */
|
|
|
+ down_write(&ehci_cf_port_reset_rwsem);
|
|
|
+ reg_write32(hcd->regs, HC_CONFIGFLAG, FLAG_CF);
|
|
|
+
|
|
|
+ retval = handshake(hcd, HC_CONFIGFLAG, FLAG_CF, FLAG_CF, 250 * 1000);
|
|
|
+ up_write(&ehci_cf_port_reset_rwsem);
|
|
|
+ if (retval)
|
|
|
+ return retval;
|
|
|
+
|
|
|
+ chipid = reg_read32(hcd->regs, HC_CHIP_ID_REG);
|
|
|
+ dev_info(hcd->self.controller, "USB ISP %04x HW rev. %d started\n",
|
|
|
+ chipid & 0xffff, chipid >> 16);
|
|
|
+
|
|
|
+ /* PTD Register Init Part 2, Step 28 */
|
|
|
+
|
|
|
+ /* Setup registers controlling PTD checking */
|
|
|
+ reg_write32(hcd->regs, HC_ATL_PTD_LASTPTD_REG, 0x80000000);
|
|
|
+ reg_write32(hcd->regs, HC_INT_PTD_LASTPTD_REG, 0x80000000);
|
|
|
+ reg_write32(hcd->regs, HC_ISO_PTD_LASTPTD_REG, 0x00000001);
|
|
|
+ reg_write32(hcd->regs, HC_ATL_PTD_SKIPMAP_REG, 0xffffffff);
|
|
|
+ reg_write32(hcd->regs, HC_INT_PTD_SKIPMAP_REG, 0xffffffff);
|
|
|
+ reg_write32(hcd->regs, HC_ISO_PTD_SKIPMAP_REG, 0xffffffff);
|
|
|
+ reg_write32(hcd->regs, HC_BUFFER_STATUS_REG,
|
|
|
+ ATL_BUF_FILL | INT_BUF_FILL);
|
|
|
+
|
|
|
+ /* GRR this is run-once init(), being done every time the HC starts.
|
|
|
+ * So long as they're part of class devices, we can't do it init()
|
|
|
+ * since the class device isn't created that early.
|
|
|
+ */
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
static int qtd_fill(struct isp1760_qtd *qtd, void *databuffer, size_t len)
|
|
|
{
|
|
|
qtd->data_buffer = databuffer;
|