RM-autogen-data.py: Use sysfw documentation to generate the data
[glsdk/host-tools.git] / respart / RM-autogen.py
index 00b33347c9ac6a416e77ce6afe9bd5e0ccc1471e..d8d55e5c01070787502e687f0f7c1ec417d39747 100755 (executable)
@@ -13,14 +13,15 @@ import re
 COL_COMMENT = 0
 COL_RES_TYPE = 1
 COL_SUB_TYPE = 2
-COL_RES_FIELD = 3
-COL_RES_START = 6
-COL_HOST_START = 7
+COL_RES_COUNT = 3
+COL_RES_START = 4
+COL_HOST_START = 5
 
 ROW_HOST_ID = 0
-ROW_RES_START = 2
+ROW_RES_START = 1
 
 comments = {}
+resasg = {}
 
 def gen_rmcfg_data(sharing):
        global comments
@@ -30,12 +31,18 @@ def gen_rmcfg_data(sharing):
                comment = sheet.cell_value(res, COL_COMMENT)
                restype = sheet.cell_value(res, COL_RES_TYPE)
                subtype = sheet.cell_value(res, COL_SUB_TYPE)
+               count = sheet.cell_value(res, COL_RES_COUNT)
                start = sheet.cell_value(res, COL_RES_START)
-               if (restype == '' or subtype == '' or start == ''):
+               if (restype == '' or subtype == '' or start == '' or count == ''):
                        continue
                start = int(start)
+               count = int(count)
                comments[(restype, subtype)] = comment
 
+               if (args.allow_all):
+                       rmcfg.append((start, count, restype, subtype, "HOST_ID_ALL"))
+                       continue
+
                for host in range(COL_HOST_START, sheet.ncols):
 
                        #print ("##v(%d, %d) = '%s'" % (res, host, sheet.cell_value(res, host)))
@@ -48,6 +55,13 @@ def gen_rmcfg_data(sharing):
                                continue
                        num = int(num)
 
+                       key = (restype, subtype, host_id)
+                       value = (start, num)
+                       if (key not in resasg):
+                               resasg[key] = [value]
+                       else:
+                               print ("WARNING: Ignoring multiple entries for (%s,%s,%s)" % key)
+                               #resasg[key].append(value)
                        rmcfg.append((start, num, restype, subtype, host_id))
 
                        for pair in sharing:
@@ -57,8 +71,8 @@ def gen_rmcfg_data(sharing):
                                shared_host = pair[1]
                                rmcfg.append((start, num, restype, subtype, shared_host))
 
-
                        start += int(num)
+
        return rmcfg
 
 def print_rmcfg(rmcfg):
@@ -102,25 +116,34 @@ def print_rmcfg(rmcfg):
 parser = argparse.ArgumentParser(prog='RM-autogen.py', formatter_class=argparse.RawTextHelpFormatter,
        description='RM-autogen.py - Auto generate the Resource Management data')
 
-parser.add_argument('-f', '--format', required=True, dest='format',
-       action='store', choices=["boardconfig", "rtos_rmcfg", "jailhouse_cell_config"],
-       help='format to select the output file')
+parser.add_argument('-s', '--soc', required=True, dest='soc',
+       action='store', choices=['j721e', 'am65x'],
+       help='SoC name')
 
 parser.add_argument('-o', '--output', required=True, dest='output',
        action='store',
        help='output file name')
 
-parser.add_argument('-s', '--share', dest='share', default=[],
+parser.add_argument('-f', '--format', required=True, dest='format',
+       action='store', choices=['boardconfig', 'jailhouse_cell_config'],
+       help='format to select the output file')
+
+parser.add_argument('--share', dest='share', default=[],
        action='append', nargs=2, metavar=('HOST_ID_A', 'HOST_ID_B'),
        help='Share resource with HOST_ID_A for HOST_ID_B')
 
+parser.add_argument('--allow_all', dest='allow_all',
+       action='store_true',
+       help='Create the minimal boardconfig to allow all hosts to access all resources')
+
 parser.add_argument('workbook', help='Input excel sheet with assigned resources')
 
 args = parser.parse_args()
 print(args)
 
+soc = __import__(args.soc)
 workbook = xlrd.open_workbook(args.workbook)
-sheet = workbook.sheet_by_index(0)
+sheet = workbook.sheet_by_name(args.soc)
 
 #sheet.nrows = 9
 if (args.format == 'boardconfig'):