diff options
Diffstat (limited to 'meta-ti-extras/recipes/dtc/dtc/0001-fdtdump-Add-live-tree-dump-capability.patch')
-rw-r--r-- | meta-ti-extras/recipes/dtc/dtc/0001-fdtdump-Add-live-tree-dump-capability.patch | 212 |
1 files changed, 0 insertions, 212 deletions
diff --git a/meta-ti-extras/recipes/dtc/dtc/0001-fdtdump-Add-live-tree-dump-capability.patch b/meta-ti-extras/recipes/dtc/dtc/0001-fdtdump-Add-live-tree-dump-capability.patch deleted file mode 100644 index 372a4304..00000000 --- a/meta-ti-extras/recipes/dtc/dtc/0001-fdtdump-Add-live-tree-dump-capability.patch +++ /dev/null @@ -1,212 +0,0 @@ -From da5c33dd94949fa27243faf15cd87e98c53ccb29 Mon Sep 17 00:00:00 2001 -From: Pantelis Antoniou <pantelis.antoniou@konsulko.com> -Date: Tue, 5 Nov 2013 10:16:14 +0200 -Subject: [PATCH] fdtdump: Add live tree dump capability - -Adds the capability to dump any point of the kernel's live tree -which resides usually in /proc/device-tree. - -For example you can do this: - - # fdtdump /proc/device-tree/ocp/ethernet\@4a100000/ - /* dump of live tree at /proc/device-tree/ocp/ethernet@4a100000 */ - / { - name = "ethernet"; - pinctrl-1 = <0x0000000b>; - pinctrl-0 = <0x0000000a>; - pinctrl-names = "default", "sleep"; - ranges; - interrupts = <0x00000028 0x00000000 0x00000000 0x00000000>; - interrupt-parent = <0x00000001>; - #size-cells = <0x00000001>; - #address-cells = <0x00000001>; - reg = <0x4a100000 0x00000000 0x00000000 0x00000000>; - cpts_clock_shift = <0x0000001d>; - cpts_clock_mult = <0x80000000>; - active_slave = <0x00000000>; - slaves = <0x00000002>; - mac_control = <0x00000020>; - rx_descs = <0x00000040>; - no_bd_ram = <0x00000000>; - bd_ram_size = <0x00002000>; - ale_entries = <0x00000400>; - cpdma_channels = <0x00000008>; - ti,hwmods = "cpgmac0"; - compatible = "ti,cpsw"; - slave@4a100300 { - name = "slave"; - phy-mode = "mii"; - phy_id = <0x0000000e 0x00000000>; - mac-address = [00 00 00 00 00 00]; - }; - slave@4a100200 { - name = "slave"; - phy-mode = "mii"; - phy_id = <0x0000000e 0x00000000>; - mac-address = [00 00 00 00 00 00]; - }; - mdio@4a101000 { - name = "mdio"; - phandle = <0x0000000e>; - linux,phandle = <0x0000000e>; - pinctrl-1 = <0x0000000d>; - pinctrl-0 = <0x0000000c>; - pinctrl-names = "default", "sleep"; - reg = <0x4a101000 0x00000000>; - bus_freq = <0x000f4240>; - ti,hwmods = "davinci_mdio"; - #size-cells = <0x00000000>; - #address-cells = <0x00000001>; - compatible = "ti,davinci_mdio"; - }; - }; - -This makes it much easier to see the state of the kernel's live tree. - -Signed-off-by: Pantelis Antoniou <pantelis.antoniou@konsulko.com> ---- - fdtdump.c | 107 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 107 insertions(+) - -diff --git a/fdtdump.c b/fdtdump.c -index 95a6a20..9183555 100644 ---- a/fdtdump.c -+++ b/fdtdump.c -@@ -8,6 +8,14 @@ - #include <stdlib.h> - #include <string.h> - #include <ctype.h> -+#include <sys/types.h> -+#include <sys/stat.h> -+#include <alloca.h> -+#include <dirent.h> -+#include <limits.h> -+#include <unistd.h> -+#include <fcntl.h> -+#include <errno.h> - - #include <libfdt.h> - #include <libfdt_env.h> -@@ -143,6 +151,95 @@ static void dump_blob(void *blob, bool debug) - } - } - -+static void dump_live_internal(const char *path, bool debug, int depth) -+{ -+ int maxsz = strlen(path) + 1 + PATH_MAX; -+ char *new_path = alloca(maxsz + 1); -+ struct stat sb; -+ struct dirent *de; -+ char *buf, *p; -+ int buf_alloc, shift, chunk, left, fd, ret; -+ DIR *d; -+ -+ shift = 4; -+ buf_alloc = 4 * 1024; /* 4K (maximum chunk) */ -+ buf = alloca(buf_alloc + sizeof(uint32_t)); -+ buf[buf_alloc] = '\0'; /* always terminate (just in case) */ -+ -+ d = opendir(path); -+ if (d == NULL) -+ die("Could not open %s directory\n", path); -+ -+ /* first dump the properties (files) */ -+ while ((de = readdir(d)) != NULL) { -+ /* properties are files */ -+ if (de->d_type != DT_REG) -+ continue; -+ snprintf(new_path, maxsz, "%s/%s", path, de->d_name); -+ new_path[maxsz] = '\0'; -+ printf("%*s%s", depth * shift, "", de->d_name); -+ -+ if (stat(new_path, &sb) != 0) -+ die("could not open: %s\n", new_path); -+ -+ fd = open(new_path, O_RDONLY); -+ if (fd == -1) -+ die("Could not open: %s\n", new_path); -+ -+ chunk = sb.st_size > buf_alloc ? buf_alloc : sb.st_size; -+ p = buf; -+ left = chunk; -+ while (left > 0) { -+ do { -+ ret = read(fd, p, left); -+ } while (ret == -1 && (errno == EAGAIN || errno == EINTR)); -+ if (ret == -1) -+ die("Read failed on: %s\n", new_path); -+ left -= ret; -+ p += ret; -+ } -+ close(fd); -+ -+ if (chunk < sb.st_size) -+ printf(" (trunc)"); -+ utilfdt_print_data(buf, chunk); -+ printf(";\n"); -+ } -+ -+ /* now recurse to the directories */ -+ rewinddir(d); -+ while ((de = readdir(d)) != NULL) { -+ /* properties are files */ -+ if (de->d_type != DT_DIR) -+ continue; -+ /* skip current and parent directories */ -+ if (strcmp(de->d_name, ".") == 0 || -+ strcmp(de->d_name, "..") == 0) -+ continue; -+ snprintf(new_path, maxsz, "%s/%s", path, de->d_name); -+ new_path[maxsz] = '\0'; -+ printf("%*s%s {\n", depth * shift, "", de->d_name); -+ dump_live_internal(new_path, debug, depth + 1); -+ printf("%*s};\n", depth * shift, ""); -+ } -+} -+ -+static void dump_live(const char *path, bool debug) -+{ -+ char *fixed_path = alloca(strlen(path) + 1); -+ char *p; -+ -+ /* strip trailing / */ -+ strcpy(fixed_path, path); -+ p = fixed_path + strlen(fixed_path) - 1; -+ while (*p == '/' && p > fixed_path) -+ *p-- = '\0'; -+ printf("/* dump of live tree at %s */\n", fixed_path); -+ printf("/ {\n"); -+ dump_live_internal(fixed_path, debug, 1); -+ printf("};\n"); -+} -+ - /* Usage related data. */ - static const char usage_synopsis[] = "fdtdump [options] <file>"; - static const char usage_short_opts[] = "ds" USAGE_COMMON_SHORT_OPTS; -@@ -165,6 +262,7 @@ int main(int argc, char *argv[]) - bool debug = false; - bool scan = false; - off_t len; -+ struct stat sb; - - while ((opt = util_getopt_long()) != EOF) { - switch (opt) { -@@ -182,6 +280,15 @@ int main(int argc, char *argv[]) - usage("missing input filename"); - file = argv[optind]; - -+ if (stat(file, &sb) != 0) -+ die("could not open: %s\n", file); -+ -+ /* dump live tree if it's a directory */ -+ if (S_ISDIR(sb.st_mode)) { -+ dump_live(file, debug); -+ return 0; -+ } -+ - buf = utilfdt_read_len(file, &len); - if (!buf) - die("could not read: %s\n", file); --- -1.9.1 - |