|
@@ -16,8 +16,30 @@
|
|
#include "qapi/error.h"
|
|
#include "qapi/error.h"
|
|
#include "cpu.h"
|
|
#include "cpu.h"
|
|
#include "sysemu/memory_mapping.h"
|
|
#include "sysemu/memory_mapping.h"
|
|
|
|
+#include "sysemu/reset.h"
|
|
#include "migration/vmstate.h"
|
|
#include "migration/vmstate.h"
|
|
#include "tpm_ppi.h"
|
|
#include "tpm_ppi.h"
|
|
|
|
+#include "trace.h"
|
|
|
|
+
|
|
|
|
+void tpm_ppi_reset(TPMPPI *tpmppi)
|
|
|
|
+{
|
|
|
|
+ if (tpmppi->buf[0x15a /* movv, docs/specs/tpm.txt */] & 0x1) {
|
|
|
|
+ GuestPhysBlockList guest_phys_blocks;
|
|
|
|
+ GuestPhysBlock *block;
|
|
|
|
+
|
|
|
|
+ guest_phys_blocks_init(&guest_phys_blocks);
|
|
|
|
+ guest_phys_blocks_append(&guest_phys_blocks);
|
|
|
|
+ QTAILQ_FOREACH(block, &guest_phys_blocks.head, next) {
|
|
|
|
+ trace_tpm_ppi_memset(block->host_addr,
|
|
|
|
+ block->target_end - block->target_start);
|
|
|
|
+ memset(block->host_addr, 0,
|
|
|
|
+ block->target_end - block->target_start);
|
|
|
|
+ memory_region_set_dirty(block->mr, 0,
|
|
|
|
+ block->target_end - block->target_start);
|
|
|
|
+ }
|
|
|
|
+ guest_phys_blocks_free(&guest_phys_blocks);
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
|
|
void tpm_ppi_init(TPMPPI *tpmppi, struct MemoryRegion *m,
|
|
void tpm_ppi_init(TPMPPI *tpmppi, struct MemoryRegion *m,
|
|
hwaddr addr, Object *obj)
|
|
hwaddr addr, Object *obj)
|