On 7/12/23 23:51, Joelle van Dyne wrote:
Since this device is gated to only build for targets with the PC
configuration, we should use the ISA bus like with TPM TIS.

Signed-off-by: Joelle van Dyne <j...@getutm.app>

I think this patch is good but I'd like to try it with resuming and old VM 
snapshot and for this to work we need 04/11 to have the registers in the VM 
state.


   Stefan
---
  hw/tpm/tpm_crb.c | 52 ++++++++++++++++++++++++------------------------
  hw/tpm/Kconfig   |  2 +-
  2 files changed, 27 insertions(+), 27 deletions(-)

diff --git a/hw/tpm/tpm_crb.c b/hw/tpm/tpm_crb.c
index 07c6868d8d..6144081d30 100644
--- a/hw/tpm/tpm_crb.c
+++ b/hw/tpm/tpm_crb.c
@@ -22,6 +22,7 @@
  #include "hw/qdev-properties.h"
  #include "hw/pci/pci_ids.h"
  #include "hw/acpi/tpm.h"
+#include "hw/isa/isa.h"
  #include "migration/vmstate.h"
  #include "sysemu/tpm_backend.h"
  #include "sysemu/tpm_util.h"
@@ -34,7 +35,7 @@
  #include "tpm_crb.h"

  struct CRBState {
-    DeviceState parent_obj;
+    ISADevice parent_obj;

      TPMCRBState state;
  };
@@ -43,49 +44,49 @@ typedef struct CRBState CRBState;
  DECLARE_INSTANCE_CHECKER(CRBState, CRB,
                           TYPE_TPM_CRB)

-static void tpm_crb_none_request_completed(TPMIf *ti, int ret)
+static void tpm_crb_isa_request_completed(TPMIf *ti, int ret)
  {
      CRBState *s = CRB(ti);

      tpm_crb_request_completed(&s->state, ret);
  }

-static enum TPMVersion tpm_crb_none_get_version(TPMIf *ti)
+static enum TPMVersion tpm_crb_isa_get_version(TPMIf *ti)
  {
      CRBState *s = CRB(ti);

      return tpm_crb_get_version(&s->state);
  }

-static int tpm_crb_none_pre_save(void *opaque)
+static int tpm_crb_isa_pre_save(void *opaque)
  {
      CRBState *s = opaque;

      return tpm_crb_pre_save(&s->state);
  }

-static const VMStateDescription vmstate_tpm_crb_none = {
+static const VMStateDescription vmstate_tpm_crb_isa = {
      .name = "tpm-crb",
-    .pre_save = tpm_crb_none_pre_save,
+    .pre_save = tpm_crb_isa_pre_save,
      .fields = (VMStateField[]) {
          VMSTATE_END_OF_LIST(),
      }
  };

-static Property tpm_crb_none_properties[] = {
+static Property tpm_crb_isa_properties[] = {
      DEFINE_PROP_TPMBE("tpmdev", CRBState, state.tpmbe),
      DEFINE_PROP_BOOL("ppi", CRBState, state.ppi_enabled, true),
      DEFINE_PROP_END_OF_LIST(),
  };

-static void tpm_crb_none_reset(void *dev)
+static void tpm_crb_isa_reset(void *dev)
  {
      CRBState *s = CRB(dev);

      return tpm_crb_reset(&s->state, TPM_CRB_ADDR_BASE);
  }

-static void tpm_crb_none_realize(DeviceState *dev, Error **errp)
+static void tpm_crb_isa_realize(DeviceState *dev, Error **errp)
  {
      CRBState *s = CRB(dev);

@@ -100,52 +101,51 @@ static void tpm_crb_none_realize(DeviceState *dev, Error 
**errp)

      tpm_crb_init_memory(OBJECT(s), &s->state, errp);

-    memory_region_add_subregion(get_system_memory(),
+    memory_region_add_subregion(isa_address_space(ISA_DEVICE(dev)),
          TPM_CRB_ADDR_BASE, &s->state.mmio);

      if (s->state.ppi_enabled) {
-        memory_region_add_subregion(get_system_memory(),
+        memory_region_add_subregion(isa_address_space(ISA_DEVICE(dev)),
              TPM_PPI_ADDR_BASE, &s->state.ppi.ram);
      }

      if (xen_enabled()) {
-        tpm_crb_none_reset(dev);
+        tpm_crb_isa_reset(dev);
      } else {
-        qemu_register_reset(tpm_crb_none_reset, dev);
+        qemu_register_reset(tpm_crb_isa_reset, dev);
      }
  }

-static void tpm_crb_none_class_init(ObjectClass *klass, void *data)
+static void tpm_crb_isa_class_init(ObjectClass *klass, void *data)
  {
      DeviceClass *dc = DEVICE_CLASS(klass);
      TPMIfClass *tc = TPM_IF_CLASS(klass);

-    dc->realize = tpm_crb_none_realize;
-    device_class_set_props(dc, tpm_crb_none_properties);
-    dc->vmsd  = &vmstate_tpm_crb_none;
+    dc->realize = tpm_crb_isa_realize;
+    device_class_set_props(dc, tpm_crb_isa_properties);
+    dc->vmsd  = &vmstate_tpm_crb_isa;
      dc->user_creatable = true;
      tc->model = TPM_MODEL_TPM_CRB;
-    tc->get_version = tpm_crb_none_get_version;
-    tc->request_completed = tpm_crb_none_request_completed;
+    tc->get_version = tpm_crb_isa_get_version;
+    tc->request_completed = tpm_crb_isa_request_completed;

      set_bit(DEVICE_CATEGORY_MISC, dc->categories);
  }

-static const TypeInfo tpm_crb_none_info = {
+static const TypeInfo tpm_crb_isa_info = {
      .name = TYPE_TPM_CRB,
-    /* could be TYPE_SYS_BUS_DEVICE (or LPC etc) */
-    .parent = TYPE_DEVICE,
+    .parent = TYPE_ISA_DEVICE,
      .instance_size = sizeof(CRBState),
-    .class_init  = tpm_crb_none_class_init,
+    .class_init  = tpm_crb_isa_class_init,
      .interfaces = (InterfaceInfo[]) {
          { TYPE_TPM_IF },
          { }
      }
  };

-static void tpm_crb_none_register(void)
+static void tpm_crb_isa_register(void)
  {
-    type_register_static(&tpm_crb_none_info);
+    type_register_static(&tpm_crb_isa_info);
  }

-type_init(tpm_crb_none_register)
+type_init(tpm_crb_isa_register)
diff --git a/hw/tpm/Kconfig b/hw/tpm/Kconfig
index a46663288c..1fd73fe617 100644
--- a/hw/tpm/Kconfig
+++ b/hw/tpm/Kconfig
@@ -22,7 +22,7 @@ config TPM_TIS

  config TPM_CRB
      bool
-    depends on TPM && PC
+    depends on TPM && ISA_BUS
      select TPM_BACKEND

  config TPM_SPAPR

Reply via email to