summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafaël Carré <rafael.carre@gmail.com>2010-05-19 17:56:47 +0000
committerRafaël Carré <rafael.carre@gmail.com>2010-05-19 17:56:47 +0000
commitbae0756acf71aa8a59c6c4f4aed302bef79e4678 (patch)
treedbd6dd8bfa11067e35f784f5e957ef275fc93404
parent0b28594036f0350bd2e9d3074a8284b38e36fadd (diff)
downloadrockbox-bae0756acf71aa8a59c6c4f4aed302bef79e4678.tar.gz
rockbox-bae0756acf71aa8a59c6c4f4aed302bef79e4678.zip
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
-rw-r--r--firmware/export/as3525.h4
-rw-r--r--firmware/target/arm/as3525/usb-drv-as3525.c17
-rw-r--r--firmware/usbstack/usb_storage.c2
3 files changed, 5 insertions, 18 deletions
diff --git a/firmware/export/as3525.h b/firmware/export/as3525.h
index e578b608a6..a58a0ae0ad 100644
--- a/firmware/export/as3525.h
+++ b/firmware/export/as3525.h
@@ -530,9 +530,9 @@ CE lines
530/* Timer frequency */ 530/* Timer frequency */
531#define TIMER_FREQ (24000000 / 16) 531#define TIMER_FREQ (24000000 / 16)
532 532
533/* USB : TODO */ 533/* USB */
534#define USB_NUM_ENDPOINTS 4 534#define USB_NUM_ENDPOINTS 4
535#define USB_DEVBSS_ATTR IBSS_ATTR 535#define USB_DEVBSS_ATTR
536 536
537/* I2SIN registers */ 537/* I2SIN registers */
538 538
diff --git a/firmware/target/arm/as3525/usb-drv-as3525.c b/firmware/target/arm/as3525/usb-drv-as3525.c
index ca484d0395..740526407d 100644
--- a/firmware/target/arm/as3525/usb-drv-as3525.c
+++ b/firmware/target/arm/as3525/usb-drv-as3525.c
@@ -626,19 +626,6 @@ void usb_drv_cancel_all_transfers(void)
626 restore_irq(flags); 626 restore_irq(flags);
627} 627}
628 628
629static void *virt_to_bus(void *addr)
630{
631 unsigned int x = (long)addr;
632
633 x -= (x & 0x40000000) >> 2; /* fix uncached address */
634
635 if (x >= IRAM_ORIG) { /* iram address */
636 x -= IRAM_ORIG;
637 }
638
639 return (void*)x;
640}
641
642int usb_drv_recv(int ep, void *ptr, int len) 629int usb_drv_recv(int ep, void *ptr, int len)
643{ 630{
644 struct usb_dev_dma_desc *uc_desc = endpoints[ep][1].uc_desc; 631 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)
664 uc_desc->status |= USB_DMA_DESC_ZERO_LEN; 651 uc_desc->status |= USB_DMA_DESC_ZERO_LEN;
665 uc_desc->data_ptr = 0; 652 uc_desc->data_ptr = 0;
666 } else { 653 } else {
667 uc_desc->data_ptr = virt_to_bus(ptr); 654 uc_desc->data_ptr = ptr;
668 } 655 }
669 USB_OEP_DESC_PTR(ep) = (int)&dmadescs[ep][1]; 656 USB_OEP_DESC_PTR(ep) = (int)&dmadescs[ep][1];
670 USB_OEP_STS(ep) = USB_EP_STAT_OUT_RCVD; /* clear status */ 657 USB_OEP_STS(ep) = USB_EP_STAT_OUT_RCVD; /* clear status */
@@ -716,7 +703,7 @@ void ep_send(int ep, void *ptr, int len)
716 if (len == 0) 703 if (len == 0)
717 uc_desc->status |= USB_DMA_DESC_ZERO_LEN; 704 uc_desc->status |= USB_DMA_DESC_ZERO_LEN;
718 705
719 uc_desc->data_ptr = virt_to_bus(ptr); 706 uc_desc->data_ptr = ptr;
720 707
721 USB_IEP_DESC_PTR(ep) = (int)&dmadescs[ep][0]; 708 USB_IEP_DESC_PTR(ep) = (int)&dmadescs[ep][0];
722 USB_IEP_STS(ep) = 0xffffffff; /* clear status */ 709 USB_IEP_STS(ep) = 0xffffffff; /* clear status */
diff --git a/firmware/usbstack/usb_storage.c b/firmware/usbstack/usb_storage.c
index 3373bf41f3..8917a67141 100644
--- a/firmware/usbstack/usb_storage.c
+++ b/firmware/usbstack/usb_storage.c
@@ -449,7 +449,7 @@ void usb_storage_init_connection(void)
449 state = WAITING_FOR_COMMAND; 449 state = WAITING_FOR_COMMAND;
450 450
451#if CONFIG_CPU == IMX31L || defined(CPU_TCC77X) || defined(CPU_TCC780X) || \ 451#if CONFIG_CPU == IMX31L || defined(CPU_TCC77X) || defined(CPU_TCC780X) || \
452 defined(BOOTLOADER) || CONFIG_CPU == DM320 452 defined(BOOTLOADER) || CONFIG_CPU == DM320 || CONFIG_CPU == AS3525
453 static unsigned char _cbw_buffer[MAX_CBW_SIZE] 453 static unsigned char _cbw_buffer[MAX_CBW_SIZE]
454 USB_DEVBSS_ATTR __attribute__((aligned(32))); 454 USB_DEVBSS_ATTR __attribute__((aligned(32)));
455 cbw_buffer = (void *)_cbw_buffer; 455 cbw_buffer = (void *)_cbw_buffer;