0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067 #include <linux/module.h>
0068 #include <linux/kernel.h>
0069 #include <linux/sched.h>
0070 #include <linux/slab.h>
0071 #include <linux/list.h>
0072 #include <linux/kobject.h>
0073 #include <linux/prefetch.h>
0074 #include <linux/platform_device.h>
0075 #include <linux/io.h>
0076 #include <linux/iopoll.h>
0077 #include <linux/dma-mapping.h>
0078 #include <linux/usb.h>
0079 #include <linux/usb/of.h>
0080
0081 #include "musb_core.h"
0082 #include "musb_trace.h"
0083
0084 #define TA_WAIT_BCON(m) max_t(int, (m)->a_wait_bcon, OTG_TIME_A_WAIT_BCON)
0085
0086
0087 #define DRIVER_AUTHOR "Mentor Graphics, Texas Instruments, Nokia"
0088 #define DRIVER_DESC "Inventra Dual-Role USB Controller Driver"
0089
0090 #define MUSB_VERSION "6.0"
0091
0092 #define DRIVER_INFO DRIVER_DESC ", v" MUSB_VERSION
0093
0094 #define MUSB_DRIVER_NAME "musb-hdrc"
0095 const char musb_driver_name[] = MUSB_DRIVER_NAME;
0096
0097 MODULE_DESCRIPTION(DRIVER_INFO);
0098 MODULE_AUTHOR(DRIVER_AUTHOR);
0099 MODULE_LICENSE("GPL");
0100 MODULE_ALIAS("platform:" MUSB_DRIVER_NAME);
0101
0102
0103
0104
0105 static inline struct musb *dev_to_musb(struct device *dev)
0106 {
0107 return dev_get_drvdata(dev);
0108 }
0109
0110 enum musb_mode musb_get_mode(struct device *dev)
0111 {
0112 enum usb_dr_mode mode;
0113
0114 mode = usb_get_dr_mode(dev);
0115 switch (mode) {
0116 case USB_DR_MODE_HOST:
0117 return MUSB_HOST;
0118 case USB_DR_MODE_PERIPHERAL:
0119 return MUSB_PERIPHERAL;
0120 case USB_DR_MODE_OTG:
0121 case USB_DR_MODE_UNKNOWN:
0122 default:
0123 return MUSB_OTG;
0124 }
0125 }
0126 EXPORT_SYMBOL_GPL(musb_get_mode);
0127
0128
0129
0130 static int musb_ulpi_read(struct usb_phy *phy, u32 reg)
0131 {
0132 void __iomem *addr = phy->io_priv;
0133 int i = 0;
0134 u8 r;
0135 u8 power;
0136 int ret;
0137
0138 pm_runtime_get_sync(phy->io_dev);
0139
0140
0141 power = musb_readb(addr, MUSB_POWER);
0142 power &= ~MUSB_POWER_SUSPENDM;
0143 musb_writeb(addr, MUSB_POWER, power);
0144
0145
0146
0147
0148
0149 musb_writeb(addr, MUSB_ULPI_REG_ADDR, (u8)reg);
0150 musb_writeb(addr, MUSB_ULPI_REG_CONTROL,
0151 MUSB_ULPI_REG_REQ | MUSB_ULPI_RDN_WR);
0152
0153 while (!(musb_readb(addr, MUSB_ULPI_REG_CONTROL)
0154 & MUSB_ULPI_REG_CMPLT)) {
0155 i++;
0156 if (i == 10000) {
0157 ret = -ETIMEDOUT;
0158 goto out;
0159 }
0160
0161 }
0162 r = musb_readb(addr, MUSB_ULPI_REG_CONTROL);
0163 r &= ~MUSB_ULPI_REG_CMPLT;
0164 musb_writeb(addr, MUSB_ULPI_REG_CONTROL, r);
0165
0166 ret = musb_readb(addr, MUSB_ULPI_REG_DATA);
0167
0168 out:
0169 pm_runtime_put(phy->io_dev);
0170
0171 return ret;
0172 }
0173
0174 static int musb_ulpi_write(struct usb_phy *phy, u32 val, u32 reg)
0175 {
0176 void __iomem *addr = phy->io_priv;
0177 int i = 0;
0178 u8 r = 0;
0179 u8 power;
0180 int ret = 0;
0181
0182 pm_runtime_get_sync(phy->io_dev);
0183
0184
0185 power = musb_readb(addr, MUSB_POWER);
0186 power &= ~MUSB_POWER_SUSPENDM;
0187 musb_writeb(addr, MUSB_POWER, power);
0188
0189 musb_writeb(addr, MUSB_ULPI_REG_ADDR, (u8)reg);
0190 musb_writeb(addr, MUSB_ULPI_REG_DATA, (u8)val);
0191 musb_writeb(addr, MUSB_ULPI_REG_CONTROL, MUSB_ULPI_REG_REQ);
0192
0193 while (!(musb_readb(addr, MUSB_ULPI_REG_CONTROL)
0194 & MUSB_ULPI_REG_CMPLT)) {
0195 i++;
0196 if (i == 10000) {
0197 ret = -ETIMEDOUT;
0198 goto out;
0199 }
0200 }
0201
0202 r = musb_readb(addr, MUSB_ULPI_REG_CONTROL);
0203 r &= ~MUSB_ULPI_REG_CMPLT;
0204 musb_writeb(addr, MUSB_ULPI_REG_CONTROL, r);
0205
0206 out:
0207 pm_runtime_put(phy->io_dev);
0208
0209 return ret;
0210 }
0211
0212 static struct usb_phy_io_ops musb_ulpi_access = {
0213 .read = musb_ulpi_read,
0214 .write = musb_ulpi_write,
0215 };
0216
0217
0218
0219 static u32 musb_default_fifo_offset(u8 epnum)
0220 {
0221 return 0x20 + (epnum * 4);
0222 }
0223
0224
0225 static void musb_flat_ep_select(void __iomem *mbase, u8 epnum)
0226 {
0227 }
0228
0229 static u32 musb_flat_ep_offset(u8 epnum, u16 offset)
0230 {
0231 return 0x100 + (0x10 * epnum) + offset;
0232 }
0233
0234
0235 static void musb_indexed_ep_select(void __iomem *mbase, u8 epnum)
0236 {
0237 musb_writeb(mbase, MUSB_INDEX, epnum);
0238 }
0239
0240 static u32 musb_indexed_ep_offset(u8 epnum, u16 offset)
0241 {
0242 return 0x10 + offset;
0243 }
0244
0245 static u32 musb_default_busctl_offset(u8 epnum, u16 offset)
0246 {
0247 return 0x80 + (0x08 * epnum) + offset;
0248 }
0249
0250 static u8 musb_default_readb(void __iomem *addr, u32 offset)
0251 {
0252 u8 data = __raw_readb(addr + offset);
0253
0254 trace_musb_readb(__builtin_return_address(0), addr, offset, data);
0255 return data;
0256 }
0257
0258 static void musb_default_writeb(void __iomem *addr, u32 offset, u8 data)
0259 {
0260 trace_musb_writeb(__builtin_return_address(0), addr, offset, data);
0261 __raw_writeb(data, addr + offset);
0262 }
0263
0264 static u16 musb_default_readw(void __iomem *addr, u32 offset)
0265 {
0266 u16 data = __raw_readw(addr + offset);
0267
0268 trace_musb_readw(__builtin_return_address(0), addr, offset, data);
0269 return data;
0270 }
0271
0272 static void musb_default_writew(void __iomem *addr, u32 offset, u16 data)
0273 {
0274 trace_musb_writew(__builtin_return_address(0), addr, offset, data);
0275 __raw_writew(data, addr + offset);
0276 }
0277
0278 static u16 musb_default_get_toggle(struct musb_qh *qh, int is_out)
0279 {
0280 void __iomem *epio = qh->hw_ep->regs;
0281 u16 csr;
0282
0283 if (is_out)
0284 csr = musb_readw(epio, MUSB_TXCSR) & MUSB_TXCSR_H_DATATOGGLE;
0285 else
0286 csr = musb_readw(epio, MUSB_RXCSR) & MUSB_RXCSR_H_DATATOGGLE;
0287
0288 return csr;
0289 }
0290
0291 static u16 musb_default_set_toggle(struct musb_qh *qh, int is_out,
0292 struct urb *urb)
0293 {
0294 u16 csr;
0295 u16 toggle;
0296
0297 toggle = usb_gettoggle(urb->dev, qh->epnum, is_out);
0298
0299 if (is_out)
0300 csr = toggle ? (MUSB_TXCSR_H_WR_DATATOGGLE
0301 | MUSB_TXCSR_H_DATATOGGLE)
0302 : MUSB_TXCSR_CLRDATATOG;
0303 else
0304 csr = toggle ? (MUSB_RXCSR_H_WR_DATATOGGLE
0305 | MUSB_RXCSR_H_DATATOGGLE) : 0;
0306
0307 return csr;
0308 }
0309
0310
0311
0312
0313 static void musb_default_write_fifo(struct musb_hw_ep *hw_ep, u16 len,
0314 const u8 *src)
0315 {
0316 struct musb *musb = hw_ep->musb;
0317 void __iomem *fifo = hw_ep->fifo;
0318
0319 if (unlikely(len == 0))
0320 return;
0321
0322 prefetch((u8 *)src);
0323
0324 dev_dbg(musb->controller, "%cX ep%d fifo %p count %d buf %p\n",
0325 'T', hw_ep->epnum, fifo, len, src);
0326
0327
0328 if (likely((0x01 & (unsigned long) src) == 0)) {
0329 u16 index = 0;
0330
0331
0332 if ((0x02 & (unsigned long) src) == 0) {
0333 if (len >= 4) {
0334 iowrite32_rep(fifo, src + index, len >> 2);
0335 index += len & ~0x03;
0336 }
0337 if (len & 0x02) {
0338 __raw_writew(*(u16 *)&src[index], fifo);
0339 index += 2;
0340 }
0341 } else {
0342 if (len >= 2) {
0343 iowrite16_rep(fifo, src + index, len >> 1);
0344 index += len & ~0x01;
0345 }
0346 }
0347 if (len & 0x01)
0348 __raw_writeb(src[index], fifo);
0349 } else {
0350
0351 iowrite8_rep(fifo, src, len);
0352 }
0353 }
0354
0355
0356
0357
0358 static void musb_default_read_fifo(struct musb_hw_ep *hw_ep, u16 len, u8 *dst)
0359 {
0360 struct musb *musb = hw_ep->musb;
0361 void __iomem *fifo = hw_ep->fifo;
0362
0363 if (unlikely(len == 0))
0364 return;
0365
0366 dev_dbg(musb->controller, "%cX ep%d fifo %p count %d buf %p\n",
0367 'R', hw_ep->epnum, fifo, len, dst);
0368
0369
0370 if (likely((0x01 & (unsigned long) dst) == 0)) {
0371 u16 index = 0;
0372
0373
0374 if ((0x02 & (unsigned long) dst) == 0) {
0375 if (len >= 4) {
0376 ioread32_rep(fifo, dst, len >> 2);
0377 index = len & ~0x03;
0378 }
0379 if (len & 0x02) {
0380 *(u16 *)&dst[index] = __raw_readw(fifo);
0381 index += 2;
0382 }
0383 } else {
0384 if (len >= 2) {
0385 ioread16_rep(fifo, dst, len >> 1);
0386 index = len & ~0x01;
0387 }
0388 }
0389 if (len & 0x01)
0390 dst[index] = __raw_readb(fifo);
0391 } else {
0392
0393 ioread8_rep(fifo, dst, len);
0394 }
0395 }
0396
0397
0398
0399
0400 u8 (*musb_readb)(void __iomem *addr, u32 offset);
0401 EXPORT_SYMBOL_GPL(musb_readb);
0402
0403 void (*musb_writeb)(void __iomem *addr, u32 offset, u8 data);
0404 EXPORT_SYMBOL_GPL(musb_writeb);
0405
0406 u8 (*musb_clearb)(void __iomem *addr, u32 offset);
0407 EXPORT_SYMBOL_GPL(musb_clearb);
0408
0409 u16 (*musb_readw)(void __iomem *addr, u32 offset);
0410 EXPORT_SYMBOL_GPL(musb_readw);
0411
0412 void (*musb_writew)(void __iomem *addr, u32 offset, u16 data);
0413 EXPORT_SYMBOL_GPL(musb_writew);
0414
0415 u16 (*musb_clearw)(void __iomem *addr, u32 offset);
0416 EXPORT_SYMBOL_GPL(musb_clearw);
0417
0418 u32 musb_readl(void __iomem *addr, u32 offset)
0419 {
0420 u32 data = __raw_readl(addr + offset);
0421
0422 trace_musb_readl(__builtin_return_address(0), addr, offset, data);
0423 return data;
0424 }
0425 EXPORT_SYMBOL_GPL(musb_readl);
0426
0427 void musb_writel(void __iomem *addr, u32 offset, u32 data)
0428 {
0429 trace_musb_writel(__builtin_return_address(0), addr, offset, data);
0430 __raw_writel(data, addr + offset);
0431 }
0432 EXPORT_SYMBOL_GPL(musb_writel);
0433
0434 #ifndef CONFIG_MUSB_PIO_ONLY
0435 struct dma_controller *
0436 (*musb_dma_controller_create)(struct musb *musb, void __iomem *base);
0437 EXPORT_SYMBOL(musb_dma_controller_create);
0438
0439 void (*musb_dma_controller_destroy)(struct dma_controller *c);
0440 EXPORT_SYMBOL(musb_dma_controller_destroy);
0441 #endif
0442
0443
0444
0445
0446 void musb_read_fifo(struct musb_hw_ep *hw_ep, u16 len, u8 *dst)
0447 {
0448 return hw_ep->musb->io.read_fifo(hw_ep, len, dst);
0449 }
0450
0451 void musb_write_fifo(struct musb_hw_ep *hw_ep, u16 len, const u8 *src)
0452 {
0453 return hw_ep->musb->io.write_fifo(hw_ep, len, src);
0454 }
0455
0456 static u8 musb_read_devctl(struct musb *musb)
0457 {
0458 return musb_readb(musb->mregs, MUSB_DEVCTL);
0459 }
0460
0461
0462
0463
0464
0465
0466
0467
0468
0469
0470
0471
0472
0473 int musb_set_host(struct musb *musb)
0474 {
0475 int error = 0;
0476 u8 devctl;
0477
0478 if (!musb)
0479 return -EINVAL;
0480
0481 devctl = musb_read_devctl(musb);
0482 if (!(devctl & MUSB_DEVCTL_BDEVICE)) {
0483 trace_musb_state(musb, devctl, "Already in host mode");
0484 goto init_data;
0485 }
0486
0487 devctl |= MUSB_DEVCTL_SESSION;
0488 musb_writeb(musb->mregs, MUSB_DEVCTL, devctl);
0489
0490 error = readx_poll_timeout(musb_read_devctl, musb, devctl,
0491 !(devctl & MUSB_DEVCTL_BDEVICE), 5000,
0492 1000000);
0493 if (error) {
0494 dev_err(musb->controller, "%s: could not set host: %02x\n",
0495 __func__, devctl);
0496
0497 return error;
0498 }
0499
0500 devctl = musb_read_devctl(musb);
0501 trace_musb_state(musb, devctl, "Host mode set");
0502
0503 init_data:
0504 musb->is_active = 1;
0505 musb->xceiv->otg->state = OTG_STATE_A_IDLE;
0506 MUSB_HST_MODE(musb);
0507
0508 return error;
0509 }
0510 EXPORT_SYMBOL_GPL(musb_set_host);
0511
0512
0513
0514
0515
0516
0517
0518
0519
0520 int musb_set_peripheral(struct musb *musb)
0521 {
0522 int error = 0;
0523 u8 devctl;
0524
0525 if (!musb)
0526 return -EINVAL;
0527
0528 devctl = musb_read_devctl(musb);
0529 if (devctl & MUSB_DEVCTL_BDEVICE) {
0530 trace_musb_state(musb, devctl, "Already in peripheral mode");
0531 goto init_data;
0532 }
0533
0534 devctl &= ~MUSB_DEVCTL_SESSION;
0535 musb_writeb(musb->mregs, MUSB_DEVCTL, devctl);
0536
0537 error = readx_poll_timeout(musb_read_devctl, musb, devctl,
0538 devctl & MUSB_DEVCTL_BDEVICE, 5000,
0539 1000000);
0540 if (error) {
0541 dev_err(musb->controller, "%s: could not set peripheral: %02x\n",
0542 __func__, devctl);
0543
0544 return error;
0545 }
0546
0547 devctl = musb_read_devctl(musb);
0548 trace_musb_state(musb, devctl, "Peripheral mode set");
0549
0550 init_data:
0551 musb->is_active = 0;
0552 musb->xceiv->otg->state = OTG_STATE_B_IDLE;
0553 MUSB_DEV_MODE(musb);
0554
0555 return error;
0556 }
0557 EXPORT_SYMBOL_GPL(musb_set_peripheral);
0558
0559
0560
0561
0562 static const u8 musb_test_packet[53] = {
0563
0564
0565
0566 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0567
0568 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0569
0570 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
0571
0572 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0573
0574 0x7f, 0xbf, 0xdf, 0xef, 0xf7, 0xfb, 0xfd,
0575
0576 0xfc, 0x7e, 0xbf, 0xdf, 0xef, 0xf7, 0xfb, 0xfd, 0x7e
0577
0578
0579 };
0580
0581 void musb_load_testpacket(struct musb *musb)
0582 {
0583 void __iomem *regs = musb->endpoints[0].regs;
0584
0585 musb_ep_select(musb->mregs, 0);
0586 musb_write_fifo(musb->control_ep,
0587 sizeof(musb_test_packet), musb_test_packet);
0588 musb_writew(regs, MUSB_CSR0, MUSB_CSR0_TXPKTRDY);
0589 }
0590
0591
0592
0593
0594
0595
0596 static void musb_otg_timer_func(struct timer_list *t)
0597 {
0598 struct musb *musb = from_timer(musb, t, otg_timer);
0599 unsigned long flags;
0600
0601 spin_lock_irqsave(&musb->lock, flags);
0602 switch (musb->xceiv->otg->state) {
0603 case OTG_STATE_B_WAIT_ACON:
0604 musb_dbg(musb,
0605 "HNP: b_wait_acon timeout; back to b_peripheral");
0606 musb_g_disconnect(musb);
0607 musb->xceiv->otg->state = OTG_STATE_B_PERIPHERAL;
0608 musb->is_active = 0;
0609 break;
0610 case OTG_STATE_A_SUSPEND:
0611 case OTG_STATE_A_WAIT_BCON:
0612 musb_dbg(musb, "HNP: %s timeout",
0613 usb_otg_state_string(musb->xceiv->otg->state));
0614 musb_platform_set_vbus(musb, 0);
0615 musb->xceiv->otg->state = OTG_STATE_A_WAIT_VFALL;
0616 break;
0617 default:
0618 musb_dbg(musb, "HNP: Unhandled mode %s",
0619 usb_otg_state_string(musb->xceiv->otg->state));
0620 }
0621 spin_unlock_irqrestore(&musb->lock, flags);
0622 }
0623
0624
0625
0626
0627 void musb_hnp_stop(struct musb *musb)
0628 {
0629 struct usb_hcd *hcd = musb->hcd;
0630 void __iomem *mbase = musb->mregs;
0631 u8 reg;
0632
0633 musb_dbg(musb, "HNP: stop from %s",
0634 usb_otg_state_string(musb->xceiv->otg->state));
0635
0636 switch (musb->xceiv->otg->state) {
0637 case OTG_STATE_A_PERIPHERAL:
0638 musb_g_disconnect(musb);
0639 musb_dbg(musb, "HNP: back to %s",
0640 usb_otg_state_string(musb->xceiv->otg->state));
0641 break;
0642 case OTG_STATE_B_HOST:
0643 musb_dbg(musb, "HNP: Disabling HR");
0644 if (hcd)
0645 hcd->self.is_b_host = 0;
0646 musb->xceiv->otg->state = OTG_STATE_B_PERIPHERAL;
0647 MUSB_DEV_MODE(musb);
0648 reg = musb_readb(mbase, MUSB_POWER);
0649 reg |= MUSB_POWER_SUSPENDM;
0650 musb_writeb(mbase, MUSB_POWER, reg);
0651
0652 break;
0653 default:
0654 musb_dbg(musb, "HNP: Stopping in unknown state %s",
0655 usb_otg_state_string(musb->xceiv->otg->state));
0656 }
0657
0658
0659
0660
0661
0662
0663 musb->port1_status &= ~(USB_PORT_STAT_C_CONNECTION << 16);
0664 }
0665
0666 static void musb_recover_from_babble(struct musb *musb);
0667
0668 static void musb_handle_intr_resume(struct musb *musb, u8 devctl)
0669 {
0670 musb_dbg(musb, "RESUME (%s)",
0671 usb_otg_state_string(musb->xceiv->otg->state));
0672
0673 if (devctl & MUSB_DEVCTL_HM) {
0674 switch (musb->xceiv->otg->state) {
0675 case OTG_STATE_A_SUSPEND:
0676
0677 musb->port1_status |=
0678 (USB_PORT_STAT_C_SUSPEND << 16)
0679 | MUSB_PORT_STAT_RESUME;
0680 musb->rh_timer = jiffies
0681 + msecs_to_jiffies(USB_RESUME_TIMEOUT);
0682 musb->xceiv->otg->state = OTG_STATE_A_HOST;
0683 musb->is_active = 1;
0684 musb_host_resume_root_hub(musb);
0685 schedule_delayed_work(&musb->finish_resume_work,
0686 msecs_to_jiffies(USB_RESUME_TIMEOUT));
0687 break;
0688 case OTG_STATE_B_WAIT_ACON:
0689 musb->xceiv->otg->state = OTG_STATE_B_PERIPHERAL;
0690 musb->is_active = 1;
0691 MUSB_DEV_MODE(musb);
0692 break;
0693 default:
0694 WARNING("bogus %s RESUME (%s)\n",
0695 "host",
0696 usb_otg_state_string(musb->xceiv->otg->state));
0697 }
0698 } else {
0699 switch (musb->xceiv->otg->state) {
0700 case OTG_STATE_A_SUSPEND:
0701
0702 musb->xceiv->otg->state = OTG_STATE_A_HOST;
0703 musb_host_resume_root_hub(musb);
0704 break;
0705 case OTG_STATE_B_WAIT_ACON:
0706 case OTG_STATE_B_PERIPHERAL:
0707
0708
0709
0710 if ((devctl & MUSB_DEVCTL_VBUS)
0711 != (3 << MUSB_DEVCTL_VBUS_SHIFT)
0712 ) {
0713 musb->int_usb |= MUSB_INTR_DISCONNECT;
0714 musb->int_usb &= ~MUSB_INTR_SUSPEND;
0715 break;
0716 }
0717 musb_g_resume(musb);
0718 break;
0719 case OTG_STATE_B_IDLE:
0720 musb->int_usb &= ~MUSB_INTR_SUSPEND;
0721 break;
0722 default:
0723 WARNING("bogus %s RESUME (%s)\n",
0724 "peripheral",
0725 usb_otg_state_string(musb->xceiv->otg->state));
0726 }
0727 }
0728 }
0729
0730
0731 static irqreturn_t musb_handle_intr_sessreq(struct musb *musb, u8 devctl)
0732 {
0733 void __iomem *mbase = musb->mregs;
0734
0735 if ((devctl & MUSB_DEVCTL_VBUS) == MUSB_DEVCTL_VBUS
0736 && (devctl & MUSB_DEVCTL_BDEVICE)) {
0737 musb_dbg(musb, "SessReq while on B state");
0738 return IRQ_HANDLED;
0739 }
0740
0741 musb_dbg(musb, "SESSION_REQUEST (%s)",
0742 usb_otg_state_string(musb->xceiv->otg->state));
0743
0744
0745
0746
0747
0748
0749
0750
0751 musb_writeb(mbase, MUSB_DEVCTL, MUSB_DEVCTL_SESSION);
0752 musb->ep0_stage = MUSB_EP0_START;
0753 musb->xceiv->otg->state = OTG_STATE_A_IDLE;
0754 MUSB_HST_MODE(musb);
0755 musb_platform_set_vbus(musb, 1);
0756
0757 return IRQ_NONE;
0758 }
0759
0760 static void musb_handle_intr_vbuserr(struct musb *musb, u8 devctl)
0761 {
0762 int ignore = 0;
0763
0764
0765
0766
0767
0768
0769
0770
0771
0772
0773
0774
0775
0776
0777
0778
0779
0780 switch (musb->xceiv->otg->state) {
0781 case OTG_STATE_A_HOST:
0782
0783
0784
0785
0786
0787
0788 case OTG_STATE_A_WAIT_BCON:
0789 case OTG_STATE_A_WAIT_VRISE:
0790 if (musb->vbuserr_retry) {
0791 void __iomem *mbase = musb->mregs;
0792
0793 musb->vbuserr_retry--;
0794 ignore = 1;
0795 devctl |= MUSB_DEVCTL_SESSION;
0796 musb_writeb(mbase, MUSB_DEVCTL, devctl);
0797 } else {
0798 musb->port1_status |=
0799 USB_PORT_STAT_OVERCURRENT
0800 | (USB_PORT_STAT_C_OVERCURRENT << 16);
0801 }
0802 break;
0803 default:
0804 break;
0805 }
0806
0807 dev_printk(ignore ? KERN_DEBUG : KERN_ERR, musb->controller,
0808 "VBUS_ERROR in %s (%02x, %s), retry #%d, port1 %08x\n",
0809 usb_otg_state_string(musb->xceiv->otg->state),
0810 devctl,
0811 ({ char *s;
0812 switch (devctl & MUSB_DEVCTL_VBUS) {
0813 case 0 << MUSB_DEVCTL_VBUS_SHIFT:
0814 s = "<SessEnd"; break;
0815 case 1 << MUSB_DEVCTL_VBUS_SHIFT:
0816 s = "<AValid"; break;
0817 case 2 << MUSB_DEVCTL_VBUS_SHIFT:
0818 s = "<VBusValid"; break;
0819
0820 default:
0821 s = "VALID"; break;
0822 } s; }),
0823 VBUSERR_RETRY_COUNT - musb->vbuserr_retry,
0824 musb->port1_status);
0825
0826
0827 if (!ignore)
0828 musb_platform_set_vbus(musb, 0);
0829 }
0830
0831 static void musb_handle_intr_suspend(struct musb *musb, u8 devctl)
0832 {
0833 musb_dbg(musb, "SUSPEND (%s) devctl %02x",
0834 usb_otg_state_string(musb->xceiv->otg->state), devctl);
0835
0836 switch (musb->xceiv->otg->state) {
0837 case OTG_STATE_A_PERIPHERAL:
0838
0839
0840
0841
0842
0843
0844
0845 musb_hnp_stop(musb);
0846 musb_host_resume_root_hub(musb);
0847 musb_root_disconnect(musb);
0848 musb_platform_try_idle(musb, jiffies
0849 + msecs_to_jiffies(musb->a_wait_bcon
0850 ? : OTG_TIME_A_WAIT_BCON));
0851
0852 break;
0853 case OTG_STATE_B_IDLE:
0854 if (!musb->is_active)
0855 break;
0856 fallthrough;
0857 case OTG_STATE_B_PERIPHERAL:
0858 musb_g_suspend(musb);
0859 musb->is_active = musb->g.b_hnp_enable;
0860 if (musb->is_active) {
0861 musb->xceiv->otg->state = OTG_STATE_B_WAIT_ACON;
0862 musb_dbg(musb, "HNP: Setting timer for b_ase0_brst");
0863 mod_timer(&musb->otg_timer, jiffies
0864 + msecs_to_jiffies(
0865 OTG_TIME_B_ASE0_BRST));
0866 }
0867 break;
0868 case OTG_STATE_A_WAIT_BCON:
0869 if (musb->a_wait_bcon != 0)
0870 musb_platform_try_idle(musb, jiffies
0871 + msecs_to_jiffies(musb->a_wait_bcon));
0872 break;
0873 case OTG_STATE_A_HOST:
0874 musb->xceiv->otg->state = OTG_STATE_A_SUSPEND;
0875 musb->is_active = musb->hcd->self.b_hnp_enable;
0876 break;
0877 case OTG_STATE_B_HOST:
0878
0879 musb_dbg(musb, "REVISIT: SUSPEND as B_HOST");
0880 break;
0881 default:
0882
0883 musb->is_active = 0;
0884 break;
0885 }
0886 }
0887
0888 static void musb_handle_intr_connect(struct musb *musb, u8 devctl, u8 int_usb)
0889 {
0890 struct usb_hcd *hcd = musb->hcd;
0891
0892 musb->is_active = 1;
0893 musb->ep0_stage = MUSB_EP0_START;
0894
0895 musb->intrtxe = musb->epmask;
0896 musb_writew(musb->mregs, MUSB_INTRTXE, musb->intrtxe);
0897 musb->intrrxe = musb->epmask & 0xfffe;
0898 musb_writew(musb->mregs, MUSB_INTRRXE, musb->intrrxe);
0899 musb_writeb(musb->mregs, MUSB_INTRUSBE, 0xf7);
0900 musb->port1_status &= ~(USB_PORT_STAT_LOW_SPEED
0901 |USB_PORT_STAT_HIGH_SPEED
0902 |USB_PORT_STAT_ENABLE
0903 );
0904 musb->port1_status |= USB_PORT_STAT_CONNECTION
0905 |(USB_PORT_STAT_C_CONNECTION << 16);
0906
0907
0908 if (devctl & MUSB_DEVCTL_LSDEV)
0909 musb->port1_status |= USB_PORT_STAT_LOW_SPEED;
0910
0911
0912 switch (musb->xceiv->otg->state) {
0913 case OTG_STATE_B_PERIPHERAL:
0914 if (int_usb & MUSB_INTR_SUSPEND) {
0915 musb_dbg(musb, "HNP: SUSPEND+CONNECT, now b_host");
0916 int_usb &= ~MUSB_INTR_SUSPEND;
0917 goto b_host;
0918 } else
0919 musb_dbg(musb, "CONNECT as b_peripheral???");
0920 break;
0921 case OTG_STATE_B_WAIT_ACON:
0922 musb_dbg(musb, "HNP: CONNECT, now b_host");
0923 b_host:
0924 musb->xceiv->otg->state = OTG_STATE_B_HOST;
0925 if (musb->hcd)
0926 musb->hcd->self.is_b_host = 1;
0927 del_timer(&musb->otg_timer);
0928 break;
0929 default:
0930 if ((devctl & MUSB_DEVCTL_VBUS)
0931 == (3 << MUSB_DEVCTL_VBUS_SHIFT)) {
0932 musb->xceiv->otg->state = OTG_STATE_A_HOST;
0933 if (hcd)
0934 hcd->self.is_b_host = 0;
0935 }
0936 break;
0937 }
0938
0939 musb_host_poke_root_hub(musb);
0940
0941 musb_dbg(musb, "CONNECT (%s) devctl %02x",
0942 usb_otg_state_string(musb->xceiv->otg->state), devctl);
0943 }
0944
0945 static void musb_handle_intr_disconnect(struct musb *musb, u8 devctl)
0946 {
0947 musb_dbg(musb, "DISCONNECT (%s) as %s, devctl %02x",
0948 usb_otg_state_string(musb->xceiv->otg->state),
0949 MUSB_MODE(musb), devctl);
0950
0951 switch (musb->xceiv->otg->state) {
0952 case OTG_STATE_A_HOST:
0953 case OTG_STATE_A_SUSPEND:
0954 musb_host_resume_root_hub(musb);
0955 musb_root_disconnect(musb);
0956 if (musb->a_wait_bcon != 0)
0957 musb_platform_try_idle(musb, jiffies
0958 + msecs_to_jiffies(musb->a_wait_bcon));
0959 break;
0960 case OTG_STATE_B_HOST:
0961
0962
0963
0964
0965
0966 musb_root_disconnect(musb);
0967 if (musb->hcd)
0968 musb->hcd->self.is_b_host = 0;
0969 musb->xceiv->otg->state = OTG_STATE_B_PERIPHERAL;
0970 MUSB_DEV_MODE(musb);
0971 musb_g_disconnect(musb);
0972 break;
0973 case OTG_STATE_A_PERIPHERAL:
0974 musb_hnp_stop(musb);
0975 musb_root_disconnect(musb);
0976 fallthrough;
0977 case OTG_STATE_B_WAIT_ACON:
0978 case OTG_STATE_B_PERIPHERAL:
0979 case OTG_STATE_B_IDLE:
0980 musb_g_disconnect(musb);
0981 break;
0982 default:
0983 WARNING("unhandled DISCONNECT transition (%s)\n",
0984 usb_otg_state_string(musb->xceiv->otg->state));
0985 break;
0986 }
0987 }
0988
0989
0990
0991
0992
0993 static void musb_handle_intr_reset(struct musb *musb)
0994 {
0995 if (is_host_active(musb)) {
0996
0997
0998
0999
1000
1001
1002
1003
1004 dev_err(musb->controller, "Babble\n");
1005 musb_recover_from_babble(musb);
1006 } else {
1007 musb_dbg(musb, "BUS RESET as %s",
1008 usb_otg_state_string(musb->xceiv->otg->state));
1009 switch (musb->xceiv->otg->state) {
1010 case OTG_STATE_A_SUSPEND:
1011 musb_g_reset(musb);
1012 fallthrough;
1013 case OTG_STATE_A_WAIT_BCON:
1014
1015 musb_dbg(musb, "HNP: in %s, %d msec timeout",
1016 usb_otg_state_string(musb->xceiv->otg->state),
1017 TA_WAIT_BCON(musb));
1018 mod_timer(&musb->otg_timer, jiffies
1019 + msecs_to_jiffies(TA_WAIT_BCON(musb)));
1020 break;
1021 case OTG_STATE_A_PERIPHERAL:
1022 del_timer(&musb->otg_timer);
1023 musb_g_reset(musb);
1024 break;
1025 case OTG_STATE_B_WAIT_ACON:
1026 musb_dbg(musb, "HNP: RESET (%s), to b_peripheral",
1027 usb_otg_state_string(musb->xceiv->otg->state));
1028 musb->xceiv->otg->state = OTG_STATE_B_PERIPHERAL;
1029 musb_g_reset(musb);
1030 break;
1031 case OTG_STATE_B_IDLE:
1032 musb->xceiv->otg->state = OTG_STATE_B_PERIPHERAL;
1033 fallthrough;
1034 case OTG_STATE_B_PERIPHERAL:
1035 musb_g_reset(musb);
1036 break;
1037 default:
1038 musb_dbg(musb, "Unhandled BUS RESET as %s",
1039 usb_otg_state_string(musb->xceiv->otg->state));
1040 }
1041 }
1042 }
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055 static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb,
1056 u8 devctl)
1057 {
1058 irqreturn_t handled = IRQ_NONE;
1059
1060 musb_dbg(musb, "<== DevCtl=%02x, int_usb=0x%x", devctl, int_usb);
1061
1062
1063
1064
1065
1066 if (int_usb & MUSB_INTR_RESUME) {
1067 musb_handle_intr_resume(musb, devctl);
1068 handled = IRQ_HANDLED;
1069 }
1070
1071
1072 if (int_usb & MUSB_INTR_SESSREQ) {
1073 if (musb_handle_intr_sessreq(musb, devctl))
1074 return IRQ_HANDLED;
1075 handled = IRQ_HANDLED;
1076 }
1077
1078 if (int_usb & MUSB_INTR_VBUSERROR) {
1079 musb_handle_intr_vbuserr(musb, devctl);
1080 handled = IRQ_HANDLED;
1081 }
1082
1083 if (int_usb & MUSB_INTR_SUSPEND) {
1084 musb_handle_intr_suspend(musb, devctl);
1085 handled = IRQ_HANDLED;
1086 }
1087
1088 if (int_usb & MUSB_INTR_CONNECT) {
1089 musb_handle_intr_connect(musb, devctl, int_usb);
1090 handled = IRQ_HANDLED;
1091 }
1092
1093 if (int_usb & MUSB_INTR_DISCONNECT) {
1094 musb_handle_intr_disconnect(musb, devctl);
1095 handled = IRQ_HANDLED;
1096 }
1097
1098 if (int_usb & MUSB_INTR_RESET) {
1099 musb_handle_intr_reset(musb);
1100 handled = IRQ_HANDLED;
1101 }
1102
1103 #if 0
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115 if (int_usb & MUSB_INTR_SOF) {
1116 void __iomem *mbase = musb->mregs;
1117 struct musb_hw_ep *ep;
1118 u8 epnum;
1119 u16 frame;
1120
1121 dev_dbg(musb->controller, "START_OF_FRAME\n");
1122 handled = IRQ_HANDLED;
1123
1124
1125 frame = musb_readw(mbase, MUSB_FRAME);
1126 ep = musb->endpoints;
1127 for (epnum = 1; (epnum < musb->nr_endpoints)
1128 && (musb->epmask >= (1 << epnum));
1129 epnum++, ep++) {
1130
1131
1132
1133
1134 if (ep->dwWaitFrame >= frame) {
1135 ep->dwWaitFrame = 0;
1136 pr_debug("SOF --> periodic TX%s on %d\n",
1137 ep->tx_channel ? " DMA" : "",
1138 epnum);
1139 if (!ep->tx_channel)
1140 musb_h_tx_start(musb, epnum);
1141 else
1142 cppi_hostdma_start(musb, epnum);
1143 }
1144 }
1145 }
1146 #endif
1147
1148 schedule_delayed_work(&musb->irq_work, 0);
1149
1150 return handled;
1151 }
1152
1153
1154
1155 static void musb_disable_interrupts(struct musb *musb)
1156 {
1157 void __iomem *mbase = musb->mregs;
1158
1159
1160 musb_writeb(mbase, MUSB_INTRUSBE, 0);
1161 musb->intrtxe = 0;
1162 musb_writew(mbase, MUSB_INTRTXE, 0);
1163 musb->intrrxe = 0;
1164 musb_writew(mbase, MUSB_INTRRXE, 0);
1165
1166
1167 musb_clearb(mbase, MUSB_INTRUSB);
1168 musb_clearw(mbase, MUSB_INTRTX);
1169 musb_clearw(mbase, MUSB_INTRRX);
1170 }
1171
1172 static void musb_enable_interrupts(struct musb *musb)
1173 {
1174 void __iomem *regs = musb->mregs;
1175
1176
1177 musb->intrtxe = musb->epmask;
1178 musb_writew(regs, MUSB_INTRTXE, musb->intrtxe);
1179 musb->intrrxe = musb->epmask & 0xfffe;
1180 musb_writew(regs, MUSB_INTRRXE, musb->intrrxe);
1181 musb_writeb(regs, MUSB_INTRUSBE, 0xf7);
1182
1183 }
1184
1185
1186
1187
1188 void musb_start(struct musb *musb)
1189 {
1190 void __iomem *regs = musb->mregs;
1191 u8 devctl = musb_readb(regs, MUSB_DEVCTL);
1192 u8 power;
1193
1194 musb_dbg(musb, "<== devctl %02x", devctl);
1195
1196 musb_enable_interrupts(musb);
1197 musb_writeb(regs, MUSB_TESTMODE, 0);
1198
1199 power = MUSB_POWER_ISOUPDATE;
1200
1201
1202
1203
1204 if (musb->config->maximum_speed == USB_SPEED_HIGH ||
1205 musb->config->maximum_speed == USB_SPEED_UNKNOWN)
1206 power |= MUSB_POWER_HSENAB;
1207 musb_writeb(regs, MUSB_POWER, power);
1208
1209 musb->is_active = 0;
1210 devctl = musb_readb(regs, MUSB_DEVCTL);
1211 devctl &= ~MUSB_DEVCTL_SESSION;
1212
1213
1214
1215
1216
1217
1218 if (musb->port_mode != MUSB_HOST &&
1219 musb->xceiv->otg->state != OTG_STATE_A_WAIT_BCON &&
1220 (devctl & MUSB_DEVCTL_VBUS) == MUSB_DEVCTL_VBUS) {
1221 musb->is_active = 1;
1222 } else {
1223 devctl |= MUSB_DEVCTL_SESSION;
1224 }
1225
1226 musb_platform_enable(musb);
1227 musb_writeb(regs, MUSB_DEVCTL, devctl);
1228 }
1229
1230
1231
1232
1233
1234
1235
1236
1237 void musb_stop(struct musb *musb)
1238 {
1239
1240 musb_platform_disable(musb);
1241 musb_disable_interrupts(musb);
1242 musb_writeb(musb->mregs, MUSB_DEVCTL, 0);
1243
1244
1245
1246
1247
1248
1249
1250
1251 musb_platform_try_idle(musb, 0);
1252 }
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266 static ushort fifo_mode;
1267
1268
1269 module_param(fifo_mode, ushort, 0);
1270 MODULE_PARM_DESC(fifo_mode, "initial endpoint configuration");
1271
1272
1273
1274
1275
1276
1277
1278 static struct musb_fifo_cfg mode_0_cfg[] = {
1279 { .hw_ep_num = 1, .style = FIFO_TX, .maxpacket = 512, },
1280 { .hw_ep_num = 1, .style = FIFO_RX, .maxpacket = 512, },
1281 { .hw_ep_num = 2, .style = FIFO_RXTX, .maxpacket = 512, },
1282 { .hw_ep_num = 3, .style = FIFO_RXTX, .maxpacket = 256, },
1283 { .hw_ep_num = 4, .style = FIFO_RXTX, .maxpacket = 256, },
1284 };
1285
1286
1287 static struct musb_fifo_cfg mode_1_cfg[] = {
1288 { .hw_ep_num = 1, .style = FIFO_TX, .maxpacket = 512, .mode = BUF_DOUBLE, },
1289 { .hw_ep_num = 1, .style = FIFO_RX, .maxpacket = 512, .mode = BUF_DOUBLE, },
1290 { .hw_ep_num = 2, .style = FIFO_RXTX, .maxpacket = 512, .mode = BUF_DOUBLE, },
1291 { .hw_ep_num = 3, .style = FIFO_RXTX, .maxpacket = 256, },
1292 { .hw_ep_num = 4, .style = FIFO_RXTX, .maxpacket = 256, },
1293 };
1294
1295
1296 static struct musb_fifo_cfg mode_2_cfg[] = {
1297 { .hw_ep_num = 1, .style = FIFO_TX, .maxpacket = 512, },
1298 { .hw_ep_num = 1, .style = FIFO_RX, .maxpacket = 512, },
1299 { .hw_ep_num = 2, .style = FIFO_TX, .maxpacket = 512, },
1300 { .hw_ep_num = 2, .style = FIFO_RX, .maxpacket = 512, },
1301 { .hw_ep_num = 3, .style = FIFO_RXTX, .maxpacket = 960, },
1302 { .hw_ep_num = 4, .style = FIFO_RXTX, .maxpacket = 1024, },
1303 };
1304
1305
1306 static struct musb_fifo_cfg mode_3_cfg[] = {
1307 { .hw_ep_num = 1, .style = FIFO_TX, .maxpacket = 512, .mode = BUF_DOUBLE, },
1308 { .hw_ep_num = 1, .style = FIFO_RX, .maxpacket = 512, .mode = BUF_DOUBLE, },
1309 { .hw_ep_num = 2, .style = FIFO_TX, .maxpacket = 512, },
1310 { .hw_ep_num = 2, .style = FIFO_RX, .maxpacket = 512, },
1311 { .hw_ep_num = 3, .style = FIFO_RXTX, .maxpacket = 256, },
1312 { .hw_ep_num = 4, .style = FIFO_RXTX, .maxpacket = 256, },
1313 };
1314
1315
1316 static struct musb_fifo_cfg mode_4_cfg[] = {
1317 { .hw_ep_num = 1, .style = FIFO_TX, .maxpacket = 512, },
1318 { .hw_ep_num = 1, .style = FIFO_RX, .maxpacket = 512, },
1319 { .hw_ep_num = 2, .style = FIFO_TX, .maxpacket = 512, },
1320 { .hw_ep_num = 2, .style = FIFO_RX, .maxpacket = 512, },
1321 { .hw_ep_num = 3, .style = FIFO_TX, .maxpacket = 512, },
1322 { .hw_ep_num = 3, .style = FIFO_RX, .maxpacket = 512, },
1323 { .hw_ep_num = 4, .style = FIFO_TX, .maxpacket = 512, },
1324 { .hw_ep_num = 4, .style = FIFO_RX, .maxpacket = 512, },
1325 { .hw_ep_num = 5, .style = FIFO_TX, .maxpacket = 512, },
1326 { .hw_ep_num = 5, .style = FIFO_RX, .maxpacket = 512, },
1327 { .hw_ep_num = 6, .style = FIFO_TX, .maxpacket = 512, },
1328 { .hw_ep_num = 6, .style = FIFO_RX, .maxpacket = 512, },
1329 { .hw_ep_num = 7, .style = FIFO_TX, .maxpacket = 512, },
1330 { .hw_ep_num = 7, .style = FIFO_RX, .maxpacket = 512, },
1331 { .hw_ep_num = 8, .style = FIFO_TX, .maxpacket = 512, },
1332 { .hw_ep_num = 8, .style = FIFO_RX, .maxpacket = 512, },
1333 { .hw_ep_num = 9, .style = FIFO_TX, .maxpacket = 512, },
1334 { .hw_ep_num = 9, .style = FIFO_RX, .maxpacket = 512, },
1335 { .hw_ep_num = 10, .style = FIFO_TX, .maxpacket = 256, },
1336 { .hw_ep_num = 10, .style = FIFO_RX, .maxpacket = 64, },
1337 { .hw_ep_num = 11, .style = FIFO_TX, .maxpacket = 256, },
1338 { .hw_ep_num = 11, .style = FIFO_RX, .maxpacket = 64, },
1339 { .hw_ep_num = 12, .style = FIFO_TX, .maxpacket = 256, },
1340 { .hw_ep_num = 12, .style = FIFO_RX, .maxpacket = 64, },
1341 { .hw_ep_num = 13, .style = FIFO_RXTX, .maxpacket = 4096, },
1342 { .hw_ep_num = 14, .style = FIFO_RXTX, .maxpacket = 1024, },
1343 { .hw_ep_num = 15, .style = FIFO_RXTX, .maxpacket = 1024, },
1344 };
1345
1346
1347 static struct musb_fifo_cfg mode_5_cfg[] = {
1348 { .hw_ep_num = 1, .style = FIFO_TX, .maxpacket = 512, },
1349 { .hw_ep_num = 1, .style = FIFO_RX, .maxpacket = 512, },
1350 { .hw_ep_num = 2, .style = FIFO_TX, .maxpacket = 512, },
1351 { .hw_ep_num = 2, .style = FIFO_RX, .maxpacket = 512, },
1352 { .hw_ep_num = 3, .style = FIFO_TX, .maxpacket = 512, },
1353 { .hw_ep_num = 3, .style = FIFO_RX, .maxpacket = 512, },
1354 { .hw_ep_num = 4, .style = FIFO_TX, .maxpacket = 512, },
1355 { .hw_ep_num = 4, .style = FIFO_RX, .maxpacket = 512, },
1356 { .hw_ep_num = 5, .style = FIFO_TX, .maxpacket = 512, },
1357 { .hw_ep_num = 5, .style = FIFO_RX, .maxpacket = 512, },
1358 { .hw_ep_num = 6, .style = FIFO_TX, .maxpacket = 32, },
1359 { .hw_ep_num = 6, .style = FIFO_RX, .maxpacket = 32, },
1360 { .hw_ep_num = 7, .style = FIFO_TX, .maxpacket = 32, },
1361 { .hw_ep_num = 7, .style = FIFO_RX, .maxpacket = 32, },
1362 { .hw_ep_num = 8, .style = FIFO_TX, .maxpacket = 32, },
1363 { .hw_ep_num = 8, .style = FIFO_RX, .maxpacket = 32, },
1364 { .hw_ep_num = 9, .style = FIFO_TX, .maxpacket = 32, },
1365 { .hw_ep_num = 9, .style = FIFO_RX, .maxpacket = 32, },
1366 { .hw_ep_num = 10, .style = FIFO_TX, .maxpacket = 32, },
1367 { .hw_ep_num = 10, .style = FIFO_RX, .maxpacket = 32, },
1368 { .hw_ep_num = 11, .style = FIFO_TX, .maxpacket = 32, },
1369 { .hw_ep_num = 11, .style = FIFO_RX, .maxpacket = 32, },
1370 { .hw_ep_num = 12, .style = FIFO_TX, .maxpacket = 32, },
1371 { .hw_ep_num = 12, .style = FIFO_RX, .maxpacket = 32, },
1372 { .hw_ep_num = 13, .style = FIFO_RXTX, .maxpacket = 512, },
1373 { .hw_ep_num = 14, .style = FIFO_RXTX, .maxpacket = 1024, },
1374 { .hw_ep_num = 15, .style = FIFO_RXTX, .maxpacket = 1024, },
1375 };
1376
1377
1378
1379
1380
1381
1382
1383 static int
1384 fifo_setup(struct musb *musb, struct musb_hw_ep *hw_ep,
1385 const struct musb_fifo_cfg *cfg, u16 offset)
1386 {
1387 void __iomem *mbase = musb->mregs;
1388 int size = 0;
1389 u16 maxpacket = cfg->maxpacket;
1390 u16 c_off = offset >> 3;
1391 u8 c_size;
1392
1393
1394
1395 size = ffs(max(maxpacket, (u16) 8)) - 1;
1396 maxpacket = 1 << size;
1397
1398 c_size = size - 3;
1399 if (cfg->mode == BUF_DOUBLE) {
1400 if ((offset + (maxpacket << 1)) >
1401 (1 << (musb->config->ram_bits + 2)))
1402 return -EMSGSIZE;
1403 c_size |= MUSB_FIFOSZ_DPB;
1404 } else {
1405 if ((offset + maxpacket) > (1 << (musb->config->ram_bits + 2)))
1406 return -EMSGSIZE;
1407 }
1408
1409
1410 musb_writeb(mbase, MUSB_INDEX, hw_ep->epnum);
1411
1412
1413
1414
1415 if (hw_ep->epnum == 1)
1416 musb->bulk_ep = hw_ep;
1417
1418 switch (cfg->style) {
1419 case FIFO_TX:
1420 musb_writeb(mbase, MUSB_TXFIFOSZ, c_size);
1421 musb_writew(mbase, MUSB_TXFIFOADD, c_off);
1422 hw_ep->tx_double_buffered = !!(c_size & MUSB_FIFOSZ_DPB);
1423 hw_ep->max_packet_sz_tx = maxpacket;
1424 break;
1425 case FIFO_RX:
1426 musb_writeb(mbase, MUSB_RXFIFOSZ, c_size);
1427 musb_writew(mbase, MUSB_RXFIFOADD, c_off);
1428 hw_ep->rx_double_buffered = !!(c_size & MUSB_FIFOSZ_DPB);
1429 hw_ep->max_packet_sz_rx = maxpacket;
1430 break;
1431 case FIFO_RXTX:
1432 musb_writeb(mbase, MUSB_TXFIFOSZ, c_size);
1433 musb_writew(mbase, MUSB_TXFIFOADD, c_off);
1434 hw_ep->rx_double_buffered = !!(c_size & MUSB_FIFOSZ_DPB);
1435 hw_ep->max_packet_sz_rx = maxpacket;
1436
1437 musb_writeb(mbase, MUSB_RXFIFOSZ, c_size);
1438 musb_writew(mbase, MUSB_RXFIFOADD, c_off);
1439 hw_ep->tx_double_buffered = hw_ep->rx_double_buffered;
1440 hw_ep->max_packet_sz_tx = maxpacket;
1441
1442 hw_ep->is_shared_fifo = true;
1443 break;
1444 }
1445
1446
1447
1448
1449 musb->epmask |= (1 << hw_ep->epnum);
1450
1451 return offset + (maxpacket << ((c_size & MUSB_FIFOSZ_DPB) ? 1 : 0));
1452 }
1453
1454 static struct musb_fifo_cfg ep0_cfg = {
1455 .style = FIFO_RXTX, .maxpacket = 64,
1456 };
1457
1458 static int ep_config_from_table(struct musb *musb)
1459 {
1460 const struct musb_fifo_cfg *cfg;
1461 unsigned i, n;
1462 int offset;
1463 struct musb_hw_ep *hw_ep = musb->endpoints;
1464
1465 if (musb->config->fifo_cfg) {
1466 cfg = musb->config->fifo_cfg;
1467 n = musb->config->fifo_cfg_size;
1468 goto done;
1469 }
1470
1471 switch (fifo_mode) {
1472 default:
1473 fifo_mode = 0;
1474 fallthrough;
1475 case 0:
1476 cfg = mode_0_cfg;
1477 n = ARRAY_SIZE(mode_0_cfg);
1478 break;
1479 case 1:
1480 cfg = mode_1_cfg;
1481 n = ARRAY_SIZE(mode_1_cfg);
1482 break;
1483 case 2:
1484 cfg = mode_2_cfg;
1485 n = ARRAY_SIZE(mode_2_cfg);
1486 break;
1487 case 3:
1488 cfg = mode_3_cfg;
1489 n = ARRAY_SIZE(mode_3_cfg);
1490 break;
1491 case 4:
1492 cfg = mode_4_cfg;
1493 n = ARRAY_SIZE(mode_4_cfg);
1494 break;
1495 case 5:
1496 cfg = mode_5_cfg;
1497 n = ARRAY_SIZE(mode_5_cfg);
1498 break;
1499 }
1500
1501 pr_debug("%s: setup fifo_mode %d\n", musb_driver_name, fifo_mode);
1502
1503
1504 done:
1505 offset = fifo_setup(musb, hw_ep, &ep0_cfg, 0);
1506
1507
1508
1509
1510
1511
1512 for (i = 0; i < n; i++) {
1513 u8 epn = cfg->hw_ep_num;
1514
1515 if (epn >= musb->config->num_eps) {
1516 pr_debug("%s: invalid ep %d\n",
1517 musb_driver_name, epn);
1518 return -EINVAL;
1519 }
1520 offset = fifo_setup(musb, hw_ep + epn, cfg++, offset);
1521 if (offset < 0) {
1522 pr_debug("%s: mem overrun, ep %d\n",
1523 musb_driver_name, epn);
1524 return offset;
1525 }
1526 epn++;
1527 musb->nr_endpoints = max(epn, musb->nr_endpoints);
1528 }
1529
1530 pr_debug("%s: %d/%d max ep, %d/%d memory\n",
1531 musb_driver_name,
1532 n + 1, musb->config->num_eps * 2 - 1,
1533 offset, (1 << (musb->config->ram_bits + 2)));
1534
1535 if (!musb->bulk_ep) {
1536 pr_debug("%s: missing bulk\n", musb_driver_name);
1537 return -EINVAL;
1538 }
1539
1540 return 0;
1541 }
1542
1543
1544
1545
1546
1547
1548 static int ep_config_from_hw(struct musb *musb)
1549 {
1550 u8 epnum = 0;
1551 struct musb_hw_ep *hw_ep;
1552 void __iomem *mbase = musb->mregs;
1553 int ret = 0;
1554
1555 musb_dbg(musb, "<== static silicon ep config");
1556
1557
1558
1559 for (epnum = 1; epnum < musb->config->num_eps; epnum++) {
1560 musb_ep_select(mbase, epnum);
1561 hw_ep = musb->endpoints + epnum;
1562
1563 ret = musb_read_fifosize(musb, hw_ep, epnum);
1564 if (ret < 0)
1565 break;
1566
1567
1568
1569
1570 if (hw_ep->max_packet_sz_tx < 512
1571 || hw_ep->max_packet_sz_rx < 512)
1572 continue;
1573
1574
1575
1576
1577 if (musb->bulk_ep)
1578 continue;
1579 musb->bulk_ep = hw_ep;
1580 }
1581
1582 if (!musb->bulk_ep) {
1583 pr_debug("%s: missing bulk\n", musb_driver_name);
1584 return -EINVAL;
1585 }
1586
1587 return 0;
1588 }
1589
1590 enum { MUSB_CONTROLLER_MHDRC, MUSB_CONTROLLER_HDRC, };
1591
1592
1593
1594
1595 static int musb_core_init(u16 musb_type, struct musb *musb)
1596 {
1597 u8 reg;
1598 char *type;
1599 char aInfo[90];
1600 void __iomem *mbase = musb->mregs;
1601 int status = 0;
1602 int i;
1603
1604
1605 reg = musb_read_configdata(mbase);
1606
1607 strcpy(aInfo, (reg & MUSB_CONFIGDATA_UTMIDW) ? "UTMI-16" : "UTMI-8");
1608 if (reg & MUSB_CONFIGDATA_DYNFIFO) {
1609 strcat(aInfo, ", dyn FIFOs");
1610 musb->dyn_fifo = true;
1611 }
1612 if (reg & MUSB_CONFIGDATA_MPRXE) {
1613 strcat(aInfo, ", bulk combine");
1614 musb->bulk_combine = true;
1615 }
1616 if (reg & MUSB_CONFIGDATA_MPTXE) {
1617 strcat(aInfo, ", bulk split");
1618 musb->bulk_split = true;
1619 }
1620 if (reg & MUSB_CONFIGDATA_HBRXE) {
1621 strcat(aInfo, ", HB-ISO Rx");
1622 musb->hb_iso_rx = true;
1623 }
1624 if (reg & MUSB_CONFIGDATA_HBTXE) {
1625 strcat(aInfo, ", HB-ISO Tx");
1626 musb->hb_iso_tx = true;
1627 }
1628 if (reg & MUSB_CONFIGDATA_SOFTCONE)
1629 strcat(aInfo, ", SoftConn");
1630
1631 pr_debug("%s: ConfigData=0x%02x (%s)\n", musb_driver_name, reg, aInfo);
1632
1633 if (MUSB_CONTROLLER_MHDRC == musb_type) {
1634 musb->is_multipoint = 1;
1635 type = "M";
1636 } else {
1637 musb->is_multipoint = 0;
1638 type = "";
1639 if (IS_ENABLED(CONFIG_USB) &&
1640 !IS_ENABLED(CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB)) {
1641 pr_err("%s: kernel must disable external hubs, please fix the configuration\n",
1642 musb_driver_name);
1643 }
1644 }
1645
1646
1647 musb->hwvers = musb_readw(mbase, MUSB_HWVERS);
1648 pr_debug("%s: %sHDRC RTL version %d.%d%s\n",
1649 musb_driver_name, type, MUSB_HWVERS_MAJOR(musb->hwvers),
1650 MUSB_HWVERS_MINOR(musb->hwvers),
1651 (musb->hwvers & MUSB_HWVERS_RC) ? "RC" : "");
1652
1653
1654 musb_configure_ep0(musb);
1655
1656
1657 musb->nr_endpoints = 1;
1658 musb->epmask = 1;
1659
1660 if (musb->dyn_fifo)
1661 status = ep_config_from_table(musb);
1662 else
1663 status = ep_config_from_hw(musb);
1664
1665 if (status < 0)
1666 return status;
1667
1668
1669 for (i = 0; i < musb->nr_endpoints; i++) {
1670 struct musb_hw_ep *hw_ep = musb->endpoints + i;
1671
1672 hw_ep->fifo = musb->io.fifo_offset(i) + mbase;
1673 #if IS_ENABLED(CONFIG_USB_MUSB_TUSB6010)
1674 if (musb->ops->quirks & MUSB_IN_TUSB) {
1675 hw_ep->fifo_async = musb->async + 0x400 +
1676 musb->io.fifo_offset(i);
1677 hw_ep->fifo_sync = musb->sync + 0x400 +
1678 musb->io.fifo_offset(i);
1679 hw_ep->fifo_sync_va =
1680 musb->sync_va + 0x400 + musb->io.fifo_offset(i);
1681
1682 if (i == 0)
1683 hw_ep->conf = mbase - 0x400 + TUSB_EP0_CONF;
1684 else
1685 hw_ep->conf = mbase + 0x400 +
1686 (((i - 1) & 0xf) << 2);
1687 }
1688 #endif
1689
1690 hw_ep->regs = musb->io.ep_offset(i, 0) + mbase;
1691 hw_ep->rx_reinit = 1;
1692 hw_ep->tx_reinit = 1;
1693
1694 if (hw_ep->max_packet_sz_tx) {
1695 musb_dbg(musb, "%s: hw_ep %d%s, %smax %d",
1696 musb_driver_name, i,
1697 hw_ep->is_shared_fifo ? "shared" : "tx",
1698 hw_ep->tx_double_buffered
1699 ? "doublebuffer, " : "",
1700 hw_ep->max_packet_sz_tx);
1701 }
1702 if (hw_ep->max_packet_sz_rx && !hw_ep->is_shared_fifo) {
1703 musb_dbg(musb, "%s: hw_ep %d%s, %smax %d",
1704 musb_driver_name, i,
1705 "rx",
1706 hw_ep->rx_double_buffered
1707 ? "doublebuffer, " : "",
1708 hw_ep->max_packet_sz_rx);
1709 }
1710 if (!(hw_ep->max_packet_sz_tx || hw_ep->max_packet_sz_rx))
1711 musb_dbg(musb, "hw_ep %d not configured", i);
1712 }
1713
1714 return 0;
1715 }
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726 irqreturn_t musb_interrupt(struct musb *musb)
1727 {
1728 irqreturn_t retval = IRQ_NONE;
1729 unsigned long status;
1730 unsigned long epnum;
1731 u8 devctl;
1732
1733 if (!musb->int_usb && !musb->int_tx && !musb->int_rx)
1734 return IRQ_NONE;
1735
1736 devctl = musb_readb(musb->mregs, MUSB_DEVCTL);
1737
1738 trace_musb_isr(musb);
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760 if (musb->int_usb)
1761 retval |= musb_stage0_irq(musb, musb->int_usb, devctl);
1762
1763 if (musb->int_tx & 1) {
1764 if (is_host_active(musb))
1765 retval |= musb_h_ep0_irq(musb);
1766 else
1767 retval |= musb_g_ep0_irq(musb);
1768
1769
1770 musb->int_tx &= ~BIT(0);
1771 }
1772
1773 status = musb->int_tx;
1774
1775 for_each_set_bit(epnum, &status, 16) {
1776 retval = IRQ_HANDLED;
1777 if (is_host_active(musb))
1778 musb_host_tx(musb, epnum);
1779 else
1780 musb_g_tx(musb, epnum);
1781 }
1782
1783 status = musb->int_rx;
1784
1785 for_each_set_bit(epnum, &status, 16) {
1786 retval = IRQ_HANDLED;
1787 if (is_host_active(musb))
1788 musb_host_rx(musb, epnum);
1789 else
1790 musb_g_rx(musb, epnum);
1791 }
1792
1793 return retval;
1794 }
1795 EXPORT_SYMBOL_GPL(musb_interrupt);
1796
1797 #ifndef CONFIG_MUSB_PIO_ONLY
1798 static bool use_dma = true;
1799
1800
1801 module_param(use_dma, bool, 0644);
1802 MODULE_PARM_DESC(use_dma, "enable/disable use of DMA");
1803
1804 void musb_dma_completion(struct musb *musb, u8 epnum, u8 transmit)
1805 {
1806
1807
1808 if (!epnum) {
1809 if (!is_cppi_enabled(musb)) {
1810
1811 if (is_host_active(musb))
1812 musb_h_ep0_irq(musb);
1813 else
1814 musb_g_ep0_irq(musb);
1815 }
1816 } else {
1817
1818 if (transmit) {
1819 if (is_host_active(musb))
1820 musb_host_tx(musb, epnum);
1821 else
1822 musb_g_tx(musb, epnum);
1823 } else {
1824
1825 if (is_host_active(musb))
1826 musb_host_rx(musb, epnum);
1827 else
1828 musb_g_rx(musb, epnum);
1829 }
1830 }
1831 }
1832 EXPORT_SYMBOL_GPL(musb_dma_completion);
1833
1834 #else
1835 #define use_dma 0
1836 #endif
1837
1838 static int (*musb_phy_callback)(enum musb_vbus_id_status status);
1839
1840
1841
1842
1843
1844
1845
1846
1847 int musb_mailbox(enum musb_vbus_id_status status)
1848 {
1849 if (musb_phy_callback)
1850 return musb_phy_callback(status);
1851
1852 return -ENODEV;
1853 };
1854 EXPORT_SYMBOL_GPL(musb_mailbox);
1855
1856
1857
1858 static ssize_t
1859 mode_show(struct device *dev, struct device_attribute *attr, char *buf)
1860 {
1861 struct musb *musb = dev_to_musb(dev);
1862 unsigned long flags;
1863 int ret;
1864
1865 spin_lock_irqsave(&musb->lock, flags);
1866 ret = sprintf(buf, "%s\n", usb_otg_state_string(musb->xceiv->otg->state));
1867 spin_unlock_irqrestore(&musb->lock, flags);
1868
1869 return ret;
1870 }
1871
1872 static ssize_t
1873 mode_store(struct device *dev, struct device_attribute *attr,
1874 const char *buf, size_t n)
1875 {
1876 struct musb *musb = dev_to_musb(dev);
1877 unsigned long flags;
1878 int status;
1879
1880 spin_lock_irqsave(&musb->lock, flags);
1881 if (sysfs_streq(buf, "host"))
1882 status = musb_platform_set_mode(musb, MUSB_HOST);
1883 else if (sysfs_streq(buf, "peripheral"))
1884 status = musb_platform_set_mode(musb, MUSB_PERIPHERAL);
1885 else if (sysfs_streq(buf, "otg"))
1886 status = musb_platform_set_mode(musb, MUSB_OTG);
1887 else
1888 status = -EINVAL;
1889 spin_unlock_irqrestore(&musb->lock, flags);
1890
1891 return (status == 0) ? n : status;
1892 }
1893 static DEVICE_ATTR_RW(mode);
1894
1895 static ssize_t
1896 vbus_store(struct device *dev, struct device_attribute *attr,
1897 const char *buf, size_t n)
1898 {
1899 struct musb *musb = dev_to_musb(dev);
1900 unsigned long flags;
1901 unsigned long val;
1902
1903 if (sscanf(buf, "%lu", &val) < 1) {
1904 dev_err(dev, "Invalid VBUS timeout ms value\n");
1905 return -EINVAL;
1906 }
1907
1908 spin_lock_irqsave(&musb->lock, flags);
1909
1910 musb->a_wait_bcon = val ? max_t(int, val, OTG_TIME_A_WAIT_BCON) : 0 ;
1911 if (musb->xceiv->otg->state == OTG_STATE_A_WAIT_BCON)
1912 musb->is_active = 0;
1913 musb_platform_try_idle(musb, jiffies + msecs_to_jiffies(val));
1914 spin_unlock_irqrestore(&musb->lock, flags);
1915
1916 return n;
1917 }
1918
1919 static ssize_t
1920 vbus_show(struct device *dev, struct device_attribute *attr, char *buf)
1921 {
1922 struct musb *musb = dev_to_musb(dev);
1923 unsigned long flags;
1924 unsigned long val;
1925 int vbus;
1926 u8 devctl;
1927
1928 pm_runtime_get_sync(dev);
1929 spin_lock_irqsave(&musb->lock, flags);
1930 val = musb->a_wait_bcon;
1931 vbus = musb_platform_get_vbus_status(musb);
1932 if (vbus < 0) {
1933
1934 devctl = musb_readb(musb->mregs, MUSB_DEVCTL);
1935 if ((devctl & MUSB_DEVCTL_VBUS)
1936 == (3 << MUSB_DEVCTL_VBUS_SHIFT))
1937 vbus = 1;
1938 else
1939 vbus = 0;
1940 }
1941 spin_unlock_irqrestore(&musb->lock, flags);
1942 pm_runtime_put_sync(dev);
1943
1944 return sprintf(buf, "Vbus %s, timeout %lu msec\n",
1945 vbus ? "on" : "off", val);
1946 }
1947 static DEVICE_ATTR_RW(vbus);
1948
1949
1950
1951
1952 static ssize_t srp_store(struct device *dev, struct device_attribute *attr,
1953 const char *buf, size_t n)
1954 {
1955 struct musb *musb = dev_to_musb(dev);
1956 unsigned short srp;
1957
1958 if (sscanf(buf, "%hu", &srp) != 1
1959 || (srp != 1)) {
1960 dev_err(dev, "SRP: Value must be 1\n");
1961 return -EINVAL;
1962 }
1963
1964 if (srp == 1)
1965 musb_g_wakeup(musb);
1966
1967 return n;
1968 }
1969 static DEVICE_ATTR_WO(srp);
1970
1971 static struct attribute *musb_attrs[] = {
1972 &dev_attr_mode.attr,
1973 &dev_attr_vbus.attr,
1974 &dev_attr_srp.attr,
1975 NULL
1976 };
1977 ATTRIBUTE_GROUPS(musb);
1978
1979 #define MUSB_QUIRK_B_INVALID_VBUS_91 (MUSB_DEVCTL_BDEVICE | \
1980 (2 << MUSB_DEVCTL_VBUS_SHIFT) | \
1981 MUSB_DEVCTL_SESSION)
1982 #define MUSB_QUIRK_B_DISCONNECT_99 (MUSB_DEVCTL_BDEVICE | \
1983 (3 << MUSB_DEVCTL_VBUS_SHIFT) | \
1984 MUSB_DEVCTL_SESSION)
1985 #define MUSB_QUIRK_A_DISCONNECT_19 ((3 << MUSB_DEVCTL_VBUS_SHIFT) | \
1986 MUSB_DEVCTL_SESSION)
1987
1988 static bool musb_state_needs_recheck(struct musb *musb, u8 devctl,
1989 const char *desc)
1990 {
1991 if (musb->quirk_retries && !musb->flush_irq_work) {
1992 trace_musb_state(musb, devctl, desc);
1993 schedule_delayed_work(&musb->irq_work,
1994 msecs_to_jiffies(1000));
1995 musb->quirk_retries--;
1996
1997 return true;
1998 }
1999
2000 return false;
2001 }
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011 static void musb_pm_runtime_check_session(struct musb *musb)
2012 {
2013 u8 devctl, s;
2014 int error;
2015
2016 devctl = musb_readb(musb->mregs, MUSB_DEVCTL);
2017
2018
2019 s = MUSB_DEVCTL_FSDEV | MUSB_DEVCTL_LSDEV |
2020 MUSB_DEVCTL_HR;
2021 switch (devctl & ~s) {
2022 case MUSB_QUIRK_B_DISCONNECT_99:
2023 musb_state_needs_recheck(musb, devctl,
2024 "Poll devctl in case of suspend after disconnect");
2025 break;
2026 case MUSB_QUIRK_B_INVALID_VBUS_91:
2027 if (musb_state_needs_recheck(musb, devctl,
2028 "Poll devctl on invalid vbus, assume no session"))
2029 return;
2030 fallthrough;
2031 case MUSB_QUIRK_A_DISCONNECT_19:
2032 if (musb_state_needs_recheck(musb, devctl,
2033 "Poll devctl on possible host mode disconnect"))
2034 return;
2035 if (!musb->session)
2036 break;
2037 trace_musb_state(musb, devctl, "Allow PM on possible host mode disconnect");
2038 pm_runtime_mark_last_busy(musb->controller);
2039 pm_runtime_put_autosuspend(musb->controller);
2040 musb->session = false;
2041 return;
2042 default:
2043 break;
2044 }
2045
2046
2047 s = devctl & MUSB_DEVCTL_SESSION;
2048 if (s == musb->session)
2049 return;
2050
2051
2052 if (s) {
2053 trace_musb_state(musb, devctl, "Block PM on active session");
2054 error = pm_runtime_get_sync(musb->controller);
2055 if (error < 0)
2056 dev_err(musb->controller, "Could not enable: %i\n",
2057 error);
2058 musb->quirk_retries = 3;
2059
2060
2061
2062
2063
2064
2065 if (devctl & MUSB_DEVCTL_BDEVICE)
2066 schedule_delayed_work(&musb->irq_work,
2067 msecs_to_jiffies(3000));
2068 } else {
2069 trace_musb_state(musb, devctl, "Allow PM with no session");
2070 pm_runtime_mark_last_busy(musb->controller);
2071 pm_runtime_put_autosuspend(musb->controller);
2072 }
2073
2074 musb->session = s;
2075 }
2076
2077
2078 static void musb_irq_work(struct work_struct *data)
2079 {
2080 struct musb *musb = container_of(data, struct musb, irq_work.work);
2081 int error;
2082
2083 error = pm_runtime_resume_and_get(musb->controller);
2084 if (error < 0) {
2085 dev_err(musb->controller, "Could not enable: %i\n", error);
2086
2087 return;
2088 }
2089
2090 musb_pm_runtime_check_session(musb);
2091
2092 if (musb->xceiv->otg->state != musb->xceiv_old_state) {
2093 musb->xceiv_old_state = musb->xceiv->otg->state;
2094 sysfs_notify(&musb->controller->kobj, NULL, "mode");
2095 }
2096
2097 pm_runtime_mark_last_busy(musb->controller);
2098 pm_runtime_put_autosuspend(musb->controller);
2099 }
2100
2101 static void musb_recover_from_babble(struct musb *musb)
2102 {
2103 int ret;
2104 u8 devctl;
2105
2106 musb_disable_interrupts(musb);
2107
2108
2109
2110
2111
2112 udelay(10);
2113
2114 ret = musb_platform_recover(musb);
2115 if (ret) {
2116 musb_enable_interrupts(musb);
2117 return;
2118 }
2119
2120
2121 devctl = musb_readb(musb->mregs, MUSB_DEVCTL);
2122 devctl &= ~MUSB_DEVCTL_SESSION;
2123 musb_writeb(musb->mregs, MUSB_DEVCTL, devctl);
2124
2125
2126 musb_root_disconnect(musb);
2127
2128
2129
2130
2131
2132 if (musb->dyn_fifo)
2133 ret = ep_config_from_table(musb);
2134 else
2135 ret = ep_config_from_hw(musb);
2136
2137
2138 if (ret == 0)
2139 musb_start(musb);
2140 }
2141
2142
2143
2144
2145
2146 static struct musb *allocate_instance(struct device *dev,
2147 const struct musb_hdrc_config *config, void __iomem *mbase)
2148 {
2149 struct musb *musb;
2150 struct musb_hw_ep *ep;
2151 int epnum;
2152 int ret;
2153
2154 musb = devm_kzalloc(dev, sizeof(*musb), GFP_KERNEL);
2155 if (!musb)
2156 return NULL;
2157
2158 INIT_LIST_HEAD(&musb->control);
2159 INIT_LIST_HEAD(&musb->in_bulk);
2160 INIT_LIST_HEAD(&musb->out_bulk);
2161 INIT_LIST_HEAD(&musb->pending_list);
2162
2163 musb->vbuserr_retry = VBUSERR_RETRY_COUNT;
2164 musb->a_wait_bcon = OTG_TIME_A_WAIT_BCON;
2165 musb->mregs = mbase;
2166 musb->ctrl_base = mbase;
2167 musb->nIrq = -ENODEV;
2168 musb->config = config;
2169 BUG_ON(musb->config->num_eps > MUSB_C_NUM_EPS);
2170 for (epnum = 0, ep = musb->endpoints;
2171 epnum < musb->config->num_eps;
2172 epnum++, ep++) {
2173 ep->musb = musb;
2174 ep->epnum = epnum;
2175 }
2176
2177 musb->controller = dev;
2178
2179 ret = musb_host_alloc(musb);
2180 if (ret < 0)
2181 goto err_free;
2182
2183 dev_set_drvdata(dev, musb);
2184
2185 return musb;
2186
2187 err_free:
2188 return NULL;
2189 }
2190
2191 static void musb_free(struct musb *musb)
2192 {
2193
2194
2195
2196
2197
2198 if (musb->nIrq >= 0) {
2199 if (musb->irq_wake)
2200 disable_irq_wake(musb->nIrq);
2201 free_irq(musb->nIrq, musb);
2202 }
2203
2204 musb_host_free(musb);
2205 }
2206
2207 struct musb_pending_work {
2208 int (*callback)(struct musb *musb, void *data);
2209 void *data;
2210 struct list_head node;
2211 };
2212
2213 #ifdef CONFIG_PM
2214
2215
2216
2217
2218 static int musb_run_resume_work(struct musb *musb)
2219 {
2220 struct musb_pending_work *w, *_w;
2221 unsigned long flags;
2222 int error = 0;
2223
2224 spin_lock_irqsave(&musb->list_lock, flags);
2225 list_for_each_entry_safe(w, _w, &musb->pending_list, node) {
2226 if (w->callback) {
2227 error = w->callback(musb, w->data);
2228 if (error < 0) {
2229 dev_err(musb->controller,
2230 "resume callback %p failed: %i\n",
2231 w->callback, error);
2232 }
2233 }
2234 list_del(&w->node);
2235 devm_kfree(musb->controller, w);
2236 }
2237 spin_unlock_irqrestore(&musb->list_lock, flags);
2238
2239 return error;
2240 }
2241 #endif
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251 int musb_queue_resume_work(struct musb *musb,
2252 int (*callback)(struct musb *musb, void *data),
2253 void *data)
2254 {
2255 struct musb_pending_work *w;
2256 unsigned long flags;
2257 bool is_suspended;
2258 int error;
2259
2260 if (WARN_ON(!callback))
2261 return -EINVAL;
2262
2263 spin_lock_irqsave(&musb->list_lock, flags);
2264 is_suspended = musb->is_runtime_suspended;
2265
2266 if (is_suspended) {
2267 w = devm_kzalloc(musb->controller, sizeof(*w), GFP_ATOMIC);
2268 if (!w) {
2269 error = -ENOMEM;
2270 goto out_unlock;
2271 }
2272
2273 w->callback = callback;
2274 w->data = data;
2275
2276 list_add_tail(&w->node, &musb->pending_list);
2277 error = 0;
2278 }
2279
2280 out_unlock:
2281 spin_unlock_irqrestore(&musb->list_lock, flags);
2282
2283 if (!is_suspended)
2284 error = callback(musb, data);
2285
2286 return error;
2287 }
2288 EXPORT_SYMBOL_GPL(musb_queue_resume_work);
2289
2290 static void musb_deassert_reset(struct work_struct *work)
2291 {
2292 struct musb *musb;
2293 unsigned long flags;
2294
2295 musb = container_of(work, struct musb, deassert_reset_work.work);
2296
2297 spin_lock_irqsave(&musb->lock, flags);
2298
2299 if (musb->port1_status & USB_PORT_STAT_RESET)
2300 musb_port_reset(musb, false);
2301
2302 spin_unlock_irqrestore(&musb->lock, flags);
2303 }
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313 static int
2314 musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl)
2315 {
2316 int status;
2317 struct musb *musb;
2318 struct musb_hdrc_platform_data *plat = dev_get_platdata(dev);
2319
2320
2321
2322
2323 if (!plat) {
2324 dev_err(dev, "no platform_data?\n");
2325 status = -ENODEV;
2326 goto fail0;
2327 }
2328
2329
2330 musb = allocate_instance(dev, plat->config, ctrl);
2331 if (!musb) {
2332 status = -ENOMEM;
2333 goto fail0;
2334 }
2335
2336 spin_lock_init(&musb->lock);
2337 spin_lock_init(&musb->list_lock);
2338 musb->board_set_power = plat->set_power;
2339 musb->min_power = plat->min_power;
2340 musb->ops = plat->platform_ops;
2341 musb->port_mode = plat->mode;
2342
2343
2344
2345
2346
2347
2348 musb_readb = musb_default_readb;
2349 musb_writeb = musb_default_writeb;
2350 musb_readw = musb_default_readw;
2351 musb_writew = musb_default_writew;
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365 status = musb_platform_init(musb);
2366 if (status < 0)
2367 goto fail1;
2368
2369 if (!musb->isr) {
2370 status = -ENODEV;
2371 goto fail2;
2372 }
2373
2374
2375
2376 if (musb->ops->quirks & MUSB_INDEXED_EP) {
2377 musb->io.ep_offset = musb_indexed_ep_offset;
2378 musb->io.ep_select = musb_indexed_ep_select;
2379 } else {
2380 musb->io.ep_offset = musb_flat_ep_offset;
2381 musb->io.ep_select = musb_flat_ep_select;
2382 }
2383
2384 if (musb->ops->quirks & MUSB_G_NO_SKB_RESERVE)
2385 musb->g.quirk_avoids_skb_reserve = 1;
2386
2387
2388 if (musb->ops->ep_offset)
2389 musb->io.ep_offset = musb->ops->ep_offset;
2390 if (musb->ops->ep_select)
2391 musb->io.ep_select = musb->ops->ep_select;
2392
2393 if (musb->ops->fifo_mode)
2394 fifo_mode = musb->ops->fifo_mode;
2395 else
2396 fifo_mode = 4;
2397
2398 if (musb->ops->fifo_offset)
2399 musb->io.fifo_offset = musb->ops->fifo_offset;
2400 else
2401 musb->io.fifo_offset = musb_default_fifo_offset;
2402
2403 if (musb->ops->busctl_offset)
2404 musb->io.busctl_offset = musb->ops->busctl_offset;
2405 else
2406 musb->io.busctl_offset = musb_default_busctl_offset;
2407
2408 if (musb->ops->readb)
2409 musb_readb = musb->ops->readb;
2410 if (musb->ops->writeb)
2411 musb_writeb = musb->ops->writeb;
2412 if (musb->ops->clearb)
2413 musb_clearb = musb->ops->clearb;
2414 else
2415 musb_clearb = musb_readb;
2416
2417 if (musb->ops->readw)
2418 musb_readw = musb->ops->readw;
2419 if (musb->ops->writew)
2420 musb_writew = musb->ops->writew;
2421 if (musb->ops->clearw)
2422 musb_clearw = musb->ops->clearw;
2423 else
2424 musb_clearw = musb_readw;
2425
2426 #ifndef CONFIG_MUSB_PIO_ONLY
2427 if (!musb->ops->dma_init || !musb->ops->dma_exit) {
2428 dev_err(dev, "DMA controller not set\n");
2429 status = -ENODEV;
2430 goto fail2;
2431 }
2432 musb_dma_controller_create = musb->ops->dma_init;
2433 musb_dma_controller_destroy = musb->ops->dma_exit;
2434 #endif
2435
2436 if (musb->ops->read_fifo)
2437 musb->io.read_fifo = musb->ops->read_fifo;
2438 else
2439 musb->io.read_fifo = musb_default_read_fifo;
2440
2441 if (musb->ops->write_fifo)
2442 musb->io.write_fifo = musb->ops->write_fifo;
2443 else
2444 musb->io.write_fifo = musb_default_write_fifo;
2445
2446 if (musb->ops->get_toggle)
2447 musb->io.get_toggle = musb->ops->get_toggle;
2448 else
2449 musb->io.get_toggle = musb_default_get_toggle;
2450
2451 if (musb->ops->set_toggle)
2452 musb->io.set_toggle = musb->ops->set_toggle;
2453 else
2454 musb->io.set_toggle = musb_default_set_toggle;
2455
2456 if (!musb->xceiv->io_ops) {
2457 musb->xceiv->io_dev = musb->controller;
2458 musb->xceiv->io_priv = musb->mregs;
2459 musb->xceiv->io_ops = &musb_ulpi_access;
2460 }
2461
2462 if (musb->ops->phy_callback)
2463 musb_phy_callback = musb->ops->phy_callback;
2464
2465
2466
2467
2468
2469
2470
2471
2472 pm_runtime_use_autosuspend(musb->controller);
2473 pm_runtime_set_autosuspend_delay(musb->controller, 500);
2474 pm_runtime_enable(musb->controller);
2475 pm_runtime_get_sync(musb->controller);
2476
2477 status = usb_phy_init(musb->xceiv);
2478 if (status < 0)
2479 goto err_usb_phy_init;
2480
2481 if (use_dma && dev->dma_mask) {
2482 musb->dma_controller =
2483 musb_dma_controller_create(musb, musb->mregs);
2484 if (IS_ERR(musb->dma_controller)) {
2485 status = PTR_ERR(musb->dma_controller);
2486 goto fail2_5;
2487 }
2488 }
2489
2490
2491 musb_platform_disable(musb);
2492 musb_disable_interrupts(musb);
2493 musb_writeb(musb->mregs, MUSB_DEVCTL, 0);
2494
2495
2496 musb_writeb(musb->mregs, MUSB_POWER, 0);
2497
2498
2499 INIT_DELAYED_WORK(&musb->irq_work, musb_irq_work);
2500 INIT_DELAYED_WORK(&musb->deassert_reset_work, musb_deassert_reset);
2501 INIT_DELAYED_WORK(&musb->finish_resume_work, musb_host_finish_resume);
2502
2503
2504 status = musb_core_init(plat->config->multipoint
2505 ? MUSB_CONTROLLER_MHDRC
2506 : MUSB_CONTROLLER_HDRC, musb);
2507 if (status < 0)
2508 goto fail3;
2509
2510 timer_setup(&musb->otg_timer, musb_otg_timer_func, 0);
2511
2512
2513 if (request_irq(nIrq, musb->isr, IRQF_SHARED, dev_name(dev), musb)) {
2514 dev_err(dev, "request_irq %d failed!\n", nIrq);
2515 status = -ENODEV;
2516 goto fail3;
2517 }
2518 musb->nIrq = nIrq;
2519
2520 if (enable_irq_wake(nIrq) == 0) {
2521 musb->irq_wake = 1;
2522 device_init_wakeup(dev, 1);
2523 } else {
2524 musb->irq_wake = 0;
2525 }
2526
2527
2528 if (plat->extvbus) {
2529 u8 busctl = musb_readb(musb->mregs, MUSB_ULPI_BUSCONTROL);
2530 busctl |= MUSB_ULPI_USE_EXTVBUS;
2531 musb_writeb(musb->mregs, MUSB_ULPI_BUSCONTROL, busctl);
2532 }
2533
2534 MUSB_DEV_MODE(musb);
2535 musb->xceiv->otg->state = OTG_STATE_B_IDLE;
2536
2537 switch (musb->port_mode) {
2538 case MUSB_HOST:
2539 status = musb_host_setup(musb, plat->power);
2540 if (status < 0)
2541 goto fail3;
2542 status = musb_platform_set_mode(musb, MUSB_HOST);
2543 break;
2544 case MUSB_PERIPHERAL:
2545 status = musb_gadget_setup(musb);
2546 if (status < 0)
2547 goto fail3;
2548 status = musb_platform_set_mode(musb, MUSB_PERIPHERAL);
2549 break;
2550 case MUSB_OTG:
2551 status = musb_host_setup(musb, plat->power);
2552 if (status < 0)
2553 goto fail3;
2554 status = musb_gadget_setup(musb);
2555 if (status) {
2556 musb_host_cleanup(musb);
2557 goto fail3;
2558 }
2559 status = musb_platform_set_mode(musb, MUSB_OTG);
2560 break;
2561 default:
2562 dev_err(dev, "unsupported port mode %d\n", musb->port_mode);
2563 break;
2564 }
2565
2566 if (status < 0)
2567 goto fail3;
2568
2569 musb_init_debugfs(musb);
2570
2571 musb->is_initialized = 1;
2572 pm_runtime_mark_last_busy(musb->controller);
2573 pm_runtime_put_autosuspend(musb->controller);
2574
2575 return 0;
2576
2577 fail3:
2578 cancel_delayed_work_sync(&musb->irq_work);
2579 cancel_delayed_work_sync(&musb->finish_resume_work);
2580 cancel_delayed_work_sync(&musb->deassert_reset_work);
2581 if (musb->dma_controller)
2582 musb_dma_controller_destroy(musb->dma_controller);
2583
2584 fail2_5:
2585 usb_phy_shutdown(musb->xceiv);
2586
2587 err_usb_phy_init:
2588 pm_runtime_dont_use_autosuspend(musb->controller);
2589 pm_runtime_put_sync(musb->controller);
2590 pm_runtime_disable(musb->controller);
2591
2592 fail2:
2593 if (musb->irq_wake)
2594 device_init_wakeup(dev, 0);
2595 musb_platform_exit(musb);
2596
2597 fail1:
2598 if (status != -EPROBE_DEFER)
2599 dev_err(musb->controller,
2600 "%s failed with status %d\n", __func__, status);
2601
2602 musb_free(musb);
2603
2604 fail0:
2605
2606 return status;
2607
2608 }
2609
2610
2611
2612
2613
2614
2615 static int musb_probe(struct platform_device *pdev)
2616 {
2617 struct device *dev = &pdev->dev;
2618 int irq = platform_get_irq_byname(pdev, "mc");
2619 void __iomem *base;
2620
2621 if (irq <= 0)
2622 return -ENODEV;
2623
2624 base = devm_platform_ioremap_resource(pdev, 0);
2625 if (IS_ERR(base))
2626 return PTR_ERR(base);
2627
2628 return musb_init_controller(dev, irq, base);
2629 }
2630
2631 static int musb_remove(struct platform_device *pdev)
2632 {
2633 struct device *dev = &pdev->dev;
2634 struct musb *musb = dev_to_musb(dev);
2635 unsigned long flags;
2636
2637
2638
2639
2640
2641
2642 musb_exit_debugfs(musb);
2643
2644 cancel_delayed_work_sync(&musb->irq_work);
2645 cancel_delayed_work_sync(&musb->finish_resume_work);
2646 cancel_delayed_work_sync(&musb->deassert_reset_work);
2647 pm_runtime_get_sync(musb->controller);
2648 musb_host_cleanup(musb);
2649 musb_gadget_cleanup(musb);
2650
2651 musb_platform_disable(musb);
2652 spin_lock_irqsave(&musb->lock, flags);
2653 musb_disable_interrupts(musb);
2654 musb_writeb(musb->mregs, MUSB_DEVCTL, 0);
2655 spin_unlock_irqrestore(&musb->lock, flags);
2656 musb_platform_exit(musb);
2657
2658 pm_runtime_dont_use_autosuspend(musb->controller);
2659 pm_runtime_put_sync(musb->controller);
2660 pm_runtime_disable(musb->controller);
2661 musb_phy_callback = NULL;
2662 if (musb->dma_controller)
2663 musb_dma_controller_destroy(musb->dma_controller);
2664 usb_phy_shutdown(musb->xceiv);
2665 musb_free(musb);
2666 device_init_wakeup(dev, 0);
2667 return 0;
2668 }
2669
2670 #ifdef CONFIG_PM
2671
2672 static void musb_save_context(struct musb *musb)
2673 {
2674 int i;
2675 void __iomem *musb_base = musb->mregs;
2676 void __iomem *epio;
2677
2678 musb->context.frame = musb_readw(musb_base, MUSB_FRAME);
2679 musb->context.testmode = musb_readb(musb_base, MUSB_TESTMODE);
2680 musb->context.busctl = musb_readb(musb_base, MUSB_ULPI_BUSCONTROL);
2681 musb->context.power = musb_readb(musb_base, MUSB_POWER);
2682 musb->context.intrusbe = musb_readb(musb_base, MUSB_INTRUSBE);
2683 musb->context.index = musb_readb(musb_base, MUSB_INDEX);
2684 musb->context.devctl = musb_readb(musb_base, MUSB_DEVCTL);
2685
2686 for (i = 0; i < musb->config->num_eps; ++i) {
2687 epio = musb->endpoints[i].regs;
2688 if (!epio)
2689 continue;
2690
2691 musb_writeb(musb_base, MUSB_INDEX, i);
2692 musb->context.index_regs[i].txmaxp =
2693 musb_readw(epio, MUSB_TXMAXP);
2694 musb->context.index_regs[i].txcsr =
2695 musb_readw(epio, MUSB_TXCSR);
2696 musb->context.index_regs[i].rxmaxp =
2697 musb_readw(epio, MUSB_RXMAXP);
2698 musb->context.index_regs[i].rxcsr =
2699 musb_readw(epio, MUSB_RXCSR);
2700
2701 if (musb->dyn_fifo) {
2702 musb->context.index_regs[i].txfifoadd =
2703 musb_readw(musb_base, MUSB_TXFIFOADD);
2704 musb->context.index_regs[i].rxfifoadd =
2705 musb_readw(musb_base, MUSB_RXFIFOADD);
2706 musb->context.index_regs[i].txfifosz =
2707 musb_readb(musb_base, MUSB_TXFIFOSZ);
2708 musb->context.index_regs[i].rxfifosz =
2709 musb_readb(musb_base, MUSB_RXFIFOSZ);
2710 }
2711
2712 musb->context.index_regs[i].txtype =
2713 musb_readb(epio, MUSB_TXTYPE);
2714 musb->context.index_regs[i].txinterval =
2715 musb_readb(epio, MUSB_TXINTERVAL);
2716 musb->context.index_regs[i].rxtype =
2717 musb_readb(epio, MUSB_RXTYPE);
2718 musb->context.index_regs[i].rxinterval =
2719 musb_readb(epio, MUSB_RXINTERVAL);
2720
2721 musb->context.index_regs[i].txfunaddr =
2722 musb_read_txfunaddr(musb, i);
2723 musb->context.index_regs[i].txhubaddr =
2724 musb_read_txhubaddr(musb, i);
2725 musb->context.index_regs[i].txhubport =
2726 musb_read_txhubport(musb, i);
2727
2728 musb->context.index_regs[i].rxfunaddr =
2729 musb_read_rxfunaddr(musb, i);
2730 musb->context.index_regs[i].rxhubaddr =
2731 musb_read_rxhubaddr(musb, i);
2732 musb->context.index_regs[i].rxhubport =
2733 musb_read_rxhubport(musb, i);
2734 }
2735 }
2736
2737 static void musb_restore_context(struct musb *musb)
2738 {
2739 int i;
2740 void __iomem *musb_base = musb->mregs;
2741 void __iomem *epio;
2742 u8 power;
2743
2744 musb_writew(musb_base, MUSB_FRAME, musb->context.frame);
2745 musb_writeb(musb_base, MUSB_TESTMODE, musb->context.testmode);
2746 musb_writeb(musb_base, MUSB_ULPI_BUSCONTROL, musb->context.busctl);
2747
2748
2749 power = musb_readb(musb_base, MUSB_POWER);
2750 power &= MUSB_POWER_SUSPENDM | MUSB_POWER_RESUME;
2751 musb->context.power &= ~(MUSB_POWER_SUSPENDM | MUSB_POWER_RESUME);
2752 power |= musb->context.power;
2753 musb_writeb(musb_base, MUSB_POWER, power);
2754
2755 musb_writew(musb_base, MUSB_INTRTXE, musb->intrtxe);
2756 musb_writew(musb_base, MUSB_INTRRXE, musb->intrrxe);
2757 musb_writeb(musb_base, MUSB_INTRUSBE, musb->context.intrusbe);
2758 if (musb->context.devctl & MUSB_DEVCTL_SESSION)
2759 musb_writeb(musb_base, MUSB_DEVCTL, musb->context.devctl);
2760
2761 for (i = 0; i < musb->config->num_eps; ++i) {
2762 epio = musb->endpoints[i].regs;
2763 if (!epio)
2764 continue;
2765
2766 musb_writeb(musb_base, MUSB_INDEX, i);
2767 musb_writew(epio, MUSB_TXMAXP,
2768 musb->context.index_regs[i].txmaxp);
2769 musb_writew(epio, MUSB_TXCSR,
2770 musb->context.index_regs[i].txcsr);
2771 musb_writew(epio, MUSB_RXMAXP,
2772 musb->context.index_regs[i].rxmaxp);
2773 musb_writew(epio, MUSB_RXCSR,
2774 musb->context.index_regs[i].rxcsr);
2775
2776 if (musb->dyn_fifo) {
2777 musb_writeb(musb_base, MUSB_TXFIFOSZ,
2778 musb->context.index_regs[i].txfifosz);
2779 musb_writeb(musb_base, MUSB_RXFIFOSZ,
2780 musb->context.index_regs[i].rxfifosz);
2781 musb_writew(musb_base, MUSB_TXFIFOADD,
2782 musb->context.index_regs[i].txfifoadd);
2783 musb_writew(musb_base, MUSB_RXFIFOADD,
2784 musb->context.index_regs[i].rxfifoadd);
2785 }
2786
2787 musb_writeb(epio, MUSB_TXTYPE,
2788 musb->context.index_regs[i].txtype);
2789 musb_writeb(epio, MUSB_TXINTERVAL,
2790 musb->context.index_regs[i].txinterval);
2791 musb_writeb(epio, MUSB_RXTYPE,
2792 musb->context.index_regs[i].rxtype);
2793 musb_writeb(epio, MUSB_RXINTERVAL,
2794
2795 musb->context.index_regs[i].rxinterval);
2796 musb_write_txfunaddr(musb, i,
2797 musb->context.index_regs[i].txfunaddr);
2798 musb_write_txhubaddr(musb, i,
2799 musb->context.index_regs[i].txhubaddr);
2800 musb_write_txhubport(musb, i,
2801 musb->context.index_regs[i].txhubport);
2802
2803 musb_write_rxfunaddr(musb, i,
2804 musb->context.index_regs[i].rxfunaddr);
2805 musb_write_rxhubaddr(musb, i,
2806 musb->context.index_regs[i].rxhubaddr);
2807 musb_write_rxhubport(musb, i,
2808 musb->context.index_regs[i].rxhubport);
2809 }
2810 musb_writeb(musb_base, MUSB_INDEX, musb->context.index);
2811 }
2812
2813 static int musb_suspend(struct device *dev)
2814 {
2815 struct musb *musb = dev_to_musb(dev);
2816 unsigned long flags;
2817 int ret;
2818
2819 ret = pm_runtime_get_sync(dev);
2820 if (ret < 0) {
2821 pm_runtime_put_noidle(dev);
2822 return ret;
2823 }
2824
2825 musb_platform_disable(musb);
2826 musb_disable_interrupts(musb);
2827
2828 musb->flush_irq_work = true;
2829 while (flush_delayed_work(&musb->irq_work))
2830 ;
2831 musb->flush_irq_work = false;
2832
2833 if (!(musb->ops->quirks & MUSB_PRESERVE_SESSION))
2834 musb_writeb(musb->mregs, MUSB_DEVCTL, 0);
2835
2836 WARN_ON(!list_empty(&musb->pending_list));
2837
2838 spin_lock_irqsave(&musb->lock, flags);
2839
2840 if (is_peripheral_active(musb)) {
2841
2842
2843
2844 } else if (is_host_active(musb)) {
2845
2846
2847
2848 }
2849
2850 musb_save_context(musb);
2851
2852 spin_unlock_irqrestore(&musb->lock, flags);
2853 return 0;
2854 }
2855
2856 static int musb_resume(struct device *dev)
2857 {
2858 struct musb *musb = dev_to_musb(dev);
2859 unsigned long flags;
2860 int error;
2861 u8 devctl;
2862 u8 mask;
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874 musb_restore_context(musb);
2875
2876 devctl = musb_readb(musb->mregs, MUSB_DEVCTL);
2877 mask = MUSB_DEVCTL_BDEVICE | MUSB_DEVCTL_FSDEV | MUSB_DEVCTL_LSDEV;
2878 if ((devctl & mask) != (musb->context.devctl & mask))
2879 musb->port1_status = 0;
2880
2881 musb_enable_interrupts(musb);
2882 musb_platform_enable(musb);
2883
2884
2885 if (musb->port_mode == MUSB_HOST &&
2886 !(musb->ops->quirks & MUSB_PRESERVE_SESSION)) {
2887 devctl |= MUSB_DEVCTL_SESSION;
2888 musb_writeb(musb->mregs, MUSB_DEVCTL, devctl);
2889 }
2890
2891 spin_lock_irqsave(&musb->lock, flags);
2892 error = musb_run_resume_work(musb);
2893 if (error)
2894 dev_err(musb->controller, "resume work failed with %i\n",
2895 error);
2896 spin_unlock_irqrestore(&musb->lock, flags);
2897
2898 pm_runtime_mark_last_busy(dev);
2899 pm_runtime_put_autosuspend(dev);
2900
2901 return 0;
2902 }
2903
2904 static int musb_runtime_suspend(struct device *dev)
2905 {
2906 struct musb *musb = dev_to_musb(dev);
2907
2908 musb_save_context(musb);
2909 musb->is_runtime_suspended = 1;
2910
2911 return 0;
2912 }
2913
2914 static int musb_runtime_resume(struct device *dev)
2915 {
2916 struct musb *musb = dev_to_musb(dev);
2917 unsigned long flags;
2918 int error;
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929 if (!musb->is_initialized)
2930 return 0;
2931
2932 musb_restore_context(musb);
2933
2934 spin_lock_irqsave(&musb->lock, flags);
2935 error = musb_run_resume_work(musb);
2936 if (error)
2937 dev_err(musb->controller, "resume work failed with %i\n",
2938 error);
2939 musb->is_runtime_suspended = 0;
2940 spin_unlock_irqrestore(&musb->lock, flags);
2941
2942 return 0;
2943 }
2944
2945 static const struct dev_pm_ops musb_dev_pm_ops = {
2946 .suspend = musb_suspend,
2947 .resume = musb_resume,
2948 .runtime_suspend = musb_runtime_suspend,
2949 .runtime_resume = musb_runtime_resume,
2950 };
2951
2952 #define MUSB_DEV_PM_OPS (&musb_dev_pm_ops)
2953 #else
2954 #define MUSB_DEV_PM_OPS NULL
2955 #endif
2956
2957 static struct platform_driver musb_driver = {
2958 .driver = {
2959 .name = musb_driver_name,
2960 .bus = &platform_bus_type,
2961 .pm = MUSB_DEV_PM_OPS,
2962 .dev_groups = musb_groups,
2963 },
2964 .probe = musb_probe,
2965 .remove = musb_remove,
2966 };
2967
2968 module_platform_driver(musb_driver);