/* * This file is part of the flashrom project. * * Copyright 2021 Google LLC * * 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; version 2 of the License. * * 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. */ #include "lifecycle.h" #if CONFIG_LINUX_MTD == 1 struct linux_mtd_io_state { char *fopen_path; }; static FILE *linux_mtd_fopen(void *state, const char *pathname, const char *mode) { struct linux_mtd_io_state *io_state = state; io_state->fopen_path = strdup(pathname); return not_null(); } static size_t linux_mtd_fread(void *state, void *buf, size_t size, size_t len, FILE *fp) { struct linux_mtd_fread_mock_entry { const char *path; const char *data; }; const struct linux_mtd_fread_mock_entry fread_mock_map[] = { { "/sys/class/mtd/mtd0//type", "nor" }, { "/sys/class/mtd/mtd0//name", "Device" }, { "/sys/class/mtd/mtd0//flags", "" }, { "/sys/class/mtd/mtd0//size", "1024" }, { "/sys/class/mtd/mtd0//erasesize", "512" }, { "/sys/class/mtd/mtd0//numeraseregions", "0" }, }; struct linux_mtd_io_state *io_state = state; unsigned int i; if (!io_state->fopen_path) return 0; for (i = 0; i < ARRAY_SIZE(fread_mock_map); i++) { const struct linux_mtd_fread_mock_entry *entry = &fread_mock_map[i]; if (!strcmp(io_state->fopen_path, entry->path)) { size_t data_len = min(size * len, strlen(entry->data)); memcpy(buf, entry->data, data_len); return data_len; } } return 0; } static int linux_mtd_fclose(void *state, FILE *fp) { struct linux_mtd_io_state *io_state = state; free(io_state->fopen_path); return 0; } void linux_mtd_probe_lifecycle_test_success(void **state) { struct linux_mtd_io_state linux_mtd_io_state = { NULL }; struct io_mock_fallback_open_state linux_mtd_fallback_open_state = { .noc = 0, .paths = { NULL }, }; const struct io_mock linux_mtd_io = { .state = &linux_mtd_io_state, .fopen = linux_mtd_fopen, .fread = linux_mtd_fread, .fclose = linux_mtd_fclose, .fallback_open_state = &linux_mtd_fallback_open_state, }; run_probe_lifecycle(state, &linux_mtd_io, &programmer_linux_mtd, "", "Opaque flash chip"); } #else SKIP_TEST(linux_mtd_probe_lifecycle_test_success) #endif /* CONFIG_LINUX_MTD */ t.cgi/iCE40/nextpnr/tree/python/dump_design.py?id=4a79e70470987ba54a16ab97eb25d664509550fc'>dump_design.py
blob: 3972f4dcec2fa91d683de53f9e1e5daff631f819 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# Run ./nextpnr-ice40 --json ice40/blinky.json --run python/dump_design.py
for cell, cinfo in sorted(design.cells, key=lambda x: x.first):
    print("Cell {} : {}".format(cell, cinfo.type))
    print("\tPorts:")
    for port, pinfo in sorted(cinfo.ports, key=lambda x: x.first):
        dir = (" <-- ", " --> ", " <-> ")[int(pinfo.type)]
        if pinfo.net is not None:
            print("\t\t{} {} {}".format(port, dir, pinfo.net.name))

    if len(cinfo.attrs) > 0:
        print("\tAttrs:")
        for attr, val in cinfo.attrs:
            print("\t\t{}: {}".format(attr, val))

    if len(cinfo.params) > 0:
        print("\tParams:")
        for param, val in cinfo.params:
            if val.isdigit():
                val = bin(int(val))[2:]
                val = "{}'b{}".format(len(val), val)
            print("\t\t{}: {}".format(param, val))

    if cinfo.bel != -1:
        print("\tBel: {}".format(chip.getBelName(cinfo.bel)))
    print()