Sergii Dmytruk has uploaded this change for review. ( https://review.coreboot.org/c/flashrom/+/63416 )
Change subject: [WIP] add me_unlock_tool ......................................................................
[WIP] add me_unlock_tool
This is an alternative take on CB:56023 that implement ME unlocking in a separate tool. The only problem is: it links to a half of flashrom sources... Another issue is creation of a fake programmer for register_shutdown() to work.
With the current state of the codebase, it's virtually impossible to do better. Check SVG file in the commit for a graph depicting import/export of function symbols from a subset of object files used by this tool.
Change-Id: Ie8d66f1ee449ce8f2cbdc8c744e9b70428de533d Signed-off-by: Sergii Dmytruk sergii.dmytruk@3mdeb.com --- M .gitignore M Makefile M board_enable.c M ichspi.c M programmer.h A util/me_unlock_tool/Makefile A util/me_unlock_tool/call-deps.svg A util/me_unlock_tool/me_unlock_tool.c A util/me_unlock_tool/meson.build M util/meson.build 10 files changed, 2,345 insertions(+), 1 deletion(-)
git pull ssh://review.coreboot.org:29418/flashrom refs/changes/16/63416/1
diff --git a/.gitignore b/.gitignore index 7c45aba..ce99fd1 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,7 @@ /util/ich_descriptors_tool/ich_descriptors_tool.exe /util/ich_descriptors_tool/.dep /util/ich_descriptors_tool/.obj + +/util/me_unlock_tool/me_unlock_tool +/util/me_unlock_tool/me_unlock_tool.exe +/util/me_unlock_tool/build_details.txt diff --git a/Makefile b/Makefile index 967106c..dc0f2ec 100644 --- a/Makefile +++ b/Makefile @@ -910,6 +910,7 @@ all: config $(PROGRAM)$(EXEC_SUFFIX) $(PROGRAM).8 ifeq ($(ARCH), x86) @+$(MAKE) -C util/ich_descriptors_tool/ HOST_OS=$(HOST_OS) TARGET_OS=$(TARGET_OS) + @+$(MAKE) -C util/me_unlock_tool/ HOST_OS=$(HOST_OS) TARGET_OS=$(TARGET_OS) endif
config: @@ -994,6 +995,7 @@ clean: rm -f $(PROGRAM) $(PROGRAM).exe libflashrom.a $(filter-out Makefile.d, $(wildcard *.d *.o)) $(PROGRAM).8 $(PROGRAM).8.html $(BUILD_DETAILS_FILE) @+$(MAKE) -C util/ich_descriptors_tool/ clean + @+$(MAKE) -C util/me_unlock_tool/ clean
install: $(PROGRAM)$(EXEC_SUFFIX) $(PROGRAM).8 mkdir -p $(DESTDIR)$(PREFIX)/sbin diff --git a/board_enable.c b/board_enable.c index 94cfc9d..65bd5aa 100644 --- a/board_enable.c +++ b/board_enable.c @@ -2310,6 +2310,29 @@ return 0; }
+static int clevo_check_me(void) +{ + uint16_t hsfs; + + p2_whitelist_laptop(); + + if (ich_get_hsfs(&hsfs)) { + /* ME is status is unknown, assume unlocked */ + return 0; + } + + /* Check FDOPSS and FDV */ + if (!(hsfs & (1 << 13)) && (hsfs & (1 << 14))) { + /* ME is unlocked */ + return 0; + } + + msg_pinfo("ME is locked: run me_unlock_tool tool to unlock before writing flash\n"); + + /* Can't fail as user might not be trying to write flash */ + return 0; +} + #endif
/* @@ -2524,6 +2547,8 @@ {0x1106, 0x3104, 0x1297, 0xa238, 0x1106, 0x3059, 0x1297, 0xc063, NULL, NULL, NULL, P3, "Shuttle", "AK38N", 256, OK, NULL}, {0x1106, 0x3038, 0x0925, 0x1234, 0x1106, 0x3058, 0x15DD, 0x7609, NULL, NULL, NULL, P3, "Soyo", "SY-7VCA", 0, OK, via_apollo_gpo0_lower}, {0x10de, 0x0364, 0x108e, 0x6676, 0x10de, 0x0369, 0x108e, 0x6676, "^Sun Ultra 40 M2", NULL, NULL, P3, "Sun", "Ultra 40 M2", 0, OK, board_sun_ultra_40_m2}, + {0x8086, 0xa082, 0x1558, 0x14a1, 0x8086, 0x9a14, 0x1558, 0x14a1, NULL, NULL, NULL, P3, "TUXEDO", "InfinityBook S 14 Gen6", 0, OK, clevo_check_me}, + {0x8086, 0xa082, 0x1558, 0x51a1, 0x8086, 0x9a14, 0x1558, 0x51a1, NULL, NULL, NULL, P3, "TUXEDO", "InfinityBook S 15 Gen6", 0, OK, clevo_check_me}, {0x1106, 0x3038, 0x0925, 0x1234, 0x1106, 0x0596, 0x1106, 0, NULL, NULL, NULL, P3, "Tekram", "P6Pro-A5", 256, OK, NULL}, {0x1106, 0x3123, 0x1106, 0x3123, 0x1106, 0x3059, 0x1106, 0x4161, NULL, NULL, NULL, P3, "Termtek", "TK-3370 (Rev:2.5B)", 0, OK, w836xx_memw_enable_4e}, {0x8086, 0x7120, 0x109f, 0x3157, 0x8086, 0x2410, 0, 0, NULL, NULL, NULL, P3, "TriGem", "Anaheim-3", 0, OK, intel_ich_gpio22_raise}, @@ -2642,7 +2667,7 @@ * Match boards on PCI IDs and subsystem IDs. * Second set of IDs can be either main+subsystem IDs, main IDs or no IDs. */ -static const struct board_match *board_match_pci_ids(enum board_match_phase phase) +const struct board_match *board_match_pci_ids(enum board_match_phase phase) { const struct board_match *board = board_matches;
diff --git a/ichspi.c b/ichspi.c index 47b23eb..6a824d0 100644 --- a/ichspi.c +++ b/ichspi.c @@ -1713,6 +1713,16 @@ .erase = ich_hwseq_block_erase, };
+int ich_get_hsfs(uint16_t* hsfs) +{ + if (!ich_spibar || !hsfs) + return -1; + + *hsfs = mmio_readw(ich_spibar + ICH9_REG_HSFS); + + return 0; +} + int ich_init_spi(void *spibar, enum ich_chipset ich_gen) { unsigned int i; diff --git a/programmer.h b/programmer.h index 647d822..134dabd 100644 --- a/programmer.h +++ b/programmer.h @@ -224,6 +224,7 @@ void board_handle_before_superio(void); void board_handle_before_laptop(void); int board_flash_enable(const char *vendor, const char *model, const char *cb_vendor, const char *cb_model); +const struct board_match *board_match_pci_ids(enum board_match_phase phase);
/* chipset_enable.c */ int chipset_flash_enable(void); @@ -357,6 +358,7 @@ /* ichspi.c */ #if CONFIG_INTERNAL == 1 int ich_init_spi(void *spibar, enum ich_chipset ich_generation); +int ich_get_hsfs(uint16_t* hsfs); int via_init_spi(uint32_t mmio_base);
/* amd_imc.c */ diff --git a/util/me_unlock_tool/Makefile b/util/me_unlock_tool/Makefile new file mode 100644 index 0000000..15bf86c --- /dev/null +++ b/util/me_unlock_tool/Makefile @@ -0,0 +1,133 @@ +# +# This file is part of the flashrom project. +# +# This Makefile works standalone, but it is usually called from the main +# Makefile in the flashrom directory. + +include ../../Makefile.include + +PROGRAM = me_unlock_tool +EXTRAINCDIRS = ../../ . +DEPPATH = .dep +OBJPATH = .obj +SHAREDSRC = 82802ab.c acpi_ec.c amd_imc.c at45db.c bitbang_spi.c \ + board_enable.c cbtable.c chipset_enable.c dmi.c dummyflasher.c \ + edi.c en29lv640b.c flashchips.c flashrom.c fmap.c helpers.c \ + hwaccess_physmap.c hwaccess_x86_io.c hwaccess_x86_msr.c \ + ich_descriptors.c ichspi.c internal.c it87spi.c jedec.c layout.c \ + libflashrom.c mcp6x_spi.c opaque.c pcidev.c print.c \ + processor_enable.c programmer.c programmer_table.c s25f.c \ + sb600spi.c sfdp.c spi.c spi25.c spi25_statusreg.c spi95.c \ + sst28sf040.c sst49lfxxxc.c sst_fwhub.c stm50.c udelay.c w29ee011.c \ + w39.c wbsio_spi.c +SHAREDSRCDIR = ../.. +# If your compiler spits out excessive warnings, run make WARNERROR=no +# You shouldn't have to change this flag. +WARNERROR ?= yes + +PKG_CONFIG ?= pkg-config +BUILD_DETAILS_FILE ?= build_details.txt + +dummy_for_make_3_80 := $(shell printf "Build started on %s\n\n" "$$(date)" >$(BUILD_DETAILS_FILE)) + +# Provide an easy way to execute a command, print its output to stdout and capture any error message on stderr +# in the build details file together with the original stdout output. +debug_shell = $(shell export LC_ALL=C ; { echo 'exec: export LC_ALL=C ; { $(subst ',''',$(1)) ; }' >&2; \ + { $(1) ; } | tee -a $(BUILD_DETAILS_FILE) ; echo >&2 ; } 2>>$(BUILD_DETAILS_FILE)) + +CONFIG_LIBPCI_CFLAGS := $(call dependency_cflags, libpci) +CONFIG_LIBPCI_LDFLAGS := $(call dependency_ldflags, libpci) + +SRC = $(wildcard *.c) + +# If the user has specified custom CFLAGS, all CFLAGS settings below will be +# completely ignored by gnumake. +CFLAGS ?= -Os -Wall -Wshadow + +# Auto determine HOST_OS and TARGET_OS if they are not set as argument +HOST_OS ?= $(shell uname) + +ifeq ($(findstring MINGW, $(HOST_OS)), MINGW) +# Explicitly set CC = gcc on MinGW, otherwise: "cc: command not found". +CC = gcc +endif + +# IMPORTANT: The following line must be placed before TARGET_OS is ever used (of +# course), but should come after any lines setting CC because the lines below +# use CC itself. +TARGET_OS := $(call c_macro_test, ../../Makefile.d/os_test.h) + +ifeq ($(TARGET_OS), DOS) +EXEC_SUFFIX := .exe +# DJGPP has odd uint*_t definitions which cause lots of format string warnings. +CFLAGS += -Wno-format +endif + +ifeq ($(TARGET_OS), MinGW) +EXEC_SUFFIX := .exe +# Some functions provided by Microsoft do not work as described in C99 specifications. This macro fixes that +# for MinGW. See http://sourceforge.net/p/mingw-w64/wiki2/printf%20and%20scanf%20family/ +CFLAGS += -D__USE_MINGW_ANSI_STDIO=1 +endif + +ifeq ($(TARGET_OS), $(filter $(TARGET_OS), Linux Darwin NetBSD OpenBSD)) +FEATURE_FLAGS += -D'USE_IOPL=1' +else +FEATURE_FLAGS += -D'USE_IOPL=0' +endif + +ifeq ($(TARGET_OS), $(filter $(TARGET_OS), FreeBSD FreeBSD-glibc DragonFlyBSD)) +FEATURE_FLAGS += -D'USE_DEV_IO=1' +else +FEATURE_FLAGS += -D'USE_DEV_IO=0' +endif + +ifeq ($(TARGET_OS), $(filter $(TARGET_OS), Hurd)) +FEATURE_FLAGS += -D'USE_IOPERM=1' +else +FEATURE_FLAGS += -D'USE_IOPERM=0' +endif + +ifeq ($(WARNERROR), yes) +CFLAGS += -Werror +endif + +override CFLAGS += $(CONFIG_LIBPCI_CFLAGS) +override LDFLAGS += $(CONFIG_LIBPCI_LDFLAGS) + + +FLASHROM_CFLAGS += -MMD -MP -MF $(DEPPATH)/$(@F).d +# enables functions that populate the descriptor structs from plain binary dumps +FLASHROM_CFLAGS += -D CONFIG_INTERNAL=1 +FLASHROM_CFLAGS += -D NEED_PCI=1 +FLASHROM_CFLAGS += -D FLASHROM_VERSION='""' +FLASHROM_CFLAGS += -D __FLASHROM_LITTLE_ENDIAN__ +FLASHROM_CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) +FLASHROM_CFLAGS += $(FEATURE_FLAGS) + +OBJ = $(OBJPATH)/$(SRC:%.c=%.o) + +SHAREDOBJ = $(addprefix $(OBJPATH)/, $(notdir $(SHAREDSRC:%.c=%.o))) + +all:$(PROGRAM)$(EXEC_SUFFIX) + +$(OBJ): $(OBJPATH)/%.o : %.c + $(CC) $(CFLAGS) $(CPPFLAGS) $(FLASHROM_CFLAGS) -o $@ -c $< + +# this enables us to share source files without simultaneously sharing .o files +# with flashrom, which would lead to unexpected results (w/o running make clean) +$(SHAREDOBJ): $(OBJPATH)/%.o : $(SHAREDSRCDIR)/%.c + $(CC) $(CFLAGS) $(CPPFLAGS) $(FLASHROM_CFLAGS) -o $@ -c $< + +$(PROGRAM)$(EXEC_SUFFIX): $(OBJ) $(SHAREDOBJ) + $(CC) $(LDFLAGS) -o $(PROGRAM)$(EXEC_SUFFIX) $(OBJ) $(SHAREDOBJ) + +# We don't use EXEC_SUFFIX here because we want to clean everything. +clean: + rm -f $(PROGRAM) $(PROGRAM).exe $(BUILD_DETAILS_FILE) + rm -rf $(DEPPATH) $(OBJPATH) + +# Include the dependency files. +-include $(shell mkdir -p $(DEPPATH) $(OBJPATH) 2>/dev/null) $(wildcard $(DEPPATH)/*) + +.PHONY: all clean diff --git a/util/me_unlock_tool/call-deps.svg b/util/me_unlock_tool/call-deps.svg new file mode 100644 index 0000000..3c429d4 --- /dev/null +++ b/util/me_unlock_tool/call-deps.svg @@ -0,0 +1,1889 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.40.1 (20161225.0304) + --> +<!-- Title: moddeps Pages: 1 --> +<svg width="3893pt" height="3711pt" + viewBox="0.00 0.00 3892.93 3710.93" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink%22%3E +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 3706.9299)"> +<title>moddeps</title> +<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-3706.9299 3888.9299,-3706.9299 3888.9299,4 -4,4"/> +<!-- opaque.o --> +<g id="node1" class="node"> +<title>opaque.o</title> +<polygon fill="#ffff00" stroke="#000000" points="167.9738,-2344.0006 86.9738,-2344.0006 86.9738,-2308.0006 167.9738,-2308.0006 167.9738,-2344.0006"/> +<text text-anchor="middle" x="127.4738" y="-2322.3006" font-family="Times,serif" font-size="14.00" fill="#000000">opaque.o</text> +</g> +<!-- libflashrom.o --> +<g id="node2" class="node"> +<title>libflashrom.o</title> +<polygon fill="#ffff00" stroke="#000000" points="365.6377,-952.7325 255.6377,-952.7325 255.6377,-916.7325 365.6377,-916.7325 365.6377,-952.7325"/> +<text text-anchor="middle" x="310.6377" y="-931.0325" font-family="Times,serif" font-size="14.00" fill="#000000">libflashrom.o</text> +</g> +<!-- opaque.o->libflashrom.o --> +<g id="edge1" class="edge"> +<title>opaque.o->libflashrom.o</title> +<path fill="none" stroke="#000000" d="M129.8567,-2307.901C149.3761,-2159.6362 282.832,-1145.9383 306.9167,-962.9962"/> +<polygon fill="#000000" stroke="#000000" points="310.4187,-963.2104 308.2539,-952.8391 303.4785,-962.2967 310.4187,-963.2104"/> +<text text-anchor="middle" x="213.3867" y="-1639.2486" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- programmer.o --> +<g id="node3" class="node"> +<title>programmer.o</title> +<polygon fill="#ffff00" stroke="#000000" points="139.6855,-2108.7801 21.6855,-2108.7801 21.6855,-2072.7801 139.6855,-2072.7801 139.6855,-2108.7801"/> +<text text-anchor="middle" x="80.6855" y="-2087.0801" font-family="Times,serif" font-size="14.00" fill="#000000">programmer.o</text> +</g> +<!-- opaque.o->programmer.o --> +<g id="edge2" class="edge"> +<title>opaque.o->programmer.o</title> +<path fill="none" stroke="#000000" d="M123.8801,-2307.9338C115.7662,-2267.1427 95.9798,-2167.6696 86.2599,-2118.8044"/> +<polygon fill="#000000" stroke="#000000" points="89.6752,-2118.0335 84.2915,-2108.9085 82.8097,-2119.3992 89.6752,-2118.0335"/> +<text text-anchor="middle" x="100.07" y="-2217.1691" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- flashrom.o --> +<g id="node4" class="node"> +<title>flashrom.o</title> +<polygon fill="#ffff00" stroke="#000000" points="1944.4649,-3702.9299 1852.4649,-3702.9299 1852.4649,-3666.9299 1944.4649,-3666.9299 1944.4649,-3702.9299"/> +<text text-anchor="middle" x="1898.4649" y="-3681.2299" font-family="Times,serif" font-size="14.00" fill="#000000">flashrom.o</text> +</g> +<!-- opaque.o->flashrom.o --> +<g id="edge3" class="edge"> +<title>opaque.o->flashrom.o</title> +<path fill="none" stroke="#000000" d="M151.1699,-2344.1832C343.4608,-2491.7332 1646.7169,-3491.7568 1866.9008,-3660.7099"/> +<polygon fill="#000000" stroke="#000000" points="1864.7885,-3663.5007 1874.8527,-3666.8116 1869.0498,-3657.9472 1864.7885,-3663.5007"/> +<text text-anchor="middle" x="1004.0354" y="-3006.2466" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- libflashrom.o->programmer.o --> +<g id="edge79" class="edge"> +<title>libflashrom.o->programmer.o</title> +<path fill="none" stroke="#000000" d="M305.0911,-952.9932C272.2216,-1085.6086 110.0608,-1900.1897 83.9807,-2062.6211"/> +<polygon fill="#000000" stroke="#000000" points="80.481,-2062.3493 82.4017,-2072.7686 87.3977,-2063.4257 80.481,-2062.3493"/> +<text text-anchor="middle" x="189.5359" y="-1511.6071" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- libflashrom.o->flashrom.o --> +<g id="edge85" class="edge"> +<title>libflashrom.o->flashrom.o</title> +<path fill="none" stroke="#000000" d="M319.7326,-952.8978C440.2759,-1176.2703 1717.4393,-3388.5774 1881.2356,-3658.0859"/> +<polygon fill="#000000" stroke="#000000" points="1878.3883,-3660.1389 1886.5889,-3666.8471 1884.3615,-3656.4891 1878.3883,-3660.1389"/> +<text text-anchor="middle" x="1095.4841" y="-2309.2919" font-family="Times,serif" font-size="14.00" fill="#000000">9</text> +</g> +<!-- chipset_enable.o --> +<g id="node15" class="node"> +<title>chipset_enable.o</title> +<polygon fill="#ffff00" stroke="#000000" points="2667.6016,-175.5642 2532.6016,-175.5642 2532.6016,-139.5642 2667.6016,-139.5642 2667.6016,-175.5642"/> +<text text-anchor="middle" x="2600.1016" y="-153.8642" font-family="Times,serif" font-size="14.00" fill="#000000">chipset_enable.o</text> +</g> +<!-- libflashrom.o->chipset_enable.o --> +<g id="edge76" class="edge"> +<title>libflashrom.o->chipset_enable.o</title> +<path fill="none" stroke="#000000" d="M365.6969,-918.4195C678.4302,-818.5785 2228.2752,-292.4942 2543.9286,-179.0612"/> +<polygon fill="#000000" stroke="#000000" points="2545.1182,-182.3529 2553.3391,-175.6694 2542.7447,-175.7676 2545.1182,-182.3529"/> +<text text-anchor="middle" x="1449.8128" y="-552.5404" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- udelay.o --> +<g id="node22" class="node"> +<title>udelay.o</title> +<polygon fill="#ffff00" stroke="#000000" points="3629.3657,-1167.8283 3555.3657,-1167.8283 3555.3657,-1131.8283 3629.3657,-1131.8283 3629.3657,-1167.8283"/> +<text text-anchor="middle" x="3592.3657" y="-1146.1283" font-family="Times,serif" font-size="14.00" fill="#000000">udelay.o</text> +</g> +<!-- libflashrom.o->udelay.o --> +<g id="edge78" class="edge"> +<title>libflashrom.o->udelay.o</title> +<path fill="none" stroke="#000000" d="M365.7542,-940.2658C762.4276,-972.7696 3176.5325,-1130.9518 3545.1711,-1148.5161"/> +<polygon fill="#000000" stroke="#000000" points="3545.08,-1152.0155 3555.2316,-1148.9834 3545.4048,-1145.0231 3545.08,-1152.0155"/> +<text text-anchor="middle" x="1950.4626" y="-1048.191" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- print.o --> +<g id="node26" class="node"> +<title>print.o</title> +<polygon fill="#ffff00" stroke="#000000" points="634.5094,-573.0094 569.5094,-573.0094 569.5094,-537.0094 634.5094,-537.0094 634.5094,-573.0094"/> +<text text-anchor="middle" x="602.0094" y="-551.3094" font-family="Times,serif" font-size="14.00" fill="#000000">print.o</text> +</g> +<!-- libflashrom.o->print.o --> +<g id="edge77" class="edge"> +<title>libflashrom.o->print.o</title> +<path fill="none" stroke="#000000" d="M328.671,-916.5598C381.5995,-855.0853 535.1234,-655.1809 585.738,-582.0589"/> +<polygon fill="#000000" stroke="#000000" points="588.9059,-583.626 591.6517,-573.3932 583.1239,-579.6803 588.9059,-583.626"/> +<text text-anchor="middle" x="452.2045" y="-753.1094" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- flashchips.o --> +<g id="node27" class="node"> +<title>flashchips.o</title> +<polygon fill="#ffff00" stroke="#000000" points="2865.6974,-3457.2922 2764.6974,-3457.2922 2764.6974,-3421.2922 2865.6974,-3421.2922 2865.6974,-3457.2922"/> +<text text-anchor="middle" x="2815.1974" y="-3435.5922" font-family="Times,serif" font-size="14.00" fill="#000000">flashchips.o</text> +</g> +<!-- libflashrom.o->flashchips.o --> +<g id="edge80" class="edge"> +<title>libflashrom.o->flashchips.o</title> +<path fill="none" stroke="#000000" d="M328.6566,-952.7514C539.8367,-1163.9315 2540.7128,-3164.8075 2789.7888,-3413.8836"/> +<polygon fill="#000000" stroke="#000000" points="2787.4162,-3416.4608 2796.9622,-3421.057 2792.366,-3411.511 2787.4162,-3416.4608"/> +<text text-anchor="middle" x="1554.2227" y="-2187.1175" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- programmer_table.o --> +<g id="node28" class="node"> +<title>programmer_table.o</title> +<polygon fill="#ffff00" stroke="#000000" points="863.3222,-414.8794 701.3222,-414.8794 701.3222,-378.8794 863.3222,-378.8794 863.3222,-414.8794"/> +<text text-anchor="middle" x="782.3222" y="-393.1794" font-family="Times,serif" font-size="14.00" fill="#000000">programmer_table.o</text> +</g> +<!-- libflashrom.o->programmer_table.o --> +<g id="edge83" class="edge"> +<title>libflashrom.o->programmer_table.o</title> +<path fill="none" stroke="#000000" d="M326.6018,-916.5289C396.7332,-836.5594 677.6413,-516.2451 759.7037,-422.6709"/> +<polygon fill="#000000" stroke="#000000" points="762.4001,-424.9045 766.3621,-415.0784 757.1372,-420.2891 762.4001,-424.9045"/> +<text text-anchor="middle" x="538.1527" y="-673.3999" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- layout.o --> +<g id="node34" class="node"> +<title>layout.o</title> +<polygon fill="#ffff00" stroke="#000000" points="480.8794,-753.3222 406.8794,-753.3222 406.8794,-717.3222 480.8794,-717.3222 480.8794,-753.3222"/> +<text text-anchor="middle" x="443.8794" y="-731.6222" font-family="Times,serif" font-size="14.00" fill="#000000">layout.o</text> +</g> +<!-- libflashrom.o->layout.o --> +<g id="edge81" class="edge"> +<title>libflashrom.o->layout.o</title> +<path fill="none" stroke="#000000" d="M327.9765,-916.5362C355.3892,-881.1923 407.508,-803.3655 431.5073,-762.1152"/> +<polygon fill="#000000" stroke="#000000" points="434.5518,-763.8417 436.4471,-753.4178 428.465,-760.3846 434.5518,-763.8417"/> +<text text-anchor="middle" x="374.7419" y="-843.1257" font-family="Times,serif" font-size="14.00" fill="#000000">4</text> +</g> +<!-- ich_descriptors.o --> +<g id="node35" class="node"> +<title>ich_descriptors.o</title> +<polygon fill="#ffff00" stroke="#000000" points="2884.1974,-281.6377 2746.1974,-281.6377 2746.1974,-245.6377 2884.1974,-245.6377 2884.1974,-281.6377"/> +<text text-anchor="middle" x="2815.1974" y="-259.9377" font-family="Times,serif" font-size="14.00" fill="#000000">ich_descriptors.o</text> +</g> +<!-- libflashrom.o->ich_descriptors.o --> +<g id="edge82" class="edge"> +<title>libflashrom.o->ich_descriptors.o</title> +<path fill="none" stroke="#000000" d="M365.8385,-922.1823C693.8574,-840.5333 2384.6905,-387.5611 2746.8585,-284.4455"/> +<polygon fill="#000000" stroke="#000000" points="2748.026,-287.7521 2756.681,-281.6413 2746.1043,-281.021 2748.026,-287.7521"/> +<text text-anchor="middle" x="1551.3485" y="-607.1139" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- fmap.o --> +<g id="node36" class="node"> +<title>fmap.o</title> +<polygon fill="#ffff00" stroke="#000000" points="1691.6497,-3687.2443 1626.6497,-3687.2443 1626.6497,-3651.2443 1691.6497,-3651.2443 1691.6497,-3687.2443"/> +<text text-anchor="middle" x="1659.1497" y="-3665.5443" font-family="Times,serif" font-size="14.00" fill="#000000">fmap.o</text> +</g> +<!-- libflashrom.o->fmap.o --> +<g id="edge84" class="edge"> +<title>libflashrom.o->fmap.o</title> +<path fill="none" stroke="#000000" d="M318.3338,-953.093C420.5028,-1176.7254 1503.1002,-3372.2347 1644.0811,-3642.0997"/> +<polygon fill="#000000" stroke="#000000" points="1641.1217,-3643.992 1648.8728,-3651.215 1647.3177,-3640.7349 1641.1217,-3643.992"/> +<text text-anchor="middle" x="976.2075" y="-2301.3964" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- programmer.o->libflashrom.o --> +<g id="edge112" class="edge"> +<title>programmer.o->libflashrom.o</title> +<path fill="none" stroke="#000000" d="M86.2322,-2072.5195C119.1017,-1939.904 281.2624,-1125.3229 307.3425,-962.8915"/> +<polygon fill="#000000" stroke="#000000" points="310.8423,-963.1633 308.9215,-952.744 303.9255,-962.087 310.8423,-963.1633"/> +<text text-anchor="middle" x="201.7874" y="-1521.5055" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- programmer.o->flashrom.o --> +<g id="edge113" class="edge"> +<title>programmer.o->flashrom.o</title> +<path fill="none" stroke="#000000" d="M99.1539,-2109.0346C274.5062,-2271.8861 1643.3772,-3472.5059 1867.4906,-3660.2811"/> +<polygon fill="#000000" stroke="#000000" points="1865.3505,-3663.0537 1875.2705,-3666.7747 1869.8361,-3657.6797 1865.3505,-3663.0537"/> +<text text-anchor="middle" x="978.3223" y="-2888.4578" font-family="Times,serif" font-size="14.00" fill="#000000">5</text> +</g> +<!-- flashrom.o->libflashrom.o --> +<g id="edge193" class="edge"> +<title>flashrom.o->libflashrom.o</title> +<path fill="none" stroke="#000000" d="M1889.3701,-3666.7645C1768.8268,-3443.392 491.6634,-1231.0849 327.8671,-961.5764"/> +<polygon fill="#000000" stroke="#000000" points="330.7144,-959.5235 322.5138,-952.8152 324.7412,-963.1733 330.7144,-959.5235"/> +<text text-anchor="middle" x="1113.6186" y="-2317.9705" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- flashrom.o->programmer.o --> +<g id="edge195" class="edge"> +<title>flashrom.o->programmer.o</title> +<path fill="none" stroke="#000000" d="M1879.9966,-3666.6754C1704.6443,-3503.824 335.7733,-2303.2041 111.6598,-2115.429"/> +<polygon fill="#000000" stroke="#000000" points="113.8,-2112.6563 103.88,-2108.9354 109.3144,-2118.0303 113.8,-2112.6563"/> +<text text-anchor="middle" x="990.8282" y="-2894.8522" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- hwaccess_physmap.o --> +<g id="node8" class="node"> +<title>hwaccess_physmap.o</title> +<polygon fill="#ffff00" stroke="#000000" points="3278.9204,-573.0094 3110.9204,-573.0094 3110.9204,-537.0094 3278.9204,-537.0094 3278.9204,-573.0094"/> +<text text-anchor="middle" x="3194.9204" y="-551.3094" font-family="Times,serif" font-size="14.00" fill="#000000">hwaccess_physmap.o</text> +</g> +<!-- flashrom.o->hwaccess_physmap.o --> +<g id="edge198" class="edge"> +<title>flashrom.o->hwaccess_physmap.o</title> +<path fill="none" stroke="#000000" d="M1907.3236,-3666.6015C2015.2424,-3425.2989 3070.4276,-878.0582 3184.9029,-582.8578"/> +<polygon fill="#000000" stroke="#000000" points="3188.2504,-583.904 3188.5752,-573.3141 3181.7174,-581.3901 3188.2504,-583.904"/> +<text text-anchor="middle" x="2541.1133" y="-2128.5296" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- spi25.o --> +<g id="node9" class="node"> +<title>spi25.o</title> +<polygon fill="#ffff00" stroke="#000000" points="344.6377,-2786.1974 276.6377,-2786.1974 276.6377,-2750.1974 344.6377,-2750.1974 344.6377,-2786.1974"/> +<text text-anchor="middle" x="310.6377" y="-2764.4974" font-family="Times,serif" font-size="14.00" fill="#000000">spi25.o</text> +</g> +<!-- flashrom.o->spi25.o --> +<g id="edge200" class="edge"> +<title>flashrom.o->spi25.o</title> +<path fill="none" stroke="#000000" d="M1871.2147,-3666.9259C1683.7198,-3551.4671 585.6193,-2917.3261 353.6511,-2790.3031"/> +<polygon fill="#000000" stroke="#000000" points="355.2768,-2787.203 344.822,-2785.4861 351.9242,-2793.348 355.2768,-2787.203"/> +<text text-anchor="middle" x="1107.4329" y="-3232.4145" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- board_enable.o --> +<g id="node10" class="node"> +<title>board_enable.o</title> +<polygon fill="#ffff00" stroke="#000000" points="1721.6497,-51.6855 1596.6497,-51.6855 1596.6497,-15.6855 1721.6497,-15.6855 1721.6497,-51.6855"/> +<text text-anchor="middle" x="1659.1497" y="-29.9855" font-family="Times,serif" font-size="14.00" fill="#000000">board_enable.o</text> +</g> +<!-- flashrom.o->board_enable.o --> +<g id="edge201" class="edge"> +<title>flashrom.o->board_enable.o</title> +<path fill="none" stroke="#000000" d="M1898.3342,-3666.5131C1888.5386,-3402.6653 1691.0064,-387.6045 1662.3458,-62.1207"/> +<polygon fill="#000000" stroke="#000000" points="1665.7883,-61.3282 1661.398,-51.6858 1658.817,-61.9614 1665.7883,-61.3282"/> +<text text-anchor="middle" x="1775.34" y="-1868.1169" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- helpers.o --> +<g id="node16" class="node"> +<title>helpers.o</title> +<polygon fill="#ffff00" stroke="#000000" points="122.1855,-1630.1497 39.1855,-1630.1497 39.1855,-1594.1497 122.1855,-1594.1497 122.1855,-1630.1497"/> +<text text-anchor="middle" x="80.6855" y="-1608.4497" font-family="Times,serif" font-size="14.00" fill="#000000">helpers.o</text> +</g> +<!-- flashrom.o->helpers.o --> +<g id="edge191" class="edge"> +<title>flashrom.o->helpers.o</title> +<path fill="none" stroke="#000000" d="M1882.4737,-3666.6953C1715.8679,-3476.7179 299.5845,-1861.7561 103.2359,-1637.8635"/> +<polygon fill="#000000" stroke="#000000" points="105.745,-1635.4163 96.5201,-1630.2056 100.4821,-1640.0317 105.745,-1635.4163"/> +<text text-anchor="middle" x="987.8548" y="-2656.0794" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- internal.o --> +<g id="node18" class="node"> +<title>internal.o</title> +<polygon fill="#ffff00" stroke="#000000" points="3529.2922,-952.7325 3443.2922,-952.7325 3443.2922,-916.7325 3529.2922,-916.7325 3529.2922,-952.7325"/> +<text text-anchor="middle" x="3486.2922" y="-931.0325" font-family="Times,serif" font-size="14.00" fill="#000000">internal.o</text> +</g> +<!-- flashrom.o->internal.o --> +<g id="edge194" class="edge"> +<title>flashrom.o->internal.o</title> +<path fill="none" stroke="#000000" d="M1910.3129,-3666.8927C2047.2309,-3444.2821 3324.5969,-1231.9674 3472.3966,-961.7284"/> +<polygon fill="#000000" stroke="#000000" points="3475.4725,-963.3983 3477.174,-952.9409 3469.3226,-960.0547 3475.4725,-963.3983"/> +<text text-anchor="middle" x="2686.3548" y="-2318.1106" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- cbtable.o --> +<g id="node23" class="node"> +<title>cbtable.o</title> +<polygon fill="#ffff00" stroke="#000000" points="3394.0505,-753.3222 3312.0505,-753.3222 3312.0505,-717.3222 3394.0505,-717.3222 3394.0505,-753.3222"/> +<text text-anchor="middle" x="3353.0505" y="-731.6222" font-family="Times,serif" font-size="14.00" fill="#000000">cbtable.o</text> +</g> +<!-- flashrom.o->cbtable.o --> +<g id="edge192" class="edge"> +<title>flashrom.o->cbtable.o</title> +<path fill="none" stroke="#000000" d="M1907.3766,-3666.8588C2021.6957,-3435.0426 3199.757,-1046.1707 3339.5231,-762.7531"/> +<polygon fill="#000000" stroke="#000000" points="3342.7696,-764.0831 3344.0535,-753.5663 3336.4915,-760.987 3342.7696,-764.0831"/> +<text text-anchor="middle" x="2618.4498" y="-2218.606" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- flashrom.o->flashchips.o --> +<g id="edge196" class="edge"> +<title>flashrom.o->flashchips.o</title> +<path fill="none" stroke="#000000" d="M1944.7407,-3675.7897C2097.1866,-3639.7569 2583.601,-3509.5743 2754.8496,-3459.1771"/> +<polygon fill="#000000" stroke="#000000" points="2755.8654,-3462.5266 2764.4617,-3456.3336 2753.8796,-3455.8142 2755.8654,-3462.5266"/> +<text text-anchor="middle" x="2344.7951" y="-3571.2834" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- flashrom.o->programmer_table.o --> +<g id="edge199" class="edge"> +<title>flashrom.o->programmer_table.o</title> +<path fill="none" stroke="#000000" d="M1892.3246,-3666.841C1808.5878,-3420.1605 894.9333,-728.6209 791.7817,-424.7462"/> +<polygon fill="#000000" stroke="#000000" points="794.9856,-423.2959 788.4569,-414.9517 788.3571,-425.546 794.9856,-423.2959"/> +<text text-anchor="middle" x="1337.0532" y="-2049.5936" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- flashrom.o->layout.o --> +<g id="edge197" class="edge"> +<title>flashrom.o->layout.o</title> +<path fill="none" stroke="#000000" d="M1889.5533,-3666.8588C1775.2342,-3435.0426 597.1729,-1046.1707 457.4068,-762.7531"/> +<polygon fill="#000000" stroke="#000000" points="460.4384,-760.987 452.8764,-753.5663 454.1603,-764.0831 460.4384,-760.987"/> +<text text-anchor="middle" x="1168.48" y="-2218.606" font-family="Times,serif" font-size="14.00" fill="#000000">9</text> +</g> +<!-- w29ee011.o --> +<g id="node5" class="node"> +<title>w29ee011.o</title> +<polygon fill="#ffff00" stroke="#000000" points="2651.6016,-3563.3657 2548.6016,-3563.3657 2548.6016,-3527.3657 2651.6016,-3527.3657 2651.6016,-3563.3657"/> +<text text-anchor="middle" x="2600.1016" y="-3541.6657" font-family="Times,serif" font-size="14.00" fill="#000000">w29ee011.o</text> +</g> +<!-- w29ee011.o->libflashrom.o --> +<g id="edge4" class="edge"> +<title>w29ee011.o->libflashrom.o</title> +<path fill="none" stroke="#000000" d="M2584.2591,-3527.3008C2394.4119,-3310.8216 558.1908,-1217.0127 333.1961,-960.4553"/> +<polygon fill="#000000" stroke="#000000" points="335.6656,-957.963 326.4407,-952.7523 330.4027,-962.5784 335.6656,-957.963"/> +<text text-anchor="middle" x="1453.7276" y="-2247.6781" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- w29ee011.o->flashrom.o --> +<g id="edge5" class="edge"> +<title>w29ee011.o->flashrom.o</title> +<path fill="none" stroke="#000000" d="M2548.5086,-3555.6282C2420.1984,-3581.1506 2087.483,-3647.3319 1954.5451,-3673.7749"/> +<polygon fill="#000000" stroke="#000000" points="1953.6941,-3670.3755 1944.5691,-3675.7592 1955.0598,-3677.241 1953.6941,-3670.3755"/> +<text text-anchor="middle" x="2246.5268" y="-3618.5015" font-family="Times,serif" font-size="14.00" fill="#000000">4</text> +</g> +<!-- wbsio_spi.o --> +<g id="node6" class="node"> +<title>wbsio_spi.o</title> +<polygon fill="#ffff00" stroke="#000000" points="253.5642,-1167.8283 155.5642,-1167.8283 155.5642,-1131.8283 253.5642,-1131.8283 253.5642,-1167.8283"/> +<text text-anchor="middle" x="204.5642" y="-1146.1283" font-family="Times,serif" font-size="14.00" fill="#000000">wbsio_spi.o</text> +</g> +<!-- wbsio_spi.o->libflashrom.o --> +<g id="edge7" class="edge"> +<title>wbsio_spi.o->libflashrom.o</title> +<path fill="none" stroke="#000000" d="M213.608,-1131.4893C232.2783,-1093.6297 275.1727,-1006.6485 297.1377,-962.1079"/> +<polygon fill="#000000" stroke="#000000" points="300.333,-963.5418 301.6168,-953.025 294.0548,-960.4457 300.333,-963.5418"/> +<text text-anchor="middle" x="250.3728" y="-1050.5986" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- wbsio_spi.o->flashrom.o --> +<g id="edge10" class="edge"> +<title>wbsio_spi.o->flashrom.o</title> +<path fill="none" stroke="#000000" d="M216.7509,-1168.0669C359.4397,-1381.6159 1710.2121,-3403.1897 1880.7893,-3658.4764"/> +<polygon fill="#000000" stroke="#000000" points="1877.8896,-3660.4365 1886.3555,-3666.8068 1883.7099,-3656.5475 1877.8896,-3660.4365"/> +<text text-anchor="middle" x="1043.7701" y="-2417.0717" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- spi.o --> +<g id="node7" class="node"> +<title>spi.o</title> +<polygon fill="#ffff00" stroke="#000000" points="809.3222,-3324.0505 755.3222,-3324.0505 755.3222,-3288.0505 809.3222,-3288.0505 809.3222,-3324.0505"/> +<text text-anchor="middle" x="782.3222" y="-3302.3505" font-family="Times,serif" font-size="14.00" fill="#000000">spi.o</text> +</g> +<!-- wbsio_spi.o->spi.o --> +<g id="edge6" class="edge"> +<title>wbsio_spi.o->spi.o</title> +<path fill="none" stroke="#000000" d="M209.4718,-1168.1438C261.495,-1362.2968 710.8676,-3039.3783 774.7736,-3277.8786"/> +<polygon fill="#000000" stroke="#000000" points="771.4752,-3279.092 777.4442,-3287.8454 778.2366,-3277.2802 771.4752,-3279.092"/> +<text text-anchor="middle" x="487.1227" y="-2226.8112" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- wbsio_spi.o->hwaccess_physmap.o --> +<g id="edge8" class="edge"> +<title>wbsio_spi.o->hwaccess_physmap.o</title> +<path fill="none" stroke="#000000" d="M253.6647,-1140.0616C596.8617,-1071.7955 2636.5872,-666.0688 3100.9001,-573.7113"/> +<polygon fill="#000000" stroke="#000000" points="3101.794,-577.1021 3110.919,-571.7184 3100.4283,-570.2366 3101.794,-577.1021"/> +<text text-anchor="middle" x="1672.2824" y="-860.6864" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- wbsio_spi.o->spi25.o --> +<g id="edge9" class="edge"> +<title>wbsio_spi.o->spi25.o</title> +<path fill="none" stroke="#000000" d="M205.7555,-1168.0033C216.4386,-1330.9968 295.6765,-2539.9339 308.7992,-2740.1472"/> +<polygon fill="#000000" stroke="#000000" points="305.3089,-2740.4114 309.4556,-2750.161 312.2939,-2739.9535 305.3089,-2740.4114"/> +<text text-anchor="middle" x="252.2773" y="-1957.8753" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- wbsio_spi.o->board_enable.o --> +<g id="edge11" class="edge"> +<title>wbsio_spi.o->board_enable.o</title> +<path fill="none" stroke="#000000" d="M231.3096,-1131.7709C411.3545,-1001.6113 1444.5475,-208.8777 1630.4976,-58.326"/> +<polygon fill="#000000" stroke="#000000" points="1632.9165,-60.8701 1638.4649,-51.8442 1628.4989,-55.4401 1632.9165,-60.8701"/> +<text text-anchor="middle" x="925.9036" y="-598.8485" font-family="Times,serif" font-size="14.00" fill="#000000">4</text> +</g> +<!-- spi.o->libflashrom.o --> +<g id="edge45" class="edge"> +<title>spi.o->libflashrom.o</title> +<path fill="none" stroke="#000000" d="M778.7298,-3287.9901C738.1385,-3083.924 366.2904,-1214.5171 316.208,-962.7359"/> +<polygon fill="#000000" stroke="#000000" points="319.6347,-962.0224 314.251,-952.8974 312.7692,-963.3881 319.6347,-962.0224"/> +<text text-anchor="middle" x="542.4689" y="-2129.163" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- spi.o->programmer.o --> +<g id="edge46" class="edge"> +<title>spi.o->programmer.o</title> +<path fill="none" stroke="#000000" d="M771.8593,-3287.9282C692.9683,-3151.285 192.0163,-2283.6107 96.4319,-2118.0537"/> +<polygon fill="#000000" stroke="#000000" points="99.24,-2115.9173 91.2088,-2109.007 93.1778,-2119.4173 99.24,-2115.9173"/> +<text text-anchor="middle" x="429.1456" y="-2706.7909" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- spi.o->flashrom.o --> +<g id="edge48" class="edge"> +<title>spi.o->flashrom.o</title> +<path fill="none" stroke="#000000" d="M809.3594,-3315.2284C954.3829,-3364.4572 1641.0141,-3597.5371 1842.6603,-3665.9868"/> +<polygon fill="#000000" stroke="#000000" points="1841.5784,-3669.3156 1852.1728,-3669.2158 1843.8285,-3662.6871 1841.5784,-3669.3156"/> +<text text-anchor="middle" x="1321.0098" y="-3494.4076" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- spi.o->spi25.o --> +<g id="edge47" class="edge"> +<title>spi.o->spi25.o</title> +<path fill="none" stroke="#000000" d="M769.8476,-3287.9941C706.9313,-3208.0595 425.3247,-2886.6144 337.0897,-2793.5255"/> +<polygon fill="#000000" stroke="#000000" points="339.5547,-2791.0389 330.1158,-2786.2265 334.4935,-2795.8747 339.5547,-2791.0389"/> +<text text-anchor="middle" x="548.4686" y="-3044.5598" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- spi.o->helpers.o --> +<g id="edge44" class="edge"> +<title>spi.o->helpers.o</title> +<path fill="none" stroke="#000000" d="M774.7999,-3287.89C705.3631,-3120.2548 176.7206,-1843.9989 92.0959,-1639.6968"/> +<polygon fill="#000000" stroke="#000000" points="95.2545,-1638.1762 88.194,-1630.2768 88.7873,-1640.855 95.2545,-1638.1762"/> +<text text-anchor="middle" x="428.4479" y="-2467.5934" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- hwaccess_physmap.o->libflashrom.o --> +<g id="edge135" class="edge"> +<title>hwaccess_physmap.o->libflashrom.o</title> +<path fill="none" stroke="#000000" d="M3110.5498,-566.1171C2682.4469,-622.4779 755.9917,-876.1005 375.8899,-926.1419"/> +<polygon fill="#000000" stroke="#000000" points="375.3408,-922.6839 365.8832,-927.4593 376.2545,-929.624 375.3408,-922.6839"/> +<text text-anchor="middle" x="1738.2198" y="-749.9295" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- hwaccess_physmap.o->flashrom.o --> +<g id="edge136" class="edge"> +<title>hwaccess_physmap.o->flashrom.o</title> +<path fill="none" stroke="#000000" d="M3186.0617,-573.3378C3078.143,-814.6404 2022.9578,-3361.8811 1908.4825,-3657.0815"/> +<polygon fill="#000000" stroke="#000000" points="1905.135,-3656.0353 1904.8102,-3666.6252 1911.668,-3658.5492 1905.135,-3656.0353"/> +<text text-anchor="middle" x="2542.2721" y="-2104.0097" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- spi25.o->libflashrom.o --> +<g id="edge183" class="edge"> +<title>spi25.o->libflashrom.o</title> +<path fill="none" stroke="#000000" d="M310.6377,-2750.051C310.6377,-2574.4935 310.6377,-1179.616 310.6377,-962.9678"/> +<polygon fill="#000000" stroke="#000000" points="314.1378,-962.7483 310.6377,-952.7484 307.1378,-962.7484 314.1378,-962.7483"/> +<text text-anchor="middle" x="305.6377" y="-1860.3094" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- spi25.o->flashrom.o --> +<g id="edge186" class="edge"> +<title>spi25.o->flashrom.o</title> +<path fill="none" stroke="#000000" d="M337.8879,-2786.2014C524.979,-2901.4115 1618.757,-3533.0717 1853.9405,-3661.9964"/> +<polygon fill="#000000" stroke="#000000" points="1852.4487,-3665.1695 1862.9026,-3666.8919 1855.8045,-3659.0263 1852.4487,-3665.1695"/> +<text text-anchor="middle" x="1090.9142" y="-3227.8989" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- spi25.o->spi.o --> +<g id="edge182" class="edge"> +<title>spi25.o->spi.o</title> +<path fill="none" stroke="#000000" d="M323.1123,-2786.2538C386.0286,-2866.1884 667.6353,-3187.6335 755.8702,-3280.7224"/> +<polygon fill="#000000" stroke="#000000" points="753.4053,-3283.209 762.8441,-3288.0214 758.4665,-3278.3732 753.4053,-3283.209"/> +<text text-anchor="middle" x="534.4913" y="-3037.2881" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- jedec.o --> +<g id="node12" class="node"> +<title>jedec.o</title> +<polygon fill="#ffff00" stroke="#000000" points="3519.7922,-2786.1974 3452.7922,-2786.1974 3452.7922,-2750.1974 3519.7922,-2750.1974 3519.7922,-2786.1974"/> +<text text-anchor="middle" x="3486.2922" y="-2764.4974" font-family="Times,serif" font-size="14.00" fill="#000000">jedec.o</text> +</g> +<!-- spi25.o->jedec.o --> +<g id="edge184" class="edge"> +<title>spi25.o->jedec.o</title> +<path fill="none" stroke="#000000" d="M344.6843,-2768.1974C661.1489,-2768.1974 3085.0663,-2768.1974 3442.3584,-2768.1974"/> +<polygon fill="#000000" stroke="#000000" points="3442.558,-2771.6975 3452.558,-2768.1974 3442.5579,-2764.6975 3442.558,-2771.6975"/> +<text text-anchor="middle" x="1888.5213" y="-2771.9974" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- spi25.o->helpers.o --> +<g id="edge181" class="edge"> +<title>spi25.o->helpers.o</title> +<path fill="none" stroke="#000000" d="M307.0257,-2750.0387C280.718,-2617.7809 118.6912,-1803.2172 86.3129,-1640.4404"/> +<polygon fill="#000000" stroke="#000000" points="89.6733,-1639.3935 84.2896,-1630.2685 82.8078,-1640.7592 89.6733,-1639.3935"/> +<text text-anchor="middle" x="191.6693" y="-2199.0395" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- spi25_statusreg.o --> +<g id="node31" class="node"> +<title>spi25_statusreg.o</title> +<polygon fill="#ffff00" stroke="#000000" points="1268.3283,-3563.3657 1125.3283,-3563.3657 1125.3283,-3527.3657 1268.3283,-3527.3657 1268.3283,-3563.3657"/> +<text text-anchor="middle" x="1196.8283" y="-3541.6657" font-family="Times,serif" font-size="14.00" fill="#000000">spi25_statusreg.o</text> +</g> +<!-- spi25.o->spi25_statusreg.o --> +<g id="edge185" class="edge"> +<title>spi25.o->spi25_statusreg.o</title> +<path fill="none" stroke="#000000" d="M328.1443,-2786.4002C436.9786,-2889.7741 1020.2002,-3401.4805 1164.534,-3520.5987"/> +<polygon fill="#000000" stroke="#000000" points="1162.6796,-3523.6046 1172.6299,-3527.2437 1167.1207,-3518.1938 1162.6796,-3523.6046"/> +<text text-anchor="middle" x="741.3391" y="-3157.2995" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- board_enable.o->libflashrom.o --> +<g id="edge206" class="edge"> +<title>board_enable.o->libflashrom.o</title> +<path fill="none" stroke="#000000" d="M1631.908,-51.8879C1461.1022,-166.0167 538.7688,-782.3002 345.9778,-911.119"/> +<polygon fill="#000000" stroke="#000000" points="343.9812,-908.2436 337.611,-916.7095 347.8702,-914.0639 343.9812,-908.2436"/> +<text text-anchor="middle" x="983.9429" y="-485.3034" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- board_enable.o->flashrom.o --> +<g id="edge210" class="edge"> +<title>board_enable.o->flashrom.o</title> +<path fill="none" stroke="#000000" d="M1659.2804,-52.1023C1669.0761,-315.9501 1866.6083,-3331.0109 1895.2689,-3656.4948"/> +<polygon fill="#000000" stroke="#000000" points="1891.8264,-3657.2873 1896.2167,-3666.9297 1898.7977,-3656.654 1891.8264,-3657.2873"/> +<text text-anchor="middle" x="1772.2747" y="-1843.0985" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- board_enable.o->wbsio_spi.o --> +<g id="edge202" class="edge"> +<title>board_enable.o->wbsio_spi.o</title> +<path fill="none" stroke="#000000" d="M1632.4043,-51.7429C1452.3595,-181.9025 419.1665,-974.6361 233.2163,-1125.1878"/> +<polygon fill="#000000" stroke="#000000" points="230.7974,-1122.6437 225.2491,-1131.6697 235.2151,-1128.0737 230.7974,-1122.6437"/> +<text text-anchor="middle" x="927.8103" y="-577.2654" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- hwaccess_x86_msr.o --> +<g id="node13" class="node"> +<title>hwaccess_x86_msr.o</title> +<polygon fill="#ffff00" stroke="#000000" points="1979.9649,-36 1816.9649,-36 1816.9649,0 1979.9649,0 1979.9649,-36"/> +<text text-anchor="middle" x="1898.4649" y="-14.3" font-family="Times,serif" font-size="14.00" fill="#000000">hwaccess_x86_msr.o</text> +</g> +<!-- board_enable.o->hwaccess_x86_msr.o --> +<g id="edge203" class="edge"> +<title>board_enable.o->hwaccess_x86_msr.o</title> +<path fill="none" stroke="#000000" d="M1721.7144,-29.5848C1747.6164,-27.8871 1778.1803,-25.8839 1806.5439,-24.0248"/> +<polygon fill="#000000" stroke="#000000" points="1807.1317,-27.4939 1816.8814,-23.3473 1806.6738,-20.5089 1807.1317,-27.4939"/> +<text text-anchor="middle" x="1759.1291" y="-30.6048" font-family="Times,serif" font-size="14.00" fill="#000000">4</text> +</g> +<!-- pcidev.o --> +<g id="node14" class="node"> +<title>pcidev.o</title> +<polygon fill="#ffff00" stroke="#000000" points="2410.0006,-98.4738 2336.0006,-98.4738 2336.0006,-62.4738 2410.0006,-62.4738 2410.0006,-98.4738"/> +<text text-anchor="middle" x="2373.0006" y="-76.7738" font-family="Times,serif" font-size="14.00" fill="#000000">pcidev.o</text> +</g> +<!-- board_enable.o->pcidev.o --> +<g id="edge204" class="edge"> +<title>board_enable.o->pcidev.o</title> +<path fill="none" stroke="#000000" d="M1721.8736,-37.7967C1862.6789,-47.0256 2201.295,-69.2196 2325.9269,-77.3884"/> +<polygon fill="#000000" stroke="#000000" points="2325.714,-80.8819 2335.9216,-78.0435 2326.1719,-73.8969 2325.714,-80.8819"/> +<text text-anchor="middle" x="2018.9003" y="-61.3926" font-family="Times,serif" font-size="14.00" fill="#000000">4</text> +</g> +<!-- board_enable.o->internal.o --> +<g id="edge207" class="edge"> +<title>board_enable.o->internal.o</title> +<path fill="none" stroke="#000000" d="M1691.5433,-51.8779C1909.8732,-166.4676 3165.8333,-785.9918 3435.3689,-912.2974"/> +<polygon fill="#000000" stroke="#000000" points="3433.9961,-915.5191 3444.5376,-916.5807 3436.959,-909.177 3433.9961,-915.5191"/> +<text text-anchor="middle" x="2558.4561" y="-485.8876" font-family="Times,serif" font-size="14.00" fill="#000000">7</text> +</g> +<!-- ichspi.o --> +<g id="node19" class="node"> +<title>ichspi.o</title> +<polygon fill="#ffff00" stroke="#000000" points="3050.1077,-414.8794 2979.1077,-414.8794 2979.1077,-378.8794 3050.1077,-378.8794 3050.1077,-414.8794"/> +<text text-anchor="middle" x="3014.6077" y="-393.1794" font-family="Times,serif" font-size="14.00" fill="#000000">ichspi.o</text> +</g> +<!-- board_enable.o->ichspi.o --> +<g id="edge208" class="edge"> +<title>board_enable.o->ichspi.o</title> +<path fill="none" stroke="#000000" d="M1721.8078,-50.4747C1954.7747,-112.898 2767.9081,-330.7765 2969.2469,-384.725"/> +<polygon fill="#000000" stroke="#000000" points="2968.3498,-388.108 2978.915,-387.3156 2970.1616,-381.3466 2968.3498,-388.108"/> +<text text-anchor="middle" x="2340.5274" y="-221.3999" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- it87spi.o --> +<g id="node30" class="node"> +<title>it87spi.o</title> +<polygon fill="#ffff00" stroke="#000000" points="166.9738,-1394.9293 87.9738,-1394.9293 87.9738,-1358.9293 166.9738,-1358.9293 166.9738,-1394.9293"/> +<text text-anchor="middle" x="127.4738" y="-1373.2293" font-family="Times,serif" font-size="14.00" fill="#000000">it87spi.o</text> +</g> +<!-- board_enable.o->it87spi.o --> +<g id="edge205" class="edge"> +<title>board_enable.o->it87spi.o</title> +<path fill="none" stroke="#000000" d="M1635.7284,-51.8479C1458.9503,-198.1509 336.9593,-1182.038 152.968,-1351.9761"/> +<polygon fill="#000000" stroke="#000000" points="150.5747,-1349.4222 145.6258,-1358.7902 155.3365,-1354.553 150.5747,-1349.4222"/> +<text text-anchor="middle" x="889.3482" y="-690.712" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- dmi.o --> +<g id="node41" class="node"> +<title>dmi.o</title> +<polygon fill="#ffff00" stroke="#000000" points="1451.9293,-98.4738 1395.9293,-98.4738 1395.9293,-62.4738 1451.9293,-62.4738 1451.9293,-98.4738"/> +<text text-anchor="middle" x="1423.9293" y="-76.7738" font-family="Times,serif" font-size="14.00" fill="#000000">dmi.o</text> +</g> +<!-- board_enable.o->dmi.o --> +<g id="edge209" class="edge"> +<title>board_enable.o->dmi.o</title> +<path fill="none" stroke="#000000" d="M1596.424,-46.1625C1553.6896,-54.6629 1498.493,-65.6422 1462.1935,-72.8626"/> +<polygon fill="#000000" stroke="#000000" points="1461.1514,-69.5012 1452.0264,-74.8849 1462.5171,-76.3667 1461.1514,-69.5012"/> +<text text-anchor="middle" x="1524.3087" y="-63.3125" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- sst28sf040.o --> +<g id="node11" class="node"> +<title>sst28sf040.o</title> +<polygon fill="#ffff00" stroke="#000000" points="3068.6077,-3324.0505 2960.6077,-3324.0505 2960.6077,-3288.0505 3068.6077,-3288.0505 3068.6077,-3324.0505"/> +<text text-anchor="middle" x="3014.6077" y="-3302.3505" font-family="Times,serif" font-size="14.00" fill="#000000">sst28sf040.o</text> +</g> +<!-- sst28sf040.o->libflashrom.o --> +<g id="edge12" class="edge"> +<title>sst28sf040.o->libflashrom.o</title> +<path fill="none" stroke="#000000" d="M2994.0138,-3287.9901C2760.399,-3083.1154 612.7485,-1199.6765 339.2438,-959.8193"/> +<polygon fill="#000000" stroke="#000000" points="341.177,-956.8595 331.3509,-952.8974 336.5616,-962.1223 341.177,-956.8595"/> +<text text-anchor="middle" x="1661.6288" y="-2127.7047" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- sst28sf040.o->flashrom.o --> +<g id="edge14" class="edge"> +<title>sst28sf040.o->flashrom.o</title> +<path fill="none" stroke="#000000" d="M2961.5247,-3324.0697C2774.2682,-3387.6347 2145.5489,-3601.0562 1954.1955,-3666.0119"/> +<polygon fill="#000000" stroke="#000000" points="1952.9598,-3662.7351 1944.6156,-3669.2639 1955.21,-3669.3637 1952.9598,-3662.7351"/> +<text text-anchor="middle" x="2452.8601" y="-3498.8408" font-family="Times,serif" font-size="14.00" fill="#000000">3</text> +</g> +<!-- sst28sf040.o->jedec.o --> +<g id="edge13" class="edge"> +<title>sst28sf040.o->jedec.o</title> +<path fill="none" stroke="#000000" d="M3030.5717,-3287.847C3100.7032,-3207.8774 3381.6112,-2887.5631 3463.6737,-2793.9889"/> +<polygon fill="#000000" stroke="#000000" points="3466.37,-2796.2226 3470.3321,-2786.3964 3461.1071,-2791.6071 3466.37,-2796.2226"/> +<text text-anchor="middle" x="3242.1227" y="-3044.7179" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- jedec.o->libflashrom.o --> +<g id="edge87" class="edge"> +<title>jedec.o->libflashrom.o</title> +<path fill="none" stroke="#000000" d="M3454.8616,-2750.051C3148.2947,-2573.0545 695.04,-1156.6672 350.729,-957.8792"/> +<polygon fill="#000000" stroke="#000000" points="352.2524,-954.7173 341.8422,-952.7484 348.7524,-960.7795 352.2524,-954.7173"/> +<text text-anchor="middle" x="1897.7953" y="-1857.7651" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- jedec.o->flashrom.o --> +<g id="edge88" class="edge"> +<title>jedec.o->flashrom.o</title> +<path fill="none" stroke="#000000" d="M3454.9316,-2786.3034C3255.3108,-2901.5546 2163.2138,-3532.0771 1938.7907,-3661.6478"/> +<polygon fill="#000000" stroke="#000000" points="1936.8734,-3658.7133 1929.9631,-3666.7444 1940.3734,-3664.7755 1936.8734,-3658.7133"/> +<text text-anchor="middle" x="2691.8612" y="-3227.7756" font-family="Times,serif" font-size="14.00" fill="#000000">4</text> +</g> +<!-- jedec.o->helpers.o --> +<g id="edge86" class="edge"> +<title>jedec.o->helpers.o</title> +<path fill="none" stroke="#000000" d="M3452.5857,-2756.7556C3126.1461,-2645.9443 530.0353,-1764.6834 131.8552,-1629.5195"/> +<polygon fill="#000000" stroke="#000000" points="132.9155,-1626.1833 122.3211,-1626.2831 130.6654,-1632.8118 132.9155,-1626.1833"/> +<text text-anchor="middle" x="1787.2204" y="-2196.9375" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- hwaccess_x86_msr.o->libflashrom.o --> +<g id="edge15" class="edge"> +<title>hwaccess_x86_msr.o->libflashrom.o</title> +<path fill="none" stroke="#000000" d="M1867.1044,-36.106C1667.4836,-151.3572 575.3866,-781.8797 350.9635,-911.4504"/> +<polygon fill="#000000" stroke="#000000" points="349.0461,-908.5159 342.1359,-916.547 352.5462,-914.578 349.0461,-908.5159"/> +<text text-anchor="middle" x="1104.034" y="-477.5782" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- pcidev.o->libflashrom.o --> +<g id="edge16" class="edge"> +<title>pcidev.o->libflashrom.o</title> +<path fill="none" stroke="#000000" d="M2335.8878,-95.8464C2086.8159,-199.0154 659.4624,-790.2446 364.1165,-912.5808"/> +<polygon fill="#000000" stroke="#000000" points="362.3938,-909.506 354.4944,-916.5665 365.0726,-915.9731 362.3938,-909.506"/> +<text text-anchor="middle" x="1345.0021" y="-508.0136" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- pcidev.o->flashrom.o --> +<g id="edge17" class="edge"> +<title>pcidev.o->flashrom.o</title> +<path fill="none" stroke="#000000" d="M2370.6162,-98.5852C2336.3892,-358.5647 1944.5485,-3334.8907 1902.1739,-3656.7575"/> +<polygon fill="#000000" stroke="#000000" points="1898.7016,-3656.3183 1900.8663,-3666.6896 1905.6417,-3657.232 1898.7016,-3656.3183"/> +<text text-anchor="middle" x="2131.395" y="-1881.4714" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- chipset_enable.o->libflashrom.o --> +<g id="edge22" class="edge"> +<title>chipset_enable.o->libflashrom.o</title> +<path fill="none" stroke="#000000" d="M2539.5771,-175.625C2214.832,-279.6536 682.0141,-799.991 367.2253,-913.0865"/> +<polygon fill="#000000" stroke="#000000" points="365.6257,-909.9426 357.4046,-916.6257 367.999,-916.528 365.6257,-909.9426"/> +<text text-anchor="middle" x="1448.4012" y="-533.1558" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- chipset_enable.o->flashrom.o --> +<g id="edge27" class="edge"> +<title>chipset_enable.o->flashrom.o</title> +<path fill="none" stroke="#000000" d="M2596.4938,-175.7017C2545.3949,-432.5936 1967.6971,-3336.8762 1904.1335,-3656.4319"/> +<polygon fill="#000000" stroke="#000000" points="1900.6092,-3656.2098 1902.091,-3666.7005 1907.4747,-3657.5755 1900.6092,-3656.2098"/> +<text text-anchor="middle" x="2245.3137" y="-1919.8668" font-family="Times,serif" font-size="14.00" fill="#000000">5</text> +</g> +<!-- chipset_enable.o->hwaccess_physmap.o --> +<g id="edge24" class="edge"> +<title>chipset_enable.o->hwaccess_physmap.o</title> +<path fill="none" stroke="#000000" d="M2627.2054,-175.6744C2723.6838,-240.1392 3050.4398,-458.4706 3159.3014,-531.2096"/> +<polygon fill="#000000" stroke="#000000" points="3157.3982,-534.1473 3167.6575,-536.7929 3161.2873,-528.327 3157.3982,-534.1473"/> +<text text-anchor="middle" x="2888.2534" y="-357.242" font-family="Times,serif" font-size="14.00" fill="#000000">6</text> +</g> +<!-- chipset_enable.o->board_enable.o --> +<g id="edge28" class="edge"> +<title>chipset_enable.o->board_enable.o</title> +<path fill="none" stroke="#000000" d="M2532.4307,-148.6552C2360.6772,-126.0434 1908.9576,-66.5734 1731.8617,-43.2583"/> +<polygon fill="#000000" stroke="#000000" points="1732.2339,-39.7771 1721.8626,-41.9418 1731.3201,-46.7173 1732.2339,-39.7771"/> +<text text-anchor="middle" x="2127.1462" y="-99.7567" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- chipset_enable.o->hwaccess_x86_msr.o --> +<g id="edge18" class="edge"> +<title>chipset_enable.o->hwaccess_x86_msr.o</title> +<path fill="none" stroke="#000000" d="M2532.5073,-144.1189C2405.9753,-118.9501 2133.2605,-64.7037 1990.2455,-36.2563"/> +<polygon fill="#000000" stroke="#000000" points="1990.667,-32.7716 1980.1763,-34.2534 1989.3013,-39.6371 1990.667,-32.7716"/> +<text text-anchor="middle" x="2256.3764" y="-93.9876" font-family="Times,serif" font-size="14.00" fill="#000000">4</text> +</g> +<!-- chipset_enable.o->pcidev.o --> +<g id="edge19" class="edge"> +<title>chipset_enable.o->pcidev.o</title> +<path fill="none" stroke="#000000" d="M2546.8565,-139.4899C2508.3453,-126.4171 2456.7966,-108.9187 2419.8471,-96.376"/> +<polygon fill="#000000" stroke="#000000" points="2420.9053,-93.0392 2410.3109,-93.139 2418.6552,-99.6677 2420.9053,-93.0392"/> +<text text-anchor="middle" x="2478.3518" y="-121.733" font-family="Times,serif" font-size="14.00" fill="#000000">6</text> +</g> +<!-- chipset_enable.o->helpers.o --> +<g id="edge20" class="edge"> +<title>chipset_enable.o->helpers.o</title> +<path fill="none" stroke="#000000" d="M2568.7029,-175.6923C2302.1789,-329.57 421.5305,-1415.3628 121.1102,-1588.8106"/> +<polygon fill="#000000" stroke="#000000" points="119.1956,-1585.8744 112.2854,-1593.9056 122.6957,-1591.9366 119.1956,-1585.8744"/> +<text text-anchor="middle" x="1339.9065" y="-886.0514" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- mcp6x_spi.o --> +<g id="node17" class="node"> +<title>mcp6x_spi.o</title> +<polygon fill="#ffff00" stroke="#000000" points="2189.7801,-51.6855 2085.7801,-51.6855 2085.7801,-15.6855 2189.7801,-15.6855 2189.7801,-51.6855"/> +<text text-anchor="middle" x="2137.7801" y="-29.9855" font-family="Times,serif" font-size="14.00" fill="#000000">mcp6x_spi.o</text> +</g> +<!-- chipset_enable.o->mcp6x_spi.o --> +<g id="edge21" class="edge"> +<title>chipset_enable.o->mcp6x_spi.o</title> +<path fill="none" stroke="#000000" d="M2532.8761,-139.5512C2443.4119,-115.5793 2286.4518,-73.522 2199.7346,-50.2862"/> +<polygon fill="#000000" stroke="#000000" points="2200.5945,-46.8932 2190.0294,-47.6857 2198.7827,-53.6547 2200.5945,-46.8932"/> +<text text-anchor="middle" x="2361.3053" y="-98.7187" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- chipset_enable.o->internal.o --> +<g id="edge23" class="edge"> +<title>chipset_enable.o->internal.o</title> +<path fill="none" stroke="#000000" d="M2617.6081,-175.767C2726.4425,-279.1409 3309.664,-790.8472 3453.9979,-909.9655"/> +<polygon fill="#000000" stroke="#000000" points="3452.1434,-912.9714 3462.0937,-916.6105 3456.5846,-907.5606 3452.1434,-912.9714"/> +<text text-anchor="middle" x="3030.803" y="-546.6663" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- chipset_enable.o->ichspi.o --> +<g id="edge25" class="edge"> +<title>chipset_enable.o->ichspi.o</title> +<path fill="none" stroke="#000000" d="M2631.5971,-175.7482C2705.8946,-218.6438 2892.0159,-326.101 2974.3496,-373.6364"/> +<polygon fill="#000000" stroke="#000000" points="2972.7498,-376.7542 2983.1601,-378.7231 2976.2498,-370.692 2972.7498,-376.7542"/> +<text text-anchor="middle" x="2797.9734" y="-278.4923" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- sb600spi.o --> +<g id="node20" class="node"> +<title>sb600spi.o</title> +<polygon fill="#ffff00" stroke="#000000" points="1243.8283,-175.5642 1149.8283,-175.5642 1149.8283,-139.5642 1243.8283,-139.5642 1243.8283,-175.5642"/> +<text text-anchor="middle" x="1196.8283" y="-153.8642" font-family="Times,serif" font-size="14.00" fill="#000000">sb600spi.o</text> +</g> +<!-- chipset_enable.o->sb600spi.o --> +<g id="edge26" class="edge"> +<title>chipset_enable.o->sb600spi.o</title> +<path fill="none" stroke="#000000" d="M2532.4188,-157.5642C2291.5196,-157.5642 1478.243,-157.5642 1254.3205,-157.5642"/> +<polygon fill="#000000" stroke="#000000" points="1254.1076,-154.0643 1244.1076,-157.5642 1254.1076,-161.0643 1254.1076,-154.0643"/> +<text text-anchor="middle" x="1888.3696" y="-161.3642" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- helpers.o->libflashrom.o --> +<g id="edge36" class="edge"> +<title>helpers.o->libflashrom.o</title> +<path fill="none" stroke="#000000" d="M86.8362,-1594.0305C118.454,-1500.8874 262.7005,-1075.9509 301.1801,-962.5938"/> +<polygon fill="#000000" stroke="#000000" points="304.5678,-963.5022 304.468,-952.9078 297.9393,-961.2521 304.5678,-963.5022"/> +<text text-anchor="middle" x="189.0082" y="-1282.1121" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- mcp6x_spi.o->libflashrom.o --> +<g id="edge69" class="edge"> +<title>mcp6x_spi.o->libflashrom.o</title> +<path fill="none" stroke="#000000" d="M2100.8694,-51.8879C1868.7507,-166.3562 612.2959,-785.9711 356.2163,-912.2556"/> +<polygon fill="#000000" stroke="#000000" points="354.6054,-909.1475 347.1847,-916.7095 357.7014,-915.4256 354.6054,-909.1475"/> +<text text-anchor="middle" x="1223.5429" y="-485.8718" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- mcp6x_spi.o->flashrom.o --> +<g id="edge71" class="edge"> +<title>mcp6x_spi.o->flashrom.o</title> +<path fill="none" stroke="#000000" d="M2136.5776,-52.0321C2119.3162,-315.3905 1921.6991,-3330.4457 1900.3344,-3656.4078"/> +<polygon fill="#000000" stroke="#000000" points="1896.8109,-3656.6524 1899.6493,-3666.8599 1903.7959,-3657.1103 1896.8109,-3656.6524"/> +<text text-anchor="middle" x="2013.456" y="-1858.0199" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- mcp6x_spi.o->hwaccess_physmap.o --> +<g id="edge70" class="edge"> +<title>mcp6x_spi.o->hwaccess_physmap.o</title> +<path fill="none" stroke="#000000" d="M2174.4763,-51.7821C2334.6144,-130.7535 2972.1142,-445.1336 3149.1238,-532.4251"/> +<polygon fill="#000000" stroke="#000000" points="3147.6609,-535.6061 3158.1777,-536.8899 3150.757,-529.3279 3147.6609,-535.6061"/> +<text text-anchor="middle" x="2656.8001" y="-295.9036" font-family="Times,serif" font-size="14.00" fill="#000000">4</text> +</g> +<!-- mcp6x_spi.o->pcidev.o --> +<g id="edge68" class="edge"> +<title>mcp6x_spi.o->pcidev.o</title> +<path fill="none" stroke="#000000" d="M2189.9832,-44.0694C2230.6976,-52.168 2286.746,-63.3167 2326.0558,-71.1359"/> +<polygon fill="#000000" stroke="#000000" points="2325.4291,-74.5797 2335.9198,-73.098 2326.7948,-67.7142 2325.4291,-74.5797"/> +<text text-anchor="middle" x="2253.0195" y="-61.4026" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- bitbang_spi.o --> +<g id="node32" class="node"> +<title>bitbang_spi.o</title> +<polygon fill="#ffff00" stroke="#000000" points="499.8794,-2985.6077 387.8794,-2985.6077 387.8794,-2949.6077 499.8794,-2949.6077 499.8794,-2985.6077"/> +<text text-anchor="middle" x="443.8794" y="-2963.9077" font-family="Times,serif" font-size="14.00" fill="#000000">bitbang_spi.o</text> +</g> +<!-- mcp6x_spi.o->bitbang_spi.o --> +<g id="edge72" class="edge"> +<title>mcp6x_spi.o->bitbang_spi.o</title> +<path fill="none" stroke="#000000" d="M2127.1838,-52.0389C1992.7114,-284.9519 620.8615,-2661.0656 459.3765,-2940.7659"/> +<polygon fill="#000000" stroke="#000000" points="456.315,-2939.0686 454.3461,-2949.4789 462.3772,-2942.5686 456.315,-2939.0686"/> +<text text-anchor="middle" x="1288.2802" y="-1500.2024" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- internal.o->libflashrom.o --> +<g id="edge104" class="edge"> +<title>internal.o->libflashrom.o</title> +<path fill="none" stroke="#000000" d="M3443.207,-934.7325C3098.7963,-934.7325 795.0844,-934.7325 375.9887,-934.7325"/> +<polygon fill="#000000" stroke="#000000" points="375.8632,-931.2326 365.8632,-934.7325 375.8632,-938.2326 375.8632,-931.2326"/> +<text text-anchor="middle" x="1904.5978" y="-938.5325" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- internal.o->programmer.o --> +<g id="edge106" class="edge"> +<title>internal.o->programmer.o</title> +<path fill="none" stroke="#000000" d="M3443.2327,-949.3492C3083.0304,-1071.6214 573.9205,-1923.3494 143.4637,-2069.4698"/> +<polygon fill="#000000" stroke="#000000" points="142.3244,-2066.1603 133.9802,-2072.6891 144.5745,-2072.7889 142.3244,-2066.1603"/> +<text text-anchor="middle" x="1788.3482" y="-1513.2095" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- internal.o->flashrom.o --> +<g id="edge110" class="edge"> +<title>internal.o->flashrom.o</title> +<path fill="none" stroke="#000000" d="M3474.4442,-952.7696C3337.5262,-1175.3803 2060.1602,-3387.695 1912.3605,-3657.9339"/> +<polygon fill="#000000" stroke="#000000" points="1909.2846,-3656.2641 1907.5831,-3666.7214 1915.4345,-3659.6076 1909.2846,-3656.2641"/> +<text text-anchor="middle" x="2688.4023" y="-2294.1518" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- internal.o->hwaccess_physmap.o --> +<g id="edge107" class="edge"> +<title>internal.o->hwaccess_physmap.o</title> +<path fill="none" stroke="#000000" d="M3472.4347,-916.6731C3425.2686,-855.2051 3270.8143,-653.9163 3215.1478,-581.3702"/> +<polygon fill="#000000" stroke="#000000" points="3217.7271,-578.9823 3208.8627,-573.1794 3212.1736,-583.2436 3217.7271,-578.9823"/> +<text text-anchor="middle" x="3338.7912" y="-752.8217" font-family="Times,serif" font-size="14.00" fill="#000000">9</text> +</g> +<!-- internal.o->board_enable.o --> +<g id="edge111" class="edge"> +<title>internal.o->board_enable.o</title> +<path fill="none" stroke="#000000" d="M3453.8987,-916.5401C3235.5687,-801.9504 1979.6086,-182.4262 1710.073,-56.1207"/> +<polygon fill="#000000" stroke="#000000" points="1711.4458,-52.8989 1700.9043,-51.8373 1708.4829,-59.241 1711.4458,-52.8989"/> +<text text-anchor="middle" x="2576.9859" y="-490.1304" font-family="Times,serif" font-size="14.00" fill="#000000">5</text> +</g> +<!-- internal.o->pcidev.o --> +<g id="edge99" class="edge"> +<title>internal.o->pcidev.o</title> +<path fill="none" stroke="#000000" d="M3462.7826,-916.693C3319.9433,-807.0885 2569.1991,-231.0222 2404.8236,-104.8925"/> +<polygon fill="#000000" stroke="#000000" points="2406.6345,-101.8704 2396.5703,-98.5595 2402.3731,-107.4239 2406.6345,-101.8704"/> +<text text-anchor="middle" x="2928.8031" y="-514.5927" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- internal.o->chipset_enable.o --> +<g id="edge100" class="edge"> +<title>internal.o->chipset_enable.o</title> +<path fill="none" stroke="#000000" d="M3468.7856,-916.5297C3359.9512,-813.1558 2776.7297,-301.4494 2632.3959,-182.3311"/> +<polygon fill="#000000" stroke="#000000" points="2634.2503,-179.3253 2624.3,-175.6862 2629.8092,-184.7361 2634.2503,-179.3253"/> +<text text-anchor="middle" x="3045.5907" y="-553.2304" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- internal.o->udelay.o --> +<g id="edge105" class="edge"> +<title>internal.o->udelay.o</title> +<path fill="none" stroke="#000000" d="M3495.3359,-953.0714C3514.0063,-990.9311 3556.9006,-1077.9123 3578.8656,-1122.4529"/> +<polygon fill="#000000" stroke="#000000" points="3575.7828,-1124.115 3583.3448,-1131.5358 3582.0609,-1121.019 3575.7828,-1124.115"/> +<text text-anchor="middle" x="3532.1008" y="-1041.5621" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- internal.o->cbtable.o --> +<g id="edge101" class="edge"> +<title>internal.o->cbtable.o</title> +<path fill="none" stroke="#000000" d="M3474.2329,-916.6844C3450.6589,-881.4036 3398.37,-803.1477 3370.8219,-761.919"/> +<polygon fill="#000000" stroke="#000000" points="3373.6444,-759.8433 3365.1785,-753.4731 3367.8241,-763.7324 3373.6444,-759.8433"/> +<text text-anchor="middle" x="3417.5274" y="-843.1017" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- hwaccess_x86_io.o --> +<g id="node25" class="node"> +<title>hwaccess_x86_io.o</title> +<polygon fill="#ffff00" stroke="#000000" points="3743.9561,-1394.9293 3594.9561,-1394.9293 3594.9561,-1358.9293 3743.9561,-1358.9293 3743.9561,-1394.9293"/> +<text text-anchor="middle" x="3669.4561" y="-1373.2293" font-family="Times,serif" font-size="14.00" fill="#000000">hwaccess_x86_io.o</text> +</g> +<!-- internal.o->hwaccess_x86_io.o --> +<g id="edge102" class="edge"> +<title>internal.o->hwaccess_x86_io.o</title> +<path fill="none" stroke="#000000" d="M3493.8139,-952.8915C3522.3124,-1021.6929 3623.7641,-1266.6191 3658.0441,-1349.3784"/> +<polygon fill="#000000" stroke="#000000" points="3654.9123,-1350.9635 3661.9727,-1358.8629 3661.3794,-1348.2847 3654.9123,-1350.9635"/> +<text text-anchor="middle" x="3570.929" y="-1154.9349" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- internal.o->it87spi.o --> +<g id="edge103" class="edge"> +<title>internal.o->it87spi.o</title> +<path fill="none" stroke="#000000" d="M3442.9922,-938.7332C3081.0817,-979.6093 563.1356,-1311.0625 177.0893,-1368.5756"/> +<polygon fill="#000000" stroke="#000000" points="176.4367,-1365.1342 167.0669,-1370.0797 177.4757,-1372.0567 176.4367,-1365.1342"/> +<text text-anchor="middle" x="1805.0407" y="-1142.4544" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- processor_enable.o --> +<g id="node40" class="node"> +<title>processor_enable.o</title> +<polygon fill="#00ff00" stroke="#000000" points="3792.7443,-1630.1497 3639.7443,-1630.1497 3639.7443,-1594.1497 3792.7443,-1594.1497 3792.7443,-1630.1497"/> +<text text-anchor="middle" x="3716.2443" y="-1608.4497" font-family="Times,serif" font-size="14.00" fill="#000000">processor_enable.o</text> +</g> +<!-- internal.o->processor_enable.o --> +<g id="edge108" class="edge"> +<title>internal.o->processor_enable.o</title> +<path fill="none" stroke="#000000" d="M3492.4428,-952.8517C3524.0606,-1045.9948 3668.3071,-1470.9313 3706.7867,-1584.2884"/> +<polygon fill="#000000" stroke="#000000" points="3703.5459,-1585.6302 3710.0746,-1593.9744 3710.1744,-1583.38 3703.5459,-1585.6302"/> +<text text-anchor="middle" x="3594.6148" y="-1272.3701" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- internal.o->dmi.o --> +<g id="edge109" class="edge"> +<title>internal.o->dmi.o</title> +<path fill="none" stroke="#000000" d="M3447.7134,-916.5519C3189.6475,-802.8283 1716.6527,-192.7159 1461.5656,-93.9287"/> +<polygon fill="#000000" stroke="#000000" points="1462.5897,-90.5726 1451.9999,-90.2456 1460.0744,-97.1051 1462.5897,-90.5726"/> +<text text-anchor="middle" x="2449.6395" y="-509.0403" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- ichspi.o->opaque.o --> +<g id="edge156" class="edge"> +<title>ichspi.o->opaque.o</title> +<path fill="none" stroke="#000000" d="M2987.416,-415.0483C2714.5995,-597.3385 474.3266,-2094.2409 163.2637,-2302.0866"/> +<polygon fill="#000000" stroke="#000000" points="160.9974,-2299.3913 154.6272,-2307.8572 164.8865,-2305.2116 160.9974,-2299.3913"/> +<text text-anchor="middle" x="1570.3398" y="-1362.3674" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- ichspi.o->libflashrom.o --> +<g id="edge159" class="edge"> +<title>ichspi.o->libflashrom.o</title> +<path fill="none" stroke="#000000" d="M2978.9311,-403.9759C2691.6805,-461.1136 757.0966,-845.9263 375.8157,-921.7678"/> +<polygon fill="#000000" stroke="#000000" points="374.9036,-918.3805 365.7786,-923.7643 376.2693,-925.246 374.9036,-918.3805"/> +<text text-anchor="middle" x="1672.3734" y="-666.6718" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- ichspi.o->flashrom.o --> +<g id="edge164" class="edge"> +<title>ichspi.o->flashrom.o</title> +<path fill="none" stroke="#000000" d="M3008.4673,-414.9683C2924.7306,-661.6488 2011.076,-3353.1884 1907.9245,-3657.0631"/> +<polygon fill="#000000" stroke="#000000" points="1904.4999,-3656.2632 1904.5997,-3666.8576 1911.1284,-3658.5134 1904.4999,-3656.2632"/> +<text text-anchor="middle" x="2453.1959" y="-2039.8157" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- ichspi.o->spi.o --> +<g id="edge158" class="edge"> +<title>ichspi.o->spi.o</title> +<path fill="none" stroke="#000000" d="M3000.6435,-415.0779C2823.4342,-646.0215 1015.6264,-3002.0026 802.7573,-3279.4189"/> +<polygon fill="#000000" stroke="#000000" points="799.702,-3277.6513 796.3911,-3287.7155 805.2555,-3281.9126 799.702,-3277.6513"/> +<text text-anchor="middle" x="1896.7004" y="-1836.0484" font-family="Times,serif" font-size="14.00" fill="#000000">3</text> +</g> +<!-- ichspi.o->hwaccess_physmap.o --> +<g id="edge161" class="edge"> +<title>ichspi.o->hwaccess_physmap.o</title> +<path fill="none" stroke="#000000" d="M3035.2918,-415.0189C3067.542,-443.3015 3129.8852,-497.9751 3166.3864,-529.9858"/> +<polygon fill="#000000" stroke="#000000" points="3164.3744,-532.8765 3174.2005,-536.8386 3168.9898,-527.6136 3164.3744,-532.8765"/> +<text text-anchor="middle" x="3091.3391" y="-476.3024" font-family="Times,serif" font-size="14.00" fill="#000000">10</text> +</g> +<!-- ichspi.o->spi25.o --> +<g id="edge163" class="edge"> +<title>ichspi.o->spi25.o</title> +<path fill="none" stroke="#000000" d="M2994.0138,-414.9398C2760.399,-619.8144 612.7485,-2503.2534 339.2438,-2743.1105"/> +<polygon fill="#000000" stroke="#000000" points="336.5616,-2740.8075 331.3509,-2750.0325 341.177,-2746.0704 336.5616,-2740.8075"/> +<text text-anchor="middle" x="1661.6288" y="-1582.8251" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- ichspi.o->helpers.o --> +<g id="edge157" class="edge"> +<title>ichspi.o->helpers.o</title> +<path fill="none" stroke="#000000" d="M2979.0943,-411.5895C2673.8326,-538.0331 494.9017,-1440.5758 131.8945,-1590.9383"/> +<polygon fill="#000000" stroke="#000000" points="130.3223,-1587.8011 122.4229,-1594.8616 133.0011,-1594.2682 130.3223,-1587.8011"/> +<text text-anchor="middle" x="1550.4944" y="-1005.0639" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- ichspi.o->internal.o --> +<g id="edge160" class="edge"> +<title>ichspi.o->internal.o</title> +<path fill="none" stroke="#000000" d="M3030.5717,-415.0829C3100.7032,-495.0525 3381.6112,-815.3668 3463.6737,-908.941"/> +<polygon fill="#000000" stroke="#000000" points="3461.1071,-911.3228 3470.3321,-916.5335 3466.37,-906.7073 3461.1071,-911.3228"/> +<text text-anchor="middle" x="3242.1227" y="-665.812" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- ichspi.o->ich_descriptors.o --> +<g id="edge162" class="edge"> +<title>ichspi.o->ich_descriptors.o</title> +<path fill="none" stroke="#000000" d="M2987.2987,-378.6321C2951.7969,-354.9106 2889.7263,-313.4363 2850.6312,-287.3138"/> +<polygon fill="#000000" stroke="#000000" points="2852.4359,-284.3103 2842.1766,-281.6647 2848.5468,-290.1306 2852.4359,-284.3103"/> +<text text-anchor="middle" x="2913.9649" y="-336.773" font-family="Times,serif" font-size="14.00" fill="#000000">4</text> +</g> +<!-- sb600spi.o->libflashrom.o --> +<g id="edge172" class="edge"> +<title>sb600spi.o->libflashrom.o</title> +<path fill="none" stroke="#000000" d="M1176.2272,-175.6308C1058.8908,-278.5322 475.3702,-790.266 339.1192,-909.7549"/> +<polygon fill="#000000" stroke="#000000" points="336.7271,-907.1974 331.5164,-916.4224 341.3426,-912.4603 336.7271,-907.1974"/> +<text text-anchor="middle" x="752.6732" y="-546.4929" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- sb600spi.o->flashrom.o --> +<g id="edge175" class="edge"> +<title>sb600spi.o->flashrom.o</title> +<path fill="none" stroke="#000000" d="M1200.4361,-175.7017C1251.535,-432.5936 1829.2328,-3336.8762 1892.7963,-3656.4319"/> +<polygon fill="#000000" stroke="#000000" points="1889.4552,-3657.5755 1894.8389,-3666.7005 1896.3207,-3656.2098 1889.4552,-3657.5755"/> +<text text-anchor="middle" x="1541.6162" y="-1919.8668" font-family="Times,serif" font-size="14.00" fill="#000000">4</text> +</g> +<!-- sb600spi.o->spi.o --> +<g id="edge170" class="edge"> +<title>sb600spi.o->spi.o</title> +<path fill="none" stroke="#000000" d="M1194.4459,-175.6604C1162.7624,-416.32 825.0865,-2981.2234 786.0042,-3278.0829"/> +<polygon fill="#000000" stroke="#000000" points="782.5285,-3277.6695 784.6932,-3288.0408 789.4686,-3278.5833 782.5285,-3277.6695"/> +<text text-anchor="middle" x="985.225" y="-1730.6717" font-family="Times,serif" font-size="14.00" fill="#000000">4</text> +</g> +<!-- sb600spi.o->hwaccess_physmap.o --> +<g id="edge173" class="edge"> +<title>sb600spi.o->hwaccess_physmap.o</title> +<path fill="none" stroke="#000000" d="M1244.2488,-166.9967C1503.1192,-218.4893 2746.8477,-465.8822 3100.7711,-536.282"/> +<polygon fill="#000000" stroke="#000000" points="3100.2388,-539.7446 3110.7295,-538.2628 3101.6045,-532.8791 3100.2388,-539.7446"/> +<text text-anchor="middle" x="2167.5099" y="-355.4394" font-family="Times,serif" font-size="14.00" fill="#000000">9</text> +</g> +<!-- sb600spi.o->spi25.o --> +<g id="edge174" class="edge"> +<title>sb600spi.o->spi25.o</title> +<path fill="none" stroke="#000000" d="M1190.6961,-175.6291C1117.3926,-391.5741 409.9632,-2475.594 320.0256,-2740.5415"/> +<polygon fill="#000000" stroke="#000000" points="316.6548,-2739.5832 316.7546,-2750.1776 323.2833,-2741.8334 316.6548,-2739.5832"/> +<text text-anchor="middle" x="750.3609" y="-1461.8853" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- sb600spi.o->pcidev.o --> +<g id="edge169" class="edge"> +<title>sb600spi.o->pcidev.o</title> +<path fill="none" stroke="#000000" d="M1244.0263,-154.4707C1433.2799,-142.0664 2136.0765,-96.0026 2325.6343,-83.5784"/> +<polygon fill="#000000" stroke="#000000" points="2326.0784,-87.0568 2335.828,-82.9102 2325.6205,-80.0718 2326.0784,-87.0568"/> +<text text-anchor="middle" x="1779.8303" y="-122.8245" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- amd_imc.o --> +<g id="node33" class="node"> +<title>amd_imc.o</title> +<polygon fill="#ffff00" stroke="#000000" points="1027.7325,-281.6377 935.7325,-281.6377 935.7325,-245.6377 1027.7325,-245.6377 1027.7325,-281.6377"/> +<text text-anchor="middle" x="981.7325" y="-259.9377" font-family="Times,serif" font-size="14.00" fill="#000000">amd_imc.o</text> +</g> +<!-- sb600spi.o->amd_imc.o --> +<g id="edge171" class="edge"> +<title>sb600spi.o->amd_imc.o</title> +<path fill="none" stroke="#000000" d="M1159.852,-175.7989C1123.267,-193.8406 1067.1751,-221.5021 1027.7322,-240.9532"/> +<polygon fill="#000000" stroke="#000000" points="1026.0062,-237.9018 1018.5855,-245.4638 1029.1023,-244.1799 1026.0062,-237.9018"/> +<text text-anchor="middle" x="1088.7921" y="-212.176" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- dummyflasher.o --> +<g id="node21" class="node"> +<title>dummyflasher.o</title> +<polygon fill="#ffff00" stroke="#000000" points="130,-1869.4649 0,-1869.4649 0,-1833.4649 130,-1833.4649 130,-1869.4649"/> +<text text-anchor="middle" x="65" y="-1847.7649" font-family="Times,serif" font-size="14.00" fill="#000000">dummyflasher.o</text> +</g> +<!-- dummyflasher.o->libflashrom.o --> +<g id="edge31" class="edge"> +<title>dummyflasher.o->libflashrom.o</title> +<path fill="none" stroke="#000000" d="M69.9067,-1833.1529C100.5505,-1718.7886 265.5536,-1102.9887 303.0528,-963.0399"/> +<polygon fill="#000000" stroke="#000000" points="306.5118,-963.6533 305.7193,-953.0882 299.7503,-961.8415 306.5118,-963.6533"/> +<text text-anchor="middle" x="181.4797" y="-1401.8964" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- dummyflasher.o->programmer.o --> +<g id="edge33" class="edge"> +<title>dummyflasher.o->programmer.o</title> +<path fill="none" stroke="#000000" d="M66.2048,-1869.8462C68.9316,-1911.4494 75.5908,-2013.0499 78.8407,-2062.6336"/> +<polygon fill="#000000" stroke="#000000" points="75.3515,-2062.9142 79.4981,-2072.6638 82.3365,-2062.4563 75.3515,-2062.9142"/> +<text text-anchor="middle" x="67.5227" y="-1970.0399" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- dummyflasher.o->flashrom.o --> +<g id="edge35" class="edge"> +<title>dummyflasher.o->flashrom.o</title> +<path fill="none" stroke="#000000" d="M83.1464,-1869.6114C259.576,-2046.041 1667.4702,-3453.9351 1873.3709,-3659.8358"/> +<polygon fill="#000000" stroke="#000000" points="1870.9031,-3662.3178 1880.4491,-3666.914 1875.8528,-3657.368 1870.9031,-3662.3178"/> +<text text-anchor="middle" x="973.2587" y="-2768.5236" font-family="Times,serif" font-size="14.00" fill="#000000">5</text> +</g> +<!-- dummyflasher.o->spi.o --> +<g id="edge30" class="edge"> +<title>dummyflasher.o->spi.o</title> +<path fill="none" stroke="#000000" d="M73.9398,-1869.593C149.2227,-2022.2517 676.8231,-3092.1194 768.6956,-3278.4185"/> +<polygon fill="#000000" stroke="#000000" points="765.6416,-3280.139 773.2036,-3287.5597 771.9197,-3277.0429 765.6416,-3280.139"/> +<text text-anchor="middle" x="416.3177" y="-2577.8057" font-family="Times,serif" font-size="14.00" fill="#000000">3</text> +</g> +<!-- dummyflasher.o->spi25.o --> +<g id="edge34" class="edge"> +<title>dummyflasher.o->spi25.o</title> +<path fill="none" stroke="#000000" d="M69.9067,-1869.777C100.5505,-1984.1413 265.5536,-2599.9412 303.0528,-2739.89"/> +<polygon fill="#000000" stroke="#000000" points="299.7503,-2741.0884 305.7193,-2749.8417 306.5118,-2739.2766 299.7503,-2741.0884"/> +<text text-anchor="middle" x="181.4797" y="-2308.6335" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- dummyflasher.o->helpers.o --> +<g id="edge29" class="edge"> +<title>dummyflasher.o->helpers.o</title> +<path fill="none" stroke="#000000" d="M66.2048,-1833.0837C68.9316,-1791.4805 75.5908,-1689.88 78.8407,-1640.2963"/> +<polygon fill="#000000" stroke="#000000" points="82.3365,-1640.4736 79.4981,-1630.2661 75.3515,-1640.0157 82.3365,-1640.4736"/> +<text text-anchor="middle" x="67.5227" y="-1740.49" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- dummyflasher.o->udelay.o --> +<g id="edge32" class="edge"> +<title>dummyflasher.o->udelay.o</title> +<path fill="none" stroke="#000000" d="M130.3818,-1838.4597C576.3627,-1749.7486 3164.327,-1234.9705 3545.485,-1159.1534"/> +<polygon fill="#000000" stroke="#000000" points="3546.23,-1162.5739 3555.355,-1157.1902 3544.8643,-1155.7084 3546.23,-1162.5739"/> +<text text-anchor="middle" x="1832.9334" y="-1502.6066" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- udelay.o->libflashrom.o --> +<g id="edge98" class="edge"> +<title>udelay.o->libflashrom.o</title> +<path fill="none" stroke="#000000" d="M3555.332,-1145.8098C3226.2738,-1117.5089 805.3483,-958.6725 375.7291,-936.9261"/> +<polygon fill="#000000" stroke="#000000" points="375.8192,-933.4263 365.6572,-936.4235 375.4703,-940.4176 375.8192,-933.4263"/> +<text text-anchor="middle" x="1960.5306" y="-1045.1679" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- cbtable.o->libflashrom.o --> +<g id="edge37" class="edge"> +<title>cbtable.o->libflashrom.o</title> +<path fill="none" stroke="#000000" d="M3311.7731,-738.0277C2982.5095,-759.6087 784.07,-903.7021 375.8141,-930.4606"/> +<polygon fill="#000000" stroke="#000000" points="375.4093,-926.9795 365.6596,-931.1261 375.8671,-933.9645 375.4093,-926.9795"/> +<text text-anchor="middle" x="1838.7936" y="-838.0441" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- cbtable.o->hwaccess_physmap.o --> +<g id="edge38" class="edge"> +<title>cbtable.o->hwaccess_physmap.o</title> +<path fill="none" stroke="#000000" d="M3337.0179,-717.0406C3308.768,-684.8277 3250.0527,-617.8758 3217.6389,-580.9148"/> +<polygon fill="#000000" stroke="#000000" points="3219.9853,-578.2821 3210.7603,-573.0714 3214.7224,-582.8975 3219.9853,-578.2821"/> +<text text-anchor="middle" x="3272.3284" y="-652.7777" font-family="Times,serif" font-size="14.00" fill="#000000">4</text> +</g> +<!-- spi95.o --> +<g id="node24" class="node"> +<title>spi95.o</title> +<polygon fill="#ffff00" stroke="#000000" points="636.0094,-3165.9204 568.0094,-3165.9204 568.0094,-3129.9204 636.0094,-3129.9204 636.0094,-3165.9204"/> +<text text-anchor="middle" x="602.0094" y="-3144.2204" font-family="Times,serif" font-size="14.00" fill="#000000">spi95.o</text> +</g> +<!-- spi95.o->libflashrom.o --> +<g id="edge40" class="edge"> +<title>spi95.o->libflashrom.o</title> +<path fill="none" stroke="#000000" d="M599.6212,-3129.7802C573.778,-2933.4811 346.2746,-1205.4215 314.3526,-962.9495"/> +<polygon fill="#000000" stroke="#000000" points="317.7962,-962.2909 313.0207,-952.8333 310.856,-963.2047 317.7962,-962.2909"/> +<text text-anchor="middle" x="451.9869" y="-2050.1649" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- spi95.o->spi.o --> +<g id="edge39" class="edge"> +<title>spi95.o->spi.o</title> +<path fill="none" stroke="#000000" d="M622.6936,-3166.06C654.9437,-3194.3426 717.287,-3249.0161 753.7882,-3281.0268"/> +<polygon fill="#000000" stroke="#000000" points="751.7762,-3283.9176 761.6023,-3287.8796 756.3916,-3278.6547 751.7762,-3283.9176"/> +<text text-anchor="middle" x="683.2409" y="-3227.3434" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- spi95.o->spi25.o --> +<g id="edge41" class="edge"> +<title>spi95.o->spi25.o</title> +<path fill="none" stroke="#000000" d="M588.152,-3129.8611C540.9859,-3068.393 386.5316,-2867.1042 330.865,-2794.5582"/> +<polygon fill="#000000" stroke="#000000" points="333.4444,-2792.1702 324.58,-2786.3674 327.8909,-2796.4316 333.4444,-2792.1702"/> +<text text-anchor="middle" x="454.5085" y="-2951.0096" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- hwaccess_x86_io.o->libflashrom.o --> +<g id="edge42" class="edge"> +<title>hwaccess_x86_io.o->libflashrom.o</title> +<path fill="none" stroke="#000000" d="M3594.5931,-1367.0734C3144.0345,-1307.7562 798.4203,-998.9503 375.8871,-943.3227"/> +<polygon fill="#000000" stroke="#000000" points="376.0547,-939.8147 365.6834,-941.9794 375.141,-946.7548 376.0547,-939.8147"/> +<text text-anchor="middle" x="1980.2401" y="-1158.9981" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- hwaccess_x86_io.o->flashrom.o --> +<g id="edge43" class="edge"> +<title>hwaccess_x86_io.o->flashrom.o</title> +<path fill="none" stroke="#000000" d="M3655.4586,-1395.1711C3500.3242,-1597.3463 2104.3638,-3416.5972 1918.8072,-3658.4193"/> +<polygon fill="#000000" stroke="#000000" points="1915.798,-3656.5916 1912.4871,-3666.6558 1921.3515,-3660.853 1915.798,-3656.5916"/> +<text text-anchor="middle" x="2782.1329" y="-2530.5952" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- print.o->libflashrom.o --> +<g id="edge51" class="edge"> +<title>print.o->libflashrom.o</title> +<path fill="none" stroke="#000000" d="M583.9762,-573.1821C531.0476,-634.6566 377.5238,-834.561 326.9092,-907.683"/> +<polygon fill="#000000" stroke="#000000" points="323.7413,-906.1159 320.9955,-916.3488 329.5233,-910.0617 323.7413,-906.1159"/> +<text text-anchor="middle" x="450.4427" y="-729.2326" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- print.o->flashrom.o --> +<g id="edge54" class="edge"> +<title>print.o->flashrom.o</title> +<path fill="none" stroke="#000000" d="M609.623,-573.3903C709.7045,-815.0083 1764.8054,-3362.2472 1886.9537,-3657.1392"/> +<polygon fill="#000000" stroke="#000000" points="1883.8417,-3658.7724 1890.9022,-3666.6718 1890.3089,-3656.0936 1883.8417,-3658.7724"/> +<text text-anchor="middle" x="1243.2884" y="-2119.0648" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- print.o->board_enable.o --> +<g id="edge55" class="edge"> +<title>print.o->board_enable.o</title> +<path fill="none" stroke="#000000" d="M634.5152,-538.9794C787.357,-463.6061 1434.576,-144.4331 1613.2783,-56.3069"/> +<polygon fill="#000000" stroke="#000000" points="1614.9944,-59.3631 1622.4151,-51.8011 1611.8984,-53.0849 1614.9944,-59.3631"/> +<text text-anchor="middle" x="1118.8967" y="-301.4431" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- print.o->chipset_enable.o --> +<g id="edge49" class="edge"> +<title>print.o->chipset_enable.o</title> +<path fill="none" stroke="#000000" d="M634.6123,-548.5243C859.8279,-503.7262 2185.5603,-240.0216 2522.333,-173.0334"/> +<polygon fill="#000000" stroke="#000000" points="2523.3542,-176.3989 2532.4792,-171.0151 2521.9885,-169.5334 2523.3542,-176.3989"/> +<text text-anchor="middle" x="1573.4726" y="-364.5788" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- print.o->helpers.o --> +<g id="edge50" class="edge"> +<title>print.o->helpers.o</title> +<path fill="none" stroke="#000000" d="M592.9609,-573.3581C530.9108,-699.1832 168.5251,-1434.0287 94.059,-1585.0311"/> +<polygon fill="#000000" stroke="#000000" points="90.8605,-1583.6037 89.5766,-1594.1204 97.1386,-1586.6997 90.8605,-1583.6037"/> +<text text-anchor="middle" x="338.5099" y="-1082.9946" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- print.o->flashchips.o --> +<g id="edge52" class="edge"> +<title>print.o->flashchips.o</title> +<path fill="none" stroke="#000000" d="M615.8542,-573.0523C791.5474,-802.0201 2583.8892,-3137.8454 2794.9371,-3412.8884"/> +<polygon fill="#000000" stroke="#000000" points="2792.3845,-3415.3112 2801.2489,-3421.1141 2797.938,-3411.0498 2792.3845,-3415.3112"/> +<text text-anchor="middle" x="1700.3957" y="-1996.7703" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- print.o->programmer_table.o --> +<g id="edge53" class="edge"> +<title>print.o->programmer_table.o</title> +<path fill="none" stroke="#000000" d="M622.6936,-536.8699C654.9437,-508.5873 717.287,-453.9137 753.7882,-421.9031"/> +<polygon fill="#000000" stroke="#000000" points="756.3916,-424.2752 761.6023,-415.0503 751.7762,-419.0123 756.3916,-424.2752"/> +<text text-anchor="middle" x="683.2409" y="-483.1865" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- flashchips.o->opaque.o --> +<g id="edge114" class="edge"> +<title>flashchips.o->opaque.o</title> +<path fill="none" stroke="#000000" d="M2771.6169,-3421.2405C2455.3427,-3290.2354 515.0729,-2486.5494 177.5218,-2346.7311"/> +<polygon fill="#000000" stroke="#000000" points="178.584,-2343.3828 168.0058,-2342.7895 175.9052,-2349.85 178.584,-2343.3828"/> +<text text-anchor="middle" x="1469.5693" y="-2887.7858" font-family="Times,serif" font-size="14.00" fill="#000000">4</text> +</g> +<!-- flashchips.o->flashrom.o --> +<g id="edge132" class="edge"> +<title>flashchips.o->flashrom.o</title> +<path fill="none" stroke="#000000" d="M2764.4095,-3449.5031C2605.7697,-3487.2917 2120.2577,-3617.3167 1954.5617,-3666.2987"/> +<polygon fill="#000000" stroke="#000000" points="1953.1679,-3663.0617 1944.5806,-3669.2672 1955.1634,-3669.7712 1953.1679,-3663.0617"/> +<text text-anchor="middle" x="2354.4856" y="-3546.7009" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- flashchips.o->w29ee011.o --> +<g id="edge115" class="edge"> +<title>flashchips.o->w29ee011.o</title> +<path fill="none" stroke="#000000" d="M2778.2211,-3457.5269C2741.6361,-3475.5686 2685.5442,-3503.23 2646.1013,-3522.6811"/> +<polygon fill="#000000" stroke="#000000" points="2644.3754,-3519.6298 2636.9547,-3527.1918 2647.4714,-3525.9079 2644.3754,-3519.6298"/> +<text text-anchor="middle" x="2707.1612" y="-3493.904" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- flashchips.o->spi.o --> +<g id="edge119" class="edge"> +<title>flashchips.o->spi.o</title> +<path fill="none" stroke="#000000" d="M2764.693,-3435.9819C2478.8387,-3417.246 1067.8161,-3324.7627 819.6326,-3308.4959"/> +<polygon fill="#000000" stroke="#000000" points="819.5499,-3304.9831 809.3424,-3307.8215 819.0921,-3311.9681 819.5499,-3304.9831"/> +<text text-anchor="middle" x="1787.1628" y="-3376.0389" font-family="Times,serif" font-size="14.00" fill="#000000">3</text> +</g> +<!-- flashchips.o->spi25.o --> +<g id="edge130" class="edge"> +<title>flashchips.o->spi25.o</title> +<path fill="none" stroke="#000000" d="M2764.6019,-3425.7351C2440.4595,-3338.8814 659.0635,-2861.5578 354.836,-2780.0403"/> +<polygon fill="#000000" stroke="#000000" points="355.6108,-2776.6245 345.0457,-2777.417 353.7991,-2783.386 355.6108,-2776.6245"/> +<text text-anchor="middle" x="1550.2189" y="-3106.6877" font-family="Times,serif" font-size="14.00" fill="#000000">21</text> +</g> +<!-- flashchips.o->sst28sf040.o --> +<g id="edge116" class="edge"> +<title>flashchips.o->sst28sf040.o</title> +<path fill="none" stroke="#000000" d="M2842.5064,-3421.0449C2878.0082,-3397.3233 2940.0788,-3355.8491 2979.1739,-3329.7266"/> +<polygon fill="#000000" stroke="#000000" points="2981.2583,-3332.5433 2987.6285,-3324.0774 2977.3692,-3326.723 2981.2583,-3332.5433"/> +<text text-anchor="middle" x="2905.8402" y="-3379.1857" font-family="Times,serif" font-size="14.00" fill="#000000">4</text> +</g> +<!-- flashchips.o->jedec.o --> +<g id="edge121" class="edge"> +<title>flashchips.o->jedec.o</title> +<path fill="none" stroke="#000000" d="M2833.4956,-3420.994C2927.0434,-3327.4461 3351.6835,-2902.806 3460.7144,-2793.7752"/> +<polygon fill="#000000" stroke="#000000" points="3463.4141,-2796.0252 3468.0103,-2786.4792 3458.4644,-2791.0755 3463.4141,-2796.0252"/> +<text text-anchor="middle" x="3137.605" y="-3111.1846" font-family="Times,serif" font-size="14.00" fill="#000000">13</text> +</g> +<!-- flashchips.o->dummyflasher.o --> +<g id="edge117" class="edge"> +<title>flashchips.o->dummyflasher.o</title> +<path fill="none" stroke="#000000" d="M2783.8376,-3421.1866C2502.916,-3258.9964 422.047,-2057.6061 105.3576,-1874.7654"/> +<polygon fill="#000000" stroke="#000000" points="106.9166,-1871.6241 96.5063,-1869.6551 103.4165,-1877.6862 106.9166,-1871.6241"/> +<text text-anchor="middle" x="1439.5976" y="-2651.776" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- flashchips.o->spi95.o --> +<g id="edge118" class="edge"> +<title>flashchips.o->spi95.o</title> +<path fill="none" stroke="#000000" d="M2764.5481,-3432.6241C2465.0084,-3393.1889 928.8959,-3190.9559 646.6114,-3153.7924"/> +<polygon fill="#000000" stroke="#000000" points="646.7206,-3150.2767 636.3493,-3152.4414 645.8069,-3157.2168 646.7206,-3150.2767"/> +<text text-anchor="middle" x="1700.5798" y="-3297.0082" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- 82802ab.o --> +<g id="node29" class="node"> +<title>82802ab.o</title> +<polygon fill="#ffff00" stroke="#000000" points="3715.4561,-2344.0006 3623.4561,-2344.0006 3623.4561,-2308.0006 3715.4561,-2308.0006 3715.4561,-2344.0006"/> +<text text-anchor="middle" x="3669.4561" y="-2322.3006" font-family="Times,serif" font-size="14.00" fill="#000000">82802ab.o</text> +</g> +<!-- flashchips.o->82802ab.o --> +<g id="edge120" class="edge"> +<title>flashchips.o->82802ab.o</title> +<path fill="none" stroke="#000000" d="M2829.3119,-3420.8978C2929.3788,-3290.488 3531.0711,-2506.3474 3649.301,-2352.2671"/> +<polygon fill="#000000" stroke="#000000" points="3652.1707,-2354.2768 3655.4816,-2344.2125 3646.6172,-2350.0154 3652.1707,-2354.2768"/> +<text text-anchor="middle" x="3234.3065" y="-2890.3825" font-family="Times,serif" font-size="14.00" fill="#000000">5</text> +</g> +<!-- flashchips.o->spi25_statusreg.o --> +<g id="edge129" class="edge"> +<title>flashchips.o->spi25_statusreg.o</title> +<path fill="none" stroke="#000000" d="M2764.54,-3442.6124C2532.2332,-3457.8386 1567.8045,-3521.0506 1278.9404,-3539.9838"/> +<polygon fill="#000000" stroke="#000000" points="1278.2929,-3536.5186 1268.5433,-3540.6652 1278.7508,-3543.5036 1278.2929,-3536.5186"/> +<text text-anchor="middle" x="2012.2402" y="-3495.0981" font-family="Times,serif" font-size="14.00" fill="#000000">39</text> +</g> +<!-- sfdp.o --> +<g id="node37" class="node"> +<title>sfdp.o</title> +<polygon fill="#ffff00" stroke="#000000" points="234.5642,-2571.1016 174.5642,-2571.1016 174.5642,-2535.1016 234.5642,-2535.1016 234.5642,-2571.1016"/> +<text text-anchor="middle" x="204.5642" y="-2549.4016" font-family="Times,serif" font-size="14.00" fill="#000000">sfdp.o</text> +</g> +<!-- flashchips.o->sfdp.o --> +<g id="edge122" class="edge"> +<title>flashchips.o->sfdp.o</title> +<path fill="none" stroke="#000000" d="M2764.5103,-3422.0862C2429.9564,-3308.5205 543.3854,-2668.1159 244.4647,-2566.646"/> +<polygon fill="#000000" stroke="#000000" points="245.4927,-2563.2989 234.8983,-2563.3986 243.2426,-2569.9274 245.4927,-2563.2989"/> +<text text-anchor="middle" x="1499.4875" y="-2998.1661" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- en29lv640b.o --> +<g id="node38" class="node"> +<title>en29lv640b.o</title> +<polygon fill="#ffff00" stroke="#000000" points="3409.5505,-2985.6077 3296.5505,-2985.6077 3296.5505,-2949.6077 3409.5505,-2949.6077 3409.5505,-2985.6077"/> +<text text-anchor="middle" x="3353.0505" y="-2963.9077" font-family="Times,serif" font-size="14.00" fill="#000000">en29lv640b.o</text> +</g> +<!-- flashchips.o->en29lv640b.o --> +<g id="edge123" class="edge"> +<title>flashchips.o->en29lv640b.o</title> +<path fill="none" stroke="#000000" d="M2835.9523,-3421.0906C2919.2318,-3348.0565 3229.2428,-3076.1841 3324.8153,-2992.3693"/> +<polygon fill="#000000" stroke="#000000" points="3327.1467,-2994.98 3332.3574,-2985.755 3322.5313,-2989.7171 3327.1467,-2994.98"/> +<text text-anchor="middle" x="3075.3838" y="-3210.5299" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- sst49lfxxxc.o --> +<g id="node39" class="node"> +<title>sst49lfxxxc.o</title> +<polygon fill="#ffff00" stroke="#000000" points="3647.3657,-2571.1016 3537.3657,-2571.1016 3537.3657,-2535.1016 3647.3657,-2535.1016 3647.3657,-2571.1016"/> +<text text-anchor="middle" x="3592.3657" y="-2549.4016" font-family="Times,serif" font-size="14.00" fill="#000000">sst49lfxxxc.o</text> +</g> +<!-- flashchips.o->sst49lfxxxc.o --> +<g id="edge124" class="edge"> +<title>flashchips.o->sst49lfxxxc.o</title> +<path fill="none" stroke="#000000" d="M2831.0738,-3421.1886C2929.3301,-3309.1488 3454.1136,-2710.7479 3569.7941,-2578.8395"/> +<polygon fill="#000000" stroke="#000000" points="3572.5525,-2581.0025 3576.5145,-2571.1764 3567.2896,-2576.3871 3572.5525,-2581.0025"/> +<text text-anchor="middle" x="3195.434" y="-3003.8141" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- sst_fwhub.o --> +<g id="node42" class="node"> +<title>sst_fwhub.o</title> +<polygon fill="#ffff00" stroke="#000000" points="2423.5006,-3640.4561 2322.5006,-3640.4561 2322.5006,-3604.4561 2423.5006,-3604.4561 2423.5006,-3640.4561"/> +<text text-anchor="middle" x="2373.0006" y="-3618.7561" font-family="Times,serif" font-size="14.00" fill="#000000">sst_fwhub.o</text> +</g> +<!-- flashchips.o->sst_fwhub.o --> +<g id="edge125" class="edge"> +<title>flashchips.o->sst_fwhub.o</title> +<path fill="none" stroke="#000000" d="M2771.5877,-3457.3559C2689.9135,-3491.1865 2514.1904,-3563.9734 2425.9036,-3600.5429"/> +<polygon fill="#000000" stroke="#000000" points="2424.5093,-3597.332 2416.6099,-3604.3925 2427.1881,-3603.7992 2424.5093,-3597.332"/> +<text text-anchor="middle" x="2593.7457" y="-3517.7494" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- edi.o --> +<g id="node43" class="node"> +<title>edi.o</title> +<polygon fill="#ffff00" stroke="#000000" points="2164.7801,-3687.2443 2110.7801,-3687.2443 2110.7801,-3651.2443 2164.7801,-3651.2443 2164.7801,-3687.2443"/> +<text text-anchor="middle" x="2137.7801" y="-3665.5443" font-family="Times,serif" font-size="14.00" fill="#000000">edi.o</text> +</g> +<!-- flashchips.o->edi.o --> +<g id="edge126" class="edge"> +<title>flashchips.o->edi.o</title> +<path fill="none" stroke="#000000" d="M2764.5581,-3456.4819C2633.9621,-3500.8133 2288.0515,-3618.2341 2174.4791,-3656.7867"/> +<polygon fill="#000000" stroke="#000000" points="2173.1874,-3653.529 2164.8431,-3660.0577 2175.4375,-3660.1575 2173.1874,-3653.529"/> +<text text-anchor="middle" x="2464.5186" y="-3560.4343" font-family="Times,serif" font-size="14.00" fill="#000000">4</text> +</g> +<!-- w39.o --> +<g id="node44" class="node"> +<title>w39.o</title> +<polygon fill="#ffff00" stroke="#000000" points="3224.4204,-3165.9204 3165.4204,-3165.9204 3165.4204,-3129.9204 3224.4204,-3129.9204 3224.4204,-3165.9204"/> +<text text-anchor="middle" x="3194.9204" y="-3144.2204" font-family="Times,serif" font-size="14.00" fill="#000000">w39.o</text> +</g> +<!-- flashchips.o->w39.o --> +<g id="edge127" class="edge"> +<title>flashchips.o->w39.o</title> +<path fill="none" stroke="#000000" d="M2838.6642,-3421.2854C2904.0562,-3371.1084 3088.4127,-3229.6467 3163.0026,-3172.4118"/> +<polygon fill="#000000" stroke="#000000" points="3165.3215,-3175.0442 3171.1244,-3166.1798 3161.0602,-3169.4907 3165.3215,-3175.0442"/> +<text text-anchor="middle" x="2991.3334" y="-3285.6486" font-family="Times,serif" font-size="14.00" fill="#000000">14</text> +</g> +<!-- at45db.o --> +<g id="node45" class="node"> +<title>at45db.o</title> +<polygon fill="#ffff00" stroke="#000000" points="1021.7325,-3457.2922 941.7325,-3457.2922 941.7325,-3421.2922 1021.7325,-3421.2922 1021.7325,-3457.2922"/> +<text text-anchor="middle" x="981.7325" y="-3435.5922" font-family="Times,serif" font-size="14.00" fill="#000000">at45db.o</text> +</g> +<!-- flashchips.o->at45db.o --> +<g id="edge128" class="edge"> +<title>flashchips.o->at45db.o</title> +<path fill="none" stroke="#000000" d="M2764.2465,-3439.2922C2500.6994,-3439.2922 1294.3182,-3439.2922 1032.1198,-3439.2922"/> +<polygon fill="#000000" stroke="#000000" points="1031.7658,-3435.7923 1021.7658,-3439.2922 1031.7657,-3442.7923 1031.7658,-3435.7923"/> +<text text-anchor="middle" x="1888.6831" y="-3443.0922" font-family="Times,serif" font-size="14.00" fill="#000000">11</text> +</g> +<!-- s25f.o --> +<g id="node46" class="node"> +<title>s25f.o</title> +<polygon fill="#ffff00" stroke="#000000" points="1453.4293,-3640.4561 1394.4293,-3640.4561 1394.4293,-3604.4561 1453.4293,-3604.4561 1453.4293,-3640.4561"/> +<text text-anchor="middle" x="1423.9293" y="-3618.7561" font-family="Times,serif" font-size="14.00" fill="#000000">s25f.o</text> +</g> +<!-- flashchips.o->s25f.o --> +<g id="edge131" class="edge"> +<title>flashchips.o->s25f.o</title> +<path fill="none" stroke="#000000" d="M2764.4462,-3445.9737C2542.7546,-3475.1599 1661.5952,-3591.1668 1463.5763,-3617.2365"/> +<polygon fill="#000000" stroke="#000000" points="1463.0684,-3613.773 1453.6109,-3618.5484 1463.9822,-3620.7131 1463.0684,-3613.773"/> +<text text-anchor="middle" x="2109.0113" y="-3535.4051" font-family="Times,serif" font-size="14.00" fill="#000000">3</text> +</g> +<!-- stm50.o --> +<g id="node47" class="node"> +<title>stm50.o</title> +<polygon fill="#ffff00" stroke="#000000" points="3753.2443,-2108.7801 3679.2443,-2108.7801 3679.2443,-2072.7801 3753.2443,-2072.7801 3753.2443,-2108.7801"/> +<text text-anchor="middle" x="3716.2443" y="-2087.0801" font-family="Times,serif" font-size="14.00" fill="#000000">stm50.o</text> +</g> +<!-- flashchips.o->stm50.o --> +<g id="edge133" class="edge"> +<title>flashchips.o->stm50.o</title> +<path fill="none" stroke="#000000" d="M2827.2535,-3421.2489C2924.5494,-3275.6353 3580.8829,-2293.3629 3698.2868,-2117.6554"/> +<polygon fill="#000000" stroke="#000000" points="3701.2706,-2119.4897 3703.9162,-2109.2305 3695.4503,-2115.6007 3701.2706,-2119.4897"/> +<text text-anchor="middle" x="3257.7702" y="-2773.2522" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- programmer_table.o->internal.o --> +<g id="edge143" class="edge"> +<title>programmer_table.o->internal.o</title> +<path fill="none" stroke="#000000" d="M863.6146,-413.0495C1272.4682,-494.3755 3097.6227,-857.4213 3433.1858,-924.169"/> +<polygon fill="#000000" stroke="#000000" points="3432.6417,-927.6292 3443.1324,-926.1475 3434.0074,-920.7637 3432.6417,-927.6292"/> +<text text-anchor="middle" x="2143.4002" y="-672.4092" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- 82802ab.o->libflashrom.o --> +<g id="edge56" class="edge"> +<title>82802ab.o->libflashrom.o</title> +<path fill="none" stroke="#000000" d="M3625.7598,-2307.901C3263.4475,-2157.8263 760.473,-1121.0603 363.6021,-956.671"/> +<polygon fill="#000000" stroke="#000000" points="364.9292,-953.4324 354.351,-952.8391 362.2504,-959.8996 364.9292,-953.4324"/> +<text text-anchor="middle" x="1989.6809" y="-1636.086" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- 82802ab.o->flashrom.o --> +<g id="edge58" class="edge"> +<title>82802ab.o->flashrom.o</title> +<path fill="none" stroke="#000000" d="M3645.76,-2344.1832C3453.4691,-2491.7332 2150.213,-3491.7568 1930.029,-3660.7099"/> +<polygon fill="#000000" stroke="#000000" points="1927.8801,-3657.9472 1922.0772,-3666.8116 1932.1414,-3663.5007 1927.8801,-3657.9472"/> +<text text-anchor="middle" x="2782.8945" y="-3006.2466" font-family="Times,serif" font-size="14.00" fill="#000000">3</text> +</g> +<!-- 82802ab.o->jedec.o --> +<g id="edge57" class="edge"> +<title>82802ab.o->jedec.o</title> +<path fill="none" stroke="#000000" d="M3661.9344,-2344.1596C3633.4359,-2412.961 3531.9841,-2657.8872 3497.7041,-2740.6465"/> +<polygon fill="#000000" stroke="#000000" points="3494.3688,-2739.5528 3493.7755,-2750.131 3500.836,-2742.2316 3494.3688,-2739.5528"/> +<text text-anchor="middle" x="3574.8193" y="-2531.203" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- it87spi.o->libflashrom.o --> +<g id="edge61" class="edge"> +<title>it87spi.o->libflashrom.o</title> +<path fill="none" stroke="#000000" d="M134.9955,-1358.7703C163.494,-1289.9689 264.9457,-1045.0427 299.2257,-962.2834"/> +<polygon fill="#000000" stroke="#000000" points="302.5611,-963.3771 303.1544,-952.7989 296.0939,-960.6983 302.5611,-963.3771"/> +<text text-anchor="middle" x="212.1106" y="-1164.3268" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- it87spi.o->flashrom.o --> +<g id="edge66" class="edge"> +<title>it87spi.o->flashrom.o</title> +<path fill="none" stroke="#000000" d="M141.4712,-1395.1711C296.6057,-1597.3463 1692.566,-3416.5972 1878.1227,-3658.4193"/> +<polygon fill="#000000" stroke="#000000" points="1875.5784,-3660.853 1884.4428,-3666.6558 1881.1319,-3656.5916 1875.5784,-3660.853"/> +<text text-anchor="middle" x="1004.797" y="-2530.5952" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- it87spi.o->spi.o --> +<g id="edge60" class="edge"> +<title>it87spi.o->spi.o</title> +<path fill="none" stroke="#000000" d="M133.6413,-1395.0982C195.1543,-1576.3097 697.6527,-3056.622 772.9063,-3278.312"/> +<polygon fill="#000000" stroke="#000000" points="769.6346,-3279.5629 776.1634,-3287.9071 776.2632,-3277.3128 769.6346,-3279.5629"/> +<text text-anchor="middle" x="448.2738" y="-2340.5051" font-family="Times,serif" font-size="14.00" fill="#000000">3</text> +</g> +<!-- it87spi.o->hwaccess_physmap.o --> +<g id="edge63" class="edge"> +<title>it87spi.o->hwaccess_physmap.o</title> +<path fill="none" stroke="#000000" d="M167.0977,-1366.3121C489.213,-1280.0016 2677.6434,-693.6134 3117.8679,-575.6556"/> +<polygon fill="#000000" stroke="#000000" points="3118.8795,-579.0081 3127.6328,-573.0391 3117.0677,-572.2466 3118.8795,-579.0081"/> +<text text-anchor="middle" x="1637.4828" y="-974.7839" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- it87spi.o->spi25.o --> +<g id="edge65" class="edge"> +<title>it87spi.o->spi25.o</title> +<path fill="none" stroke="#000000" d="M129.8567,-1395.0289C149.3761,-1543.2936 282.832,-2556.9916 306.9167,-2739.9336"/> +<polygon fill="#000000" stroke="#000000" points="303.4785,-2740.6332 308.2539,-2750.0908 310.4187,-2739.7195 303.4785,-2740.6332"/> +<text text-anchor="middle" x="213.3867" y="-2071.2813" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- it87spi.o->board_enable.o --> +<g id="edge67" class="edge"> +<title>it87spi.o->board_enable.o</title> +<path fill="none" stroke="#000000" d="M150.8951,-1358.767C327.6733,-1212.464 1449.6643,-228.5769 1633.6556,-58.6387"/> +<polygon fill="#000000" stroke="#000000" points="1636.0488,-61.1927 1640.9977,-51.8247 1631.287,-56.0618 1636.0488,-61.1927"/> +<text text-anchor="middle" x="887.2753" y="-712.5028" font-family="Times,serif" font-size="14.00" fill="#000000">3</text> +</g> +<!-- it87spi.o->helpers.o --> +<g id="edge59" class="edge"> +<title>it87spi.o->helpers.o</title> +<path fill="none" stroke="#000000" d="M123.8801,-1394.9961C115.7662,-1435.7872 95.9798,-1535.2603 86.2599,-1584.1255"/> +<polygon fill="#000000" stroke="#000000" points="82.8097,-1583.5307 84.2915,-1594.0214 89.6752,-1584.8964 82.8097,-1583.5307"/> +<text text-anchor="middle" x="100.07" y="-1493.3608" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- it87spi.o->internal.o --> +<g id="edge62" class="edge"> +<title>it87spi.o->internal.o</title> +<path fill="none" stroke="#000000" d="M167.1545,-1373.3358C514.4229,-1334.4347 3033.3152,-1002.9011 3432.938,-943.6419"/> +<polygon fill="#000000" stroke="#000000" points="3433.6918,-947.0682 3443.0655,-942.1301 3432.6583,-940.1449 3433.6918,-947.0682"/> +<text text-anchor="middle" x="1795.0463" y="-1162.2888" font-family="Times,serif" font-size="14.00" fill="#000000">4</text> +</g> +<!-- it87spi.o->spi25_statusreg.o --> +<g id="edge64" class="edge"> +<title>it87spi.o->spi25_statusreg.o</title> +<path fill="none" stroke="#000000" d="M136.3972,-1395.0242C232.0606,-1589.0103 1066.9592,-3282.0172 1183.3741,-3518.0833"/> +<polygon fill="#000000" stroke="#000000" points="1180.3795,-3519.9244 1187.9415,-3527.3451 1186.6576,-3516.8283 1180.3795,-3519.9244"/> +<text text-anchor="middle" x="654.8857" y="-2460.3538" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- spi25_statusreg.o->libflashrom.o --> +<g id="edge166" class="edge"> +<title>spi25_statusreg.o->libflashrom.o</title> +<path fill="none" stroke="#000000" d="M1190.6961,-3527.3008C1117.3926,-3311.3558 409.9632,-1227.3359 320.0256,-962.3883"/> +<polygon fill="#000000" stroke="#000000" points="323.2833,-961.0965 316.7546,-952.7523 316.6548,-963.3466 323.2833,-961.0965"/> +<text text-anchor="middle" x="750.3609" y="-2248.6446" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- spi25_statusreg.o->flashrom.o --> +<g id="edge168" class="edge"> +<title>spi25_statusreg.o->flashrom.o</title> +<path fill="none" stroke="#000000" d="M1268.6184,-3559.6456C1408.7213,-3587.5138 1715.9072,-3648.6169 1842.3683,-3673.7716"/> +<polygon fill="#000000" stroke="#000000" points="1841.7472,-3677.2165 1852.2379,-3675.7348 1843.1129,-3670.351 1841.7472,-3677.2165"/> +<text text-anchor="middle" x="1550.4933" y="-3620.5086" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- spi25_statusreg.o->spi.o --> +<g id="edge165" class="edge"> +<title>spi25_statusreg.o->spi.o</title> +<path fill="none" stroke="#000000" d="M1165.3327,-3527.1817C1089.6553,-3483.4893 897.9611,-3372.8146 818.1011,-3326.7074"/> +<polygon fill="#000000" stroke="#000000" points="819.7895,-3323.6408 809.3792,-3321.6718 816.2894,-3329.703 819.7895,-3323.6408"/> +<text text-anchor="middle" x="986.7169" y="-3415.7446" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- spi25_statusreg.o->spi25.o --> +<g id="edge167" class="edge"> +<title>spi25_statusreg.o->spi25.o</title> +<path fill="none" stroke="#000000" d="M1179.3217,-3527.1629C1070.4874,-3423.789 487.2658,-2912.0826 342.932,-2792.9643"/> +<polygon fill="#000000" stroke="#000000" points="344.7864,-2789.9585 334.8362,-2786.3194 340.3453,-2795.3693 344.7864,-2789.9585"/> +<text text-anchor="middle" x="756.1269" y="-3163.8636" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- bitbang_spi.o->libflashrom.o --> +<g id="edge222" class="edge"> +<title>bitbang_spi.o->libflashrom.o</title> +<path fill="none" stroke="#000000" d="M442.6868,-2949.4124C430.4408,-2762.5743 327.699,-1195.0375 312.5107,-963.3091"/> +<polygon fill="#000000" stroke="#000000" points="315.9824,-962.7603 311.8357,-953.0107 308.9974,-963.2182 315.9824,-962.7603"/> +<text text-anchor="middle" x="372.5988" y="-1960.1607" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- bitbang_spi.o->flashrom.o --> +<g id="edge224" class="edge"> +<title>bitbang_spi.o->flashrom.o</title> +<path fill="none" stroke="#000000" d="M480.5632,-2985.6981C679.9407,-3084.0203 1632.3764,-3553.7095 1852.838,-3662.4292"/> +<polygon fill="#000000" stroke="#000000" points="1851.3636,-3665.6045 1861.8803,-3666.8884 1854.4596,-3659.3264 1851.3636,-3665.6045"/> +<text text-anchor="middle" x="1161.7006" y="-3327.8636" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- bitbang_spi.o->spi.o --> +<g id="edge221" class="edge"> +<title>bitbang_spi.o->spi.o</title> +<path fill="none" stroke="#000000" d="M462.0756,-2985.8038C518.5448,-3042.2731 690.9363,-3214.6645 756.5755,-3280.3037"/> +<polygon fill="#000000" stroke="#000000" points="754.4901,-3283.1681 764.0361,-3287.7644 759.4399,-3278.2184 754.4901,-3283.1681"/> +<text text-anchor="middle" x="604.3255" y="-3121.8538" font-family="Times,serif" font-size="14.00" fill="#000000">4</text> +</g> +<!-- bitbang_spi.o->spi25.o --> +<g id="edge223" class="edge"> +<title>bitbang_spi.o->spi25.o</title> +<path fill="none" stroke="#000000" d="M431.8201,-2949.5596C408.2462,-2914.2788 355.9573,-2836.0229 328.4091,-2794.7942"/> +<polygon fill="#000000" stroke="#000000" points="331.2317,-2792.7185 322.7658,-2786.3483 325.4114,-2796.6076 331.2317,-2792.7185"/> +<text text-anchor="middle" x="375.1146" y="-2875.9769" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- amd_imc.o->libflashrom.o --> +<g id="edge73" class="edge"> +<title>amd_imc.o->libflashrom.o</title> +<path fill="none" stroke="#000000" d="M963.4343,-281.9359C869.8864,-375.4838 445.2464,-800.1238 336.2155,-909.1547"/> +<polygon fill="#000000" stroke="#000000" points="333.5158,-906.9047 328.9196,-916.4506 338.4655,-911.8544 333.5158,-906.9047"/> +<text text-anchor="middle" x="644.8249" y="-599.3453" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- amd_imc.o->flashrom.o --> +<g id="edge74" class="edge"> +<title>amd_imc.o->flashrom.o</title> +<path fill="none" stroke="#000000" d="M986.6647,-282.0452C1054.8074,-536.357 1807.4188,-3345.1409 1890.9459,-3656.8683"/> +<polygon fill="#000000" stroke="#000000" points="1887.6637,-3658.1423 1893.6327,-3666.8957 1894.4252,-3656.3305 1887.6637,-3658.1423"/> +<text text-anchor="middle" x="1433.8053" y="-1973.2568" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- amd_imc.o->board_enable.o --> +<g id="edge75" class="edge"> +<title>amd_imc.o->board_enable.o</title> +<path fill="none" stroke="#000000" d="M1027.7615,-248.013C1146.0031,-207.8754 1460.5799,-101.0909 1595.857,-55.1705"/> +<polygon fill="#000000" stroke="#000000" points="1597.326,-58.3681 1605.6702,-51.8394 1595.0759,-51.7396 1597.326,-58.3681"/> +<text text-anchor="middle" x="1306.8093" y="-155.3917" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- layout.o->libflashrom.o --> +<g id="edge134" class="edge"> +<title>layout.o->libflashrom.o</title> +<path fill="none" stroke="#000000" d="M426.5406,-753.5185C399.128,-788.8624 347.0091,-866.6891 323.0099,-907.9394"/> +<polygon fill="#000000" stroke="#000000" points="319.9653,-906.213 318.07,-916.6369 326.0521,-909.67 319.9653,-906.213"/> +<text text-anchor="middle" x="369.7753" y="-819.529" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- ich_descriptors.o->libflashrom.o --> +<g id="edge140" class="edge"> +<title>ich_descriptors.o->libflashrom.o</title> +<path fill="none" stroke="#000000" d="M2745.9584,-279.6997C2385.2937,-370.3243 724.9614,-815.2275 375.3609,-914.9552"/> +<polygon fill="#000000" stroke="#000000" points="374.2961,-911.6193 365.6445,-917.7349 376.2215,-918.3493 374.2961,-911.6193"/> +<text text-anchor="middle" x="1555.6597" y="-586.1274" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- ich_descriptors.o->hwaccess_physmap.o --> +<g id="edge142" class="edge"> +<title>ich_descriptors.o->hwaccess_physmap.o</title> +<path fill="none" stroke="#000000" d="M2838.6642,-281.6444C2904.0562,-331.8215 3088.4127,-473.2832 3163.0026,-530.518"/> +<polygon fill="#000000" stroke="#000000" points="3161.0602,-533.4392 3171.1244,-536.7501 3165.3215,-527.8857 3161.0602,-533.4392"/> +<text text-anchor="middle" x="2995.8334" y="-409.8812" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- ich_descriptors.o->helpers.o --> +<g id="edge139" class="edge"> +<title>ich_descriptors.o->helpers.o</title> +<path fill="none" stroke="#000000" d="M2778.6093,-281.681C2480.977,-428.457 459.5731,-1425.3031 126.9647,-1589.3274"/> +<polygon fill="#000000" stroke="#000000" points="125.0409,-1586.3736 117.6202,-1593.9356 128.137,-1592.6517 125.0409,-1586.3736"/> +<text text-anchor="middle" x="1447.787" y="-939.3042" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- ich_descriptors.o->layout.o --> +<g id="edge141" class="edge"> +<title>ich_descriptors.o->layout.o</title> +<path fill="none" stroke="#000000" d="M2746.1506,-277.372C2392.3023,-347.7568 787.3144,-667.0087 490.9943,-725.9505"/> +<polygon fill="#000000" stroke="#000000" points="490.1345,-722.5528 481.0095,-727.9366 491.5002,-729.4183 490.1345,-722.5528"/> +<text text-anchor="middle" x="1613.5724" y="-505.4612" font-family="Times,serif" font-size="14.00" fill="#000000">3</text> +</g> +<!-- fmap.o->libflashrom.o --> +<g id="edge179" class="edge"> +<title>fmap.o->libflashrom.o</title> +<path fill="none" stroke="#000000" d="M1651.4536,-3650.8838C1549.2846,-3427.2514 466.6873,-1231.7421 325.7064,-961.8771"/> +<polygon fill="#000000" stroke="#000000" points="328.6658,-959.9848 320.9147,-952.7618 322.4697,-963.242 328.6658,-959.9848"/> +<text text-anchor="middle" x="993.58" y="-2310.1805" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- fmap.o->flashrom.o --> +<g id="edge180" class="edge"> +<title>fmap.o->flashrom.o</title> +<path fill="none" stroke="#000000" d="M1691.9237,-3671.3925C1730.4835,-3673.9198 1795.1601,-3678.1589 1841.8773,-3681.2209"/> +<polygon fill="#000000" stroke="#000000" points="1841.9422,-3684.7326 1852.1497,-3681.8942 1842.4001,-3677.7476 1841.9422,-3684.7326"/> +<text text-anchor="middle" x="1761.9005" y="-3680.1067" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- sfdp.o->libflashrom.o --> +<g id="edge91" class="edge"> +<title>sfdp.o->libflashrom.o</title> +<path fill="none" stroke="#000000" d="M205.7555,-2534.9266C216.4386,-2371.9331 295.6765,-1162.9959 308.7992,-962.7827"/> +<polygon fill="#000000" stroke="#000000" points="312.2939,-962.9764 309.4556,-952.7689 305.3089,-962.5185 312.2939,-962.9764"/> +<text text-anchor="middle" x="252.2773" y="-1752.6546" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- sfdp.o->spi.o --> +<g id="edge90" class="edge"> +<title>sfdp.o->spi.o</title> +<path fill="none" stroke="#000000" d="M218.5597,-2571.3408C295.8121,-2672.0182 669.9615,-3159.6192 761.8906,-3279.4235"/> +<polygon fill="#000000" stroke="#000000" points="759.3885,-3281.9122 768.2529,-3287.715 764.942,-3277.6508 759.3885,-3281.9122"/> +<text text-anchor="middle" x="485.2252" y="-2929.1822" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- sfdp.o->spi25.o --> +<g id="edge92" class="edge"> +<title>sfdp.o->spi25.o</title> +<path fill="none" stroke="#000000" d="M213.608,-2571.4406C232.2783,-2609.3002 275.1727,-2696.2814 297.1377,-2740.822"/> +<polygon fill="#000000" stroke="#000000" points="294.0548,-2742.4842 301.6168,-2749.9049 300.333,-2739.3881 294.0548,-2742.4842"/> +<text text-anchor="middle" x="250.3728" y="-2659.9313" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- sfdp.o->helpers.o --> +<g id="edge89" class="edge"> +<title>sfdp.o->helpers.o</title> +<path fill="none" stroke="#000000" d="M202.1452,-2534.7276C186.8053,-2418.2093 103.109,-1782.4731 84.3972,-1640.3428"/> +<polygon fill="#000000" stroke="#000000" points="87.8449,-1639.715 83.0695,-1630.2574 80.9048,-1640.6287 87.8449,-1639.715"/> +<text text-anchor="middle" x="148.2712" y="-2091.3352" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- en29lv640b.o->libflashrom.o --> +<g id="edge93" class="edge"> +<title>en29lv640b.o->libflashrom.o</title> +<path fill="none" stroke="#000000" d="M3325.8193,-2949.4124C3044.2535,-2761.2761 667.5126,-1173.1887 346.4678,-958.6734"/> +<polygon fill="#000000" stroke="#000000" points="348.2522,-955.6563 337.993,-953.0107 344.3632,-961.4766 348.2522,-955.6563"/> +<text text-anchor="middle" x="1831.1436" y="-1957.8429" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- en29lv640b.o->flashrom.o --> +<g id="edge95" class="edge"> +<title>en29lv640b.o->flashrom.o</title> +<path fill="none" stroke="#000000" d="M3316.3667,-2985.6981C3116.9891,-3084.0203 2164.5535,-3553.7095 1944.0919,-3662.4292"/> +<polygon fill="#000000" stroke="#000000" points="1942.4702,-3659.3264 1935.0495,-3666.8884 1945.5663,-3665.6045 1942.4702,-3659.3264"/> +<text text-anchor="middle" x="2625.2293" y="-3327.8636" font-family="Times,serif" font-size="14.00" fill="#000000">4</text> +</g> +<!-- en29lv640b.o->jedec.o --> +<g id="edge94" class="edge"> +<title>en29lv640b.o->jedec.o</title> +<path fill="none" stroke="#000000" d="M3365.1098,-2949.5596C3388.6837,-2914.2788 3440.9726,-2836.0229 3468.5208,-2794.7942"/> +<polygon fill="#000000" stroke="#000000" points="3471.5185,-2796.6076 3474.1641,-2786.3483 3465.6982,-2792.7185 3471.5185,-2796.6076"/> +<text text-anchor="middle" x="3411.8153" y="-2875.9769" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- sst49lfxxxc.o->flashrom.o --> +<g id="edge97" class="edge"> +<title>sst49lfxxxc.o->flashrom.o</title> +<path fill="none" stroke="#000000" d="M3565.4165,-2571.1084C3368.9159,-2702.406 2157.9977,-3511.5156 1934.0617,-3661.1449"/> +<polygon fill="#000000" stroke="#000000" points="1931.99,-3658.3197 1925.6198,-3666.7856 1935.879,-3664.14 1931.99,-3658.3197"/> +<text text-anchor="middle" x="2744.7391" y="-3119.9267" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- sst49lfxxxc.o->82802ab.o --> +<g id="edge96" class="edge"> +<title>sst49lfxxxc.o->82802ab.o</title> +<path fill="none" stroke="#000000" d="M3598.544,-2534.9009C3611.9918,-2495.2849 3643.9893,-2401.0233 3659.9966,-2353.8672"/> +<polygon fill="#000000" stroke="#000000" points="3663.3481,-2354.8824 3663.2483,-2344.288 3656.7196,-2352.6323 3663.3481,-2354.8824"/> +<text text-anchor="middle" x="3624.2703" y="-2448.1841" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- dmi.o->libflashrom.o --> +<g id="edge176" class="edge"> +<title>dmi.o->libflashrom.o</title> +<path fill="none" stroke="#000000" d="M1400.4198,-98.5133C1257.5805,-208.1178 506.8363,-784.184 342.4607,-910.3138"/> +<polygon fill="#000000" stroke="#000000" points="340.0103,-907.7824 334.2074,-916.6468 344.2716,-913.3359 340.0103,-907.7824"/> +<text text-anchor="middle" x="866.4402" y="-508.2136" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- dmi.o->flashrom.o --> +<g id="edge178" class="edge"> +<title>dmi.o->flashrom.o</title> +<path fill="none" stroke="#000000" d="M1426.3137,-98.5852C1460.5407,-358.5647 1852.3814,-3334.8907 1894.756,-3656.7575"/> +<polygon fill="#000000" stroke="#000000" points="1891.2882,-3657.232 1896.0636,-3666.6896 1898.2283,-3656.3183 1891.2882,-3657.232"/> +<text text-anchor="middle" x="1655.5348" y="-1881.4714" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- dmi.o->internal.o --> +<g id="edge177" class="edge"> +<title>dmi.o->internal.o</title> +<path fill="none" stroke="#000000" d="M1452.0187,-94.0069C1673.3174,-192.6726 3135.0379,-798.3409 3433.2362,-915.2656"/> +<polygon fill="#000000" stroke="#000000" points="3432.3552,-918.679 3442.9432,-919.0591 3434.9031,-912.1592 3432.3552,-918.679"/> +<text text-anchor="middle" x="2437.6275" y="-508.4363" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- sst_fwhub.o->libflashrom.o --> +<g id="edge137" class="edge"> +<title>sst_fwhub.o->libflashrom.o</title> +<path fill="none" stroke="#000000" d="M2359.0089,-3604.2217C2189.5262,-3383.3475 533.7882,-1225.5478 330.9662,-961.225"/> +<polygon fill="#000000" stroke="#000000" points="333.4862,-958.7598 324.6218,-952.9569 327.9327,-963.0211 333.4862,-958.7598"/> +<text text-anchor="middle" x="1339.9875" y="-2286.5234" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- sst_fwhub.o->flashrom.o --> +<g id="edge138" class="edge"> +<title>sst_fwhub.o->flashrom.o</title> +<path fill="none" stroke="#000000" d="M2322.217,-3629.1419C2232.7997,-3640.9139 2047.9247,-3665.2531 1954.7492,-3677.5199"/> +<polygon fill="#000000" stroke="#000000" points="1954.1245,-3674.0719 1944.6669,-3678.8473 1955.0382,-3681.012 1954.1245,-3674.0719"/> +<text text-anchor="middle" x="2133.4831" y="-3642.1309" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- edi.o->libflashrom.o --> +<g id="edge145" class="edge"> +<title>edi.o->libflashrom.o</title> +<path fill="none" stroke="#000000" d="M2125.6293,-3651.0594C1976.7643,-3428.2672 507.0229,-1228.6436 328.3892,-961.2994"/> +<polygon fill="#000000" stroke="#000000" points="331.2718,-959.3137 322.8059,-952.9435 325.4515,-963.2027 331.2718,-959.3137"/> +<text text-anchor="middle" x="1222.0093" y="-2309.9794" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- edi.o->flashrom.o --> +<g id="edge146" class="edge"> +<title>edi.o->flashrom.o</title> +<path fill="none" stroke="#000000" d="M2110.3276,-3671.0437C2072.6173,-3673.5153 2003.9054,-3678.019 1954.9596,-3681.227"/> +<polygon fill="#000000" stroke="#000000" points="1954.583,-3677.7441 1944.8334,-3681.8907 1955.0409,-3684.7291 1954.583,-3677.7441"/> +<text text-anchor="middle" x="2027.6436" y="-3679.9354" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- edi.o->spi.o --> +<g id="edge144" class="edge"> +<title>edi.o->spi.o</title> +<path fill="none" stroke="#000000" d="M2110.7044,-3661.9894C1940.2527,-3616.317 1016.4567,-3368.7866 819.337,-3315.9686"/> +<polygon fill="#000000" stroke="#000000" points="820.0276,-3312.5302 809.4625,-3313.3227 818.2158,-3319.2917 820.0276,-3312.5302"/> +<text text-anchor="middle" x="1460.0207" y="-3492.779" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- w39.o->libflashrom.o --> +<g id="edge147" class="edge"> +<title>w39.o->libflashrom.o</title> +<path fill="none" stroke="#000000" d="M3171.2796,-3129.7802C2914.0624,-2932.4105 638.7834,-1186.5275 342.4143,-959.1155"/> +<polygon fill="#000000" stroke="#000000" points="344.2915,-956.1442 334.2272,-952.8333 340.0301,-961.6977 344.2915,-956.1442"/> +<text text-anchor="middle" x="1751.847" y="-2048.2479" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- w39.o->flashrom.o --> +<g id="edge149" class="edge"> +<title>w39.o->flashrom.o</title> +<path fill="none" stroke="#000000" d="M3165.4063,-3160.1456C2998.2814,-3229.371 2170.4077,-3572.2875 1951.5894,-3662.925"/> +<polygon fill="#000000" stroke="#000000" points="1950.1378,-3659.7379 1942.2384,-3666.7983 1952.8166,-3666.205 1950.1378,-3659.7379"/> +<text text-anchor="middle" x="2553.4978" y="-3415.3353" font-family="Times,serif" font-size="14.00" fill="#000000">3</text> +</g> +<!-- w39.o->jedec.o --> +<g id="edge148" class="edge"> +<title>w39.o->jedec.o</title> +<path fill="none" stroke="#000000" d="M3208.7779,-3129.8611C3255.944,-3068.393 3410.3983,-2867.1042 3466.0648,-2794.5582"/> +<polygon fill="#000000" stroke="#000000" points="3469.039,-2796.4316 3472.3499,-2786.3674 3463.4855,-2792.1702 3469.039,-2796.4316"/> +<text text-anchor="middle" x="3332.4214" y="-2951.0096" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- at45db.o->libflashrom.o --> +<g id="edge152" class="edge"> +<title>at45db.o->libflashrom.o</title> +<path fill="none" stroke="#000000" d="M976.9043,-3421.2733C920.5142,-3210.8225 387.8829,-1223.0153 318.1541,-962.784"/> +<polygon fill="#000000" stroke="#000000" points="321.4928,-961.721 315.5238,-952.9677 314.7314,-963.5328 321.4928,-961.721"/> +<text text-anchor="middle" x="642.5292" y="-2195.8286" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- at45db.o->flashrom.o --> +<g id="edge155" class="edge"> +<title>at45db.o->flashrom.o</title> +<path fill="none" stroke="#000000" d="M1022.009,-3450.0842C1168.548,-3489.3492 1673.5667,-3624.6686 1842.7392,-3669.9982"/> +<polygon fill="#000000" stroke="#000000" points="1841.8786,-3673.391 1852.4438,-3672.5986 1843.6904,-3666.6295 1841.8786,-3673.391"/> +<text text-anchor="middle" x="1427.3741" y="-3563.8412" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- at45db.o->spi.o --> +<g id="edge151" class="edge"> +<title>at45db.o->spi.o</title> +<path fill="none" stroke="#000000" d="M954.4234,-3421.0449C918.9217,-3397.3233 856.8511,-3355.8491 817.756,-3329.7266"/> +<polygon fill="#000000" stroke="#000000" points="819.5606,-3326.723 809.3014,-3324.0774 815.6716,-3332.5433 819.5606,-3326.723"/> +<text text-anchor="middle" x="881.0897" y="-3379.1857" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- at45db.o->spi25.o --> +<g id="edge154" class="edge"> +<title>at45db.o->spi25.o</title> +<path fill="none" stroke="#000000" d="M963.4343,-3420.994C869.8864,-3327.4461 445.2464,-2902.806 336.2155,-2793.7752"/> +<polygon fill="#000000" stroke="#000000" points="338.4655,-2791.0755 328.9196,-2786.4792 333.5158,-2796.0252 338.4655,-2791.0755"/> +<text text-anchor="middle" x="644.8249" y="-3111.1846" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- at45db.o->helpers.o --> +<g id="edge150" class="edge"> +<title>at45db.o->helpers.o</title> +<path fill="none" stroke="#000000" d="M972.8145,-3421.2083C886.4541,-3246.0867 199.7033,-1853.4938 94.2538,-1639.6634"/> +<polygon fill="#000000" stroke="#000000" points="97.2385,-1637.8022 89.6765,-1630.3815 90.9604,-1640.8983 97.2385,-1637.8022"/> +<text text-anchor="middle" x="528.5341" y="-2534.2358" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- at45db.o->spi25_statusreg.o --> +<g id="edge153" class="edge"> +<title>at45db.o->spi25_statusreg.o</title> +<path fill="none" stroke="#000000" d="M1018.7088,-3457.5269C1055.2937,-3475.5686 1111.3857,-3503.23 1150.8286,-3522.6811"/> +<polygon fill="#000000" stroke="#000000" points="1149.4585,-3525.9079 1159.9752,-3527.1918 1152.5545,-3519.6298 1149.4585,-3525.9079"/> +<text text-anchor="middle" x="1079.7687" y="-3493.904" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- s25f.o->libflashrom.o --> +<g id="edge188" class="edge"> +<title>s25f.o->libflashrom.o</title> +<path fill="none" stroke="#000000" d="M1416.3764,-3604.2217C1325.0228,-3383.6748 433.7439,-1231.937 322.1031,-962.4123"/> +<polygon fill="#000000" stroke="#000000" points="325.247,-960.8563 318.1865,-952.9569 318.7798,-963.5351 325.247,-960.8563"/> +<text text-anchor="middle" x="864.2397" y="-2287.117" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- s25f.o->flashrom.o --> +<g id="edge190" class="edge"> +<title>s25f.o->flashrom.o</title> +<path fill="none" stroke="#000000" d="M1453.6136,-3626.3641C1531.1981,-3636.5783 1741.0071,-3664.2002 1842.2755,-3677.5324"/> +<polygon fill="#000000" stroke="#000000" points="1841.9441,-3681.0189 1852.3154,-3678.8542 1842.8578,-3674.0788 1841.9441,-3681.0189"/> +<text text-anchor="middle" x="1642.9446" y="-3640.7483" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- s25f.o->spi.o --> +<g id="edge187" class="edge"> +<title>s25f.o->spi.o</title> +<path fill="none" stroke="#000000" d="M1394.27,-3607.8298C1289.035,-3555.9336 933.7069,-3380.7051 818.6221,-3323.9516"/> +<polygon fill="#000000" stroke="#000000" points="820.0134,-3320.7353 809.4966,-3319.4514 816.9173,-3327.0134 820.0134,-3320.7353"/> +<text text-anchor="middle" x="1101.4461" y="-3469.6907" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- s25f.o->spi25_statusreg.o --> +<g id="edge189" class="edge"> +<title>s25f.o->spi25_statusreg.o</title> +<path fill="none" stroke="#000000" d="M1394.2398,-3612.3779C1360.2594,-3600.8431 1303.641,-3581.6237 1259.7311,-3566.7183"/> +<polygon fill="#000000" stroke="#000000" points="1260.5961,-3563.3158 1250.0017,-3563.4156 1258.3459,-3569.9443 1260.5961,-3563.3158"/> +<text text-anchor="middle" x="1321.9854" y="-3593.3481" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- stm50.o->flashrom.o --> +<g id="edge226" class="edge"> +<title>stm50.o->flashrom.o</title> +<path fill="none" stroke="#000000" d="M3695.5166,-2108.9578C3510.2902,-2271.397 2141.1552,-3472.0962 1926.6907,-3660.1766"/> +<polygon fill="#000000" stroke="#000000" points="1924.206,-3657.7003 1918.9953,-3666.9253 1928.8214,-3662.9632 1924.206,-3657.7003"/> +<text text-anchor="middle" x="2806.1037" y="-2888.3672" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- stm50.o->82802ab.o --> +<g id="edge225" class="edge"> +<title>stm50.o->82802ab.o</title> +<path fill="none" stroke="#000000" d="M3712.6506,-2108.8469C3704.5368,-2149.638 3684.7503,-2249.1112 3675.0305,-2297.9763"/> +<polygon fill="#000000" stroke="#000000" points="3671.5803,-2297.3816 3673.062,-2307.8723 3678.4458,-2298.7472 3671.5803,-2297.3816"/> +<text text-anchor="middle" x="3688.8405" y="-2207.2116" font-family="Times,serif" font-size="14.00" fill="#000000">3</text> +</g> +<!-- me_unlock_tool.o --> +<g id="node48" class="node"> +<title>me_unlock_tool.o</title> +<polygon fill="#deb887" stroke="#000000" points="3800.9299,-1869.4649 3662.9299,-1869.4649 3662.9299,-1833.4649 3800.9299,-1833.4649 3800.9299,-1869.4649"/> +<text text-anchor="middle" x="3731.9299" y="-1847.7649" font-family="Times,serif" font-size="14.00" fill="#000000">me_unlock_tool.o</text> +</g> +<!-- me_unlock_tool.o->libflashrom.o --> +<g id="edge215" class="edge"> +<title>me_unlock_tool.o->libflashrom.o</title> +<path fill="none" stroke="#000000" d="M3664.7404,-1833.4616C3228.6904,-1716.6223 804.546,-1067.0748 375.5344,-952.1215"/> +<polygon fill="#000000" stroke="#000000" points="376.3385,-948.7135 365.7733,-949.506 374.5267,-955.475 376.3385,-948.7135"/> +<text text-anchor="middle" x="2015.1374" y="-1396.5915" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- me_unlock_tool.o->flashrom.o --> +<g id="edge219" class="edge"> +<title>me_unlock_tool.o->flashrom.o</title> +<path fill="none" stroke="#000000" d="M3713.7834,-1869.6114C3537.3539,-2046.041 2129.4597,-3453.9351 1923.559,-3659.8358"/> +<polygon fill="#000000" stroke="#000000" points="1921.077,-3657.368 1916.4808,-3666.914 1926.0268,-3662.3178 1921.077,-3657.368"/> +<text text-anchor="middle" x="2813.6712" y="-2768.5236" font-family="Times,serif" font-size="14.00" fill="#000000">2</text> +</g> +<!-- me_unlock_tool.o->board_enable.o --> +<g id="edge220" class="edge"> +<title>me_unlock_tool.o->board_enable.o</title> +<path fill="none" stroke="#000000" d="M3711.0786,-1833.1788C3510.1721,-1656.9886 1920.1185,-262.549 1687.5091,-58.556"/> +<polygon fill="#000000" stroke="#000000" points="1689.6377,-55.7675 1679.8116,-51.8055 1685.0223,-61.0304 1689.6377,-55.7675"/> +<text text-anchor="middle" x="2694.2938" y="-949.6674" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- me_unlock_tool.o->pcidev.o --> +<g id="edge212" class="edge"> +<title>me_unlock_tool.o->pcidev.o</title> +<path fill="none" stroke="#000000" d="M3718.0374,-1833.36C3585.8365,-1661.0724 2551.221,-312.7351 2393.2111,-106.8126"/> +<polygon fill="#000000" stroke="#000000" points="2395.8146,-104.4561 2386.9502,-98.6532 2390.2611,-108.7175 2395.8146,-104.4561"/> +<text text-anchor="middle" x="3050.6243" y="-973.8863" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- me_unlock_tool.o->chipset_enable.o --> +<g id="edge213" class="edge"> +<title>me_unlock_tool.o->chipset_enable.o</title> +<path fill="none" stroke="#000000" d="M3719.7954,-1833.3044C3607.6184,-1665.4196 2752.4761,-385.6087 2617.9027,-184.2054"/> +<polygon fill="#000000" stroke="#000000" points="2620.6796,-182.0615 2612.2137,-175.6913 2614.8593,-185.9505 2620.6796,-182.0615"/> +<text text-anchor="middle" x="3163.8491" y="-1012.5549" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- me_unlock_tool.o->ichspi.o --> +<g id="edge217" class="edge"> +<title>me_unlock_tool.o->ichspi.o</title> +<path fill="none" stroke="#000000" d="M3722.9901,-1833.3369C3647.7072,-1680.6782 3120.1068,-610.8105 3028.2343,-424.5114"/> +<polygon fill="#000000" stroke="#000000" points="3031.2883,-422.7909 3023.7263,-415.3702 3025.0102,-425.887 3031.2883,-422.7909"/> +<text text-anchor="middle" x="3370.6122" y="-1132.7242" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- me_unlock_tool.o->udelay.o --> +<g id="edge216" class="edge"> +<title>me_unlock_tool.o->udelay.o</title> +<path fill="none" stroke="#000000" d="M3728.3397,-1833.4159C3709.4109,-1738.2545 3621.1927,-1294.7513 3597.9764,-1178.0352"/> +<polygon fill="#000000" stroke="#000000" points="3601.3799,-1177.2051 3595.9962,-1168.08 3594.5144,-1178.5707 3601.3799,-1177.2051"/> +<text text-anchor="middle" x="3658.158" y="-1509.5255" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- me_unlock_tool.o->hwaccess_x86_io.o --> +<g id="edge214" class="edge"> +<title>me_unlock_tool.o->hwaccess_x86_io.o</title> +<path fill="none" stroke="#000000" d="M3729.5571,-1833.442C3720.0574,-1761.2842 3684.7241,-1492.901 3673.1516,-1404.9998"/> +<polygon fill="#000000" stroke="#000000" points="3676.6066,-1404.4278 3671.8312,-1394.9702 3669.6665,-1405.3415 3676.6066,-1404.4278"/> +<text text-anchor="middle" x="3696.3544" y="-1623.0209" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- me_unlock_tool.o->processor_enable.o --> +<g id="edge218" class="edge"> +<title>me_unlock_tool.o->processor_enable.o</title> +<path fill="none" stroke="#000000" d="M3730.7251,-1833.0837C3727.9983,-1791.4805 3721.3391,-1689.88 3718.0892,-1640.2963"/> +<polygon fill="#000000" stroke="#000000" points="3721.5784,-1640.0157 3717.4317,-1630.2661 3714.5934,-1640.4736 3721.5784,-1640.0157"/> +<text text-anchor="middle" x="3719.4071" y="-1740.49" font-family="Times,serif" font-size="14.00" fill="#000000">1</text> +</g> +<!-- acpi_ec.o --> +<g id="node49" class="node"> +<title>acpi_ec.o</title> +<polygon fill="#00ff00" stroke="#000000" points="3884.9299,-1869.4649 3803.9299,-1869.4649 3803.9299,-1833.4649 3884.9299,-1833.4649 3884.9299,-1869.4649"/> +<text text-anchor="middle" x="3844.4299" y="-1847.7649" font-family="Times,serif" font-size="14.00" fill="#000000">acpi_ec.o</text> +</g> +<!-- me_unlock_tool.o->acpi_ec.o --> +<g id="edge211" class="edge"> +<title>me_unlock_tool.o->acpi_ec.o</title> +<path fill="none" stroke="#000000" d="M3800.9345,-1851.4649C3801.0595,-1851.4649 3801.1845,-1851.4649 3801.3094,-1851.4649"/> +<polygon fill="#000000" stroke="#000000" points="3793.918,-1854.9653 3803.9179,-1851.4649 3793.9177,-1847.9653 3793.918,-1854.9653"/> +<text text-anchor="middle" x="3798.6219" y="-1840.2649" font-family="Times,serif" font-size="14.00" fill="#000000">4</text> +</g> +</g> +</svg> diff --git a/util/me_unlock_tool/me_unlock_tool.c b/util/me_unlock_tool/me_unlock_tool.c new file mode 100644 index 0000000..85c9987 --- /dev/null +++ b/util/me_unlock_tool/me_unlock_tool.c @@ -0,0 +1,216 @@ +/* + * This file is part of the flashrom project. + * + * Copyright (C) 2021 TUXEDO Computers GmbH + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * 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. + */ + +/* + * Programs ME to unlock its firmware update after a power cycle + */ + +#include <stdbool.h> +#include <stdint.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "acpi_ec.h" +#include "hwaccess_x86_io.h" +#include "programmer.h" + +#define HSFS_FDOPSS_OFF 13 /* 13: Flash Descriptor Override Pin-Strap Status */ +#define HSFS_FDV_OFF 14 /* 14: Flash Descriptor Valid */ + +static int init_stub(void) +{ + return 0; +} + +static const struct programmer_entry programmer_stub = { + .name = "stub", + .type = OTHER, + .devs.note = "Stub that does nothing\n", + .init = &init_stub, + /* These two won't be invoked */ + .map_flash_region = NULL, + .unmap_flash_region = NULL, + .delay = &internal_delay, +}; + +static void usage(char *argv[], const char *error) +{ + fprintf(stderr, "%s\n", error); + printf("usage: '%s'\n", argv[0]); + exit(1); +} + +static int init(void) +{ + int ret; + + /* + * pci_init_common() invokes register_shutdown() which can be used only + * after initializing a programmer. + */ + if (programmer_init(&programmer_stub, /*param=*/NULL)) + return 1; + + /* Initialize PCI access for flash enables */ + if (pci_init_common() != 0) { + msg_perr("PCI initialization failed.\n" + "Aborting.\n"); + goto abort_init; + } + + if (processor_flash_enable()) { + msg_perr("Processor detection/init failed.\n" + "Aborting.\n"); + goto abort_init; + } + + if (rget_io_perms()) + goto abort_init; + + /* Try to enable it. Failure IS an option, since not all motherboards + * really need this to be done, etc., etc. + */ + ret = chipset_flash_enable(); + if (ret == -2) { + msg_perr("WARNING: No chipset found. Flash detection " + "will most likely fail.\n"); + } else if (ret == ERROR_FATAL) { + goto abort_init; + } + + return 0; + +abort_init: + if (programmer_shutdown()) + msg_pwarn("WARNING: Programmer shutdown failed.\n"); + return 1; +} + +static void finish(void) +{ + if (programmer_shutdown()) + msg_pwarn("WARNING: Programmer shutdown failed.\n"); +} + +static bool is_board_supported(void) +{ + const struct board_match *board; + + board = board_match_pci_ids(P3); + if (board == NULL) { + msg_pwarn("Unsupported mainboard.\n"); + return false; + } + + if (strcmp(board->vendor_name, "TUXEDO")) { + msg_perr("ERROR: Unsupported mainboard vendor: %s\n", board->vendor_name); + return false; + } + + if (strcmp(board->board_name, "InfinityBook S 14 Gen6") && + strcmp(board->board_name, "InfinityBook S 15 Gen6")) { + msg_perr("ERROR: Unsupported mainboard model: %s\n", board->board_name); + return false; + } + + return true; +} + +static bool is_me_locked(void) +{ + uint16_t hsfs; + + if (!ich_get_hsfs(&hsfs)) { + /* Couldn't read HSFS, give unlocking a try */ + return true; + } + + if (!(hsfs & (1 << HSFS_FDV_OFF))) { + /* Flash descriptor isn't valid, give unlocking a try */ + return true; + } + + return (hsfs & (1 << HSFS_FDOPSS_OFF)); +} + +static void clevo_unlock_me(void) +{ + uint8_t data1, data2; + + /* Set bit3 of WINF EC RAM (0xda) to assert FDOPPS strap */ + + do { + ec_read_reg(0xda, &data1, 0); + internal_delay(300000); + ec_read_reg(0xda, &data2, 0); + } while (data1 != data2); + + msg_pdbg("Unlocking ME...\n"); + ec_write_reg(0xda, data1 | 8, 0); + + do { + internal_delay(300000); + ec_read_reg(0xda, &data2, 0); + } while (data2 != (data1 | 8)); + + msg_pwarn("ME Unlocked successfully\n" + "The system must be powered off and powered on again for the operation to take effect.\n" + "(Automatic power on will happen in 5 seconds.)\n" + "ME will remain unlocked until next boot.\n"); + + /* Program automatic power on after power off */ + ec_write_cmd(0x97, 0); + ec_write_byte(0, 0); + ec_write_byte(5, 0); /* 5 seconds in S5 state */ +} + +static int log_callback(enum flashrom_log_level level, const char *fmt, va_list ap) +{ + int ret = 0; + + if (level < FLASHROM_MSG_INFO) { + ret = vfprintf(stderr, fmt, ap); + fflush(stderr); + } + + return ret; +} + +int main(int argc, char *argv[]) +{ + flashrom_set_log_callback(&log_callback); + + if (argc > 1) + usage(argv, "No arguments are expected"); + + if (init()) + return 1; + + if (!is_board_supported()) { + finish(); + return 1; + } + + if (is_me_locked()) { + clevo_unlock_me(); + } else { + msg_pwarn("ME is already unlocked\n"); + } + + finish(); + return 0; +} diff --git a/util/me_unlock_tool/meson.build b/util/me_unlock_tool/meson.build new file mode 100644 index 0000000..5585cab --- /dev/null +++ b/util/me_unlock_tool/meson.build @@ -0,0 +1,62 @@ +executable( + 'me_unlock_tool', + sources : [ + 'me_unlock_tool.c', + '../../82802ab.c', + '../../acpi_ec.c', + '../../amd_imc.c', + '../../at45db.c', + '../../bitbang_spi.c', + '../../board_enable.c', + '../../cbtable.c', + '../../chipset_enable.c', + '../../dmi.c', + '../../dummyflasher.c', + '../../edi.c', + '../../en29lv640b.c', + '../../flashchips.c', + '../../flashrom.c', + '../../fmap.c', + '../../helpers.c', + '../../hwaccess_physmap.c', + '../../hwaccess_x86_io.c', + '../../hwaccess_x86_msr.c', + '../../ich_descriptors.c', + '../../ichspi.c', + '../../internal.c', + '../../it87spi.c', + '../../jedec.c', + '../../layout.c', + '../../libflashrom.c', + '../../mcp6x_spi.c', + '../../opaque.c', + '../../pcidev.c', + '../../print.c', + '../../processor_enable.c', + '../../programmer.c', + '../../programmer_table.c', + '../../s25f.c', + '../../sb600spi.c', + '../../sfdp.c', + '../../spi.c', + '../../spi25.c', + '../../spi25_statusreg.c', + '../../spi95.c', + '../../sst28sf040.c', + '../../sst49lfxxxc.c', + '../../sst_fwhub.c', + '../../stm50.c', + '../../udelay.c', + '../../w29ee011.c', + '../../w39.c', + '../../wbsio_spi.c', + ], + dependencies : [ + deps, + ], + include_directories : include_directories('../..'), + c_args : [ + '-DCONFIG_INTERNAL=1', + '-DNEED_PCI=1', + ], +) diff --git a/util/meson.build b/util/meson.build index 24278d7..574addc 100644 --- a/util/meson.build +++ b/util/meson.build @@ -1 +1,2 @@ subdir('ich_descriptors_tool') +subdir('me_unlock_tool')