[regtool] Fail properly if something goes wrong

Signed-off-by: Rupert Swarbrick <rswarbrick@lowrisc.org>
diff --git a/util/reggen/gen_cheader.py b/util/reggen/gen_cheader.py
index ffdc64b..87b2d8c 100644
--- a/util/reggen/gen_cheader.py
+++ b/util/reggen/gen_cheader.py
@@ -379,7 +379,7 @@
 
     genout(outfile, '// End generated register defines for ' + component)
 
-    return
+    return 0
 
 
 def test_gen_define():
diff --git a/util/reggen/gen_dv.py b/util/reggen/gen_dv.py
index de74c0c..c44559f 100644
--- a/util/reggen/gen_dv.py
+++ b/util/reggen/gen_dv.py
@@ -60,9 +60,11 @@
                                       SwWrAccess=SwWrAccess)
     except:  # noqa: E722
         log.error(exceptions.text_error_template().render())
-        sys.exit(1)
+        return 1
 
     # Dump to output file
     dest_path = '{}/{}_ral_pkg.sv'.format(outdir, block.name)
     with open(dest_path, 'w') as fout:
         fout.write(to_write)
+
+    return 0
diff --git a/util/reggen/gen_fpv.py b/util/reggen/gen_fpv.py
index ee43ced..d29c562 100644
--- a/util/reggen/gen_fpv.py
+++ b/util/reggen/gen_fpv.py
@@ -13,7 +13,6 @@
 from pkg_resources import resource_filename
 
 from .access import HwAccess, SwRdAccess, SwWrAccess
-from .data import *
 from .gen_rtl import json_to_reg
 
 
@@ -46,5 +45,8 @@
                                    HwAccess=HwAccess,
                                    SwRdAccess=SwRdAccess,
                                    SwWrAccess=SwWrAccess))
-        except:
+        except:  # noqa: 722
             log.error(exceptions.text_error_template().render())
+            return 1
+
+    return 0
diff --git a/util/reggen/gen_html.py b/util/reggen/gen_html.py
index 5515255..0a53f1d 100644
--- a/util/reggen/gen_html.py
+++ b/util/reggen/gen_html.py
@@ -296,4 +296,4 @@
                             toclist, toclevel)
             continue
 
-    return
+    return 0
diff --git a/util/reggen/gen_json.py b/util/reggen/gen_json.py
index 86eb217..c593cc1 100644
--- a/util/reggen/gen_json.py
+++ b/util/reggen/gen_json.py
@@ -30,3 +30,5 @@
                    use_decimal=True)
     else:
         raise ValueError('Invalid JSON format ' + format)
+
+    return 0
diff --git a/util/reggen/gen_rtl.py b/util/reggen/gen_rtl.py
index 06faa49..ea546fc 100644
--- a/util/reggen/gen_rtl.py
+++ b/util/reggen/gen_rtl.py
@@ -180,8 +180,9 @@
                                    HwAccess=HwAccess,
                                    SwRdAccess=SwRdAccess,
                                    SwWrAccess=SwWrAccess))
-        except:  # noqa: F722 for template Exception handling
+        except:  # noqa F722 for template Exception handling
             log.error(exceptions.text_error_template().render())
+            return 1
 
     # Generate top.sv
     with open(outdir + "/" + block.name + "_reg_top.sv", 'w',
@@ -192,5 +193,8 @@
                                    HwAccess=HwAccess,
                                    SwRdAccess=SwRdAccess,
                                    SwWrAccess=SwWrAccess))
-        except:  # noqa: F722 for template Exception handling
+        except:  # noqa F722 for template Exception handling
             log.error(exceptions.text_error_template().render())
+            return 1
+
+    return 0
diff --git a/util/regtool.py b/util/regtool.py
index fc1c59c..7effbf0 100755
--- a/util/regtool.py
+++ b/util/regtool.py
@@ -192,14 +192,11 @@
             validate.validate(obj, params=params)
 
         if format == 'rtl':
-            gen_rtl.gen_rtl(obj, outdir)
-            return 0
+            return gen_rtl.gen_rtl(obj, outdir)
         if format == 'dv':
-            gen_dv.gen_dv(obj, args.dv_base_prefix, outdir)
-            return 0
+            return gen_dv.gen_dv(obj, args.dv_base_prefix, outdir)
         if format == 'fpv':
-            gen_fpv.gen_fpv(obj, outdir)
-            return 0
+            return gen_fpv.gen_fpv(obj, outdir)
         src_lic = None
         src_copy = ''
         found_spdx = None
@@ -224,16 +221,16 @@
 
         with outfile:
             if format == 'html':
-                gen_html.gen_html(obj, outfile)
+                return gen_html.gen_html(obj, outfile)
             elif format == 'cdh':
-                gen_cheader.gen_cdefines(obj, outfile, src_lic, src_copy)
+                return gen_cheader.gen_cdefines(obj, outfile, src_lic, src_copy)
             elif format == 'cth':
-                gen_ctheader.gen_cdefines(obj, outfile, src_lic, src_copy)
+                return gen_ctheader.gen_cdefines(obj, outfile, src_lic, src_copy)
             else:
-                gen_json.gen_json(obj, outfile, format)
+                return gen_json.gen_json(obj, outfile, format)
 
             outfile.write('\n')
 
 
 if __name__ == '__main__':
-    main()
+    sys.exit(main())