All of lore.kernel.org
 help / color / mirror / Atom feed
* [Bug 1904490] [NEW] intel-hda: valid registers are unknown
@ 2020-11-17  3:05 Jacob
  2021-05-10  4:29 ` [Bug 1904490] " Thomas Huth
  2021-07-10  4:17 ` Launchpad Bug Tracker
  0 siblings, 2 replies; 3+ messages in thread
From: Jacob @ 2020-11-17  3:05 UTC (permalink / raw)
  To: qemu-devel

Public bug reported:

According to HDA specification, "3.1.2 General Register Behaviors and
Access Requirements":

"All controller registers must be addressable as byte, Word, and Dword
quantities."

But e.g. if you try the following to reset and enable the CORB, assuming
es:esi contains the base MMIO address of the controller,

 es or [esi+4bh], byte 80h   ; reset CORB
corbresetloop:
 es test [esi+4bh], byte 80h ; is HW done resetting yet?
 jnz corbreset1ok            ; yes, bit is now 1
 hlt                         ; wait a little bit
 jmp corbresetloop           ; and check again
corbreset1ok:
 es and [esi+4bh], byte 7fh  ; clear the bit

It will hang indefinitely because the bit never gets set, and if you
enable debug output of the controller with "-device intel-hda,debug=1",
you will see infinitely the line "unknown register, addr 0x4b" output.
The same code on a real hardware (I tried with ICH7M) works fine, as it
should according to the spec.

Host/guest/version does not matter (I am writing own drivers) --- as of
right now, latest version still has this code:

https://github.com/qemu/qemu/blob/master/hw/audio/intel-hda.c

which seems to emit "unknown register" message in intel_hda_reg_find(),
and this function does not take into account range of addresses that
each register occupies.

** Affects: qemu
     Importance: Undecided
         Status: New


** Tags: intel-hda

-- 
You received this bug notification because you are a member of qemu-
devel-ml, which is subscribed to QEMU.
https://bugs.launchpad.net/bugs/1904490

Title:
  intel-hda: valid registers are unknown

Status in QEMU:
  New

Bug description:
  According to HDA specification, "3.1.2 General Register Behaviors and
  Access Requirements":

  "All controller registers must be addressable as byte, Word, and Dword
  quantities."

  But e.g. if you try the following to reset and enable the CORB,
  assuming es:esi contains the base MMIO address of the controller,

   es or [esi+4bh], byte 80h   ; reset CORB
  corbresetloop:
   es test [esi+4bh], byte 80h ; is HW done resetting yet?
   jnz corbreset1ok            ; yes, bit is now 1
   hlt                         ; wait a little bit
   jmp corbresetloop           ; and check again
  corbreset1ok:
   es and [esi+4bh], byte 7fh  ; clear the bit

  It will hang indefinitely because the bit never gets set, and if you
  enable debug output of the controller with "-device intel-
  hda,debug=1", you will see infinitely the line "unknown register, addr
  0x4b" output. The same code on a real hardware (I tried with ICH7M)
  works fine, as it should according to the spec.

  Host/guest/version does not matter (I am writing own drivers) --- as
  of right now, latest version still has this code:

  https://github.com/qemu/qemu/blob/master/hw/audio/intel-hda.c

  which seems to emit "unknown register" message in
  intel_hda_reg_find(), and this function does not take into account
  range of addresses that each register occupies.

To manage notifications about this bug go to:
https://bugs.launchpad.net/qemu/+bug/1904490/+subscriptions


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2021-07-10  4:38 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-11-17  3:05 [Bug 1904490] [NEW] intel-hda: valid registers are unknown Jacob
2021-05-10  4:29 ` [Bug 1904490] " Thomas Huth
2021-07-10  4:17 ` Launchpad Bug Tracker

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.