patch-2.4.10 linux/arch/ppc/kernel/chrp_setup.c
Next file: linux/arch/ppc/kernel/chrp_smp.c
Previous file: linux/arch/ppc/kernel/chrp_pci.c
Back to the patch index
Back to the overall index
- Lines: 315
- Date:
Sat Sep 8 12:38:41 2001
- Orig file:
v2.4.9/linux/arch/ppc/kernel/chrp_setup.c
- Orig date:
Wed Jul 25 17:10:18 2001
diff -u --recursive --new-file v2.4.9/linux/arch/ppc/kernel/chrp_setup.c linux/arch/ppc/kernel/chrp_setup.c
@@ -1,5 +1,5 @@
/*
- * BK Id: SCCS/s.chrp_setup.c 1.22 07/18/01 22:56:39 paulus
+ * BK Id: SCCS/s.chrp_setup.c 1.36 09/08/01 15:47:42 paulus
*/
/*
* linux/arch/ppc/kernel/setup.c
@@ -51,8 +51,9 @@
#include <asm/irq.h>
#include <asm/hydra.h>
#include <asm/keyboard.h>
-#include <asm/init.h>
+#include <asm/sections.h>
#include <asm/time.h>
+#include <asm/btext.h>
#include "local_irq.h"
#include "i8259.h"
@@ -68,7 +69,7 @@
void chrp_event_scan(void);
void rtas_display_progress(char *, unsigned short);
void rtas_indicator_progress(char *, unsigned short);
-void bootx_text_progress(char *, unsigned short);
+void btext_progress(char *, unsigned short);
extern unsigned long pmac_find_end_of_memory(void);
extern int pckbd_setkeycode(unsigned int scancode, unsigned int keycode);
@@ -79,14 +80,7 @@
extern void pckbd_leds(unsigned char leds);
extern void pckbd_init_hw(void);
extern unsigned char pckbd_sysrq_xlate[128];
-extern int mackbd_setkeycode(unsigned int scancode, unsigned int keycode);
-extern int mackbd_getkeycode(unsigned int scancode);
-extern int mackbd_translate(unsigned char scancode, unsigned char *keycode,
- char raw_mode);
-extern char mackbd_unexpected_up(unsigned char keycode);
-extern void mackbd_leds(unsigned char leds);
-extern void mackbd_init_hw(void);
-extern unsigned char mackbd_sysrq_xlate[128];
+extern void select_adb_keyboard(void);
extern kdev_t boot_dev;
@@ -94,9 +88,13 @@
extern unsigned long Hash_size, Hash_mask;
extern int probingmem;
extern unsigned long loops_per_jiffy;
-extern int bootx_text_mapped;
static int max_width;
+#ifdef CONFIG_SMP
+extern struct smp_ops_t chrp_smp_ops;
+extern struct smp_ops_t xics_smp_ops;
+#endif
+
static const char *gg2_memtypes[4] = {
"FPM", "SDRAM", "EDO", "BEDO"
};
@@ -248,9 +246,6 @@
chrp_find_bridges();
#ifndef CONFIG_PPC64BRIDGE
- /* PCI bridge config space access area -
- * appears to be not in devtree on longtrail. */
- ioremap(GG2_PCI_CONFIG_BASE, 0x80000);
/*
* Temporary fixes for PCI devices.
* -- Geert
@@ -259,7 +254,6 @@
#endif /* CONFIG_PPC64BRIDGE */
-#ifndef CONFIG_POWER4
/* Some IBM machines don't have the hydra -- Cort */
if (!OpenPIC_Addr) {
struct device_node *root;
@@ -276,7 +270,6 @@
OpenPIC_Addr = ioremap(opprop[n-1], 0x40000);
}
}
-#endif
/*
* Fix the Super I/O configuration
@@ -401,9 +394,6 @@
void __init
chrp_init2(void)
{
-#if defined(CONFIG_VT) && defined(CONFIG_ADB_KEYBOARD)
- struct device_node *kbd;
-#endif
#ifdef CONFIG_NVRAM
pmac_nvram_init();
#endif
@@ -418,87 +408,35 @@
if (ppc_md.progress)
ppc_md.progress(" Have fun! ", 0x7777);
-#if defined(CONFIG_VT) && defined(CONFIG_ADB_KEYBOARD)
+#if defined(CONFIG_VT) && (defined(CONFIG_ADB_KEYBOARD) || defined(CONFIG_INPUT))
/* see if there is a keyboard in the device tree
with a parent of type "adb" */
- for (kbd = find_devices("keyboard"); kbd; kbd = kbd->next)
- if (kbd->parent && kbd->parent->type
- && strcmp(kbd->parent->type, "adb") == 0)
- break;
- if (kbd) {
- ppc_md.kbd_setkeycode = mackbd_setkeycode;
- ppc_md.kbd_getkeycode = mackbd_getkeycode;
- ppc_md.kbd_translate = mackbd_translate;
- ppc_md.kbd_unexpected_up = mackbd_unexpected_up;
- ppc_md.kbd_leds = mackbd_leds;
- ppc_md.kbd_init_hw = mackbd_init_hw;
-#ifdef CONFIG_MAGIC_SYSRQ
- ppc_md.ppc_kbd_sysrq_xlate = mackbd_sysrq_xlate;
- SYSRQ_KEY = 0x69;
-#endif /* CONFIG_MAGIC_SYSRQ */
+ {
+ struct device_node *kbd;
+
+ for (kbd = find_devices("keyboard"); kbd; kbd = kbd->next) {
+ if (kbd->parent && kbd->parent->type
+ && strcmp(kbd->parent->type, "adb") == 0) {
+ select_adb_keyboard();
+ break;
+ }
+ }
}
-#endif /* CONFIG_VT && CONFIG_ADB_KEYBOARD */
+#endif /* CONFIG_VT && (CONFIG_ADB_KEYBOARD || CONFIG_INPUT) */
}
#if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_IDE_MODULE)
/*
* IDE stuff.
*/
-unsigned int chrp_ide_irq = 0;
-int chrp_ide_ports_known = 0;
-ide_ioreg_t chrp_ide_regbase[MAX_HWIFS];
-ide_ioreg_t chrp_idedma_regbase;
-
-void __chrp
-chrp_ide_probe(void)
-{
- struct pci_dev *pdev = pci_find_device(PCI_VENDOR_ID_WINBOND, PCI_DEVICE_ID_WINBOND_82C105, NULL);
-
- chrp_ide_ports_known = 1;
-
- if(pdev) {
- chrp_ide_regbase[0]=pdev->resource[0].start;
- chrp_ide_regbase[1]=pdev->resource[2].start;
- chrp_idedma_regbase=pdev->resource[4].start;
- chrp_ide_irq=pdev->irq;
- }
-}
-void __chrp
-chrp_ide_insw(ide_ioreg_t port, void *buf, int ns)
-{
- ide_insw(port+_IO_BASE, buf, ns);
-}
-
-void __chrp
-chrp_ide_outsw(ide_ioreg_t port, void *buf, int ns)
-{
- ide_outsw(port+_IO_BASE, buf, ns);
-}
-
-int __chrp
-chrp_ide_default_irq(ide_ioreg_t base)
-{
- if (chrp_ide_ports_known == 0)
- chrp_ide_probe();
- return chrp_ide_irq;
-}
-
-ide_ioreg_t __chrp
-chrp_ide_default_io_base(int index)
-{
- if (chrp_ide_ports_known == 0)
- chrp_ide_probe();
- return chrp_ide_regbase[index];
-}
-
-int __chrp
+static int __chrp
chrp_ide_check_region(ide_ioreg_t from, unsigned int extent)
{
return check_region(from, extent);
}
-void __chrp
+static void __chrp
chrp_ide_request_region(ide_ioreg_t from,
unsigned int extent,
const char *name)
@@ -506,14 +444,14 @@
request_region(from, extent, name);
}
-void __chrp
+static void __chrp
chrp_ide_release_region(ide_ioreg_t from,
unsigned int extent)
{
release_region(from, extent);
}
-void __chrp
+static void __chrp
chrp_ide_init_hwif_ports(hw_regs_t *hw, ide_ioreg_t data_port, ide_ioreg_t ctrl_port, int *irq)
{
ide_ioreg_t reg = data_port;
@@ -523,20 +461,42 @@
hw->io_ports[i] = reg;
reg += 1;
}
- if (ctrl_port) {
- hw->io_ports[IDE_CONTROL_OFFSET] = ctrl_port;
+ hw->io_ports[IDE_CONTROL_OFFSET] = ctrl_port;
+}
+#endif
+
+/*
+ * One of the main thing these mappings are needed for is so that
+ * xmon can get to the serial port early on. We probably should
+ * handle the machines with the mpc106 as well as the python (F50)
+ * and the GG2 (longtrail). Actually we should look in the device
+ * tree and do the right thing.
+ */
+static void __init
+chrp_map_io(void)
+{
+ char *name;
+
+ /*
+ * The code below tends to get removed, please don't take it out.
+ * The F50 needs this mapping and it you take it out I'll track you
+ * down and slap your hands. If it causes problems please email me.
+ * -- Cort <cort@fsmlabs.com>
+ */
+ name = get_property(find_path_device("/"), "name", NULL);
+ if (name && strncmp(name, "IBM-70", 6) == 0
+ && strstr(name, "-F50")) {
+ io_block_mapping(0x80000000, 0x80000000, 0x10000000, _PAGE_IO);
+ io_block_mapping(0x90000000, 0x90000000, 0x10000000, _PAGE_IO);
+ return;
} else {
- hw->io_ports[IDE_CONTROL_OFFSET] = 0;
+ io_block_mapping(0xf8000000, 0xf8000000, 0x04000000, _PAGE_IO);
}
- if (irq != NULL)
- hw->irq = chrp_ide_irq;
}
-#endif
-
void __init
- chrp_init(unsigned long r3, unsigned long r4, unsigned long r5,
- unsigned long r6, unsigned long r7)
+chrp_init(unsigned long r3, unsigned long r4, unsigned long r5,
+ unsigned long r6, unsigned long r7)
{
#ifdef CONFIG_BLK_DEV_INITRD
/* take care of initrd if we have one */
@@ -576,6 +536,7 @@
ppc_md.calibrate_decr = chrp_calibrate_decr;
ppc_md.find_end_of_memory = pmac_find_end_of_memory;
+ ppc_md.setup_io_mappings = chrp_map_io;
#ifdef CONFIG_VT
/* these are adjusted in chrp_init2 if we have an ADB keyboard */
@@ -608,22 +569,23 @@
}
}
#ifdef CONFIG_BOOTX_TEXT
- if (ppc_md.progress == NULL && bootx_text_mapped)
- ppc_md.progress = bootx_text_progress;
+ if (ppc_md.progress == NULL && boot_text_mapped)
+ ppc_md.progress = btext_progress;
#endif
+#ifdef CONFIG_SMP
+#ifndef CONFIG_POWER4
+ ppc_md.smp_ops = &chrp_smp_ops;
+#else
+ ppc_md.smp_ops = &xics_smp_ops;
+#endif /* CONFIG_POWER4 */
+#endif /* CONFIG_SMP */
+
#if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_IDE_MODULE)
- ppc_ide_md.insw = chrp_ide_insw;
- ppc_ide_md.outsw = chrp_ide_outsw;
- ppc_ide_md.default_irq = chrp_ide_default_irq;
- ppc_ide_md.default_io_base = chrp_ide_default_io_base;
ppc_ide_md.ide_check_region = chrp_ide_check_region;
ppc_ide_md.ide_request_region = chrp_ide_request_region;
ppc_ide_md.ide_release_region = chrp_ide_release_region;
- ppc_ide_md.fix_driveid = ppc_generic_ide_fix_driveid;
ppc_ide_md.ide_init_hwif = chrp_ide_init_hwif_ports;
-
- ppc_ide_md.io_base = _IO_BASE;
#endif
/*
@@ -668,7 +630,7 @@
#ifdef CONFIG_BOOTX_TEXT
void
-bootx_text_progress(char *s, unsigned short hex)
+btext_progress(char *s, unsigned short hex)
{
prom_print(s);
prom_print("\n");
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)