]> git.openfabrics.org - ~shefty/rdma-dev.git/commitdiff
powerpc: Initialize btext subsystem later, after prom_init
authorPaul Mackerras <paulus@samba.org>
Mon, 17 Oct 2005 09:20:46 +0000 (19:20 +1000)
committerPaul Mackerras <paulus@samba.org>
Mon, 17 Oct 2005 09:20:46 +0000 (19:20 +1000)
We were initializing the btext stuff from prom_init(), thus breaking
the rule that all communication between prom_init() and the rest of
the kernel has to be via the flattened device tree.  This removes
the btext initialization calls from prom_init() and initializes it
instead after the device tree is unflattened.  It would be nice to
do it earlier, but that needs some more infrastructure to find the
properties we need in the flattened device tree.

Signed-off-by: Paul Mackerras <paulus@samba.org>
arch/powerpc/kernel/head_32.S
arch/powerpc/kernel/prom_init.c
arch/powerpc/kernel/setup_32.c
arch/powerpc/mm/init_32.c

index d9b063f567e01db15ba17f1cffc4c1231ed56a7e..7ef9a3e3002b0715f869cb63776fc571f91194f6 100644 (file)
@@ -153,9 +153,6 @@ __after_mmu_off:
        bl      flush_tlbs
 
        bl      initial_bats
-#if !defined(CONFIG_APUS) && defined(CONFIG_BOOTX_TEXT)
-       bl      setup_disp_bat
-#endif
 
 /*
  * Call setup_cpu for CPU 0 and initialize 6xx Idle
@@ -1297,31 +1294,6 @@ initial_bats:
        isync
        blr
 
-#if !defined(CONFIG_APUS) && defined(CONFIG_BOOTX_TEXT)
-setup_disp_bat:
-       /*
-        * setup the display bat prepared for us in prom.c
-        */
-       mflr    r8
-       bl      reloc_offset
-       mtlr    r8
-       addis   r8,r3,disp_BAT@ha
-       addi    r8,r8,disp_BAT@l
-       lwz     r11,0(r8)
-       lwz     r8,4(r8)
-       mfspr   r9,SPRN_PVR
-       rlwinm  r9,r9,16,16,31          /* r9 = 1 for 601, 4 for 604 */
-       cmpwi   0,r9,1
-       beq     1f
-       mtspr   SPRN_DBAT3L,r8
-       mtspr   SPRN_DBAT3U,r11
-       blr
-1:     mtspr   SPRN_IBAT3L,r8
-       mtspr   SPRN_IBAT3U,r11
-       blr
-
-#endif /* !defined(CONFIG_APUS) && defined(CONFIG_BOOTX_TEXT) */
-
 
 #ifdef CONFIG_8260
 /* Jump into the system reset for the rom.
index 911a803f27da210bfc81c7e6879c7b32dcb3b998..d9130c8390395946c683f13e120c2f27282fcf27 100644 (file)
@@ -1404,62 +1404,6 @@ static int __init prom_find_machine_type(void)
 #endif
 }
 
-static int __init setup_disp(phandle dp)
-{
-#if defined(CONFIG_BOOTX_TEXT) && defined(CONFIG_PPC32)
-       int width = 640, height = 480, depth = 8, pitch;
-       unsigned address;
-       u32 addrs[8][5];
-       int i, naddrs;
-       char name[32];
-       char *getprop = "getprop";
-
-       prom_printf("Initializing screen: ");
-
-       memset(name, 0, sizeof(name));
-       call_prom(getprop, 4, 1, dp, "name", name, sizeof(name));
-       name[sizeof(name)-1] = 0;
-       prom_print(name);
-       prom_print("\n");
-       call_prom(getprop, 4, 1, dp, "width", &width, sizeof(width));
-       call_prom(getprop, 4, 1, dp, "height", &height, sizeof(height));
-       call_prom(getprop, 4, 1, dp, "depth", &depth, sizeof(depth));
-       pitch = width * ((depth + 7) / 8);
-       call_prom(getprop, 4, 1, dp, "linebytes",
-                 &pitch, sizeof(pitch));
-       if (pitch == 1)
-               pitch = 0x1000;         /* for strange IBM display */
-       address = 0;
-       call_prom(getprop, 4, 1, dp, "address", &address, sizeof(address));
-       if (address == 0) {
-               /* look for an assigned address with a size of >= 1MB */
-               naddrs = call_prom(getprop, 4, 1, dp, "assigned-addresses",
-                                  addrs, sizeof(addrs));
-               naddrs /= 20;
-               for (i = 0; i < naddrs; ++i) {
-                       if (addrs[i][4] >= (1 << 20)) {
-                               address = addrs[i][2];
-                               /* use the BE aperture if possible */
-                               if (addrs[i][4] >= (16 << 20))
-                                       address += (8 << 20);
-                               break;
-                       }
-               }
-               if (address == 0) {
-                       prom_print("Failed to get address\n");
-                       return 0;
-               }
-       }
-       /* kludge for valkyrie */
-       if (strcmp(name, "valkyrie") == 0)
-               address += 0x1000;
-
-       prom_printf("\n\n\n\naddress = %x\n", address);
-       btext_setup_display(width, height, depth, pitch, address);
-#endif /* CONFIG_BOOTX_TEXT && CONFIG_PPC32 */
-       return 1;
-}
-
 static int __init prom_set_color(ihandle ih, int i, int r, int g, int b)
 {
        return call_prom("call-method", 6, 1, ADDR("color!"), ih, i, b, g, r);
@@ -1479,7 +1423,6 @@ static void __init prom_check_displays(void)
        phandle node;
        ihandle ih;
        int i;
-       int got_display = 0;
 
        static unsigned char default_colors[] = {
                0x00, 0x00, 0x00,
@@ -1546,8 +1489,6 @@ static void __init prom_check_displays(void)
                                           clut[2]) != 0)
                                break;
 #endif /* CONFIG_LOGO_LINUX_CLUT224 */
-               if (!got_display)
-                       got_display = setup_disp(node);
        }
 }
 
index bfa155c00ea5b3f9abd15dccd4d2cb94a96c1670..e68f848f24bfddf266a763219a2ec1c7f597304b 100644 (file)
@@ -294,8 +294,6 @@ unsigned long __init early_init(unsigned long dt_ptr)
 {
        unsigned long offset = reloc_offset();
 
-       reloc_got2(offset);
-
        /*
         * Identify the CPU type and fix up code sections
         * that depend on which cpu we have.
@@ -303,12 +301,6 @@ unsigned long __init early_init(unsigned long dt_ptr)
        identify_cpu(offset, 0);
        do_cpu_ftr_fixups(offset);
 
-#ifdef CONFIG_BOOTX_TEXT
-       btext_prepare_BAT();
-#endif
-
-       reloc_got2(-offset);
-
        return KERNELBASE + offset;
 }
 
@@ -578,13 +570,13 @@ void __init setup_arch(char **cmdline_p)
        /* so udelay does something sensible, assume <= 1000 bogomips */
        loops_per_jiffy = 500000000 / HZ;
 
-#ifdef CONFIG_BOOTX_TEXT
-       map_boot_text();
-#endif
-
        unflatten_device_tree();
        finish_device_tree();
 
+#ifdef CONFIG_BOOTX_TEXT
+       init_boot_display();
+#endif
+
 #ifdef CONFIG_PPC_MULTIPLATFORM
        /* This could be called "early setup arch", it must be done
         * now because xmon need it
index bf13c14e66b3a89fead856c220fb692cbdd61152..caeb02ee72c590e88d3329e11c54065aeea3a745 100644 (file)
@@ -188,13 +188,6 @@ void __init MMU_init(void)
 
        if (ppc_md.progress)
                ppc_md.progress("MMU:exit", 0x211);
-
-#ifdef CONFIG_BOOTX_TEXT
-       /* By default, we are no longer mapped */
-               boot_text_mapped = 0;
-       /* Must be done last, or ppc_md.progress will die. */
-       map_boot_text();
-#endif
 }
 
 /* This is only called until mem_init is done. */