mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-12-28 16:56:26 +00:00
m68k updates for v6.13
- Revive SCSI and early console support on MVME147, - Fix early kernel parameters using static keys, - Prevent and improve handling of kernel configurations that lack specific platform, CPU, or MMU support, to avoid build failures, - Miscellaneous fixes and improvements, - Defconfig updates. -----BEGIN PGP SIGNATURE----- iIsEABYIADMWIQQ9qaHoIs/1I4cXmEiKwlD9ZEnxcAUCZzs2+hUcZ2VlcnRAbGlu dXgtbTY4ay5vcmcACgkQisJQ/WRJ8XBHEQEA3v4OTaIJFvmZkzFsJBjz1eY5h/DD ftWAqd+Q5bYOjLsA/ij6ZhY/R04EB80J4F8Fm88mO4FF7NQRB4aid4+QaZoK =AAi3 -----END PGP SIGNATURE----- Merge tag 'm68k-for-v6.13-tag1' of git://git.kernel.org/pub/scm/linux/kernel/git/geert/linux-m68k Pull m68k updates from Geert Uytterhoeven: - Revive SCSI and early console support on MVME147 - Fix early kernel parameters using static keys - Prevent and improve handling of kernel configurations that lack specific platform, CPU, or MMU support, to avoid build failures - Miscellaneous fixes and improvements - Defconfig updates * tag 'm68k-for-v6.13-tag1' of git://git.kernel.org/pub/scm/linux/kernel/git/geert/linux-m68k: m68k: defconfig: Update defconfigs for v6.12-rc1 m68k: mvme147: Reinstate early console m68k: Make sure NR_IRQS is never zero m68k: Select M68020 as fallback for classic m68k: Move Sun 3 into a top-level platform option m68k: kernel: Use str_read_write() helper function m68k: Initialize jump labels early during setup_arch() m68k: mvme147: Fix SCSI controller IRQ numbers m68k: mvme147: Make mvme147_sched_init() __init
This commit is contained in:
commit
9aa4c37f71
@ -84,24 +84,23 @@ config MMU
|
||||
support by paged memory management. If unsure, say 'Y'.
|
||||
|
||||
config MMU_MOTOROLA
|
||||
bool
|
||||
def_bool MMU && M68KCLASSIC
|
||||
select HAVE_PAGE_SIZE_4KB
|
||||
|
||||
config MMU_COLDFIRE
|
||||
def_bool MMU && COLDFIRE
|
||||
select HAVE_PAGE_SIZE_8KB
|
||||
bool
|
||||
|
||||
config MMU_SUN3
|
||||
bool
|
||||
def_bool MMU && SUN3
|
||||
select HAVE_PAGE_SIZE_8KB
|
||||
depends on MMU && !MMU_MOTOROLA && !MMU_COLDFIRE
|
||||
|
||||
config ARCH_SUPPORTS_KEXEC
|
||||
def_bool M68KCLASSIC && MMU
|
||||
def_bool (M68KCLASSIC || SUN3) && MMU
|
||||
|
||||
config BOOTINFO_PROC
|
||||
bool "Export bootinfo in procfs"
|
||||
depends on KEXEC && M68KCLASSIC
|
||||
depends on KEXEC && (M68KCLASSIC || SUN3)
|
||||
help
|
||||
Say Y to export the bootinfo used to boot the kernel in a
|
||||
"bootinfo" file in procfs. This is useful with kexec.
|
||||
|
@ -2,7 +2,7 @@
|
||||
comment "Processor Type"
|
||||
|
||||
choice
|
||||
prompt "CPU family support"
|
||||
prompt "CPU/machine family support"
|
||||
default M68KCLASSIC if MMU
|
||||
default COLDFIRE if !MMU
|
||||
help
|
||||
@ -19,8 +19,9 @@ choice
|
||||
processor, select COLDFIRE.
|
||||
|
||||
config M68KCLASSIC
|
||||
bool "Classic M68K CPU family support"
|
||||
bool "Classic M68K CPU/machine family support"
|
||||
select HAVE_ARCH_PFN_VALID
|
||||
select M68020 if MMU && !(M68030 || M68040 || M68060)
|
||||
|
||||
config COLDFIRE
|
||||
bool "Coldfire CPU family support"
|
||||
@ -32,13 +33,23 @@ config COLDFIRE
|
||||
select HAVE_LEGACY_CLK
|
||||
select HAVE_PAGE_SIZE_8KB if !MMU
|
||||
|
||||
config SUN3
|
||||
bool "Sun3 machine support"
|
||||
depends on MMU
|
||||
select HAVE_ARCH_PFN_VALID
|
||||
select LEGACY_TIMER_TICK
|
||||
select NO_DMA
|
||||
select M68020
|
||||
help
|
||||
This option enables support for the Sun 3 series of workstations
|
||||
(3/50, 3/60, 3/1xx, 3/2xx systems). These use a classic 68020 CPU
|
||||
but the custom memory management unit makes them incompatible with
|
||||
all other classic m68k machines, including Sun 3x.
|
||||
|
||||
endchoice
|
||||
|
||||
if M68KCLASSIC
|
||||
|
||||
config M68000
|
||||
def_bool y
|
||||
depends on !MMU
|
||||
def_bool M68KCLASSIC && !MMU
|
||||
select CPU_HAS_NO_BITFIELDS
|
||||
select CPU_HAS_NO_CAS
|
||||
select CPU_HAS_NO_MULDIV64
|
||||
@ -56,7 +67,7 @@ config M68000
|
||||
a paging MMU.
|
||||
|
||||
config M68020
|
||||
bool "68020 support"
|
||||
bool "68020 support" if M68KCLASSIC
|
||||
depends on MMU
|
||||
select FPU
|
||||
select CPU_HAS_ADDRESS_SPACES
|
||||
@ -66,9 +77,10 @@ config M68020
|
||||
68851 MMU (Memory Management Unit) to run Linux/m68k, except on the
|
||||
Sun 3, which provides its own version.
|
||||
|
||||
if M68KCLASSIC && MMU
|
||||
|
||||
config M68030
|
||||
bool "68030 support"
|
||||
depends on MMU && !MMU_SUN3
|
||||
select FPU
|
||||
select CPU_HAS_ADDRESS_SPACES
|
||||
help
|
||||
@ -78,7 +90,6 @@ config M68030
|
||||
|
||||
config M68040
|
||||
bool "68040 support"
|
||||
depends on MMU && !MMU_SUN3
|
||||
select FPU
|
||||
select CPU_HAS_ADDRESS_SPACES
|
||||
help
|
||||
@ -89,13 +100,14 @@ config M68040
|
||||
|
||||
config M68060
|
||||
bool "68060 support"
|
||||
depends on MMU && !MMU_SUN3
|
||||
select FPU
|
||||
select CPU_HAS_ADDRESS_SPACES
|
||||
help
|
||||
If you anticipate running this kernel on a computer with a MC68060
|
||||
processor, say Y. Otherwise, say N.
|
||||
|
||||
endif # M68KCLASSIC
|
||||
|
||||
config M68328
|
||||
bool
|
||||
depends on !MMU
|
||||
@ -117,8 +129,6 @@ config M68VZ328
|
||||
help
|
||||
Motorola 68VZ328 processor support.
|
||||
|
||||
endif # M68KCLASSIC
|
||||
|
||||
if COLDFIRE
|
||||
|
||||
choice
|
||||
@ -325,7 +335,7 @@ comment "Processor Specific Options"
|
||||
|
||||
config M68KFPU_EMU
|
||||
bool "Math emulation support"
|
||||
depends on M68KCLASSIC && FPU
|
||||
depends on (M68KCLASSIC || SUN3) && FPU
|
||||
help
|
||||
At some point in the future, this will cause floating-point math
|
||||
instructions to be emulated by the kernel on machines that lack a
|
||||
|
@ -6,7 +6,6 @@ if M68KCLASSIC
|
||||
config AMIGA
|
||||
bool "Amiga support"
|
||||
depends on MMU
|
||||
select MMU_MOTOROLA if MMU
|
||||
select LEGACY_TIMER_TICK
|
||||
help
|
||||
This option enables support for the Amiga series of computers. If
|
||||
@ -16,7 +15,6 @@ config AMIGA
|
||||
config ATARI
|
||||
bool "Atari support"
|
||||
depends on MMU
|
||||
select MMU_MOTOROLA if MMU
|
||||
select HAVE_ARCH_NVRAM_OPS
|
||||
select LEGACY_TIMER_TICK
|
||||
help
|
||||
@ -31,7 +29,6 @@ config ATARI_KBD_CORE
|
||||
config MAC
|
||||
bool "Macintosh support"
|
||||
depends on MMU
|
||||
select MMU_MOTOROLA if MMU
|
||||
select HAVE_ARCH_NVRAM_OPS
|
||||
select HAVE_PATA_PLATFORM
|
||||
select LEGACY_TIMER_TICK
|
||||
@ -44,7 +41,6 @@ config MAC
|
||||
config APOLLO
|
||||
bool "Apollo support"
|
||||
depends on MMU
|
||||
select MMU_MOTOROLA if MMU
|
||||
select LEGACY_TIMER_TICK
|
||||
help
|
||||
Say Y here if you want to run Linux on an MC680x0-based Apollo
|
||||
@ -53,7 +49,6 @@ config APOLLO
|
||||
config VME
|
||||
bool "VME (Motorola and BVM) support"
|
||||
depends on MMU
|
||||
select MMU_MOTOROLA if MMU
|
||||
help
|
||||
Say Y here if you want to build a kernel for a 680x0 based VME
|
||||
board. Boards currently supported include Motorola boards MVME147,
|
||||
@ -97,7 +92,6 @@ config BVME6000
|
||||
config HP300
|
||||
bool "HP9000/300 and HP9000/400 support"
|
||||
depends on MMU
|
||||
select MMU_MOTOROLA if MMU
|
||||
select LEGACY_TIMER_TICK
|
||||
help
|
||||
This option enables support for the HP9000/300 and HP9000/400 series
|
||||
@ -110,7 +104,6 @@ config SUN3X
|
||||
bool "Sun3x support"
|
||||
depends on MMU
|
||||
select LEGACY_TIMER_TICK
|
||||
select MMU_MOTOROLA if MMU
|
||||
select M68030
|
||||
help
|
||||
This option enables support for the Sun 3x series of workstations.
|
||||
@ -124,7 +117,6 @@ config SUN3X
|
||||
config Q40
|
||||
bool "Q40/Q60 support"
|
||||
depends on MMU
|
||||
select MMU_MOTOROLA if MMU
|
||||
select LEGACY_TIMER_TICK
|
||||
help
|
||||
The Q40 is a Motorola 68040-based successor to the Sinclair QL
|
||||
@ -133,22 +125,6 @@ config Q40
|
||||
Q60. Select your CPU below. For 68LC060 don't forget to enable FPU
|
||||
emulation.
|
||||
|
||||
config SUN3
|
||||
bool "Sun3 support"
|
||||
depends on MMU
|
||||
depends on !MMU_MOTOROLA
|
||||
select MMU_SUN3 if MMU
|
||||
select LEGACY_TIMER_TICK
|
||||
select NO_DMA
|
||||
select M68020
|
||||
help
|
||||
This option enables support for the Sun 3 series of workstations
|
||||
(3/50, 3/60, 3/1xx, 3/2xx systems). Enabling this option requires
|
||||
that all other hardware types must be disabled, as Sun 3 kernels
|
||||
are incompatible with all other m68k targets (including Sun 3x!).
|
||||
|
||||
If you don't want to compile a kernel exclusively for a Sun 3, say N.
|
||||
|
||||
config VIRT
|
||||
bool "Virtual M68k Machine support"
|
||||
depends on MMU
|
||||
@ -157,7 +133,6 @@ config VIRT
|
||||
select GOLDFISH_TIMER
|
||||
select GOLDFISH_TTY
|
||||
select M68040
|
||||
select MMU_MOTOROLA if MMU
|
||||
select RTC_CLASS
|
||||
select RTC_DRV_GOLDFISH
|
||||
select TTY
|
||||
|
@ -620,6 +620,7 @@ CONFIG_KUNIT_ALL_TESTS=m
|
||||
CONFIG_TEST_DHRY=m
|
||||
CONFIG_TEST_MIN_HEAP=m
|
||||
CONFIG_TEST_DIV64=m
|
||||
CONFIG_TEST_MULDIV64=m
|
||||
CONFIG_REED_SOLOMON_TEST=m
|
||||
CONFIG_ATOMIC64_SELFTEST=m
|
||||
CONFIG_ASYNC_RAID6_TEST=m
|
||||
|
@ -577,6 +577,7 @@ CONFIG_KUNIT_ALL_TESTS=m
|
||||
CONFIG_TEST_DHRY=m
|
||||
CONFIG_TEST_MIN_HEAP=m
|
||||
CONFIG_TEST_DIV64=m
|
||||
CONFIG_TEST_MULDIV64=m
|
||||
CONFIG_REED_SOLOMON_TEST=m
|
||||
CONFIG_ATOMIC64_SELFTEST=m
|
||||
CONFIG_ASYNC_RAID6_TEST=m
|
||||
|
@ -597,6 +597,7 @@ CONFIG_KUNIT_ALL_TESTS=m
|
||||
CONFIG_TEST_DHRY=m
|
||||
CONFIG_TEST_MIN_HEAP=m
|
||||
CONFIG_TEST_DIV64=m
|
||||
CONFIG_TEST_MULDIV64=m
|
||||
CONFIG_REED_SOLOMON_TEST=m
|
||||
CONFIG_ATOMIC64_SELFTEST=m
|
||||
CONFIG_ASYNC_RAID6_TEST=m
|
||||
|
@ -569,6 +569,7 @@ CONFIG_KUNIT_ALL_TESTS=m
|
||||
CONFIG_TEST_DHRY=m
|
||||
CONFIG_TEST_MIN_HEAP=m
|
||||
CONFIG_TEST_DIV64=m
|
||||
CONFIG_TEST_MULDIV64=m
|
||||
CONFIG_REED_SOLOMON_TEST=m
|
||||
CONFIG_ATOMIC64_SELFTEST=m
|
||||
CONFIG_ASYNC_RAID6_TEST=m
|
||||
|
@ -579,6 +579,7 @@ CONFIG_KUNIT_ALL_TESTS=m
|
||||
CONFIG_TEST_DHRY=m
|
||||
CONFIG_TEST_MIN_HEAP=m
|
||||
CONFIG_TEST_DIV64=m
|
||||
CONFIG_TEST_MULDIV64=m
|
||||
CONFIG_REED_SOLOMON_TEST=m
|
||||
CONFIG_ATOMIC64_SELFTEST=m
|
||||
CONFIG_ASYNC_RAID6_TEST=m
|
||||
|
@ -596,6 +596,7 @@ CONFIG_KUNIT_ALL_TESTS=m
|
||||
CONFIG_TEST_DHRY=m
|
||||
CONFIG_TEST_MIN_HEAP=m
|
||||
CONFIG_TEST_DIV64=m
|
||||
CONFIG_TEST_MULDIV64=m
|
||||
CONFIG_REED_SOLOMON_TEST=m
|
||||
CONFIG_ATOMIC64_SELFTEST=m
|
||||
CONFIG_ASYNC_RAID6_TEST=m
|
||||
|
@ -682,6 +682,7 @@ CONFIG_KUNIT_ALL_TESTS=m
|
||||
CONFIG_TEST_DHRY=m
|
||||
CONFIG_TEST_MIN_HEAP=m
|
||||
CONFIG_TEST_DIV64=m
|
||||
CONFIG_TEST_MULDIV64=m
|
||||
CONFIG_REED_SOLOMON_TEST=m
|
||||
CONFIG_ATOMIC64_SELFTEST=m
|
||||
CONFIG_ASYNC_RAID6_TEST=m
|
||||
|
@ -568,6 +568,7 @@ CONFIG_KUNIT_ALL_TESTS=m
|
||||
CONFIG_TEST_DHRY=m
|
||||
CONFIG_TEST_MIN_HEAP=m
|
||||
CONFIG_TEST_DIV64=m
|
||||
CONFIG_TEST_MULDIV64=m
|
||||
CONFIG_REED_SOLOMON_TEST=m
|
||||
CONFIG_ATOMIC64_SELFTEST=m
|
||||
CONFIG_ASYNC_RAID6_TEST=m
|
||||
|
@ -569,6 +569,7 @@ CONFIG_KUNIT_ALL_TESTS=m
|
||||
CONFIG_TEST_DHRY=m
|
||||
CONFIG_TEST_MIN_HEAP=m
|
||||
CONFIG_TEST_DIV64=m
|
||||
CONFIG_TEST_MULDIV64=m
|
||||
CONFIG_REED_SOLOMON_TEST=m
|
||||
CONFIG_ATOMIC64_SELFTEST=m
|
||||
CONFIG_ASYNC_RAID6_TEST=m
|
||||
|
@ -586,6 +586,7 @@ CONFIG_KUNIT_ALL_TESTS=m
|
||||
CONFIG_TEST_DHRY=m
|
||||
CONFIG_TEST_MIN_HEAP=m
|
||||
CONFIG_TEST_DIV64=m
|
||||
CONFIG_TEST_MULDIV64=m
|
||||
CONFIG_REED_SOLOMON_TEST=m
|
||||
CONFIG_ATOMIC64_SELFTEST=m
|
||||
CONFIG_ASYNC_RAID6_TEST=m
|
||||
|
@ -566,6 +566,7 @@ CONFIG_KUNIT_ALL_TESTS=m
|
||||
CONFIG_TEST_DHRY=m
|
||||
CONFIG_TEST_MIN_HEAP=m
|
||||
CONFIG_TEST_DIV64=m
|
||||
CONFIG_TEST_MULDIV64=m
|
||||
CONFIG_REED_SOLOMON_TEST=m
|
||||
CONFIG_ATOMIC64_SELFTEST=m
|
||||
CONFIG_ASYNC_RAID6_TEST=m
|
||||
|
@ -567,6 +567,7 @@ CONFIG_KUNIT_ALL_TESTS=m
|
||||
CONFIG_TEST_DHRY=m
|
||||
CONFIG_TEST_MIN_HEAP=m
|
||||
CONFIG_TEST_DIV64=m
|
||||
CONFIG_TEST_MULDIV64=m
|
||||
CONFIG_REED_SOLOMON_TEST=m
|
||||
CONFIG_ATOMIC64_SELFTEST=m
|
||||
CONFIG_ASYNC_RAID6_TEST=m
|
||||
|
@ -28,10 +28,8 @@
|
||||
#define NR_IRQS 32
|
||||
#elif defined(CONFIG_APOLLO)
|
||||
#define NR_IRQS 24
|
||||
#elif defined(CONFIG_HP300)
|
||||
#else /* CONFIG_HP300 etc. */
|
||||
#define NR_IRQS 8
|
||||
#else
|
||||
#define NR_IRQS 0
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_M68020) || defined(CONFIG_M68030) || \
|
||||
|
@ -93,8 +93,8 @@ struct pcc_regs {
|
||||
#define M147_SCC_B_ADDR 0xfffe3000
|
||||
#define M147_SCC_PCLK 5000000
|
||||
|
||||
#define MVME147_IRQ_SCSI_PORT (IRQ_USER+0x45)
|
||||
#define MVME147_IRQ_SCSI_DMA (IRQ_USER+0x46)
|
||||
#define MVME147_IRQ_SCSI_PORT (IRQ_USER + 5)
|
||||
#define MVME147_IRQ_SCSI_DMA (IRQ_USER + 6)
|
||||
|
||||
/* SCC interrupts, for MVME147 */
|
||||
|
||||
|
@ -5,16 +5,8 @@
|
||||
|
||||
extra-y += vmlinux.lds
|
||||
|
||||
obj-$(CONFIG_AMIGA) := head.o
|
||||
obj-$(CONFIG_ATARI) := head.o
|
||||
obj-$(CONFIG_MAC) := head.o
|
||||
obj-$(CONFIG_APOLLO) := head.o
|
||||
obj-$(CONFIG_VME) := head.o
|
||||
obj-$(CONFIG_HP300) := head.o
|
||||
obj-$(CONFIG_Q40) := head.o
|
||||
obj-$(CONFIG_SUN3X) := head.o
|
||||
obj-$(CONFIG_VIRT) := head.o
|
||||
obj-$(CONFIG_SUN3) := sun3-head.o
|
||||
obj-$(CONFIG_MMU_MOTOROLA) := head.o
|
||||
obj-$(CONFIG_SUN3) := sun3-head.o
|
||||
|
||||
obj-y += entry.o irq.o module.o process.o ptrace.o
|
||||
obj-y += setup.o signal.o sys_m68k.o syscalltable.o time.o traps.o
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include <asm/setup.h>
|
||||
|
||||
|
||||
#include "../mvme147/mvme147.h"
|
||||
#include "../mvme16x/mvme16x.h"
|
||||
|
||||
asmlinkage void __init debug_cons_nputs(const char *s, unsigned n);
|
||||
@ -22,7 +23,9 @@ static void __ref debug_cons_write(struct console *c,
|
||||
{
|
||||
#if !(defined(CONFIG_SUN3) || defined(CONFIG_M68000) || \
|
||||
defined(CONFIG_COLDFIRE))
|
||||
if (MACH_IS_MVME16x)
|
||||
if (MACH_IS_MVME147)
|
||||
mvme147_scc_write(c, s, n);
|
||||
else if (MACH_IS_MVME16x)
|
||||
mvme16x_cons_write(c, s, n);
|
||||
else
|
||||
debug_cons_nputs(s, n);
|
||||
|
@ -249,7 +249,11 @@ void __init setup_arch(char **cmdline_p)
|
||||
process_uboot_commandline(&m68k_command_line[0], CL_SIZE);
|
||||
*cmdline_p = m68k_command_line;
|
||||
memcpy(boot_command_line, *cmdline_p, CL_SIZE);
|
||||
|
||||
/*
|
||||
* Initialise the static keys early as they may be enabled by the
|
||||
* cpufeature code and early parameters.
|
||||
*/
|
||||
jump_label_init();
|
||||
parse_early_param();
|
||||
|
||||
switch (m68k_machtype) {
|
||||
|
@ -62,7 +62,7 @@ void timer_heartbeat(void)
|
||||
}
|
||||
#endif /* CONFIG_HEARTBEAT */
|
||||
|
||||
#ifdef CONFIG_M68KCLASSIC
|
||||
#if defined(CONFIG_M68KCLASSIC) || defined(CONFIG_SUN3)
|
||||
/* machine dependent timer functions */
|
||||
int (*mach_hwclk) (int, struct rtc_time*);
|
||||
EXPORT_SYMBOL(mach_hwclk);
|
||||
@ -149,7 +149,7 @@ static int __init rtc_init(void)
|
||||
|
||||
module_init(rtc_init);
|
||||
#endif /* CONFIG_RTC_DRV_GENERIC */
|
||||
#endif /* CONFIG M68KCLASSIC */
|
||||
#endif /* CONFIG_M68KCLASSIC || SUN3 */
|
||||
|
||||
void __init time_init(void)
|
||||
{
|
||||
|
@ -383,7 +383,7 @@ static inline void bus_error030 (struct frame *fp)
|
||||
fp->ptregs.format == 0xa ? fp->ptregs.pc + 4 : fp->un.fmtb.baddr);
|
||||
if (ssw & DF)
|
||||
pr_debug("Data %s fault at %#010lx in %s (pc=%#lx)\n",
|
||||
ssw & RW ? "read" : "write",
|
||||
str_read_write(ssw & RW),
|
||||
fp->un.fmtb.daddr,
|
||||
space_names[ssw & DFC], fp->ptregs.pc);
|
||||
|
||||
@ -419,7 +419,7 @@ static inline void bus_error030 (struct frame *fp)
|
||||
}
|
||||
|
||||
pr_err("Data %s fault at %#010lx in %s (pc=%#lx)\n",
|
||||
ssw & RW ? "read" : "write",
|
||||
str_read_write(ssw & RW),
|
||||
fp->un.fmtb.daddr,
|
||||
space_names[ssw & DFC], fp->ptregs.pc);
|
||||
}
|
||||
@ -455,7 +455,7 @@ static inline void bus_error030 (struct frame *fp)
|
||||
pr_debug("*** unexpected busfault type=%#04x\n",
|
||||
buserr_type);
|
||||
pr_debug("invalid %s access at %#lx from pc %#lx\n",
|
||||
!(ssw & RW) ? "write" : "read", addr,
|
||||
str_read_write(ssw & RW), addr,
|
||||
fp->ptregs.pc);
|
||||
die_if_kernel ("Oops", &fp->ptregs, buserr_type);
|
||||
force_sig (SIGBUS);
|
||||
@ -514,7 +514,7 @@ static inline void bus_error030 (struct frame *fp)
|
||||
fp->ptregs.format == 0xa ? fp->ptregs.pc + 4 : fp->un.fmtb.baddr);
|
||||
if (ssw & DF)
|
||||
pr_debug("Data %s fault at %#010lx in %s (pc=%#lx)\n",
|
||||
ssw & RW ? "read" : "write",
|
||||
str_read_write(ssw & RW),
|
||||
fp->un.fmtb.daddr,
|
||||
space_names[ssw & DFC], fp->ptregs.pc);
|
||||
|
||||
@ -548,7 +548,7 @@ static inline void bus_error030 (struct frame *fp)
|
||||
/* We might have an exception table for this PC */
|
||||
if (ssw & 4 && !search_exception_tables(fp->ptregs.pc)) {
|
||||
pr_err("Data %s fault at %#010lx in %s (pc=%#lx)\n",
|
||||
ssw & RW ? "read" : "write",
|
||||
str_read_write(ssw & RW),
|
||||
fp->un.fmtb.daddr,
|
||||
space_names[ssw & DFC], fp->ptregs.pc);
|
||||
goto buserr;
|
||||
@ -564,7 +564,7 @@ static inline void bus_error030 (struct frame *fp)
|
||||
mmusr);
|
||||
} else if (mmusr & (MMU_B|MMU_L|MMU_S)) {
|
||||
pr_err("invalid %s access at %#lx from pc %#lx\n",
|
||||
!(ssw & RW) ? "write" : "read", addr,
|
||||
str_read_write(ssw & RW), addr,
|
||||
fp->ptregs.pc);
|
||||
die_if_kernel("Oops",&fp->ptregs,mmusr);
|
||||
force_sig(SIGSEGV);
|
||||
@ -575,7 +575,7 @@ static inline void bus_error030 (struct frame *fp)
|
||||
#endif
|
||||
|
||||
pr_err("weird %s access at %#lx from pc %#lx (ssw is %#x)\n",
|
||||
!(ssw & RW) ? "write" : "read", addr,
|
||||
str_read_write(ssw & RW), addr,
|
||||
fp->ptregs.pc, ssw);
|
||||
asm volatile ("ptestr #1,%1@,#0\n\t"
|
||||
"pmove %%psr,%0"
|
||||
@ -991,7 +991,7 @@ static void bad_super_trap(struct frame *fp)
|
||||
fp->ptregs.pc + 4 : fp->un.fmtb.baddr);
|
||||
if (ssw & DF)
|
||||
pr_err("Data %s fault at %#010lx in %s (pc=%#lx)\n",
|
||||
ssw & RW ? "read" : "write",
|
||||
str_read_write(ssw & RW),
|
||||
fp->un.fmtb.daddr, space_names[ssw & DFC],
|
||||
fp->ptregs.pc);
|
||||
}
|
||||
|
@ -32,9 +32,10 @@
|
||||
#include <asm/mvme147hw.h>
|
||||
#include <asm/config.h>
|
||||
|
||||
#include "mvme147.h"
|
||||
|
||||
static void mvme147_get_model(char *model);
|
||||
extern void mvme147_sched_init(void);
|
||||
static void __init mvme147_sched_init(void);
|
||||
extern int mvme147_hwclk (int, struct rtc_time *);
|
||||
extern void mvme147_reset (void);
|
||||
|
||||
@ -123,7 +124,7 @@ static irqreturn_t mvme147_timer_int (int irq, void *dev_id)
|
||||
}
|
||||
|
||||
|
||||
void mvme147_sched_init (void)
|
||||
static void __init mvme147_sched_init(void)
|
||||
{
|
||||
if (request_irq(PCC_IRQ_TIMER1, mvme147_timer_int, IRQF_TIMER,
|
||||
"timer 1", NULL))
|
||||
@ -185,3 +186,32 @@ int mvme147_hwclk(int op, struct rtc_time *t)
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void scc_delay(void)
|
||||
{
|
||||
__asm__ __volatile__ ("nop; nop;");
|
||||
}
|
||||
|
||||
static void scc_write(char ch)
|
||||
{
|
||||
do {
|
||||
scc_delay();
|
||||
} while (!(in_8(M147_SCC_A_ADDR) & BIT(2)));
|
||||
scc_delay();
|
||||
out_8(M147_SCC_A_ADDR, 8);
|
||||
scc_delay();
|
||||
out_8(M147_SCC_A_ADDR, ch);
|
||||
}
|
||||
|
||||
void mvme147_scc_write(struct console *co, const char *str, unsigned int count)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
local_irq_save(flags);
|
||||
while (count--) {
|
||||
if (*str == '\n')
|
||||
scc_write('\r');
|
||||
scc_write(*str++);
|
||||
}
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
|
6
arch/m68k/mvme147/mvme147.h
Normal file
6
arch/m68k/mvme147/mvme147.h
Normal file
@ -0,0 +1,6 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
struct console;
|
||||
|
||||
/* config.c */
|
||||
void mvme147_scc_write(struct console *co, const char *str, unsigned int count);
|
Loading…
Reference in New Issue
Block a user