Fix ArmProcessor ErrorInformation types

ErrorInformation currently has 2 supported formats according to the
libcper schema, cacheError and tlbError. Remove "unknown" microarch
types as we need correctly formatted output only.
Add a property name to identify which ErrorInformation type has been
detected in the cper record

Tested:
Used cper-convert to-json to convert a known good cper to json
Used cper-convert to-cper to convert same json to cper
json was generated again and validated against schema

Change-Id: I510f2ae7fef195721b618065c6ef643ab1191b76
Signed-off-by: Aushim Nagarkatti <anagarkatti@nvidia.com>
diff --git a/sections/cper-section-arm.c b/sections/cper-section-arm.c
index b0b14d1..d172a99 100644
--- a/sections/cper-section-arm.c
+++ b/sections/cper-section-arm.c
@@ -196,12 +196,7 @@
 		break;
 
 	default:
-		//Unknown/microarch, so can't be made readable. Simply dump as a uint64 data object.
-		error_subinfo = json_object_new_object();
-		json_object_object_add(
-			error_subinfo, "data",
-			json_object_new_uint64(
-				error_info->ErrorInformation.Value));
+		//Unknown/microarch, will not support.
 		break;
 	}
 	json_object_object_add(error_info_ir, "errorInformation",
@@ -224,6 +219,8 @@
 			       EFI_ARM_ERROR_INFORMATION_ENTRY *error_info)
 {
 	json_object *cache_tlb_error_ir = json_object_new_object();
+	json_object *cache_tlb_prop = json_object_new_object();
+	char *cache_tlb_propname;
 
 	//Validation bitfield.
 	json_object *validation =
@@ -249,12 +246,14 @@
 			ARM_CACHE_BUS_OPERATION_TYPES_KEYS,
 			ARM_CACHE_BUS_OPERATION_TYPES_VALUES,
 			"Unknown (Reserved)");
+		cache_tlb_propname = "cacheError";
 	} else {
 		//TLB operation.
 		operation = integer_to_readable_pair(
 			cache_tlb_error->Operation, 9,
 			ARM_TLB_OPERATION_TYPES_KEYS,
 			ARM_TLB_OPERATION_TYPES_VALUES, "Unknown (Reserved)");
+		cache_tlb_propname = "tlbError";
 	}
 	json_object_object_add(cache_tlb_error_ir, "operation", operation);
 
@@ -274,7 +273,10 @@
 	json_object_object_add(
 		cache_tlb_error_ir, "restartablePC",
 		json_object_new_boolean(cache_tlb_error->RestartablePC));
-	return cache_tlb_error_ir;
+
+	json_object_object_add(cache_tlb_prop, cache_tlb_propname,
+			       cache_tlb_error_ir);
+	return cache_tlb_prop;
 }
 
 //Converts a single ARM bus error information structure into JSON IR format.
@@ -594,11 +596,21 @@
 	//Error information.
 	json_object *error_info_information =
 		json_object_object_get(error_info, "errorInformation");
+	json_object *error_info_prop = NULL;
+
 	switch (error_info_cper.Type) {
 	case ARM_ERROR_INFORMATION_TYPE_CACHE:
-	case ARM_ERROR_INFORMATION_TYPE_TLB:
+		error_info_prop = json_object_object_get(error_info_information,
+							 "cacheError");
 		ir_arm_error_cache_tlb_info_to_cper(
-			error_info_information,
+			error_info_prop,
+			&error_info_cper.ErrorInformation.CacheError);
+		break;
+	case ARM_ERROR_INFORMATION_TYPE_TLB:
+		error_info_prop = json_object_object_get(error_info_information,
+							 "tlbError");
+		ir_arm_error_cache_tlb_info_to_cper(
+			error_info_prop,
 			&error_info_cper.ErrorInformation.CacheError);
 		break;
 
@@ -610,8 +622,6 @@
 
 	default:
 		//Unknown error information type.
-		error_info_cper.ErrorInformation.Value = json_object_get_uint64(
-			json_object_object_get(error_info_information, "data"));
 		break;
 	}
 
diff --git a/specification/json/sections/cper-arm-processor.json b/specification/json/sections/cper-arm-processor.json
index 546b3f4..c1e7500 100644
--- a/specification/json/sections/cper-arm-processor.json
+++ b/specification/json/sections/cper-arm-processor.json
@@ -166,203 +166,199 @@
                         "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"
+                                "required": ["cacheError"],
+                                "cacheError": {
+                                    "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"
                                         }
-                                    },
-                                    "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"
+                                "required": ["tlbError"],
+                                "tlbError": {
+                                    "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"
                                         }
-                                    },
-                                    "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"
-                                    }
-                                }
-                            },
-                            {
-                                "type": "object",
-                                "required": ["data"],
-                                "additionalProperties": false,
-                                "properties": {
-                                    "data": {
-                                        "type": "integer"
                                     }
                                 }
                             }