diff options
author | Denys Dmytriyenko <denys@ti.com> | 2018-06-20 19:18:24 -0400 |
---|---|---|
committer | Khem Raj <raj.khem@gmail.com> | 2018-06-20 21:43:55 -0700 |
commit | 1bcd15ed5b31bdec492af99f671718d7a6eb887b (patch) | |
tree | 55fd461ba7e64c447fdb848d6047faeb09c1871c | |
parent | b707fa76cbc59b5a4a9b6324dc04290423cd729f (diff) | |
download | meta-openembedded-1bcd15ed5b31bdec492af99f671718d7a6eb887b.tar.gz |
devmem2: ensure word is 32-bit, add support for 64-bit long
Since sizeof(unsigned long) can be 8-byte on 64-bit architectures, use
uint32_t instead for "word" access to always be 4-byte/32-bit long.
Also introduce proper "long" 8-byte/64-bit access by using uint64_t.
Signed-off-by: Denys Dmytriyenko <denys@ti.com>
Signed-off-by: Khem Raj <raj.khem@gmail.com>
-rw-r--r-- | meta-oe/recipes-support/devmem2/devmem2.bb | 4 | ||||
-rw-r--r-- | meta-oe/recipes-support/devmem2/devmem2/0001-devmem.c-ensure-word-is-32-bit-and-add-support-for-6.patch | 70 |
2 files changed, 73 insertions, 1 deletions
diff --git a/meta-oe/recipes-support/devmem2/devmem2.bb b/meta-oe/recipes-support/devmem2/devmem2.bb index c86eb2e4bb..9bd1eb73d7 100644 --- a/meta-oe/recipes-support/devmem2/devmem2.bb +++ b/meta-oe/recipes-support/devmem2/devmem2.bb | |||
@@ -4,7 +4,9 @@ LIC_FILES_CHKSUM = "file://devmem2.c;endline=38;md5=a9eb9f3890384519f435aedf9862 | |||
4 | PR = "r7" | 4 | PR = "r7" |
5 | 5 | ||
6 | SRC_URI = "http://www.free-electrons.com/pub/mirror/devmem2.c;downloadfilename=devmem2-new.c \ | 6 | SRC_URI = "http://www.free-electrons.com/pub/mirror/devmem2.c;downloadfilename=devmem2-new.c \ |
7 | file://devmem2-fixups-2.patch;apply=yes;striplevel=0" | 7 | file://devmem2-fixups-2.patch;apply=yes;striplevel=0 \ |
8 | file://0001-devmem.c-ensure-word-is-32-bit-and-add-support-for-6.patch" | ||
9 | |||
8 | S = "${WORKDIR}" | 10 | S = "${WORKDIR}" |
9 | 11 | ||
10 | CFLAGS += "-DFORCE_STRICT_ALIGNMENT" | 12 | CFLAGS += "-DFORCE_STRICT_ALIGNMENT" |
diff --git a/meta-oe/recipes-support/devmem2/devmem2/0001-devmem.c-ensure-word-is-32-bit-and-add-support-for-6.patch b/meta-oe/recipes-support/devmem2/devmem2/0001-devmem.c-ensure-word-is-32-bit-and-add-support-for-6.patch new file mode 100644 index 0000000000..2a57f29891 --- /dev/null +++ b/meta-oe/recipes-support/devmem2/devmem2/0001-devmem.c-ensure-word-is-32-bit-and-add-support-for-6.patch | |||
@@ -0,0 +1,70 @@ | |||
1 | From 1360a907879dd24041797a3b709d49aeac2ab444 Mon Sep 17 00:00:00 2001 | ||
2 | From: Denys Dmytriyenko <denys@ti.com> | ||
3 | Date: Tue, 29 May 2018 16:55:42 -0400 | ||
4 | Subject: [PATCH] devmem.c: ensure word is 32-bit and add support for 64-bit | ||
5 | long | ||
6 | |||
7 | Signed-off-by: Denys Dmytriyenko <denys@ti.com> | ||
8 | --- | ||
9 | devmem2.c | 23 +++++++++++++++++------ | ||
10 | 1 file changed, 17 insertions(+), 6 deletions(-) | ||
11 | |||
12 | diff --git a/devmem2.c b/devmem2.c | ||
13 | index 5845381..68131b2 100644 | ||
14 | --- a/devmem2.c | ||
15 | +++ b/devmem2.c | ||
16 | @@ -39,6 +39,7 @@ | ||
17 | |||
18 | #include <stdio.h> | ||
19 | #include <stdlib.h> | ||
20 | +#include <stdint.h> | ||
21 | #include <unistd.h> | ||
22 | #include <string.h> | ||
23 | #include <errno.h> | ||
24 | @@ -69,7 +70,7 @@ int main(int argc, char **argv) { | ||
25 | if(argc < 2) { | ||
26 | fprintf(stderr, "\nUsage:\t%s { address } [ type [ data ] ]\n" | ||
27 | "\taddress : memory address to act upon\n" | ||
28 | - "\ttype : access operation type : [b]yte, [h]alfword, [w]ord\n" | ||
29 | + "\ttype : access operation type : [b]yte, [h]alfword, [w]ord, [l]ong\n" | ||
30 | "\tdata : data to be written\n\n", | ||
31 | argv[0]); | ||
32 | exit(1); | ||
33 | @@ -103,9 +104,14 @@ int main(int argc, char **argv) { | ||
34 | read_result = *((unsigned short *) virt_addr); | ||
35 | break; | ||
36 | case 'w': | ||
37 | - data_size = sizeof(unsigned long); | ||
38 | + data_size = sizeof(uint32_t); | ||
39 | virt_addr = fixup_addr(virt_addr, data_size); | ||
40 | - read_result = *((unsigned long *) virt_addr); | ||
41 | + read_result = *((uint32_t *) virt_addr); | ||
42 | + break; | ||
43 | + case 'l': | ||
44 | + data_size = sizeof(uint64_t); | ||
45 | + virt_addr = fixup_addr(virt_addr, data_size); | ||
46 | + read_result = *((uint64_t *) virt_addr); | ||
47 | break; | ||
48 | default: | ||
49 | fprintf(stderr, "Illegal data type '%c'.\n", access_type); | ||
50 | @@ -129,9 +135,14 @@ int main(int argc, char **argv) { | ||
51 | read_result = *((unsigned short *) virt_addr); | ||
52 | break; | ||
53 | case 'w': | ||
54 | - virt_addr = fixup_addr(virt_addr, sizeof(unsigned long)); | ||
55 | - *((unsigned long *) virt_addr) = write_val; | ||
56 | - read_result = *((unsigned long *) virt_addr); | ||
57 | + virt_addr = fixup_addr(virt_addr, sizeof(uint32_t)); | ||
58 | + *((uint32_t *) virt_addr) = write_val; | ||
59 | + read_result = *((uint32_t *) virt_addr); | ||
60 | + break; | ||
61 | + case 'l': | ||
62 | + virt_addr = fixup_addr(virt_addr, sizeof(uint64_t)); | ||
63 | + *((uint64_t *) virt_addr) = write_val; | ||
64 | + read_result = *((uint64_t *) virt_addr); | ||
65 | break; | ||
66 | } | ||
67 | sprintf(fmt_str, "Write at address 0x%%08lX (%%p): 0x%%0%dlX, " | ||
68 | -- | ||
69 | 2.7.4 | ||
70 | |||