[MIPS] SNI RM updates
authorThomas Bogendoerfer <tsbogend@alpha.franken.de>
Wed, 20 Jun 2007 21:36:47 +0000 (23:36 +0200)
committerRalf Baechle <ralf@linux-mips.org>
Tue, 10 Jul 2007 16:33:03 +0000 (17:33 +0100)
- use RTC_CLASS instead of GEN_RTC
- get rid of ds1216 in favour of a RTC_CLASS driver
- use correct console device for older RM400
- use physical addresses for 82596 device
- use 128 byte L1 cache line size (this is needed because most of the
  SNI caches are using 128 L2 cache lines)

Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/Kconfig
arch/mips/sni/Makefile
arch/mips/sni/a20r.c
arch/mips/sni/ds1216.c [deleted file]
arch/mips/sni/pcimt.c
arch/mips/sni/pcit.c
arch/mips/sni/rm200.c
arch/mips/sni/sniprom.c
include/asm-mips/sni.h

index 2076d472ea99ae79e1e4b855ab44996b8eba2242..24661d60bc8ff57699db97e74fec8c074cd2f05f 100644 (file)
@@ -918,8 +918,8 @@ config BOOT_ELF32
 
 config MIPS_L1_CACHE_SHIFT
        int
-       default "4" if MACH_DECSTATION || SNI_RM
-       default "7" if SGI_IP27
+       default "4" if MACH_DECSTATION
+       default "7" if SGI_IP27 || SNI_RM
        default "4" if PMC_MSP4200_EVAL
        default "5"
 
index e5777b7e2bc9507555535647a4aa8a5c80f8c027..471418e4f446a4abc77dcd906bc93f52b554e66d 100644 (file)
@@ -2,5 +2,5 @@
 # Makefile for the SNI specific part of the kernel
 #
 
-obj-y += irq.o reset.o setup.o ds1216.o a20r.o rm200.o pcimt.o pcit.o time.o
+obj-y += irq.o reset.o setup.o a20r.o rm200.o pcimt.o pcit.o time.o
 obj-$(CONFIG_CPU_BIG_ENDIAN) += sniprom.o
index 31ab80f1befabeb3a4e34b01ad08a28212303918..6850a29defcd20b9979c76957bb5a24c0145d82a 100644 (file)
@@ -15,7 +15,6 @@
 
 #include <asm/sni.h>
 #include <asm/time.h>
-#include <asm/ds1216.h>
 
 #define PORT(_base,_irq)                               \
        {                                               \
@@ -40,20 +39,34 @@ static struct platform_device a20r_serial8250_device = {
        },
 };
 
+static struct resource a20r_ds1216_rsrc[] = {
+        {
+                .start = 0x1c081ffc,
+                .end   = 0x1c081fff,
+                .flags = IORESOURCE_MEM
+        }
+};
+
+static struct platform_device a20r_ds1216_device = {
+        .name           = "rtc-ds1216",
+        .num_resources  = ARRAY_SIZE(a20r_ds1216_rsrc),
+        .resource       = a20r_ds1216_rsrc
+};
+
 static struct resource snirm_82596_rsrc[] = {
        {
-               .start = 0xb8000000,
-               .end   = 0xb8000004,
+               .start = 0x18000000,
+               .end   = 0x18000004,
                .flags = IORESOURCE_MEM
        },
        {
-               .start = 0xb8010000,
-               .end   = 0xb8010004,
+               .start = 0x18010000,
+               .end   = 0x18010004,
                .flags = IORESOURCE_MEM
        },
        {
-               .start = 0xbff00000,
-               .end   = 0xbff00020,
+               .start = 0x1ff00000,
+               .end   = 0x1ff00020,
                .flags = IORESOURCE_MEM
        },
        {
@@ -205,8 +218,7 @@ void __init sni_a20r_irq_init(void)
 
 void sni_a20r_init(void)
 {
-       ds1216_base = (volatile unsigned char *) SNI_DS1216_A20R_BASE;
-       rtc_mips_get_time = ds1216_get_cmos_time;
+       /* FIXME, remove if not needed */
 }
 
 static int __init snirm_a20r_setup_devinit(void)
@@ -218,6 +230,7 @@ static int __init snirm_a20r_setup_devinit(void)
                platform_device_register(&snirm_53c710_pdev);
                platform_device_register(&sc26xx_pdev);
                platform_device_register(&a20r_serial8250_device);
+               platform_device_register(&a20r_ds1216_device);
                break;
        }
 
diff --git a/arch/mips/sni/ds1216.c b/arch/mips/sni/ds1216.c
deleted file mode 100644 (file)
index 1d92732..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-
-#include <linux/bcd.h>
-#include <linux/time.h>
-
-#include <asm/ds1216.h>
-
-volatile unsigned char *ds1216_base;
-
-/*
- * Read the 64 bit we'd like to have - It a series
- * of 64 bits showing up in the LSB of the base register.
- *
- */
-static unsigned char *ds1216_read(void)
-{
-       static unsigned char    rdbuf[8];
-       unsigned char           c;
-       int                     i, j;
-
-       for (i = 0; i < 8; i++) {
-               c = 0x0;
-               for (j = 0; j < 8; j++) {
-                       c |= (*ds1216_base & 0x1) << j;
-               }
-               rdbuf[i] = c;
-       }
-
-       return rdbuf;
-}
-
-static void ds1216_switch_ds_to_clock(void)
-{
-       unsigned char magic[] = {
-               0xc5, 0x3a, 0xa3, 0x5c, 0xc5, 0x3a, 0xa3, 0x5c
-       };
-       int i,j,c;
-
-       /* Reset magic pointer */
-       c = *ds1216_base;
-
-       /* Write 64 bit magic to DS1216 */
-       for (i = 0; i < 8; i++) {
-               c = magic[i];
-               for (j = 0; j < 8; j++) {
-                       *ds1216_base = c;
-                       c = c >> 1;
-               }
-       }
-}
-
-unsigned long ds1216_get_cmos_time(void)
-{
-       unsigned char   *rdbuf;
-       unsigned int    year, month, date, hour, min, sec;
-
-       ds1216_switch_ds_to_clock();
-       rdbuf = ds1216_read();
-
-       sec = BCD2BIN(DS1216_SEC(rdbuf));
-       min = BCD2BIN(DS1216_MIN(rdbuf));
-       hour = BCD2BIN(DS1216_HOUR(rdbuf));
-       date = BCD2BIN(DS1216_DATE(rdbuf));
-       month = BCD2BIN(DS1216_MONTH(rdbuf));
-       year = BCD2BIN(DS1216_YEAR(rdbuf));
-
-       if (DS1216_1224(rdbuf) && DS1216_AMPM(rdbuf))
-               hour+=12;
-
-       if (year < 70)
-               year += 2000;
-       else
-               year += 1900;
-
-       return mktime(year, month, date, hour, min, sec);
-}
-
-int ds1216_set_rtc_mmss(unsigned long nowtime)
-{
-       printk("ds1216_set_rtc_mmss called but not implemented\n");
-       return -1;
-}
index 97b234361b4d0afa8d5c0b64434c2bf07a253292..44b1ae62aa4ac0ed4aef2534fbd2185478f3da1e 100644 (file)
@@ -14,7 +14,6 @@
 #include <linux/pci.h>
 #include <linux/serial_8250.h>
 
-#include <asm/mc146818-time.h>
 #include <asm/sni.h>
 #include <asm/time.h>
 #include <asm/i8259.h>
@@ -90,6 +89,26 @@ static struct platform_device pcimt_serial8250_device = {
        },
 };
 
+static struct resource pcimt_cmos_rsrc[] = {
+        {
+                .start = 0x70,
+                .end   = 0x71,
+                .flags = IORESOURCE_IO
+        },
+        {
+                .start = 8,
+                .end   = 8,
+                .flags = IORESOURCE_IRQ
+        }
+};
+
+static struct platform_device pcimt_cmos_device = {
+        .name           = "rtc_cmos",
+        .num_resources  = ARRAY_SIZE(pcimt_cmos_rsrc),
+        .resource       = pcimt_cmos_rsrc
+};
+
+
 static struct resource sni_io_resource = {
        .start  = 0x00000000UL,
        .end    = 0x03bfffffUL,
@@ -290,12 +309,10 @@ void __init sni_pcimt_irq_init(void)
        change_c0_status(ST0_IM, IE_IRQ1|IE_IRQ3);
 }
 
-void sni_pcimt_init(void)
+void __init sni_pcimt_init(void)
 {
        sni_pcimt_detect();
        sni_pcimt_sc_init();
-       rtc_mips_get_time = mc146818_get_cmos_time;
-       rtc_mips_set_time = mc146818_set_rtc_mmss;
        board_time_init = sni_cpu_time_init;
        ioport_resource.end = sni_io_resource.end;
 #ifdef CONFIG_PCI
@@ -312,6 +329,7 @@ static int __init snirm_pcimt_setup_devinit(void)
        case SNI_BRD_PCI_DESKTOP:
        case SNI_BRD_PCI_MTOWER_CPLUS:
                platform_device_register(&pcimt_serial8250_device);
+               platform_device_register(&pcimt_cmos_device);
                break;
        }
 
index 00d151f4d121875a4ef6b2dbd40ab1c57e4c8f61..2480c478dcbdc7b44e5a80fa054ec2ef227ab2dc 100644 (file)
@@ -13,7 +13,6 @@
 #include <linux/pci.h>
 #include <linux/serial_8250.h>
 
-#include <asm/mc146818-time.h>
 #include <asm/sni.h>
 #include <asm/time.h>
 #include <asm/irq_cpu.h>
@@ -58,6 +57,25 @@ static struct platform_device pcit_cplus_serial8250_device = {
        },
 };
 
+static struct resource pcit_cmos_rsrc[] = {
+        {
+                .start = 0x70,
+                .end   = 0x71,
+                .flags = IORESOURCE_IO
+        },
+        {
+                .start = 8,
+                .end   = 8,
+                .flags = IORESOURCE_IRQ
+        }
+};
+
+static struct platform_device pcit_cmos_device = {
+        .name           = "rtc_cmos",
+        .num_resources  = ARRAY_SIZE(pcit_cmos_rsrc),
+        .resource       = pcit_cmos_rsrc
+};
+
 static struct resource sni_io_resource = {
        .start  = 0x00000000UL,
        .end    = 0x03bfffffUL,
@@ -243,10 +261,8 @@ void __init sni_pcit_cplus_irq_init(void)
        setup_irq (MIPS_CPU_IRQ_BASE + 3, &sni_isa_irq);
 }
 
-void sni_pcit_init(void)
+void __init sni_pcit_init(void)
 {
-       rtc_mips_get_time = mc146818_get_cmos_time;
-       rtc_mips_set_time = mc146818_set_rtc_mmss;
        board_time_init = sni_cpu_time_init;
        ioport_resource.end = sni_io_resource.end;
 #ifdef CONFIG_PCI
@@ -261,10 +277,12 @@ static int __init snirm_pcit_setup_devinit(void)
        switch (sni_brd_type) {
        case SNI_BRD_PCI_TOWER:
                platform_device_register(&pcit_serial8250_device);
+               platform_device_register(&pcit_cmos_device);
                break;
 
        case SNI_BRD_PCI_TOWER_CPLUS:
                platform_device_register(&pcit_cplus_serial8250_device);
+               platform_device_register(&pcit_cmos_device);
                break;
        }
        return 0;
index b82ff129f5ead20d452f8f76d6ea3a6b90a9d1fb..4bfda020fdc71015dc37c3d76128f633bed5a894 100644 (file)
@@ -15,7 +15,6 @@
 
 #include <asm/sni.h>
 #include <asm/time.h>
-#include <asm/ds1216.h>
 #include <asm/irq_cpu.h>
 
 #define PORT(_base,_irq)                               \
@@ -41,20 +40,34 @@ static struct platform_device rm200_serial8250_device = {
        },
 };
 
+static struct resource rm200_ds1216_rsrc[] = {
+        {
+                .start = 0x1cd41ffc,
+                .end   = 0x1cd41fff,
+                .flags = IORESOURCE_MEM
+        }
+};
+
+static struct platform_device rm200_ds1216_device = {
+        .name           = "rtc-ds1216",
+        .num_resources  = ARRAY_SIZE(rm200_ds1216_rsrc),
+        .resource       = rm200_ds1216_rsrc
+};
+
 static struct resource snirm_82596_rm200_rsrc[] = {
        {
-               .start = 0xb8000000,
-               .end   = 0xb80fffff,
+               .start = 0x18000000,
+               .end   = 0x180fffff,
                .flags = IORESOURCE_MEM
        },
        {
-               .start = 0xbb000000,
-               .end   = 0xbb000004,
+               .start = 0x1b000000,
+               .end   = 0x1b000004,
                .flags = IORESOURCE_MEM
        },
        {
-               .start = 0xbff00000,
-               .end   = 0xbff00020,
+               .start = 0x1ff00000,
+               .end   = 0x1ff00020,
                .flags = IORESOURCE_MEM
        },
        {
@@ -96,6 +109,7 @@ static int __init snirm_setup_devinit(void)
 {
        if (sni_brd_type == SNI_BRD_RM200) {
                platform_device_register(&rm200_serial8250_device);
+               platform_device_register(&rm200_ds1216_device);
                platform_device_register(&snirm_82596_rm200_pdev);
                platform_device_register(&snirm_53c710_rm200_pdev);
        }
@@ -176,11 +190,9 @@ void __init sni_rm200_irq_init(void)
        setup_irq (SNI_RM200_INT_START + 0, &sni_isa_irq);
 }
 
-void sni_rm200_init(void)
+void __init sni_rm200_init(void)
 {
        set_io_port_base(SNI_PORT_BASE + 0x02000000);
        ioport_resource.end += 0x02000000;
-       ds1216_base = (volatile unsigned char *) SNI_DS1216_RM200_BASE;
-       rtc_mips_get_time = ds1216_get_cmos_time;
        board_time_init = sni_cpu_time_init;
 }
index 643366eb854a6de81cfb9abd4a86cd2da5193fe2..00a03a6e8f58a21486f69b80ce8428ad339b1c7d 100644 (file)
@@ -146,7 +146,10 @@ static void __init sni_console_setup(void)
                }
                if (baud)
                        strcpy(options, baud);
-               add_preferred_console("ttyS", port, baud ? options : NULL);
+               if (strncmp (cdev, "tty552", 6) == 0)
+                       add_preferred_console("ttyS", port, baud ? options : NULL);
+               else
+                       add_preferred_console("ttySC", port, baud ? options : NULL);
        }
 }
 
index f257509b914f11dfe30380e10a64f86f1372de72..ddaf36a1e3891f114b731e360e0d83792b31d82a 100644 (file)
@@ -146,9 +146,6 @@ extern unsigned int sni_brd_type;
 #define SNI_A20R_IRQ_BASE       MIPS_CPU_IRQ_BASE
 #define SNI_A20R_IRQ_TIMER      (SNI_A20R_IRQ_BASE+5)
 
-#define SNI_DS1216_A20R_BASE    0xbc081ffc
-#define SNI_DS1216_RM200_BASE   0xbcd41ffc
-
 #define SNI_PCIT_INT_REG        0xbfff000c
 
 #define SNI_PCIT_INT_START      24