2020-10-30 14:28:45

by Arnd Bergmann

[permalink] [raw]
Subject: [PATCH v2 1/2] m68k: m68328: move platform code to separate files

From: Arnd Bergmann <[email protected]>

The dragen2 and ucsimm/ucdimm files require a bit of
custom code compared to the other dragonball platforms,
move them into separate files as a preparation for a
build fix.

Signed-off-by: Arnd Bergmann <[email protected]>
---
Just a small cleanup after I ran into some issue during build
testing my timer patches, the second patch contains the
actual bugfix but relies on this preparation patch.
---
arch/m68k/68000/Makefile | 4 ++
arch/m68k/68000/dragen2.c | 100 +++++++++++++++++++++++++++
arch/m68k/68000/m68328.c | 3 +-
arch/m68k/68000/m68328.h | 5 ++
arch/m68k/68000/m68EZ328.c | 23 +------
arch/m68k/68000/m68VZ328.c | 136 ++-----------------------------------
arch/m68k/68000/ucsimm.c | 38 +++++++++++
7 files changed, 158 insertions(+), 151 deletions(-)
create mode 100644 arch/m68k/68000/dragen2.c
create mode 100644 arch/m68k/68000/m68328.h
create mode 100644 arch/m68k/68000/ucsimm.c

diff --git a/arch/m68k/68000/Makefile b/arch/m68k/68000/Makefile
index 4f7d4b45a46f..ce0b26d6580d 100644
--- a/arch/m68k/68000/Makefile
+++ b/arch/m68k/68000/Makefile
@@ -16,4 +16,8 @@ obj-$(CONFIG_M68EZ328) += m68EZ328.o
obj-$(CONFIG_M68VZ328) += m68VZ328.o
obj-$(CONFIG_ROM) += romvec.o

+obj-$(CONFIG_DRAGEN2) += dragen2.o
+obj-$(CONFIG_UCSIMM) += ucsimm.o
+obj-$(CONFIG_UCDIMM) += ucsimm.o
+
extra-y := head.o
diff --git a/arch/m68k/68000/dragen2.c b/arch/m68k/68000/dragen2.c
new file mode 100644
index 000000000000..584893c57c37
--- /dev/null
+++ b/arch/m68k/68000/dragen2.c
@@ -0,0 +1,100 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 1993 Hamish Macdonald
+ * Copyright (C) 1999 D. Jeff Dionne
+ * Copyright (C) 2001 Georges Menie, Ken Desmet
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License. See the file COPYING in the main directory of this archive
+ * for more details.
+ */
+#include <linux/init.h>
+#include <asm/machdep.h>
+#include <asm/MC68VZ328.h>
+
+/***************************************************************************/
+/* Init Drangon Engine hardware */
+/***************************************************************************/
+
+static void dragen2_reset(void)
+{
+ local_irq_disable();
+
+#ifdef CONFIG_INIT_LCD
+ PBDATA |= 0x20; /* disable CCFL light */
+ PKDATA |= 0x4; /* disable LCD controller */
+ LCKCON = 0;
+#endif
+
+ __asm__ __volatile__(
+ "reset\n\t"
+ "moveal #0x04000000, %a0\n\t"
+ "moveal 0(%a0), %sp\n\t"
+ "moveal 4(%a0), %a0\n\t"
+ "jmp (%a0)"
+ );
+}
+
+void __init init_dragen2(char *command, int size)
+{
+ mach_reset = dragen2_reset;
+
+#ifdef CONFIG_DIRECT_IO_ACCESS
+ SCR = 0x10; /* allow user access to internal registers */
+#endif
+
+ /* CSGB Init */
+ CSGBB = 0x4000;
+ CSB = 0x1a1;
+
+ /* CS8900 init */
+ /* PK3: hardware sleep function pin, active low */
+ PKSEL |= PK(3); /* select pin as I/O */
+ PKDIR |= PK(3); /* select pin as output */
+ PKDATA |= PK(3); /* set pin high */
+
+ /* PF5: hardware reset function pin, active high */
+ PFSEL |= PF(5); /* select pin as I/O */
+ PFDIR |= PF(5); /* select pin as output */
+ PFDATA &= ~PF(5); /* set pin low */
+
+ /* cs8900 hardware reset */
+ PFDATA |= PF(5);
+ { int i; for (i = 0; i < 32000; ++i); }
+ PFDATA &= ~PF(5);
+
+ /* INT1 enable (cs8900 IRQ) */
+ PDPOL &= ~PD(1); /* active high signal */
+ PDIQEG &= ~PD(1);
+ PDIRQEN |= PD(1); /* IRQ enabled */
+
+#ifdef CONFIG_INIT_LCD
+ /* initialize LCD controller */
+ LSSA = (long) screen_bits;
+ LVPW = 0x14;
+ LXMAX = 0x140;
+ LYMAX = 0xef;
+ LRRA = 0;
+ LPXCD = 3;
+ LPICF = 0x08;
+ LPOLCF = 0;
+ LCKCON = 0x80;
+ PCPDEN = 0xff;
+ PCSEL = 0;
+
+ /* Enable LCD controller */
+ PKDIR |= 0x4;
+ PKSEL |= 0x4;
+ PKDATA &= ~0x4;
+
+ /* Enable CCFL backlighting circuit */
+ PBDIR |= 0x20;
+ PBSEL |= 0x20;
+ PBDATA &= ~0x20;
+
+ /* contrast control register */
+ PFDIR |= 0x1;
+ PFSEL &= ~0x1;
+ PWMR = 0x037F;
+#endif
+}
diff --git a/arch/m68k/68000/m68328.c b/arch/m68k/68000/m68328.c
index 419751b15ec8..6a5cfc977150 100644
--- a/arch/m68k/68000/m68328.c
+++ b/arch/m68k/68000/m68328.c
@@ -25,9 +25,10 @@
#include "bootlogo.h"
#endif

+#include "m68328.h"
+
/***************************************************************************/

-int m68328_hwclk(int set, struct rtc_time *t);

/***************************************************************************/

diff --git a/arch/m68k/68000/m68328.h b/arch/m68k/68000/m68328.h
new file mode 100644
index 000000000000..f6047c3168d4
--- /dev/null
+++ b/arch/m68k/68000/m68328.h
@@ -0,0 +1,5 @@
+// SPDX-License-Identifier: GPL-2.0
+void init_dragen2(char *command, int size);
+void init_ucsimm(char *command, int size);
+struct rtc_time;
+int m68328_hwclk(int set, struct rtc_time *t);
diff --git a/arch/m68k/68000/m68EZ328.c b/arch/m68k/68000/m68EZ328.c
index 05f137dc257e..65bd112285ef 100644
--- a/arch/m68k/68000/m68EZ328.c
+++ b/arch/m68k/68000/m68EZ328.c
@@ -24,9 +24,7 @@
#include <asm/bootstd.h>
#endif

-/***************************************************************************/
-
-int m68328_hwclk(int set, struct rtc_time *t);
+#include "m68328.h"

/***************************************************************************/

@@ -44,29 +42,12 @@ void m68ez328_reset(void)

/***************************************************************************/

-unsigned char *cs8900a_hwaddr;
-static int errno;
-
-#ifdef CONFIG_UCSIMM
-_bsc0(char *, getserialnum)
-_bsc1(unsigned char *, gethwaddr, int, a)
-_bsc1(char *, getbenv, char *, a)
-#endif
-
void __init config_BSP(char *command, int len)
{
- unsigned char *p;
-
pr_info("68EZ328 DragonBallEZ support (C) 1999 Rt-Control, Inc\n");

#ifdef CONFIG_UCSIMM
- pr_info("uCsimm serial string [%s]\n", getserialnum());
- p = cs8900a_hwaddr = gethwaddr(0);
- pr_info("uCsimm hwaddr %pM\n", p);
-
- p = getbenv("APPEND");
- if (p) strcpy(p,command);
- else command[0] = 0;
+ init_ucsimm(command, len);
#endif

mach_sched_init = hw_timer_init;
diff --git a/arch/m68k/68000/m68VZ328.c b/arch/m68k/68000/m68VZ328.c
index ada87b23afdc..025da5552f1c 100644
--- a/arch/m68k/68000/m68VZ328.c
+++ b/arch/m68k/68000/m68VZ328.c
@@ -32,101 +32,9 @@
#include "bootlogo-vz.h"
#endif

-/***************************************************************************/
-
-int m68328_hwclk(int set, struct rtc_time *t);
-
-/***************************************************************************/
-/* Init Drangon Engine hardware */
-/***************************************************************************/
-#if defined(CONFIG_DRAGEN2)
-
-static void m68vz328_reset(void)
-{
- local_irq_disable();
-
-#ifdef CONFIG_INIT_LCD
- PBDATA |= 0x20; /* disable CCFL light */
- PKDATA |= 0x4; /* disable LCD controller */
- LCKCON = 0;
-#endif
-
- __asm__ __volatile__(
- "reset\n\t"
- "moveal #0x04000000, %a0\n\t"
- "moveal 0(%a0), %sp\n\t"
- "moveal 4(%a0), %a0\n\t"
- "jmp (%a0)"
- );
-}
-
-static void __init init_hardware(char *command, int size)
-{
-#ifdef CONFIG_DIRECT_IO_ACCESS
- SCR = 0x10; /* allow user access to internal registers */
-#endif
-
- /* CSGB Init */
- CSGBB = 0x4000;
- CSB = 0x1a1;
-
- /* CS8900 init */
- /* PK3: hardware sleep function pin, active low */
- PKSEL |= PK(3); /* select pin as I/O */
- PKDIR |= PK(3); /* select pin as output */
- PKDATA |= PK(3); /* set pin high */
-
- /* PF5: hardware reset function pin, active high */
- PFSEL |= PF(5); /* select pin as I/O */
- PFDIR |= PF(5); /* select pin as output */
- PFDATA &= ~PF(5); /* set pin low */
-
- /* cs8900 hardware reset */
- PFDATA |= PF(5);
- { int i; for (i = 0; i < 32000; ++i); }
- PFDATA &= ~PF(5);
-
- /* INT1 enable (cs8900 IRQ) */
- PDPOL &= ~PD(1); /* active high signal */
- PDIQEG &= ~PD(1);
- PDIRQEN |= PD(1); /* IRQ enabled */
-
-#ifdef CONFIG_INIT_LCD
- /* initialize LCD controller */
- LSSA = (long) screen_bits;
- LVPW = 0x14;
- LXMAX = 0x140;
- LYMAX = 0xef;
- LRRA = 0;
- LPXCD = 3;
- LPICF = 0x08;
- LPOLCF = 0;
- LCKCON = 0x80;
- PCPDEN = 0xff;
- PCSEL = 0;
-
- /* Enable LCD controller */
- PKDIR |= 0x4;
- PKSEL |= 0x4;
- PKDATA &= ~0x4;
-
- /* Enable CCFL backlighting circuit */
- PBDIR |= 0x20;
- PBSEL |= 0x20;
- PBDATA &= ~0x20;
-
- /* contrast control register */
- PFDIR |= 0x1;
- PFSEL &= ~0x1;
- PWMR = 0x037F;
-#endif
-}
+#include "m68328.h"

/***************************************************************************/
-/* Init RT-Control uCdimm hardware */
-/***************************************************************************/
-#elif defined(CONFIG_UCDIMM)
-
static void m68vz328_reset(void)
{
local_irq_disable();
@@ -139,51 +47,21 @@ static void m68vz328_reset(void)
);
}

-unsigned char *cs8900a_hwaddr;
-static int errno;
-
-_bsc0(char *, getserialnum)
-_bsc1(unsigned char *, gethwaddr, int, a)
-_bsc1(char *, getbenv, char *, a)
-
-static void __init init_hardware(char *command, int size)
-{
- char *p;
-
- pr_info("uCdimm serial string [%s]\n", getserialnum());
- p = cs8900a_hwaddr = gethwaddr(0);
- pr_info("uCdimm hwaddr %pM\n", p);
- p = getbenv("APPEND");
- if (p)
- strcpy(p, command);
- else
- command[0] = 0;
-}
-
-/***************************************************************************/
-#else
-
-static void m68vz328_reset(void)
-{
-}
-
-static void __init init_hardware(char *command, int size)
-{
-}
-
-/***************************************************************************/
-#endif
/***************************************************************************/

void __init config_BSP(char *command, int size)
{
pr_info("68VZ328 DragonBallVZ support (c) 2001 Lineo, Inc.\n");

- init_hardware(command, size);
-
mach_sched_init = hw_timer_init;
mach_hwclk = m68328_hwclk;
mach_reset = m68vz328_reset;
+
+#ifdef CONFIG_UCDIMM
+ init_ucsimm(command, len);
+#elif defined(CONFIG_DRAGEN2)
+ init_dragen2(command, len);
+#endif
}

/***************************************************************************/
diff --git a/arch/m68k/68000/ucsimm.c b/arch/m68k/68000/ucsimm.c
new file mode 100644
index 000000000000..7c6cbf643712
--- /dev/null
+++ b/arch/m68k/68000/ucsimm.c
@@ -0,0 +1,38 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 1993 Hamish Macdonald
+ * Copyright (C) 1999 D. Jeff Dionne
+ * Copyright (C) 2001 Georges Menie, Ken Desmet
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License. See the file COPYING in the main directory of this archive
+ * for more details.
+ */
+#include <linux/init.h>
+#include <asm/bootstd.h>
+#include <asm/machdep.h>
+#include <asm/MC68VZ328.h>
+
+
+#include "m68328.h"
+
+unsigned char *cs8900a_hwaddr;
+static int errno;
+
+_bsc0(char *, getserialnum)
+_bsc1(unsigned char *, gethwaddr, int, a)
+_bsc1(char *, getbenv, char *, a)
+
+void __init init_ucsimm(char *command, int size)
+{
+ char *p;
+
+ pr_info("uCsimm/uCdimm serial string [%s]\n", getserialnum());
+ p = cs8900a_hwaddr = gethwaddr(0);
+ pr_info("uCsimm/uCdimm hwaddr %pM\n", p);
+ p = getbenv("APPEND");
+ if (p)
+ strcpy(p, command);
+ else
+ command[0] = 0;
+}
--
2.27.0


2020-10-30 14:31:06

by Arnd Bergmann

[permalink] [raw]
Subject: [PATCH v2 2/2] m68k: m68328: remove duplicate code

From: Arnd Bergmann <[email protected]>

Building a kernel with multiple dragonball based boards
enabled needlessly causes a link failure because of duplicate
config_BSP() functions between the CPU versions.

Avoid that merging the three almost identical files into one,
and hiding the CPU configuration behind the board config.
The pr_info() lines are consolidated in one place.

It is still not possible to run a kernel configured for
more than one board, but at least configurations that can
be selected can also be built now.

Signed-off-by: Arnd Bergmann <[email protected]>
---
arch/m68k/68000/Makefile | 5 +--
arch/m68k/68000/m68328.c | 31 ++++++++++-------
arch/m68k/68000/m68EZ328.c | 58 --------------------------------
arch/m68k/68000/m68VZ328.c | 67 -------------------------------------
arch/m68k/Kconfig.cpu | 8 ++---
arch/m68k/Kconfig.machine | 16 +++++----
arch/m68k/kernel/setup_no.c | 9 +++++
7 files changed, 43 insertions(+), 151 deletions(-)
delete mode 100644 arch/m68k/68000/m68EZ328.c
delete mode 100644 arch/m68k/68000/m68VZ328.c

diff --git a/arch/m68k/68000/Makefile b/arch/m68k/68000/Makefile
index ce0b26d6580d..674541fdf5b8 100644
--- a/arch/m68k/68000/Makefile
+++ b/arch/m68k/68000/Makefile
@@ -10,10 +10,7 @@

# 68328, 68EZ328, 68VZ328

-obj-y += entry.o ints.o timers.o
-obj-$(CONFIG_M68328) += m68328.o
-obj-$(CONFIG_M68EZ328) += m68EZ328.o
-obj-$(CONFIG_M68VZ328) += m68VZ328.o
+obj-y += entry.o ints.o timers.o m68328.o
obj-$(CONFIG_ROM) += romvec.o

obj-$(CONFIG_DRAGEN2) += dragen2.o
diff --git a/arch/m68k/68000/m68328.c b/arch/m68k/68000/m68328.c
index 6a5cfc977150..eab08da058c6 100644
--- a/arch/m68k/68000/m68328.c
+++ b/arch/m68k/68000/m68328.c
@@ -1,10 +1,11 @@
/***************************************************************************/

/*
- * m68328.c - 68328 specific config
+ * m68328.c - 68328/68EZ328/68VZ328 specific config
*
* Copyright (C) 1993 Hamish Macdonald
* Copyright (C) 1999 D. Jeff Dionne
+ * Copyright (C) 2001 Georges Menie, Ken Desmet
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file COPYING in the main directory of this archive
@@ -20,8 +21,10 @@
#include <linux/kernel.h>
#include <linux/rtc.h>
#include <asm/machdep.h>
-#include <asm/MC68328.h>
-#if defined(CONFIG_PILOT) || defined(CONFIG_INIT_LCD)
+
+#if defined(CONFIG_INIT_LCD) && defined(CONFIG_M68VZ328)
+#include "bootlogo-vz.h"
+#elif defined(CONFIG_PILOT) || defined(CONFIG_INIT_LCD)
#include "bootlogo.h"
#endif

@@ -29,10 +32,7 @@

/***************************************************************************/

-
-/***************************************************************************/
-
-void m68328_reset (void)
+static void m68328_reset(void)
{
local_irq_disable();
asm volatile ("moveal #0x10c00000, %a0;\n\t"
@@ -46,12 +46,19 @@ void m68328_reset (void)

void __init config_BSP(char *command, int len)
{
- pr_info("68328 support D. Jeff Dionne <[email protected]>\n");
- pr_info("68328 support Kenneth Albanowski <[email protected]>\n");
- pr_info("68328/Pilot support Bernhard Kuhn <[email protected]>\n");
+ mach_sched_init = hw_timer_init;
+ mach_hwclk = m68328_hwclk;
+ mach_reset = m68328_reset;

- mach_hwclk = m68328_hwclk;
- mach_reset = m68328_reset;
+#if defined(CONFIG_PILOT) && defined(CONFIG_M68328)
+ mach_sched_init = NULL;
+#elif defined(CONFIG_UCSIMM)
+ init_ucsimm(command, len);
+#elif defined(CONFIG_UCDIMM)
+ init_ucsimm(command, len);
+#elif defined(CONFIG_DRAGEN2)
+ init_dragen2(command, len);
+#endif
}

/***************************************************************************/
diff --git a/arch/m68k/68000/m68EZ328.c b/arch/m68k/68000/m68EZ328.c
deleted file mode 100644
index 65bd112285ef..000000000000
--- a/arch/m68k/68000/m68EZ328.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/***************************************************************************/
-
-/*
- * m68EZ328.c - 68EZ328 specific config
- *
- * Copyright (C) 1993 Hamish Macdonald
- * Copyright (C) 1999 D. Jeff Dionne
- *
- * This file is subject to the terms and conditions of the GNU General Public
- * License. See the file COPYING in the main directory of this archive
- * for more details.
- */
-
-/***************************************************************************/
-
-#include <linux/init.h>
-#include <linux/types.h>
-#include <linux/kernel.h>
-#include <linux/rtc.h>
-#include <linux/pgtable.h>
-#include <asm/machdep.h>
-#include <asm/MC68EZ328.h>
-#ifdef CONFIG_UCSIMM
-#include <asm/bootstd.h>
-#endif
-
-#include "m68328.h"
-
-/***************************************************************************/
-
-void m68ez328_reset(void)
-{
- local_irq_disable();
- asm volatile (
- "moveal #0x10c00000, %a0;\n"
- "moveb #0, 0xFFFFF300;\n"
- "moveal 0(%a0), %sp;\n"
- "moveal 4(%a0), %a0;\n"
- "jmp (%a0);\n"
- );
-}
-
-/***************************************************************************/
-
-void __init config_BSP(char *command, int len)
-{
- pr_info("68EZ328 DragonBallEZ support (C) 1999 Rt-Control, Inc\n");
-
-#ifdef CONFIG_UCSIMM
- init_ucsimm(command, len);
-#endif
-
- mach_sched_init = hw_timer_init;
- mach_hwclk = m68328_hwclk;
- mach_reset = m68ez328_reset;
-}
-
-/***************************************************************************/
diff --git a/arch/m68k/68000/m68VZ328.c b/arch/m68k/68000/m68VZ328.c
deleted file mode 100644
index 025da5552f1c..000000000000
--- a/arch/m68k/68000/m68VZ328.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/***************************************************************************/
-
-/*
- * m68VZ328.c - 68VZ328 specific config
- *
- * Copyright (C) 1993 Hamish Macdonald
- * Copyright (C) 1999 D. Jeff Dionne
- * Copyright (C) 2001 Georges Menie, Ken Desmet
- *
- * This file is subject to the terms and conditions of the GNU General Public
- * License. See the file COPYING in the main directory of this archive
- * for more details.
- */
-
-/***************************************************************************/
-
-#include <linux/init.h>
-#include <linux/types.h>
-#include <linux/kernel.h>
-#include <linux/kd.h>
-#include <linux/netdevice.h>
-#include <linux/interrupt.h>
-#include <linux/irq.h>
-#include <linux/rtc.h>
-#include <linux/pgtable.h>
-
-#include <asm/machdep.h>
-#include <asm/MC68VZ328.h>
-#include <asm/bootstd.h>
-
-#ifdef CONFIG_INIT_LCD
-#include "bootlogo-vz.h"
-#endif
-
-#include "m68328.h"
-
-/***************************************************************************/
-static void m68vz328_reset(void)
-{
- local_irq_disable();
- asm volatile (
- "moveal #0x10c00000, %a0;\n\t"
- "moveb #0, 0xFFFFF300;\n\t"
- "moveal 0(%a0), %sp;\n\t"
- "moveal 4(%a0), %a0;\n\t"
- "jmp (%a0);\n"
- );
-}
-
-/***************************************************************************/
-
-void __init config_BSP(char *command, int size)
-{
- pr_info("68VZ328 DragonBallVZ support (c) 2001 Lineo, Inc.\n");
-
- mach_sched_init = hw_timer_init;
- mach_hwclk = m68328_hwclk;
- mach_reset = m68vz328_reset;
-
-#ifdef CONFIG_UCDIMM
- init_ucsimm(command, len);
-#elif defined(CONFIG_DRAGEN2)
- init_dragen2(command, len);
-#endif
-}
-
-/***************************************************************************/
diff --git a/arch/m68k/Kconfig.cpu b/arch/m68k/Kconfig.cpu
index 694c4fca9f5d..a65ce7618232 100644
--- a/arch/m68k/Kconfig.cpu
+++ b/arch/m68k/Kconfig.cpu
@@ -35,7 +35,7 @@ endchoice
if M68KCLASSIC

config M68000
- bool "MC68000"
+ bool
depends on !MMU
select CPU_HAS_NO_BITFIELDS
select CPU_HAS_NO_MULDIV64
@@ -102,21 +102,21 @@ config M68060
processor, say Y. Otherwise, say N.

config M68328
- bool "MC68328"
+ bool
depends on !MMU
select M68000
help
Motorola 68328 processor support.

config M68EZ328
- bool "MC68EZ328"
+ bool
depends on !MMU
select M68000
help
Motorola 68EX328 processor support.

config M68VZ328
- bool "MC68VZ328"
+ bool
depends on !MMU
select M68000
help
diff --git a/arch/m68k/Kconfig.machine b/arch/m68k/Kconfig.machine
index 17e8c3a292d7..1851c66e8667 100644
--- a/arch/m68k/Kconfig.machine
+++ b/arch/m68k/Kconfig.machine
@@ -136,14 +136,13 @@ config SUN3

If you don't want to compile a kernel exclusively for a Sun 3, say N.

-endif # M68KCLASSIC
-
config PILOT
bool

config PILOT3
bool "Pilot 1000/5000, PalmPilot Personal/Pro, or PalmIII support"
- depends on M68328
+ depends on !MMU
+ select M68328
select PILOT
help
Support for the Palm Pilot 1000/5000, Personal/Pro and PalmIII.
@@ -156,19 +155,22 @@ config XCOPILOT_BUGS

config UCSIMM
bool "uCsimm module support"
- depends on M68EZ328
+ depends on !MMU
+ select M68EZ328
help
Support for the Arcturus Networks uCsimm module.

config UCDIMM
bool "uDsimm module support"
- depends on M68VZ328
+ depends on !MMU
+ select M68VZ328
help
Support for the Arcturus Networks uDsimm module.

config DRAGEN2
bool "DragenEngine II board support"
- depends on M68VZ328
+ depends on !MMU
+ select M68VZ328
help
Support for the DragenEngine II board.

@@ -191,6 +193,8 @@ config MEMORY_RESERVE
help
Reserve certain memory regions on 68x328 based boards.

+endif # M68KCLASSIC
+
config ARN5206
bool "Arnewsh 5206 board support"
depends on M5206
diff --git a/arch/m68k/kernel/setup_no.c b/arch/m68k/kernel/setup_no.c
index f66f4b1d062e..58dbe10ccf56 100644
--- a/arch/m68k/kernel/setup_no.c
+++ b/arch/m68k/kernel/setup_no.c
@@ -106,8 +106,16 @@ void __init setup_arch(char **cmdline_p)
#ifdef CONFIG_UCDIMM
pr_info("uCdimm by Lineo, Inc. <http://www.lineo.com>\n");
#endif
+#ifdef CONFIG_M68328
+ pr_info("68328 support D. Jeff Dionne <[email protected]>\n");
+ pr_info("68328 support Kenneth Albanowski <[email protected]>\n");
+#endif
+#ifdef CONFIG_M68EZ328
+ pr_info("68EZ328 DragonBallEZ support (C) 1999 Rt-Control, Inc\n");
+#endif
#ifdef CONFIG_M68VZ328
pr_info("M68VZ328 support by Evan Stawnyczy <[email protected]>\n");
+ pr_info("68VZ328 DragonBallVZ support (c) 2001 Lineo, Inc.\n");
#endif
#ifdef CONFIG_COLDFIRE
pr_info("COLDFIRE port done by Greg Ungerer, [email protected]\n");
@@ -121,6 +129,7 @@ void __init setup_arch(char **cmdline_p)
pr_info("Flat model support (C) 1998,1999 Kenneth Albanowski, D. Jeff Dionne\n");

#if defined( CONFIG_PILOT ) && defined( CONFIG_M68328 )
+ pr_info("68328/Pilot support Bernhard Kuhn <[email protected]>\n");
pr_info("TRG SuperPilot FLASH card support <[email protected]>\n");
#endif
#if defined( CONFIG_PILOT ) && defined( CONFIG_M68EZ328 )
--
2.27.0

2020-11-02 02:50:38

by Greg Ungerer

[permalink] [raw]
Subject: Re: [PATCH v2 1/2] m68k: m68328: move platform code to separate files


On 31/10/20 12:26 am, Arnd Bergmann wrote:
> From: Arnd Bergmann <[email protected]>
>
> The dragen2 and ucsimm/ucdimm files require a bit of
> custom code compared to the other dragonball platforms,
> move them into separate files as a preparation for a
> build fix.
>
> Signed-off-by: Arnd Bergmann <[email protected]>
> ---
> Just a small cleanup after I ran into some issue during build
> testing my timer patches, the second patch contains the
> actual bugfix but relies on this preparation patch.

Thanks Arnd,
Pushed into the for-next branch of the m68knommu git tree.

Regards
Greg


> ---
> arch/m68k/68000/Makefile | 4 ++
> arch/m68k/68000/dragen2.c | 100 +++++++++++++++++++++++++++
> arch/m68k/68000/m68328.c | 3 +-
> arch/m68k/68000/m68328.h | 5 ++
> arch/m68k/68000/m68EZ328.c | 23 +------
> arch/m68k/68000/m68VZ328.c | 136 ++-----------------------------------
> arch/m68k/68000/ucsimm.c | 38 +++++++++++
> 7 files changed, 158 insertions(+), 151 deletions(-)
> create mode 100644 arch/m68k/68000/dragen2.c
> create mode 100644 arch/m68k/68000/m68328.h
> create mode 100644 arch/m68k/68000/ucsimm.c
>
> diff --git a/arch/m68k/68000/Makefile b/arch/m68k/68000/Makefile
> index 4f7d4b45a46f..ce0b26d6580d 100644
> --- a/arch/m68k/68000/Makefile
> +++ b/arch/m68k/68000/Makefile
> @@ -16,4 +16,8 @@ obj-$(CONFIG_M68EZ328) += m68EZ328.o
> obj-$(CONFIG_M68VZ328) += m68VZ328.o
> obj-$(CONFIG_ROM) += romvec.o
>
> +obj-$(CONFIG_DRAGEN2) += dragen2.o
> +obj-$(CONFIG_UCSIMM) += ucsimm.o
> +obj-$(CONFIG_UCDIMM) += ucsimm.o
> +
> extra-y := head.o
> diff --git a/arch/m68k/68000/dragen2.c b/arch/m68k/68000/dragen2.c
> new file mode 100644
> index 000000000000..584893c57c37
> --- /dev/null
> +++ b/arch/m68k/68000/dragen2.c
> @@ -0,0 +1,100 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * Copyright (C) 1993 Hamish Macdonald
> + * Copyright (C) 1999 D. Jeff Dionne
> + * Copyright (C) 2001 Georges Menie, Ken Desmet
> + *
> + * This file is subject to the terms and conditions of the GNU General Public
> + * License. See the file COPYING in the main directory of this archive
> + * for more details.
> + */
> +#include <linux/init.h>
> +#include <asm/machdep.h>
> +#include <asm/MC68VZ328.h>
> +
> +/***************************************************************************/
> +/* Init Drangon Engine hardware */
> +/***************************************************************************/
> +
> +static void dragen2_reset(void)
> +{
> + local_irq_disable();
> +
> +#ifdef CONFIG_INIT_LCD
> + PBDATA |= 0x20; /* disable CCFL light */
> + PKDATA |= 0x4; /* disable LCD controller */
> + LCKCON = 0;
> +#endif
> +
> + __asm__ __volatile__(
> + "reset\n\t"
> + "moveal #0x04000000, %a0\n\t"
> + "moveal 0(%a0), %sp\n\t"
> + "moveal 4(%a0), %a0\n\t"
> + "jmp (%a0)"
> + );
> +}
> +
> +void __init init_dragen2(char *command, int size)
> +{
> + mach_reset = dragen2_reset;
> +
> +#ifdef CONFIG_DIRECT_IO_ACCESS
> + SCR = 0x10; /* allow user access to internal registers */
> +#endif
> +
> + /* CSGB Init */
> + CSGBB = 0x4000;
> + CSB = 0x1a1;
> +
> + /* CS8900 init */
> + /* PK3: hardware sleep function pin, active low */
> + PKSEL |= PK(3); /* select pin as I/O */
> + PKDIR |= PK(3); /* select pin as output */
> + PKDATA |= PK(3); /* set pin high */
> +
> + /* PF5: hardware reset function pin, active high */
> + PFSEL |= PF(5); /* select pin as I/O */
> + PFDIR |= PF(5); /* select pin as output */
> + PFDATA &= ~PF(5); /* set pin low */
> +
> + /* cs8900 hardware reset */
> + PFDATA |= PF(5);
> + { int i; for (i = 0; i < 32000; ++i); }
> + PFDATA &= ~PF(5);
> +
> + /* INT1 enable (cs8900 IRQ) */
> + PDPOL &= ~PD(1); /* active high signal */
> + PDIQEG &= ~PD(1);
> + PDIRQEN |= PD(1); /* IRQ enabled */
> +
> +#ifdef CONFIG_INIT_LCD
> + /* initialize LCD controller */
> + LSSA = (long) screen_bits;
> + LVPW = 0x14;
> + LXMAX = 0x140;
> + LYMAX = 0xef;
> + LRRA = 0;
> + LPXCD = 3;
> + LPICF = 0x08;
> + LPOLCF = 0;
> + LCKCON = 0x80;
> + PCPDEN = 0xff;
> + PCSEL = 0;
> +
> + /* Enable LCD controller */
> + PKDIR |= 0x4;
> + PKSEL |= 0x4;
> + PKDATA &= ~0x4;
> +
> + /* Enable CCFL backlighting circuit */
> + PBDIR |= 0x20;
> + PBSEL |= 0x20;
> + PBDATA &= ~0x20;
> +
> + /* contrast control register */
> + PFDIR |= 0x1;
> + PFSEL &= ~0x1;
> + PWMR = 0x037F;
> +#endif
> +}
> diff --git a/arch/m68k/68000/m68328.c b/arch/m68k/68000/m68328.c
> index 419751b15ec8..6a5cfc977150 100644
> --- a/arch/m68k/68000/m68328.c
> +++ b/arch/m68k/68000/m68328.c
> @@ -25,9 +25,10 @@
> #include "bootlogo.h"
> #endif
>
> +#include "m68328.h"
> +
> /***************************************************************************/
>
> -int m68328_hwclk(int set, struct rtc_time *t);
>
> /***************************************************************************/
>
> diff --git a/arch/m68k/68000/m68328.h b/arch/m68k/68000/m68328.h
> new file mode 100644
> index 000000000000..f6047c3168d4
> --- /dev/null
> +++ b/arch/m68k/68000/m68328.h
> @@ -0,0 +1,5 @@
> +// SPDX-License-Identifier: GPL-2.0
> +void init_dragen2(char *command, int size);
> +void init_ucsimm(char *command, int size);
> +struct rtc_time;
> +int m68328_hwclk(int set, struct rtc_time *t);
> diff --git a/arch/m68k/68000/m68EZ328.c b/arch/m68k/68000/m68EZ328.c
> index 05f137dc257e..65bd112285ef 100644
> --- a/arch/m68k/68000/m68EZ328.c
> +++ b/arch/m68k/68000/m68EZ328.c
> @@ -24,9 +24,7 @@
> #include <asm/bootstd.h>
> #endif
>
> -/***************************************************************************/
> -
> -int m68328_hwclk(int set, struct rtc_time *t);
> +#include "m68328.h"
>
> /***************************************************************************/
>
> @@ -44,29 +42,12 @@ void m68ez328_reset(void)
>
> /***************************************************************************/
>
> -unsigned char *cs8900a_hwaddr;
> -static int errno;
> -
> -#ifdef CONFIG_UCSIMM
> -_bsc0(char *, getserialnum)
> -_bsc1(unsigned char *, gethwaddr, int, a)
> -_bsc1(char *, getbenv, char *, a)
> -#endif
> -
> void __init config_BSP(char *command, int len)
> {
> - unsigned char *p;
> -
> pr_info("68EZ328 DragonBallEZ support (C) 1999 Rt-Control, Inc\n");
>
> #ifdef CONFIG_UCSIMM
> - pr_info("uCsimm serial string [%s]\n", getserialnum());
> - p = cs8900a_hwaddr = gethwaddr(0);
> - pr_info("uCsimm hwaddr %pM\n", p);
> -
> - p = getbenv("APPEND");
> - if (p) strcpy(p,command);
> - else command[0] = 0;
> + init_ucsimm(command, len);
> #endif
>
> mach_sched_init = hw_timer_init;
> diff --git a/arch/m68k/68000/m68VZ328.c b/arch/m68k/68000/m68VZ328.c
> index ada87b23afdc..025da5552f1c 100644
> --- a/arch/m68k/68000/m68VZ328.c
> +++ b/arch/m68k/68000/m68VZ328.c
> @@ -32,101 +32,9 @@
> #include "bootlogo-vz.h"
> #endif
>
> -/***************************************************************************/
> -
> -int m68328_hwclk(int set, struct rtc_time *t);
> -
> -/***************************************************************************/
> -/* Init Drangon Engine hardware */
> -/***************************************************************************/
> -#if defined(CONFIG_DRAGEN2)
> -
> -static void m68vz328_reset(void)
> -{
> - local_irq_disable();
> -
> -#ifdef CONFIG_INIT_LCD
> - PBDATA |= 0x20; /* disable CCFL light */
> - PKDATA |= 0x4; /* disable LCD controller */
> - LCKCON = 0;
> -#endif
> -
> - __asm__ __volatile__(
> - "reset\n\t"
> - "moveal #0x04000000, %a0\n\t"
> - "moveal 0(%a0), %sp\n\t"
> - "moveal 4(%a0), %a0\n\t"
> - "jmp (%a0)"
> - );
> -}
> -
> -static void __init init_hardware(char *command, int size)
> -{
> -#ifdef CONFIG_DIRECT_IO_ACCESS
> - SCR = 0x10; /* allow user access to internal registers */
> -#endif
> -
> - /* CSGB Init */
> - CSGBB = 0x4000;
> - CSB = 0x1a1;
> -
> - /* CS8900 init */
> - /* PK3: hardware sleep function pin, active low */
> - PKSEL |= PK(3); /* select pin as I/O */
> - PKDIR |= PK(3); /* select pin as output */
> - PKDATA |= PK(3); /* set pin high */
> -
> - /* PF5: hardware reset function pin, active high */
> - PFSEL |= PF(5); /* select pin as I/O */
> - PFDIR |= PF(5); /* select pin as output */
> - PFDATA &= ~PF(5); /* set pin low */
> -
> - /* cs8900 hardware reset */
> - PFDATA |= PF(5);
> - { int i; for (i = 0; i < 32000; ++i); }
> - PFDATA &= ~PF(5);
> -
> - /* INT1 enable (cs8900 IRQ) */
> - PDPOL &= ~PD(1); /* active high signal */
> - PDIQEG &= ~PD(1);
> - PDIRQEN |= PD(1); /* IRQ enabled */
> -
> -#ifdef CONFIG_INIT_LCD
> - /* initialize LCD controller */
> - LSSA = (long) screen_bits;
> - LVPW = 0x14;
> - LXMAX = 0x140;
> - LYMAX = 0xef;
> - LRRA = 0;
> - LPXCD = 3;
> - LPICF = 0x08;
> - LPOLCF = 0;
> - LCKCON = 0x80;
> - PCPDEN = 0xff;
> - PCSEL = 0;
> -
> - /* Enable LCD controller */
> - PKDIR |= 0x4;
> - PKSEL |= 0x4;
> - PKDATA &= ~0x4;
> -
> - /* Enable CCFL backlighting circuit */
> - PBDIR |= 0x20;
> - PBSEL |= 0x20;
> - PBDATA &= ~0x20;
> -
> - /* contrast control register */
> - PFDIR |= 0x1;
> - PFSEL &= ~0x1;
> - PWMR = 0x037F;
> -#endif
> -}
> +#include "m68328.h"
>
> /***************************************************************************/
> -/* Init RT-Control uCdimm hardware */
> -/***************************************************************************/
> -#elif defined(CONFIG_UCDIMM)
> -
> static void m68vz328_reset(void)
> {
> local_irq_disable();
> @@ -139,51 +47,21 @@ static void m68vz328_reset(void)
> );
> }
>
> -unsigned char *cs8900a_hwaddr;
> -static int errno;
> -
> -_bsc0(char *, getserialnum)
> -_bsc1(unsigned char *, gethwaddr, int, a)
> -_bsc1(char *, getbenv, char *, a)
> -
> -static void __init init_hardware(char *command, int size)
> -{
> - char *p;
> -
> - pr_info("uCdimm serial string [%s]\n", getserialnum());
> - p = cs8900a_hwaddr = gethwaddr(0);
> - pr_info("uCdimm hwaddr %pM\n", p);
> - p = getbenv("APPEND");
> - if (p)
> - strcpy(p, command);
> - else
> - command[0] = 0;
> -}
> -
> -/***************************************************************************/
> -#else
> -
> -static void m68vz328_reset(void)
> -{
> -}
> -
> -static void __init init_hardware(char *command, int size)
> -{
> -}
> -
> -/***************************************************************************/
> -#endif
> /***************************************************************************/
>
> void __init config_BSP(char *command, int size)
> {
> pr_info("68VZ328 DragonBallVZ support (c) 2001 Lineo, Inc.\n");
>
> - init_hardware(command, size);
> -
> mach_sched_init = hw_timer_init;
> mach_hwclk = m68328_hwclk;
> mach_reset = m68vz328_reset;
> +
> +#ifdef CONFIG_UCDIMM
> + init_ucsimm(command, len);
> +#elif defined(CONFIG_DRAGEN2)
> + init_dragen2(command, len);
> +#endif
> }
>
> /***************************************************************************/
> diff --git a/arch/m68k/68000/ucsimm.c b/arch/m68k/68000/ucsimm.c
> new file mode 100644
> index 000000000000..7c6cbf643712
> --- /dev/null
> +++ b/arch/m68k/68000/ucsimm.c
> @@ -0,0 +1,38 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * Copyright (C) 1993 Hamish Macdonald
> + * Copyright (C) 1999 D. Jeff Dionne
> + * Copyright (C) 2001 Georges Menie, Ken Desmet
> + *
> + * This file is subject to the terms and conditions of the GNU General Public
> + * License. See the file COPYING in the main directory of this archive
> + * for more details.
> + */
> +#include <linux/init.h>
> +#include <asm/bootstd.h>
> +#include <asm/machdep.h>
> +#include <asm/MC68VZ328.h>
> +
> +
> +#include "m68328.h"
> +
> +unsigned char *cs8900a_hwaddr;
> +static int errno;
> +
> +_bsc0(char *, getserialnum)
> +_bsc1(unsigned char *, gethwaddr, int, a)
> +_bsc1(char *, getbenv, char *, a)
> +
> +void __init init_ucsimm(char *command, int size)
> +{
> + char *p;
> +
> + pr_info("uCsimm/uCdimm serial string [%s]\n", getserialnum());
> + p = cs8900a_hwaddr = gethwaddr(0);
> + pr_info("uCsimm/uCdimm hwaddr %pM\n", p);
> + p = getbenv("APPEND");
> + if (p)
> + strcpy(p, command);
> + else
> + command[0] = 0;
> +}
>