New version, also drop unused CAR descriptors from romstage GDT.

- Drop lots of dead code from the various cache_as_ram.inc files.
- Use some descriptive macros instead of magic numbers for MTRR MSRs
- drop unused duplicate descriptors from romstage GDT
- slightly reformatting code and comments

Signed-off-by: Stefan Reinauer <ste...@coresystems.de>

Index: src/cpu/intel/model_6ex/cache_as_ram.inc
===================================================================
--- src/cpu/intel/model_6ex/cache_as_ram.inc    (revision 5682)
+++ src/cpu/intel/model_6ex/cache_as_ram.inc    (working copy)
@@ -176,21 +176,6 @@
 
        post_code(0x33)
 
-#undef CLEAR_FIRST_1M_RAM
-#ifdef CLEAR_FIRST_1M_RAM
-       post_code(0x34)
-       /* Enable Write Combining and Speculative Reads for the first 1MB */
-       movl    $MTRRphysBase_MSR(0), %ecx
-       movl    $(0x00000000 | MTRR_TYPE_WRCOMB), %eax
-       xorl    %edx, %edx
-       wrmsr
-       movl    $MTRRphysMask_MSR(0), %ecx
-       movl    $(~(1024*1024 -1) | (1 << 11)), %eax
-       movl    $0x0000000f, %edx       // 36bit address space
-       wrmsr
-       post_code(0x35)
-#endif
-
        /* Enable Cache */
        movl    %cr0, %eax
        andl    $~( (1 << 30) | (1 << 29) ), %eax
@@ -198,18 +183,7 @@
 
 
        post_code(0x36)
-#ifdef CLEAR_FIRST_1M_RAM
 
-       /* Clear first 1MB of RAM */
-       movl    $0x00000000, %edi
-       cld
-       xorl    %eax, %eax
-       movl    $((1024*1024) / 4), %ecx
-       rep stosl
-
-       post_code(0x37)
-#endif
-
        /* Disable Cache */
        movl    %cr0, %eax
        orl    $(1 << 30), %eax
Index: src/cpu/intel/car/cache_as_ram.inc
===================================================================
--- src/cpu/intel/car/cache_as_ram.inc  (revision 5682)
+++ src/cpu/intel/car/cache_as_ram.inc  (working copy)
@@ -1,12 +1,10 @@
 /*
  * This file is part of the coreboot project.
  *
- * Copyright (C) 2000,2007 Ronald G. Minnich <rminn...@gmail.com>
+ * Copyright (C) 2000, 2007 Ronald G. Minnich <rminn...@gmail.com>
  * Copyright (C) 2005 Eswar Nallusamy, LANL
- * Copyright (C) 2005 Tyan
- * (Written by Yinghai Lu <y...@tyan.com> for Tyan)
- * Copyright (C) 2007 coresystems GmbH
- * (Written by Stefan Reinauer <ste...@coresystems.de> for coresystems GmbH)
+ * Copyright (C) 2005 Tyan (written by Yinghai Lu for Tyan)
+ * Copyright (C) 2007-2010 coresystems GmbH
  * Copyright (C) 2007 Carl-Daniel Hailfinger
  *
  * This program is free software; you can redistribute it and/or modify
@@ -23,15 +21,12 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
-/* We will use 4K bytes only */
-/* disable HyperThreading is done by eswar*/
-/* other's is the same as AMD except remove amd specific msr */
-
 #define CacheSize CONFIG_DCACHE_RAM_SIZE
 #define CacheBase (0xd0000 - CacheSize)
 
 #include <cpu/x86/stack.h>
 #include <cpu/x86/mtrr.h>
+#include <cpu/x86/lapic_def.h>
 
        /* Save the BIST result */
        movl    %eax, %ebp
@@ -47,18 +42,18 @@
        jbe     NotHtProcessor
 
        // It is a HT processor; Send SIPI to the other logical processor
-       // within this processor so that the CAR related common system registers
-       // are programmed accordingly
+       // within this processor so that the CAR related common system 
+       // registers are programmed accordingly.
 
        // Use some register that is common to both logical processors
        // as semaphore. Refer Appendix B, Vol.3
        xorl    %eax, %eax
        xorl    %edx, %edx
-       movl    $0x250, %ecx
+       movl    $MTRRfix64K_00000_MSR, %ecx
        wrmsr
 
-       // Figure out the logical AP's APIC ID; the following logic will work
-       // only for processors with 2 threads
+       // Figure out the logical AP's APIC ID; the following logic will
+       // work only for processors with 2 threads.
        // Refer to Vol 3. Table 7-1 for details about this logic
        movl    $0xFEE00020, %esi
        movl    (%esi), %ebx
@@ -73,8 +68,9 @@
 Send_SIPI:
        bswapl  %ebx  // ebx - logical AP's APIC ID
 
-       // Fill up the IPI command registers in the Local APIC mapped to 
default address
-       // and issue SIPI to the other logical processor within this processor 
die.
+       // Fill up the IPI command registers in the Local APIC mapped to
+       // default address and issue SIPI to the other logical processor
+       // within this processor die.
 Retry_SIPI:
        movl    %ebx, %eax
        movl    $0xFEE00310, %esi
@@ -97,21 +93,18 @@
 
        // Wait for the Logical AP to complete initialization
 LogicalAP_SIPINotdone:
-       movl    $0x250, %ecx
+       movl    $MTRRfix64K_00000_MSR, %ecx
        rdmsr
        orl     %eax, %eax
        jz      LogicalAP_SIPINotdone
 
 NotHtProcessor:
-
-#if 1
        /* Set the default memory type and enable fixed and variable MTRRs */
        movl    $MTRRdefType_MSR, %ecx
        xorl    %edx, %edx
        /* Enable Variable and Fixed MTRRs */
        movl    $0x00000c00, %eax
        wrmsr
-#endif
 
        /* Clear all MTRRs */
        xorl    %edx, %edx
@@ -144,8 +137,8 @@
 
 /* 0x06 is the WB IO type for a given 4k segment.
  * segs is the number of 4k segments in the area of the particular
- *   register we want to use for CAR.
- * reg is the register where the IO type should be stored.
+ *      register we want to use for CAR.
+ * reg  is the register where the IO type should be stored.
  */
 .macro extractmask segs, reg
 .if \segs <= 0
@@ -155,13 +148,13 @@
         */
        xorl \reg, \reg
 .elseif \segs == 1
-       movl $0x06000000, \reg /* WB IO type */
+       movl    $0x06000000, \reg /* WB IO type */
 .elseif \segs == 2
-       movl $0x06060000, \reg /* WB IO type */
+       movl    $0x06060000, \reg /* WB IO type */
 .elseif \segs == 3
-       movl $0x06060600, \reg /* WB IO type */
+       movl    $0x06060600, \reg /* WB IO type */
 .elseif \segs >= 4
-       movl $0x06060606, \reg /* WB IO type */
+       movl    $0x06060606, \reg /* WB IO type */
 .endif
 .endm
 
@@ -192,13 +185,13 @@
 
 #if CacheSize > 0x8000
        /* enable caching for 32K-64K using fixed mtrr */
-       movl    $0x268, %ecx  /* fix4k_c0000*/
+       movl    $MTRRfix4K_C0000_MSR, %ecx
        simplemask CacheSize, 0x8000
        wrmsr
 #endif
 
        /* enable caching for 0-32K using fixed mtrr */
-       movl    $0x269, %ecx  /* fix4k_c8000*/
+       movl    $MTRRfix4K_C8000_MSR, %ecx
        simplemask CacheSize, 0
        wrmsr
 
@@ -211,13 +204,13 @@
        /* enable write base caching so we can do execute in place
         * on the flash rom.
         */
-       movl    $0x202, %ecx
+       movl    $MTRRphysBase_MSR(1), %ecx
        xorl    %edx, %edx
-       movl    $REAL_XIP_ROM_BASE, %eax
-       orl     $MTRR_TYPE_WRBACK, %eax
+       movl    $REAL_XIP_ROM_BASE, %eax
+       orl     $MTRR_TYPE_WRBACK, %eax
        wrmsr
 
-       movl    $0x203, %ecx
+       movl    $MTRRphysMask_MSR(1), %ecx
        movl    $0x0000000f, %edx
        movl    $(~(CONFIG_XIP_ROM_SIZE - 1) | 0x800), %eax
        wrmsr
@@ -240,7 +233,6 @@
        xorl    %eax, %eax
        rep     stosl
 
-
 #if 0
        /* check the cache as ram */
        movl    $CacheBase, %esi
@@ -282,20 +274,10 @@
        add     $4, %esi
        jmp     .xin1x
 .xout1x:
-
 #endif
 
        movl    $(CacheBase + CacheSize - 4), %eax
        movl    %eax, %esp
-
-       /* Load a different set of data segments */
-#if CONFIG_USE_INIT
-       movw    $CACHE_RAM_DATA_SEG, %ax
-       movw    %ax, %ds
-       movw    %ax, %es
-       movw    %ax, %ss
-#endif
-
 lout:
        /* Restore the BIST result */
        movl    %ebp, %eax
@@ -305,92 +287,37 @@
        pushl   %eax  /* bist */
        call    main
 
-       /*
-       FIXME : backup stack in CACHE_AS_RAM into mmx and sse and after we get 
STACK up, we restore that.
-               It is only needed if we want to go back
-       */
-
         /* We don't need cache as ram for now on */
         /* disable cache */
-       movl    %cr0, %eax
-       orl    $(0x1<<30),%eax
-       movl    %eax, %cr0
+       movl    %cr0, %eax
+       orl     $(0x1<<30),%eax
+       movl    %eax, %cr0
 
         /* clear sth */
-       movl    $0x269, %ecx  /* fix4k_c8000*/
-       xorl    %edx, %edx
-       xorl    %eax, %eax
+       movl    $MTRRfix4K_C8000_MSR, %ecx
+       xorl    %edx, %edx
+       xorl    %eax, %eax
        wrmsr
 
 #if CONFIG_DCACHE_RAM_SIZE > 0x8000
-       movl    $0x268, %ecx  /* fix4k_c0000*/
+       movl    $MTRRfix4K_C0000_MSR, %ecx
        wrmsr
 #endif
 
-        /* Set the default memory type and disable fixed and enable variable 
MTRRs */
-       movl    $0x2ff, %ecx
-//     movl    $MTRRdefType_MSR, %ecx
-       xorl    %edx, %edx
+       /* Set the default memory type and disable fixed
+        * and enable variable MTRRs
+        */
+       movl    $MTRRdefType_MSR, %ecx
+       xorl    %edx, %edx
         /* Enable Variable and Disable Fixed MTRRs */
-       movl    $0x00000800, %eax
+       movl    $0x00000800, %eax
        wrmsr
 
-#if defined(CLEAR_FIRST_1M_RAM)
-        /* enable caching for first 1M using variable mtrr */
-       movl    $0x200, %ecx
-       xorl    %edx, %edx
-       movl     $(0 | 1), %eax
-//     movl     $(0 | MTRR_TYPE_WRCOMB), %eax
-       wrmsr
-
-       movl    $0x201, %ecx
-       movl    $0x0000000f, %edx /* AMD 40 bit 0xff*/
-       movl    $((~(( 0 + 0x100000) - 1)) | 0x800), %eax
-       wrmsr
-#endif
-
         /* enable cache */
-       movl    %cr0, %eax
-       andl    $0x9fffffff,%eax
-       movl    %eax, %cr0
+       movl    %cr0, %eax
+       andl    $0x9fffffff,%eax
+       movl    %eax, %cr0
 
-#if defined(CLEAR_FIRST_1M_RAM)
-        /* clear the first 1M */
-       movl    $0x0, %edi
-       cld
-       movl    $(0x100000>>2), %ecx
-       xorl    %eax, %eax
-       rep     stosl
-
-        /* disable cache */
-       movl    %cr0, %eax
-       orl    $(0x1<<30),%eax
-       movl    %eax, %cr0
-
-        /* enable caching for first 1M using variable mtrr */
-       movl    $0x200, %ecx
-       xorl    %edx, %edx
-       movl     $(0 | 6), %eax
-//     movl     $(0 | MTRR_TYPE_WRBACK), %eax
-       wrmsr
-
-       movl    $0x201, %ecx
-       movl    $0x0000000f, %edx /* AMD 40 bit 0xff*/
-       movl    $((~(( 0 + 0x100000) - 1)) | 0x800), %eax
-       wrmsr
-
-        /* enable cache */
-       movl    %cr0, %eax
-       andl    $0x9fffffff,%eax
-       movl    %eax, %cr0
-       invd
-
-       /* FIXME: I hope we don't need to change esp and ebp value here, so we
-        * can restore value from mmx sse back But the problem is the range is
-        * some io related, So don't go back
-        */
-#endif
-
        /* clear boot_complete flag */
        xorl    %ebp, %ebp
 __main:
@@ -399,10 +326,10 @@
 
        movl    %ebp, %esi
 
-       movl $ROMSTAGE_STACK, %esp
+       movl    $ROMSTAGE_STACK, %esp
        movl    %esp, %ebp
-       pushl %esi
-       call copy_and_run
+       pushl   %esi
+       call    copy_and_run
 
 .Lhlt:
        post_code(0xee)
Index: src/cpu/intel/model_106cx/cache_as_ram.inc
===================================================================
--- src/cpu/intel/model_106cx/cache_as_ram.inc  (revision 5682)
+++ src/cpu/intel/model_106cx/cache_as_ram.inc  (working copy)
@@ -176,40 +176,13 @@
 
        post_code(0x33)
 
-#undef CLEAR_FIRST_1M_RAM
-#ifdef CLEAR_FIRST_1M_RAM
-       post_code(0x34)
-       /* Enable Write Combining and Speculative Reads for the first 1MB */
-       movl    $MTRRphysBase_MSR(0), %ecx
-       movl    $(0x00000000 | MTRR_TYPE_WRCOMB), %eax
-       xorl    %edx, %edx
-       wrmsr
-       movl    $MTRRphysMask_MSR(0), %ecx
-       movl    $(~(1024*1024 -1) | (1 << 11)), %eax
-       xorl    %edx, %edx
-       wrmsr
-       post_code(0x35)
-#endif
-
        /* Enable Cache */
        movl    %cr0, %eax
        andl    $~( (1 << 30) | (1 << 29) ), %eax
        movl    %eax, %cr0
 
-
        post_code(0x36)
-#ifdef CLEAR_FIRST_1M_RAM
 
-       /* Clear first 1MB of RAM */
-       movl    $0x00000000, %edi
-       cld
-       xorl    %eax, %eax
-       movl    $((1024*1024) / 4), %ecx
-       rep stosl
-
-       post_code(0x37)
-#endif
-
        /* Disable Cache */
        movl    %cr0, %eax
        orl    $(1 << 30), %eax
Index: src/cpu/intel/model_6fx/cache_as_ram.inc
===================================================================
--- src/cpu/intel/model_6fx/cache_as_ram.inc    (revision 5682)
+++ src/cpu/intel/model_6fx/cache_as_ram.inc    (working copy)
@@ -183,40 +183,13 @@
 
        post_code(0x33)
 
-#undef CLEAR_FIRST_1M_RAM
-#ifdef CLEAR_FIRST_1M_RAM
-       post_code(0x34)
-       /* Enable Write Combining and Speculative Reads for the first 1MB */
-       movl    $MTRRphysBase_MSR(0), %ecx
-       movl    $(0x00000000 | MTRR_TYPE_WRCOMB), %eax
-       xorl    %edx, %edx
-       wrmsr
-       movl    $MTRRphysMask_MSR(0), %ecx
-       movl    $(~(1024*1024 -1) | (1 << 11)), %eax
-       movl    $0x0000000f, %edx       // 36bit address space
-       wrmsr
-       post_code(0x35)
-#endif
-
        /* Enable Cache */
        movl    %cr0, %eax
        andl    $~( (1 << 30) | (1 << 29) ), %eax
        movl    %eax, %cr0
 
-
        post_code(0x36)
-#ifdef CLEAR_FIRST_1M_RAM
 
-       /* Clear first 1MB of RAM */
-       movl    $0x00000000, %edi
-       cld
-       xorl    %eax, %eax
-       movl    $((1024*1024) / 4), %ecx
-       rep stosl
-
-       post_code(0x37)
-#endif
-
        /* Disable Cache */
        movl    %cr0, %eax
        orl    $(1 << 30), %eax
Index: src/arch/i386/include/arch/rom_segs.h
===================================================================
--- src/arch/i386/include/arch/rom_segs.h       (revision 5682)
+++ src/arch/i386/include/arch/rom_segs.h       (working copy)
@@ -4,7 +4,4 @@
 #define ROM_CODE_SEG 0x08
 #define ROM_DATA_SEG 0x10
 
-#define CACHE_RAM_CODE_SEG 0x18
-#define CACHE_RAM_DATA_SEG 0x20
-
 #endif /* ROM_SEGS_H */
Index: src/arch/i386/init/entry.S
===================================================================
--- src/arch/i386/init/entry.S  (revision 5682)
+++ src/arch/i386/init/entry.S  (working copy)
@@ -113,13 +113,6 @@
        .word   0xffff, 0x0000
        .byte   0x00, 0x93, 0xcf, 0x00
 
-       /* selgdt 0x18, flat code segment for CAR */
-       .word   0xffff, 0x0000
-       .byte   0x00, 0x9b, 0xcf, 0x00
-
-       /* selgdt 0x20, flat data segment for CAR */
-       .word   0xffff, 0x0000
-       .byte   0x00, 0x93, 0xcf, 0x00
 gdt_end:
 
 /* Reset vector. */
-- 
coreboot mailing list: coreboot@coreboot.org
http://www.coreboot.org/mailman/listinfo/coreboot

Reply via email to