register: 0.945 architecture: 0.893 performance: 0.889 device: 0.856 graphic: 0.799 network: 0.740 mistranslation: 0.716 kernel: 0.661 semantic: 0.601 peripherals: 0.594 socket: 0.553 x86: 0.540 permissions: 0.531 debug: 0.483 i386: 0.451 boot: 0.446 vnc: 0.428 arm: 0.427 hypervisor: 0.402 PID: 0.356 user-level: 0.321 KVM: 0.310 ppc: 0.290 TCG: 0.276 assembly: 0.269 VMM: 0.225 risc-v: 0.214 files: 0.183 virtual: 0.135 -------------------- register: 0.975 x86: 0.809 debug: 0.235 i386: 0.130 virtual: 0.125 TCG: 0.119 device: 0.109 assembly: 0.064 hypervisor: 0.047 peripherals: 0.046 semantic: 0.036 kernel: 0.035 user-level: 0.034 architecture: 0.034 files: 0.022 PID: 0.020 VMM: 0.015 network: 0.010 vnc: 0.009 socket: 0.008 performance: 0.008 permissions: 0.004 boot: 0.003 risc-v: 0.002 ppc: 0.002 graphic: 0.001 arm: 0.001 KVM: 0.001 mistranslation: 0.000 intel-hda: SD_STS different behavior for byte write vs. word write Description of problem: The Intel HDA SD_STS register is accessible two different ways in QEMU: either it's the top 8 bits of a 32-bit access or it's directly accessible as a byte. On reads, the register behavior for SD_STS is identical whether accessed as a 32-bit read or an 8-bit read. On writes, the behavior is different; when written to as an 8-bit write, the BCIS, FIFOE, and DESE bits implement the documented HDA behavior of RW1C (writing a 1 to a bit clears it). When written to as the top 8 bits of a 32-bit write, writing a 1 to a bit sets the bit -- so an attempt to clear a status bit instead unconditionally sets the status bit. Steps to reproduce: 1. Write 32 bits at SD_CTL address with bit 27 set (FIFOE). This should clear FIFOE, but does not. 2. Read back SD_STS (SD_CTL address + 3) as a byte. The FIFOE bit will be set. 3. Write 8 bits at SD_STS address with bit 3 set (FIFOE). This should clear FIFOE, and it does. 4. Read back SD_STS as a byte. The FIFOE bit will be cleared. Additional information: