On 1/24/24 13:24, Tom Lendacky wrote:
On 1/24/24 10:47, Laszlo Ersek wrote:
On 1/24/24 16:31, Gerd Hoffmann wrote:
Neat when doing ResetVector coding.

Signed-off-by: Gerd Hoffmann <kra...@redhat.com>
---
  OvmfPkg/ResetVector/DebugCon.asm      | 43 +++++++++++++++++++++++++++
  OvmfPkg/ResetVector/ResetVector.nasmb |  2 +-
  2 files changed, 44 insertions(+), 1 deletion(-)
  create mode 100644 OvmfPkg/ResetVector/DebugCon.asm

diff --git a/OvmfPkg/ResetVector/DebugCon.asm b/OvmfPkg/ResetVector/DebugCon.asm
new file mode 100644
index 000000000000..9c57d1a52c75
--- /dev/null
+++ b/OvmfPkg/ResetVector/DebugCon.asm
@@ -0,0 +1,43 @@
+;------------------------------------------------------------------------------
+; @file
+; qemu debug console support macros (based on serial port macros)
+;
+; Copyright (c) 2008 - 2018, Intel Corporation. All rights reserved.<BR>
+; SPDX-License-Identifier: BSD-2-Clause-Patent
+;
+;------------------------------------------------------------------------------
+
+%macro  outToDebugPort 1
+    mov     dx, 0x402
+    mov     al, %1
+    out     dx, al
+%endmacro
+
+%macro  debugShowCharacter 1
+    outToDebugPort %1
+%endmacro
+
+%macro  debugShowHexDigit 1
+  %if (%1 < 0xa)
+    debugShowCharacter BYTE ('0' + (%1))
+  %else
+    debugShowCharacter BYTE ('a' + ((%1) - 0xa))
+  %endif
+%endmacro
+
+%macro  debugNewline 0
+    debugShowCharacter `\r`
+    debugShowCharacter `\n`
+%endmacro
+
+%macro  debugShowPostCode 1
+    debugShowHexDigit (((%1) >> 4) & 0xf)
+    debugShowHexDigit ((%1) & 0xf)
+    debugNewline
+%endmacro
+
+BITS    16
+
+%macro  debugInitialize 0
+    ; not required
+%endmacro
diff --git a/OvmfPkg/ResetVector/ResetVector.nasmb b/OvmfPkg/ResetVector/ResetVector.nasmb
index 5832aaa8abf7..f1655ddfcde3 100644
--- a/OvmfPkg/ResetVector/ResetVector.nasmb
+++ b/OvmfPkg/ResetVector/ResetVector.nasmb
@@ -41,7 +41,7 @@
  %elifdef DEBUG_SERIAL
    %include "SerialDebug.asm"
  %else
-  %include "DebugDisabled.asm"
+  %include "DebugCon.asm"
  %endif
  %include "Ia32/SearchForBfvBase.asm"

(1) How much output does this produce? Trapping to QEMU for every single
character written to the debug console is very slow. If it only produces
a few bytes, that should be OK.

(2) debugInitialize could actually be put to use; the presence of the
QEMU debug console is detectable. We'd need to allocate a single byte
somewhere, detect the console in debugInitialize, save the result in
that byte, then check the byte in debugShowPostCode. Eliminates even
those few (?) traps if there is no debug console configured.

(3) I'm already hating myself for asking about this, but... is there a
way for only customizing debugInitialize and debugShowCharacter? The
rest is common with "SerialDebug.asm", and I wish I hadn't had to review
those (unchanged) macros, they make my eyes bleed :/

Anyway, if you think any of these (or all of these!) means too much
work, I'm OK with the patch going-in as is.

My concern would be around SEV-ES/SEV-SNP guest usage. The in and out instruction will generate a #VC and would require a #VC handler to be in place.

I'm pretty sure this will cause issues for those types of guests, but it might be a few days before I can get to it to verify. @Gerd, were you able to test this with those types of guests?

Had a meeting get canceled and so got a chance to test this. As I thought, this causes SEV-ES/SEV-SNP guest failures.

Thanks,
Tom


Thanks,
Tom


I'm a bit concerned about (1), TBH.

Laszlo



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#114352): https://edk2.groups.io/g/devel/message/114352
Mute This Topic: https://groups.io/mt/103933942/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to