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:
Linus Torvalds 2024-11-18 18:00:18 -08:00
commit 9aa4c37f71
24 changed files with 102 additions and 73 deletions

View File

@ -84,24 +84,23 @@ config MMU
support by paged memory management. If unsure, say 'Y'. support by paged memory management. If unsure, say 'Y'.
config MMU_MOTOROLA config MMU_MOTOROLA
bool def_bool MMU && M68KCLASSIC
select HAVE_PAGE_SIZE_4KB select HAVE_PAGE_SIZE_4KB
config MMU_COLDFIRE config MMU_COLDFIRE
def_bool MMU && COLDFIRE
select HAVE_PAGE_SIZE_8KB select HAVE_PAGE_SIZE_8KB
bool
config MMU_SUN3 config MMU_SUN3
bool def_bool MMU && SUN3
select HAVE_PAGE_SIZE_8KB select HAVE_PAGE_SIZE_8KB
depends on MMU && !MMU_MOTOROLA && !MMU_COLDFIRE
config ARCH_SUPPORTS_KEXEC config ARCH_SUPPORTS_KEXEC
def_bool M68KCLASSIC && MMU def_bool (M68KCLASSIC || SUN3) && MMU
config BOOTINFO_PROC config BOOTINFO_PROC
bool "Export bootinfo in procfs" bool "Export bootinfo in procfs"
depends on KEXEC && M68KCLASSIC depends on KEXEC && (M68KCLASSIC || SUN3)
help help
Say Y to export the bootinfo used to boot the kernel in a Say Y to export the bootinfo used to boot the kernel in a
"bootinfo" file in procfs. This is useful with kexec. "bootinfo" file in procfs. This is useful with kexec.

View File

@ -2,7 +2,7 @@
comment "Processor Type" comment "Processor Type"
choice choice
prompt "CPU family support" prompt "CPU/machine family support"
default M68KCLASSIC if MMU default M68KCLASSIC if MMU
default COLDFIRE if !MMU default COLDFIRE if !MMU
help help
@ -19,8 +19,9 @@ choice
processor, select COLDFIRE. processor, select COLDFIRE.
config M68KCLASSIC config M68KCLASSIC
bool "Classic M68K CPU family support" bool "Classic M68K CPU/machine family support"
select HAVE_ARCH_PFN_VALID select HAVE_ARCH_PFN_VALID
select M68020 if MMU && !(M68030 || M68040 || M68060)
config COLDFIRE config COLDFIRE
bool "Coldfire CPU family support" bool "Coldfire CPU family support"
@ -32,13 +33,23 @@ config COLDFIRE
select HAVE_LEGACY_CLK select HAVE_LEGACY_CLK
select HAVE_PAGE_SIZE_8KB if !MMU 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 endchoice
if M68KCLASSIC
config M68000 config M68000
def_bool y def_bool M68KCLASSIC && !MMU
depends on !MMU
select CPU_HAS_NO_BITFIELDS select CPU_HAS_NO_BITFIELDS
select CPU_HAS_NO_CAS select CPU_HAS_NO_CAS
select CPU_HAS_NO_MULDIV64 select CPU_HAS_NO_MULDIV64
@ -56,7 +67,7 @@ config M68000
a paging MMU. a paging MMU.
config M68020 config M68020
bool "68020 support" bool "68020 support" if M68KCLASSIC
depends on MMU depends on MMU
select FPU select FPU
select CPU_HAS_ADDRESS_SPACES select CPU_HAS_ADDRESS_SPACES
@ -66,9 +77,10 @@ config M68020
68851 MMU (Memory Management Unit) to run Linux/m68k, except on the 68851 MMU (Memory Management Unit) to run Linux/m68k, except on the
Sun 3, which provides its own version. Sun 3, which provides its own version.
if M68KCLASSIC && MMU
config M68030 config M68030
bool "68030 support" bool "68030 support"
depends on MMU && !MMU_SUN3
select FPU select FPU
select CPU_HAS_ADDRESS_SPACES select CPU_HAS_ADDRESS_SPACES
help help
@ -78,7 +90,6 @@ config M68030
config M68040 config M68040
bool "68040 support" bool "68040 support"
depends on MMU && !MMU_SUN3
select FPU select FPU
select CPU_HAS_ADDRESS_SPACES select CPU_HAS_ADDRESS_SPACES
help help
@ -89,13 +100,14 @@ config M68040
config M68060 config M68060
bool "68060 support" bool "68060 support"
depends on MMU && !MMU_SUN3
select FPU select FPU
select CPU_HAS_ADDRESS_SPACES select CPU_HAS_ADDRESS_SPACES
help help
If you anticipate running this kernel on a computer with a MC68060 If you anticipate running this kernel on a computer with a MC68060
processor, say Y. Otherwise, say N. processor, say Y. Otherwise, say N.
endif # M68KCLASSIC
config M68328 config M68328
bool bool
depends on !MMU depends on !MMU
@ -117,8 +129,6 @@ config M68VZ328
help help
Motorola 68VZ328 processor support. Motorola 68VZ328 processor support.
endif # M68KCLASSIC
if COLDFIRE if COLDFIRE
choice choice
@ -325,7 +335,7 @@ comment "Processor Specific Options"
config M68KFPU_EMU config M68KFPU_EMU
bool "Math emulation support" bool "Math emulation support"
depends on M68KCLASSIC && FPU depends on (M68KCLASSIC || SUN3) && FPU
help help
At some point in the future, this will cause floating-point math At some point in the future, this will cause floating-point math
instructions to be emulated by the kernel on machines that lack a instructions to be emulated by the kernel on machines that lack a

View File

@ -6,7 +6,6 @@ if M68KCLASSIC
config AMIGA config AMIGA
bool "Amiga support" bool "Amiga support"
depends on MMU depends on MMU
select MMU_MOTOROLA if MMU
select LEGACY_TIMER_TICK select LEGACY_TIMER_TICK
help help
This option enables support for the Amiga series of computers. If This option enables support for the Amiga series of computers. If
@ -16,7 +15,6 @@ config AMIGA
config ATARI config ATARI
bool "Atari support" bool "Atari support"
depends on MMU depends on MMU
select MMU_MOTOROLA if MMU
select HAVE_ARCH_NVRAM_OPS select HAVE_ARCH_NVRAM_OPS
select LEGACY_TIMER_TICK select LEGACY_TIMER_TICK
help help
@ -31,7 +29,6 @@ config ATARI_KBD_CORE
config MAC config MAC
bool "Macintosh support" bool "Macintosh support"
depends on MMU depends on MMU
select MMU_MOTOROLA if MMU
select HAVE_ARCH_NVRAM_OPS select HAVE_ARCH_NVRAM_OPS
select HAVE_PATA_PLATFORM select HAVE_PATA_PLATFORM
select LEGACY_TIMER_TICK select LEGACY_TIMER_TICK
@ -44,7 +41,6 @@ config MAC
config APOLLO config APOLLO
bool "Apollo support" bool "Apollo support"
depends on MMU depends on MMU
select MMU_MOTOROLA if MMU
select LEGACY_TIMER_TICK select LEGACY_TIMER_TICK
help help
Say Y here if you want to run Linux on an MC680x0-based Apollo Say Y here if you want to run Linux on an MC680x0-based Apollo
@ -53,7 +49,6 @@ config APOLLO
config VME config VME
bool "VME (Motorola and BVM) support" bool "VME (Motorola and BVM) support"
depends on MMU depends on MMU
select MMU_MOTOROLA if MMU
help help
Say Y here if you want to build a kernel for a 680x0 based VME Say Y here if you want to build a kernel for a 680x0 based VME
board. Boards currently supported include Motorola boards MVME147, board. Boards currently supported include Motorola boards MVME147,
@ -97,7 +92,6 @@ config BVME6000
config HP300 config HP300
bool "HP9000/300 and HP9000/400 support" bool "HP9000/300 and HP9000/400 support"
depends on MMU depends on MMU
select MMU_MOTOROLA if MMU
select LEGACY_TIMER_TICK select LEGACY_TIMER_TICK
help help
This option enables support for the HP9000/300 and HP9000/400 series This option enables support for the HP9000/300 and HP9000/400 series
@ -110,7 +104,6 @@ config SUN3X
bool "Sun3x support" bool "Sun3x support"
depends on MMU depends on MMU
select LEGACY_TIMER_TICK select LEGACY_TIMER_TICK
select MMU_MOTOROLA if MMU
select M68030 select M68030
help help
This option enables support for the Sun 3x series of workstations. This option enables support for the Sun 3x series of workstations.
@ -124,7 +117,6 @@ config SUN3X
config Q40 config Q40
bool "Q40/Q60 support" bool "Q40/Q60 support"
depends on MMU depends on MMU
select MMU_MOTOROLA if MMU
select LEGACY_TIMER_TICK select LEGACY_TIMER_TICK
help help
The Q40 is a Motorola 68040-based successor to the Sinclair QL 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 Q60. Select your CPU below. For 68LC060 don't forget to enable FPU
emulation. 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 config VIRT
bool "Virtual M68k Machine support" bool "Virtual M68k Machine support"
depends on MMU depends on MMU
@ -157,7 +133,6 @@ config VIRT
select GOLDFISH_TIMER select GOLDFISH_TIMER
select GOLDFISH_TTY select GOLDFISH_TTY
select M68040 select M68040
select MMU_MOTOROLA if MMU
select RTC_CLASS select RTC_CLASS
select RTC_DRV_GOLDFISH select RTC_DRV_GOLDFISH
select TTY select TTY

View File

@ -620,6 +620,7 @@ CONFIG_KUNIT_ALL_TESTS=m
CONFIG_TEST_DHRY=m CONFIG_TEST_DHRY=m
CONFIG_TEST_MIN_HEAP=m CONFIG_TEST_MIN_HEAP=m
CONFIG_TEST_DIV64=m CONFIG_TEST_DIV64=m
CONFIG_TEST_MULDIV64=m
CONFIG_REED_SOLOMON_TEST=m CONFIG_REED_SOLOMON_TEST=m
CONFIG_ATOMIC64_SELFTEST=m CONFIG_ATOMIC64_SELFTEST=m
CONFIG_ASYNC_RAID6_TEST=m CONFIG_ASYNC_RAID6_TEST=m

View File

@ -577,6 +577,7 @@ CONFIG_KUNIT_ALL_TESTS=m
CONFIG_TEST_DHRY=m CONFIG_TEST_DHRY=m
CONFIG_TEST_MIN_HEAP=m CONFIG_TEST_MIN_HEAP=m
CONFIG_TEST_DIV64=m CONFIG_TEST_DIV64=m
CONFIG_TEST_MULDIV64=m
CONFIG_REED_SOLOMON_TEST=m CONFIG_REED_SOLOMON_TEST=m
CONFIG_ATOMIC64_SELFTEST=m CONFIG_ATOMIC64_SELFTEST=m
CONFIG_ASYNC_RAID6_TEST=m CONFIG_ASYNC_RAID6_TEST=m

View File

@ -597,6 +597,7 @@ CONFIG_KUNIT_ALL_TESTS=m
CONFIG_TEST_DHRY=m CONFIG_TEST_DHRY=m
CONFIG_TEST_MIN_HEAP=m CONFIG_TEST_MIN_HEAP=m
CONFIG_TEST_DIV64=m CONFIG_TEST_DIV64=m
CONFIG_TEST_MULDIV64=m
CONFIG_REED_SOLOMON_TEST=m CONFIG_REED_SOLOMON_TEST=m
CONFIG_ATOMIC64_SELFTEST=m CONFIG_ATOMIC64_SELFTEST=m
CONFIG_ASYNC_RAID6_TEST=m CONFIG_ASYNC_RAID6_TEST=m

View File

@ -569,6 +569,7 @@ CONFIG_KUNIT_ALL_TESTS=m
CONFIG_TEST_DHRY=m CONFIG_TEST_DHRY=m
CONFIG_TEST_MIN_HEAP=m CONFIG_TEST_MIN_HEAP=m
CONFIG_TEST_DIV64=m CONFIG_TEST_DIV64=m
CONFIG_TEST_MULDIV64=m
CONFIG_REED_SOLOMON_TEST=m CONFIG_REED_SOLOMON_TEST=m
CONFIG_ATOMIC64_SELFTEST=m CONFIG_ATOMIC64_SELFTEST=m
CONFIG_ASYNC_RAID6_TEST=m CONFIG_ASYNC_RAID6_TEST=m

View File

@ -579,6 +579,7 @@ CONFIG_KUNIT_ALL_TESTS=m
CONFIG_TEST_DHRY=m CONFIG_TEST_DHRY=m
CONFIG_TEST_MIN_HEAP=m CONFIG_TEST_MIN_HEAP=m
CONFIG_TEST_DIV64=m CONFIG_TEST_DIV64=m
CONFIG_TEST_MULDIV64=m
CONFIG_REED_SOLOMON_TEST=m CONFIG_REED_SOLOMON_TEST=m
CONFIG_ATOMIC64_SELFTEST=m CONFIG_ATOMIC64_SELFTEST=m
CONFIG_ASYNC_RAID6_TEST=m CONFIG_ASYNC_RAID6_TEST=m

View File

@ -596,6 +596,7 @@ CONFIG_KUNIT_ALL_TESTS=m
CONFIG_TEST_DHRY=m CONFIG_TEST_DHRY=m
CONFIG_TEST_MIN_HEAP=m CONFIG_TEST_MIN_HEAP=m
CONFIG_TEST_DIV64=m CONFIG_TEST_DIV64=m
CONFIG_TEST_MULDIV64=m
CONFIG_REED_SOLOMON_TEST=m CONFIG_REED_SOLOMON_TEST=m
CONFIG_ATOMIC64_SELFTEST=m CONFIG_ATOMIC64_SELFTEST=m
CONFIG_ASYNC_RAID6_TEST=m CONFIG_ASYNC_RAID6_TEST=m

View File

@ -682,6 +682,7 @@ CONFIG_KUNIT_ALL_TESTS=m
CONFIG_TEST_DHRY=m CONFIG_TEST_DHRY=m
CONFIG_TEST_MIN_HEAP=m CONFIG_TEST_MIN_HEAP=m
CONFIG_TEST_DIV64=m CONFIG_TEST_DIV64=m
CONFIG_TEST_MULDIV64=m
CONFIG_REED_SOLOMON_TEST=m CONFIG_REED_SOLOMON_TEST=m
CONFIG_ATOMIC64_SELFTEST=m CONFIG_ATOMIC64_SELFTEST=m
CONFIG_ASYNC_RAID6_TEST=m CONFIG_ASYNC_RAID6_TEST=m

View File

@ -568,6 +568,7 @@ CONFIG_KUNIT_ALL_TESTS=m
CONFIG_TEST_DHRY=m CONFIG_TEST_DHRY=m
CONFIG_TEST_MIN_HEAP=m CONFIG_TEST_MIN_HEAP=m
CONFIG_TEST_DIV64=m CONFIG_TEST_DIV64=m
CONFIG_TEST_MULDIV64=m
CONFIG_REED_SOLOMON_TEST=m CONFIG_REED_SOLOMON_TEST=m
CONFIG_ATOMIC64_SELFTEST=m CONFIG_ATOMIC64_SELFTEST=m
CONFIG_ASYNC_RAID6_TEST=m CONFIG_ASYNC_RAID6_TEST=m

View File

@ -569,6 +569,7 @@ CONFIG_KUNIT_ALL_TESTS=m
CONFIG_TEST_DHRY=m CONFIG_TEST_DHRY=m
CONFIG_TEST_MIN_HEAP=m CONFIG_TEST_MIN_HEAP=m
CONFIG_TEST_DIV64=m CONFIG_TEST_DIV64=m
CONFIG_TEST_MULDIV64=m
CONFIG_REED_SOLOMON_TEST=m CONFIG_REED_SOLOMON_TEST=m
CONFIG_ATOMIC64_SELFTEST=m CONFIG_ATOMIC64_SELFTEST=m
CONFIG_ASYNC_RAID6_TEST=m CONFIG_ASYNC_RAID6_TEST=m

View File

@ -586,6 +586,7 @@ CONFIG_KUNIT_ALL_TESTS=m
CONFIG_TEST_DHRY=m CONFIG_TEST_DHRY=m
CONFIG_TEST_MIN_HEAP=m CONFIG_TEST_MIN_HEAP=m
CONFIG_TEST_DIV64=m CONFIG_TEST_DIV64=m
CONFIG_TEST_MULDIV64=m
CONFIG_REED_SOLOMON_TEST=m CONFIG_REED_SOLOMON_TEST=m
CONFIG_ATOMIC64_SELFTEST=m CONFIG_ATOMIC64_SELFTEST=m
CONFIG_ASYNC_RAID6_TEST=m CONFIG_ASYNC_RAID6_TEST=m

View File

@ -566,6 +566,7 @@ CONFIG_KUNIT_ALL_TESTS=m
CONFIG_TEST_DHRY=m CONFIG_TEST_DHRY=m
CONFIG_TEST_MIN_HEAP=m CONFIG_TEST_MIN_HEAP=m
CONFIG_TEST_DIV64=m CONFIG_TEST_DIV64=m
CONFIG_TEST_MULDIV64=m
CONFIG_REED_SOLOMON_TEST=m CONFIG_REED_SOLOMON_TEST=m
CONFIG_ATOMIC64_SELFTEST=m CONFIG_ATOMIC64_SELFTEST=m
CONFIG_ASYNC_RAID6_TEST=m CONFIG_ASYNC_RAID6_TEST=m

View File

@ -567,6 +567,7 @@ CONFIG_KUNIT_ALL_TESTS=m
CONFIG_TEST_DHRY=m CONFIG_TEST_DHRY=m
CONFIG_TEST_MIN_HEAP=m CONFIG_TEST_MIN_HEAP=m
CONFIG_TEST_DIV64=m CONFIG_TEST_DIV64=m
CONFIG_TEST_MULDIV64=m
CONFIG_REED_SOLOMON_TEST=m CONFIG_REED_SOLOMON_TEST=m
CONFIG_ATOMIC64_SELFTEST=m CONFIG_ATOMIC64_SELFTEST=m
CONFIG_ASYNC_RAID6_TEST=m CONFIG_ASYNC_RAID6_TEST=m

View File

@ -28,10 +28,8 @@
#define NR_IRQS 32 #define NR_IRQS 32
#elif defined(CONFIG_APOLLO) #elif defined(CONFIG_APOLLO)
#define NR_IRQS 24 #define NR_IRQS 24
#elif defined(CONFIG_HP300) #else /* CONFIG_HP300 etc. */
#define NR_IRQS 8 #define NR_IRQS 8
#else
#define NR_IRQS 0
#endif #endif
#if defined(CONFIG_M68020) || defined(CONFIG_M68030) || \ #if defined(CONFIG_M68020) || defined(CONFIG_M68030) || \

View File

@ -93,8 +93,8 @@ struct pcc_regs {
#define M147_SCC_B_ADDR 0xfffe3000 #define M147_SCC_B_ADDR 0xfffe3000
#define M147_SCC_PCLK 5000000 #define M147_SCC_PCLK 5000000
#define MVME147_IRQ_SCSI_PORT (IRQ_USER+0x45) #define MVME147_IRQ_SCSI_PORT (IRQ_USER + 5)
#define MVME147_IRQ_SCSI_DMA (IRQ_USER+0x46) #define MVME147_IRQ_SCSI_DMA (IRQ_USER + 6)
/* SCC interrupts, for MVME147 */ /* SCC interrupts, for MVME147 */

View File

@ -5,16 +5,8 @@
extra-y += vmlinux.lds extra-y += vmlinux.lds
obj-$(CONFIG_AMIGA) := head.o obj-$(CONFIG_MMU_MOTOROLA) := head.o
obj-$(CONFIG_ATARI) := head.o obj-$(CONFIG_SUN3) := sun3-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-y += entry.o irq.o module.o process.o ptrace.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 obj-y += setup.o signal.o sys_m68k.o syscalltable.o time.o traps.o

View File

@ -13,6 +13,7 @@
#include <asm/setup.h> #include <asm/setup.h>
#include "../mvme147/mvme147.h"
#include "../mvme16x/mvme16x.h" #include "../mvme16x/mvme16x.h"
asmlinkage void __init debug_cons_nputs(const char *s, unsigned n); 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) || \ #if !(defined(CONFIG_SUN3) || defined(CONFIG_M68000) || \
defined(CONFIG_COLDFIRE)) 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); mvme16x_cons_write(c, s, n);
else else
debug_cons_nputs(s, n); debug_cons_nputs(s, n);

View File

@ -249,7 +249,11 @@ void __init setup_arch(char **cmdline_p)
process_uboot_commandline(&m68k_command_line[0], CL_SIZE); process_uboot_commandline(&m68k_command_line[0], CL_SIZE);
*cmdline_p = m68k_command_line; *cmdline_p = m68k_command_line;
memcpy(boot_command_line, *cmdline_p, CL_SIZE); 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(); parse_early_param();
switch (m68k_machtype) { switch (m68k_machtype) {

View File

@ -62,7 +62,7 @@ void timer_heartbeat(void)
} }
#endif /* CONFIG_HEARTBEAT */ #endif /* CONFIG_HEARTBEAT */
#ifdef CONFIG_M68KCLASSIC #if defined(CONFIG_M68KCLASSIC) || defined(CONFIG_SUN3)
/* machine dependent timer functions */ /* machine dependent timer functions */
int (*mach_hwclk) (int, struct rtc_time*); int (*mach_hwclk) (int, struct rtc_time*);
EXPORT_SYMBOL(mach_hwclk); EXPORT_SYMBOL(mach_hwclk);
@ -149,7 +149,7 @@ static int __init rtc_init(void)
module_init(rtc_init); module_init(rtc_init);
#endif /* CONFIG_RTC_DRV_GENERIC */ #endif /* CONFIG_RTC_DRV_GENERIC */
#endif /* CONFIG M68KCLASSIC */ #endif /* CONFIG_M68KCLASSIC || SUN3 */
void __init time_init(void) void __init time_init(void)
{ {

View File

@ -383,7 +383,7 @@ static inline void bus_error030 (struct frame *fp)
fp->ptregs.format == 0xa ? fp->ptregs.pc + 4 : fp->un.fmtb.baddr); fp->ptregs.format == 0xa ? fp->ptregs.pc + 4 : fp->un.fmtb.baddr);
if (ssw & DF) if (ssw & DF)
pr_debug("Data %s fault at %#010lx in %s (pc=%#lx)\n", 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, fp->un.fmtb.daddr,
space_names[ssw & DFC], fp->ptregs.pc); 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", 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, fp->un.fmtb.daddr,
space_names[ssw & DFC], fp->ptregs.pc); 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", pr_debug("*** unexpected busfault type=%#04x\n",
buserr_type); buserr_type);
pr_debug("invalid %s access at %#lx from pc %#lx\n", 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); fp->ptregs.pc);
die_if_kernel ("Oops", &fp->ptregs, buserr_type); die_if_kernel ("Oops", &fp->ptregs, buserr_type);
force_sig (SIGBUS); 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); fp->ptregs.format == 0xa ? fp->ptregs.pc + 4 : fp->un.fmtb.baddr);
if (ssw & DF) if (ssw & DF)
pr_debug("Data %s fault at %#010lx in %s (pc=%#lx)\n", 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, fp->un.fmtb.daddr,
space_names[ssw & DFC], fp->ptregs.pc); 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 */ /* We might have an exception table for this PC */
if (ssw & 4 && !search_exception_tables(fp->ptregs.pc)) { if (ssw & 4 && !search_exception_tables(fp->ptregs.pc)) {
pr_err("Data %s fault at %#010lx in %s (pc=%#lx)\n", 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, fp->un.fmtb.daddr,
space_names[ssw & DFC], fp->ptregs.pc); space_names[ssw & DFC], fp->ptregs.pc);
goto buserr; goto buserr;
@ -564,7 +564,7 @@ static inline void bus_error030 (struct frame *fp)
mmusr); mmusr);
} else if (mmusr & (MMU_B|MMU_L|MMU_S)) { } else if (mmusr & (MMU_B|MMU_L|MMU_S)) {
pr_err("invalid %s access at %#lx from pc %#lx\n", 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); fp->ptregs.pc);
die_if_kernel("Oops",&fp->ptregs,mmusr); die_if_kernel("Oops",&fp->ptregs,mmusr);
force_sig(SIGSEGV); force_sig(SIGSEGV);
@ -575,7 +575,7 @@ static inline void bus_error030 (struct frame *fp)
#endif #endif
pr_err("weird %s access at %#lx from pc %#lx (ssw is %#x)\n", 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); fp->ptregs.pc, ssw);
asm volatile ("ptestr #1,%1@,#0\n\t" asm volatile ("ptestr #1,%1@,#0\n\t"
"pmove %%psr,%0" "pmove %%psr,%0"
@ -991,7 +991,7 @@ static void bad_super_trap(struct frame *fp)
fp->ptregs.pc + 4 : fp->un.fmtb.baddr); fp->ptregs.pc + 4 : fp->un.fmtb.baddr);
if (ssw & DF) if (ssw & DF)
pr_err("Data %s fault at %#010lx in %s (pc=%#lx)\n", 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->un.fmtb.daddr, space_names[ssw & DFC],
fp->ptregs.pc); fp->ptregs.pc);
} }

View File

@ -32,9 +32,10 @@
#include <asm/mvme147hw.h> #include <asm/mvme147hw.h>
#include <asm/config.h> #include <asm/config.h>
#include "mvme147.h"
static void mvme147_get_model(char *model); 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 int mvme147_hwclk (int, struct rtc_time *);
extern void mvme147_reset (void); 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, if (request_irq(PCC_IRQ_TIMER1, mvme147_timer_int, IRQF_TIMER,
"timer 1", NULL)) "timer 1", NULL))
@ -185,3 +186,32 @@ int mvme147_hwclk(int op, struct rtc_time *t)
} }
return 0; 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);
}

View 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);