mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-25 18:30:06 +00:00
![Thomas Gleixner](/assets/img/avatar_default.png)
Based on 1 normalized pattern(s): this program is free software you can distribute it and or modify it under the terms of the gnu general public license version 2 as published by the free software foundation this program is distributed in the hope it will be useful but without any warranty without even the implied warranty of merchantability or fitness for a particular purpose see the gnu general public license for more details you should have received a copy of the gnu general public license along with this program if not write to the free software foundation inc 59 temple place suite 330 boston ma 02111 1307 usa extracted by the scancode license scanner the SPDX license identifier GPL-2.0-only has been chosen to replace the boilerplate/reference in 32 file(s). Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Allison Randal <allison@lohutok.net> Reviewed-by: Richard Fontana <rfontana@redhat.com> Reviewed-by: Steve Winslow <swinslow@gmail.com> Reviewed-by: Alexios Zavras <alexios.zavras@intel.com> Cc: linux-spdx@vger.kernel.org Link: https://lkml.kernel.org/r/20190528170026.531157061@linutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
141 lines
3.1 KiB
C
141 lines
3.1 KiB
C
// SPDX-License-Identifier: GPL-2.0-only
|
|
/*
|
|
* Carsten Langgaard, carstenl@mips.com
|
|
* Copyright (C) 1999 MIPS Technologies, Inc. All rights reserved.
|
|
*
|
|
* Thomas Horsten <thh@lasat.com>
|
|
* Copyright (C) 2000 LASAT Networks A/S.
|
|
*
|
|
* Brian Murphy <brian@murphy.dk>
|
|
*
|
|
* Lasat specific setup.
|
|
*/
|
|
#include <linux/init.h>
|
|
#include <linux/sched.h>
|
|
#include <linux/pci.h>
|
|
#include <linux/interrupt.h>
|
|
#include <linux/tty.h>
|
|
|
|
#include <asm/time.h>
|
|
#include <asm/cpu.h>
|
|
#include <asm/bootinfo.h>
|
|
#include <asm/irq.h>
|
|
#include <asm/lasat/lasat.h>
|
|
#include <asm/lasat/serial.h>
|
|
|
|
#ifdef CONFIG_PICVUE
|
|
#include <linux/notifier.h>
|
|
#endif
|
|
|
|
#include "ds1603.h"
|
|
#include <asm/lasat/ds1603.h>
|
|
#include <asm/lasat/picvue.h>
|
|
#include <asm/lasat/eeprom.h>
|
|
|
|
#include "prom.h"
|
|
|
|
int lasat_command_line;
|
|
void lasatint_init(void);
|
|
|
|
extern void lasat_reboot_setup(void);
|
|
extern void pcisetup(void);
|
|
extern void edhac_init(void *, void *, void *);
|
|
extern void addrflt_init(void);
|
|
|
|
struct lasat_misc lasat_misc_info[N_MACHTYPES] = {
|
|
{
|
|
.reset_reg = (void *)KSEG1ADDR(0x1c840000),
|
|
.flash_wp_reg = (void *)KSEG1ADDR(0x1c800000), 2
|
|
}, {
|
|
.reset_reg = (void *)KSEG1ADDR(0x11080000),
|
|
.flash_wp_reg = (void *)KSEG1ADDR(0x11000000), 6
|
|
}
|
|
};
|
|
|
|
struct lasat_misc *lasat_misc;
|
|
|
|
#ifdef CONFIG_DS1603
|
|
static struct ds_defs ds_defs[N_MACHTYPES] = {
|
|
{ (void *)DS1603_REG_100, (void *)DS1603_REG_100,
|
|
DS1603_RST_100, DS1603_CLK_100, DS1603_DATA_100,
|
|
DS1603_DATA_SHIFT_100, 0, 0 },
|
|
{ (void *)DS1603_REG_200, (void *)DS1603_DATA_REG_200,
|
|
DS1603_RST_200, DS1603_CLK_200, DS1603_DATA_200,
|
|
DS1603_DATA_READ_SHIFT_200, 1, 2000 }
|
|
};
|
|
#endif
|
|
|
|
#ifdef CONFIG_PICVUE
|
|
#include "picvue.h"
|
|
static struct pvc_defs pvc_defs[N_MACHTYPES] = {
|
|
{ (void *)PVC_REG_100, PVC_DATA_SHIFT_100, PVC_DATA_M_100,
|
|
PVC_E_100, PVC_RW_100, PVC_RS_100 },
|
|
{ (void *)PVC_REG_200, PVC_DATA_SHIFT_200, PVC_DATA_M_200,
|
|
PVC_E_200, PVC_RW_200, PVC_RS_200 }
|
|
};
|
|
#endif
|
|
|
|
static int lasat_panic_display(struct notifier_block *this,
|
|
unsigned long event, void *ptr)
|
|
{
|
|
#ifdef CONFIG_PICVUE
|
|
unsigned char *string = ptr;
|
|
if (string == NULL)
|
|
string = "Kernel Panic";
|
|
pvc_dump_string(string);
|
|
#endif
|
|
return NOTIFY_DONE;
|
|
}
|
|
|
|
static int lasat_panic_prom_monitor(struct notifier_block *this,
|
|
unsigned long event, void *ptr)
|
|
{
|
|
prom_monitor();
|
|
return NOTIFY_DONE;
|
|
}
|
|
|
|
static struct notifier_block lasat_panic_block[] =
|
|
{
|
|
{
|
|
.notifier_call = lasat_panic_display,
|
|
.priority = INT_MAX
|
|
}, {
|
|
.notifier_call = lasat_panic_prom_monitor,
|
|
.priority = INT_MIN
|
|
}
|
|
};
|
|
|
|
void __init plat_time_init(void)
|
|
{
|
|
mips_hpt_frequency = lasat_board_info.li_cpu_hz / 2;
|
|
|
|
change_c0_status(ST0_IM, IE_IRQ0);
|
|
}
|
|
|
|
void __init plat_mem_setup(void)
|
|
{
|
|
int i;
|
|
int lasat_type = IS_LASAT_200() ? 1 : 0;
|
|
|
|
lasat_misc = &lasat_misc_info[lasat_type];
|
|
#ifdef CONFIG_PICVUE
|
|
picvue = &pvc_defs[lasat_type];
|
|
#endif
|
|
|
|
/* Set up panic notifier */
|
|
for (i = 0; i < ARRAY_SIZE(lasat_panic_block); i++)
|
|
atomic_notifier_chain_register(&panic_notifier_list,
|
|
&lasat_panic_block[i]);
|
|
|
|
lasat_reboot_setup();
|
|
|
|
#ifdef CONFIG_DS1603
|
|
ds1603 = &ds_defs[lasat_type];
|
|
#endif
|
|
|
|
#ifdef DYNAMIC_SERIAL_INIT
|
|
serial_init();
|
|
#endif
|
|
|
|
pr_info("Lasat specific initialization complete\n");
|
|
}
|