diff options
author | Rafaël Carré <rafael.carre@gmail.com> | 2010-05-19 18:08:32 +0000 |
---|---|---|
committer | Rafaël Carré <rafael.carre@gmail.com> | 2010-05-19 18:08:32 +0000 |
commit | 2e188a4dad1ffb158e7f0db6f2224beeba9c872d (patch) | |
tree | df60604495c23c62cf44767c32e1f311ef18736c /firmware | |
parent | bae0756acf71aa8a59c6c4f4aed302bef79e4678 (diff) | |
download | rockbox-2e188a4dad1ffb158e7f0db6f2224beeba9c872d.tar.gz rockbox-2e188a4dad1ffb158e7f0db6f2224beeba9c872d.zip |
revert part of r26176 to avoid large static allocation
we still need to convert uncached addresses to physical addresses
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26177 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/target/arm/as3525/usb-drv-as3525.c | 13 | ||||
-rw-r--r-- | firmware/usbstack/usb_storage.c | 2 |
2 files changed, 12 insertions, 3 deletions
diff --git a/firmware/target/arm/as3525/usb-drv-as3525.c b/firmware/target/arm/as3525/usb-drv-as3525.c index 740526407d..4c72368a83 100644 --- a/firmware/target/arm/as3525/usb-drv-as3525.c +++ b/firmware/target/arm/as3525/usb-drv-as3525.c | |||
@@ -626,6 +626,15 @@ void usb_drv_cancel_all_transfers(void) | |||
626 | restore_irq(flags); | 626 | restore_irq(flags); |
627 | } | 627 | } |
628 | 628 | ||
629 | static void *virt_to_bus(void *addr) | ||
630 | { | ||
631 | unsigned int x = (long)addr; | ||
632 | |||
633 | x -= (x & 0x40000000) >> 2; /* fix uncached address */ | ||
634 | |||
635 | return (void*)x; | ||
636 | } | ||
637 | |||
629 | int usb_drv_recv(int ep, void *ptr, int len) | 638 | int usb_drv_recv(int ep, void *ptr, int len) |
630 | { | 639 | { |
631 | struct usb_dev_dma_desc *uc_desc = endpoints[ep][1].uc_desc; | 640 | struct usb_dev_dma_desc *uc_desc = endpoints[ep][1].uc_desc; |
@@ -651,7 +660,7 @@ int usb_drv_recv(int ep, void *ptr, int len) | |||
651 | uc_desc->status |= USB_DMA_DESC_ZERO_LEN; | 660 | uc_desc->status |= USB_DMA_DESC_ZERO_LEN; |
652 | uc_desc->data_ptr = 0; | 661 | uc_desc->data_ptr = 0; |
653 | } else { | 662 | } else { |
654 | uc_desc->data_ptr = ptr; | 663 | uc_desc->data_ptr = virt_to_bus(ptr); |
655 | } | 664 | } |
656 | USB_OEP_DESC_PTR(ep) = (int)&dmadescs[ep][1]; | 665 | USB_OEP_DESC_PTR(ep) = (int)&dmadescs[ep][1]; |
657 | USB_OEP_STS(ep) = USB_EP_STAT_OUT_RCVD; /* clear status */ | 666 | USB_OEP_STS(ep) = USB_EP_STAT_OUT_RCVD; /* clear status */ |
@@ -703,7 +712,7 @@ void ep_send(int ep, void *ptr, int len) | |||
703 | if (len == 0) | 712 | if (len == 0) |
704 | uc_desc->status |= USB_DMA_DESC_ZERO_LEN; | 713 | uc_desc->status |= USB_DMA_DESC_ZERO_LEN; |
705 | 714 | ||
706 | uc_desc->data_ptr = ptr; | 715 | uc_desc->data_ptr = virt_to_bus(ptr); |
707 | 716 | ||
708 | USB_IEP_DESC_PTR(ep) = (int)&dmadescs[ep][0]; | 717 | USB_IEP_DESC_PTR(ep) = (int)&dmadescs[ep][0]; |
709 | USB_IEP_STS(ep) = 0xffffffff; /* clear status */ | 718 | USB_IEP_STS(ep) = 0xffffffff; /* clear status */ |
diff --git a/firmware/usbstack/usb_storage.c b/firmware/usbstack/usb_storage.c index 8917a67141..3373bf41f3 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 || CONFIG_CPU == AS3525 | 452 | defined(BOOTLOADER) || CONFIG_CPU == DM320 |
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; |