mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-12 08:09:56 +00:00
[MIPS] SNI RM updates
- 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>
This commit is contained in:
parent
68bc00e311
commit
06cf5583fd
@ -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"
|
||||
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user