blob: 44e76418b535bb3866cf40fdeeebb763a70a6bd4 [file] [log] [blame]
{
"license": {
"copyright": "Copyright (c) 2010-2025 Arm Limited or its affiliates. All rights reserved.",
"info": "This document is Non-confidential and licensed under the BSD 3-clause license."
},
"info": [
[
"The RegisterBlock class captures all the information about an MMIO",
"register block for an architecture specification or peripheral IP."
],
[
"It is a contiguous range of the address map of length **size**, where only the",
"least-significant bits affect the decoding of addresses inside it."
],
[
"Accesses inside the address range of the RegisterBlock that do not",
"resolve to a register behave as specified in the **default_access**",
"field."
]
],
"examples": [
{
"_type": "RegisterBlock",
"name": "RB",
"size": "64000",
"default_access": {
"_type": "Accessors.Permission.AccessTypes.Memory.ReadWriteAccess",
"read": "RAZ",
"write": "WI"
},
"accessors": [
{
"_type": "Accessors.BlockAccess",
"condition": {
"_type": "AST.Function",
"arguments": [
{
"_type": "AST.Identifier",
"value": "S"
}
],
"name": "IsFeatureImplemented"
},
"references": {
"_type": "AST.Identifier",
"value": "S"
},
"offset": [
{
"_type": "AST.Integer",
"value": 0
}
],
"access": {
"_type": "Accessors.Permission.MemoryAccess",
"access": {
"_type": "Accessors.Permission.AccessTypes.Memory.ReadWriteAccess",
"read": "R",
"write": "W"
}
}
},
{
"_type": "Accessors.BlockAccess",
"references": {
"_type": "AST.Identifier",
"value": "NS"
},
"offset": [
{
"_type": "AST.Integer",
"value": 32000
}
],
"access": {
"_type": "Accessors.Permission.MemoryAccess",
"access": {
"_type": "Accessors.Permission.AccessTypes.Memory.ReadWriteAccess",
"read": "R",
"write": "W"
}
}
}
],
"mapset": [
{
"_type": "Mapping.Map",
"maps": [
{
"_type": "AST.Identifier",
"value": "REG_S"
},
{
"_type": "AST.SquareOp",
"arguments": [
{
"_type": "AST.Slice",
"left": {
"_type": "AST.Integer",
"value": 31
},
"right": {
"_type": "AST.Integer",
"value": 0
}
}
],
"var": {
"_type": "Types.RegisterType",
"value": {
"instance": null,
"name": "REG",
"slices": null,
"state": "AArch64"
}
}
}
]
}
],
"blocks": [
{
"_type": "RegisterBlock",
"condition": {
"_type": "AST.Function",
"arguments": [
{
"_type": "AST.Identifier",
"value": "S"
}
],
"name": "IsFeatureImplemented"
},
"size": "32000",
"name": "S",
"default_access": "RAZ/WI",
"accessors": [
{
"_type": "Accessors.ReadOffsetAccessor",
"offset": [
{
"_type": "AST.Integer",
"value": 0
}
],
"access": {
"_type": "Accessors.Permission.SystemAccess",
"access": {
"_type": "AST.Return",
"val": {
"_type": "AST.Identifier",
"value": "REG_S"
}
}
}
},
{
"_type": "Accessors.WriteOffsetAccessor",
"offset": [
{
"_type": "AST.Integer",
"value": 0
}
],
"access": {
"_type": "Accessors.Permission.SystemAccess",
"access": {
"_type": "AST.Assignment",
"val": {
"_type": "AST.Identifier",
"value": "value"
},
"var": {
"_type": "AST.Identifier",
"value": "REG_S"
}
}
}
}
]
},
{
"_type": "RegisterBlock",
"size": "32000",
"name": "NS",
"default_access": "RAZ/WI",
"accessors": [
{
"_type": "Accessors.ReadOffsetAccessor",
"offset": [
{
"_type": "AST.Integer",
"value": 0
}
],
"access": {
"_type": "Accessors.Permission.SystemAccess",
"access": {
"_type": "AST.Return",
"val": {
"_type": "AST.Identifier",
"value": "REG_NS"
}
}
}
}
]
},
{
"_type": "Register",
"purpose": "Being an example",
"name": "REG",
"state": null,
"instances": {
"_type": "Instances.Instanceset",
"values": [
{
"_type": "Instances.Instance",
"instance": "REG_NS"
},
{
"_type": "Instances.Instance",
"condition": {
"_type": "AST.Function",
"arguments": [
{
"_type": "AST.Identifier",
"value": "S"
}
],
"name": "IsFeatureImplemented"
},
"instance": "REG_S"
}
]
},
"fieldsets": [
{
"_type": "Fieldset",
"width": 32,
"values": [
{
"_type": "Fields.Field",
"name": "F1",
"rangeset": [
{
"_type": "Range",
"start": 0,
"width": 32
}
]
}
]
}
]
}
]
}
],
"properties": {
"_meta": {
"$ref": "Meta.json"
},
"_type": {
"enum": [
"RegisterBlock"
]
},
"accessors": {
"info": [
"Defines the access behaviors for each of the Registers and RegisterBlocks present in the `blocks` property.",
"Note that the contents of `blocks` should not contain any register accessors. It can, however, contain field level access information."
],
"items": {
"oneOf": [
{
"$ref": "Accessors/BlockAccess.json"
},
{
"$ref": "Accessors/WriteOffsetAccessor.json"
},
{
"$ref": "Accessors/ReadOffsetAccessor.json"
},
{
"$ref": "Accessors/SystemAccessor.json"
},
{
"$ref": "Accessors/ImplementationDefinedOffsetAccessor.json"
},
{
"$ref": "Accessors/BlockAccessArray.json"
},
{
"$ref": "Accessors/WriteOffsetAccessorArray.json"
},
{
"$ref": "Accessors/ReadOffsetAccessorArray.json"
},
{
"$ref": "Accessors/SystemAccessorArray.json"
},
{
"$ref": "Accessors/ImplementationDefinedOffsetAccessorArray.json"
},
{
"$ref": "Accessors/Getter.json"
},
{
"$ref": "Accessors/Setter.json"
},
{
"$ref": "Accessors/WriteFunction.json"
},
{
"$ref": "Accessors/ReadFunction.json"
}
]
},
"type": "array"
},
"blocks": {
"info": [
"Array of all the Registers and RegisterBlocks in this RegisterBlock.",
"All the names within `blocks` must be unique. For example:",
"BLK0.BLK1 and BLK1.BLK1 would be valid as BLK1 does not appear twice in BLK0's context, but BLK0.BLK1 and BLK0.BLK1 would be invalid."
],
"type": "array",
"additionalItems": false,
"items": {
"anyOf": [
{
"$ref": "Register.json"
},
{
"$ref": "RegisterArray.json"
},
{
"$ref": "#"
}
]
}
},
"default_access": {
"info": [
[
"Behaviour of accesses that are inside the register block, but",
"do not resolve to a register."
]
],
"oneOf": [
{
"$ref": "Accessors/Permission/AccessTypes/Memory/ReadWriteAccess.json"
},
{
"$ref": "Accessors/Permission/AccessTypes/Memory/ImplementationDefined.json"
}
]
},
"name": {
"info": [
"The canonical name of the register block. Should be globally unique."
],
"type": "string"
},
"purpose": {
"$ref": "Text.json",
"info": [
"A short human-readable description of purpose of this register block."
]
},
"size": {
"info": [
"Size of the address space in bytes as a hex string or equation.",
"Example strings are: `0x0F`, `0x0F + (4 * n)` or `GIC + 0xFF`."
],
"type": "string"
},
"title": {
"info": [
"The display name of the register block."
],
"type": [
"string",
"null"
]
},
"condition": {
"$ref": "Traits/HasCondition.json#/definitions/condition",
"info": [
"The condition that must be true for this registerblock to be present.",
[
"Certain registerblocks are only present based on the value of this property",
"being evaluated to true. If the value is evaluated false see the `default_access` property."
]
]
},
"mapset": {
"info": [
"Architecturally registers may be mapped to other registers or register blocks. `mapset` provides an array of unique mappings for this `RegisterBlock`.",
"Only `RegisterBlockMapping` is allowed in this Mapset."
],
"$ref": "Mapset.json"
},
"references": {
"info": [
"A mapping between aliases and the Registers they are referring to. Mostly used for keeping track of expanded RegisterArrays by their array name."
],
"examples": [
{
"REGA1_EL1": {
"_type": "References.References",
"indexes": {
"0": {
"_type": "References.Reference",
"ref": "REGA10_EL1"
},
"3": {
"_type": "References.Reference",
"ref": "REGA13_EL1"
}
}
},
"REG_EL1": {
"_type": "References.Reference",
"ref": "EL1REG"
}
}
],
"type": "object",
"propertyNames": {
"$ref": "Types/Variable.json#/definitions/name_part_regex"
},
"patternProperties": {
".+": {
"oneOf": [
{
"$ref": "References/References.json"
},
{
"$ref": "References/Reference.json"
}
]
}
}
}
},
"required": [
"name",
"size",
"default_access"
],
"title": "RegisterBlock",
"type": "object",
"$schema": "http://json-schema.org/draft-04/schema#",
"additionalProperties": false
}