X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fsoc%2Fdecoder%2Fpower_enums.py;h=79805527b980a6e43d4ec34f98768bd1a6d7fd89;hb=aeeb3eea30c13aec160a733caa6d5bdf9fcc6c77;hp=cfa0bacb05766fe5f37a3f80ac357d030d0ea302;hpb=474eb33cddcb7453720907732a2b2944681e4e6f;p=soc.git diff --git a/src/soc/decoder/power_enums.py b/src/soc/decoder/power_enums.py index cfa0bacb..79805527 100644 --- a/src/soc/decoder/power_enums.py +++ b/src/soc/decoder/power_enums.py @@ -1,22 +1,22 @@ from enum import Enum, unique import csv import os -import requests +from os.path import dirname, join +from collections import namedtuple +def find_wiki_file(name): + filedir = os.path.dirname(os.path.abspath(__file__)) + basedir = dirname(dirname(dirname(filedir))) + tabledir = join(basedir, 'libreriscv') + tabledir = join(tabledir, 'openpower') + tabledir = join(tabledir, 'isatables') -def download_wiki_file(name): - file_dir = os.path.dirname(os.path.realpath(__file__)) - file_path = os.path.join(file_dir, name) - if not os.path.isfile(file_path): - url = 'https://libre-riscv.org/openpower/isatables/' + name - r = requests.get(url, allow_redirects=True) - with open(file_path, 'w') as outfile: - outfile.write(r.content.decode("utf-8")) + file_path = join(tabledir, name) return file_path def get_csv(name): - file_path = download_wiki_file(name) + file_path = find_wiki_file(name) with open(file_path, 'r') as csvfile: reader = csv.DictReader(csvfile) return list(reader) @@ -29,9 +29,10 @@ single_bit_flags = ['CR in', 'CR out', 'inv A', 'inv out', # default values for fields in the table default_values = {'unit': "NONE", 'internal op': "OP_ILLEGAL", - 'in1': "RA", 'in2': 'NONE', 'in3': 'NONE', 'out': 'NONE', - 'ldst len': 'NONE', - 'rc' : 'NONE', 'cry in' : 'ZERO', 'form': 'NONE'} + 'in1': "RA", 'in2': 'NONE', 'in3': 'NONE', 'out': 'NONE', + 'ldst len': 'NONE', + 'rc': 'NONE', 'cry in': 'ZERO', 'form': 'NONE'} + def get_signal_name(name): if name[0].isdigit(): @@ -217,9 +218,9 @@ class CryIn(Enum): # SPRs - Special-Purpose Registers. See V3.0B Figure 18 p971 and # http://libre-riscv.org/openpower/isatables/sprs.csv -# TODO: make this read the sprs.csv file # http://bugs.libre-riscv.org/show_bug.cgi?id=261 spr_csv = get_csv("sprs.csv") -fields = [(row['SPR'], row['Idx']) for row in spr_csv] +spr_info = namedtuple('spr_info', 'SPR priv_mtspr priv_mfspr len') +fields = [(row['SPR'], int(row['Idx'])) for row in spr_csv] SPR = Enum('SPR', fields)