|
@@ -30,12 +30,7 @@
|
|
|
#include <config.h>
|
|
|
#include <asm/blackfin.h>
|
|
|
#include <asm/io.h>
|
|
|
-
|
|
|
-extern void blackfin_icache_flush_range(const void *, const void *);
|
|
|
-extern void blackfin_dcache_flush_range(const void *, const void *);
|
|
|
-extern void *memcpy_ASM(void *dest, const void *src, size_t count);
|
|
|
-
|
|
|
-void *dma_memcpy(void *, const void *, size_t);
|
|
|
+#include "cache.h"
|
|
|
|
|
|
char *strcpy(char *dest, const char *src)
|
|
|
{
|
|
@@ -117,44 +112,7 @@ int strncmp(const char *cs, const char *ct, size_t count)
|
|
|
return __res1;
|
|
|
}
|
|
|
|
|
|
-/*
|
|
|
- * memcpy - Copy one area of memory to another
|
|
|
- * @dest: Where to copy to
|
|
|
- * @src: Where to copy from
|
|
|
- * @count: The size of the area.
|
|
|
- *
|
|
|
- * You should not use this function to access IO space, use memcpy_toio()
|
|
|
- * or memcpy_fromio() instead.
|
|
|
- */
|
|
|
-void *memcpy(void *dest, const void *src, size_t count)
|
|
|
-{
|
|
|
- char *tmp = (char *)dest, *s = (char *)src;
|
|
|
-
|
|
|
- /* L1_ISRAM can only be accessed via dma */
|
|
|
- if ((tmp >= (char *)L1_ISRAM) && (tmp < (char *)L1_ISRAM_END)) {
|
|
|
- /* L1 is the destination */
|
|
|
- dma_memcpy(dest, src, count);
|
|
|
-
|
|
|
- if (icache_status()) {
|
|
|
- blackfin_icache_flush_range(src, src + count);
|
|
|
- }
|
|
|
- } else if ((s >= (char *)L1_ISRAM) && (s < (char *)L1_ISRAM_END)) {
|
|
|
- /* L1 is the source */
|
|
|
- dma_memcpy(dest, src, count);
|
|
|
-
|
|
|
- if (icache_status()) {
|
|
|
- blackfin_icache_flush_range(dest, dest + count);
|
|
|
- }
|
|
|
- if (dcache_status()) {
|
|
|
- blackfin_dcache_flush_range(dest, dest + count);
|
|
|
- }
|
|
|
- } else {
|
|
|
- memcpy_ASM(dest, src, count);
|
|
|
- }
|
|
|
- return dest;
|
|
|
-}
|
|
|
-
|
|
|
-void *dma_memcpy(void *dest, const void *src, size_t count)
|
|
|
+static void *dma_memcpy(void *dest, const void *src, size_t count)
|
|
|
{
|
|
|
*pMDMA_D0_IRQ_STATUS = DMA_DONE | DMA_ERR;
|
|
|
|
|
@@ -188,3 +146,40 @@ void *dma_memcpy(void *dest, const void *src, size_t count)
|
|
|
src += count;
|
|
|
return dest;
|
|
|
}
|
|
|
+
|
|
|
+/*
|
|
|
+ * memcpy - Copy one area of memory to another
|
|
|
+ * @dest: Where to copy to
|
|
|
+ * @src: Where to copy from
|
|
|
+ * @count: The size of the area.
|
|
|
+ *
|
|
|
+ * You should not use this function to access IO space, use memcpy_toio()
|
|
|
+ * or memcpy_fromio() instead.
|
|
|
+ */
|
|
|
+extern void *memcpy_ASM(void *dest, const void *src, size_t count);
|
|
|
+void *memcpy(void *dest, const void *src, size_t count)
|
|
|
+{
|
|
|
+ char *tmp = (char *) dest, *s = (char *) src;
|
|
|
+
|
|
|
+ if (dcache_status()) {
|
|
|
+ blackfin_dcache_flush_range(src, src+count);
|
|
|
+ }
|
|
|
+ /* L1_ISRAM can only be accessed via dma */
|
|
|
+ if ((tmp >= (char *)L1_ISRAM) && (tmp < (char *)L1_ISRAM_END)) {
|
|
|
+ /* L1 is the destination */
|
|
|
+ dma_memcpy(dest,src,count);
|
|
|
+ } else if ((s >= (char *)L1_ISRAM) && (s < (char *)L1_ISRAM_END)) {
|
|
|
+ /* L1 is the source */
|
|
|
+ dma_memcpy(dest,src,count);
|
|
|
+
|
|
|
+ if (icache_status()) {
|
|
|
+ blackfin_icache_flush_range(dest, dest+count);
|
|
|
+ }
|
|
|
+ if (dcache_status()) {
|
|
|
+ blackfin_dcache_invalidate_range(dest, dest+count);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ memcpy_ASM(dest,src,count);
|
|
|
+ }
|
|
|
+ return dest;
|
|
|
+}
|