[openwrt/openwrt] realtek: rt-loader: memory library enhancements

LEDE Commits lede-commits at lists.infradead.org
Wed Sep 3 12:37:15 PDT 2025


hauke pushed a commit to openwrt/openwrt.git, branch main:
https://git.openwrt.org/908cda6943cef3c380884172fa2a3220814a5d6f

commit 908cda6943cef3c380884172fa2a3220814a5d6f
Author: Markus Stockhausen <markus.stockhausen at gmx.de>
AuthorDate: Fri Aug 22 04:41:29 2025 -0400

    realtek: rt-loader: memory library enhancements
    
    Provide a crc32 function (will be needed later). Do some
    minor naming and coding cleanups
    
    Signed-off-by: Markus Stockhausen <markus.stockhausen at gmx.de>
    Link: https://github.com/openwrt/openwrt/pull/19832
    Signed-off-by: Hauke Mehrtens <hauke at hauke-m.de>
---
 .../linux/realtek/image/rt-loader/include/memory.h |  5 ++--
 target/linux/realtek/image/rt-loader/src/memory.c  | 35 ++++++++++++++++------
 2 files changed, 29 insertions(+), 11 deletions(-)

diff --git a/target/linux/realtek/image/rt-loader/include/memory.h b/target/linux/realtek/image/rt-loader/include/memory.h
index 80d0f8a283..a43c83219e 100644
--- a/target/linux/realtek/image/rt-loader/include/memory.h
+++ b/target/linux/realtek/image/rt-loader/include/memory.h
@@ -15,14 +15,15 @@
 #define ioread32(reg)			(*(volatile int *)(reg))
 #define iowrite32(val, reg)		(*(volatile int *)(reg) = val)
 
-void flush_cache(void *start_addr, unsigned long size);
+void flush_cache(void *start_addr, size_t count);
 void free(void *ptr);
-void *malloc(size_t size);
+void *malloc(size_t count);
 int memcmp(const void *s1, const void *s2, size_t count);
 void *memmove(void *dst, const void *src, size_t count);
 void *memcpy(void *dst, const void *src, size_t count);
 void *memset(void *dst, int value, size_t count);
 size_t strlen(const char *s);
+unsigned int crc32(void *m, size_t count);
 
 extern void *_heap_addr;
 extern void *_heap_addr_max;
diff --git a/target/linux/realtek/image/rt-loader/src/memory.c b/target/linux/realtek/image/rt-loader/src/memory.c
index 6ff5a44897..2e16d8afaa 100644
--- a/target/linux/realtek/image/rt-loader/src/memory.c
+++ b/target/linux/realtek/image/rt-loader/src/memory.c
@@ -21,7 +21,7 @@
 	:					\
 	: "i" (op), "R" (*(unsigned char *)(addr)))
 
-void flush_cache(void *start_addr, unsigned long size)
+void flush_cache(void *start_addr, size_t count)
 {
 	/*
 	 * MIPS cores may have different cache lines. Most common are 16 and 32 bytes. Avoid
@@ -31,7 +31,7 @@ void flush_cache(void *start_addr, unsigned long size)
 
 	unsigned long lsize = 16;
 	unsigned long addr = (unsigned long)start_addr & ~(lsize - 1);
-	unsigned long aend = ((unsigned long)start_addr + size - 1) & ~(lsize - 1);
+	unsigned long aend = ((unsigned long)start_addr + count - 1) & ~(lsize - 1);
 
 	while (1) {
 		CACHE_OP(CACHE_HIT_INVALIDATE_I, addr);
@@ -96,27 +96,44 @@ void *memset(void *dst, int c, size_t count)
 	return (void *)d;
 }
 
-void *malloc(size_t size)
+void *malloc(size_t count)
 {
 	void *start;
 
 	start = (void *)(((unsigned int)_heap_addr + MEMORY_ALIGNMENT - 1) & ~(MEMORY_ALIGNMENT - 1));
-	if ((start + size) > _heap_addr_max) {
+	if ((start + count) > _heap_addr_max) {
 		printf("malloc(%d) failed. Only %dkB of %dkB heap left.\n",
-		       size, (_heap_addr_max - start) >> 10, HEAP_SIZE >> 10);
+		       count, (_heap_addr_max - start) >> 10, HEAP_SIZE >> 10);
 		board_panic();
 	}
 
-	_heap_addr += size;
+	_heap_addr += count;
 
 	return start;
 }
 
 size_t strlen(const char *s)
 {
-	const char *p = s;
+	size_t len = 0;
 
-	while (*p) ++p;
+	while (s[len]) len++;
 
-	return (size_t)(p - s);
+	return len;
+}
+
+unsigned int crc32(void *m, size_t count)
+{
+	unsigned int crc = 0xffffffff;
+	unsigned char *data = m;
+
+	for (size_t i = 0; i < count; i++) {
+		crc ^= data[i];
+		for (int j = 0; j < 8; j++)
+			if (crc & 1)
+				crc = (crc >> 1) ^ 0xEDB88320;
+			else
+				crc >>= 1;
+	}
+
+	return ~crc;
 }




More information about the lede-commits mailing list