@samitouri / QOSamiQemu / commits / baf15a2cf2

hw/misc/aspeed_hace: Enable the crypto command on the AST2700

With direct/scatter-gather access, 64-bit DMA and AES-GCM all in place, the AST2700 crypto engine is now fully modelled. Drop its temporary interrupt-only workaround so the crypto command runs for real, like the other HACE variants. Signed-off-by: Jamin Lin <jamin_lin@aspeedtech.com> Reviewed-by: Kane Chen <kane_chen@aspeedtech.com> Link: https://lore.kernel.org/qemu-devel/20260811060115.1849266-16-jamin_lin@aspeedtech.com Signed-off-by: Cédric Le Goater <clg@redhat.com>

Jamin Lin committed Aug 11, 2026 at 06:01 UTC baf15a2cf21c75ec9c3f068991cf28844887bf74
2 files changed +1 -15
hw/misc/aspeed_hace.c
+1 -14
@@ -1005,14 +1005,7 @@ static void aspeed_hace_write(void *opaque, hwaddr addr, uint64_t data,
1005 break;
1006 }
1007 case R_CRYPT_CMD:
1008 - /*
1009 - * The AST2700 crypto engine needs 64-bit DMA and AES-GCM, which are
1010 - * added later; until then it keeps the temporary workaround of only
1011 - * raising the completion interrupt without running the command.
1012 - */
1013 - if (!ahc->raise_crypt_interrupt_workaround) {
1014 - do_crypt_operation(s, data);
1015 - }
1008 + do_crypt_operation(s, data);
1009
1010 /* Hardware raises the crypt interrupt once the command finishes. */
1011 s->regs[R_STATUS] |= CRYPT_IRQ;
@@ -1214,12 +1207,6 @@ static void aspeed_ast2700_hace_class_init(ObjectClass *klass, const void *data)
1207 ahc->dest_hi_mask = 0x00000003;
1208 ahc->key_hi_mask = 0x00000003;
1209
1217 - /*
1218 - * Currently, it does not support the CRYPT command. Instead, it only
1219 - * sends an interrupt to notify the firmware that the crypt command
1220 - * has completed. It is a temporary workaround.
1221 - */
1222 - ahc->raise_crypt_interrupt_workaround = true;
1210 ahc->has_dma64 = true;
1211 }
1212
include/hw/misc/aspeed_hace.h
-1
@@ -49,7 +49,6 @@ struct AspeedHACEClass {
49 uint32_t key_mask;
50 uint32_t hash_mask;
51 uint64_t nr_regs;
52 - bool raise_crypt_interrupt_workaround;
52 uint32_t src_hi_mask;
53 uint32_t dest_hi_mask;
54 uint32_t key_hi_mask;