aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Bénard <eric@eukrea.com>2011-01-13 15:49:27 +0100
committerEric Bénard <eric@eukrea.com>2011-01-13 16:01:16 +0100
commit7f07380ce98d61cd09793de98be45107b144f8f4 (patch)
treefdae65d55d2a07353237a365e4e58407755de93c
parent3d5d11f94b0a78517a18c8a4668a7a324fc11be2 (diff)
downloadopenembedded-7f07380ce98d61cd09793de98be45107b144f8f4.tar.gz
devmem2 : fix patch
Signed-off-by: Eric Bénard <eric@eukrea.com>
-rw-r--r--recipes/devmem2/devmem2.bb2
-rw-r--r--recipes/devmem2/devmem2/devmem2-fixups-2.patch232
2 files changed, 70 insertions, 164 deletions
diff --git a/recipes/devmem2/devmem2.bb b/recipes/devmem2/devmem2.bb
index e3c444bd21..0baa7f0955 100644
--- a/recipes/devmem2/devmem2.bb
+++ b/recipes/devmem2/devmem2.bb
@@ -3,7 +3,7 @@ LICENSE = "GPLv2"
PR = "r6"
SRC_URI = "http://www.lartmaker.nl/lartware/port/devmem2.c \
- file://devmem2-fixups-2.patch"
+ file://devmem2-fixups-2.patch;apply=yes;striplevel=0"
S = "${WORKDIR}"
do_compile() {
diff --git a/recipes/devmem2/devmem2/devmem2-fixups-2.patch b/recipes/devmem2/devmem2/devmem2-fixups-2.patch
index 92177346ce..4517797fc7 100644
--- a/recipes/devmem2/devmem2/devmem2-fixups-2.patch
+++ b/recipes/devmem2/devmem2/devmem2-fixups-2.patch
@@ -1,185 +1,91 @@
----
- devmem2.c | 145 ++++++++++++++++++++++++++++++++++++--------------------------
- 1 file changed, 86 insertions(+), 59 deletions(-)
-
---- devmem2-1.0-r5.orig/devmem2.c
-+++ devmem2-1.0-r5/devmem2.c
-@@ -20,7 +20,7 @@
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
-- *
-+ *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-@@ -38,84 +38,111 @@
- #include <termios.h>
- #include <sys/types.h>
- #include <sys/mman.h>
--
-+
- #define FATAL do { fprintf(stderr, "Error at line %d, file %s (%d) [%s]\n", \
- __LINE__, __FILE__, errno, strerror(errno)); exit(1); } while(0)
--
-+
+--- devmem2.c 2004-08-05 01:55:25.000000000 +0200
++++ devmem2_modif.c 2011-01-13 15:48:37.798799784 +0100
+@@ -45,12 +45,16 @@
#define MAP_SIZE 4096UL
#define MAP_MASK (MAP_SIZE - 1)
-
+
+static inline void *fixup_addr(void *addr, size_t size);
+
int main(int argc, char **argv) {
int fd;
-- void *map_base, *virt_addr;
+ void *map_base, *virt_addr;
- unsigned long read_result, writeval;
-- off_t target;
-- int access_type = 'w';
--
-- if(argc < 2) {
-- fprintf(stderr, "\nUsage:\t%s { address } [ type [ data ] ]\n"
-- "\taddress : memory address to act upon\n"
-- "\ttype : access operation type : [b]yte, [h]alfword, [w]ord\n"
-- "\tdata : data to be written\n\n",
-- argv[0]);
-- exit(1);
-- }
-- target = strtoul(argv[1], 0, 0);
-+ void *map_base, *virt_addr;
-+ unsigned long read_result, write_val;
-+ off_t target;
-+ int access_type = 'w';
-+ char fmt_str[128];
-+ size_t data_size;
-
-- if(argc > 2)
-- access_type = tolower(argv[2][0]);
-+ if(argc < 2) {
-+ fprintf(stderr, "\nUsage:\t%s { address } [ type [ data ] ]\n"
-+ "\taddress : memory address to act upon\n"
-+ "\ttype : access operation type : [b]yte, [h]alfword, [w]ord\n"
-+ "\tdata : data to be written\n\nWARNING: "
-+ "Writing or reading memory locations may corrupt your system,\n"
-+ "so please use this utility with extreme caution!\n", argv[0]);
-+ exit(1);
-+ }
-+ target = strtoul(argv[1], 0, 0);
-
-+ if(argc > 2) access_type = tolower(argv[2][0]);
-
- if((fd = open("/dev/mem", O_RDWR | O_SYNC)) == -1) FATAL;
-- printf("/dev/mem opened.\n");
-+ printf("/dev/mem opened.\n");
- fflush(stdout);
--
-+
- /* Map one page */
-- map_base = mmap(0, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, target & ~MAP_MASK);
-- if(map_base == (void *) -1) FATAL;
-- printf("Memory mapped at address %p.\n", map_base);
-+ map_base = mmap(0, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd,
-+ target & ~MAP_MASK);
-+ if(map_base == (void *)(-1)) FATAL;
-+ printf("Memory mapped at address %p.\n", map_base);
- fflush(stdout);
--
-+
++ unsigned long read_result, write_val;
+ off_t target;
+ int access_type = 'w';
++ char fmt_str[128];
++ size_t data_size;
+
+ if(argc < 2) {
+ fprintf(stderr, "\nUsage:\t%s { address } [ type [ data ] ]\n"
+@@ -79,38 +83,51 @@
virt_addr = map_base + (target & MAP_MASK);
switch(access_type) {
-- case 'b':
-- read_result = *((unsigned char *) virt_addr);
-- break;
-- case 'h':
-- read_result = *((unsigned short *) virt_addr);
-- break;
-- case 'w':
-- read_result = *((unsigned long *) virt_addr);
-- break;
-- default:
-- fprintf(stderr, "Illegal data type '%c'.\n", access_type);
-- exit(2);
-- }
-- printf("Value at address 0x%X (%p): 0x%X\n", target, virt_addr, read_result);
-+ case 'b':
-+ data_size = sizeof(unsigned char);
-+ virt_addr = fixup_addr(virt_addr, data_size);
-+ read_result = *((unsigned char *)virt_addr);
-+ break;
-+ case 'h':
-+ data_size = sizeof(unsigned short);
-+ virt_addr = fixup_addr(virt_addr, data_size);
-+ read_result = *((unsigned short *)virt_addr);
-+ break;
-+ case 'w':
-+ data_size = sizeof(unsigned long);
-+ virt_addr = fixup_addr(virt_addr, data_size);
-+ read_result = *((unsigned long *)virt_addr);
-+ break;
-+ default:
-+ fprintf(stderr, "Illegal data type '%c'.\n", access_type);
-+ exit(2);
-+ }
-+ sprintf(fmt_str, "Read at address 0x%%08lX (%%p): 0x%%0%dlX\n",
-+ 2*data_size);
+ case 'b':
++ data_size = sizeof(unsigned char);
++ virt_addr = fixup_addr(virt_addr, data_size);
+ read_result = *((unsigned char *) virt_addr);
+ break;
+ case 'h':
++ data_size = sizeof(unsigned short);
++ virt_addr = fixup_addr(virt_addr, data_size);
+ read_result = *((unsigned short *) virt_addr);
+ break;
+ case 'w':
++ data_size = sizeof(unsigned long);
++ virt_addr = fixup_addr(virt_addr, data_size);
+ read_result = *((unsigned long *) virt_addr);
+ break;
+ default:
+ fprintf(stderr, "Illegal data type '%c'.\n", access_type);
+ exit(2);
+ }
+- printf("Value at address 0x%X (%p): 0x%X\n", target, virt_addr, read_result);
++ sprintf(fmt_str, "Read at address 0x%%08lX (%%p): 0x%%0%dlX\n", 2*data_size);
+ printf(fmt_str, (unsigned long)target, virt_addr, read_result);
fflush(stdout);
-
-- if(argc > 3) {
+
+ if(argc > 3) {
- writeval = strtoul(argv[3], 0, 0);
-- switch(access_type) {
-- case 'b':
++ write_val = strtoul(argv[3], 0, 0);
+ switch(access_type) {
+ case 'b':
- *((unsigned char *) virt_addr) = writeval;
-- read_result = *((unsigned char *) virt_addr);
-- break;
-- case 'h':
++ virt_addr = fixup_addr(virt_addr, sizeof(unsigned char));
++ *((unsigned char *) virt_addr) = write_val;
+ read_result = *((unsigned char *) virt_addr);
+ break;
+ case 'h':
- *((unsigned short *) virt_addr) = writeval;
-- read_result = *((unsigned short *) virt_addr);
-- break;
-- case 'w':
++ virt_addr = fixup_addr(virt_addr, sizeof(unsigned short));
++ *((unsigned short *) virt_addr) = write_val;
+ read_result = *((unsigned short *) virt_addr);
+ break;
+ case 'w':
- *((unsigned long *) virt_addr) = writeval;
-- read_result = *((unsigned long *) virt_addr);
-- break;
-- }
-- printf("Written 0x%X; readback 0x%X\n", writeval, read_result);
-- fflush(stdout);
-+ if(argc > 3) {
-+ write_val = strtoul(argv[3], 0, 0);
-+ switch(access_type) {
-+ case 'b':
-+ virt_addr = fixup_addr(virt_addr, sizeof(unsigned char));
-+ *((unsigned char *)virt_addr) = write_val;
-+ read_result = *((unsigned char *)virt_addr);
-+ break;
-+ case 'h':
-+ virt_addr = fixup_addr(virt_addr, sizeof(unsigned short));
-+ *((unsigned short *)virt_addr) = write_val;
-+ read_result = *((unsigned short *)virt_addr);
-+ break;
-+ case 'w':
-+ virt_addr = fixup_addr(virt_addr, sizeof(unsigned long));
-+ *((unsigned long *)virt_addr) = write_val;
-+ read_result = *((unsigned long *)virt_addr);
-+ break;
- }
--
-- if(munmap(map_base, MAP_SIZE) == -1) FATAL;
-+ sprintf(fmt_str, "Write at address 0x%%08lX (%%p): 0x%%0%dlX, "
-+ "readback 0x%%0%dlX\n", 2*data_size, 2*data_size);
-+ printf(fmt_str, (unsigned long)target, virt_addr,
-+ write_val, read_result);
-+ fflush(stdout);
-+ }
-+
-+ if(munmap(map_base, MAP_SIZE) == -1) FATAL;
- close(fd);
++ virt_addr = fixup_addr(virt_addr, sizeof(unsigned long));
++ *((unsigned long *) virt_addr) = write_val;
+ read_result = *((unsigned long *) virt_addr);
+ break;
+ }
+- printf("Written 0x%X; readback 0x%X\n", writeval, read_result);
++ sprintf(fmt_str, "Write at address 0x%%08lX (%%p): 0x%%0%dlX, "
++ "readback 0x%%0%dlX\n", 2*data_size, 2*data_size);
++ printf(fmt_str, (unsigned long)target, virt_addr,
++ write_val, read_result);
+ fflush(stdout);
+ }
+
+@@ -119,3 +136,12 @@
return 0;
}
-
+
+static inline void *fixup_addr(void *addr, size_t size)
+{
+#ifdef FORCE_STRICT_ALIGNMENT
-+ unsigned long aligned_addr = (unsigned long)addr;
-+ aligned_addr &= ~(size - 1);
-+ addr = (void *)aligned_addr;
++ unsigned long aligned_addr = (unsigned long)addr;
++ aligned_addr &= ~(size - 1);
++ addr = (void *)aligned_addr;
+#endif
-+ return addr;
++ return addr;
+}