patch-2.4.10 linux/arch/ppc/kernel/m8xx_setup.c
Next file: linux/arch/ppc/kernel/misc.S
Previous file: linux/arch/ppc/kernel/m8260_setup.c
Back to the patch index
Back to the overall index
- Lines: 276
- Date:
Sat Sep 8 12:39:33 2001
- Orig file:
v2.4.9/linux/arch/ppc/kernel/m8xx_setup.c
- Orig date:
Wed Jul 25 17:10:18 2001
diff -u --recursive --new-file v2.4.9/linux/arch/ppc/kernel/m8xx_setup.c linux/arch/ppc/kernel/m8xx_setup.c
@@ -1,7 +1,6 @@
/*
- * BK Id: SCCS/s.m8xx_setup.c 1.23 07/18/01 22:56:39 paulus
- */
-/*
+ * BK Id: SCCS/s.m8xx_setup.c 1.29 08/30/01 09:01:04 trini
+ *
* linux/arch/ppc/kernel/setup.c
*
* Copyright (C) 1995 Linus Torvalds
@@ -172,8 +171,7 @@
machine_restart(NULL);
}
-/* A place holder for time base interrupts, if they are ever enabled.
-*/
+/* A place holder for time base interrupts, if they are ever enabled. */
void timebase_interrupt(int irq, void * dev, struct pt_regs * regs)
{
printk ("timebase_interrupt()\n");
@@ -188,13 +186,11 @@
bd_t *binfo = (bd_t *)__res;
int freq, fp, divisor;
- /* Unlock the SCCR.
- */
+ /* Unlock the SCCR. */
((volatile immap_t *)IMAP_ADDR)->im_clkrstk.cark_sccrk = ~KAPWR_KEY;
((volatile immap_t *)IMAP_ADDR)->im_clkrstk.cark_sccrk = KAPWR_KEY;
- /* Force all 8xx processors to use divide by 16 processor clock.
- */
+ /* Force all 8xx processors to use divide by 16 processor clock. */
((volatile immap_t *)IMAP_ADDR)->im_clkrst.car_sccr |= 0x02000000;
/* Processor frequency is MHz.
@@ -224,15 +220,17 @@
*/
((volatile immap_t *)IMAP_ADDR)->im_sitk.sitk_tbscrk = ~KAPWR_KEY;
((volatile immap_t *)IMAP_ADDR)->im_sitk.sitk_rtcsck = ~KAPWR_KEY;
- ((volatile immap_t *)IMAP_ADDR)->im_sitk.sitk_tbk = ~KAPWR_KEY;
+ ((volatile immap_t *)IMAP_ADDR)->im_sitk.sitk_tbk = ~KAPWR_KEY;
((volatile immap_t *)IMAP_ADDR)->im_sitk.sitk_tbscrk = KAPWR_KEY;
((volatile immap_t *)IMAP_ADDR)->im_sitk.sitk_rtcsck = KAPWR_KEY;
- ((volatile immap_t *)IMAP_ADDR)->im_sitk.sitk_tbk = KAPWR_KEY;
+ ((volatile immap_t *)IMAP_ADDR)->im_sitk.sitk_tbk = KAPWR_KEY;
- /* Disable the RTC one second and alarm interrupts.
- */
+ /* Disable the RTC one second and alarm interrupts. */
((volatile immap_t *)IMAP_ADDR)->im_sit.sit_rtcsc &=
~(RTCSC_SIE | RTCSC_ALE);
+ /* Enable the RTC */
+ ((volatile immap_t *)IMAP_ADDR)->im_sit.sit_rtcsc |=
+ (RTCSC_RTF | RTCSC_RTE);
/* Enabling the decrementer also enables the timebase interrupts
* (or from the other point of view, to get decrementer interrupts
@@ -260,15 +258,14 @@
return(0);
}
-unsigned long
+static unsigned long
m8xx_get_rtc_time(void)
{
- /* Get time from the RTC.
- */
+ /* Get time from the RTC. */
return((unsigned long)(((immap_t *)IMAP_ADDR)->im_sit.sit_rtc));
}
-void
+static void
m8xx_restart(char *cmd)
{
__volatile__ unsigned char dummy;
@@ -288,20 +285,21 @@
while(1);
}
-void
+static void
m8xx_power_off(void)
{
m8xx_restart(NULL);
}
-void
+static void
m8xx_halt(void)
{
m8xx_restart(NULL);
}
-int m8xx_setup_residual(char *buffer)
+static int
+m8xx_setup_residual(char *buffer)
{
int len = 0;
bd_t *bp;
@@ -322,7 +320,7 @@
* External interrupts can be either edge or level triggered, and
* need to be initialized by the appropriate driver.
*/
-void __init
+static void __init
m8xx_init_IRQ(void)
{
int i;
@@ -353,32 +351,12 @@
* IDE stuff.
*/
#ifdef CONFIG_BLK_DEV_MPC8xx_IDE
-void ide_interrupt_handler (void *dev)
+static void ide_interrupt_handler (void *dev)
{
}
#endif
-void
-m8xx_ide_insw(ide_ioreg_t port, void *buf, int ns)
-{
-#ifdef CONFIG_BLK_DEV_MPC8xx_IDE
- ide_insw(port, buf, ns);
-#else
- _insw_ns((unsigned short *)(port+_IO_BASE), buf, ns);
-#endif
-}
-
-void
-m8xx_ide_outsw(ide_ioreg_t port, void *buf, int ns)
-{
-#ifdef CONFIG_BLK_DEV_MPC8xx_IDE
- ide_outsw(port, buf, ns);
-#else
- _outsw_ns((unsigned short *)(port+_IO_BASE), buf, ns);
-#endif
-}
-
-int
+static int
m8xx_ide_default_irq(ide_ioreg_t base)
{
#ifdef CONFIG_BLK_DEV_MPC8xx_IDE
@@ -391,13 +369,13 @@
#endif
}
-ide_ioreg_t
+static ide_ioreg_t
m8xx_ide_default_io_base(int index)
{
return index;
}
-int
+static int
m8xx_ide_request_irq(unsigned int irq,
void (*handler)(int, void *, struct pt_regs *),
unsigned long flags,
@@ -412,8 +390,9 @@
*
* See include/linux/ide.h for definition of hw_regs_t (p, base)
*/
-void m8xx_ide_init_hwif_ports(hw_regs_t *hw,
- ide_ioreg_t data_port, ide_ioreg_t ctrl_port, int *irq)
+static void
+m8xx_ide_init_hwif_ports(hw_regs_t *hw, ide_ioreg_t data_port,
+ ide_ioreg_t ctrl_port, int *irq)
{
int i;
#ifdef CONFIG_BLK_DEV_MPC8xx_IDE
@@ -479,7 +458,7 @@
# endif /* CONFIG_SPD823TS, CONFIG_IVMS8 */
for (i = 0; i < IDE_NR_PORTS; ++i) {
- *p++ = base + ioport_dsc[data_port].reg_off[i];
+ *p++ = base + ioport_dsc[data_port].reg_off[i] - _IO_BASE;
}
if (irq) {
@@ -585,7 +564,8 @@
* functions in the image just to get prom_init, all we really need right
* now is the initialization of the physical memory region.
*/
-unsigned long __init m8xx_find_end_of_memory(void)
+static unsigned long __init
+m8xx_find_end_of_memory(void)
{
bd_t *binfo;
extern unsigned char __res[];
@@ -595,11 +575,47 @@
return binfo->bi_memsize;
}
-void __init
-m8xx_init(unsigned long r3, unsigned long r4, unsigned long r5,
- unsigned long r6, unsigned long r7)
+/*
+ * Now map in some of the I/O space that is generically needed
+ * or shared with multiple devices.
+ * All of this fits into the same 4Mbyte region, so it only
+ * requires one page table page. (or at least it used to -- paulus)
+ */
+static void __init
+m8xx_map_io(void)
{
+ io_block_mapping(IMAP_ADDR, IMAP_ADDR, IMAP_SIZE, _PAGE_IO);
+#ifdef CONFIG_MBX
+ io_block_mapping(NVRAM_ADDR, NVRAM_ADDR, NVRAM_SIZE, _PAGE_IO);
+ io_block_mapping(MBX_CSR_ADDR, MBX_CSR_ADDR, MBX_CSR_SIZE, _PAGE_IO);
+ io_block_mapping(PCI_CSR_ADDR, PCI_CSR_ADDR, PCI_CSR_SIZE, _PAGE_IO);
+
+ /* Map some of the PCI/ISA I/O space to get the IDE interface.
+ */
+ io_block_mapping(PCI_ISA_IO_ADDR, PCI_ISA_IO_ADDR, 0x4000, _PAGE_IO);
+ io_block_mapping(PCI_IDE_ADDR, PCI_IDE_ADDR, 0x4000, _PAGE_IO);
+#endif
+#if defined(CONFIG_RPXLITE) || defined(CONFIG_RPXCLASSIC)
+ io_block_mapping(RPX_CSR_ADDR, RPX_CSR_ADDR, RPX_CSR_SIZE, _PAGE_IO);
+#if !defined(CONFIG_PCI)
+ io_block_mapping(_IO_BASE,_IO_BASE,_IO_BASE_SIZE, _PAGE_IO);
+#endif
+#endif
+#ifdef CONFIG_HTDMSOUND
+ io_block_mapping(HIOX_CSR_ADDR, HIOX_CSR_ADDR, HIOX_CSR_SIZE, _PAGE_IO);
+#endif
+#ifdef CONFIG_FADS
+ io_block_mapping(BCSR_ADDR, BCSR_ADDR, BCSR_SIZE, _PAGE_IO);
+#endif
+#ifdef CONFIG_PCI
+ io_block_mapping(PCI_CSR_ADDR, PCI_CSR_ADDR, PCI_CSR_SIZE, _PAGE_IO);
+#endif
+}
+void __init
+platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
+ unsigned long r6, unsigned long r7)
+{
if ( r3 )
memcpy( (void *)__res,(void *)(r3+KERNELBASE), sizeof(bd_t) );
@@ -617,8 +633,7 @@
#endif /* CONFIG_BLK_DEV_INITRD */
/* take care of cmd line */
if ( r6 )
- {
-
+ {
*(char *)(r7+KERNELBASE) = 0;
strcpy(cmd_line, (char *)(r6+KERNELBASE));
}
@@ -641,6 +656,7 @@
ppc_md.calibrate_decr = m8xx_calibrate_decr;
ppc_md.find_end_of_memory = m8xx_find_end_of_memory;
+ ppc_md.setup_io_mappings = m8xx_map_io;
ppc_md.kbd_setkeycode = NULL;
ppc_md.kbd_getkeycode = NULL;
@@ -653,13 +669,8 @@
#endif
#if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_IDE_MODULE)
- ppc_ide_md.insw = m8xx_ide_insw;
- ppc_ide_md.outsw = m8xx_ide_outsw;
ppc_ide_md.default_irq = m8xx_ide_default_irq;
ppc_ide_md.default_io_base = m8xx_ide_default_io_base;
- ppc_ide_md.fix_driveid = ppc_generic_ide_fix_driveid;
ppc_ide_md.ide_init_hwif = m8xx_ide_init_hwif_ports;
-
- ppc_ide_md.io_base = _IO_BASE;
#endif
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)