parisc: Make existing core files reuseable for bootloader
authorHelge Deller <deller@gmx.de>
Sun, 20 Aug 2017 08:52:22 +0000 (10:52 +0200)
committerHelge Deller <deller@gmx.de>
Tue, 22 Aug 2017 14:34:35 +0000 (16:34 +0200)
Signed-off-by: Helge Deller <deller@gmx.de>
arch/parisc/include/asm/page.h
arch/parisc/include/asm/pdc.h
arch/parisc/kernel/firmware.c
arch/parisc/kernel/real2.S

index 80e742a..bfed09d 100644 (file)
@@ -116,11 +116,15 @@ extern int npmem_ranges;
 /* This governs the relationship between virtual and physical addresses.
  * If you alter it, make sure to take care of our various fixed mapping
  * segments in fixmap.h */
+#if defined(BOOTLOADER)
+#define __PAGE_OFFSET  (0)             /* bootloader uses physical addresses */
+#else
 #ifdef CONFIG_64BIT
 #define __PAGE_OFFSET  (0x40000000)    /* 1GB */
 #else
 #define __PAGE_OFFSET  (0x10000000)    /* 256MB */
 #endif
+#endif /* BOOTLOADER */
 
 #define PAGE_OFFSET            ((unsigned long)__PAGE_OFFSET)
 
index 7569627..26b4455 100644 (file)
@@ -5,6 +5,8 @@
 
 #if !defined(__ASSEMBLY__)
 
+extern int parisc_narrow_firmware;
+
 extern int pdc_type;
 extern unsigned long parisc_cell_num; /* cell number the CPU runs on (PAT) */
 extern unsigned long parisc_cell_loc; /* cell location of CPU (PAT)       */
index be9a2e8..ab80e5c 100644 (file)
 #include <asm/pdcpat.h>
 #include <asm/processor.h>     /* for boot_cpu_data */
 
+#if defined(BOOTLOADER)
+# undef  spin_lock_irqsave
+# define spin_lock_irqsave(a, b) { b = 1; }
+# undef  spin_unlock_irqrestore
+# define spin_unlock_irqrestore(a, b)
+#else
 static DEFINE_SPINLOCK(pdc_lock);
+#endif
+
 extern unsigned long pdc_result[NUM_PDC_RESULT];
 extern unsigned long pdc_result2[NUM_PDC_RESULT];
 
@@ -186,6 +194,8 @@ void set_firmware_width(void)
 }
 #endif /*CONFIG_64BIT*/
 
+
+#if !defined(BOOTLOADER)
 /**
  * pdc_emergency_unlock - Unlock the linux pdc lock
  *
@@ -1149,6 +1159,8 @@ void pdc_io_reset_devices(void)
        spin_unlock_irqrestore(&pdc_lock, flags);
 }
 
+#endif /* defined(BOOTLOADER) */
+
 /* locked by pdc_console_lock */
 static int __attribute__((aligned(8)))   iodc_retbuf[32];
 static char __attribute__((aligned(64))) iodc_dbuf[4096];
@@ -1193,6 +1205,7 @@ print:
        return i;
 }
 
+#if !defined(BOOTLOADER)
 /**
  * pdc_iodc_getc - Read a character (non-blocking) from the PDC console.
  *
@@ -1555,6 +1568,7 @@ int pdc_pat_mem_get_dimm_phys_location(
        return retval;
 }
 #endif /* CONFIG_64BIT */
+#endif /* defined(BOOTLOADER) */
 
 
 /***************** 32-bit real-mode calls ***********/
@@ -1664,4 +1678,3 @@ long real64_call(unsigned long fn, ...)
 }
 
 #endif /* CONFIG_64BIT */
-
index 1db58e5..cc99634 100644 (file)
@@ -162,6 +162,7 @@ ENDPROC_CFI(restore_control_regs)
        .text
        .align 128
 ENTRY_CFI(rfi_virt2real)
+#if !defined(BOOTLOADER)
        /* switch to real mode... */
        rsm             PSW_SM_I,%r0
        load32          PA(rfi_v2r_1), %r1
@@ -191,6 +192,7 @@ ENTRY_CFI(rfi_virt2real)
        nop
 rfi_v2r_1:
        tophys_r1 %r2
+#endif /* defined(BOOTLOADER) */
        bv      0(%r2)
        nop
 ENDPROC_CFI(rfi_virt2real)
@@ -198,6 +200,7 @@ ENDPROC_CFI(rfi_virt2real)
        .text
        .align 128
 ENTRY_CFI(rfi_real2virt)
+#if !defined(BOOTLOADER)
        rsm             PSW_SM_I,%r0
        load32          (rfi_r2v_1), %r1
        nop
@@ -226,6 +229,7 @@ ENTRY_CFI(rfi_real2virt)
        nop
 rfi_r2v_1:
        tovirt_r1 %r2
+#endif /* defined(BOOTLOADER) */
        bv      0(%r2)
        nop
 ENDPROC_CFI(rfi_real2virt)