Only use this if you are a driver developer.  This should *not*
          be enabled for production kernels.  If unsure, say N.
 
+config DRM_MSM_VALIDATE_XML
+       bool "Validate XML register files against schema"
+       depends on DRM_MSM && EXPERT
+       depends on $(success,$(PYTHON3) -c "import lxml")
+       help
+         Validate XML files with register definitions against rules-fd schema.
+         This option is mostly targeting DRM MSM developers. If unsure, say N.
+
 config DRM_MSM_MDSS
        bool
        depends on DRM_MSM
 
 
 obj-$(CONFIG_DRM_MSM)  += msm.o
 
+ifeq (y,$(CONFIG_DRM_MSM_VALIDATE_XML))
+       headergen-opts += --validate
+else
+       headergen-opts += --no-validate
+endif
+
 quiet_cmd_headergen = GENHDR  $@
-      cmd_headergen = mkdir -p $(obj)/generated && $(PYTHON3) $(srctree)/$(src)/registers/gen_header.py --rnn $(srctree)/$(src)/registers --xml $< c-defines > $@
+      cmd_headergen = mkdir -p $(obj)/generated && $(PYTHON3) $(srctree)/$(src)/registers/gen_header.py \
+                     $(headergen-opts) --rnn $(srctree)/$(src)/registers --xml $< c-defines > $@
 
 $(obj)/generated/%.xml.h: $(src)/registers/adreno/%.xml \
                $(src)/registers/adreno/adreno_common.xml \
 
                self.variants.add(reg.domain)
 
        def do_validate(self, schemafile):
+               if self.validate == False:
+                       return
+
                try:
                        from lxml import etree
 
                        if not xmlschema.validate(xml_doc):
                                error_str = str(xmlschema.error_log.filter_from_errors()[0])
                                raise self.error("Schema validation failed for: " + filename + "\n" + error_str)
-               except ImportError:
+               except ImportError as e:
+                       if self.validate:
+                               raise e
+
                        print("lxml not found, skipping validation", file=sys.stderr)
 
        def do_parse(self, filename):
                self.stack.pop()
                file.close()
 
-       def parse(self, rnn_path, filename):
+       def parse(self, rnn_path, filename, validate):
                self.path = rnn_path
                self.stack = []
+               self.validate = validate
                self.do_parse(filename)
 
        def parse_reg(self, attrs, bit_size):
        p = Parser()
 
        try:
-               p.parse(args.rnn, args.xml)
+               p.parse(args.rnn, args.xml, args.validate)
        except Error as e:
                print(e, file=sys.stderr)
                exit(1)
        parser = argparse.ArgumentParser()
        parser.add_argument('--rnn', type=str, required=True)
        parser.add_argument('--xml', type=str, required=True)
+       parser.add_argument('--validate', action=argparse.BooleanOptionalAction)
 
        subparsers = parser.add_subparsers()
        subparsers.required = True