diff --git a/arch/crd/MC-1.yaml b/arch/crd/MC-1.yaml index e88401064..b6a576993 100644 --- a/arch/crd/MC-1.yaml +++ b/arch/crd/MC-1.yaml @@ -47,7 +47,7 @@ MC-1: parameters: TIME_CSR_IMPLEMENTED: {} # Unconstrained - name: Sm - version: "~> 1.11" + version: "~> 1.11.0" presence: mandatory parameters: MTVEC_BASE_ALIGNMENT_DIRECT: {} # Unconstrained @@ -60,10 +60,6 @@ MC-1: MTVAL_WIDTH: {} # Unconstrained MTVEC_MODES: {} # Unconstrained PHYS_ADDR_WIDTH: {} # Unconstrained - CONFIG_PTR_ADDRESS: - schema: - const: 0xdeadbeef - note: "This parameter and its associated CSR shouldn't be here. See GitHub issue #53." PRECISE_SYNCHRONOUS_EXCEPTIONS: schema: const: true diff --git a/lib/arch_obj_models/crd.rb b/lib/arch_obj_models/crd.rb index 40af40239..0be657a2a 100644 --- a/lib/arch_obj_models/crd.rb +++ b/lib/arch_obj_models/crd.rb @@ -273,6 +273,11 @@ def all_in_scope_ext_params param_db = ext_db.params.find { |p| p.name == param_name } raise "There is no param '#{param_name}' in extension '#{ext_crd["name"]}" if param_db.nil? + next unless ext_db.versions.any? do |ver| + Gem::Requirement.new(ext_crd["version"]).satisfied_by?(Gem::Version.new(ver["version"])) && + param_db.defined_in_extension_version?(ver["version"]) + end + @all_in_scope_ext_params << InScopeExtensionParameter.new(param_db, param_data["schema"], param_data["note"]) end @@ -302,6 +307,11 @@ def in_scope_ext_params(ext_req) ext_param_db = ext_db.params.find { |p| p.name == param_name } raise "There is no param '#{param_name}' in extension '#{ext_crd["name"]}" if ext_param_db.nil? + next unless ext_db.versions.any? do |ver| + Gem::Requirement.new(ext_crd["version"]).satisfied_by?(Gem::Version.new(ver["version"])) && + ext_param_db.defined_in_extension_version?(ver["version"]) + end + ext_params << InScopeExtensionParameter.new(ext_param_db, param_data["schema"], param_data["note"]) end @@ -315,8 +325,15 @@ def all_out_of_scope_params @all_out_of_scope_params = [] in_scope_ext_reqs.each do |ext_req| - @arch_def.extension(ext_req.name).params.each do |param_db| + ext_db = @arch_def.extension(ext_req.name) + ext_db.params.each do |param_db| next if all_in_scope_ext_params.any? { |c| c.param_db.name == param_db.name } + + next unless ext_db.versions.any? do |ver| + Gem::Requirement.new(ext_req.version_requirement).satisfied_by?(Gem::Version.new(ver["version"])) && + param_db.defined_in_extension_version?(ver["version"]) + end + @all_out_of_scope_params << param_db end end diff --git a/lib/arch_obj_models/extension.rb b/lib/arch_obj_models/extension.rb index fc0e053b9..6ad74403d 100644 --- a/lib/arch_obj_models/extension.rb +++ b/lib/arch_obj_models/extension.rb @@ -67,7 +67,7 @@ def initialize(ext, name, data) def defined_in_extension_version?(version) return true if @data.dig("when", "version").nil? - Gem::Requirement.new(@data["when"]["version"]).satisfied_by?(version) + Gem::Requirement.new(@data["when"]["version"]).satisfied_by?(Gem::Version.new(version)) end # @return [String]