Fix minor errors in spec, add JSON specification.
diff --git a/specification/json/sections/cper-arm-processor.json b/specification/json/sections/cper-arm-processor.json
new file mode 100644
index 0000000..55b1dbc
--- /dev/null
+++ b/specification/json/sections/cper-arm-processor.json
@@ -0,0 +1,523 @@
+{
+ "$id": "cper-json-arm-processor-section",
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "type": "object",
+ "required": ["validationBits", "errorInfoNum", "contextInfoNum", "sectionLength", "errorAffinity", "mpidrEl1", "midrEl1", "running", "errorInfo", "contextInfo"],
+ "additionalProperties": false,
+ "properties": {
+ "validationBits": {
+ "type": "object",
+ "required": ["mpidrValid", "errorAffinityLevelValid", "runningStateValid", "vendorSpecificInfoValid"],
+ "properties": {
+ "mpidrValid": {
+ "type": "boolean"
+ },
+ "errorAffinityLevelValid": {
+ "type": "boolean"
+ },
+ "runningStateValid": {
+ "type": "boolean"
+ },
+ "vendorSpecificInfoValid": {
+ "type": "boolean"
+ }
+ }
+ },
+ "errorInfoNum": {
+ "type": "integer"
+ },
+ "contextInfoNum": {
+ "type": "integer"
+ },
+ "sectionLength": {
+ "type": "integer"
+ },
+ "errorAffinity": {
+ "type": "object",
+ "required": ["value", "type"],
+ "properties": {
+ "value": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ }
+ }
+ },
+ "mpidrEl1": {
+ "type": "integer"
+ },
+ "midrEl1": {
+ "type": "integer"
+ },
+ "running": {
+ "type": "boolean"
+ },
+ "psciState": {
+ "type": "integer"
+ },
+ "errorInfo": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": ["version", "length", "validationBits", "errorType", "multipleError", "flags", "errorInformation", "virtualFaultAddress", "physicalFaultAddress"],
+ "additionalProperties": false,
+ "properties": {
+ "version": {
+ "type": "integer"
+ },
+ "length": {
+ "type": "integer"
+ },
+ "validationBits": {
+ "type": "object",
+ "required": ["multipleErrorValid", "flagsValid", "errorInformationValid", "virtualFaultAddressValid", "physicalFaultAddressValid"],
+ "properties": {
+ "multipleErrorValid": {
+ "type": "boolean"
+ },
+ "flagsValid": {
+ "type": "boolean"
+ },
+ "errorInformationValid": {
+ "type": "boolean"
+ },
+ "virtualFaultAddressValid": {
+ "type": "boolean"
+ },
+ "physicalFaultAddressValid": {
+ "type": "boolean"
+ }
+ }
+ },
+ "errorType": {
+ "type": "object",
+ "$ref": "../common/cper-json-nvp.json"
+ },
+ "multipleError": {
+ "type": "object",
+ "$ref": "../common/cper-json-nvp.json"
+ },
+ "flags": {
+ "type": "object",
+ "required": ["firstErrorCaptured", "lastErrorCaptured", "propagated", "overflow"],
+ "properties": {
+ "firstErrorCaptured": {
+ "type": "boolean"
+ },
+ "lastErrorCaptured": {
+ "type": "boolean"
+ },
+ "propagated": {
+ "type": "boolean"
+ },
+ "overflow": {
+ "type": "boolean"
+ }
+ }
+ },
+ "errorInformation": {
+ "type": "object",
+ "oneOf": [
+ {
+ "type": "object",
+ "required": ["validationBits", "transactionType", "operation", "level", "processorContextCorrupt", "corrected", "precisePC", "restartablePC"],
+ "additionalProperties": false,
+ "properties": {
+ "validationBits": {
+ "type": "object",
+ "required": ["transactionTypeValid", "operationValid", "levelValid", "processorContextCorruptValid", "correctedValid", "precisePCValid", "restartablePCValid"],
+ "properties": {
+ "transactionTypeValid": {
+ "type": "boolean"
+ },
+ "operationValid": {
+ "type": "boolean"
+ },
+ "levelValid": {
+ "type": "boolean"
+ },
+ "processorContextCorruptValid": {
+ "type": "boolean"
+ },
+ "correctedValid": {
+ "type": "boolean"
+ },
+ "precisePCValid": {
+ "type": "boolean"
+ },
+ "restartablePCValid": {
+ "type": "boolean"
+ }
+ }
+ },
+ "transactionType": {
+ "type": "object",
+ "$ref": "../common/cper-json-nvp.json"
+ },
+ "operation": {
+ "type": "object",
+ "$ref": "../common/cper-json-nvp.json"
+ },
+ "level": {
+ "type": "integer"
+ },
+ "processorContextCorrupt": {
+ "type": "boolean"
+ },
+ "corrected": {
+ "type": "boolean"
+ },
+ "precisePC": {
+ "type": "boolean"
+ },
+ "restartablePC": {
+ "type": "boolean"
+ }
+ }
+ },
+ {
+ "type": "object",
+ "required": ["validationBits", "transactionType", "operation", "level", "processorContextCorrupt", "corrected", "precisePC", "restartablePC", "timedOut", "participationType", "addressSpace", "memoryAttributes", "accessMode"],
+ "additionalProperties": false,
+ "properties": {
+ "validationBits": {
+ "type": "object",
+ "required": ["transactionTypeValid", "operationValid", "levelValid", "processorContextCorruptValid", "correctedValid", "precisePCValid", "restartablePCValid", "participationTypeValid", "timedOutValid", "addressSpaceValid", "memoryAttributesValid", "accessModeValid"],
+ "properties": {
+ "transactionTypeValid": {
+ "type": "boolean"
+ },
+ "operationValid": {
+ "type": "boolean"
+ },
+ "levelValid": {
+ "type": "boolean"
+ },
+ "processorContextCorruptValid": {
+ "type": "boolean"
+ },
+ "correctedValid": {
+ "type": "boolean"
+ },
+ "precisePCValid": {
+ "type": "boolean"
+ },
+ "restartablePCValid": {
+ "type": "boolean"
+ },
+ "participationTypeValid": {
+ "type": "boolean"
+ },
+ "timedOutValid": {
+ "type": "boolean"
+ },
+ "addressSpaceValid": {
+ "type": "boolean"
+ },
+ "memoryAttributesValid": {
+ "type": "boolean"
+ },
+ "accessModeValid": {
+ "type": "boolean"
+ }
+ }
+ },
+ "transactionType": {
+ "type": "object",
+ "$ref": "../common/cper-json-nvp.json"
+ },
+ "operation": {
+ "type": "object",
+ "$ref": "../common/cper-json-nvp.json"
+ },
+ "level": {
+ "type": "integer"
+ },
+ "processorContextCorrupt": {
+ "type": "boolean"
+ },
+ "corrected": {
+ "type": "boolean"
+ },
+ "precisePC": {
+ "type": "boolean"
+ },
+ "restartablePC": {
+ "type": "boolean"
+ },
+ "timedOut": {
+ "type": "boolean"
+ },
+ "participationType": {
+ "type": "object",
+ "$ref": "../common/cper-json-nvp.json"
+ },
+ "addressSpace": {
+ "type": "object",
+ "$ref": "../common/cper-json-nvp.json"
+ },
+ "accessMode": {
+ "type": "object",
+ "$ref": "../common/cper-json-nvp.json"
+ },
+ "memoryAttributes": {
+ "type": "integer"
+ }
+ }
+ }
+ ]
+ },
+ "virtualFaultAddress": {
+ "type": "integer"
+ },
+ "physicalFaultAddress": {
+ "type": "integer"
+ }
+ }
+ }
+ },
+ "contextInfo": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": ["registerContextType", "registerArraySize", "registerArray"],
+ "additionalProperties": false,
+ "properties": {
+ "registerContextType": {
+ "type": "object",
+ "$ref": "../common/cper-json-nvp.json"
+ },
+ "registerArraySize": {
+ "type": "integer"
+ },
+ "registerArray": {
+ "type": "object",
+ "oneOf": [
+ {
+ "type": "object",
+ "required": ["r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "r13_sp", "r14_lr", "r15_pc"],
+ "properties": {
+ "r0": { "type": "integer" },
+ "r1": { "type": "integer" },
+ "r2": { "type": "integer" },
+ "r3": { "type": "integer" },
+ "r4": { "type": "integer" },
+ "r5": { "type": "integer" },
+ "r6": { "type": "integer" },
+ "r7": { "type": "integer" },
+ "r8": { "type": "integer" },
+ "r9": { "type": "integer" },
+ "r10": { "type": "integer" },
+ "r11": { "type": "integer" },
+ "r12": { "type": "integer" },
+ "r13_sp": { "type": "integer" },
+ "r14_lr": { "type": "integer" },
+ "r15_pc": { "type": "integer" }
+ }
+ },
+ {
+ "type": "object",
+ "required": ["dfar", "dfsr", "ifar", "isr", "mair0", "mair1", "midr", "mpidr", "nmrr", "prrr", "sctlr_ns", "spsr", "spsr_abt", "spsr_fiq", "spsr_irq", "spsr_svc", "spsr_und", "tpidrprw", "tpidruro", "tpidrurw", "ttbcr", "ttbr0", "ttbr1", "dacr"],
+ "properties": {
+ "dfar": { "type": "integer" },
+ "dfsr": { "type": "integer" },
+ "ifar": { "type": "integer" },
+ "isr": { "type": "integer" },
+ "mair0": { "type": "integer" },
+ "mair1": { "type": "integer" },
+ "midr": { "type": "integer" },
+ "mpidr": { "type": "integer" },
+ "nmrr": { "type": "integer" },
+ "prrr": { "type": "integer" },
+ "sctlr_ns": { "type": "integer" },
+ "spsr": { "type": "integer" },
+ "spsr_abt": { "type": "integer" },
+ "spsr_fiq": { "type": "integer" },
+ "spsr_irq": { "type": "integer" },
+ "spsr_svc": { "type": "integer" },
+ "spsr_und": { "type": "integer" },
+ "tpidrprw": { "type": "integer" },
+ "tpidruro": { "type": "integer" },
+ "tpidrurw": { "type": "integer" },
+ "ttbcr": { "type": "integer" },
+ "ttbr0": { "type": "integer" },
+ "ttbr1": { "type": "integer" },
+ "dacr": { "type": "integer" }
+ }
+ },
+ {
+ "type": "object",
+ "required": ["elr_hyp", "hamair0", "hamair1", "hcr", "hcr2", "hdfar", "hifar", "hpfar", "hsr", "htcr", "htpidr", "httbr", "spsr_hyp", "vtcr", "vttbr", "dacr32_el2"],
+ "properties": {
+ "elr_hyp": { "type": "integer" },
+ "hamair0": { "type": "integer" },
+ "hamair1": { "type": "integer" },
+ "hcr": { "type": "integer" },
+ "hcr2": { "type": "integer" },
+ "hdfar": { "type": "integer" },
+ "hifar": { "type": "integer" },
+ "hpfar": { "type": "integer" },
+ "hsr": { "type": "integer" },
+ "htcr": { "type": "integer" },
+ "htpidr": { "type": "integer" },
+ "httbr": { "type": "integer" },
+ "spsr_hyp": { "type": "integer" },
+ "vtcr": { "type": "integer" },
+ "vttbr": { "type": "integer" },
+ "dacr32_el2": { "type": "integer" }
+ }
+ },
+ {
+ "type": "object",
+ "required": ["sctlr_s", "spsr_mon"],
+ "properties": {
+ "sctlr_s": { "type": "integer" },
+ "spsr_mon": { "type": "integer" }
+ }
+ },
+ {
+ "type": "object",
+ "required": ["x0", "x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9", "x10", "x11", "x12", "x13", "x14", "x15", "x16", "x17", "x18", "x19", "x20", "x21", "x22", "x23", "x24", "x25", "x26", "x27", "x28", "x29", "x30", "sp"],
+ "properties": {
+ "x0": { "type": "integer" },
+ "x1": { "type": "integer" },
+ "x2": { "type": "integer" },
+ "x3": { "type": "integer" },
+ "x4": { "type": "integer" },
+ "x5": { "type": "integer" },
+ "x6": { "type": "integer" },
+ "x7": { "type": "integer" },
+ "x8": { "type": "integer" },
+ "x9": { "type": "integer" },
+ "x10": { "type": "integer" },
+ "x11": { "type": "integer" },
+ "x12": { "type": "integer" },
+ "x13": { "type": "integer" },
+ "x14": { "type": "integer" },
+ "x15": { "type": "integer" },
+ "x16": { "type": "integer" },
+ "x17": { "type": "integer" },
+ "x18": { "type": "integer" },
+ "x19": { "type": "integer" },
+ "x20": { "type": "integer" },
+ "x21": { "type": "integer" },
+ "x22": { "type": "integer" },
+ "x23": { "type": "integer" },
+ "x24": { "type": "integer" },
+ "x25": { "type": "integer" },
+ "x26": { "type": "integer" },
+ "x27": { "type": "integer" },
+ "x28": { "type": "integer" },
+ "x29": { "type": "integer" },
+ "x30": { "type": "integer" },
+ "sp": { "type": "integer" }
+ }
+ },
+ {
+ "type": "object",
+ "required": ["elr_el1", "esr_el1", "far_el1", "isr_el1", "mair_el1", "midr_el1", "mpidr_el1", "sctlr_el1", "sp_el0", "sp_el1", "spsr_el1", "tcr_el1", "tpidr_el0", "tpidr_el1", "tpidrro_el0", "ttbr0_el1", "ttbr1_el1"],
+ "properties": {
+ "elr_el1": { "type": "integer" },
+ "esr_el1": { "type": "integer" },
+ "far_el1": { "type": "integer" },
+ "isr_el1": { "type": "integer" },
+ "mair_el1": { "type": "integer" },
+ "midr_el1": { "type": "integer" },
+ "mpidr_el1": { "type": "integer" },
+ "sctlr_el1": { "type": "integer" },
+ "sp_el0": { "type": "integer" },
+ "sp_el1": { "type": "integer" },
+ "spsr_el1": { "type": "integer" },
+ "tcr_el1": { "type": "integer" },
+ "tpidr_el0": { "type": "integer" },
+ "tpidr_el1": { "type": "integer" },
+ "tpidrro_el0": { "type": "integer" },
+ "ttbr0_el1": { "type": "integer" },
+ "ttbr1_el1": { "type": "integer" }
+ }
+ },
+ {
+ "type": "object",
+ "required": ["elr_el2", "esr_el2", "far_el2", "hacr_el2", "hcr_el2", "hpfar_el2", "mair_el2", "sctlr_el2", "sp_el2", "spsr_el2", "tcr_el2", "tpidr_el2", "ttbr0_el2", "vtcr_el2", "vttbr_el2"],
+ "properties": {
+ "elr_el2": { "type": "integer" },
+ "esr_el2": { "type": "integer" },
+ "far_el2": { "type": "integer" },
+ "hacr_el2": { "type": "integer" },
+ "hcr_el2": { "type": "integer" },
+ "hpfar_el2": { "type": "integer" },
+ "mair_el2": { "type": "integer" },
+ "sctlr_el2": { "type": "integer" },
+ "sp_el2": { "type": "integer" },
+ "spsr_el2": { "type": "integer" },
+ "tcr_el2": { "type": "integer" },
+ "tpidr_el2": { "type": "integer" },
+ "ttbr0_el2": { "type": "integer" },
+ "vtcr_el2": { "type": "integer" },
+ "vttbr_el2": { "type": "integer" }
+ }
+ },
+ {
+ "type": "object",
+ "required": ["elr_el3", "esr_el3", "far_el3", "mair_el3", "sctlr_el3", "sp_el3", "spsr_el3", "tcr_el3", "tpidr_el3", "ttbr0_el3"],
+ "properties": {
+ "elr_el3": { "type": "integer" },
+ "esr_el3": { "type": "integer" },
+ "far_el3": { "type": "integer" },
+ "mair_el3": { "type": "integer" },
+ "sctlr_el3": { "type": "integer" },
+ "sp_el3": { "type": "integer" },
+ "spsr_el3": { "type": "integer" },
+ "tcr_el3": { "type": "integer" },
+ "tpidr_el3": { "type": "integer" },
+ "ttbr0_el3": { "type": "integer" }
+ }
+ },
+ {
+ "type": "object",
+ "required": ["mrsEncoding", "value"],
+ "additionalProperties": false,
+ "properties": {
+ "mrsEncoding": {
+ "type": "object",
+ "required": ["op2", "crm", "crn", "op1", "o0"],
+ "properties": {
+ "op2": { "type": "integer" },
+ "crm": { "type": "integer" },
+ "crn": { "type": "integer" },
+ "op1": { "type": "integer" },
+ "o0": { "type": "integer" }
+ }
+ },
+ "value": {
+ "type": "integer"
+ }
+ }
+ },
+ {
+ "type": "object",
+ "required": ["data"],
+ "properties": {
+ "data": {
+ "type": "string"
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "vendorSpecificInfo": {
+ "type": "object",
+ "required": ["data"],
+ "additionalProperties": false,
+ "properties": {
+ "data": {
+ "type": "string"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file