* omap_udc does not respond to SETUP transfer properly (OMAP5912)
@ 2007-03-15 18:42 Steve Poulsen
2007-03-16 4:51 ` Pandita, Vikram
0 siblings, 1 reply; 4+ messages in thread
From: Steve Poulsen @ 2007-03-15 18:42 UTC (permalink / raw)
To: Linux-omap-open-source
When I plug our device into a Windows PC, we receive the SETUP message
(USB_REQ_GET_DESCRIPTOR). The IRQ handler sets the EP_NUM values per
Figure 16 of SPRU761A (EP_NUM.EPU_NUM = 0, EP_DIR = 1, EP_SEL = 1,
SETUP_SEL=0), then it writes the response into the fifo. After writing,
FIFO_EN is set to 1, then EP_SEL to 0. I then find it remains in this
state forever (or at least until Windows decides the device is
problematic and turns it off).
I have looked at the STAT register at the start of the IRQ and it shows
the FIFO is empty (0x02). After writing the STAT register shows (0x04)
as expected. However, even waiting 500 ms after the write, the STAT
still shows 0x04.
I have confirmed the HHC and DC clocks are enabled by looking at
SOFT_REQ_REG and MOD_CONF_CTRL_0.
Shouldn't the STAT 0x04 bit go to zero eventually and it show the fifo
empty once again?
Thanks,
Steve
^ permalink raw reply [flat|nested] 4+ messages in thread
* RE: omap_udc does not respond to SETUP transfer properly (OMAP5912)
2007-03-15 18:42 omap_udc does not respond to SETUP transfer properly (OMAP5912) Steve Poulsen
@ 2007-03-16 4:51 ` Pandita, Vikram
2007-03-16 15:26 ` Steve Poulsen
2007-03-16 18:44 ` Steve Poulsen
0 siblings, 2 replies; 4+ messages in thread
From: Pandita, Vikram @ 2007-03-16 4:51 UTC (permalink / raw)
To: Steve Poulsen, Linux-omap-open-source
Have you tried the Interrupt mode of transfer.
In this mode you will be writing directly to the FIFO the response of
GET_DESCRIPTOR. Later you can debug the DMA path.
> -----Original Message-----
> From: linux-omap-open-source-bounces@linux.omap.com
[mailto:linux-omap-
> open-source-bounces@linux.omap.com] On Behalf Of Steve Poulsen
> Sent: Friday, March 16, 2007 12:13 AM
> To: Linux-omap-open-source@linux.omap.com
> Subject: omap_udc does not respond to SETUP transfer properly
(OMAP5912)
>
> When I plug our device into a Windows PC, we receive the SETUP message
> (USB_REQ_GET_DESCRIPTOR). The IRQ handler sets the EP_NUM values per
> Figure 16 of SPRU761A (EP_NUM.EPU_NUM = 0, EP_DIR = 1, EP_SEL = 1,
> SETUP_SEL=0), then it writes the response into the fifo. After
writing,
> FIFO_EN is set to 1, then EP_SEL to 0. I then find it remains in this
> state forever (or at least until Windows decides the device is
> problematic and turns it off).
> I have looked at the STAT register at the start of the IRQ and it
shows
> the FIFO is empty (0x02). After writing the STAT register shows
(0x04)
> as expected. However, even waiting 500 ms after the write, the STAT
> still shows 0x04.
>
> I have confirmed the HHC and DC clocks are enabled by looking at
> SOFT_REQ_REG and MOD_CONF_CTRL_0.
>
> Shouldn't the STAT 0x04 bit go to zero eventually and it show the fifo
> empty once again?
>
>
> Thanks,
>
> Steve
>
> _______________________________________________
> Linux-omap-open-source mailing list
> Linux-omap-open-source@linux.omap.com
> http://linux.omap.com/mailman/listinfo/linux-omap-open-source
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: omap_udc does not respond to SETUP transfer properly (OMAP5912)
2007-03-16 4:51 ` Pandita, Vikram
@ 2007-03-16 15:26 ` Steve Poulsen
2007-03-16 18:44 ` Steve Poulsen
1 sibling, 0 replies; 4+ messages in thread
From: Steve Poulsen @ 2007-03-16 15:26 UTC (permalink / raw)
To: Pandita, Vikram; +Cc: Linux-omap-open-source
Thanks for the quick response. Yes, this is the mode that I am using.
I get only one interrupt for the SETUP and then nothing there-after. If
I cut-out the function calls and some unimportant code (for simplicity),
here are the steps the Linux drivers go through for this GET_DESCRIPTOR:
do {
UDC_EP_NUM_REG = UDC_SETUP_SEL;
/* two bytes at a time */
u.word[0] = UDC_DATA_REG;
u.word[1] = UDC_DATA_REG;
u.word[2] = UDC_DATA_REG;
u.word[3] = UDC_DATA_REG;
UDC_EP_NUM_REG = 0;
} while (UDC_IRQ_SRC_REG & UDC_SETUP);
UDC_EP_NUM_REG = UDC_EP_SEL|UDC_EP_DIR;
write_packet(); // Loops to write the whole packet to UDC_DATA_REG
UDC_CTRL_REG = UDC_SET_FIFO_EN;
UDC_EP_NUM_REG &= ~UDC_EP_SEL;
Thanks,
Steve
Or course, this is all from the driver and using printk() I have
determined this is the flow through the driver.
Pandita, Vikram wrote:
> Have you tried the Interrupt mode of transfer.
> In this mode you will be writing directly to the FIFO the response of
> GET_DESCRIPTOR. Later you can debug the DMA path.
>
>
>
>> -----Original Message-----
>> From: linux-omap-open-source-bounces@linux.omap.com
>>
> [mailto:linux-omap-
>
>> open-source-bounces@linux.omap.com] On Behalf Of Steve Poulsen
>> Sent: Friday, March 16, 2007 12:13 AM
>> To: Linux-omap-open-source@linux.omap.com
>> Subject: omap_udc does not respond to SETUP transfer properly
>>
> (OMAP5912)
>
>> When I plug our device into a Windows PC, we receive the SETUP message
>> (USB_REQ_GET_DESCRIPTOR). The IRQ handler sets the EP_NUM values per
>> Figure 16 of SPRU761A (EP_NUM.EPU_NUM = 0, EP_DIR = 1, EP_SEL = 1,
>> SETUP_SEL=0), then it writes the response into the fifo. After
>>
> writing,
>
>> FIFO_EN is set to 1, then EP_SEL to 0. I then find it remains in this
>> state forever (or at least until Windows decides the device is
>> problematic and turns it off).
>> I have looked at the STAT register at the start of the IRQ and it
>>
> shows
>
>> the FIFO is empty (0x02). After writing the STAT register shows
>>
> (0x04)
>
>> as expected. However, even waiting 500 ms after the write, the STAT
>> still shows 0x04.
>>
>> I have confirmed the HHC and DC clocks are enabled by looking at
>> SOFT_REQ_REG and MOD_CONF_CTRL_0.
>>
>> Shouldn't the STAT 0x04 bit go to zero eventually and it show the fifo
>> empty once again?
>>
>>
>> Thanks,
>>
>> Steve
>>
>> _______________________________________________
>> Linux-omap-open-source mailing list
>> Linux-omap-open-source@linux.omap.com
>> http://linux.omap.com/mailman/listinfo/linux-omap-open-source
>>
>
>
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: omap_udc does not respond to SETUP transfer properly (OMAP5912)
2007-03-16 4:51 ` Pandita, Vikram
2007-03-16 15:26 ` Steve Poulsen
@ 2007-03-16 18:44 ` Steve Poulsen
1 sibling, 0 replies; 4+ messages in thread
From: Steve Poulsen @ 2007-03-16 18:44 UTC (permalink / raw)
To: Pandita, Vikram; +Cc: Linux-omap-open-source
I appear to get strange results from the UDC registers. In
omap_ep_queue(), there is some code that sets up the EP_NUM register
before writing to the fifo. I added some printk() lines around here to
see what is going on. Even the revision register produces a value that
doesn't agree with the possible documented values. Notice that the
write to EP_NUM_REG doesn't do anything.
/* non-empty DATA stage */
} else if (is_in) {
printk(KERN_ALERT "UDC_EP_NUM_REG = 0x%08x\n", UDC_EP_NUM_REG);
UDC_EP_NUM_REG = UDC_EP_SEL|UDC_EP_DIR;
//*((volatile int*)0xfefb4004) = UDC_EP_SEL|UDC_EP_DIR;
// doesn't help
printk(KERN_ALERT "UDC_EP_NUM_REG = 0x%08x\n", *((volatile
int*)0xfefb4004));
printk(KERN_ALERT "UDC_REV_REG = 0x%08x\n", *((volatile
int*)0xfefb4000));
printk(KERN_ALERT "UDC_OTG_SYSCON1 = 0x%08x\n", *((volatile
int*)0xfefb0404));
} else {
if (udc->ep0_setup)
goto irq_wait;
UDC_EP_NUM_REG = UDC_EP_SEL;
}
MOD_CONF_CTRL_0 : 0xe0005200
SOFT_REQ_REG : 0x00000758
...
UDC_EP_NUM_REG = 0x00000000
UDC_EP_NUM_REG = 0x00000000
UDC_REV_REG = 0x00000036
UDC_OTG_SYSCON1 = 0x00030004
Thanks,
Steve
Pandita, Vikram wrote:
> Have you tried the Interrupt mode of transfer.
> In this mode you will be writing directly to the FIFO the response of
> GET_DESCRIPTOR. Later you can debug the DMA path.
>
>
>
>> -----Original Message-----
>> From: linux-omap-open-source-bounces@linux.omap.com
>>
> [mailto:linux-omap-
>
>> open-source-bounces@linux.omap.com] On Behalf Of Steve Poulsen
>> Sent: Friday, March 16, 2007 12:13 AM
>> To: Linux-omap-open-source@linux.omap.com
>> Subject: omap_udc does not respond to SETUP transfer properly
>>
> (OMAP5912)
>
>> When I plug our device into a Windows PC, we receive the SETUP message
>> (USB_REQ_GET_DESCRIPTOR). The IRQ handler sets the EP_NUM values per
>> Figure 16 of SPRU761A (EP_NUM.EPU_NUM = 0, EP_DIR = 1, EP_SEL = 1,
>> SETUP_SEL=0), then it writes the response into the fifo. After
>>
> writing,
>
>> FIFO_EN is set to 1, then EP_SEL to 0. I then find it remains in this
>> state forever (or at least until Windows decides the device is
>> problematic and turns it off).
>> I have looked at the STAT register at the start of the IRQ and it
>>
> shows
>
>> the FIFO is empty (0x02). After writing the STAT register shows
>>
> (0x04)
>
>> as expected. However, even waiting 500 ms after the write, the STAT
>> still shows 0x04.
>>
>> I have confirmed the HHC and DC clocks are enabled by looking at
>> SOFT_REQ_REG and MOD_CONF_CTRL_0.
>>
>> Shouldn't the STAT 0x04 bit go to zero eventually and it show the fifo
>> empty once again?
>>
>>
>> Thanks,
>>
>> Steve
>>
>> _______________________________________________
>> Linux-omap-open-source mailing list
>> Linux-omap-open-source@linux.omap.com
>> http://linux.omap.com/mailman/listinfo/linux-omap-open-source
>>
>
>
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2007-03-16 18:44 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-03-15 18:42 omap_udc does not respond to SETUP transfer properly (OMAP5912) Steve Poulsen
2007-03-16 4:51 ` Pandita, Vikram
2007-03-16 15:26 ` Steve Poulsen
2007-03-16 18:44 ` Steve Poulsen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox