EINJ table is fully implemented in kernel and no changes were needed to bring it up on armv7/8 arch. Along with work on EINJ coulpe of steps were done like: 1. Expand bfapei tool so it can create blob which pretend h/w registers for EINJ driver. 2. Filling address in EINJ table according to those in blob. 3. Trigger error using existing injection kernel mechanism.
See commit for more details.
Tomasz Nowicki (3): bfapei: Move common functionality to separate function. bfapei: Expand bfapei tool to EINJ table testing. acpi, apei, einj: Fill in EINJ table according to address in EINJ blobs.
platforms/exynos5250-arndale.acpi/einj.asl | 20 +++--- platforms/foundation-v8.acpi/einj.asl | 20 +++--- platforms/rtsm_ve-aemv8a.acpi/einj.asl | 20 +++--- tools/bfapei/bfapei.c | 101 ++++++++++++++++++++++------ tools/bfapei/bfapei.h | 30 +++++++-- tools/common/include/acpi.h | 57 ++++++++++++++++ 6 files changed, 192 insertions(+), 56 deletions(-)
--- tools/bfapei/bfapei.c | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-)
diff --git a/tools/bfapei/bfapei.c b/tools/bfapei/bfapei.c index 7b347e9..73a421c 100644 --- a/tools/bfapei/bfapei.c +++ b/tools/bfapei/bfapei.c @@ -125,6 +125,22 @@ static uint64_t obtain_esb(char *homedir, char *manifest_name) return 0; }
+static int bfapei_expand_buf(char **buf, int *size, int reqr_size) +{ + if (*size >= reqr_size) + return BFAPEI_OK; + + *buf = realloc(*buf, reqr_size); + if (!(*buf)) { + printf("Error during memory allocation!\n"); + return BFAPEI_FAIL; + } + memset(*buf + *size, 0, reqr_size - *size); + *size = reqr_size; + + return BFAPEI_OK; +} + static int bfapei_hest(char **buf, int *size, uint64_t paddr, int status) { struct acpi_hest_generic_status *block_ptr; @@ -136,15 +152,8 @@ static int bfapei_hest(char **buf, int *size, uint64_t paddr, int status) sizeof(struct acpi_hest_generic_data) + sizeof (struct cper_sec_mem_err);
- if (*size < reqr_size) { - *buf = realloc(*buf, *size + reqr_size); - if (!(*buf)) { - printf("Error during memory allocation!\n"); - return BFAPEI_FAIL; - } - memset(*buf + *size, 0, reqr_size - *size); - *size += reqr_size; - } + if (bfapei_expand_buf(buf, size, reqr_size)) + return BFAPEI_FAIL;
/* * Fill in blob which will be parsed by GHES driver. @@ -175,17 +184,10 @@ static int bfapei_hest(char **buf, int *size, uint64_t paddr, int status)
static int bfapei_erst(char **buf, int *size, uint64_t paddr) { - int reqr_size = 0x400; + int reqr_size = 0x200;
- if (*size < reqr_size) { - *buf = realloc(*buf, *size + reqr_size); - if (!(*buf)) { - printf("Error during memory allocation!\n"); - return BFAPEI_FAIL; - } - memset(*buf + *size, 0, reqr_size - *size); - *size += reqr_size; - } + if (bfapei_expand_buf(buf, size, reqr_size)) + return BFAPEI_FAIL;
/* * Fill in ERST registers.
On 2013-9-20 0:18, Tomasz Nowicki wrote:
tools/bfapei/bfapei.c | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-)
Add some simple change log would be great, something like: add a helper function to ....
and the Signed-off-by is missing :)
diff --git a/tools/bfapei/bfapei.c b/tools/bfapei/bfapei.c index 7b347e9..73a421c 100644 --- a/tools/bfapei/bfapei.c +++ b/tools/bfapei/bfapei.c @@ -125,6 +125,22 @@ static uint64_t obtain_esb(char *homedir, char *manifest_name) return 0; } +static int bfapei_expand_buf(char **buf, int *size, int reqr_size) +{
- if (*size >= reqr_size)
return BFAPEI_OK;
- *buf = realloc(*buf, reqr_size);
- if (!(*buf)) {
printf("Error during memory allocation!\n");
return BFAPEI_FAIL;
- }
- memset(*buf + *size, 0, reqr_size - *size);
- *size = reqr_size;
- return BFAPEI_OK;
+}
static int bfapei_hest(char **buf, int *size, uint64_t paddr, int status) { struct acpi_hest_generic_status *block_ptr; @@ -136,15 +152,8 @@ static int bfapei_hest(char **buf, int *size, uint64_t paddr, int status) sizeof(struct acpi_hest_generic_data) + sizeof (struct cper_sec_mem_err);
- if (*size < reqr_size) {
*buf = realloc(*buf, *size + reqr_size);
if (!(*buf)) {
printf("Error during memory allocation!\n");
return BFAPEI_FAIL;
}
memset(*buf + *size, 0, reqr_size - *size);
*size += reqr_size;
- }
- if (bfapei_expand_buf(buf, size, reqr_size))
return BFAPEI_FAIL;
/* * Fill in blob which will be parsed by GHES driver. @@ -175,17 +184,10 @@ static int bfapei_hest(char **buf, int *size, uint64_t paddr, int status) static int bfapei_erst(char **buf, int *size, uint64_t paddr) {
- int reqr_size = 0x400;
- int reqr_size = 0x200;
- if (*size < reqr_size) {
*buf = realloc(*buf, *size + reqr_size);
if (!(*buf)) {
printf("Error during memory allocation!\n");
return BFAPEI_FAIL;
}
memset(*buf + *size, 0, reqr_size - *size);
*size += reqr_size;
- }
- if (bfapei_expand_buf(buf, size, reqr_size))
return BFAPEI_FAIL;
/* * Fill in ERST registers.
W dniu 22.09.2013 09:29, Hanjun Guo pisze:
On 2013-9-20 0:18, Tomasz Nowicki wrote:
tools/bfapei/bfapei.c | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-)
Add some simple change log would be great, something like: add a helper function to ....
Sure, I will do that.
Tomasz
and the Signed-off-by is missing :)
diff --git a/tools/bfapei/bfapei.c b/tools/bfapei/bfapei.c index 7b347e9..73a421c 100644 --- a/tools/bfapei/bfapei.c +++ b/tools/bfapei/bfapei.c @@ -125,6 +125,22 @@ static uint64_t obtain_esb(char *homedir, char *manifest_name) return 0; }
+static int bfapei_expand_buf(char **buf, int *size, int reqr_size) +{
- if (*size >= reqr_size)
return BFAPEI_OK;
- *buf = realloc(*buf, reqr_size);
- if (!(*buf)) {
printf("Error during memory allocation!\n");
return BFAPEI_FAIL;
- }
- memset(*buf + *size, 0, reqr_size - *size);
- *size = reqr_size;
- return BFAPEI_OK;
+}
- static int bfapei_hest(char **buf, int *size, uint64_t paddr, int status) { struct acpi_hest_generic_status *block_ptr;
@@ -136,15 +152,8 @@ static int bfapei_hest(char **buf, int *size, uint64_t paddr, int status) sizeof(struct acpi_hest_generic_data) + sizeof (struct cper_sec_mem_err);
- if (*size < reqr_size) {
*buf = realloc(*buf, *size + reqr_size);
if (!(*buf)) {
printf("Error during memory allocation!\n");
return BFAPEI_FAIL;
}
memset(*buf + *size, 0, reqr_size - *size);
*size += reqr_size;
- }
if (bfapei_expand_buf(buf, size, reqr_size))
return BFAPEI_FAIL;
/*
- Fill in blob which will be parsed by GHES driver.
@@ -175,17 +184,10 @@ static int bfapei_hest(char **buf, int *size, uint64_t paddr, int status)
static int bfapei_erst(char **buf, int *size, uint64_t paddr) {
- int reqr_size = 0x400;
- int reqr_size = 0x200;
- if (*size < reqr_size) {
*buf = realloc(*buf, *size + reqr_size);
if (!(*buf)) {
printf("Error during memory allocation!\n");
return BFAPEI_FAIL;
}
memset(*buf + *size, 0, reqr_size - *size);
*size += reqr_size;
- }
if (bfapei_expand_buf(buf, size, reqr_size))
return BFAPEI_FAIL;
/*
- Fill in ERST registers.
bfapei now can create blob for EINJ driver as well. Blob for EINJ driver need to be combined with blob for HEST driver since EINJ is designed to set status flag for Error Status Block pointed from HEST table. This way EINJ driver can be tested in easy way. Note that SCI must be triggered in the next step so GHES driver start to parse error. This could be done using SCI emulate mechanism.
Logic path: 1. Create Error Status Block (ESB information related to given error, pointed by HEST) 2. Create pretended registers (blob for EINJ) that instruct kernel to set status flag in ESB. 3. Trigger error using debugfs 4. Emulate SCI
HOWTO: Enter to acpi tool repository: # make PADDR=0x<physical address> APEI=einj <platform>.acpi
Boot target: Print available error list: # cat /sys/kernel/debug/apei/einj/available_error_type 0x00000008 Memory Correctable Set given error type: # echo 0x00000008 > /sys/kernel/debug/apei/einj/error_type Confirm error was really set: # cat /sys/kernel/debug/apei/einj/error_type 0x8 Inject error (here status flag for ESB is set) # echo 0x00000008 > /sys/kernel/debug/apei/einj/error_inject Emulate SCI (notification of HED device with 0x80 value) # echo "HED 128" > /sys/kernel/debug/acpi/sci_notify ACPI: ACPI device name is <HED>, event code is <128> ACPI: Notify event is queued {1}[Hardware Error]: Hardware error from APEI Generic Hardware Error Source: 2 {1}[Hardware Error]: APEI generic hardware error status {1}[Hardware Error]: severity: 1, fatal {1}[Hardware Error]: section: 0, severity: 0, recoverable {1}[Hardware Error]: flags: 0x00 {1}[Hardware Error]: section_type: memory error
Signed-off-by: Tomasz Nowicki tomasz.nowicki@linaro.org --- tools/bfapei/bfapei.c | 61 +++++++++++++++++++++++++++++++++++++++++++ tools/bfapei/bfapei.h | 30 ++++++++++++++++----- tools/common/include/acpi.h | 57 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 141 insertions(+), 7 deletions(-)
diff --git a/tools/bfapei/bfapei.c b/tools/bfapei/bfapei.c index 73a421c..ff99953 100644 --- a/tools/bfapei/bfapei.c +++ b/tools/bfapei/bfapei.c @@ -45,6 +45,10 @@ * | | * +--------------------+ +0x200 * | | + * | place for EINJ | EINJ driver reference to this region during + * | registers | error injection. + * | | + * +--------------------+ +0x300 * * ~~~~~~~~~~~~~~~~~~~~~~~~ * @@ -182,6 +186,55 @@ static int bfapei_hest(char **buf, int *size, uint64_t paddr, int status) return BFAPEI_OK; }
+static int bfapei_einj(char **buf, int *size, uint64_t paddr) +{ + struct acpi_hest_generic_status *block_ptr; + struct acpi_einj_trigger *trigger_tab; + struct acpi_whea_header *trigger_entry; + int reqr_size = 0x300; + uint64_t *add_ptr; + + if (bfapei_expand_buf(buf, size, reqr_size)) + return BFAPEI_FAIL; + + /* Available error type: Memory Correctable */ + WRITE_EINJ_REG(*buf, ACPI_EINJ_GET_ERROR_TYPE, 0x00000008); + + WRITE_EINJ_REG(*buf, ACPI_EINJ_GET_COMMAND_STATUS, ACPI_EINJ_SUCCESS); + WRITE_EINJ_REG(*buf, ACPI_EINJ_CHECK_BUSY_STATUS, 1); + + /* + * Nothing to do more than just set status flag for previous prepared + * ESB (error status block) + */ + WRITE_EINJ_REG(*buf, ACPI_EINJ_GET_TRIGGER_TABLE, paddr + 0x280); + trigger_tab = (struct acpi_einj_trigger *) (*buf + 0x280); + trigger_tab->header_size = sizeof(struct acpi_einj_trigger); + trigger_tab->table_size = sizeof(struct acpi_einj_trigger) + + sizeof(struct acpi_whea_header); + trigger_tab->entry_count = 1; + + trigger_entry = (struct acpi_whea_header *) ++trigger_tab; + trigger_entry->action = ACPI_EINJ_TRIGGER_ERROR; + trigger_entry->instruction = ACPI_EINJ_WRITE_REGISTER_VALUE; + + trigger_entry->register_region.space_id = ACPI_ADR_SPACE_SYSTEM_MEMORY; + trigger_entry->register_region.bit_width = 40; + trigger_entry->register_region.bit_offset = 0; + trigger_entry->register_region.access_width = 4; + + /* Obtain address of status block field */ + add_ptr = (uint64_t *) *buf; + block_ptr = (struct acpi_hest_generic_status *) (++add_ptr); + trigger_entry->register_region.address = + paddr + ((char *)&(block_ptr->block_status) - *buf); + + trigger_entry->value = 1; + trigger_entry->mask = 0xFFFFFFFFFFFFFFFFUL; + + return BFAPEI_OK; +} + static int bfapei_erst(char **buf, int *size, uint64_t paddr) { int reqr_size = 0x200; @@ -250,6 +303,14 @@ int main(int argc, char *argv[]) { return BFAPEI_FAIL; }
+ if (strncmp(blob_type, "einj", 4) == 0) { + if (bfapei_hest(&buf, &size, paddr, 0)) + return BFAPEI_FAIL; + + if (bfapei_einj(&buf, &size, paddr)) + return BFAPEI_FAIL; + } + /* Set status flag so error will be visible for BERT driver */ if (strncmp(blob_type, "bert", 4) == 0) { if (bfapei_hest(&buf, &size, paddr, 1)) diff --git a/tools/bfapei/bfapei.h b/tools/bfapei/bfapei.h index 16b6b3c..20678ce 100644 --- a/tools/bfapei/bfapei.h +++ b/tools/bfapei/bfapei.h @@ -27,6 +27,13 @@ const char PROGNAME[] = { "bfapei" }; sizeof(struct acpi_hest_generic_data) + \ sizeof (struct cper_sec_mem_err)
+/* Register write macro helper */ +#define WRITE_LONG(blob, offset, value) { \ + uint64_t *add_ptr; \ + add_ptr = (uint64_t *) (blob + offset); \ + *add_ptr = value; \ +} + /* ERST generic registers offset */ uint64_t erst_reg_map[] = { [ACPI_ERST_CHECK_BUSY_STATUS] = 0x130, @@ -36,14 +43,23 @@ uint64_t erst_reg_map[] = { [ACPI_ERST_GET_ERROR_ATTRIBUTES] = 0x178, };
-/* ERST macro helper */ -#define WRITE_LONG(blob, offset, value) { \ - uint64_t *add_ptr; \ - add_ptr = (uint64_t *) (blob + offset); \ - *add_ptr = value; \ -} - #define WRITE_ERST_REG(blob, reg, value) \ WRITE_LONG(blob, erst_reg_map[reg], value)
+/* EINJ generic registers offset */ +uint64_t einj_reg_map[] = { + [ACPI_EINJ_BEGIN_OPERATION] = 0x200, + [ACPI_EINJ_GET_TRIGGER_TABLE] = 0x208, + [ACPI_EINJ_SET_ERROR_TYPE] = 0x210, + [ACPI_EINJ_GET_ERROR_TYPE] = 0x218, + [ACPI_EINJ_END_OPERATION] = 0x220, + [ACPI_EINJ_EXECUTE_OPERATION] = 0x228, + [ACPI_EINJ_CHECK_BUSY_STATUS] = 0x230, + [ACPI_EINJ_GET_COMMAND_STATUS] = 0x238, + +}; + +#define WRITE_EINJ_REG(blob, reg, value) \ + WRITE_LONG(blob, einj_reg_map[reg], value) + #endif diff --git a/tools/common/include/acpi.h b/tools/common/include/acpi.h index c9380de..9ba29fb 100644 --- a/tools/common/include/acpi.h +++ b/tools/common/include/acpi.h @@ -201,4 +201,61 @@ enum acpi_erst_actions { ACPI_ERST_ACTION_RESERVED = 16 /* 16 and greater are reserved */ };
+#define ACPI_ADR_SPACE_SYSTEM_MEMORY 0 + +enum acpi_einj_actions { + ACPI_EINJ_BEGIN_OPERATION = 0, + ACPI_EINJ_GET_TRIGGER_TABLE = 1, + ACPI_EINJ_SET_ERROR_TYPE = 2, + ACPI_EINJ_GET_ERROR_TYPE = 3, + ACPI_EINJ_END_OPERATION = 4, + ACPI_EINJ_EXECUTE_OPERATION = 5, + ACPI_EINJ_CHECK_BUSY_STATUS = 6, + ACPI_EINJ_GET_COMMAND_STATUS = 7, + ACPI_EINJ_SET_ERROR_TYPE_WITH_ADDRESS = 8, + ACPI_EINJ_ACTION_RESERVED = 9, /* 9 and greater are reserved */ + ACPI_EINJ_TRIGGER_ERROR = 0xFF /* Except for this value */ +}; + +/* Values for Instruction field above */ + +enum acpi_einj_instructions { + ACPI_EINJ_READ_REGISTER = 0, + ACPI_EINJ_READ_REGISTER_VALUE = 1, + ACPI_EINJ_WRITE_REGISTER = 2, + ACPI_EINJ_WRITE_REGISTER_VALUE = 3, + ACPI_EINJ_NOOP = 4, + ACPI_EINJ_INSTRUCTION_RESERVED = 5 /* 5 and greater are reserved */ +}; + +/* Command status return values */ + +enum acpi_einj_command_status { + ACPI_EINJ_SUCCESS = 0, + ACPI_EINJ_FAILURE = 1, + ACPI_EINJ_INVALID_ACCESS = 2, + ACPI_EINJ_STATUS_RESERVED = 3 /* 3 and greater are reserved */ +}; + +/* EINJ Trigger Error Action Table */ + +struct acpi_einj_trigger { + uint32_t header_size; + uint32_t revision; + uint32_t table_size; + uint32_t entry_count; +}; + +/* Subtable header for WHEA tables (EINJ, ERST, WDAT) */ + +struct acpi_whea_header { + uint8_t action; + uint8_t instruction; + uint8_t flags; + uint8_t reserved; + struct acpi_generic_address register_region; + uint64_t value; /* Value used with Read/Write register */ + uint64_t mask; /* Bitmask required for this register instruction */ +}; + #endif /* ACPI_H_ */
Signed-off-by: Tomasz Nowicki tomasz.nowicki@linaro.org --- platforms/exynos5250-arndale.acpi/einj.asl | 20 ++++++++++---------- platforms/foundation-v8.acpi/einj.asl | 20 ++++++++++---------- platforms/rtsm_ve-aemv8a.acpi/einj.asl | 20 ++++++++++---------- 3 files changed, 30 insertions(+), 30 deletions(-)
diff --git a/platforms/exynos5250-arndale.acpi/einj.asl b/platforms/exynos5250-arndale.acpi/einj.asl index 87f5f88..285b465 100644 --- a/platforms/exynos5250-arndale.acpi/einj.asl +++ b/platforms/exynos5250-arndale.acpi/einj.asl @@ -13,7 +13,7 @@ [0001] Checksum : 09 [0006] Oem ID : "LINARO" [0008] Oem Table ID : "ARNDALE " -[0004] Oem Revision : 00000002 +[0004] Oem Revision : 00000003 [0004] Asl Compiler ID : "INTL" [0004] Asl Compiler Revision : 20100528
@@ -33,7 +33,7 @@ [0001] Bit Width : 40 [0001] Bit Offset : 00 [0001] Encoded Access Width : 04 [QWord Access:64] -[0008] Address : 0000000000000000 +[0008] Address : 0x43000200
[0008] Value : 0000000000000000 [0008] Mask : FFFFFFFFFFFFFFFF @@ -49,7 +49,7 @@ [0001] Bit Width : 40 [0001] Bit Offset : 00 [0001] Encoded Access Width : 04 [QWord Access:64] -[0008] Address : 0000000000000000 +[0008] Address : 0x43000208
[0008] Value : 0000000000000000 [0008] Mask : FFFFFFFFFFFFFFFF @@ -65,7 +65,7 @@ [0001] Bit Width : 40 [0001] Bit Offset : 00 [0001] Encoded Access Width : 04 [QWord Access:64] -[0008] Address : 0000000000000000 +[0008] Address : 0x43000210
[0008] Value : 0000000000000000 [0008] Mask : FFFFFFFFFFFFFFFF @@ -81,7 +81,7 @@ [0001] Bit Width : 40 [0001] Bit Offset : 00 [0001] Encoded Access Width : 04 [QWord Access:64] -[0008] Address : 0000000000000000 +[0008] Address : 0x43000218
[0008] Value : 0000000000000000 [0008] Mask : FFFFFFFFFFFFFFFF @@ -97,7 +97,7 @@ [0001] Bit Width : 40 [0001] Bit Offset : 00 [0001] Encoded Access Width : 04 [QWord Access:64] -[0008] Address : 0000000000000000 +[0008] Address : 0x43000220
[0008] Value : 0000000000000000 [0008] Mask : FFFFFFFFFFFFFFFF @@ -109,11 +109,11 @@ [0001] Reserved : 00
[0012] Register Region : [Generic Address Structure] -[0001] Space ID : 01 [SystemIO] +[0001] Space ID : 00 [SystemMemory] [0001] Bit Width : 10 [0001] Bit Offset : 00 [0001] Encoded Access Width : 02 [Word Access:16] -[0008] Address : 0000000000000000 +[0008] Address : 0x43000228
[0008] Value : 0000000000000000 [0008] Mask : FFFFFFFFFFFFFFFF @@ -129,7 +129,7 @@ [0001] Bit Width : 40 [0001] Bit Offset : 00 [0001] Encoded Access Width : 04 [QWord Access:64] -[0008] Address : 0000000000000000 +[0008] Address : 0x43000230
[0008] Value : 0000000000000000 [0008] Mask : FFFFFFFFFFFFFFFF @@ -145,7 +145,7 @@ [0001] Bit Width : 40 [0001] Bit Offset : 00 [0001] Encoded Access Width : 04 [QWord Access:64] -[0008] Address : 0000000000000000 +[0008] Address : 0x43000238
[0008] Value : 0000000000000000 [0008] Mask : FFFFFFFFFFFFFFFF diff --git a/platforms/foundation-v8.acpi/einj.asl b/platforms/foundation-v8.acpi/einj.asl index 90930eb..98fde2f 100644 --- a/platforms/foundation-v8.acpi/einj.asl +++ b/platforms/foundation-v8.acpi/einj.asl @@ -13,7 +13,7 @@ [0001] Checksum : 09 [0006] Oem ID : "LINARO" [0008] Oem Table ID : "FOUNDATI" -[0004] Oem Revision : 00000002 +[0004] Oem Revision : 00000003 [0004] Asl Compiler ID : "INTL" [0004] Asl Compiler Revision : 20100528
@@ -33,7 +33,7 @@ [0001] Bit Width : 40 [0001] Bit Offset : 00 [0001] Encoded Access Width : 04 [QWord Access:64] -[0008] Address : 0000000000000000 +[0008] Address : 0xFFFF0200
[0008] Value : 0000000000000000 [0008] Mask : FFFFFFFFFFFFFFFF @@ -49,7 +49,7 @@ [0001] Bit Width : 40 [0001] Bit Offset : 00 [0001] Encoded Access Width : 04 [QWord Access:64] -[0008] Address : 0000000000000000 +[0008] Address : 0xFFFF0208
[0008] Value : 0000000000000000 [0008] Mask : FFFFFFFFFFFFFFFF @@ -65,7 +65,7 @@ [0001] Bit Width : 40 [0001] Bit Offset : 00 [0001] Encoded Access Width : 04 [QWord Access:64] -[0008] Address : 0000000000000000 +[0008] Address : 0xFFFF0210
[0008] Value : 0000000000000000 [0008] Mask : FFFFFFFFFFFFFFFF @@ -81,7 +81,7 @@ [0001] Bit Width : 40 [0001] Bit Offset : 00 [0001] Encoded Access Width : 04 [QWord Access:64] -[0008] Address : 0000000000000000 +[0008] Address : 0xFFFF0218
[0008] Value : 0000000000000000 [0008] Mask : FFFFFFFFFFFFFFFF @@ -97,7 +97,7 @@ [0001] Bit Width : 40 [0001] Bit Offset : 00 [0001] Encoded Access Width : 04 [QWord Access:64] -[0008] Address : 0000000000000000 +[0008] Address : 0xFFFF0220
[0008] Value : 0000000000000000 [0008] Mask : FFFFFFFFFFFFFFFF @@ -109,11 +109,11 @@ [0001] Reserved : 00
[0012] Register Region : [Generic Address Structure] -[0001] Space ID : 01 [SystemIO] +[0001] Space ID : 00 [SystemMemory] [0001] Bit Width : 10 [0001] Bit Offset : 00 [0001] Encoded Access Width : 02 [Word Access:16] -[0008] Address : 0000000000000000 +[0008] Address : 0xFFFF0228
[0008] Value : 0000000000000000 [0008] Mask : FFFFFFFFFFFFFFFF @@ -129,7 +129,7 @@ [0001] Bit Width : 40 [0001] Bit Offset : 00 [0001] Encoded Access Width : 04 [QWord Access:64] -[0008] Address : 0000000000000000 +[0008] Address : 0xFFFF0230
[0008] Value : 0000000000000000 [0008] Mask : FFFFFFFFFFFFFFFF @@ -145,7 +145,7 @@ [0001] Bit Width : 40 [0001] Bit Offset : 00 [0001] Encoded Access Width : 04 [QWord Access:64] -[0008] Address : 0000000000000000 +[0008] Address : 0xFFFF0238
[0008] Value : 0000000000000000 [0008] Mask : FFFFFFFFFFFFFFFF diff --git a/platforms/rtsm_ve-aemv8a.acpi/einj.asl b/platforms/rtsm_ve-aemv8a.acpi/einj.asl index bc99dac..40a7d94 100644 --- a/platforms/rtsm_ve-aemv8a.acpi/einj.asl +++ b/platforms/rtsm_ve-aemv8a.acpi/einj.asl @@ -13,7 +13,7 @@ [0001] Checksum : 09 [0006] Oem ID : "LINARO" [0008] Oem Table ID : "RTSMVEV8" -[0004] Oem Revision : 00000002 +[0004] Oem Revision : 00000003 [0004] Asl Compiler ID : "INTL" [0004] Asl Compiler Revision : 20100528
@@ -33,7 +33,7 @@ [0001] Bit Width : 40 [0001] Bit Offset : 00 [0001] Encoded Access Width : 04 [QWord Access:64] -[0008] Address : 0000000000000000 +[0008] Address : 0xFFFF0200
[0008] Value : 0000000000000000 [0008] Mask : FFFFFFFFFFFFFFFF @@ -49,7 +49,7 @@ [0001] Bit Width : 40 [0001] Bit Offset : 00 [0001] Encoded Access Width : 04 [QWord Access:64] -[0008] Address : 0000000000000000 +[0008] Address : 0xFFFF0208
[0008] Value : 0000000000000000 [0008] Mask : FFFFFFFFFFFFFFFF @@ -65,7 +65,7 @@ [0001] Bit Width : 40 [0001] Bit Offset : 00 [0001] Encoded Access Width : 04 [QWord Access:64] -[0008] Address : 0000000000000000 +[0008] Address : 0xFFFF0210
[0008] Value : 0000000000000000 [0008] Mask : FFFFFFFFFFFFFFFF @@ -81,7 +81,7 @@ [0001] Bit Width : 40 [0001] Bit Offset : 00 [0001] Encoded Access Width : 04 [QWord Access:64] -[0008] Address : 0000000000000000 +[0008] Address : 0xFFFF0218
[0008] Value : 0000000000000000 [0008] Mask : FFFFFFFFFFFFFFFF @@ -97,7 +97,7 @@ [0001] Bit Width : 40 [0001] Bit Offset : 00 [0001] Encoded Access Width : 04 [QWord Access:64] -[0008] Address : 0000000000000000 +[0008] Address : 0xFFFF0220
[0008] Value : 0000000000000000 [0008] Mask : FFFFFFFFFFFFFFFF @@ -109,11 +109,11 @@ [0001] Reserved : 00
[0012] Register Region : [Generic Address Structure] -[0001] Space ID : 01 [SystemIO] +[0001] Space ID : 00 [SystemMemory] [0001] Bit Width : 10 [0001] Bit Offset : 00 [0001] Encoded Access Width : 02 [Word Access:16] -[0008] Address : 0000000000000000 +[0008] Address : 0xFFFF0228
[0008] Value : 0000000000000000 [0008] Mask : FFFFFFFFFFFFFFFF @@ -129,7 +129,7 @@ [0001] Bit Width : 40 [0001] Bit Offset : 00 [0001] Encoded Access Width : 04 [QWord Access:64] -[0008] Address : 0000000000000000 +[0008] Address : 0xFFFF0230
[0008] Value : 0000000000000000 [0008] Mask : FFFFFFFFFFFFFFFF @@ -145,7 +145,7 @@ [0001] Bit Width : 40 [0001] Bit Offset : 00 [0001] Encoded Access Width : 04 [QWord Access:64] -[0008] Address : 0000000000000000 +[0008] Address : 0xFFFF0238
[0008] Value : 0000000000000000 [0008] Mask : FFFFFFFFFFFFFFFF