2 * driver/usb/gadget/imx_udc.c
4 * Copyright (C) 2005 Mike Lee <eemike@gmail.com>
5 * Copyright (C) 2008 Darius Augulis <augulis.darius@gmail.com>
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
18 #include <linux/init.h>
19 #include <linux/kernel.h>
20 #include <linux/platform_device.h>
21 #include <linux/module.h>
22 #include <linux/errno.h>
23 #include <linux/list.h>
24 #include <linux/interrupt.h>
26 #include <linux/irq.h>
27 #include <linux/device.h>
28 #include <linux/dma-mapping.h>
29 #include <linux/clk.h>
30 #include <linux/delay.h>
31 #include <linux/timer.h>
32 #include <linux/slab.h>
34 #include <linux/usb/ch9.h>
35 #include <linux/usb/gadget.h>
38 #include <mach/hardware.h>
42 static const char driver_name
[] = "imx_udc";
43 static const char ep0name
[] = "ep0";
45 void ep0_chg_stat(const char *label
, struct imx_udc_struct
*imx_usb
,
48 /*******************************************************************************
49 * IMX UDC hardware related functions
50 *******************************************************************************
53 void imx_udc_enable(struct imx_udc_struct
*imx_usb
)
55 int temp
= __raw_readl(imx_usb
->base
+ USB_CTRL
);
56 __raw_writel(temp
| CTRL_FE_ENA
| CTRL_AFE_ENA
,
57 imx_usb
->base
+ USB_CTRL
);
58 imx_usb
->gadget
.speed
= USB_SPEED_FULL
;
61 void imx_udc_disable(struct imx_udc_struct
*imx_usb
)
63 int temp
= __raw_readl(imx_usb
->base
+ USB_CTRL
);
65 __raw_writel(temp
& ~(CTRL_FE_ENA
| CTRL_AFE_ENA
),
66 imx_usb
->base
+ USB_CTRL
);
68 ep0_chg_stat(__func__
, imx_usb
, EP0_IDLE
);
69 imx_usb
->gadget
.speed
= USB_SPEED_UNKNOWN
;
72 void imx_udc_reset(struct imx_udc_struct
*imx_usb
)
74 int temp
= __raw_readl(imx_usb
->base
+ USB_ENAB
);
77 __raw_writel(temp
| ENAB_RST
, imx_usb
->base
+ USB_ENAB
);
79 /* wait RST bit to clear */
80 do {} while (__raw_readl(imx_usb
->base
+ USB_ENAB
) & ENAB_RST
);
82 /* wait CFG bit to assert */
83 do {} while (!(__raw_readl(imx_usb
->base
+ USB_DADR
) & DADR_CFG
));
85 /* udc module is now ready */
88 void imx_udc_config(struct imx_udc_struct
*imx_usb
)
92 struct imx_ep_struct
*imx_ep
;
94 /* wait CFG bit to assert */
95 do {} while (!(__raw_readl(imx_usb
->base
+ USB_DADR
) & DADR_CFG
));
97 /* Download the endpoint buffer for endpoint 0. */
98 for (j
= 0; j
< 5; j
++) {
99 i
= (j
== 2 ? imx_usb
->imx_ep
[0].fifosize
: 0x00);
100 __raw_writeb(i
, imx_usb
->base
+ USB_DDAT
);
101 do {} while (__raw_readl(imx_usb
->base
+ USB_DADR
) & DADR_BSY
);
104 /* Download the endpoint buffers for endpoints 1-5.
105 * We specify two configurations, one interface
107 for (cfg
= 1; cfg
< 3; cfg
++) {
108 for (i
= 1; i
< IMX_USB_NB_EP
; i
++) {
109 imx_ep
= &imx_usb
->imx_ep
[i
];
110 /* EP no | Config no */
111 ep_conf
[0] = (i
<< 4) | (cfg
<< 2);
112 /* Type | Direction */
113 ep_conf
[1] = (imx_ep
->bmAttributes
<< 3) |
114 (EP_DIR(imx_ep
) << 2);
115 /* Max packet size */
116 ep_conf
[2] = imx_ep
->fifosize
;
123 "<%s> ep%d_conf[%d]:"
124 "[%02x-%02x-%02x-%02x-%02x]\n",
126 ep_conf
[0], ep_conf
[1], ep_conf
[2],
127 ep_conf
[3], ep_conf
[4]);
129 for (j
= 0; j
< 5; j
++) {
130 __raw_writeb(ep_conf
[j
],
131 imx_usb
->base
+ USB_DDAT
);
132 do {} while (__raw_readl(imx_usb
->base
139 /* wait CFG bit to clear */
140 do {} while (__raw_readl(imx_usb
->base
+ USB_DADR
) & DADR_CFG
);
143 void imx_udc_init_irq(struct imx_udc_struct
*imx_usb
)
147 /* Mask and clear all irqs */
148 __raw_writel(0xFFFFFFFF, imx_usb
->base
+ USB_MASK
);
149 __raw_writel(0xFFFFFFFF, imx_usb
->base
+ USB_INTR
);
150 for (i
= 0; i
< IMX_USB_NB_EP
; i
++) {
151 __raw_writel(0x1FF, imx_usb
->base
+ USB_EP_MASK(i
));
152 __raw_writel(0x1FF, imx_usb
->base
+ USB_EP_INTR(i
));
155 /* Enable USB irqs */
156 __raw_writel(INTR_MSOF
| INTR_FRAME_MATCH
, imx_usb
->base
+ USB_MASK
);
158 /* Enable EP0 irqs */
159 __raw_writel(0x1FF & ~(EPINTR_DEVREQ
| EPINTR_MDEVREQ
| EPINTR_EOT
160 | EPINTR_EOF
| EPINTR_FIFO_EMPTY
| EPINTR_FIFO_FULL
),
161 imx_usb
->base
+ USB_EP_MASK(0));
164 void imx_udc_init_ep(struct imx_udc_struct
*imx_usb
)
167 struct imx_ep_struct
*imx_ep
;
168 for (i
= 0; i
< IMX_USB_NB_EP
; i
++) {
169 imx_ep
= &imx_usb
->imx_ep
[i
];
170 switch (imx_ep
->fifosize
) {
187 temp
= (EP_DIR(imx_ep
) << 7) | (max
<< 5)
188 | (imx_ep
->bmAttributes
<< 3);
189 __raw_writel(temp
, imx_usb
->base
+ USB_EP_STAT(i
));
190 __raw_writel(temp
| EPSTAT_FLUSH
,
191 imx_usb
->base
+ USB_EP_STAT(i
));
192 D_INI(imx_usb
->dev
, "<%s> ep%d_stat %08x\n", __func__
, i
,
193 __raw_readl(imx_usb
->base
+ USB_EP_STAT(i
)));
197 void imx_udc_init_fifo(struct imx_udc_struct
*imx_usb
)
200 struct imx_ep_struct
*imx_ep
;
201 for (i
= 0; i
< IMX_USB_NB_EP
; i
++) {
202 imx_ep
= &imx_usb
->imx_ep
[i
];
205 temp
= EP_DIR(imx_ep
) ? 0x0B000000 : 0x0F000000;
206 __raw_writel(temp
, imx_usb
->base
+ USB_EP_FCTRL(i
));
207 D_INI(imx_usb
->dev
, "<%s> ep%d_fctrl %08x\n", __func__
, i
,
208 __raw_readl(imx_usb
->base
+ USB_EP_FCTRL(i
)));
211 temp
= (i
? imx_ep
->fifosize
/ 2 : 0);
212 __raw_writel(temp
, imx_usb
->base
+ USB_EP_FALRM(i
));
213 D_INI(imx_usb
->dev
, "<%s> ep%d_falrm %08x\n", __func__
, i
,
214 __raw_readl(imx_usb
->base
+ USB_EP_FALRM(i
)));
218 static void imx_udc_init(struct imx_udc_struct
*imx_usb
)
221 imx_udc_reset(imx_usb
);
223 /* Download config to enpoint buffer */
224 imx_udc_config(imx_usb
);
226 /* Setup interrups */
227 imx_udc_init_irq(imx_usb
);
229 /* Setup endpoints */
230 imx_udc_init_ep(imx_usb
);
233 imx_udc_init_fifo(imx_usb
);
236 void imx_ep_irq_enable(struct imx_ep_struct
*imx_ep
)
239 int i
= EP_NO(imx_ep
);
241 __raw_writel(0x1FF, imx_ep
->imx_usb
->base
+ USB_EP_MASK(i
));
242 __raw_writel(0x1FF, imx_ep
->imx_usb
->base
+ USB_EP_INTR(i
));
243 __raw_writel(0x1FF & ~(EPINTR_EOT
| EPINTR_EOF
),
244 imx_ep
->imx_usb
->base
+ USB_EP_MASK(i
));
247 void imx_ep_irq_disable(struct imx_ep_struct
*imx_ep
)
250 int i
= EP_NO(imx_ep
);
252 __raw_writel(0x1FF, imx_ep
->imx_usb
->base
+ USB_EP_MASK(i
));
253 __raw_writel(0x1FF, imx_ep
->imx_usb
->base
+ USB_EP_INTR(i
));
256 int imx_ep_empty(struct imx_ep_struct
*imx_ep
)
258 struct imx_udc_struct
*imx_usb
= imx_ep
->imx_usb
;
260 return __raw_readl(imx_usb
->base
+ USB_EP_FSTAT(EP_NO(imx_ep
)))
264 unsigned imx_fifo_bcount(struct imx_ep_struct
*imx_ep
)
266 struct imx_udc_struct
*imx_usb
= imx_ep
->imx_usb
;
268 return (__raw_readl(imx_usb
->base
+ USB_EP_STAT(EP_NO(imx_ep
)))
269 & EPSTAT_BCOUNT
) >> 16;
272 void imx_flush(struct imx_ep_struct
*imx_ep
)
274 struct imx_udc_struct
*imx_usb
= imx_ep
->imx_usb
;
276 int temp
= __raw_readl(imx_usb
->base
+ USB_EP_STAT(EP_NO(imx_ep
)));
277 __raw_writel(temp
| EPSTAT_FLUSH
,
278 imx_usb
->base
+ USB_EP_STAT(EP_NO(imx_ep
)));
281 void imx_ep_stall(struct imx_ep_struct
*imx_ep
)
283 struct imx_udc_struct
*imx_usb
= imx_ep
->imx_usb
;
287 "<%s> Forced stall on %s\n", __func__
, imx_ep
->ep
.name
);
291 /* Special care for ep0 */
292 if (!EP_NO(imx_ep
)) {
293 temp
= __raw_readl(imx_usb
->base
+ USB_CTRL
);
294 __raw_writel(temp
| CTRL_CMDOVER
| CTRL_CMDERROR
,
295 imx_usb
->base
+ USB_CTRL
);
296 do { } while (__raw_readl(imx_usb
->base
+ USB_CTRL
)
298 temp
= __raw_readl(imx_usb
->base
+ USB_CTRL
);
299 __raw_writel(temp
& ~CTRL_CMDERROR
, imx_usb
->base
+ USB_CTRL
);
302 temp
= __raw_readl(imx_usb
->base
+ USB_EP_STAT(EP_NO(imx_ep
)));
303 __raw_writel(temp
| EPSTAT_STALL
,
304 imx_usb
->base
+ USB_EP_STAT(EP_NO(imx_ep
)));
306 for (i
= 0; i
< 100; i
++) {
307 temp
= __raw_readl(imx_usb
->base
308 + USB_EP_STAT(EP_NO(imx_ep
)));
309 if (!(temp
& EPSTAT_STALL
))
314 D_ERR(imx_usb
->dev
, "<%s> Non finished stall on %s\n",
315 __func__
, imx_ep
->ep
.name
);
319 static int imx_udc_get_frame(struct usb_gadget
*_gadget
)
321 struct imx_udc_struct
*imx_usb
= container_of(_gadget
,
322 struct imx_udc_struct
, gadget
);
324 return __raw_readl(imx_usb
->base
+ USB_FRAME
) & 0x7FF;
327 static int imx_udc_wakeup(struct usb_gadget
*_gadget
)
332 /*******************************************************************************
333 * USB request control functions
334 *******************************************************************************
337 static void ep_add_request(struct imx_ep_struct
*imx_ep
,
338 struct imx_request
*req
)
344 list_add_tail(&req
->queue
, &imx_ep
->queue
);
347 static void ep_del_request(struct imx_ep_struct
*imx_ep
,
348 struct imx_request
*req
)
353 list_del_init(&req
->queue
);
357 static void done(struct imx_ep_struct
*imx_ep
,
358 struct imx_request
*req
, int status
)
360 ep_del_request(imx_ep
, req
);
362 if (likely(req
->req
.status
== -EINPROGRESS
))
363 req
->req
.status
= status
;
365 status
= req
->req
.status
;
367 if (status
&& status
!= -ESHUTDOWN
)
368 D_ERR(imx_ep
->imx_usb
->dev
,
369 "<%s> complete %s req %p stat %d len %u/%u\n", __func__
,
370 imx_ep
->ep
.name
, &req
->req
, status
,
371 req
->req
.actual
, req
->req
.length
);
373 req
->req
.complete(&imx_ep
->ep
, &req
->req
);
376 static void nuke(struct imx_ep_struct
*imx_ep
, int status
)
378 struct imx_request
*req
;
380 while (!list_empty(&imx_ep
->queue
)) {
381 req
= list_entry(imx_ep
->queue
.next
, struct imx_request
, queue
);
382 done(imx_ep
, req
, status
);
386 /*******************************************************************************
387 * Data tansfer over USB functions
388 *******************************************************************************
390 static int read_packet(struct imx_ep_struct
*imx_ep
, struct imx_request
*req
)
393 int bytes_ep
, bufferspace
, count
, i
;
395 bytes_ep
= imx_fifo_bcount(imx_ep
);
396 bufferspace
= req
->req
.length
- req
->req
.actual
;
398 buf
= req
->req
.buf
+ req
->req
.actual
;
401 if (unlikely(imx_ep_empty(imx_ep
)))
404 count
= min(bytes_ep
, bufferspace
);
406 for (i
= count
; i
> 0; i
--)
407 *buf
++ = __raw_readb(imx_ep
->imx_usb
->base
408 + USB_EP_FDAT0(EP_NO(imx_ep
)));
409 req
->req
.actual
+= count
;
414 static int write_packet(struct imx_ep_struct
*imx_ep
, struct imx_request
*req
)
417 int length
, count
, temp
;
419 if (unlikely(__raw_readl(imx_ep
->imx_usb
->base
+
420 USB_EP_STAT(EP_NO(imx_ep
))) & EPSTAT_ZLPS
)) {
421 D_TRX(imx_ep
->imx_usb
->dev
, "<%s> zlp still queued in EP %s\n",
422 __func__
, imx_ep
->ep
.name
);
426 buf
= req
->req
.buf
+ req
->req
.actual
;
429 length
= min(req
->req
.length
- req
->req
.actual
, (u32
)imx_ep
->fifosize
);
431 if (imx_fifo_bcount(imx_ep
) + length
> imx_ep
->fifosize
) {
432 D_TRX(imx_ep
->imx_usb
->dev
, "<%s> packet overfill %s fifo\n",
433 __func__
, imx_ep
->ep
.name
);
437 req
->req
.actual
+= length
;
440 if (!count
&& req
->req
.zero
) { /* zlp */
441 temp
= __raw_readl(imx_ep
->imx_usb
->base
442 + USB_EP_STAT(EP_NO(imx_ep
)));
443 __raw_writel(temp
| EPSTAT_ZLPS
, imx_ep
->imx_usb
->base
444 + USB_EP_STAT(EP_NO(imx_ep
)));
445 D_TRX(imx_ep
->imx_usb
->dev
, "<%s> zero packet\n", __func__
);
450 if (count
== 0) { /* last byte */
451 temp
= __raw_readl(imx_ep
->imx_usb
->base
452 + USB_EP_FCTRL(EP_NO(imx_ep
)));
453 __raw_writel(temp
| FCTRL_WFR
, imx_ep
->imx_usb
->base
454 + USB_EP_FCTRL(EP_NO(imx_ep
)));
457 imx_ep
->imx_usb
->base
+ USB_EP_FDAT0(EP_NO(imx_ep
)));
463 static int read_fifo(struct imx_ep_struct
*imx_ep
, struct imx_request
*req
)
469 while (__raw_readl(imx_ep
->imx_usb
->base
+ USB_EP_FSTAT(EP_NO(imx_ep
)))
471 count
= read_packet(imx_ep
, req
);
474 completed
= (count
!= imx_ep
->fifosize
);
475 if (completed
|| req
->req
.actual
== req
->req
.length
) {
481 if (completed
|| !req
->req
.length
) {
482 done(imx_ep
, req
, 0);
483 D_REQ(imx_ep
->imx_usb
->dev
, "<%s> %s req<%p> %s\n",
484 __func__
, imx_ep
->ep
.name
, req
,
485 completed
? "completed" : "not completed");
487 ep0_chg_stat(__func__
, imx_ep
->imx_usb
, EP0_IDLE
);
490 D_TRX(imx_ep
->imx_usb
->dev
, "<%s> bytes read: %d\n", __func__
, bytes
);
495 static int write_fifo(struct imx_ep_struct
*imx_ep
, struct imx_request
*req
)
502 count
= write_packet(imx_ep
, req
);
507 /* last packet "must be" short (or a zlp) */
508 completed
= (count
!= imx_ep
->fifosize
);
510 if (unlikely(completed
)) {
511 done(imx_ep
, req
, 0);
512 D_REQ(imx_ep
->imx_usb
->dev
, "<%s> %s req<%p> %s\n",
513 __func__
, imx_ep
->ep
.name
, req
,
514 completed
? "completed" : "not completed");
516 ep0_chg_stat(__func__
,
517 imx_ep
->imx_usb
, EP0_IDLE
);
521 D_TRX(imx_ep
->imx_usb
->dev
, "<%s> bytes sent: %d\n", __func__
, bytes
);
526 /*******************************************************************************
528 *******************************************************************************
530 static int handle_ep(struct imx_ep_struct
*imx_ep
)
532 struct imx_request
*req
;
536 if (!list_empty(&imx_ep
->queue
))
537 req
= list_entry(imx_ep
->queue
.next
,
538 struct imx_request
, queue
);
540 D_REQ(imx_ep
->imx_usb
->dev
, "<%s> no request on %s\n",
541 __func__
, imx_ep
->ep
.name
);
545 if (EP_DIR(imx_ep
)) /* to host */
546 completed
= write_fifo(imx_ep
, req
);
548 completed
= read_fifo(imx_ep
, req
);
550 dump_ep_stat(__func__
, imx_ep
);
557 static int handle_ep0(struct imx_ep_struct
*imx_ep
)
559 struct imx_request
*req
= NULL
;
562 if (!list_empty(&imx_ep
->queue
)) {
563 req
= list_entry(imx_ep
->queue
.next
, struct imx_request
, queue
);
565 switch (imx_ep
->imx_usb
->ep0state
) {
567 case EP0_IN_DATA_PHASE
: /* GET_DESCRIPTOR */
568 write_fifo(imx_ep
, req
);
570 case EP0_OUT_DATA_PHASE
: /* SET_DESCRIPTOR */
571 read_fifo(imx_ep
, req
);
574 D_EP0(imx_ep
->imx_usb
->dev
,
575 "<%s> ep0 i/o, odd state %d\n",
576 __func__
, imx_ep
->imx_usb
->ep0state
);
577 ep_del_request(imx_ep
, req
);
584 D_ERR(imx_ep
->imx_usb
->dev
, "<%s> no request on %s\n",
585 __func__
, imx_ep
->ep
.name
);
590 static void handle_ep0_devreq(struct imx_udc_struct
*imx_usb
)
592 struct imx_ep_struct
*imx_ep
= &imx_usb
->imx_ep
[0];
594 struct usb_ctrlrequest r
;
600 nuke(imx_ep
, -EPROTO
);
602 /* read SETUP packet */
603 for (i
= 0; i
< 2; i
++) {
604 if (imx_ep_empty(imx_ep
)) {
606 "<%s> no setup packet received\n", __func__
);
609 u
.word
[i
] = __raw_readl(imx_usb
->base
610 + USB_EP_FDAT(EP_NO(imx_ep
)));
613 temp
= imx_ep_empty(imx_ep
);
614 while (!imx_ep_empty(imx_ep
)) {
615 i
= __raw_readl(imx_usb
->base
+ USB_EP_FDAT(EP_NO(imx_ep
)));
617 "<%s> wrong to have extra bytes for setup : 0x%08x\n",
623 le16_to_cpus(&u
.r
.wValue
);
624 le16_to_cpus(&u
.r
.wIndex
);
625 le16_to_cpus(&u
.r
.wLength
);
627 D_REQ(imx_usb
->dev
, "<%s> SETUP %02x.%02x v%04x i%04x l%04x\n",
628 __func__
, u
.r
.bRequestType
, u
.r
.bRequest
,
629 u
.r
.wValue
, u
.r
.wIndex
, u
.r
.wLength
);
631 if (imx_usb
->set_config
) {
632 /* NACK the host by using CMDOVER */
633 temp
= __raw_readl(imx_usb
->base
+ USB_CTRL
);
634 __raw_writel(temp
| CTRL_CMDOVER
, imx_usb
->base
+ USB_CTRL
);
637 "<%s> set config req is pending, NACK the host\n",
642 if (u
.r
.bRequestType
& USB_DIR_IN
)
643 ep0_chg_stat(__func__
, imx_usb
, EP0_IN_DATA_PHASE
);
645 ep0_chg_stat(__func__
, imx_usb
, EP0_OUT_DATA_PHASE
);
647 i
= imx_usb
->driver
->setup(&imx_usb
->gadget
, &u
.r
);
649 D_ERR(imx_usb
->dev
, "<%s> device setup error %d\n",
656 D_ERR(imx_usb
->dev
, "<%s> protocol STALL\n", __func__
);
657 imx_ep_stall(imx_ep
);
658 ep0_chg_stat(__func__
, imx_usb
, EP0_STALL
);
662 /*******************************************************************************
663 * USB gadget callback functions
664 *******************************************************************************
667 static int imx_ep_enable(struct usb_ep
*usb_ep
,
668 const struct usb_endpoint_descriptor
*desc
)
670 struct imx_ep_struct
*imx_ep
= container_of(usb_ep
,
671 struct imx_ep_struct
, ep
);
672 struct imx_udc_struct
*imx_usb
= imx_ep
->imx_usb
;
678 || desc
->bDescriptorType
!= USB_DT_ENDPOINT
679 || imx_ep
->bEndpointAddress
!= desc
->bEndpointAddress
) {
681 "<%s> bad ep or descriptor\n", __func__
);
685 if (imx_ep
->bmAttributes
!= desc
->bmAttributes
) {
687 "<%s> %s type mismatch\n", __func__
, usb_ep
->name
);
691 if (imx_ep
->fifosize
< le16_to_cpu(desc
->wMaxPacketSize
)) {
693 "<%s> bad %s maxpacket\n", __func__
, usb_ep
->name
);
697 if (!imx_usb
->driver
|| imx_usb
->gadget
.speed
== USB_SPEED_UNKNOWN
) {
698 D_ERR(imx_usb
->dev
, "<%s> bogus device state\n", __func__
);
702 local_irq_save(flags
);
706 imx_ep_irq_enable(imx_ep
);
708 local_irq_restore(flags
);
710 D_EPX(imx_usb
->dev
, "<%s> ENABLED %s\n", __func__
, usb_ep
->name
);
714 static int imx_ep_disable(struct usb_ep
*usb_ep
)
716 struct imx_ep_struct
*imx_ep
= container_of(usb_ep
,
717 struct imx_ep_struct
, ep
);
720 if (!usb_ep
|| !EP_NO(imx_ep
) || !list_empty(&imx_ep
->queue
)) {
721 D_ERR(imx_ep
->imx_usb
->dev
, "<%s> %s can not be disabled\n",
722 __func__
, usb_ep
? imx_ep
->ep
.name
: NULL
);
726 local_irq_save(flags
);
729 nuke(imx_ep
, -ESHUTDOWN
);
731 imx_ep_irq_disable(imx_ep
);
733 local_irq_restore(flags
);
735 D_EPX(imx_ep
->imx_usb
->dev
,
736 "<%s> DISABLED %s\n", __func__
, usb_ep
->name
);
740 static struct usb_request
*imx_ep_alloc_request
741 (struct usb_ep
*usb_ep
, gfp_t gfp_flags
)
743 struct imx_request
*req
;
748 req
= kzalloc(sizeof *req
, gfp_flags
);
752 INIT_LIST_HEAD(&req
->queue
);
758 static void imx_ep_free_request
759 (struct usb_ep
*usb_ep
, struct usb_request
*usb_req
)
761 struct imx_request
*req
;
763 req
= container_of(usb_req
, struct imx_request
, req
);
764 WARN_ON(!list_empty(&req
->queue
));
768 static int imx_ep_queue
769 (struct usb_ep
*usb_ep
, struct usb_request
*usb_req
, gfp_t gfp_flags
)
771 struct imx_ep_struct
*imx_ep
;
772 struct imx_udc_struct
*imx_usb
;
773 struct imx_request
*req
;
777 imx_ep
= container_of(usb_ep
, struct imx_ep_struct
, ep
);
778 imx_usb
= imx_ep
->imx_usb
;
779 req
= container_of(usb_req
, struct imx_request
, req
);
782 Special care on IMX udc.
783 Ignore enqueue when after set configuration from the
784 host. This assume all gadget drivers reply set
785 configuration with the next ep0 req enqueue.
787 if (imx_usb
->set_config
&& !EP_NO(imx_ep
)) {
788 imx_usb
->set_config
= 0;
790 "<%s> gadget reply set config\n", __func__
);
794 if (unlikely(!usb_req
|| !req
|| !usb_req
->complete
|| !usb_req
->buf
)) {
795 D_ERR(imx_usb
->dev
, "<%s> bad params\n", __func__
);
799 if (unlikely(!usb_ep
|| !imx_ep
)) {
800 D_ERR(imx_usb
->dev
, "<%s> bad ep\n", __func__
);
804 if (!imx_usb
->driver
|| imx_usb
->gadget
.speed
== USB_SPEED_UNKNOWN
) {
805 D_ERR(imx_usb
->dev
, "<%s> bogus device state\n", __func__
);
810 D_REQ(imx_usb
->dev
, "<%s> ep%d %s request for [%d] bytes\n",
811 __func__
, EP_NO(imx_ep
),
812 ((!EP_NO(imx_ep
) && imx_ep
->imx_usb
->ep0state
813 == EP0_IN_DATA_PHASE
)
814 || (EP_NO(imx_ep
) && EP_DIR(imx_ep
)))
815 ? "IN" : "OUT", usb_req
->length
);
816 dump_req(__func__
, imx_ep
, usb_req
);
818 if (imx_ep
->stopped
) {
819 usb_req
->status
= -ESHUTDOWN
;
825 "<%s> refusing to queue req %p (already queued)\n",
830 local_irq_save(flags
);
832 usb_req
->status
= -EINPROGRESS
;
835 ep_add_request(imx_ep
, req
);
838 ret
= handle_ep0(imx_ep
);
840 ret
= handle_ep(imx_ep
);
842 local_irq_restore(flags
);
846 static int imx_ep_dequeue(struct usb_ep
*usb_ep
, struct usb_request
*usb_req
)
849 struct imx_ep_struct
*imx_ep
= container_of
850 (usb_ep
, struct imx_ep_struct
, ep
);
851 struct imx_request
*req
;
854 if (unlikely(!usb_ep
|| !EP_NO(imx_ep
))) {
855 D_ERR(imx_ep
->imx_usb
->dev
, "<%s> bad ep\n", __func__
);
859 local_irq_save(flags
);
861 /* make sure it's actually queued on this endpoint */
862 list_for_each_entry(req
, &imx_ep
->queue
, queue
) {
863 if (&req
->req
== usb_req
)
866 if (&req
->req
!= usb_req
) {
867 local_irq_restore(flags
);
871 done(imx_ep
, req
, -ECONNRESET
);
873 local_irq_restore(flags
);
877 static int imx_ep_set_halt(struct usb_ep
*usb_ep
, int value
)
879 struct imx_ep_struct
*imx_ep
= container_of
880 (usb_ep
, struct imx_ep_struct
, ep
);
883 if (unlikely(!usb_ep
|| !EP_NO(imx_ep
))) {
884 D_ERR(imx_ep
->imx_usb
->dev
, "<%s> bad ep\n", __func__
);
888 local_irq_save(flags
);
890 if ((imx_ep
->bEndpointAddress
& USB_DIR_IN
)
891 && !list_empty(&imx_ep
->queue
)) {
892 local_irq_restore(flags
);
896 imx_ep_stall(imx_ep
);
898 local_irq_restore(flags
);
900 D_EPX(imx_ep
->imx_usb
->dev
, "<%s> %s halt\n", __func__
, usb_ep
->name
);
904 static int imx_ep_fifo_status(struct usb_ep
*usb_ep
)
906 struct imx_ep_struct
*imx_ep
= container_of
907 (usb_ep
, struct imx_ep_struct
, ep
);
910 D_ERR(imx_ep
->imx_usb
->dev
, "<%s> bad ep\n", __func__
);
914 if (imx_ep
->imx_usb
->gadget
.speed
== USB_SPEED_UNKNOWN
)
917 return imx_fifo_bcount(imx_ep
);
920 static void imx_ep_fifo_flush(struct usb_ep
*usb_ep
)
922 struct imx_ep_struct
*imx_ep
= container_of
923 (usb_ep
, struct imx_ep_struct
, ep
);
926 local_irq_save(flags
);
928 if (!usb_ep
|| !EP_NO(imx_ep
) || !list_empty(&imx_ep
->queue
)) {
929 D_ERR(imx_ep
->imx_usb
->dev
, "<%s> bad ep\n", __func__
);
930 local_irq_restore(flags
);
934 /* toggle and halt bits stay unchanged */
937 local_irq_restore(flags
);
940 static struct usb_ep_ops imx_ep_ops
= {
941 .enable
= imx_ep_enable
,
942 .disable
= imx_ep_disable
,
944 .alloc_request
= imx_ep_alloc_request
,
945 .free_request
= imx_ep_free_request
,
947 .queue
= imx_ep_queue
,
948 .dequeue
= imx_ep_dequeue
,
950 .set_halt
= imx_ep_set_halt
,
951 .fifo_status
= imx_ep_fifo_status
,
952 .fifo_flush
= imx_ep_fifo_flush
,
955 /*******************************************************************************
956 * USB endpoint control functions
957 *******************************************************************************
960 void ep0_chg_stat(const char *label
,
961 struct imx_udc_struct
*imx_usb
, enum ep0_state stat
)
963 D_EP0(imx_usb
->dev
, "<%s> from %15s to %15s\n",
964 label
, state_name
[imx_usb
->ep0state
], state_name
[stat
]);
966 if (imx_usb
->ep0state
== stat
)
969 imx_usb
->ep0state
= stat
;
972 static void usb_init_data(struct imx_udc_struct
*imx_usb
)
974 struct imx_ep_struct
*imx_ep
;
977 /* device/ep0 records init */
978 INIT_LIST_HEAD(&imx_usb
->gadget
.ep_list
);
979 INIT_LIST_HEAD(&imx_usb
->gadget
.ep0
->ep_list
);
980 ep0_chg_stat(__func__
, imx_usb
, EP0_IDLE
);
982 /* basic endpoint records init */
983 for (i
= 0; i
< IMX_USB_NB_EP
; i
++) {
984 imx_ep
= &imx_usb
->imx_ep
[i
];
987 list_add_tail(&imx_ep
->ep
.ep_list
,
988 &imx_usb
->gadget
.ep_list
);
993 INIT_LIST_HEAD(&imx_ep
->queue
);
997 static void udc_stop_activity(struct imx_udc_struct
*imx_usb
,
998 struct usb_gadget_driver
*driver
)
1000 struct imx_ep_struct
*imx_ep
;
1003 if (imx_usb
->gadget
.speed
== USB_SPEED_UNKNOWN
)
1006 /* prevent new request submissions, kill any outstanding requests */
1007 for (i
= 1; i
< IMX_USB_NB_EP
; i
++) {
1008 imx_ep
= &imx_usb
->imx_ep
[i
];
1010 imx_ep
->stopped
= 1;
1011 imx_ep_irq_disable(imx_ep
);
1012 nuke(imx_ep
, -ESHUTDOWN
);
1020 driver
->disconnect(&imx_usb
->gadget
);
1023 /*******************************************************************************
1024 * Interrupt handlers
1025 *******************************************************************************
1029 * Called when timer expires.
1030 * Timer is started when CFG_CHG is received.
1032 static void handle_config(unsigned long data
)
1034 struct imx_udc_struct
*imx_usb
= (void *)data
;
1035 struct usb_ctrlrequest u
;
1036 int temp
, cfg
, intf
, alt
;
1038 local_irq_disable();
1040 temp
= __raw_readl(imx_usb
->base
+ USB_STAT
);
1041 cfg
= (temp
& STAT_CFG
) >> 5;
1042 intf
= (temp
& STAT_INTF
) >> 3;
1043 alt
= temp
& STAT_ALTSET
;
1046 "<%s> orig config C=%d, I=%d, A=%d / "
1047 "req config C=%d, I=%d, A=%d\n",
1048 __func__
, imx_usb
->cfg
, imx_usb
->intf
, imx_usb
->alt
,
1051 if (cfg
== 1 || cfg
== 2) {
1053 if (imx_usb
->cfg
!= cfg
) {
1054 u
.bRequest
= USB_REQ_SET_CONFIGURATION
;
1055 u
.bRequestType
= USB_DIR_OUT
|
1062 imx_usb
->driver
->setup(&imx_usb
->gadget
, &u
);
1065 if (imx_usb
->intf
!= intf
|| imx_usb
->alt
!= alt
) {
1066 u
.bRequest
= USB_REQ_SET_INTERFACE
;
1067 u
.bRequestType
= USB_DIR_OUT
|
1069 USB_RECIP_INTERFACE
;
1073 imx_usb
->intf
= intf
;
1075 imx_usb
->driver
->setup(&imx_usb
->gadget
, &u
);
1079 imx_usb
->set_config
= 0;
1084 static irqreturn_t
imx_udc_irq(int irq
, void *dev
)
1086 struct imx_udc_struct
*imx_usb
= dev
;
1087 int intr
= __raw_readl(imx_usb
->base
+ USB_INTR
);
1090 if (intr
& (INTR_WAKEUP
| INTR_SUSPEND
| INTR_RESUME
| INTR_RESET_START
1091 | INTR_RESET_STOP
| INTR_CFG_CHG
)) {
1092 dump_intr(__func__
, intr
, imx_usb
->dev
);
1093 dump_usb_stat(__func__
, imx_usb
);
1096 if (!imx_usb
->driver
)
1099 if (intr
& INTR_SOF
) {
1100 /* Copy from Freescale BSP.
1101 We must enable SOF intr and set CMDOVER.
1102 Datasheet don't specifiy this action, but it
1103 is done in Freescale BSP, so just copy it.
1105 if (imx_usb
->ep0state
== EP0_IDLE
) {
1106 temp
= __raw_readl(imx_usb
->base
+ USB_CTRL
);
1107 __raw_writel(temp
| CTRL_CMDOVER
,
1108 imx_usb
->base
+ USB_CTRL
);
1112 if (intr
& INTR_CFG_CHG
) {
1113 /* A workaround of serious IMX UDC bug.
1114 Handling of CFG_CHG should be delayed for some time, because
1115 IMX does not NACK the host when CFG_CHG interrupt is pending.
1116 There is no time to handle current CFG_CHG
1117 if next CFG_CHG or SETUP packed is send immediately.
1118 We have to clear CFG_CHG, start the timer and
1119 NACK the host by setting CTRL_CMDOVER
1120 if it sends any SETUP packet.
1121 When timer expires, handler is called to handle configuration
1122 changes. While CFG_CHG is not handled (set_config=1),
1123 we must NACK the host to every SETUP packed.
1124 This delay prevents from going out of sync with host.
1126 __raw_writel(INTR_CFG_CHG
, imx_usb
->base
+ USB_INTR
);
1127 imx_usb
->set_config
= 1;
1128 mod_timer(&imx_usb
->timer
, jiffies
+ 5);
1132 if (intr
& INTR_WAKEUP
) {
1133 if (imx_usb
->gadget
.speed
== USB_SPEED_UNKNOWN
1134 && imx_usb
->driver
&& imx_usb
->driver
->resume
)
1135 imx_usb
->driver
->resume(&imx_usb
->gadget
);
1136 imx_usb
->set_config
= 0;
1137 del_timer(&imx_usb
->timer
);
1138 imx_usb
->gadget
.speed
= USB_SPEED_FULL
;
1141 if (intr
& INTR_SUSPEND
) {
1142 if (imx_usb
->gadget
.speed
!= USB_SPEED_UNKNOWN
1143 && imx_usb
->driver
&& imx_usb
->driver
->suspend
)
1144 imx_usb
->driver
->suspend(&imx_usb
->gadget
);
1145 imx_usb
->set_config
= 0;
1146 del_timer(&imx_usb
->timer
);
1147 imx_usb
->gadget
.speed
= USB_SPEED_UNKNOWN
;
1150 if (intr
& INTR_RESET_START
) {
1151 __raw_writel(intr
, imx_usb
->base
+ USB_INTR
);
1152 udc_stop_activity(imx_usb
, imx_usb
->driver
);
1153 imx_usb
->set_config
= 0;
1154 del_timer(&imx_usb
->timer
);
1155 imx_usb
->gadget
.speed
= USB_SPEED_UNKNOWN
;
1158 if (intr
& INTR_RESET_STOP
)
1159 imx_usb
->gadget
.speed
= USB_SPEED_FULL
;
1162 __raw_writel(intr
, imx_usb
->base
+ USB_INTR
);
1166 static irqreturn_t
imx_udc_ctrl_irq(int irq
, void *dev
)
1168 struct imx_udc_struct
*imx_usb
= dev
;
1169 struct imx_ep_struct
*imx_ep
= &imx_usb
->imx_ep
[0];
1170 int intr
= __raw_readl(imx_usb
->base
+ USB_EP_INTR(0));
1172 dump_ep_intr(__func__
, 0, intr
, imx_usb
->dev
);
1174 if (!imx_usb
->driver
) {
1175 __raw_writel(intr
, imx_usb
->base
+ USB_EP_INTR(0));
1179 /* DEVREQ has highest priority */
1180 if (intr
& (EPINTR_DEVREQ
| EPINTR_MDEVREQ
))
1181 handle_ep0_devreq(imx_usb
);
1182 /* Seem i.MX is missing EOF interrupt sometimes.
1183 * Therefore we don't monitor EOF.
1184 * We call handle_ep0() only if a request is queued for ep0.
1186 else if (!list_empty(&imx_ep
->queue
))
1189 __raw_writel(intr
, imx_usb
->base
+ USB_EP_INTR(0));
1194 #ifndef MX1_INT_USBD0
1195 #define MX1_INT_USBD0 MX1_USBD_INT0
1198 static irqreturn_t
imx_udc_bulk_irq(int irq
, void *dev
)
1200 struct imx_udc_struct
*imx_usb
= dev
;
1201 struct imx_ep_struct
*imx_ep
= &imx_usb
->imx_ep
[irq
- MX1_INT_USBD0
];
1202 int intr
= __raw_readl(imx_usb
->base
+ USB_EP_INTR(EP_NO(imx_ep
)));
1204 dump_ep_intr(__func__
, irq
- MX1_INT_USBD0
, intr
, imx_usb
->dev
);
1206 if (!imx_usb
->driver
) {
1207 __raw_writel(intr
, imx_usb
->base
+ USB_EP_INTR(EP_NO(imx_ep
)));
1213 __raw_writel(intr
, imx_usb
->base
+ USB_EP_INTR(EP_NO(imx_ep
)));
1218 irq_handler_t
intr_handler(int i
)
1222 return imx_udc_ctrl_irq
;
1228 return imx_udc_bulk_irq
;
1234 /*******************************************************************************
1235 * Static defined IMX UDC structure
1236 *******************************************************************************
1239 static const struct usb_gadget_ops imx_udc_ops
= {
1240 .get_frame
= imx_udc_get_frame
,
1241 .wakeup
= imx_udc_wakeup
,
1244 static struct imx_udc_struct controller
= {
1246 .ops
= &imx_udc_ops
,
1247 .ep0
= &controller
.imx_ep
[0].ep
,
1248 .name
= driver_name
,
1250 .init_name
= "gadget",
1260 .imx_usb
= &controller
,
1262 .bEndpointAddress
= 0,
1263 .bmAttributes
= USB_ENDPOINT_XFER_CONTROL
,
1267 .name
= "ep1in-bulk",
1271 .imx_usb
= &controller
,
1273 .bEndpointAddress
= USB_DIR_IN
| 1,
1274 .bmAttributes
= USB_ENDPOINT_XFER_BULK
,
1278 .name
= "ep2out-bulk",
1282 .imx_usb
= &controller
,
1284 .bEndpointAddress
= USB_DIR_OUT
| 2,
1285 .bmAttributes
= USB_ENDPOINT_XFER_BULK
,
1289 .name
= "ep3out-bulk",
1293 .imx_usb
= &controller
,
1295 .bEndpointAddress
= USB_DIR_OUT
| 3,
1296 .bmAttributes
= USB_ENDPOINT_XFER_BULK
,
1300 .name
= "ep4in-int",
1304 .imx_usb
= &controller
,
1306 .bEndpointAddress
= USB_DIR_IN
| 4,
1307 .bmAttributes
= USB_ENDPOINT_XFER_INT
,
1311 .name
= "ep5out-int",
1315 .imx_usb
= &controller
,
1317 .bEndpointAddress
= USB_DIR_OUT
| 5,
1318 .bmAttributes
= USB_ENDPOINT_XFER_INT
,
1322 /*******************************************************************************
1323 * USB gadget driver functions
1324 *******************************************************************************
1326 int usb_gadget_probe_driver(struct usb_gadget_driver
*driver
,
1327 int (*bind
)(struct usb_gadget
*))
1329 struct imx_udc_struct
*imx_usb
= &controller
;
1333 || driver
->speed
< USB_SPEED_FULL
1335 || !driver
->disconnect
1340 if (imx_usb
->driver
)
1343 /* first hook up the driver ... */
1344 imx_usb
->driver
= driver
;
1345 imx_usb
->gadget
.dev
.driver
= &driver
->driver
;
1347 retval
= device_add(&imx_usb
->gadget
.dev
);
1350 retval
= bind(&imx_usb
->gadget
);
1352 D_ERR(imx_usb
->dev
, "<%s> bind to driver %s --> error %d\n",
1353 __func__
, driver
->driver
.name
, retval
);
1354 device_del(&imx_usb
->gadget
.dev
);
1359 D_INI(imx_usb
->dev
, "<%s> registered gadget driver '%s'\n",
1360 __func__
, driver
->driver
.name
);
1362 imx_udc_enable(imx_usb
);
1366 imx_usb
->driver
= NULL
;
1367 imx_usb
->gadget
.dev
.driver
= NULL
;
1370 EXPORT_SYMBOL(usb_gadget_probe_driver
);
1372 int usb_gadget_unregister_driver(struct usb_gadget_driver
*driver
)
1374 struct imx_udc_struct
*imx_usb
= &controller
;
1378 if (!driver
|| driver
!= imx_usb
->driver
|| !driver
->unbind
)
1381 udc_stop_activity(imx_usb
, driver
);
1382 imx_udc_disable(imx_usb
);
1383 del_timer(&imx_usb
->timer
);
1385 driver
->unbind(&imx_usb
->gadget
);
1386 imx_usb
->gadget
.dev
.driver
= NULL
;
1387 imx_usb
->driver
= NULL
;
1389 device_del(&imx_usb
->gadget
.dev
);
1391 D_INI(imx_usb
->dev
, "<%s> unregistered gadget driver '%s'\n",
1392 __func__
, driver
->driver
.name
);
1396 EXPORT_SYMBOL(usb_gadget_unregister_driver
);
1398 /*******************************************************************************
1400 *******************************************************************************
1403 static int __init
imx_udc_probe(struct platform_device
*pdev
)
1405 struct imx_udc_struct
*imx_usb
= &controller
;
1406 struct resource
*res
;
1407 struct imxusb_platform_data
*pdata
;
1412 resource_size_t res_size
;
1414 res
= platform_get_resource(pdev
, IORESOURCE_MEM
, 0);
1416 dev_err(&pdev
->dev
, "can't get device resources\n");
1420 pdata
= pdev
->dev
.platform_data
;
1422 dev_err(&pdev
->dev
, "driver needs platform data\n");
1426 res_size
= resource_size(res
);
1427 if (!request_mem_region(res
->start
, res_size
, res
->name
)) {
1428 dev_err(&pdev
->dev
, "can't allocate %d bytes at %d address\n",
1429 res_size
, res
->start
);
1434 ret
= pdata
->init(&pdev
->dev
);
1439 base
= ioremap(res
->start
, res_size
);
1441 dev_err(&pdev
->dev
, "ioremap failed\n");
1446 clk
= clk_get(NULL
, "usbd_clk");
1449 dev_err(&pdev
->dev
, "can't get USB clock\n");
1454 if (clk_get_rate(clk
) != 48000000) {
1456 "Bad USB clock (%d Hz), changing to 48000000 Hz\n",
1457 (int)clk_get_rate(clk
));
1458 if (clk_set_rate(clk
, 48000000)) {
1460 "Unable to set correct USB clock (48MHz)\n");
1466 for (i
= 0; i
< IMX_USB_NB_EP
+ 1; i
++) {
1467 imx_usb
->usbd_int
[i
] = platform_get_irq(pdev
, i
);
1468 if (imx_usb
->usbd_int
[i
] < 0) {
1469 dev_err(&pdev
->dev
, "can't get irq number\n");
1475 for (i
= 0; i
< IMX_USB_NB_EP
+ 1; i
++) {
1476 ret
= request_irq(imx_usb
->usbd_int
[i
], intr_handler(i
),
1477 IRQF_DISABLED
, driver_name
, imx_usb
);
1479 dev_err(&pdev
->dev
, "can't get irq %i, err %d\n",
1480 imx_usb
->usbd_int
[i
], ret
);
1481 for (--i
; i
>= 0; i
--)
1482 free_irq(imx_usb
->usbd_int
[i
], imx_usb
);
1488 imx_usb
->base
= base
;
1490 imx_usb
->dev
= &pdev
->dev
;
1492 device_initialize(&imx_usb
->gadget
.dev
);
1494 imx_usb
->gadget
.dev
.parent
= &pdev
->dev
;
1495 imx_usb
->gadget
.dev
.dma_mask
= pdev
->dev
.dma_mask
;
1497 platform_set_drvdata(pdev
, imx_usb
);
1499 usb_init_data(imx_usb
);
1500 imx_udc_init(imx_usb
);
1502 init_timer(&imx_usb
->timer
);
1503 imx_usb
->timer
.function
= handle_config
;
1504 imx_usb
->timer
.data
= (unsigned long)imx_usb
;
1515 pdata
->exit(&pdev
->dev
);
1517 release_mem_region(res
->start
, res_size
);
1521 static int __exit
imx_udc_remove(struct platform_device
*pdev
)
1523 struct imx_udc_struct
*imx_usb
= platform_get_drvdata(pdev
);
1524 struct imxusb_platform_data
*pdata
= pdev
->dev
.platform_data
;
1527 imx_udc_disable(imx_usb
);
1528 del_timer(&imx_usb
->timer
);
1530 for (i
= 0; i
< IMX_USB_NB_EP
+ 1; i
++)
1531 free_irq(imx_usb
->usbd_int
[i
], imx_usb
);
1533 clk_put(imx_usb
->clk
);
1534 clk_disable(imx_usb
->clk
);
1535 iounmap(imx_usb
->base
);
1537 release_mem_region(imx_usb
->res
->start
, resource_size(imx_usb
->res
));
1540 pdata
->exit(&pdev
->dev
);
1542 platform_set_drvdata(pdev
, NULL
);
1547 /*----------------------------------------------------------------------------*/
1550 #define imx_udc_suspend NULL
1551 #define imx_udc_resume NULL
1553 #define imx_udc_suspend NULL
1554 #define imx_udc_resume NULL
1557 /*----------------------------------------------------------------------------*/
1559 static struct platform_driver udc_driver
= {
1561 .name
= driver_name
,
1562 .owner
= THIS_MODULE
,
1564 .remove
= __exit_p(imx_udc_remove
),
1565 .suspend
= imx_udc_suspend
,
1566 .resume
= imx_udc_resume
,
1569 static int __init
udc_init(void)
1571 return platform_driver_probe(&udc_driver
, imx_udc_probe
);
1573 module_init(udc_init
);
1575 static void __exit
udc_exit(void)
1577 platform_driver_unregister(&udc_driver
);
1579 module_exit(udc_exit
);
1581 MODULE_DESCRIPTION("IMX USB Device Controller driver");
1582 MODULE_AUTHOR("Darius Augulis <augulis.darius@gmail.com>");
1583 MODULE_LICENSE("GPL");
1584 MODULE_ALIAS("platform:imx_udc");