forked from len0rd/rockbox
as3525: don't use IRAM for usb, and avoid usb storage using uncached addresses behind our back
No need for special address handling, all addresses are equal to their physical address git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26176 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
0b28594036
commit
bae0756acf
3 changed files with 5 additions and 18 deletions
|
@ -530,9 +530,9 @@ CE lines
|
||||||
/* Timer frequency */
|
/* Timer frequency */
|
||||||
#define TIMER_FREQ (24000000 / 16)
|
#define TIMER_FREQ (24000000 / 16)
|
||||||
|
|
||||||
/* USB : TODO */
|
/* USB */
|
||||||
#define USB_NUM_ENDPOINTS 4
|
#define USB_NUM_ENDPOINTS 4
|
||||||
#define USB_DEVBSS_ATTR IBSS_ATTR
|
#define USB_DEVBSS_ATTR
|
||||||
|
|
||||||
/* I2SIN registers */
|
/* I2SIN registers */
|
||||||
|
|
||||||
|
|
|
@ -626,19 +626,6 @@ void usb_drv_cancel_all_transfers(void)
|
||||||
restore_irq(flags);
|
restore_irq(flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void *virt_to_bus(void *addr)
|
|
||||||
{
|
|
||||||
unsigned int x = (long)addr;
|
|
||||||
|
|
||||||
x -= (x & 0x40000000) >> 2; /* fix uncached address */
|
|
||||||
|
|
||||||
if (x >= IRAM_ORIG) { /* iram address */
|
|
||||||
x -= IRAM_ORIG;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (void*)x;
|
|
||||||
}
|
|
||||||
|
|
||||||
int usb_drv_recv(int ep, void *ptr, int len)
|
int usb_drv_recv(int ep, void *ptr, int len)
|
||||||
{
|
{
|
||||||
struct usb_dev_dma_desc *uc_desc = endpoints[ep][1].uc_desc;
|
struct usb_dev_dma_desc *uc_desc = endpoints[ep][1].uc_desc;
|
||||||
|
@ -664,7 +651,7 @@ int usb_drv_recv(int ep, void *ptr, int len)
|
||||||
uc_desc->status |= USB_DMA_DESC_ZERO_LEN;
|
uc_desc->status |= USB_DMA_DESC_ZERO_LEN;
|
||||||
uc_desc->data_ptr = 0;
|
uc_desc->data_ptr = 0;
|
||||||
} else {
|
} else {
|
||||||
uc_desc->data_ptr = virt_to_bus(ptr);
|
uc_desc->data_ptr = ptr;
|
||||||
}
|
}
|
||||||
USB_OEP_DESC_PTR(ep) = (int)&dmadescs[ep][1];
|
USB_OEP_DESC_PTR(ep) = (int)&dmadescs[ep][1];
|
||||||
USB_OEP_STS(ep) = USB_EP_STAT_OUT_RCVD; /* clear status */
|
USB_OEP_STS(ep) = USB_EP_STAT_OUT_RCVD; /* clear status */
|
||||||
|
@ -716,7 +703,7 @@ void ep_send(int ep, void *ptr, int len)
|
||||||
if (len == 0)
|
if (len == 0)
|
||||||
uc_desc->status |= USB_DMA_DESC_ZERO_LEN;
|
uc_desc->status |= USB_DMA_DESC_ZERO_LEN;
|
||||||
|
|
||||||
uc_desc->data_ptr = virt_to_bus(ptr);
|
uc_desc->data_ptr = ptr;
|
||||||
|
|
||||||
USB_IEP_DESC_PTR(ep) = (int)&dmadescs[ep][0];
|
USB_IEP_DESC_PTR(ep) = (int)&dmadescs[ep][0];
|
||||||
USB_IEP_STS(ep) = 0xffffffff; /* clear status */
|
USB_IEP_STS(ep) = 0xffffffff; /* clear status */
|
||||||
|
|
|
@ -449,7 +449,7 @@ void usb_storage_init_connection(void)
|
||||||
state = WAITING_FOR_COMMAND;
|
state = WAITING_FOR_COMMAND;
|
||||||
|
|
||||||
#if CONFIG_CPU == IMX31L || defined(CPU_TCC77X) || defined(CPU_TCC780X) || \
|
#if CONFIG_CPU == IMX31L || defined(CPU_TCC77X) || defined(CPU_TCC780X) || \
|
||||||
defined(BOOTLOADER) || CONFIG_CPU == DM320
|
defined(BOOTLOADER) || CONFIG_CPU == DM320 || CONFIG_CPU == AS3525
|
||||||
static unsigned char _cbw_buffer[MAX_CBW_SIZE]
|
static unsigned char _cbw_buffer[MAX_CBW_SIZE]
|
||||||
USB_DEVBSS_ATTR __attribute__((aligned(32)));
|
USB_DEVBSS_ATTR __attribute__((aligned(32)));
|
||||||
cbw_buffer = (void *)_cbw_buffer;
|
cbw_buffer = (void *)_cbw_buffer;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue