public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "duke.zhai via groups.io" <duke.zhai=amd.com@groups.io>
To: <devel@edk2.groups.io>
Cc: Ken Yao <ken.yao@amd.com>, Duke Zhai <duke.zhai@amd.com>,
	Igniculus Fu <igniculus.fu@amd.com>,
	Abner Chang <abner.chang@amd.com>
Subject: [edk2-devel] [PATCH 22/33] AMD/VanGoghBoard: Check in Vtf0.
Date: Thu, 18 Jan 2024 14:50:35 +0800	[thread overview]
Message-ID: <20240118065046.961-23-duke.zhai@amd.com> (raw)
In-Reply-To: <20240118065046.961-1-duke.zhai@amd.com>

From: Duke Zhai <Duke.Zhai@amd.com>


BZ #:4640

Initial Vtf0 module.

This module includes all assembly code files of reset vector.



Signed-off-by: Eric Xing <eric.xing@amd.com>

Cc: Ken Yao <ken.yao@amd.com>

Cc: Duke Zhai <duke.zhai@amd.com>

Cc: Igniculus Fu <igniculus.fu@amd.com>

Cc: Abner Chang <abner.chang@amd.com>

---

 .../ResetVector/Vtf0/CommonMacros.inc         |  34 +++

 .../ResetVector/Vtf0/DebugDisabled.asm        |  28 +++

 .../ResetVector/Vtf0/Ia16/Init16.asm          |  58 +++++

 .../ResetVector/Vtf0/Ia16/Real16ToFlat32.asm  | 145 +++++++++++++

 .../ResetVector/Vtf0/Ia16/ResetVectorVtf0.asm | 115 ++++++++++

 .../ResetVector/Vtf0/Ia32/Flat32ToFlat64.asm  |  47 ++++

 .../ResetVector/Vtf0/Ia32/PageTables64.asm    |  32 +++

 .../Vtf0/Ia32/SearchForBfvBase.asm            |  91 ++++++++

 .../Vtf0/Ia32/SearchForSecEntry.asm           | 202 ++++++++++++++++++

 .../edk2/UefiCpuPkg/ResetVector/Vtf0/Main.asm | 134 ++++++++++++

 .../ResetVector/Vtf0/Port80Debug.asm          |  30 +++

 .../UefiCpuPkg/ResetVector/Vtf0/PostCodes.inc |  27 +++

 .../ResetVector/Vtf0/ResetVector.uni          | Bin 0 -> 1158 bytes

 .../ResetVector/Vtf0/ResetVectorExtra.uni     | Bin 0 -> 1080 bytes

 .../ResetVector/Vtf0/SerialDebug.asm          | 134 ++++++++++++

 .../edk2/UefiCpuPkg/ResetVector/Vtf0/Vtf0.inf |  51 +++++

 .../UefiCpuPkg/ResetVector/Vtf0/Vtf0.nasmb    |  74 +++++++

 .../ResetVector/Vtf0/X64/PageTables.asm       |  80 +++++++

 18 files changed, 1282 insertions(+)

 create mode 100644 Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/CommonMacros.inc

 create mode 100644 Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/DebugDisabled.asm

 create mode 100644 Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Ia16/Init16.asm

 create mode 100644 Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Ia16/Real16ToFlat32.asm

 create mode 100644 Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Ia16/ResetVectorVtf0.asm

 create mode 100644 Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Ia32/Flat32ToFlat64.asm

 create mode 100644 Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Ia32/PageTables64.asm

 create mode 100644 Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Ia32/SearchForBfvBase.asm

 create mode 100644 Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Ia32/SearchForSecEntry.asm

 create mode 100644 Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Main.asm

 create mode 100644 Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Port80Debug.asm

 create mode 100644 Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/PostCodes.inc

 create mode 100644 Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/ResetVector.uni

 create mode 100644 Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/ResetVectorExtra.uni

 create mode 100644 Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/SerialDebug.asm

 create mode 100644 Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Vtf0.inf

 create mode 100644 Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Vtf0.nasmb

 create mode 100644 Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/X64/PageTables.asm



diff --git a/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/CommonMacros.inc b/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/CommonMacros.inc

new file mode 100644

index 0000000000..add362fc64

--- /dev/null

+++ b/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/CommonMacros.inc

@@ -0,0 +1,34 @@

+;/** @file

+; Common macros used in the ResetVector VTF module.

+;

+; Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.<BR>

+; SPDX-License-Identifier: BSD-2-Clause-Patent

+;

+;**/

+; This file includes code originally published under the following license.

+;------------------------------------------------------------------------------

+; @file

+; Common macros used in the ResetVector VTF module.

+;

+; Copyright (c) 2008, Intel Corporation. All rights reserved.<BR>

+; SPDX-License-Identifier: BSD-2-Clause-Patent

+;

+;------------------------------------------------------------------------------

+

+%define ADDR16_OF(x) (0x10000 - fourGigabytes + x)

+%define ADDR_OF(x) (0x100000000 - fourGigabytes + x)

+%define ADDR_OF_MEM(x) (VIRTUAL4G - fourGigabytes + x)

+%define SMM_RESUME_SIGNATURE 0x55AABB66

+%macro  OneTimeCall 1

+    jmp     %1

+%1 %+ OneTimerCallReturn:

+%endmacro

+

+%macro  OneTimeCallRet 1

+    jmp     %1 %+ OneTimerCallReturn

+%endmacro

+

+StartOfResetVectorCode:

+

+%define ADDR_OF_START_OF_RESET_CODE ADDR_OF(StartOfResetVectorCode)

+

diff --git a/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/DebugDisabled.asm b/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/DebugDisabled.asm

new file mode 100644

index 0000000000..eb3d105bfc

--- /dev/null

+++ b/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/DebugDisabled.asm

@@ -0,0 +1,28 @@

+;/** @file

+; Debug disabled

+;

+; Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.<BR>

+; SPDX-License-Identifier: BSD-2-Clause-Patent

+;

+;**/

+; This file includes code originally published under the following license.

+;------------------------------------------------------------------------------

+; @file

+; Debug disabled

+;

+; Copyright (c) 2009, Intel Corporation. All rights reserved.<BR>

+; SPDX-License-Identifier: BSD-2-Clause-Patent

+;

+;------------------------------------------------------------------------------

+

+BITS    16

+

+%macro  debugInitialize 0

+    ;

+    ; No initialization is required

+    ;

+%endmacro

+

+%macro  debugShowPostCode 1

+%endmacro

+

diff --git a/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Ia16/Init16.asm b/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Ia16/Init16.asm

new file mode 100644

index 0000000000..d2d4e16a4b

--- /dev/null

+++ b/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Ia16/Init16.asm

@@ -0,0 +1,58 @@

+;/** @file

+; 16-bit initialization code

+;

+; Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.<BR>

+; SPDX-License-Identifier: BSD-2-Clause-Patent

+;

+;**/

+; This file includes code originally published under the following license.

+;------------------------------------------------------------------------------

+; @file

+; 16-bit initialization code

+;

+; Copyright (c) 2008 - 2009, Intel Corporation. All rights reserved.<BR>

+; SPDX-License-Identifier: BSD-2-Clause-Patent

+;

+;------------------------------------------------------------------------------

+

+

+BITS    16

+

+ALIGN   4

+SMMResumeInfo: ;; This offset can bie found as 0xFFFFFFF5 + word [0xFFFFFFF3] - 0x10(16)

+      DD ADDR_OF_MEM(GDT_BASE)        ; GDT base address

+      DW LINEAR_CODE_SEL              ; code segment

+      DW LINEAR_SEL                   ; data segment

+      DD ADDR_OF_MEM(Main32)          ; Offset of our 32 bit code

+      DD SMM_RESUME_SIGNATURE

+

+;

+; @param[out] DI    'BP' to indicate boot-strap processor

+;

+EarlyBspInitReal16:

+    mov     di, 'BP'

+    jmp     short Main16

+

+;

+; @param[out] DI    'AP' to indicate application processor

+;

+EarlyApInitReal16:

+    mov     di, 'AP'

+    jmp     short Main16

+

+;

+; Modified:  EAX

+;

+; @param[in]  EAX   Initial value of the EAX register (BIST: Built-in Self Test)

+; @param[out] ESP   Initial value of the EAX register (BIST: Built-in Self Test)

+;

+EarlyInit16:

+    ;

+    ; ESP -  Initial value of the EAX register (BIST: Built-in Self Test)

+    ;

+    mov     esp, eax

+

+    debugInitialize

+

+    OneTimeCallRet EarlyInit16

+

diff --git a/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Ia16/Real16ToFlat32.asm b/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Ia16/Real16ToFlat32.asm

new file mode 100644

index 0000000000..1cd770f930

--- /dev/null

+++ b/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Ia16/Real16ToFlat32.asm

@@ -0,0 +1,145 @@

+;/** @file

+; Transition from 16 bit real mode into 32 bit flat protected mode

+;

+; Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.<BR>

+; SPDX-License-Identifier: BSD-2-Clause-Patent

+;

+;**/

+; This file includes code originally published under the following license.

+;------------------------------------------------------------------------------

+; @file

+; Transition from 16 bit real mode into 32 bit flat protected mode

+;

+; Copyright (c) 2008 - 2010, Intel Corporation. All rights reserved.<BR>

+; SPDX-License-Identifier: BSD-2-Clause-Patent

+;

+;------------------------------------------------------------------------------

+

+%define SEC_DEFAULT_CR0  0x40000023

+%define SEC_DEFAULT_CR4  0x640

+

+BITS    16

+

+;

+; Modified:  EAX, EBX

+;

+; @param[out]     DS       Selector allowing flat access to all addresses

+; @param[out]     ES       Selector allowing flat access to all addresses

+; @param[out]     FS       Selector allowing flat access to all addresses

+; @param[out]     GS       Selector allowing flat access to all addresses

+; @param[out]     SS       Selector allowing flat access to all addresses

+;

+TransitionFromReal16To32BitFlat:

+    movd    mm0, eax                    ;   ( BIST )

+

+    debugShowPostCode POSTCODE_16BIT_MODE

+

+    cli

+

+    mov     bx, ADDR16_OF(gdtrmem)

+

+o32 lgdt    [cs:bx]

+

+    mov     eax, SEC_DEFAULT_CR0

+    mov     cr0, eax

+

+    mov     edx, VIRTUAL4G

+    jmp     LINEAR_CODE_SEL:dword ADDR_OF_MEM(jumpTo32BitAndLandHere)

+

+BITS    32

+jumpTo32BitAndLandHere:

+

+    mov     eax, SEC_DEFAULT_CR4

+    mov     cr4, eax

+

+    debugShowPostCode POSTCODE_32BIT_MODE

+

+    mov     ax, LINEAR_SEL

+    mov     ds, ax

+    mov     es, ax

+    mov     fs, ax

+    mov     gs, ax

+    mov     ss, ax

+

+    OneTimeCallRet TransitionFromReal16To32BitFlat

+

+ALIGN   2

+

+gdtrmem:

+    dw      GDT_END - GDT_BASE - 1   ; GDT limit

+    dd      ADDR_OF_MEM(GDT_BASE)

+

+gdtr:

+    dw      GDT_END - GDT_BASE - 1   ; GDT limit

+    dd      ADDR_OF(GDT_BASE)

+

+ALIGN   16

+

+;

+; Macros for GDT entries

+;

+

+%define  PRESENT_FLAG(p) (p << 7)

+%define  DPL(dpl) (dpl << 5)

+%define  SYSTEM_FLAG(s) (s << 4)

+%define  DESC_TYPE(t) (t)

+

+; Type: data, expand-up, writable, accessed

+%define  DATA32_TYPE 3

+

+; Type: execute, readable, expand-up, accessed

+%define  CODE32_TYPE 0xb

+

+; Type: execute, readable, expand-up, accessed

+%define  CODE64_TYPE 0xb

+

+%define  GRANULARITY_FLAG(g) (g << 7)

+%define  DEFAULT_SIZE32(d) (d << 6)

+%define  CODE64_FLAG(l) (l << 5)

+%define  UPPER_LIMIT(l) (l)

+

+;

+; The Global Descriptor Table (GDT)

+;

+

+GDT_BASE:

+; null descriptor

+NULL_SEL            equ $-GDT_BASE

+    DW      0            ; limit 15:0

+    DW      0            ; base 15:0

+    DB      0            ; base 23:16

+    DB      0            ; sys flag, dpl, type

+    DB      0            ; limit 19:16, flags

+    DB      0            ; base 31:24

+

+; linear data segment descriptor

+LINEAR_SEL          equ $-GDT_BASE

+    DW      0xffff       ; limit 15:0

+    DW      0            ; base 15:0

+    DB      0            ; base 23:16

+    DB      PRESENT_FLAG(1)|DPL(0)|SYSTEM_FLAG(1)|DESC_TYPE(DATA32_TYPE)

+    DB      GRANULARITY_FLAG(1)|DEFAULT_SIZE32(1)|CODE64_FLAG(0)|UPPER_LIMIT(0xf)

+    DB      0            ; base 31:24

+

+; linear code segment descriptor

+LINEAR_CODE_SEL     equ $-GDT_BASE

+    DW      0xffff       ; limit 15:0

+    DW      0            ; base 15:0

+    DB      0            ; base 23:16

+    DB      PRESENT_FLAG(1)|DPL(0)|SYSTEM_FLAG(1)|DESC_TYPE(CODE32_TYPE)

+    DB      GRANULARITY_FLAG(1)|DEFAULT_SIZE32(1)|CODE64_FLAG(0)|UPPER_LIMIT(0xf)

+    DB      0            ; base 31:24

+

+%ifdef ARCH_X64

+; linear code (64-bit) segment descriptor

+LINEAR_CODE64_SEL   equ $-GDT_BASE

+    DW      0xffff       ; limit 15:0

+    DW      0            ; base 15:0

+    DB      0            ; base 23:16

+    DB      PRESENT_FLAG(1)|DPL(0)|SYSTEM_FLAG(1)|DESC_TYPE(CODE64_TYPE)

+    DB      GRANULARITY_FLAG(1)|DEFAULT_SIZE32(0)|CODE64_FLAG(1)|UPPER_LIMIT(0xf)

+    DB      0            ; base 31:24

+%endif

+

+GDT_END:

+

diff --git a/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Ia16/ResetVectorVtf0.asm b/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Ia16/ResetVectorVtf0.asm

new file mode 100644

index 0000000000..8a9620a3ae

--- /dev/null

+++ b/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Ia16/ResetVectorVtf0.asm

@@ -0,0 +1,115 @@

+;/** @file

+; First code executed by processor after resetting.

+;

+; Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.<BR>

+; SPDX-License-Identifier: BSD-2-Clause-Patent

+;

+;**/

+; This file includes code originally published under the following license.

+;------------------------------------------------------------------------------

+; @file

+; First code executed by processor after resetting.

+;

+; Copyright (c) 2008 - 2014, Intel Corporation. All rights reserved.<BR>

+; SPDX-License-Identifier: BSD-2-Clause-Patent

+;

+;------------------------------------------------------------------------------

+

+BITS    16

+

+ALIGN   16

+

+;

+; Pad the image size to 4k when page tables are in VTF0

+;

+; If the VTF0 image has page tables built in, then we need to make

+; sure the end of VTF0 is 4k above where the page tables end.

+;

+; This is required so the page tables will be 4k aligned when VTF0 is

+; located just below 0x100000000 (4GB) in the firmware device.

+;

+%ifdef ALIGN_TOP_TO_4K_FOR_PAGING

+    TIMES (0x1000 - ($ - EndOfPageTables) - 0x50) DB 0

+%endif

+

+; 16 bytes reserved for Anti-rollback security level

+;  - 04 bytes: Security level

+;  - 12 bytes: Pad 0x00

+    DD AntiRollback_SecurityLevel

+    TIMES 12 DB 0

+

+;

+; 32 bytes reserved for BIOS version string and build date and time

+; Signature 4 bytes: BIVS

+; Pad0      1 byte,  00

+; Version   8 bytes, such as UMD9B18C

+; Pad1      1 byte,  00

+; Date      4 bytes, such as 20191118

+; Pad2      1 byte,  00

+; Time      3 bytes, such as 113028

+; Pad3      10 byte,  00

+;

+

+BiosVersionDateTimeSignature:

+    DB 'B', 'I', 'V', 'S'

+

+Pad0:

+    DB 0

+

+Version:

+    TIMES 8 DB 0

+

+Pad1:

+    DB 0

+

+Date:

+    TIMES 4 DB 0

+

+Pad2:

+    DB 0

+

+DateTime:

+    TIMES 7 DB 0

+

+Pad3:

+    TIMES 10 DB 0

+

+applicationProcessorEntryPoint:

+;

+; Application Processors entry point

+;

+; GenFv generates code aligned on a 4k boundary which will jump to this

+; location.  (0xffffffe0)  This allows the Local APIC Startup IPI to be

+; used to wake up the application processors.

+;

+    jmp     EarlyApInitReal16

+

+ALIGN   8

+

+    DD      0

+

+;

+; The VTF signature

+;

+; VTF-0 means that the VTF (Volume Top File) code does not require

+; any fixups.

+;

+vtfSignature:

+    DB      'V', 'T', 'F', 0

+

+ALIGN   16

+

+resetVector:

+;

+; Reset Vector

+;

+; This is where the processor will begin execution

+;

+    nop

+    nop

+    jmp   near  EarlyBspInitReal16

+

+ALIGN   16

+

+fourGigabytes:

+

diff --git a/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Ia32/Flat32ToFlat64.asm b/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Ia32/Flat32ToFlat64.asm

new file mode 100644

index 0000000000..fc5c99d944

--- /dev/null

+++ b/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Ia32/Flat32ToFlat64.asm

@@ -0,0 +1,47 @@

+;/** @file

+; Transition from 32 bit flat protected mode into 64 bit flat protected mode

+;

+; Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.<BR>

+; SPDX-License-Identifier: BSD-2-Clause-Patent

+;

+;**/

+; This file includes code originally published under the following license.

+;------------------------------------------------------------------------------

+; @file

+; Transition from 32 bit flat protected mode into 64 bit flat protected mode

+;

+; Copyright (c) 2008 - 2018, Intel Corporation. All rights reserved.<BR>

+; SPDX-License-Identifier: BSD-2-Clause-Patent

+;

+;------------------------------------------------------------------------------

+

+BITS    32

+

+;

+; Modified:  EAX

+;

+Transition32FlatTo64Flat:

+

+    OneTimeCall SetCr3ForPageTables64

+

+    mov     eax, cr4

+    bts     eax, 5                      ; enable PAE

+    mov     cr4, eax

+

+    mov     ecx, 0xc0000080

+    rdmsr

+    bts     eax, 8                      ; set LME

+    wrmsr

+

+    mov     eax, cr0

+    bts     eax, 31                     ; set PG

+    mov     cr0, eax                    ; enable paging

+

+    jmp     LINEAR_CODE64_SEL:ADDR_OF(jumpTo64BitAndLandHere)

+BITS    64

+jumpTo64BitAndLandHere:

+

+    debugShowPostCode POSTCODE_64BIT_MODE

+

+    OneTimeCallRet Transition32FlatTo64Flat

+

diff --git a/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Ia32/PageTables64.asm b/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Ia32/PageTables64.asm

new file mode 100644

index 0000000000..5bc2a1cabe

--- /dev/null

+++ b/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Ia32/PageTables64.asm

@@ -0,0 +1,32 @@

+;/** @file

+; Sets the CR3 register for 64-bit paging

+;

+; Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.<BR>

+; SPDX-License-Identifier: BSD-2-Clause-Patent

+;

+;**/

+; This file includes code originally published under the following license.

+;------------------------------------------------------------------------------

+; @file

+; Sets the CR3 register for 64-bit paging

+;

+; Copyright (c) 2008 - 2013, Intel Corporation. All rights reserved.<BR>

+; SPDX-License-Identifier: BSD-2-Clause-Patent

+;

+;------------------------------------------------------------------------------

+

+BITS    32

+

+;

+; Modified:  EAX

+;

+SetCr3ForPageTables64:

+

+    ;

+    ; These pages are built into the ROM image in X64/PageTables.asm

+    ;

+    mov     eax, ADDR_OF(TopLevelPageDirectory)

+    mov     cr3, eax

+

+    OneTimeCallRet SetCr3ForPageTables64

+

diff --git a/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Ia32/SearchForBfvBase.asm b/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Ia32/SearchForBfvBase.asm

new file mode 100644

index 0000000000..8a91389280

--- /dev/null

+++ b/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Ia32/SearchForBfvBase.asm

@@ -0,0 +1,91 @@

+;/** @file

+; Search for the Boot Firmware Volume (BFV) base address

+;

+; Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.<BR>

+; SPDX-License-Identifier: BSD-2-Clause-Patent

+;

+;**/

+; This file includes code originally published under the following license.

+;------------------------------------------------------------------------------

+; @file

+; Search for the Boot Firmware Volume (BFV) base address

+;

+; Copyright (c) 2008 - 2022, Intel Corporation. All rights reserved.<BR>

+; SPDX-License-Identifier: BSD-2-Clause-Patent

+;

+;------------------------------------------------------------------------------

+

+;#define EFI_FIRMWARE_FILE_SYSTEM2_GUID \

+;  { 0x8c8ce578, 0x8a3d, 0x4f1c, { 0x99, 0x35, 0x89, 0x61, 0x85, 0xc3, 0x2d, 0xd3 } }

+%define FFS_GUID_DWORD0 0x8c8ce578

+%define FFS_GUID_DWORD1 0x4f1c8a3d

+%define FFS_GUID_DWORD2 0x61893599

+%define FFS_GUID_DWORD3 0xd32dc385

+

+BITS    32

+

+;

+; Modified:  EAX, EBX

+; Preserved: EDI, ESP

+;

+; @param[out]  EBP  Address of Boot Firmware Volume (BFV)

+;

+Flat32SearchForBfvBase:

+

+    mov     eax, edx ; edx maps 4G for SOC 15 or 0xA000000 for SOC 17

+    mov     esi, eax

+    sub     esi, 0x1000000

+searchingForBfvHeaderLoop:

+    ;

+    ; We check for a firmware volume at every 4KB address in the top 16MB

+    ; just below 4GB.  (Addresses at 0xffHHH000 where H is any hex digit.)

+    ;

+    sub     eax, 0x1000

+    cmp     eax, esi

+    jb      searchedForBfvHeaderButNotFound

+

+    ;

+    ; Check FFS GUID

+    ;

+    cmp     dword [eax + 0x10], FFS_GUID_DWORD0

+    jne     searchingForBfvHeaderLoop

+    cmp     dword [eax + 0x14], FFS_GUID_DWORD1

+    jne     searchingForBfvHeaderLoop

+    cmp     dword [eax + 0x18], FFS_GUID_DWORD2

+    jne     searchingForBfvHeaderLoop

+    cmp     dword [eax + 0x1c], FFS_GUID_DWORD3

+    jne     searchingForBfvHeaderLoop

+

+    ;

+    ; Check FV Length

+    ;

+    cmp     dword [eax + 0x24], 0

+    jne     searchingForBfvHeaderLoop

+    mov     ebx, eax

+    add     ebx, dword [eax + 0x20]

+    cmp     ebx, edx

+    jnz     searchingForBfvHeaderLoop

+

+    jmp     searchedForBfvHeaderAndItWasFound

+

+searchedForBfvHeaderButNotFound:

+    ;

+    ; Hang if the SEC entry point was not found

+    ;

+    debugShowPostCode POSTCODE_BFV_NOT_FOUND

+

+    ;

+    ; 0xbfbfbfbf in the EAX & EBP registers helps signal what failed

+    ; for debugging purposes.

+    ;

+    mov     eax, 0xBFBFBFBF

+    mov     ebp, eax

+    jmp     $

+

+searchedForBfvHeaderAndItWasFound:

+    mov     ebp, eax

+

+    debugShowPostCode POSTCODE_BFV_FOUND

+

+    OneTimeCallRet Flat32SearchForBfvBase

+

diff --git a/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Ia32/SearchForSecEntry.asm b/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Ia32/SearchForSecEntry.asm

new file mode 100644

index 0000000000..c0ac6ba6c8

--- /dev/null

+++ b/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Ia32/SearchForSecEntry.asm

@@ -0,0 +1,202 @@

+;/** @file

+; Search for the SEC Core entry point

+;

+; Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.<BR>

+; SPDX-License-Identifier: BSD-2-Clause-Patent

+;

+;**/

+; This file includes code originally published under the following license.

+;------------------------------------------------------------------------------

+; @file

+; Search for the SEC Core entry point

+;

+; Copyright (c) 2008 - 2011, Intel Corporation. All rights reserved.<BR>

+; SPDX-License-Identifier: BSD-2-Clause-Patent

+;

+;------------------------------------------------------------------------------

+

+BITS    32

+

+%define EFI_FV_FILETYPE_SECURITY_CORE         0x03

+

+;

+; Modified:  EAX, EBX, ECX, EDX

+; Preserved: EDI, EBP, ESP

+;

+; @param[in]   EBP  Address of Boot Firmware Volume (BFV)

+; @param[out]  ESI  SEC Core Entry Point Address

+;

+Flat32SearchForSecEntryPoint:

+

+    ;

+    ; Initialize EBP and ESI to 0

+    ;

+    xor     ebx, ebx

+    mov     esi, ebx

+

+    ;

+    ; Pass over the BFV header

+    ;

+    mov     eax, ebp

+    mov     bx, [ebp + 0x30]

+    add     eax, ebx

+    jc      secEntryPointWasNotFound

+

+    jmp     searchingForFfsFileHeaderLoop

+

+moveForwardWhileSearchingForFfsFileHeaderLoop:

+    ;

+    ; Make forward progress in the search

+    ;

+    inc     eax

+    jc      secEntryPointWasNotFound

+

+searchingForFfsFileHeaderLoop:

+    test    eax, eax

+    jz      secEntryPointWasNotFound

+

+    ;

+    ; Ensure 8 byte alignment

+    ;

+    add     eax, 7

+    jc      secEntryPointWasNotFound

+    and     al, 0xf8

+

+    ;

+    ; Look to see if there is an FFS file at eax

+    ;

+    mov     bl, [eax + 0x17]

+    test    bl, 0x20

+    jz      moveForwardWhileSearchingForFfsFileHeaderLoop

+    mov     ecx, [eax + 0x14]

+    and     ecx, 0x00ffffff

+    or      ecx, ecx

+    jz      moveForwardWhileSearchingForFfsFileHeaderLoop

+    add     ecx, eax

+    jz      jumpSinceWeFoundTheLastFfsFile

+    jc      moveForwardWhileSearchingForFfsFileHeaderLoop

+jumpSinceWeFoundTheLastFfsFile:

+

+    ;

+    ; There seems to be a valid file at eax

+    ;

+    cmp     byte [eax + 0x12], EFI_FV_FILETYPE_SECURITY_CORE ; Check File Type

+    jne     readyToTryFfsFileAtEcx

+

+fileTypeIsSecCore:

+    OneTimeCall GetEntryPointOfFfsFile

+    test    eax, eax

+    jnz     doneSeachingForSecEntryPoint

+

+readyToTryFfsFileAtEcx:

+    ;

+    ; Try the next FFS file at ECX

+    ;

+    mov     eax, ecx

+    jmp     searchingForFfsFileHeaderLoop

+

+secEntryPointWasNotFound:

+    xor     eax, eax

+

+doneSeachingForSecEntryPoint:

+    mov     esi, eax

+

+    test    esi, esi

+    jnz     secCoreEntryPointWasFound

+

+secCoreEntryPointWasNotFound:

+    ;

+    ; Hang if the SEC entry point was not found

+    ;

+    debugShowPostCode POSTCODE_SEC_NOT_FOUND

+    jz      $

+

+secCoreEntryPointWasFound:

+    debugShowPostCode POSTCODE_SEC_FOUND

+

+    OneTimeCallRet Flat32SearchForSecEntryPoint

+

+%define EFI_SECTION_PE32                  0x10

+%define EFI_SECTION_TE                    0x12

+

+;

+; Input:

+;   EAX - Start of FFS file

+;   ECX - End of FFS file

+;

+; Output:

+;   EAX - Entry point of PE32 (or 0 if not found)

+;

+; Modified:

+;   EBX

+;

+GetEntryPointOfFfsFile:

+    test    eax, eax

+    jz      getEntryPointOfFfsFileErrorReturn

+    add     eax, 0x18       ; EAX = Start of section

+

+getEntryPointOfFfsFileLoopForSections:

+    cmp     eax, ecx

+    jae     getEntryPointOfFfsFileErrorReturn

+

+    cmp     byte [eax + 3], EFI_SECTION_PE32

+    je      getEntryPointOfFfsFileFoundPe32Section

+

+    cmp     byte [eax + 3], EFI_SECTION_TE

+    je      getEntryPointOfFfsFileFoundTeSection

+

+    ;

+    ; The section type was not PE32 or TE, so move to next section

+    ;

+    mov     ebx, dword [eax]

+    and     ebx, 0x00ffffff

+    add     eax, ebx

+    jc      getEntryPointOfFfsFileErrorReturn

+

+    ;

+    ; Ensure that FFS section is 32-bit aligned

+    ;

+    add     eax, 3

+    jc      getEntryPointOfFfsFileErrorReturn

+    and     al, 0xfc

+    jmp     getEntryPointOfFfsFileLoopForSections

+

+getEntryPointOfFfsFileFoundPe32Section:

+    add     eax, 4       ; EAX = Start of PE32 image

+

+    cmp     word [eax], 'MZ'

+    jne     getEntryPointOfFfsFileErrorReturn

+    movzx   ebx, word [eax + 0x3c]

+    add     ebx, eax

+

+    ; if (Hdr.Pe32->Signature == EFI_IMAGE_NT_SIGNATURE)

+    cmp     dword [ebx], `PE\x00\x00`

+    jne     getEntryPointOfFfsFileErrorReturn

+

+    ; *EntryPoint = (VOID *)((UINTN)Pe32Data +

+    ;   (UINTN)(Hdr.Pe32->OptionalHeader.AddressOfEntryPoint & 0x0ffffffff));

+    add     eax, [ebx + 0x4 + 0x14 + 0x10]

+    jmp     getEntryPointOfFfsFileReturn

+

+getEntryPointOfFfsFileFoundTeSection:

+    add     eax, 4       ; EAX = Start of TE image

+    mov     ebx, eax

+

+    ; if (Hdr.Te->Signature == EFI_TE_IMAGE_HEADER_SIGNATURE)

+    cmp     word [ebx], 'VZ'

+    jne     getEntryPointOfFfsFileErrorReturn

+    ; *EntryPoint = (VOID *)((UINTN)Pe32Data +

+    ;   (UINTN)(Hdr.Te->AddressOfEntryPoint & 0x0ffffffff) +

+    ;   sizeof(EFI_TE_IMAGE_HEADER) - Hdr.Te->StrippedSize);

+    add     eax, [ebx + 0x8]

+    add     eax, 0x28

+    movzx   ebx, word [ebx + 0x6]

+    sub     eax, ebx

+    jmp     getEntryPointOfFfsFileReturn

+

+getEntryPointOfFfsFileErrorReturn:

+    mov     eax, 0

+

+getEntryPointOfFfsFileReturn:

+    OneTimeCallRet GetEntryPointOfFfsFile

+

diff --git a/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Main.asm b/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Main.asm

new file mode 100644

index 0000000000..3762192829

--- /dev/null

+++ b/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Main.asm

@@ -0,0 +1,134 @@

+;/** @file

+; Main routine of the pre-SEC code up through the jump into SEC

+;

+; Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.<BR>

+; SPDX-License-Identifier: BSD-2-Clause-Patent

+;

+;**/

+; This file includes code originally published under the following license.

+;------------------------------------------------------------------------------

+; @file

+; Main routine of the pre-SEC code up through the jump into SEC

+;

+; Copyright (c) 2008 - 2009, Intel Corporation. All rights reserved.<BR>

+; SPDX-License-Identifier: BSD-2-Clause-Patent

+;

+;------------------------------------------------------------------------------

+

+

+BITS    16

+

+;

+; Modified:  EBX, ECX, EDX, EBP

+;

+; @param[in,out]  RAX/EAX  Initial value of the EAX register

+;                          (BIST: Built-in Self Test)

+; @param[in,out]  DI       'BP': boot-strap processor, or

+;                          'AP': application processor

+; @param[out]     RBP/EBP  Address of Boot Firmware Volume (BFV)

+; @param[out]     DS       Selector allowing flat access to all addresses

+; @param[out]     ES       Selector allowing flat access to all addresses

+; @param[out]     FS       Selector allowing flat access to all addresses

+; @param[out]     GS       Selector allowing flat access to all addresses

+; @param[out]     SS       Selector allowing flat access to all addresses

+;

+; @return         None  This routine jumps to SEC and does not return

+;

+Main16:

+    OneTimeCall EarlyInit16

+

+    ;

+    ; Transition the processor from 16-bit real mode to 32-bit flat mode

+    ;

+    OneTimeCall TransitionFromReal16To32BitFlat

+

+BITS    32

+    jmp     Not_S3Resume

+

+Main32:

+    cmp     edx, SMM_RESUME_SIGNATURE

+    jne     Not_S3Resume

+

+    mov     ebx, esp

+    push    ebx

+

+    push    eax

+    push    edx

+

+    mov     eax, esi

+    push    eax

+

+    mov     eax, edi

+    push    eax

+

+    mov     edi, SMM_RESUME_SIGNATURE

+    mov     edx, VIRTUAL4G

+

+Not_S3Resume:

+    ;

+    ; Search for the Boot Firmware Volume (BFV)

+    ;

+    OneTimeCall Flat32SearchForBfvBase

+

+    ;

+    ; EBP - Start of BFV

+    ;

+

+    ;

+    ; Search for the SEC entry point

+    ;

+    OneTimeCall Flat32SearchForSecEntryPoint

+

+    ;

+    ; ESI - SEC Core entry point

+    ; EBP - Start of BFV

+    ;

+

+%ifdef ARCH_IA32

+

+    ;

+    ; Restore initial EAX value into the EAX register

+    ;

+    mov     eax, esp

+

+    ;

+    ; Jump to the 32-bit SEC entry point

+    ;

+    jmp     esi

+

+%else

+

+    ;

+    ; Transition the processor from 32-bit flat mode to 64-bit flat mode

+    ;

+    OneTimeCall Transition32FlatTo64Flat

+

+BITS    64

+

+    ;

+    ; Some values were calculated in 32-bit mode.  Make sure the upper

+    ; 32-bits of 64-bit registers are zero for these values.

+    ;

+    mov     rax, 0x00000000ffffffff

+    and     rsi, rax

+    and     rbp, rax

+    and     rsp, rax

+

+    ;

+    ; RSI - SEC Core entry point

+    ; RBP - Start of BFV

+    ;

+

+    ;

+    ; Restore initial EAX value into the RAX register

+    ;

+    mov     rax, rsp

+

+    ;

+    ; Jump to the 64-bit SEC entry point

+    ;

+    jmp     rsi

+

+%endif

+

+

diff --git a/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Port80Debug.asm b/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Port80Debug.asm

new file mode 100644

index 0000000000..88b42e0dde

--- /dev/null

+++ b/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Port80Debug.asm

@@ -0,0 +1,30 @@

+;/** @file

+; Port 0x80 debug support macros

+;

+; Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.<BR>

+; SPDX-License-Identifier: BSD-2-Clause-Patent

+;

+;**/

+; This file includes code originally published under the following license.

+;------------------------------------------------------------------------------

+; @file

+; Port 0x80 debug support macros

+;

+; Copyright (c) 2009, Intel Corporation. All rights reserved.<BR>

+; SPDX-License-Identifier: BSD-2-Clause-Patent

+;

+;------------------------------------------------------------------------------

+

+BITS    16

+

+%macro  debugInitialize 0

+    ;

+    ; No initialization is required

+    ;

+%endmacro

+

+%macro  debugShowPostCode 1

+    mov     al, %1

+    out     0x80, al

+%endmacro

+

diff --git a/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/PostCodes.inc b/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/PostCodes.inc

new file mode 100644

index 0000000000..f70e4f8207

--- /dev/null

+++ b/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/PostCodes.inc

@@ -0,0 +1,27 @@

+;/** @file

+; Definitions of POST CODES for the reset vector module

+;

+; Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.<BR>

+; SPDX-License-Identifier: BSD-2-Clause-Patent

+;

+;**/

+; This file includes code originally published under the following license.

+;------------------------------------------------------------------------------

+; @file

+; Definitions of POST CODES for the reset vector module

+;

+; Copyright (c) 2009, Intel Corporation. All rights reserved.<BR>

+; SPDX-License-Identifier: BSD-2-Clause-Patent

+;

+;------------------------------------------------------------------------------

+

+%define POSTCODE_16BIT_MODE     0x16

+%define POSTCODE_32BIT_MODE     0x32

+%define POSTCODE_64BIT_MODE     0x64

+

+%define POSTCODE_BFV_NOT_FOUND  0xb0

+%define POSTCODE_BFV_FOUND      0xb1

+

+%define POSTCODE_SEC_NOT_FOUND  0xf0

+%define POSTCODE_SEC_FOUND      0xf1

+

diff --git a/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/ResetVector.uni b/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/ResetVector.uni

new file mode 100644

index 0000000000000000000000000000000000000000..dfb891ef0c20963158a9abaab47a48b57d4b8160

GIT binary patch

literal 1158

zcmdUu%}c{T5XIlQf5p;XR7_h%Jcx+>@KErhG*!GwO=}wnsibMee_s8~HVq;cgq|d9

zGCMmn`{vEd=SM>gIo1J>)1_V%E73$1e0DOxUa)fP2fh*3Tv>6xiR$2c)jR%JQ_Xzz

zo;unm>sU?J306yEtu#_fl?k@f4e=3KbL=j@mEYTqhj@BEvhFhzP`PjQ7k;<KmXT-m

z>N-~&#1}u%h3ZrNQGu?D`l;_J;D#}oDR^Vw`GgzJsN7aaMgZ=BE)p;=i;O;YUgWI1

z-*8|IHcH-xun?2uN=6-f>pY>B-D+nMoty1Er^cPdjEG5K)4}Od&)8OJMx1fBB*Jns

z?A&|pj=9g7>&;h~a%Ne^^Sal1iEP(d@1lsPR76v!U<_EMk0bQ4nYgiQvo=j-Fko-v

zJjP0yvFYglsG$PyHKv!-h0WF`6KaS`pHTlDD!WIOSL|9|b#~IC_aSlHo*MnzUo=Gv

oBi^PTn{z;|5WBkdudRaSuXwtk3PCd9FX@A)2in_TG3|=y3$azOoB#j-



literal 0

HcmV?d00001



diff --git a/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/ResetVectorExtra.uni b/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/ResetVectorExtra.uni

new file mode 100644

index 0000000000000000000000000000000000000000..a5cdb9fcb61815e2059eccf35a4c76722d95418d

GIT binary patch

literal 1080

zcmdUv%}xSA5QOW@Q%vxpMnH)tV~p~1FcBqy#v8!}mrW4N3K)HO^{bH|4?ciqGc!Hi

z)78_}J^T4lQAL5V&lhyAM`fC5qyjoyI>;}Kx$c+~)|qnjSFDK!oXzx(Wr(heHD^Cn

zici2gjruxgr`Seu{zhKo+xD!t=$C5Dsi0lewZ~f3A>$b70-R;UOIER3#7Xd)VQrvW

z#=Y-)faa1&iOSJ)!X3j8eBUg`!&&9{`R-+%sz$D7tGw5@>#7a<y-MWkc+S9nB_a&t

zZjRoZ8S4b(8Z0!hR~dC8542c$w2^=3z}#0hjQ3z6!zXNN5!gGQ30RJ5TSDfR1FJbt

z;~Cdu0-FI&7kWT8(wK9u&jJ+txPJ4fb&Of`ndvnmq}c4W&9%I_*<b6DWYZ-_bjiBz

z=GYZ?XXWtV+0181(|^|!1?^D5?Yr_T>(QxwI<uo2<|b>8er#gttA(ziTl%%h?wXg=

mLJFX`7yU99tZD2VcXNreUF=0ret+pt@HWKDe}y8w;O`4+YOUq~



literal 0

HcmV?d00001



diff --git a/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/SerialDebug.asm b/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/SerialDebug.asm

new file mode 100644

index 0000000000..303b75de24

--- /dev/null

+++ b/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/SerialDebug.asm

@@ -0,0 +1,134 @@

+;/** @file

+; Serial port debug support macros

+;

+; Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.<BR>

+; SPDX-License-Identifier: BSD-2-Clause-Patent

+;

+;**/

+; This file includes code originally published under the following license.

+;------------------------------------------------------------------------------

+; @file

+; Serial port debug support macros

+;

+; Copyright (c) 2008 - 2018, Intel Corporation. All rights reserved.<BR>

+; SPDX-License-Identifier: BSD-2-Clause-Patent

+;

+;------------------------------------------------------------------------------

+

+;//---------------------------------------------

+;// UART Register Offsets

+;//---------------------------------------------

+%define BAUD_LOW_OFFSET         0x00

+%define BAUD_HIGH_OFFSET        0x01

+%define IER_OFFSET              0x01

+%define LCR_SHADOW_OFFSET       0x01

+%define FCR_SHADOW_OFFSET       0x02

+%define IR_CONTROL_OFFSET       0x02

+%define FCR_OFFSET              0x02

+%define EIR_OFFSET              0x02

+%define BSR_OFFSET              0x03

+%define LCR_OFFSET              0x03

+%define MCR_OFFSET              0x04

+%define LSR_OFFSET              0x05

+%define MSR_OFFSET              0x06

+

+;//---------------------------------------------

+;// UART Register Bit Defines

+;//---------------------------------------------

+%define LSR_TXRDY               0x20

+%define LSR_RXDA                0x01

+%define DLAB                    0x01

+

+; UINT16  gComBase = 0x3f8;

+; UINTN   gBps = 115200;

+; UINT8   gData = 8;

+; UINT8   gStop = 1;

+; UINT8   gParity = 0;

+; UINT8   gBreakSet = 0;

+

+%define DEFAULT_COM_BASE 0x3f8

+%define DEFAULT_BPS 115200

+%define DEFAULT_DATA 8

+%define DEFAULT_STOP 1

+%define DEFAULT_PARITY 0

+%define DEFAULT_BREAK_SET 0

+

+%define SERIAL_DEFAULT_LCR ( \

+     (DEFAULT_BREAK_SET << 6) | \

+     (DEFAULT_PARITY << 3) | \

+     (DEFAULT_STOP << 2) | \

+     (DEFAULT_DATA - 5) \

+    )

+

+%define SERIAL_PORT_IO_BASE_ADDRESS DEFAULT_COM_BASE

+

+%macro  inFromSerialPort 1

+    mov     dx, (SERIAL_PORT_IO_BASE_ADDRESS + %1)

+    in      al, dx

+%endmacro

+

+%macro  waitForSerialTxReady 0

+

+%%waitingForTx:

+    inFromSerialPort LSR_OFFSET

+    test    al, LSR_TXRDY

+    jz      %%waitingForTx

+

+%endmacro

+

+%macro  outToSerialPort 2

+    mov     dx, (SERIAL_PORT_IO_BASE_ADDRESS + %1)

+    mov     al, %2

+    out     dx, al

+%endmacro

+

+%macro  debugShowCharacter 1

+    waitForSerialTxReady

+    outToSerialPort 0, %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

+  jmp  real16InitDebug

+real16InitDebugReturn:

+%endmacro

+

+real16InitDebug:

+    ;

+    ; Set communications format

+    ;

+    outToSerialPort LCR_OFFSET, ((DLAB << 7) | SERIAL_DEFAULT_LCR)

+

+    ;

+    ; Configure baud rate

+    ;

+    outToSerialPort BAUD_HIGH_OFFSET, ((115200 / DEFAULT_BPS) >> 8)

+    outToSerialPort BAUD_LOW_OFFSET, ((115200 / DEFAULT_BPS) & 0xff)

+

+    ;

+    ; Switch back to bank 0

+    ;

+    outToSerialPort LCR_OFFSET, SERIAL_DEFAULT_LCR

+

+    jmp     real16InitDebugReturn

+

diff --git a/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Vtf0.inf b/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Vtf0.inf

new file mode 100644

index 0000000000..75bfa0d546

--- /dev/null

+++ b/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Vtf0.inf

@@ -0,0 +1,51 @@

+## @file

+#  Reset Vector

+#

+# Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.<BR>

+# SPDX-License-Identifier: BSD-2-Clause-Patent

+#

+##

+

+## @file

+#  Reset Vector

+#

+# Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.<BR>

+# SPDX-License-Identifier: BSD-2-Clause-Patent

+##

+# This file includes code originally published under the following license.

+## @file

+#  Reset Vector

+#

+#  Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>

+#

+#  SPDX-License-Identifier: BSD-2-Clause-Patent

+#

+##

+

+[Defines]

+  INF_VERSION                    = 0x00010005

+  BASE_NAME                      = ResetVector

+  FILE_GUID                      = 1BA0062E-C779-4582-8566-336AE8F78F09

+  MODULE_TYPE                    = SEC

+  VERSION_STRING                 = 1.1

+  MODULE_UNI_FILE                = ResetVector.uni

+

+#

+# The following information is for reference only and not required by the build tools.

+#

+#  VALID_ARCHITECTURES           = IA32 X64

+#

+

+[Sources]

+  Vtf0.nasmb

+

+[Packages]

+  MdePkg/MdePkg.dec

+  ChachaniBoardPkg/Project.dec

+

+[Pcd]

+  gPlatformPkgTokenSpaceGuid.PcdMemoryFvRecoveryBase

+  gPlatformPkgTokenSpaceGuid.PcdFlashFvRecoverySize

+

+[UserExtensions.TianoCore."ExtraFiles"]

+  ResetVectorExtra.uni

diff --git a/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Vtf0.nasmb b/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Vtf0.nasmb

new file mode 100644

index 0000000000..f5d4dfcb9e

--- /dev/null

+++ b/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/Vtf0.nasmb

@@ -0,0 +1,74 @@

+;/** @file

+; This file includes all other code files to assemble the reset vector code

+;

+; Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.<BR>

+; SPDX-License-Identifier: BSD-2-Clause-Patent

+;

+;**/

+; This file includes code originally published under the following license.

+;------------------------------------------------------------------------------

+; @file

+; This file includes all other code files to assemble the reset vector code

+;

+; Copyright (c) 2008 - 2013, Intel Corporation. All rights reserved.<BR>

+; SPDX-License-Identifier: BSD-2-Clause-Patent

+;

+;------------------------------------------------------------------------------

+

+;

+; If neither ARCH_IA32 nor ARCH_X64 are defined, then try to include

+; Base.h to use the C pre-processor to determine the architecture.

+;

+%ifndef ARCH_IA32

+  %ifndef ARCH_X64

+    #include <Base.h>

+    #if defined (MDE_CPU_IA32)

+      %define ARCH_IA32

+    #elif defined (MDE_CPU_X64)

+      %define ARCH_X64

+    #endif

+  %endif

+%endif

+  #include <AutoGen.h>

+  %define VIRTUAL4G (FixedPcdGet32 (PcdMemoryFvRecoveryBase)+FixedPcdGet32 (PcdFlashFvRecoverySize))

+  %define AntiRollback_SecurityLevel (0)

+%ifdef ARCH_IA32

+  %ifdef ARCH_X64

+    %error "Only one of ARCH_IA32 or ARCH_X64 can be defined."

+  %endif

+%elifdef ARCH_X64

+%else

+  %error "Either ARCH_IA32 or ARCH_X64 must be defined."

+%endif

+

+%include "CommonMacros.inc"

+

+%include "PostCodes.inc"

+

+%ifdef ARCH_X64

+%include "X64/PageTables.asm"

+%endif

+

+%ifdef DEBUG_PORT80

+  %include "Port80Debug.asm"

+%elifdef DEBUG_SERIAL

+  %include "SerialDebug.asm"

+%else

+  %include "DebugDisabled.asm"

+%endif

+

+%include "Ia32/SearchForBfvBase.asm"

+%include "Ia32/SearchForSecEntry.asm"

+

+%ifdef ARCH_X64

+%include "Ia32/Flat32ToFlat64.asm"

+%include "Ia32/PageTables64.asm"

+%endif

+

+%include "Ia16/Real16ToFlat32.asm"

+%include "Ia16/Init16.asm"

+

+%include "Main.asm"

+

+%include "Ia16/ResetVectorVtf0.asm"

+

diff --git a/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/X64/PageTables.asm b/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/X64/PageTables.asm

new file mode 100644

index 0000000000..970b09bf1c

--- /dev/null

+++ b/Platform/AMD/VanGoghBoard/Override/edk2/UefiCpuPkg/ResetVector/Vtf0/X64/PageTables.asm

@@ -0,0 +1,80 @@

+;/** @file

+; Emits Page Tables for 1:1 mapping of the addresses 0 - 0x100000000 (4GB)

+;

+; Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.<BR>

+; SPDX-License-Identifier: BSD-2-Clause-Patent

+;

+;**/

+; This file includes code originally published under the following license.

+;------------------------------------------------------------------------------

+; @file

+; Emits Page Tables for 1:1 mapping of the addresses 0 - 0x100000000 (4GB)

+;

+; Copyright (c) 2008 - 2014, Intel Corporation. All rights reserved.<BR>

+; SPDX-License-Identifier: BSD-2-Clause-Patent

+;

+;------------------------------------------------------------------------------

+

+BITS    64

+

+%define ALIGN_TOP_TO_4K_FOR_PAGING

+

+%define PAGE_PRESENT            0x01

+%define PAGE_READ_WRITE         0x02

+%define PAGE_USER_SUPERVISOR    0x04

+%define PAGE_WRITE_THROUGH      0x08

+%define PAGE_CACHE_DISABLE     0x010

+%define PAGE_ACCESSED          0x020

+%define PAGE_DIRTY             0x040

+%define PAGE_PAT               0x080

+%define PAGE_GLOBAL           0x0100

+%define PAGE_2M_MBO            0x080

+%define PAGE_2M_PAT          0x01000

+

+%define PAGE_2M_PDE_ATTR (PAGE_2M_MBO + \

+                          PAGE_ACCESSED + \

+                          PAGE_DIRTY + \

+                          PAGE_READ_WRITE + \

+                          PAGE_PRESENT)

+

+%define PAGE_PDP_ATTR (PAGE_ACCESSED + \

+                       PAGE_READ_WRITE + \

+                       PAGE_PRESENT)

+

+%define PGTBLS_OFFSET(x) ((x) - TopLevelPageDirectory)

+%define PGTBLS_ADDR(x) (ADDR_OF(TopLevelPageDirectory) + (x))

+

+%define PDP(offset) (ADDR_OF(TopLevelPageDirectory) + (offset) + \

+                     PAGE_PDP_ATTR)

+%define PTE_2MB(x) ((x << 21) + PAGE_2M_PDE_ATTR)

+

+TopLevelPageDirectory:

+

+    ;

+    ; Top level Page Directory Pointers (1 * 512GB entry)

+    ;

+    DQ      PDP(0x1000)

+

+

+    ;

+    ; Next level Page Directory Pointers (4 * 1GB entries => 4GB)

+    ;

+    TIMES 0x1000-PGTBLS_OFFSET($) DB 0

+

+    DQ      PDP(0x2000)

+    DQ      PDP(0x3000)

+    DQ      PDP(0x4000)

+    DQ      PDP(0x5000)

+

+    ;

+    ; Page Table Entries (2048 * 2MB entries => 4GB)

+    ;

+    TIMES 0x2000-PGTBLS_OFFSET($) DB 0

+

+%assign i 0

+%rep    0x800

+    DQ      PTE_2MB(i)

+    %assign i i+1

+%endrep

+

+EndOfPageTables:

--

2.31.1





-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#114072): https://edk2.groups.io/g/devel/message/114072
Mute This Topic: https://groups.io/mt/103831195/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



  parent reply	other threads:[~2024-01-19 14:57 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-01-18  6:50 [edk2-devel] [PATCH 00/33] Introduce AMD Vangogh platform reference code duke.zhai via groups.io
2024-01-18  6:50 ` [edk2-devel] [PATCH 01/33] AMD/AmdPlatformPkg: Check in AMD S3 logo duke.zhai via groups.io
2024-01-18  6:50 ` [edk2-devel] [PATCH 02/33] AMD/VanGoghBoard: Check in ACPI tables duke.zhai via groups.io
2024-01-18  6:50 ` [edk2-devel] [PATCH 03/33] AMD/VanGoghBoard: Check in Capsule update duke.zhai via groups.io
2024-01-23  4:42   ` Chang, Abner via groups.io
2024-01-25  8:25     ` Zhai, MingXin (Duke) via groups.io
2024-01-25 11:45       ` Chang, Abner via groups.io
2024-01-18  6:50 ` [edk2-devel] [PATCH 04/33] AMD/VanGoghBoard: Check in AgesaPublic pkg duke.zhai via groups.io
2024-01-23  4:44   ` Chang, Abner via groups.io
2024-01-25  8:17     ` Xing, Eric via groups.io
2024-01-18  6:50 ` [edk2-devel] [PATCH 05/33] AMD/VanGoghBoard: Check in PlatformSecLib duke.zhai via groups.io
2024-01-23  4:46   ` Chang, Abner via groups.io
2024-01-18  6:50 ` [edk2-devel] [PATCH 06/33] AMD/VanGoghBoard: Check in AmdIdsExtLib duke.zhai via groups.io
2024-01-18  6:50 ` [edk2-devel] [PATCH 07/33] AMD/VanGoghBoard: Check in PciPlatform duke.zhai via groups.io
2024-01-23  4:50   ` Chang, Abner via groups.io
2024-01-18  6:50 ` [edk2-devel] [PATCH 08/33] AMD/VanGoghBoard: Check in UDKFlashUpdate duke.zhai via groups.io
2024-01-18  6:50 ` [edk2-devel] [PATCH 09/33] AMD/VanGoghBoard: Check in Flash_AB duke.zhai via groups.io
2024-01-18  6:50 ` [edk2-devel] [PATCH 10/33] AMD/VanGoghBoard: Check in FlashUpdate duke.zhai via groups.io
2024-01-18  6:50 ` [edk2-devel] [PATCH 11/33] AMD/VanGoghBoard: Check in FvbServices duke.zhai via groups.io
2024-01-18  6:50 ` [edk2-devel] [PATCH 12/33] AMD/VanGoghBoard: Check in AMD BaseSerialPortLib duke.zhai via groups.io
2024-01-18  6:50 ` [edk2-devel] [PATCH 13/33] AMD/VanGoghBoard: Check in PlatformFlashAccessLib duke.zhai via groups.io
2024-01-18  6:50 ` [edk2-devel] [PATCH 14/33] AMD/VanGoghBoard: Check in SmbiosLib duke.zhai via groups.io
2024-01-18  6:50 ` [edk2-devel] [PATCH 15/33] AMD/VanGoghBoard: Check in SpiFlashDeviceLib duke.zhai via groups.io
2024-01-18  6:50 ` [edk2-devel] [PATCH 16/33] AMD/VanGoghBoard: Check in BaseTscTimerLib duke.zhai via groups.io
2024-01-18  6:50 ` [edk2-devel] [PATCH 17/33] AMD/VanGoghBoard: Check in Smm access module duke.zhai via groups.io
2024-01-18  6:50 ` [edk2-devel] [PATCH 18/33] AMD/VanGoghBoard: Check in PciHostBridge module duke.zhai via groups.io
2024-01-18  6:50 ` [edk2-devel] [PATCH 19/33] AMD/VanGoghBoard: Check in PcatRealTimeClockRuntimeDxe module duke.zhai via groups.io
2024-01-18  6:50 ` [edk2-devel] [PATCH 20/33] AMD/VanGoghBoard: Check in FTPM module duke.zhai via groups.io
2024-01-18  6:50 ` [edk2-devel] [PATCH 21/33] AMD/VanGoghBoard: Check in SignedCapsule duke.zhai via groups.io
2024-01-18  6:50 ` duke.zhai via groups.io [this message]
2024-01-18  6:50 ` [edk2-devel] [PATCH 23/33] AMD/VanGoghBoard: Check in AcpiPlatform duke.zhai via groups.io
2024-01-18  6:50 ` [edk2-devel] [PATCH 24/33] AMD/VanGoghBoard: Check in FchSpi module duke.zhai via groups.io
2024-01-18  6:50 ` [edk2-devel] [PATCH 25/33] AMD/VanGoghBoard: Check in PlatformInitPei module duke.zhai via groups.io
2024-01-23  6:35   ` Chang, Abner via groups.io
2024-01-18  6:50 ` [edk2-devel] [PATCH 26/33] AMD/VanGoghBoard: Check in Smbios platform dxe drivers duke.zhai via groups.io
2024-01-18  6:50 ` [edk2-devel] [PATCH 27/33] AMD/VanGoghBoard: Check in Fsp2WrapperPkg duke.zhai via groups.io
2024-01-18  6:50 ` [edk2-devel] [PATCH 28/33] AMD/VanGoghBoard: Check in SmmCpuFeaturesLibCommon module duke.zhai via groups.io
2024-01-23  5:14   ` Chang, Abner via groups.io
2024-01-23 10:20     ` Xing, Eric via groups.io
2024-01-23 10:44       ` Chang, Abner via groups.io
2024-01-18  6:50 ` [edk2-devel] [PATCH 29/33] AMD/VanGoghBoard: Check in SmramSaveState module duke.zhai via groups.io
2024-01-20 14:37   ` Abdul Lateef Attar via groups.io
2024-01-23  5:15     ` Chang, Abner via groups.io
2024-01-23 10:27       ` Xing, Eric via groups.io
2024-01-23 10:44         ` Chang, Abner via groups.io
2024-01-18  6:50 ` [edk2-devel] [PATCH 30/33] AMD/VanGoghBoard: Check in EDK2 override files duke.zhai via groups.io
2024-01-18  6:50 ` [edk2-devel] [PATCH 31/33] AMD/VanGoghBoard: Check in AMD SmmControlPei module duke.zhai via groups.io
2024-01-18  6:50 ` [edk2-devel] [PATCH 32/33] AMD/VanGoghBoard: Check in Chachani board project files and build script duke.zhai via groups.io
2024-01-18  6:50 ` [edk2-devel] [PATCH 33/33] AMD/VanGoghBoard: Improvement coding style duke.zhai via groups.io

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240118065046.961-23-duke.zhai@amd.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox