| From 1360a907879dd24041797a3b709d49aeac2ab444 Mon Sep 17 00:00:00 2001 |
| From: Denys Dmytriyenko <denys@ti.com> |
| Date: Tue, 29 May 2018 16:55:42 -0400 |
| Subject: [PATCH] devmem.c: ensure word is 32-bit and add support for 64-bit |
| long |
| |
| Signed-off-by: Denys Dmytriyenko <denys@ti.com> |
| --- |
| devmem2.c | 23 +++++++++++++++++------ |
| 1 file changed, 17 insertions(+), 6 deletions(-) |
| |
| diff --git a/devmem2.c b/devmem2.c |
| index 5845381..68131b2 100644 |
| --- a/devmem2.c |
| +++ b/devmem2.c |
| @@ -39,6 +39,7 @@ |
| |
| #include <stdio.h> |
| #include <stdlib.h> |
| +#include <stdint.h> |
| #include <unistd.h> |
| #include <string.h> |
| #include <errno.h> |
| @@ -69,7 +70,7 @@ int main(int argc, char **argv) { |
| 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" |
| + "\ttype : access operation type : [b]yte, [h]alfword, [w]ord, [l]ong\n" |
| "\tdata : data to be written\n\n", |
| argv[0]); |
| exit(1); |
| @@ -103,9 +104,14 @@ int main(int argc, char **argv) { |
| read_result = *((unsigned short *) virt_addr); |
| break; |
| case 'w': |
| - data_size = sizeof(unsigned long); |
| + data_size = sizeof(uint32_t); |
| virt_addr = fixup_addr(virt_addr, data_size); |
| - read_result = *((unsigned long *) virt_addr); |
| + read_result = *((uint32_t *) virt_addr); |
| + break; |
| + case 'l': |
| + data_size = sizeof(uint64_t); |
| + virt_addr = fixup_addr(virt_addr, data_size); |
| + read_result = *((uint64_t *) virt_addr); |
| break; |
| default: |
| fprintf(stderr, "Illegal data type '%c'.\n", access_type); |
| @@ -129,9 +135,14 @@ int main(int argc, char **argv) { |
| 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); |
| + virt_addr = fixup_addr(virt_addr, sizeof(uint32_t)); |
| + *((uint32_t *) virt_addr) = write_val; |
| + read_result = *((uint32_t *) virt_addr); |
| + break; |
| + case 'l': |
| + virt_addr = fixup_addr(virt_addr, sizeof(uint64_t)); |
| + *((uint64_t *) virt_addr) = write_val; |
| + read_result = *((uint64_t *) virt_addr); |
| break; |
| } |
| sprintf(fmt_str, "Write at address 0x%%08lX (%%p): 0x%%0%dlX, " |
| -- |
| 2.7.4 |
| |