From 1fc987134676168d604dbeb831f5201093a3dc45 Mon Sep 17 00:00:00 2001 From: Clifford Wolf Date: Tue, 17 Oct 2017 13:20:40 +0200 Subject: [PATCH] Finish tilegrid fuzzer Signed-off-by: Clifford Wolf Signed-off-by: Tim 'mithro' Ansell --- fuzzers/005-tilegrid/.gitignore | 2 +- fuzzers/005-tilegrid/Makefile | 14 ++--- fuzzers/005-tilegrid/generate.py | 101 +++++++++++++++++++++++++++++-- fuzzers/005-tilegrid/generate.sh | 2 +- 4 files changed, 106 insertions(+), 13 deletions(-) diff --git a/fuzzers/005-tilegrid/.gitignore b/fuzzers/005-tilegrid/.gitignore index 47f246a6..96a8fae1 100644 --- a/fuzzers/005-tilegrid/.gitignore +++ b/fuzzers/005-tilegrid/.gitignore @@ -1,2 +1,2 @@ /specimen_[0-9][0-9][0-9]/ -/database.txt +/tilegrid.json diff --git a/fuzzers/005-tilegrid/Makefile b/fuzzers/005-tilegrid/Makefile index f237be0b..404abae9 100644 --- a/fuzzers/005-tilegrid/Makefile +++ b/fuzzers/005-tilegrid/Makefile @@ -3,18 +3,18 @@ N := 1 SPECIMENS := $(addprefix specimen_,$(shell seq -f '%03.0f' $(N))) SPECIMENS_OK := $(addsuffix /OK,$(SPECIMENS)) -database.txt: $(SPECIMENS_OK) - : ../../tools/segmatch -o database.txt \ - $(addsuffix /segdata_0.txt,$(SPECIMENS)) \ - $(addsuffix /segdata_1.txt,$(SPECIMENS)) \ - $(addsuffix /segdata_2.txt,$(SPECIMENS)) +database: $(SPECIMENS_OK) + cp specimen_001/tilegrid.json tilegrid.json + +pushdb: + cp tilegrid.json ../../database/$(XRAY_DATABASE)/tilegrid.json $(SPECIMENS_OK): bash generate.sh $(subst /OK,,$@) touch $@ clean: - rm -rf $(SPECIMENS) + rm -rf $(SPECIMENS) tilegrid.json -.PHONY: clean +.PHONY: database pushdb clean diff --git a/fuzzers/005-tilegrid/generate.py b/fuzzers/005-tilegrid/generate.py index e82fc7b2..3b3a04bf 100644 --- a/fuzzers/005-tilegrid/generate.py +++ b/fuzzers/005-tilegrid/generate.py @@ -2,7 +2,9 @@ import os, sys, json, re -database = dict() + +####################################### +# Read tiles = list() site_baseaddr = dict() @@ -18,7 +20,98 @@ for arg in sys.argv[1:]: frame = int(line[5:5+8], 16) site_baseaddr[site] = "0x%08x" % (frame & ~0x7f) -# print(json.dumps(database, sort_keys=True, indent="\t")) -# print(json.dumps(tiles, sort_keys=True, indent="\t")) -print(json.dumps(site_baseaddr, sort_keys=True, indent="\t")) + +####################################### +# Create initial database + +database = dict() +database["tiles"] = dict() +database["segments"] = dict() +tiles_by_grid = dict() + +for record in tiles: + tile_type, tile_name, grid_x, grid_y = record[0:4] + grid_x, grid_y = int(grid_x), int(grid_y) + tiles_by_grid[(grid_x, grid_y)] = tile_name + framebaseaddr = None + + database["tiles"][tile_name] = { + "type": tile_type, + "grid_x": grid_x, + "grid_y": grid_y + } + + if len(record) > 4: + database["tiles"][tile_name]["sites"] = dict() + for i in range(4, len(record), 2): + site_type, site_name = record[i:i+2] + if site_name in site_baseaddr: + framebaseaddr = site_baseaddr[site_name] + database["tiles"][tile_name]["sites"][site_name] = site_type + + if tile_type in ["CLBLL_L", "CLBLL_R", "CLBLM_L", "CLBLM_R"]: + segment_name = "SEG_" + tile_name + database["segments"][segment_name] = dict() + database["segments"][segment_name]["tiles"] = [tile_name] + if framebaseaddr is not None: + database["segments"][segment_name]["baseaddr"] = [framebaseaddr, 0] + database["tiles"][tile_name]["segment"] = segment_name + + +####################################### +# Pupulate segment base addresses + +start_segments = list() + +for segment_name in database["segments"].keys(): + if "baseaddr" in database["segments"][segment_name]: + start_segments.append(segment_name) + +for segment_name in start_segments: + framebase, wordbase = database["segments"][segment_name]["baseaddr"] + clbtile = [tile for tile in database["segments"][segment_name]["tiles"] if tile.startswith("CLBL")][0] + grid_x = database["tiles"][clbtile]["grid_x"] + grid_y = database["tiles"][clbtile]["grid_y"] + + for i in range(49): + while True: + grid_y -= 1 + clbtile = tiles_by_grid[(grid_x, grid_y)] + if clbtile.startswith("CLBL"): break + + wordbase += 2 + if wordbase == 50: wordbase += 1 + + segname = database["tiles"][clbtile]["segment"] + database["segments"][segname]["baseaddr"] = [framebase, wordbase] + + +####################################### +# Add INT tiles to segments + +for segment_name in database["segments"].keys(): + for clbtile in database["segments"][segment_name]["tiles"]: + if not clbtile.startswith("CLBL"): + continue + + grid_x = database["tiles"][clbtile]["grid_x"] + grid_y = database["tiles"][clbtile]["grid_y"] + + if database["tiles"][clbtile]["type"] in ["CLBLL_L", "CLBLM_L"]: + grid_x += 1 + else: + grid_x -= 1 + + inttile = tiles_by_grid[(grid_x, grid_y)] + assert inttile.startswith("INT_") + + database["tiles"][inttile]["segment"] = segment_name + s = set(database["segments"][segment_name]["tiles"] + [inttile]) + database["segments"][segment_name]["tiles"] = list(sorted(s)) + + +####################################### +# Write + +print(json.dumps(database, sort_keys=True, indent="\t")) diff --git a/fuzzers/005-tilegrid/generate.sh b/fuzzers/005-tilegrid/generate.sh index 46628e4e..91b61514 100644 --- a/fuzzers/005-tilegrid/generate.sh +++ b/fuzzers/005-tilegrid/generate.sh @@ -18,5 +18,5 @@ for x in design_*.bits; do diff -u design.bits $x | grep '^[-+]bit' > ${x%.bits}.delta done -python3 ../generate.py design_*.delta +python3 ../generate.py design_*.delta > tilegrid.json