aboutsummaryrefslogtreecommitdiff
path: root/src/vendorcode/amd/agesa/f10/cpcarmac.inc
diff options
context:
space:
mode:
Diffstat (limited to 'src/vendorcode/amd/agesa/f10/cpcarmac.inc')
-rw-r--r--src/vendorcode/amd/agesa/f10/cpcarmac.inc406
1 files changed, 0 insertions, 406 deletions
diff --git a/src/vendorcode/amd/agesa/f10/cpcarmac.inc b/src/vendorcode/amd/agesa/f10/cpcarmac.inc
deleted file mode 100644
index e893d1ef8b..0000000000
--- a/src/vendorcode/amd/agesa/f10/cpcarmac.inc
+++ /dev/null
@@ -1,406 +0,0 @@
-;*****************************************************************************
-; AMD Generic Encapsulated Software Architecture
-;
-; Workfile: cpcarmac.inc $Revision:: 44323 $ $Date:: 2010-12-22 01:24:58 -0700 (Wed, 22 Dec 2010) $
-;
-; Description: Code to setup and break down cache-as-stack
-;
-;*****************************************************************************
-;
-; Copyright (c) 2011, Advanced Micro Devices, Inc.
-; All rights reserved.
-;
-; Redistribution and use in source and binary forms, with or without
-; modification, are permitted provided that the following conditions are met:
-; * Redistributions of source code must retain the above copyright
-; notice, this list of conditions and the following disclaimer.
-; * Redistributions in binary form must reproduce the above copyright
-; notice, this list of conditions and the following disclaimer in the
-; documentation and/or other materials provided with the distribution.
-; * Neither the name of Advanced Micro Devices, Inc. nor the names of
-; its contributors may be used to endorse or promote products derived
-; from this software without specific prior written permission.
-;
-; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-; ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-; DISCLAIMED. IN NO EVENT SHALL ADVANCED MICRO DEVICES, INC. BE LIABLE FOR ANY
-; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-;
-;*****************************************************************************
-
- .XLIST
- INCLUDE cpcar.inc
- .LIST
- .586P
-
-;======================================================================
-; AMD_ENABLE_STACK: Setup a stack
-;
-; In:
-; none
-;
-; Out:
-; SS:ESP - Our new private stack location
-; 4000:3FFC - for BSP (16K Stack)
-; 4000:7FFC - for core0 of node1 (16K Stack)
-; 4000:BFFC - for core0 of node2 (16K Stack)
-; 4000:FFFC - for core0 of node3 (16K Stack)
-; 5000:3FFC - for core0 of node4 (16K Stack)
-; 5000:7FFC - for core0 of node5 (16K Stack)
-; 5000:BFFC - for core0 of node6 (16K Stack)
-; 5000:FFFC - for core0 of node7 (16K Stack)
-;
-; 6000:1FFC - for core1 node0 (4k stack)
-; 6000:2FFC - for core2 node0 (4k stack)
-; ...
-; 9000:8FFC - for core7 of node7 (4k stack) ......... max of 64 cores in system
-;
-; EAX = AGESA_STATUS
-;
-; ECX = Stack size in bytes
-;
-; Requirements:
-; * This routine presently is limited to a max of 64 processors
-;
-; Preserved:
-; ebx
-; Destroyed:
-; eax, ecx, edx, edi, esi, ds, es
-;
-;======================================================================
-AMD_ENABLE_STACK MACRO
-
- local SetupStack
- local SetupDramMap
- local get_SS_ESP
- local r16bmode
- local p32mode
- local init_stack
-
-; Note that SS:ESP will be default stack. Note that this stack
-; routine will not be used after memory has been initialized. Because
-; of its limited lifetime, it will not conflict with typical PCI devices.
-
- mov esp, ebx ; put return address in a safe place
-
- ; get node id and core id of current executing core
- mov si, -1
- GET_NODE_ID_CORE_ID
- movzx edi, di
-
- ; determine if stack is already enabled.
- mov eax, cr0
- test eax, 60000000h
- jnz SetupStack
- mov ecx, AMD_MTRR_DEFTYPE
- _RDMSR
- test ah, 0Ch
- jz SetupStack
- or edi, 0FFFF0000h ; indicate stack has already been initialized
- jmp get_SS_ESP
-
-SetupStack:
- ; Enable routing tables on BSP (just in case the HT init code has not yet enabled them)
- mov eax, 8000C06Ch
- mov dx, 0CF8h
- out dx, eax
- add dx, 4
- in eax, dx
- btr eax, 0
- out dx, eax
-
- ; Setup temporary DRAM map for CAS on all nodes
- mov eax, 8000C060h ; Get NodeCnt from BSP
- mov dx, 0CF8h
- out dx, eax
- add dx, 4
- in al, dx
- shr ax, 4
- and al, 7
- mov cl, al
-
- mov ebx, 8000C144h
-SetupDramMap:
- mov eax, ebx ; Set 0000_0000 to 00FF_FFFF as DRAM
- mov dx, 0CF8h
- out dx, eax
- add dx, 4
- mov eax, 0
- out dx, eax
-
- mov eax, ebx
- sub eax, 4
- mov dx, 0CF8h
- out dx, eax
- add dx, 4
- mov eax, 3
- out dx, eax
-
- add bh, 8
- dec cl
- jns SetupDramMap
-
- ; Disable the self modifying code check buffer and Disable hardware prefetches
- mov ecx, 0C0011022h
- _RDMSR
- bts eax, DC_DIS_SPEC_TLB_RLD ; turn on Disable speculative TLB reloads bit
- bts eax, DIS_CLR_WBTOL2_SMC_HIT ; turn on Disable the self modifying code check buffer bit
- bts eax, DIS_HW_PF ; turn on Disable hardware prefetches bit
- _WRMSR
- dec cx ; MSRC001_1021 Instruction Cache Configuration Register (IC_CFG)
- _RDMSR
- bts eax, IC_DIS_SPEC_TLB_RLD ; turn on Disable speculative TLB reloads bit
- _WRMSR
-
- AMD_ENABLE_STACK_FAMILY_HOOK ; Disable L3 cache to accept clear lines
-
- ; Init CPU MSRs for our init routines
- mov ecx, MTRR_SYS_CFG ; SYS_CFG
- _RDMSR
- and eax, 0FFE3FFFFh ; turn off MTRR enable bits
- bts eax, MtrrFixDramModEn ; turn on modification enable bit
- _WRMSR
-
- ; clear all variable and Fixed MTRRs
- mov ecx, 200h
- xor eax, eax
- xor edx, edx
- .while (cl != 10h) ; MTRRphysBasen and MTRRphysMaskn
- _WRMSR
- inc cl
- .endw
- mov cl, 50h ; MTRRfix64K_00000
- _WRMSR
- mov cl, 58h ; MTRRfix16K_80000
- _WRMSR
- mov cl, 59h ; MTRRfix16K_A0000
- _WRMSR
- mov cl, 68h ; MTRRfix4K_C0000 to MTRRfix4K_F8000
- .while (cl != 70h)
- _WRMSR
- inc cl
- .endw
-
- ; setup MTRR for stacks
- mov ebx, WB_DRAM_TYPE
- .if (di == 0) ;core 0
- .if (si > 3) ; node 0 to 3 located at 40000h, node 4 to 7 located at 50000h
- shl ebx, 8
- .endif
- mov ecx, AMD_MTRR_FIX64k_00000
- _RDMSR
- or edx, ebx
- _WRMSR
- .else ;core 1 to core 7 start at 60000h
- .if (si < 4) ; node 0 to 3 using AMD_MTRR_FIX64K_6000 and AMD_MTRR_FIX64K_7000 MTRR
- shl ebx, 16
- .if (si > 1)
- shl ebx, 8
- .endif
- mov ecx, AMD_MTRR_FIX64k_00000
- _RDMSR
- or edx, ebx
- _WRMSR
- .else ; node 4 to 7 uses AMD_MTRR_FIX16K_80000 and AMD_MTRR_FIX16K_9000 MTRR
- mov ecx, AMD_MTRR_FIX16k_80000
- _RDMSR
- .if (si < 6) ; node 4 and node 5
- .if (si == 4) ; node 4
- .if (di >= 4)
- shl ebx, 8
- .endif
- .else ; node 5
- shl ebx, 16
- .if (di >= 4)
- shl ebx, 8
- .endif
- .endif
- or eax, ebx
- _WRMSR
- .else ; node 6 and node 7
- .if (si == 6) ; node 6
- .if (di >= 4)
- shl ebx, 8
- .endif
- .else ; node 7
- shl ebx, 16
- .if (di >= 4)
- shl ebx, 8
- .endif
- .endif
- or edx, ebx
- _WRMSR
- .endif
- .endif
- .endif
-
- ; Clear IORRs, TOP_MEM and TOM2
- xor eax, eax
- xor edx, edx
-
- mov ecx, 0C0010016h ;IORRBase0
- .while (cl != 1Bh)
- _WRMSR
- inc cl
- .endw
- mov cl, 1Dh
- _WRMSR
-
- ; Enable MTRRs
- mov ecx, 02FFh ; MTRRdefType
- mov ah, 0Ch ; MtrrDefTypeEn and MtrrDefTypeFixEn
- _WRMSR
-
- mov ecx, MTRR_SYS_CFG ; SYS_CFG
- _RDMSR
- bts eax, MtrrFixDramEn ; MtrrFixDramEn
- btr eax, MtrrFixDramModEn ; turn off modification enable bit
- _WRMSR
-
- ; Enable caching in CR0
- mov eax, CR0 ; Enable WT/WB cache
- btr eax, 31 ; make sure paging is disabled
- btr eax, 30 ; Clear CR0 NW and CD
- btr eax, 29
- mov CR0, eax
-
-get_SS_ESP:
- ; allocate space for stacks
- xor cx, cx
- xor edx, edx
- .if (di == 0) ;core 0
- mov eax, CORE0_STACK_BASE_ADDR
- .while (cx <= si)
- add eax, 4000h
- inc cx
- .endw
- mov edx, eax
- sub eax, 4000h
- and eax, 0F0000h
- sub edx, 4
- and edx, 0FFFFh
- mov bx, CORE0_STACK_SIZE / 4
- .else ;core 1 to core 7 start at 60000h
- mov eax, CORE1_STACK_BASE_ADDR ; core 1 stack starts at 60000h
- .while (cx <= si)
- add eax, 8000h ; 32k for each node
- inc cx
- .endw
- sub eax, 8000h
- mov dx, ax
- and eax, 0F0000h
- xor cx, cx
- .while (cx <= di)
- add edx, 1000h ; 4k for APs
- inc cx
- .endw
- sub edx, 4
- mov bx, CORE1_STACK_SIZE / 4
- .endif
-
- ; Allocate stack and set ESP
- mov ecx, CR0 ; check for 32-bit protect mode
- test ecx, 1 ; PE bit
- jz r16bmode ; PE=0, real mode
- mov cx, cs ; PE=1
- cmp cx, 0D000h ; check for CS
- jb p32mode ; if CS < D000, it is a selector instead of a segment
-r16bmode:
- shr eax, 4 ; ax = ss, ds, es
- mov ss, ax
- mov ds, ax
- mov es, ax
- jmp init_stack
-p32mode:
- add edx, eax ; linear address of the stack
-init_stack:
-
- .if ( !(edi & 0FFFF0000h))
- std
- xor ecx, ecx
- mov cx, bx
- mov esi, edx
- rep lods DWORD PTR [esi]
- xor eax, eax
- mov cx, bx
- mov edi, edx
- rep stos DWORD PTR [edi]
- cld
- xor eax, eax ; eax = 0 : no error
- .else
- mov eax, 40000001h ; eax = AGESA_WARNING (Stack has already been set up)
- .endif
-
- mov cx, bx ; ecx = size in dwords
- shl ecx, 2 ; ecx = size in bytes
-
- mov ebx, esp
- mov esp, edx
-
-
-ENDM
-
-;======================================================================
-; AMD_DISABLE_STACK: Destroy the stack inside the cache. This routine
-; should only be executed on the BSP
-;
-; In:
-; none
-;
-; Out:
-; EAX = AGESA_STATUS
-;
-; Preserved:
-; ebx
-; Destroyed:
-; eax, ecx, edx, esp
-;======================================================================
-AMD_DISABLE_STACK MACRO
-
- mov esp, ebx ; save return address
-
- ; Turn on modification enable bit
- mov ecx, MTRR_SYS_CFG
- _RDMSR
- bts eax, MtrrFixDramModEn ; Enable
- _WRMSR
-
- ; Disable MTRRs and turn on modification enable bit
- mov ecx,AMD_MTRR_FIX64k_00000
- mov eax,1E1E1E1Eh
- mov edx,eax
- _WRMSR ; 0 - 512K = WB Mem
- mov cl,58h
- _WRMSR ; 512K - 640K = WB Mem
-
- ; Turn off modification enable bit
- mov ecx, MTRR_SYS_CFG
- _RDMSR
- btr eax, MtrrFixDramModEn ; Disable
- _WRMSR
-
- ; Enable the self modifying code check buffer and Enable hardware prefetches
- mov ecx, 0C0011022h
- _RDMSR
- btr eax, DC_DIS_SPEC_TLB_RLD ; Disable speculative TLB reloads bit
- btr eax, DIS_CLR_WBTOL2_SMC_HIT ; Disable the self modifying code check buffer bit
- btr eax, DIS_HW_PF ; Disable hardware prefetches bit
- _WRMSR
-
- dec cx ; MSRC001_1021 Instruction Cache Configuration Register (IC_CFG)
- _RDMSR
- btr eax, IC_DIS_SPEC_TLB_RLD ; turn on Disable speculative TLB reloads bit
- _WRMSR
-
- AMD_DISABLE_STACK_FAMILY_HOOK ; Re-Enable L3 cache to accept clear lines
-
- mov ebx, esp
- xor eax, eax
-
-ENDM