summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fdtget.c10
-rw-r--r--libfdt/libfdt.h7
2 files changed, 15 insertions, 2 deletions
diff --git a/fdtget.c b/fdtget.c
index 777582e..54fc6a0 100644
--- a/fdtget.c
+++ b/fdtget.c
@@ -62,8 +62,14 @@ static int show_cell_list(struct display_info *disp, const char *data, int len,
for (i = 0; i < len; i += size, p += size) {
if (i)
printf(" ");
- value = size == 4 ? fdt32_ld((const fdt32_t *)p) :
- size == 2 ? (*p << 8) | p[1] : *p;
+ switch (size) {
+ case 4: value = fdt32_ld((const fdt32_t *)p); break;
+ case 2: value = fdt16_ld((const fdt16_t *)p); break;
+ case 1:
+ default:
+ value = *p;
+ break;
+ }
printf(fmt, value);
}
diff --git a/libfdt/libfdt.h b/libfdt/libfdt.h
index 73467f7..7f117e8 100644
--- a/libfdt/libfdt.h
+++ b/libfdt/libfdt.h
@@ -131,6 +131,13 @@ uint32_t fdt_next_tag(const void *fdt, int offset, int *nextoffset);
* to work even with unaligned pointers on platforms (such as ARMv5) that don't
* like unaligned loads and stores.
*/
+static inline uint16_t fdt16_ld(const fdt16_t *p)
+{
+ const uint8_t *bp = (const uint8_t *)p;
+
+ return ((uint16_t)bp[0] << 8) | bp[1];
+}
+
static inline uint32_t fdt32_ld(const fdt32_t *p)
{
const uint8_t *bp = (const uint8_t *)p;