diff options
| -rw-r--r-- | MAINTAINERS | 1 | ||||
| -rw-r--r-- | hw/hppa/machine.c | 17 | ||||
| -rw-r--r-- | hw/tpm/tpm_crb.c | 48 | ||||
| -rw-r--r-- | hw/tpm/tpm_tis.c | 7 | ||||
| -rw-r--r-- | hw/tpm/tpm_util.c | 6 | ||||
| -rw-r--r-- | hw/tpm/tpm_util.h | 15 | ||||
| -rwxr-xr-x | pc-bios/hppa-firmware.img | bin | 461352 -> 215696 bytes | |||
| m--------- | roms/seabios-hppa | 0 | ||||
| -rw-r--r-- | tests/Makefile.include | 2 | ||||
| -rw-r--r-- | tests/boot-serial-test.c | 1 |
10 files changed, 59 insertions, 38 deletions
diff --git a/MAINTAINERS b/MAINTAINERS index 0f952d46ce..bbc3a617c2 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1602,6 +1602,7 @@ F: include/hw/acpi/tpm.h F: include/sysemu/tpm* F: qapi/tpm.json F: backends/tpm.c +T: git git://github.com/stefanberger/qemu-tpm.git tpm-next Checkpatch S: Odd Fixes diff --git a/hw/hppa/machine.c b/hw/hppa/machine.c index afd3867313..19033e268d 100644 --- a/hw/hppa/machine.c +++ b/hw/hppa/machine.c @@ -19,6 +19,7 @@ #include "hw/hppa/hppa_sys.h" #include "qemu/cutils.h" #include "qapi/error.h" +#include "qemu/log.h" #define MAX_IDE_BUS 2 @@ -111,7 +112,6 @@ static void machine_hppa_init(MachineState *machine) uint32_t addr = DINO_UART_HPA + 0x800; serial_mm_init(addr_space, addr, 0, serial_irq, 115200, serial_hds[0], DEVICE_BIG_ENDIAN); - fprintf(stderr, "Serial port created at 0x%x\n", addr); } /* SCSI disk setup. */ @@ -146,9 +146,9 @@ static void machine_hppa_init(MachineState *machine) error_report("could not load firmware '%s'", firmware_filename); exit(1); } - fprintf(stderr, "Firmware loaded at 0x%08" PRIx64 "-0x%08" PRIx64 - ", entry at 0x%08" PRIx64 ".\n", - firmware_low, firmware_high, firmware_entry); + qemu_log_mask(CPU_LOG_PAGE, "Firmware loaded at 0x%08" PRIx64 + "-0x%08" PRIx64 ", entry at 0x%08" PRIx64 ".\n", + firmware_low, firmware_high, firmware_entry); if (firmware_low < ram_size || firmware_high >= FIRMWARE_END) { error_report("Firmware overlaps with memory or IO space"); exit(1); @@ -163,7 +163,6 @@ static void machine_hppa_init(MachineState *machine) /* Load kernel */ if (kernel_filename) { - fprintf(stderr, "LOADING kernel '%s'\n", kernel_filename); size = load_elf(kernel_filename, &cpu_hppa_to_phys, NULL, &kernel_entry, &kernel_low, &kernel_high, true, EM_PARISC, 0, 0); @@ -177,10 +176,10 @@ static void machine_hppa_init(MachineState *machine) error_report("could not load kernel '%s'", kernel_filename); exit(1); } - - fprintf(stderr, "Kernel loaded at 0x%08" PRIx64 "-0x%08" PRIx64 - ", entry at 0x%08" PRIx64 ", size %ld kB.\n", - kernel_low, kernel_high, kernel_entry, size / 1024); + qemu_log_mask(CPU_LOG_PAGE, "Kernel loaded at 0x%08" PRIx64 + "-0x%08" PRIx64 ", entry at 0x%08" PRIx64 + ", size %ld kB.\n", + kernel_low, kernel_high, kernel_entry, size / 1024); if (kernel_cmdline) { cpu[0]->env.gr[24] = 0x4000; diff --git a/hw/tpm/tpm_crb.c b/hw/tpm/tpm_crb.c index 687d2557b7..b5b8256360 100644 --- a/hw/tpm/tpm_crb.c +++ b/hw/tpm/tpm_crb.c @@ -26,6 +26,7 @@ #include "hw/acpi/tpm.h" #include "migration/vmstate.h" #include "sysemu/tpm_backend.h" +#include "sysemu/reset.h" #include "tpm_int.h" #include "tpm_util.h" @@ -210,29 +211,10 @@ static Property tpm_crb_properties[] = { DEFINE_PROP_END_OF_LIST(), }; -static void tpm_crb_realize(DeviceState *dev, Error **errp) +static void tpm_crb_reset(void *dev) { CRBState *s = CRB(dev); - if (!tpm_find()) { - error_setg(errp, "at most one TPM device is permitted"); - return; - } - if (!s->tpmbe) { - error_setg(errp, "'tpmdev' property is required"); - return; - } - - memory_region_init_io(&s->mmio, OBJECT(s), &tpm_crb_memory_ops, s, - "tpm-crb-mmio", sizeof(s->regs)); - memory_region_init_ram(&s->cmdmem, OBJECT(s), - "tpm-crb-cmd", CRB_CTRL_CMD_SIZE, errp); - - memory_region_add_subregion(get_system_memory(), - TPM_CRB_ADDR_BASE, &s->mmio); - memory_region_add_subregion(get_system_memory(), - TPM_CRB_ADDR_BASE + sizeof(s->regs), &s->cmdmem); - tpm_backend_reset(s->tpmbe); ARRAY_FIELD_DP32(s->regs, CRB_INTF_ID, @@ -267,6 +249,32 @@ static void tpm_crb_realize(DeviceState *dev, Error **errp) tpm_backend_startup_tpm(s->tpmbe, s->be_buffer_size); } +static void tpm_crb_realize(DeviceState *dev, Error **errp) +{ + CRBState *s = CRB(dev); + + if (!tpm_find()) { + error_setg(errp, "at most one TPM device is permitted"); + return; + } + if (!s->tpmbe) { + error_setg(errp, "'tpmdev' property is required"); + return; + } + + memory_region_init_io(&s->mmio, OBJECT(s), &tpm_crb_memory_ops, s, + "tpm-crb-mmio", sizeof(s->regs)); + memory_region_init_ram(&s->cmdmem, OBJECT(s), + "tpm-crb-cmd", CRB_CTRL_CMD_SIZE, errp); + + memory_region_add_subregion(get_system_memory(), + TPM_CRB_ADDR_BASE, &s->mmio); + memory_region_add_subregion(get_system_memory(), + TPM_CRB_ADDR_BASE + sizeof(s->regs), &s->cmdmem); + + qemu_register_reset(tpm_crb_reset, dev); +} + static void tpm_crb_class_init(ObjectClass *klass, void *data) { DeviceClass *dc = DEVICE_CLASS(klass); diff --git a/hw/tpm/tpm_tis.c b/hw/tpm/tpm_tis.c index 08f41d2707..f81168a7e3 100644 --- a/hw/tpm/tpm_tis.c +++ b/hw/tpm/tpm_tis.c @@ -946,11 +946,6 @@ static const MemoryRegionOps tpm_tis_memory_ops = { }, }; -static int tpm_tis_do_startup_tpm(TPMState *s, size_t buffersize) -{ - return tpm_backend_startup_tpm(s->be_driver, buffersize); -} - /* * Get the TPMVersion of the backend device being used */ @@ -1005,7 +1000,7 @@ static void tpm_tis_reset(DeviceState *dev) s->rw_offset = 0; } - tpm_tis_do_startup_tpm(s, s->be_buffer_size); + tpm_backend_startup_tpm(s->be_driver, s->be_buffer_size); } static const VMStateDescription vmstate_tpm_tis = { diff --git a/hw/tpm/tpm_util.c b/hw/tpm/tpm_util.c index 8abde59915..2de52a0f1b 100644 --- a/hw/tpm/tpm_util.c +++ b/hw/tpm/tpm_util.c @@ -106,9 +106,9 @@ const PropertyInfo qdev_prop_tpm = { void tpm_util_write_fatal_error_response(uint8_t *out, uint32_t out_len) { if (out_len >= sizeof(struct tpm_resp_hdr)) { - stw_be_p(out, TPM_TAG_RSP_COMMAND); - stl_be_p(out + 2, sizeof(struct tpm_resp_hdr)); - stl_be_p(out + 6, TPM_FAIL); + tpm_cmd_set_tag(out, TPM_TAG_RSP_COMMAND); + tpm_cmd_set_size(out, sizeof(struct tpm_resp_hdr)); + tpm_cmd_set_error(out, TPM_FAIL); } } diff --git a/hw/tpm/tpm_util.h b/hw/tpm/tpm_util.h index f003d15615..f397ac21b8 100644 --- a/hw/tpm/tpm_util.h +++ b/hw/tpm/tpm_util.h @@ -36,11 +36,21 @@ static inline uint16_t tpm_cmd_get_tag(const void *b) return lduw_be_p(b); } +static inline void tpm_cmd_set_tag(void *b, uint16_t tag) +{ + stw_be_p(b, tag); +} + static inline uint32_t tpm_cmd_get_size(const void *b) { return ldl_be_p(b + 2); } +static inline void tpm_cmd_set_size(void *b, uint32_t size) +{ + stl_be_p(b + 2, size); +} + static inline uint32_t tpm_cmd_get_ordinal(const void *b) { return ldl_be_p(b + 6); @@ -51,6 +61,11 @@ static inline uint32_t tpm_cmd_get_errcode(const void *b) return ldl_be_p(b + 6); } +static inline void tpm_cmd_set_error(void *b, uint32_t error) +{ + stl_be_p(b + 6, error); +} + int tpm_util_get_buffer_size(int tpm_fd, TPMVersion tpm_version, size_t *buffersize); diff --git a/pc-bios/hppa-firmware.img b/pc-bios/hppa-firmware.img index ae833437a7..d2098f1fd9 100755 --- a/pc-bios/hppa-firmware.img +++ b/pc-bios/hppa-firmware.img Binary files differdiff --git a/roms/seabios-hppa b/roms/seabios-hppa -Subproject 8fa4ca9935669414a824ecda24f6e70c36e8dc9 +Subproject 649e6202b8d65d46c69f542b1380f840fbe8ab1 diff --git a/tests/Makefile.include b/tests/Makefile.include index 3258b9c22a..f41da235ae 100644 --- a/tests/Makefile.include +++ b/tests/Makefile.include @@ -299,6 +299,8 @@ gcov-files-x86_64-y = $(subst i386-softmmu/,x86_64-softmmu/,$(gcov-files-i386-y) check-qtest-alpha-y = tests/boot-serial-test$(EXESUF) +check-qtest-hppa-y = tests/boot-serial-test$(EXESUF) + check-qtest-m68k-y = tests/boot-serial-test$(EXESUF) check-qtest-microblaze-y = tests/boot-serial-test$(EXESUF) diff --git a/tests/boot-serial-test.c b/tests/boot-serial-test.c index 418c5b92dc..ea87a80be7 100644 --- a/tests/boot-serial-test.c +++ b/tests/boot-serial-test.c @@ -87,6 +87,7 @@ static testdef_t tests[] = { sizeof(kernel_plml605), kernel_plml605 }, { "moxie", "moxiesim", "", "TT", sizeof(bios_moxiesim), 0, bios_moxiesim }, { "arm", "raspi2", "", "TT", sizeof(bios_raspi2), 0, bios_raspi2 }, + { "hppa", "hppa", "", "SeaBIOS wants SYSTEM HALT" }, { NULL } }; |