From 2deaedd243e76458ed8714a26d18fff3cfd32132 Mon Sep 17 00:00:00 2001 From: Binbin Wu Date: Wed, 29 Aug 2018 14:32:08 +0800 Subject: [PATCH] dm: cmos: move cmos storage out of vmctx The whole vmctx will be cleared during cold reset. cmos data should not be cleared during cold reset. Move cmos data out of vmctx. Tracked-On: #1118 Signed-off-by: Binbin Wu Acked-by: Yin Fengwei --- devicemodel/hw/platform/cmos_io.c | 13 +++++++++---- devicemodel/include/vmmapi.h | 4 ---- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/devicemodel/hw/platform/cmos_io.c b/devicemodel/hw/platform/cmos_io.c index 231030e02..842406aaf 100644 --- a/devicemodel/hw/platform/cmos_io.c +++ b/devicemodel/hw/platform/cmos_io.c @@ -42,6 +42,11 @@ #define CMOS_VRPMB_START 0x20 #define CMOS_VRPMB_END 0x9F +/* cmos buffer used to store write/read contents, + * and it should not be cleared when reboot + */ +static uint8_t cmos_buffer[CMOS_BUF_SIZE]; + /* #define CMOS_DEBUG */ #ifdef CMOS_DEBUG static FILE * dbg_file; @@ -90,14 +95,14 @@ cmos_io_handler(struct vmctx *ctx, int vcpu, int in, int port, int bytes, } if (in) { - *eax = ctx->cmos_buffer[buf_offset]; + *eax = cmos_buffer[buf_offset]; /* read to clear for Key range */ if ((buf_offset >= CMOS_VRPMB_START) && (buf_offset <= CMOS_VRPMB_END)) - ctx->cmos_buffer[buf_offset] = 0; + cmos_buffer[buf_offset] = 0; } else - ctx->cmos_buffer[buf_offset] = (uint8_t)*eax; + cmos_buffer[buf_offset] = (uint8_t)*eax; next_ops = 0; } @@ -110,7 +115,7 @@ INOUT_PORT(cmos_io, CMOS_DATA, IOPORT_F_INOUT, cmos_io_handler); int init_cmos_vrpmb(struct vmctx *ctx) { - uint8_t *vrpmb_buffer = &ctx->cmos_buffer[CMOS_VRPMB_START]; + uint8_t *vrpmb_buffer = &cmos_buffer[CMOS_VRPMB_START]; /* get vrpmb key, and store it to cmos buffer */ if (!get_vrpmb_key(vrpmb_buffer, RPMB_KEY_LEN)) { diff --git a/devicemodel/include/vmmapi.h b/devicemodel/include/vmmapi.h index adb2af106..2de0da5a2 100644 --- a/devicemodel/include/vmmapi.h +++ b/devicemodel/include/vmmapi.h @@ -63,10 +63,6 @@ struct vmctx { void *atkbdc_base; void *vrtc; void *ioc_dev; - /* cmos buffer used to store write/read contents, - * and it should not be cleared when reboot - */ - uint8_t cmos_buffer[CMOS_BUF_SIZE]; }; /*