All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michael Schmitz <schmitzmic@gmail.com>
To: linux-m68k@vger.kernel.org, geert@linux-m68k.org
Cc: linux-ide@vger.kernel.org, fthain@linux-m68k.org,
	Michael Schmitz <schmitzmic@gmail.com>
Subject: [PATCH RFC 1/2] m68k: io_mm.h: conditionalize ISA address translation on Atari
Date: Wed,  2 Jun 2021 17:21:06 +1200	[thread overview]
Message-ID: <1622611267-15825-2-git-send-email-schmitzmic@gmail.com> (raw)
In-Reply-To: <1622611267-15825-1-git-send-email-schmitzmic@gmail.com>

Current io_mm.h uses address translation and ROM port IO primitives when
port addresses are below 1024, and raw untranslated MMIO IO primitives
else when CONFIG_ATARI_ROM_ISA is set. This is done regardless of the
m68k machine type a multi-platform kernel runs on. As a consequence,
the Q40 IDE driver in multiplatform kernels cannot work.
Conversely, the Atari IDE driver uses wrong address translation if a
multiplatform Q40 and Atari kernel does _not_ set CONFIG_ATARI_ROM_ISA.

Replace MMIO by ISA IO primitives for addresses > 1024 (if isa_type
is ISA_TYPE_ENEC), and change the ISA address translation used for
Atari to a no-op for those addresses.

Switch readb()/writeb() and readw()/writew() to their ISA equivalents
also. Change the address translation functions to return the identity
translation if CONFIG_ATARI_ROM_ISA is not defined, and set MULTI_ISA
for kernels where Q40 and Atari are both configured so this can actually
work (isa_type set to Q40 at compile time else).

Signed-off-by: Michael Schmity <schmitzmic@gmail.com>
---
 arch/m68k/include/asm/io_mm.h | 64 +++++++++++++++++++++++++++----------------
 1 file changed, 40 insertions(+), 24 deletions(-)

diff --git a/arch/m68k/include/asm/io_mm.h b/arch/m68k/include/asm/io_mm.h
index d41fa48..2275e54 100644
--- a/arch/m68k/include/asm/io_mm.h
+++ b/arch/m68k/include/asm/io_mm.h
@@ -52,7 +52,11 @@
 #define Q40_ISA_MEM_B(madr)  (q40_isa_mem_base+1+4*((unsigned long)(madr)))
 #define Q40_ISA_MEM_W(madr)  (q40_isa_mem_base+  4*((unsigned long)(madr)))
 
+#ifdef CONFIG_ATARI
+#define MULTI_ISA 1
+#else
 #define MULTI_ISA 0
+#endif /* Atari */
 #endif /* Q40 */
 
 #ifdef CONFIG_AMIGA_PCMCIA
@@ -135,9 +139,12 @@ static inline u8 __iomem *isa_itb(unsigned long addr)
     case ISA_TYPE_AG: return (u8 __iomem *)AG_ISA_IO_B(addr);
 #endif
 #ifdef CONFIG_ATARI_ROM_ISA
-    case ISA_TYPE_ENEC: return (u8 __iomem *)ENEC_ISA_IO_B(addr);
+    case ISA_TYPE_ENEC: if (addr < 1024) 
+				return (u8 __iomem *)ENEC_ISA_IO_B(addr);
+			else
+				return (u8 __iomem *)(addr);
 #endif
-    default: return NULL; /* avoid warnings, just in case */
+    default: return (u8 __iomem *)(addr); /* avoid warnings, just in case */
     }
 }
 static inline u16 __iomem *isa_itw(unsigned long addr)
@@ -151,9 +158,12 @@ static inline u16 __iomem *isa_itw(unsigned long addr)
     case ISA_TYPE_AG: return (u16 __iomem *)AG_ISA_IO_W(addr);
 #endif
 #ifdef CONFIG_ATARI_ROM_ISA
-    case ISA_TYPE_ENEC: return (u16 __iomem *)ENEC_ISA_IO_W(addr);
+    case ISA_TYPE_ENEC: if (addr < 1024)
+				return (u16 __iomem *)ENEC_ISA_IO_W(addr);
+			else
+				return (u16 __iomem *)(addr);
 #endif
-    default: return NULL; /* avoid warnings, just in case */
+    default: return (u16 __iomem *)(addr); /* avoid warnings, just in case */
     }
 }
 static inline u32 __iomem *isa_itl(unsigned long addr)
@@ -177,9 +187,12 @@ static inline u8 __iomem *isa_mtb(unsigned long addr)
     case ISA_TYPE_AG: return (u8 __iomem *)addr;
 #endif
 #ifdef CONFIG_ATARI_ROM_ISA
-    case ISA_TYPE_ENEC: return (u8 __iomem *)ENEC_ISA_MEM_B(addr);
+    case ISA_TYPE_ENEC: if (addr < 1024)
+				return (u8 __iomem *)ENEC_ISA_MEM_B(addr);
+			else
+				return (u8 __iomem *)(addr);
 #endif
-    default: return NULL; /* avoid warnings, just in case */
+    default: return (u8 __iomem *)(addr); /* avoid warnings, just in case */
     }
 }
 static inline u16 __iomem *isa_mtw(unsigned long addr)
@@ -193,9 +206,12 @@ static inline u16 __iomem *isa_mtw(unsigned long addr)
     case ISA_TYPE_AG: return (u16 __iomem *)addr;
 #endif
 #ifdef CONFIG_ATARI_ROM_ISA
-    case ISA_TYPE_ENEC: return (u16 __iomem *)ENEC_ISA_MEM_W(addr);
+    case ISA_TYPE_ENEC: if (addr < 1024)
+				return (u16 __iomem *)ENEC_ISA_MEM_W(addr);
+			else
+				return (u16 __iomem *)(addr);
 #endif
-    default: return NULL; /* avoid warnings, just in case */
+    default: return (u16 __iomem *)(addr); /* avoid warnings, just in case */
     }
 }
 
@@ -344,31 +360,31 @@ static inline void isa_delay(void)
  * ROM port ISA and everything else regular ISA for IDE. read,write defined
  * below.
  */
-#define inb(port)	((port) < 1024 ? isa_rom_inb(port) : in_8(port))
-#define inb_p(port)	((port) < 1024 ? isa_rom_inb_p(port) : in_8(port))
-#define inw(port)	((port) < 1024 ? isa_rom_inw(port) : in_le16(port))
-#define inw_p(port)	((port) < 1024 ? isa_rom_inw_p(port) : in_le16(port))
+#define inb(port)	(((port) < 1024 && ISA_TYPE == ISA_TYPE_ENEC) ? isa_rom_inb(port) : isa_inb(port))
+#define inb_p(port)	(((port) < 1024 && ISA_TYPE == ISA_TYPE_ENEC) ? isa_rom_inb_p(port) : isa_inb_p(port))
+#define inw(port)	(((port) < 1024 && ISA_TYPE == ISA_TYPE_ENEC) ? isa_rom_inw(port) : isa_inw(port))
+#define inw_p(port)	(((port) < 1024 && ISA_TYPE == ISA_TYPE_ENEC) ? isa_rom_inw_p(port) : isa_inw_p(port))
 #define inl		isa_inl
 #define inl_p		isa_inl_p
 
-#define outb(val, port)	((port) < 1024 ? isa_rom_outb((val), (port)) : out_8((port), (val)))
-#define outb_p(val, port) ((port) < 1024 ? isa_rom_outb_p((val), (port)) : out_8((port), (val)))
-#define outw(val, port)	((port) < 1024 ? isa_rom_outw((val), (port)) : out_le16((port), (val)))
-#define outw_p(val, port) ((port) < 1024 ? isa_rom_outw_p((val), (port)) : out_le16((port), (val)))
+#define outb(val, port)	(((port) < 1024 && ISA_TYPE == ISA_TYPE_ENEC) ? isa_rom_outb((val), (port)) : isa_outb((val), (port)))
+#define outb_p(val, port) (((port) < 1024 && ISA_TYPE == ISA_TYPE_ENEC) ? isa_rom_outb_p((val), (port)) : isa_outb_p((val), (port)))
+#define outw(val, port)	(((port) < 1024 && ISA_TYPE == ISA_TYPE_ENEC) ? isa_rom_outw((val), (port)) : isa_outw((val), (port)))
+#define outw_p(val, port) (((port) < 1024 && ISA_TYPE == ISA_TYPE_ENEC) ? isa_rom_outw_p((val), (port)) : isa_outw_p((val), (port)))
 #define outl		isa_outl
 #define outl_p		isa_outl_p
 
-#define insb(port, buf, nr)	((port) < 1024 ? isa_rom_insb((port), (buf), (nr)) : isa_insb((port), (buf), (nr)))
-#define insw(port, buf, nr)	((port) < 1024 ? isa_rom_insw((port), (buf), (nr)) : isa_insw((port), (buf), (nr)))
+#define insb(port, buf, nr)	(((port) < 1024 && ISA_TYPE == ISA_TYPE_ENEC) ? isa_rom_insb((port), (buf), (nr)) : isa_insb((port), (buf), (nr)))
+#define insw(port, buf, nr)	(((port) < 1024 && ISA_TYPE == ISA_TYPE_ENEC) ? isa_rom_insw((port), (buf), (nr)) : isa_insw((port), (buf), (nr)))
 #define insl			isa_insl
-#define outsb(port, buf, nr)	((port) < 1024 ? isa_rom_outsb((port), (buf), (nr)) : isa_outsb((port), (buf), (nr)))
-#define outsw(port, buf, nr)	((port) < 1024 ? isa_rom_outsw((port), (buf), (nr)) : isa_outsw((port), (buf), (nr)))
+#define outsb(port, buf, nr)	(((port) < 1024 && ISA_TYPE == ISA_TYPE_ENEC) ? isa_rom_outsb((port), (buf), (nr)) : isa_outsb((port), (buf), (nr)))
+#define outsw(port, buf, nr)	(((port) < 1024 && ISA_TYPE == ISA_TYPE_ENEC) ? isa_rom_outsw((port), (buf), (nr)) : isa_outsw((port), (buf), (nr)))
 #define outsl			isa_outsl
 
-#define readb(addr)		in_8(addr)
-#define writeb(val, addr)	out_8((addr), (val))
-#define readw(addr)		in_le16(addr)
-#define writew(val, addr)	out_le16((addr), (val))
+#define readb   isa_readb
+#define readw   isa_readw
+#define writeb  isa_writeb
+#define writew  isa_writew
 #endif /* CONFIG_ATARI_ROM_ISA */
 
 #define readl(addr)      in_le32(addr)
-- 
2.7.4


  reply	other threads:[~2021-06-02  5:21 UTC|newest]

Thread overview: 86+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-25  9:06 [PATCH] m68k/mac: Replace macide driver with generic platform driver Finn Thain
2021-04-25 10:25 ` John Paul Adrian Glaubitz
2021-04-26  7:37   ` Finn Thain
2021-04-26  7:48     ` John Paul Adrian Glaubitz
2021-04-27  1:51     ` Michael Schmitz
2021-04-27  3:47       ` Finn Thain
2021-04-27 19:54         ` Michael Schmitz
2021-04-28  6:53           ` Geert Uytterhoeven
2021-06-01  3:32             ` Michael Schmitz
2021-06-01  7:55               ` Michael Schmitz
2021-06-01  8:43                 ` Geert Uytterhoeven
2021-06-01 21:05                   ` Michael Schmitz
2021-06-02  5:21                   ` [PATCH RFC 0/2] Fix m68k multiplatform ISA support Michael Schmitz
2021-06-02  5:21                     ` Michael Schmitz [this message]
2021-06-03  8:23                       ` [PATCH RFC 1/2] m68k: io_mm.h: conditionalize ISA address translation on Atari Finn Thain
2021-06-04  0:19                         ` Michael Schmitz
2021-06-04  5:55                           ` Finn Thain
2021-06-04  7:30                             ` Michael Schmitz
2021-06-04 22:49                               ` Brad Boyer
2021-06-05  1:41                                 ` Michael Schmitz
2021-06-05  6:04                                   ` Brad Boyer
2021-06-05 22:05                                     ` Michael Schmitz
2021-06-06  2:18                                     ` Michael Schmitz
2021-06-06  4:53                                       ` Finn Thain
2021-06-06  5:42                                         ` Michael Schmitz
2021-06-06 23:51                                           ` Brad Boyer
2021-06-06  5:54                                     ` [PATCH RFC 0/2] Add APNE PCMCIA 100 Mbit support Michael Schmitz
2021-06-06  5:54                                       ` [PATCH RFC 1/2] m68k: io_mm.h - add APNE 100 MBit support Michael Schmitz
2021-06-07  8:01                                         ` Geert Uytterhoeven
2021-06-07  8:20                                           ` Michael Schmitz
2021-06-07 11:15                                         ` Geert Uytterhoeven
2021-06-07 19:57                                           ` Michael Schmitz
2021-06-08  6:42                                             ` Geert Uytterhoeven
2021-06-08 21:55                                               ` Michael Schmitz
2021-06-09  6:33                                                 ` Geert Uytterhoeven
2021-06-08 21:56                                               ` Michael Schmitz
2021-06-06  5:54                                       ` [PATCH RFC 2/2] net/8390: apne.c - add 100 Mbit support to apne.c driver Michael Schmitz
2021-06-06 12:42                                         ` kernel test robot
2021-06-07  8:08                                         ` Geert Uytterhoeven
2021-06-07  8:40                                           ` Michael Schmitz
2021-06-07  8:46                                             ` ALeX Kazik
2021-06-08  3:10                                               ` Michael Schmitz
2021-06-07  8:37                                         ` Geert Uytterhoeven
2021-06-07 12:56                                         ` Geert Uytterhoeven
2021-06-13 21:53                                           ` Michael Schmitz
2021-06-09  7:36                                       ` [PATCH v1 0/2] Add APNE PCMCIA 100 Mbit support Michael Schmitz
2021-06-09  7:36                                         ` [PATCH v1 1/2] m68k: io_mm.h - add APNE 100 MBit support Michael Schmitz
2021-06-09  8:04                                           ` Andreas Schwab
2021-06-09 21:54                                             ` Michael Schmitz
2021-06-10  1:09                                               ` Finn Thain
2021-06-10  7:32                                                 ` Geert Uytterhoeven
2021-06-11  2:15                                                   ` Michael Schmitz
2021-06-10  8:53                                               ` Andreas Schwab
2021-06-09  7:36                                         ` [PATCH v1 2/2] net/8390: apne.c - add 100 Mbit support to apne.c driver Michael Schmitz
2021-06-10  2:09                                         ` [PATCH v2 0/2] Add APNE PCMCIA 100 Mbit support Michael Schmitz
2021-06-10  2:09                                           ` [PATCH v2 1/2] m68k: io_mm.h - add APNE 100 MBit support Michael Schmitz
2021-06-10  2:09                                           ` [PATCH v2 2/2] net/8390: apne.c - add 100 Mbit support to apne.c driver Michael Schmitz
2021-06-16 21:11                                           ` [PATCH v2 0/2] Add APNE PCMCIA 100 Mbit support ALeX Kazik
2021-06-17  1:10                                             ` Michael Schmitz
2021-06-04  7:54                           ` [PATCH RFC 1/2] m68k: io_mm.h: conditionalize ISA address translation on Atari Geert Uytterhoeven
2021-06-04 21:36                             ` Michael Schmitz
2021-06-04 23:31                               ` Finn Thain
2021-06-05  0:24                                 ` Finn Thain
2021-06-05  3:48                                 ` Michael Schmitz
2021-06-09  6:35                       ` Geert Uytterhoeven
2021-06-09  7:20                         ` Michael Schmitz
2021-06-02  5:21                     ` [PATCH RFC 2/2] m68k: setup_mm.c: set isa_sex for Atari if ATARI_ROM_ISA not used Michael Schmitz
2021-06-02  7:09                       ` Geert Uytterhoeven
2021-06-02  8:21                         ` Michael Schmitz
2021-06-03  8:29                           ` Finn Thain
2021-06-04  3:02                             ` Michael Schmitz
2021-06-03  3:43                     ` [PATCH RFC 0/2] Fix m68k multiplatform ISA support Michael Schmitz
2021-06-03  7:09                       ` Geert Uytterhoeven
2021-06-04  0:22                         ` Michael Schmitz
2021-06-06  5:28                     ` [PATCH] m68k: Fix " Michael Schmitz
2021-06-07  7:49                       ` Geert Uytterhoeven
2021-06-07  8:17                         ` Michael Schmitz
2021-06-09  7:22                       ` [PATCH v2] m68k: io_mm.h: conditionalize ISA address translation on Atari Michael Schmitz
2021-06-09  7:57                         ` Andreas Schwab
2021-06-09 21:43                           ` Michael Schmitz
2021-06-10  2:04                         ` [PATCH v3] " Michael Schmitz
2021-04-27  8:11       ` [PATCH] m68k/mac: Replace macide driver with generic platform driver Sergei Shtylyov
2021-04-27  8:36         ` John Paul Adrian Glaubitz
2021-04-27 19:29         ` Michael Schmitz
2021-04-25 22:24 ` Michael Schmitz
2021-04-26  7:35   ` Finn Thain

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1622611267-15825-2-git-send-email-schmitzmic@gmail.com \
    --to=schmitzmic@gmail.com \
    --cc=fthain@linux-m68k.org \
    --cc=geert@linux-m68k.org \
    --cc=linux-ide@vger.kernel.org \
    --cc=linux-m68k@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.