Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch/macppc/stand/ofwboot - add some G5-specific setup



details:   https://anonhg.NetBSD.org/src/rev/4f82a36025c9
branches:  trunk
changeset: 992188:4f82a36025c9
user:      macallan <macallan%NetBSD.org@localhost>
date:      Fri Aug 17 16:04:39 2018 +0000

description:
- add some G5-specific setup
- OF_claim() more heap space on G5
With this, and -DHEAP_VARIABLE my G5s boot from harddisk

diffstat:

 sys/arch/macppc/stand/ofwboot/Locore.c |  48 ++++++++++++++++++++++++++++-----
 1 files changed, 40 insertions(+), 8 deletions(-)

diffs (92 lines):

diff -r 808358eb62d4 -r 4f82a36025c9 sys/arch/macppc/stand/ofwboot/Locore.c
--- a/sys/arch/macppc/stand/ofwboot/Locore.c    Fri Aug 17 15:54:35 2018 +0000
+++ b/sys/arch/macppc/stand/ofwboot/Locore.c    Fri Aug 17 16:04:39 2018 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: Locore.c,v 1.31 2018/06/06 23:50:29 uwe Exp $  */
+/*     $NetBSD: Locore.c,v 1.32 2018/08/17 16:04:39 macallan Exp $     */
 
 /*
  * Copyright (C) 1995, 1996 Wolfgang Solfrank.
@@ -35,6 +35,7 @@
 #include <lib/libsa/stand.h>
 
 #include <machine/cpu.h>
+#include <powerpc/oea/spr.h>
 
 #include "openfirm.h"
 
@@ -81,9 +82,13 @@
 "      mfspr   %r0,287         \n" /* mfpvbr %r0 PVR = 287 */
 "      srwi    %r0,%r0,0x10    \n"
 "      cmpi    0,1,%r0,0x02    \n" /* 601 CPU = 0x0001 */
-"      blt     1f              \n" /* skip over non-601 BAT setup */
+"      blt     2f              \n" /* skip over non-601 BAT setup */
+"      cmpi    0,1,%r0,0x39    \n" /* PPC970 */
+"      blt     0f              \n"
+"      cmpi    0,1,%r0,0x45    \n" /* PPC970GX */
+"      ble     1f              \n"
        /* non PPC 601 BATs */
-"      li      %r0,0           \n"
+"0:    li      %r0,0           \n"
 "      mtibatu 0,%r0           \n"
 "      mtibatu 1,%r0           \n"
 "      mtibatu 2,%r0           \n"
@@ -99,10 +104,31 @@
 "      li      %r9,0x1ffe      \n"     /* BATU(0, BAT_BL_256M, BAT_Vs) */
 "      mtibatu 0,%r9           \n"
 "      mtdbatu 0,%r9           \n"
-"      b       2f              \n"
-
+"      b       3f              \n"
+       /* 970 initialization stuff */
+"1:                            \n"
+       /* make sure we're in bridge mode */
+"      clrldi  %r8,%r8,3       \n"
+"      mtmsrd  %r8             \n"
+"      isync                   \n"
+        /* clear HID5 DCBZ bits (56/57), need to do this early */
+"      mfspr   %r9,0x3f6       \n"
+"      rldimi  %r9,0,6,56      \n"
+"      sync                    \n"
+"      mtspr   0x3f6,%r9       \n"
+"      isync                   \n"
+"      sync                    \n"
+       /* Setup HID1 features, prefetch + i-cacheability controlled by PTE */
+"      mfspr   %r9,0x3f1       \n"
+"      li      %r11,0x1200     \n"
+"      sldi    %r11,%r11,44    \n"
+"      or      %r9,%r9,%r11    \n"
+"      mtspr   0x3f1,%r9       \n"
+"      isync                   \n"
+"      sync                    \n"
+"      b       3f              \n"     
        /* PPC 601 BATs */
-"1:    li      %r0,0           \n"
+"2:    li      %r0,0           \n"
 "      mtibatu 0,%r0           \n"
 "      mtibatu 1,%r0           \n"
 "      mtibatu 2,%r0           \n"
@@ -134,7 +160,7 @@
 "      addi    %r9,%r9,0x1a    \n"
 "      mtibatu 3,%r9           \n"
 "                              \n"
-"2:    isync                   \n"
+"3:    isync                   \n"
 "                              \n"
 "      mtmsr   %r8             \n"
 "      isync                   \n"
@@ -649,7 +675,13 @@
                OF_exit();
 
 #ifdef HEAP_VARIABLE
-       heapspace = OF_claim(0, HEAP_SIZE, NBPG);
+       uint32_t pvr, vers, hsize = HEAP_SIZE;
+
+       __asm volatile ("mfpvr %0" : "=r"(pvr));
+       vers = pvr >> 16;
+       if (vers >= IBM970 && vers <= IBM970GX) hsize = 0x800000;
+
+       heapspace = OF_claim(0, hsize, NBPG);
        if (heapspace == (char *)-1) {
                panic("Failed to allocate heap");
        }



Home | Main Index | Thread Index | Old Index