Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

alpha: remove LCA and APECS based machines

APECS is the DECchip 21071x chipset for the EV4 and EV45 generation, while
LCA is the integrated I/O support on the corresponding low-cost alpha
machines of that generation.

All of these CPUs lack the BWX extension for byte and word access, so
drop the chipset support and all associated machines.

Acked-by: Paul E. McKenney <paulmck@kernel.org>
Acked-by: Matt Turner <mattst88@gmail.com>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>

+21 -2940
+5 -109
arch/alpha/Kconfig
··· 90 90 <http://www.alphalinux.org/>. In summary: 91 91 92 92 Alcor/Alpha-XLT AS 600, AS 500, XL-300, XL-366 93 - Alpha-XL XL-233, XL-266 94 - AlphaBook1 Alpha laptop 95 - Avanti AS 200, AS 205, AS 250, AS 255, AS 300, AS 400 96 - Cabriolet AlphaPC64, AlphaPCI64 97 93 DP264 DP264 / DS20 / ES40 / DS10 / DS10L 98 94 EB164 EB164 21164 evaluation board 99 - EB64+ EB64+ 21064 evaluation board 100 - EB66 EB66 21066 evaluation board 101 - EB66+ EB66+ 21066 evaluation board 102 95 LX164 AlphaPC164-LX 103 96 Miata Personal Workstation 433/500/600 a/au 104 97 Marvel AlphaServer ES47 / ES80 / GS1280 105 98 Mikasa AS 1000 106 - Noname AXPpci33, UDB (Multia) 107 99 Noritake AS 1000A, AS 600A, AS 800 108 100 PC164 AlphaPC164 109 101 Rawhide AS 1200, AS 4000, AS 4100 ··· 127 135 all the work required to support an external Bcache and to maintain 128 136 memory coherence when a PCI device DMAs into (or out of) memory. 129 137 130 - config ALPHA_XL 131 - bool "Alpha-XL" 132 - help 133 - XL-233 and XL-266-based Alpha systems. 134 - 135 - config ALPHA_BOOK1 136 - bool "AlphaBook1" 137 - help 138 - Dec AlphaBook1/Burns Alpha-based laptops. 139 - 140 - config ALPHA_AVANTI_CH 141 - bool "Avanti" 142 - 143 - config ALPHA_CABRIOLET 144 - bool "Cabriolet" 145 - help 146 - Cabriolet AlphaPC64, AlphaPCI64 systems. Derived from EB64+ but now 147 - baby-AT with Flash boot ROM, no on-board SCSI or Ethernet. 3 ISA 148 - slots, 4 PCI slots (one pair are on a shared slot), uses plug-in 149 - Bcache SIMMs. Requires power supply with 3.3V output. 150 - 151 138 config ALPHA_DP264 152 139 bool "DP264" 153 140 help ··· 143 172 Bcache SIMMs. I/O sub-system provides SuperI/O (2S, 1P, FD), KBD, 144 173 MOUSE (PS2 style), RTC/NVRAM. Boot ROM is Flash. PC-AT-sized 145 174 motherboard. Requires power supply with 3.3V output. 146 - 147 - config ALPHA_EB64P_CH 148 - bool "EB64+" 149 - 150 - config ALPHA_EB66 151 - bool "EB66" 152 - help 153 - A Digital DS group board. Uses 21066 or 21066A. I/O sub-system is 154 - identical to EB64+. Baby PC-AT size. Runs from standard PC power 155 - supply. The EB66 schematic was published as a marketing poster 156 - advertising the 21066 as "the first microprocessor in the world with 157 - embedded PCI". 158 - 159 - config ALPHA_EB66P 160 - bool "EB66+" 161 - help 162 - Later variant of the EB66 board. 163 175 164 176 config ALPHA_EIGER 165 177 bool "Eiger" ··· 178 224 help 179 225 Alpha systems based on the AMD 751 & ALI 1543C chipsets. 180 226 181 - config ALPHA_NONAME_CH 182 - bool "Noname" 183 - 184 227 config ALPHA_NORITAKE 185 228 bool "Noritake" 186 229 select HAVE_EISA ··· 187 236 188 237 config ALPHA_PC164 189 238 bool "PC164" 190 - 191 - config ALPHA_P2K 192 - bool "Platform2000" 193 239 194 240 config ALPHA_RAWHIDE 195 241 bool "Rawhide" ··· 251 303 bool 252 304 default y 253 305 254 - config ALPHA_NONAME 255 - bool 256 - depends on ALPHA_BOOK1 || ALPHA_NONAME_CH 257 - default y 258 - help 259 - The AXPpci33 (aka NoName), is based on the EB66 (includes the Multia 260 - UDB). This design was produced by Digital's Technical OEM (TOEM) 261 - group. It uses the 21066 processor running at 166MHz or 233MHz. It 262 - is a baby-AT size, and runs from a standard PC power supply. It has 263 - 5 ISA slots and 3 PCI slots (one pair are a shared slot). There are 264 - 2 versions, with either PS/2 or large DIN connectors for the 265 - keyboard. 266 - 267 306 config ALPHA_EV4 268 307 bool 269 - depends on ALPHA_NORITAKE && !ALPHA_PRIMO || ALPHA_MIKASA && !ALPHA_PRIMO || ALPHA_CABRIOLET || ALPHA_AVANTI_CH || ALPHA_EB64P_CH || ALPHA_XL || ALPHA_NONAME || ALPHA_EB66 || ALPHA_EB66P || ALPHA_P2K 270 - default y 271 - 272 - config ALPHA_LCA 273 - bool 274 - depends on ALPHA_NONAME || ALPHA_EB66 || ALPHA_EB66P || ALPHA_P2K 275 - default y 276 - 277 - config ALPHA_APECS 278 - bool 279 - depends on !ALPHA_PRIMO && (ALPHA_NORITAKE || ALPHA_MIKASA) || ALPHA_CABRIOLET || ALPHA_AVANTI_CH || ALPHA_EB64P_CH || ALPHA_XL 280 - default y 281 - 282 - config ALPHA_EB64P 283 - bool 284 - depends on ALPHA_CABRIOLET || ALPHA_EB64P_CH 285 - default y 286 - help 287 - Uses 21064 or 21064A and APECs. Has ISA and PCI expansion (3 ISA, 288 - 2 PCI, one pair are on a shared slot). Supports 36-bit DRAM SIMs. 289 - ISA bus generated by Intel SaturnI/O PCI-ISA bridge. On-board SCSI 290 - (NCR 810 on PCI) Ethernet (Digital 21040), KBD, MOUSE (PS2 style), 291 - SuperI/O (2S, 1P, FD), RTC/NVRAM. Boot ROM is EPROM. PC-AT size. 292 - Runs from standard PC power supply. 293 308 294 309 config ALPHA_EV5 295 310 bool 296 - default y if ALPHA_RX164 || ALPHA_RAWHIDE || ALPHA_MIATA || ALPHA_LX164 || ALPHA_SX164 || ALPHA_RUFFIAN || ALPHA_SABLE || ALPHA_NORITAKE && ALPHA_PRIMO || ALPHA_MIKASA && ALPHA_PRIMO || ALPHA_PC164 || ALPHA_TAKARA || ALPHA_EB164 || ALPHA_ALCOR 311 + default y if ALPHA_RX164 || ALPHA_RAWHIDE || ALPHA_MIATA || ALPHA_LX164 || ALPHA_SX164 || ALPHA_RUFFIAN || ALPHA_SABLE || ALPHA_NORITAKE || ALPHA_MIKASA || ALPHA_PC164 || ALPHA_TAKARA || ALPHA_EB164 || ALPHA_ALCOR 297 312 298 313 config ALPHA_CIA 299 314 bool 300 - depends on ALPHA_MIATA || ALPHA_LX164 || ALPHA_SX164 || ALPHA_RUFFIAN || ALPHA_NORITAKE && ALPHA_PRIMO || ALPHA_MIKASA && ALPHA_PRIMO || ALPHA_PC164 || ALPHA_TAKARA || ALPHA_EB164 || ALPHA_ALCOR 315 + depends on ALPHA_MIATA || ALPHA_LX164 || ALPHA_SX164 || ALPHA_RUFFIAN || ALPHA_NORITAKE || ALPHA_MIKASA || ALPHA_PC164 || ALPHA_TAKARA || ALPHA_EB164 || ALPHA_ALCOR 301 316 default y 302 317 303 318 config ALPHA_EV56 ··· 269 358 270 359 config ALPHA_EV56 271 360 prompt "EV56 CPU (speed >= 333MHz)?" 272 - depends on ALPHA_NORITAKE || ALPHA_PRIMO 361 + depends on ALPHA_NORITAKE || ALPHA_MIKASA 273 362 274 363 config ALPHA_EV56 275 364 prompt "EV56 CPU (speed >= 400MHz)?" 276 365 depends on ALPHA_RAWHIDE 277 - 278 - config ALPHA_PRIMO 279 - bool "EV5 CPU daughtercard (model 5/xxx)?" 280 - depends on ALPHA_NORITAKE || ALPHA_MIKASA 281 - help 282 - Say Y if you have an AS 1000 5/xxx or an AS 1000A 5/xxx. 283 366 284 367 config ALPHA_T2 285 368 bool ··· 321 416 bool 322 417 default y if !ALPHA_EV67 323 418 324 - config ALPHA_AVANTI 325 - bool 326 - depends on ALPHA_XL || ALPHA_AVANTI_CH 327 - default y 328 - help 329 - Avanti AS 200, AS 205, AS 250, AS 255, AS 300, and AS 400-based 330 - Alphas. Info at 331 - <http://www.unix-ag.org/Linux-Alpha/Architectures/Avanti.html>. 332 - 333 419 config ALPHA_BROKEN_IRQ_MASK 334 420 bool 335 421 depends on ALPHA_GENERIC || ALPHA_PC164 ··· 350 454 351 455 352 456 config ALPHA_SRM 353 - bool "Use SRM as bootloader" if ALPHA_CABRIOLET || ALPHA_AVANTI_CH || ALPHA_EB64P || ALPHA_PC164 || ALPHA_TAKARA || ALPHA_EB164 || ALPHA_ALCOR || ALPHA_MIATA || ALPHA_LX164 || ALPHA_SX164 || ALPHA_NAUTILUS || ALPHA_NONAME 457 + bool "Use SRM as bootloader" if ALPHA_PC164 || ALPHA_TAKARA || ALPHA_EB164 || ALPHA_ALCOR || ALPHA_MIATA || ALPHA_LX164 || ALPHA_SX164 || ALPHA_NAUTILUS 354 458 depends on TTY 355 459 default y if ALPHA_MIKASA || ALPHA_SABLE || ALPHA_NORITAKE || ALPHA_DP264 || ALPHA_RAWHIDE || ALPHA_EIGER || ALPHA_WILDFIRE || ALPHA_TITAN || ALPHA_SHARK || ALPHA_MARVEL 356 460 help ··· 414 518 config ALPHA_WTINT 415 519 bool "Use WTINT" if ALPHA_SRM || ALPHA_GENERIC 416 520 default y if ALPHA_QEMU 417 - default n if ALPHA_EV5 || ALPHA_EV56 || (ALPHA_EV4 && !ALPHA_LCA) 521 + default n if ALPHA_EV5 || ALPHA_EV56 418 522 default n if !ALPHA_SRM && !ALPHA_GENERIC 419 523 default y if SMP 420 524 help
-534
arch/alpha/include/asm/core_apecs.h
··· 1 - /* SPDX-License-Identifier: GPL-2.0 */ 2 - #ifndef __ALPHA_APECS__H__ 3 - #define __ALPHA_APECS__H__ 4 - 5 - #include <linux/types.h> 6 - #include <asm/compiler.h> 7 - 8 - /* 9 - * APECS is the internal name for the 2107x chipset which provides 10 - * memory controller and PCI access for the 21064 chip based systems. 11 - * 12 - * This file is based on: 13 - * 14 - * DECchip 21071-AA and DECchip 21072-AA Core Logic Chipsets 15 - * Data Sheet 16 - * 17 - * EC-N0648-72 18 - * 19 - * 20 - * david.rusling@reo.mts.dec.com Initial Version. 21 - * 22 - */ 23 - 24 - /* 25 - An AVANTI *might* be an XL, and an XL has only 27 bits of ISA address 26 - that get passed through the PCI<->ISA bridge chip. So we've gotta use 27 - both windows to max out the physical memory we can DMA to. Sigh... 28 - 29 - If we try a window at 0 for 1GB as a work-around, we run into conflicts 30 - with ISA/PCI bus memory which can't be relocated, like VGA aperture and 31 - BIOS ROMs. So we must put the windows high enough to avoid these areas. 32 - 33 - We put window 1 at BUS 64Mb for 64Mb, mapping physical 0 to 64Mb-1, 34 - and window 2 at BUS 1Gb for 1Gb, mapping physical 0 to 1Gb-1. 35 - Yes, this does map 0 to 64Mb-1 twice, but only window 1 will actually 36 - be used for that range (via virt_to_bus()). 37 - 38 - Note that we actually fudge the window 1 maximum as 48Mb instead of 64Mb, 39 - to keep virt_to_bus() from returning an address in the first window, for 40 - a data area that goes beyond the 64Mb first DMA window. Sigh... 41 - The fudge factor MUST match with <asm/dma.h> MAX_DMA_ADDRESS, but 42 - we can't just use that here, because of header file looping... :-( 43 - 44 - Window 1 will be used for all DMA from the ISA bus; yes, that does 45 - limit what memory an ISA floppy or sound card or Ethernet can touch, but 46 - it's also a known limitation on other platforms as well. We use the 47 - same technique that is used on INTEL platforms with similar limitation: 48 - set MAX_DMA_ADDRESS and clear some pages' DMAable flags during mem_init(). 49 - We trust that any ISA bus device drivers will *always* ask for DMAable 50 - memory explicitly via kmalloc()/get_free_pages() flags arguments. 51 - 52 - Note that most PCI bus devices' drivers do *not* explicitly ask for 53 - DMAable memory; they count on being able to DMA to any memory they 54 - get from kmalloc()/get_free_pages(). They will also use window 1 for 55 - any physical memory accesses below 64Mb; the rest will be handled by 56 - window 2, maxing out at 1Gb of memory. I trust this is enough... :-) 57 - 58 - We hope that the area before the first window is large enough so that 59 - there will be no overlap at the top end (64Mb). We *must* locate the 60 - PCI cards' memory just below window 1, so that there's still the 61 - possibility of being able to access it via SPARSE space. This is 62 - important for cards such as the Matrox Millennium, whose Xserver 63 - wants to access memory-mapped registers in byte and short lengths. 64 - 65 - Note that the XL is treated differently from the AVANTI, even though 66 - for most other things they are identical. It didn't seem reasonable to 67 - make the AVANTI support pay for the limitations of the XL. It is true, 68 - however, that an XL kernel will run on an AVANTI without problems. 69 - 70 - %%% All of this should be obviated by the ability to route 71 - everything through the iommu. 72 - */ 73 - 74 - /* 75 - * 21071-DA Control and Status registers. 76 - * These are used for PCI memory access. 77 - */ 78 - #define APECS_IOC_DCSR (IDENT_ADDR + 0x1A0000000UL) 79 - #define APECS_IOC_PEAR (IDENT_ADDR + 0x1A0000020UL) 80 - #define APECS_IOC_SEAR (IDENT_ADDR + 0x1A0000040UL) 81 - #define APECS_IOC_DR1 (IDENT_ADDR + 0x1A0000060UL) 82 - #define APECS_IOC_DR2 (IDENT_ADDR + 0x1A0000080UL) 83 - #define APECS_IOC_DR3 (IDENT_ADDR + 0x1A00000A0UL) 84 - 85 - #define APECS_IOC_TB1R (IDENT_ADDR + 0x1A00000C0UL) 86 - #define APECS_IOC_TB2R (IDENT_ADDR + 0x1A00000E0UL) 87 - 88 - #define APECS_IOC_PB1R (IDENT_ADDR + 0x1A0000100UL) 89 - #define APECS_IOC_PB2R (IDENT_ADDR + 0x1A0000120UL) 90 - 91 - #define APECS_IOC_PM1R (IDENT_ADDR + 0x1A0000140UL) 92 - #define APECS_IOC_PM2R (IDENT_ADDR + 0x1A0000160UL) 93 - 94 - #define APECS_IOC_HAXR0 (IDENT_ADDR + 0x1A0000180UL) 95 - #define APECS_IOC_HAXR1 (IDENT_ADDR + 0x1A00001A0UL) 96 - #define APECS_IOC_HAXR2 (IDENT_ADDR + 0x1A00001C0UL) 97 - 98 - #define APECS_IOC_PMLT (IDENT_ADDR + 0x1A00001E0UL) 99 - 100 - #define APECS_IOC_TLBTAG0 (IDENT_ADDR + 0x1A0000200UL) 101 - #define APECS_IOC_TLBTAG1 (IDENT_ADDR + 0x1A0000220UL) 102 - #define APECS_IOC_TLBTAG2 (IDENT_ADDR + 0x1A0000240UL) 103 - #define APECS_IOC_TLBTAG3 (IDENT_ADDR + 0x1A0000260UL) 104 - #define APECS_IOC_TLBTAG4 (IDENT_ADDR + 0x1A0000280UL) 105 - #define APECS_IOC_TLBTAG5 (IDENT_ADDR + 0x1A00002A0UL) 106 - #define APECS_IOC_TLBTAG6 (IDENT_ADDR + 0x1A00002C0UL) 107 - #define APECS_IOC_TLBTAG7 (IDENT_ADDR + 0x1A00002E0UL) 108 - 109 - #define APECS_IOC_TLBDATA0 (IDENT_ADDR + 0x1A0000300UL) 110 - #define APECS_IOC_TLBDATA1 (IDENT_ADDR + 0x1A0000320UL) 111 - #define APECS_IOC_TLBDATA2 (IDENT_ADDR + 0x1A0000340UL) 112 - #define APECS_IOC_TLBDATA3 (IDENT_ADDR + 0x1A0000360UL) 113 - #define APECS_IOC_TLBDATA4 (IDENT_ADDR + 0x1A0000380UL) 114 - #define APECS_IOC_TLBDATA5 (IDENT_ADDR + 0x1A00003A0UL) 115 - #define APECS_IOC_TLBDATA6 (IDENT_ADDR + 0x1A00003C0UL) 116 - #define APECS_IOC_TLBDATA7 (IDENT_ADDR + 0x1A00003E0UL) 117 - 118 - #define APECS_IOC_TBIA (IDENT_ADDR + 0x1A0000400UL) 119 - 120 - 121 - /* 122 - * 21071-CA Control and Status registers. 123 - * These are used to program memory timing, 124 - * configure memory and initialise the B-Cache. 125 - */ 126 - #define APECS_MEM_GCR (IDENT_ADDR + 0x180000000UL) 127 - #define APECS_MEM_EDSR (IDENT_ADDR + 0x180000040UL) 128 - #define APECS_MEM_TAR (IDENT_ADDR + 0x180000060UL) 129 - #define APECS_MEM_ELAR (IDENT_ADDR + 0x180000080UL) 130 - #define APECS_MEM_EHAR (IDENT_ADDR + 0x1800000a0UL) 131 - #define APECS_MEM_SFT_RST (IDENT_ADDR + 0x1800000c0UL) 132 - #define APECS_MEM_LDxLAR (IDENT_ADDR + 0x1800000e0UL) 133 - #define APECS_MEM_LDxHAR (IDENT_ADDR + 0x180000100UL) 134 - #define APECS_MEM_GTR (IDENT_ADDR + 0x180000200UL) 135 - #define APECS_MEM_RTR (IDENT_ADDR + 0x180000220UL) 136 - #define APECS_MEM_VFPR (IDENT_ADDR + 0x180000240UL) 137 - #define APECS_MEM_PDLDR (IDENT_ADDR + 0x180000260UL) 138 - #define APECS_MEM_PDhDR (IDENT_ADDR + 0x180000280UL) 139 - 140 - /* Bank x Base Address Register */ 141 - #define APECS_MEM_B0BAR (IDENT_ADDR + 0x180000800UL) 142 - #define APECS_MEM_B1BAR (IDENT_ADDR + 0x180000820UL) 143 - #define APECS_MEM_B2BAR (IDENT_ADDR + 0x180000840UL) 144 - #define APECS_MEM_B3BAR (IDENT_ADDR + 0x180000860UL) 145 - #define APECS_MEM_B4BAR (IDENT_ADDR + 0x180000880UL) 146 - #define APECS_MEM_B5BAR (IDENT_ADDR + 0x1800008A0UL) 147 - #define APECS_MEM_B6BAR (IDENT_ADDR + 0x1800008C0UL) 148 - #define APECS_MEM_B7BAR (IDENT_ADDR + 0x1800008E0UL) 149 - #define APECS_MEM_B8BAR (IDENT_ADDR + 0x180000900UL) 150 - 151 - /* Bank x Configuration Register */ 152 - #define APECS_MEM_B0BCR (IDENT_ADDR + 0x180000A00UL) 153 - #define APECS_MEM_B1BCR (IDENT_ADDR + 0x180000A20UL) 154 - #define APECS_MEM_B2BCR (IDENT_ADDR + 0x180000A40UL) 155 - #define APECS_MEM_B3BCR (IDENT_ADDR + 0x180000A60UL) 156 - #define APECS_MEM_B4BCR (IDENT_ADDR + 0x180000A80UL) 157 - #define APECS_MEM_B5BCR (IDENT_ADDR + 0x180000AA0UL) 158 - #define APECS_MEM_B6BCR (IDENT_ADDR + 0x180000AC0UL) 159 - #define APECS_MEM_B7BCR (IDENT_ADDR + 0x180000AE0UL) 160 - #define APECS_MEM_B8BCR (IDENT_ADDR + 0x180000B00UL) 161 - 162 - /* Bank x Timing Register A */ 163 - #define APECS_MEM_B0TRA (IDENT_ADDR + 0x180000C00UL) 164 - #define APECS_MEM_B1TRA (IDENT_ADDR + 0x180000C20UL) 165 - #define APECS_MEM_B2TRA (IDENT_ADDR + 0x180000C40UL) 166 - #define APECS_MEM_B3TRA (IDENT_ADDR + 0x180000C60UL) 167 - #define APECS_MEM_B4TRA (IDENT_ADDR + 0x180000C80UL) 168 - #define APECS_MEM_B5TRA (IDENT_ADDR + 0x180000CA0UL) 169 - #define APECS_MEM_B6TRA (IDENT_ADDR + 0x180000CC0UL) 170 - #define APECS_MEM_B7TRA (IDENT_ADDR + 0x180000CE0UL) 171 - #define APECS_MEM_B8TRA (IDENT_ADDR + 0x180000D00UL) 172 - 173 - /* Bank x Timing Register B */ 174 - #define APECS_MEM_B0TRB (IDENT_ADDR + 0x180000E00UL) 175 - #define APECS_MEM_B1TRB (IDENT_ADDR + 0x180000E20UL) 176 - #define APECS_MEM_B2TRB (IDENT_ADDR + 0x180000E40UL) 177 - #define APECS_MEM_B3TRB (IDENT_ADDR + 0x180000E60UL) 178 - #define APECS_MEM_B4TRB (IDENT_ADDR + 0x180000E80UL) 179 - #define APECS_MEM_B5TRB (IDENT_ADDR + 0x180000EA0UL) 180 - #define APECS_MEM_B6TRB (IDENT_ADDR + 0x180000EC0UL) 181 - #define APECS_MEM_B7TRB (IDENT_ADDR + 0x180000EE0UL) 182 - #define APECS_MEM_B8TRB (IDENT_ADDR + 0x180000F00UL) 183 - 184 - 185 - /* 186 - * Memory spaces: 187 - */ 188 - #define APECS_IACK_SC (IDENT_ADDR + 0x1b0000000UL) 189 - #define APECS_CONF (IDENT_ADDR + 0x1e0000000UL) 190 - #define APECS_IO (IDENT_ADDR + 0x1c0000000UL) 191 - #define APECS_SPARSE_MEM (IDENT_ADDR + 0x200000000UL) 192 - #define APECS_DENSE_MEM (IDENT_ADDR + 0x300000000UL) 193 - 194 - 195 - /* 196 - * Bit definitions for I/O Controller status register 0: 197 - */ 198 - #define APECS_IOC_STAT0_CMD 0xf 199 - #define APECS_IOC_STAT0_ERR (1<<4) 200 - #define APECS_IOC_STAT0_LOST (1<<5) 201 - #define APECS_IOC_STAT0_THIT (1<<6) 202 - #define APECS_IOC_STAT0_TREF (1<<7) 203 - #define APECS_IOC_STAT0_CODE_SHIFT 8 204 - #define APECS_IOC_STAT0_CODE_MASK 0x7 205 - #define APECS_IOC_STAT0_P_NBR_SHIFT 13 206 - #define APECS_IOC_STAT0_P_NBR_MASK 0x7ffff 207 - 208 - #define APECS_HAE_ADDRESS APECS_IOC_HAXR1 209 - 210 - 211 - /* 212 - * Data structure for handling APECS machine checks: 213 - */ 214 - 215 - struct el_apecs_mikasa_sysdata_mcheck 216 - { 217 - unsigned long coma_gcr; 218 - unsigned long coma_edsr; 219 - unsigned long coma_ter; 220 - unsigned long coma_elar; 221 - unsigned long coma_ehar; 222 - unsigned long coma_ldlr; 223 - unsigned long coma_ldhr; 224 - unsigned long coma_base0; 225 - unsigned long coma_base1; 226 - unsigned long coma_base2; 227 - unsigned long coma_base3; 228 - unsigned long coma_cnfg0; 229 - unsigned long coma_cnfg1; 230 - unsigned long coma_cnfg2; 231 - unsigned long coma_cnfg3; 232 - unsigned long epic_dcsr; 233 - unsigned long epic_pear; 234 - unsigned long epic_sear; 235 - unsigned long epic_tbr1; 236 - unsigned long epic_tbr2; 237 - unsigned long epic_pbr1; 238 - unsigned long epic_pbr2; 239 - unsigned long epic_pmr1; 240 - unsigned long epic_pmr2; 241 - unsigned long epic_harx1; 242 - unsigned long epic_harx2; 243 - unsigned long epic_pmlt; 244 - unsigned long epic_tag0; 245 - unsigned long epic_tag1; 246 - unsigned long epic_tag2; 247 - unsigned long epic_tag3; 248 - unsigned long epic_tag4; 249 - unsigned long epic_tag5; 250 - unsigned long epic_tag6; 251 - unsigned long epic_tag7; 252 - unsigned long epic_data0; 253 - unsigned long epic_data1; 254 - unsigned long epic_data2; 255 - unsigned long epic_data3; 256 - unsigned long epic_data4; 257 - unsigned long epic_data5; 258 - unsigned long epic_data6; 259 - unsigned long epic_data7; 260 - 261 - unsigned long pceb_vid; 262 - unsigned long pceb_did; 263 - unsigned long pceb_revision; 264 - unsigned long pceb_command; 265 - unsigned long pceb_status; 266 - unsigned long pceb_latency; 267 - unsigned long pceb_control; 268 - unsigned long pceb_arbcon; 269 - unsigned long pceb_arbpri; 270 - 271 - unsigned long esc_id; 272 - unsigned long esc_revision; 273 - unsigned long esc_int0; 274 - unsigned long esc_int1; 275 - unsigned long esc_elcr0; 276 - unsigned long esc_elcr1; 277 - unsigned long esc_last_eisa; 278 - unsigned long esc_nmi_stat; 279 - 280 - unsigned long pci_ir; 281 - unsigned long pci_imr; 282 - unsigned long svr_mgr; 283 - }; 284 - 285 - /* This for the normal APECS machines. */ 286 - struct el_apecs_sysdata_mcheck 287 - { 288 - unsigned long coma_gcr; 289 - unsigned long coma_edsr; 290 - unsigned long coma_ter; 291 - unsigned long coma_elar; 292 - unsigned long coma_ehar; 293 - unsigned long coma_ldlr; 294 - unsigned long coma_ldhr; 295 - unsigned long coma_base0; 296 - unsigned long coma_base1; 297 - unsigned long coma_base2; 298 - unsigned long coma_cnfg0; 299 - unsigned long coma_cnfg1; 300 - unsigned long coma_cnfg2; 301 - unsigned long epic_dcsr; 302 - unsigned long epic_pear; 303 - unsigned long epic_sear; 304 - unsigned long epic_tbr1; 305 - unsigned long epic_tbr2; 306 - unsigned long epic_pbr1; 307 - unsigned long epic_pbr2; 308 - unsigned long epic_pmr1; 309 - unsigned long epic_pmr2; 310 - unsigned long epic_harx1; 311 - unsigned long epic_harx2; 312 - unsigned long epic_pmlt; 313 - unsigned long epic_tag0; 314 - unsigned long epic_tag1; 315 - unsigned long epic_tag2; 316 - unsigned long epic_tag3; 317 - unsigned long epic_tag4; 318 - unsigned long epic_tag5; 319 - unsigned long epic_tag6; 320 - unsigned long epic_tag7; 321 - unsigned long epic_data0; 322 - unsigned long epic_data1; 323 - unsigned long epic_data2; 324 - unsigned long epic_data3; 325 - unsigned long epic_data4; 326 - unsigned long epic_data5; 327 - unsigned long epic_data6; 328 - unsigned long epic_data7; 329 - }; 330 - 331 - struct el_apecs_procdata 332 - { 333 - unsigned long paltemp[32]; /* PAL TEMP REGS. */ 334 - /* EV4-specific fields */ 335 - unsigned long exc_addr; /* Address of excepting instruction. */ 336 - unsigned long exc_sum; /* Summary of arithmetic traps. */ 337 - unsigned long exc_mask; /* Exception mask (from exc_sum). */ 338 - unsigned long iccsr; /* IBox hardware enables. */ 339 - unsigned long pal_base; /* Base address for PALcode. */ 340 - unsigned long hier; /* Hardware Interrupt Enable. */ 341 - unsigned long hirr; /* Hardware Interrupt Request. */ 342 - unsigned long csr; /* D-stream fault info. */ 343 - unsigned long dc_stat; /* D-cache status (ECC/Parity Err). */ 344 - unsigned long dc_addr; /* EV3 Phys Addr for ECC/DPERR. */ 345 - unsigned long abox_ctl; /* ABox Control Register. */ 346 - unsigned long biu_stat; /* BIU Status. */ 347 - unsigned long biu_addr; /* BUI Address. */ 348 - unsigned long biu_ctl; /* BIU Control. */ 349 - unsigned long fill_syndrome;/* For correcting ECC errors. */ 350 - unsigned long fill_addr; /* Cache block which was being read */ 351 - unsigned long va; /* Effective VA of fault or miss. */ 352 - unsigned long bc_tag; /* Backup Cache Tag Probe Results.*/ 353 - }; 354 - 355 - 356 - #ifdef __KERNEL__ 357 - 358 - #ifndef __EXTERN_INLINE 359 - #define __EXTERN_INLINE extern inline 360 - #define __IO_EXTERN_INLINE 361 - #endif 362 - 363 - /* 364 - * I/O functions: 365 - * 366 - * Unlike Jensen, the APECS machines have no concept of local 367 - * I/O---everything goes over the PCI bus. 368 - * 369 - * There is plenty room for optimization here. In particular, 370 - * the Alpha's insb/insw/extb/extw should be useful in moving 371 - * data to/from the right byte-lanes. 372 - */ 373 - 374 - #define vip volatile int __force * 375 - #define vuip volatile unsigned int __force * 376 - #define vulp volatile unsigned long __force * 377 - 378 - #define APECS_SET_HAE \ 379 - do { \ 380 - if (addr >= (1UL << 24)) { \ 381 - unsigned long msb = addr & 0xf8000000; \ 382 - addr -= msb; \ 383 - set_hae(msb); \ 384 - } \ 385 - } while (0) 386 - 387 - __EXTERN_INLINE u8 apecs_ioread8(const void __iomem *xaddr) 388 - { 389 - unsigned long addr = (unsigned long) xaddr; 390 - unsigned long result, base_and_type; 391 - 392 - if (addr >= APECS_DENSE_MEM) { 393 - addr -= APECS_DENSE_MEM; 394 - APECS_SET_HAE; 395 - base_and_type = APECS_SPARSE_MEM + 0x00; 396 - } else { 397 - addr -= APECS_IO; 398 - base_and_type = APECS_IO + 0x00; 399 - } 400 - 401 - result = *(vip) ((addr << 5) + base_and_type); 402 - return __kernel_extbl(result, addr & 3); 403 - } 404 - 405 - __EXTERN_INLINE void apecs_iowrite8(u8 b, void __iomem *xaddr) 406 - { 407 - unsigned long addr = (unsigned long) xaddr; 408 - unsigned long w, base_and_type; 409 - 410 - if (addr >= APECS_DENSE_MEM) { 411 - addr -= APECS_DENSE_MEM; 412 - APECS_SET_HAE; 413 - base_and_type = APECS_SPARSE_MEM + 0x00; 414 - } else { 415 - addr -= APECS_IO; 416 - base_and_type = APECS_IO + 0x00; 417 - } 418 - 419 - w = __kernel_insbl(b, addr & 3); 420 - *(vuip) ((addr << 5) + base_and_type) = w; 421 - } 422 - 423 - __EXTERN_INLINE u16 apecs_ioread16(const void __iomem *xaddr) 424 - { 425 - unsigned long addr = (unsigned long) xaddr; 426 - unsigned long result, base_and_type; 427 - 428 - if (addr >= APECS_DENSE_MEM) { 429 - addr -= APECS_DENSE_MEM; 430 - APECS_SET_HAE; 431 - base_and_type = APECS_SPARSE_MEM + 0x08; 432 - } else { 433 - addr -= APECS_IO; 434 - base_and_type = APECS_IO + 0x08; 435 - } 436 - 437 - result = *(vip) ((addr << 5) + base_and_type); 438 - return __kernel_extwl(result, addr & 3); 439 - } 440 - 441 - __EXTERN_INLINE void apecs_iowrite16(u16 b, void __iomem *xaddr) 442 - { 443 - unsigned long addr = (unsigned long) xaddr; 444 - unsigned long w, base_and_type; 445 - 446 - if (addr >= APECS_DENSE_MEM) { 447 - addr -= APECS_DENSE_MEM; 448 - APECS_SET_HAE; 449 - base_and_type = APECS_SPARSE_MEM + 0x08; 450 - } else { 451 - addr -= APECS_IO; 452 - base_and_type = APECS_IO + 0x08; 453 - } 454 - 455 - w = __kernel_inswl(b, addr & 3); 456 - *(vuip) ((addr << 5) + base_and_type) = w; 457 - } 458 - 459 - __EXTERN_INLINE u32 apecs_ioread32(const void __iomem *xaddr) 460 - { 461 - unsigned long addr = (unsigned long) xaddr; 462 - if (addr < APECS_DENSE_MEM) 463 - addr = ((addr - APECS_IO) << 5) + APECS_IO + 0x18; 464 - return *(vuip)addr; 465 - } 466 - 467 - __EXTERN_INLINE void apecs_iowrite32(u32 b, void __iomem *xaddr) 468 - { 469 - unsigned long addr = (unsigned long) xaddr; 470 - if (addr < APECS_DENSE_MEM) 471 - addr = ((addr - APECS_IO) << 5) + APECS_IO + 0x18; 472 - *(vuip)addr = b; 473 - } 474 - 475 - __EXTERN_INLINE u64 apecs_ioread64(const void __iomem *xaddr) 476 - { 477 - unsigned long addr = (unsigned long) xaddr; 478 - if (addr < APECS_DENSE_MEM) 479 - addr = ((addr - APECS_IO) << 5) + APECS_IO + 0x18; 480 - return *(vulp)addr; 481 - } 482 - 483 - __EXTERN_INLINE void apecs_iowrite64(u64 b, void __iomem *xaddr) 484 - { 485 - unsigned long addr = (unsigned long) xaddr; 486 - if (addr < APECS_DENSE_MEM) 487 - addr = ((addr - APECS_IO) << 5) + APECS_IO + 0x18; 488 - *(vulp)addr = b; 489 - } 490 - 491 - __EXTERN_INLINE void __iomem *apecs_ioportmap(unsigned long addr) 492 - { 493 - return (void __iomem *)(addr + APECS_IO); 494 - } 495 - 496 - __EXTERN_INLINE void __iomem *apecs_ioremap(unsigned long addr, 497 - unsigned long size) 498 - { 499 - return (void __iomem *)(addr + APECS_DENSE_MEM); 500 - } 501 - 502 - __EXTERN_INLINE int apecs_is_ioaddr(unsigned long addr) 503 - { 504 - return addr >= IDENT_ADDR + 0x180000000UL; 505 - } 506 - 507 - __EXTERN_INLINE int apecs_is_mmio(const volatile void __iomem *addr) 508 - { 509 - return (unsigned long)addr >= APECS_DENSE_MEM; 510 - } 511 - 512 - #undef APECS_SET_HAE 513 - 514 - #undef vip 515 - #undef vuip 516 - #undef vulp 517 - 518 - #undef __IO_PREFIX 519 - #define __IO_PREFIX apecs 520 - #define apecs_trivial_io_bw 0 521 - #define apecs_trivial_io_lq 0 522 - #define apecs_trivial_rw_bw 2 523 - #define apecs_trivial_rw_lq 1 524 - #define apecs_trivial_iounmap 1 525 - #include <asm/io_trivial.h> 526 - 527 - #ifdef __IO_EXTERN_INLINE 528 - #undef __EXTERN_INLINE 529 - #undef __IO_EXTERN_INLINE 530 - #endif 531 - 532 - #endif /* __KERNEL__ */ 533 - 534 - #endif /* __ALPHA_APECS__H__ */
-378
arch/alpha/include/asm/core_lca.h
··· 1 - /* SPDX-License-Identifier: GPL-2.0 */ 2 - #ifndef __ALPHA_LCA__H__ 3 - #define __ALPHA_LCA__H__ 4 - 5 - #include <asm/compiler.h> 6 - #include <asm/mce.h> 7 - 8 - /* 9 - * Low Cost Alpha (LCA) definitions (these apply to 21066 and 21068, 10 - * for example). 11 - * 12 - * This file is based on: 13 - * 14 - * DECchip 21066 and DECchip 21068 Alpha AXP Microprocessors 15 - * Hardware Reference Manual; Digital Equipment Corp.; May 1994; 16 - * Maynard, MA; Order Number: EC-N2681-71. 17 - */ 18 - 19 - /* 20 - * NOTE: The LCA uses a Host Address Extension (HAE) register to access 21 - * PCI addresses that are beyond the first 27 bits of address 22 - * space. Updating the HAE requires an external cycle (and 23 - * a memory barrier), which tends to be slow. Instead of updating 24 - * it on each sparse memory access, we keep the current HAE value 25 - * cached in variable cache_hae. Only if the cached HAE differs 26 - * from the desired HAE value do we actually updated HAE register. 27 - * The HAE register is preserved by the interrupt handler entry/exit 28 - * code, so this scheme works even in the presence of interrupts. 29 - * 30 - * Dense memory space doesn't require the HAE, but is restricted to 31 - * aligned 32 and 64 bit accesses. Special Cycle and Interrupt 32 - * Acknowledge cycles may also require the use of the HAE. The LCA 33 - * limits I/O address space to the bottom 24 bits of address space, 34 - * but this easily covers the 16 bit ISA I/O address space. 35 - */ 36 - 37 - /* 38 - * NOTE 2! The memory operations do not set any memory barriers, as 39 - * it's not needed for cases like a frame buffer that is essentially 40 - * memory-like. You need to do them by hand if the operations depend 41 - * on ordering. 42 - * 43 - * Similarly, the port I/O operations do a "mb" only after a write 44 - * operation: if an mb is needed before (as in the case of doing 45 - * memory mapped I/O first, and then a port I/O operation to the same 46 - * device), it needs to be done by hand. 47 - * 48 - * After the above has bitten me 100 times, I'll give up and just do 49 - * the mb all the time, but right now I'm hoping this will work out. 50 - * Avoiding mb's may potentially be a noticeable speed improvement, 51 - * but I can't honestly say I've tested it. 52 - * 53 - * Handling interrupts that need to do mb's to synchronize to 54 - * non-interrupts is another fun race area. Don't do it (because if 55 - * you do, I'll have to do *everything* with interrupts disabled, 56 - * ugh). 57 - */ 58 - 59 - /* 60 - * Memory Controller registers: 61 - */ 62 - #define LCA_MEM_BCR0 (IDENT_ADDR + 0x120000000UL) 63 - #define LCA_MEM_BCR1 (IDENT_ADDR + 0x120000008UL) 64 - #define LCA_MEM_BCR2 (IDENT_ADDR + 0x120000010UL) 65 - #define LCA_MEM_BCR3 (IDENT_ADDR + 0x120000018UL) 66 - #define LCA_MEM_BMR0 (IDENT_ADDR + 0x120000020UL) 67 - #define LCA_MEM_BMR1 (IDENT_ADDR + 0x120000028UL) 68 - #define LCA_MEM_BMR2 (IDENT_ADDR + 0x120000030UL) 69 - #define LCA_MEM_BMR3 (IDENT_ADDR + 0x120000038UL) 70 - #define LCA_MEM_BTR0 (IDENT_ADDR + 0x120000040UL) 71 - #define LCA_MEM_BTR1 (IDENT_ADDR + 0x120000048UL) 72 - #define LCA_MEM_BTR2 (IDENT_ADDR + 0x120000050UL) 73 - #define LCA_MEM_BTR3 (IDENT_ADDR + 0x120000058UL) 74 - #define LCA_MEM_GTR (IDENT_ADDR + 0x120000060UL) 75 - #define LCA_MEM_ESR (IDENT_ADDR + 0x120000068UL) 76 - #define LCA_MEM_EAR (IDENT_ADDR + 0x120000070UL) 77 - #define LCA_MEM_CAR (IDENT_ADDR + 0x120000078UL) 78 - #define LCA_MEM_VGR (IDENT_ADDR + 0x120000080UL) 79 - #define LCA_MEM_PLM (IDENT_ADDR + 0x120000088UL) 80 - #define LCA_MEM_FOR (IDENT_ADDR + 0x120000090UL) 81 - 82 - /* 83 - * I/O Controller registers: 84 - */ 85 - #define LCA_IOC_HAE (IDENT_ADDR + 0x180000000UL) 86 - #define LCA_IOC_CONF (IDENT_ADDR + 0x180000020UL) 87 - #define LCA_IOC_STAT0 (IDENT_ADDR + 0x180000040UL) 88 - #define LCA_IOC_STAT1 (IDENT_ADDR + 0x180000060UL) 89 - #define LCA_IOC_TBIA (IDENT_ADDR + 0x180000080UL) 90 - #define LCA_IOC_TB_ENA (IDENT_ADDR + 0x1800000a0UL) 91 - #define LCA_IOC_SFT_RST (IDENT_ADDR + 0x1800000c0UL) 92 - #define LCA_IOC_PAR_DIS (IDENT_ADDR + 0x1800000e0UL) 93 - #define LCA_IOC_W_BASE0 (IDENT_ADDR + 0x180000100UL) 94 - #define LCA_IOC_W_BASE1 (IDENT_ADDR + 0x180000120UL) 95 - #define LCA_IOC_W_MASK0 (IDENT_ADDR + 0x180000140UL) 96 - #define LCA_IOC_W_MASK1 (IDENT_ADDR + 0x180000160UL) 97 - #define LCA_IOC_T_BASE0 (IDENT_ADDR + 0x180000180UL) 98 - #define LCA_IOC_T_BASE1 (IDENT_ADDR + 0x1800001a0UL) 99 - #define LCA_IOC_TB_TAG0 (IDENT_ADDR + 0x188000000UL) 100 - #define LCA_IOC_TB_TAG1 (IDENT_ADDR + 0x188000020UL) 101 - #define LCA_IOC_TB_TAG2 (IDENT_ADDR + 0x188000040UL) 102 - #define LCA_IOC_TB_TAG3 (IDENT_ADDR + 0x188000060UL) 103 - #define LCA_IOC_TB_TAG4 (IDENT_ADDR + 0x188000070UL) 104 - #define LCA_IOC_TB_TAG5 (IDENT_ADDR + 0x1880000a0UL) 105 - #define LCA_IOC_TB_TAG6 (IDENT_ADDR + 0x1880000c0UL) 106 - #define LCA_IOC_TB_TAG7 (IDENT_ADDR + 0x1880000e0UL) 107 - 108 - /* 109 - * Memory spaces: 110 - */ 111 - #define LCA_IACK_SC (IDENT_ADDR + 0x1a0000000UL) 112 - #define LCA_CONF (IDENT_ADDR + 0x1e0000000UL) 113 - #define LCA_IO (IDENT_ADDR + 0x1c0000000UL) 114 - #define LCA_SPARSE_MEM (IDENT_ADDR + 0x200000000UL) 115 - #define LCA_DENSE_MEM (IDENT_ADDR + 0x300000000UL) 116 - 117 - /* 118 - * Bit definitions for I/O Controller status register 0: 119 - */ 120 - #define LCA_IOC_STAT0_CMD 0xf 121 - #define LCA_IOC_STAT0_ERR (1<<4) 122 - #define LCA_IOC_STAT0_LOST (1<<5) 123 - #define LCA_IOC_STAT0_THIT (1<<6) 124 - #define LCA_IOC_STAT0_TREF (1<<7) 125 - #define LCA_IOC_STAT0_CODE_SHIFT 8 126 - #define LCA_IOC_STAT0_CODE_MASK 0x7 127 - #define LCA_IOC_STAT0_P_NBR_SHIFT 13 128 - #define LCA_IOC_STAT0_P_NBR_MASK 0x7ffff 129 - 130 - #define LCA_HAE_ADDRESS LCA_IOC_HAE 131 - 132 - /* LCA PMR Power Management register defines */ 133 - #define LCA_PMR_ADDR (IDENT_ADDR + 0x120000098UL) 134 - #define LCA_PMR_PDIV 0x7 /* Primary clock divisor */ 135 - #define LCA_PMR_ODIV 0x38 /* Override clock divisor */ 136 - #define LCA_PMR_INTO 0x40 /* Interrupt override */ 137 - #define LCA_PMR_DMAO 0x80 /* DMA override */ 138 - #define LCA_PMR_OCCEB 0xffff0000L /* Override cycle counter - even bits */ 139 - #define LCA_PMR_OCCOB 0xffff000000000000L /* Override cycle counter - even bits */ 140 - #define LCA_PMR_PRIMARY_MASK 0xfffffffffffffff8L 141 - 142 - /* LCA PMR Macros */ 143 - 144 - #define LCA_READ_PMR (*(volatile unsigned long *)LCA_PMR_ADDR) 145 - #define LCA_WRITE_PMR(d) (*((volatile unsigned long *)LCA_PMR_ADDR) = (d)) 146 - 147 - #define LCA_GET_PRIMARY(r) ((r) & LCA_PMR_PDIV) 148 - #define LCA_GET_OVERRIDE(r) (((r) >> 3) & LCA_PMR_PDIV) 149 - #define LCA_SET_PRIMARY_CLOCK(r, c) ((r) = (((r) & LCA_PMR_PRIMARY_MASK)|(c))) 150 - 151 - /* LCA PMR Divisor values */ 152 - #define LCA_PMR_DIV_1 0x0 153 - #define LCA_PMR_DIV_1_5 0x1 154 - #define LCA_PMR_DIV_2 0x2 155 - #define LCA_PMR_DIV_4 0x3 156 - #define LCA_PMR_DIV_8 0x4 157 - #define LCA_PMR_DIV_16 0x5 158 - #define LCA_PMR_DIV_MIN DIV_1 159 - #define LCA_PMR_DIV_MAX DIV_16 160 - 161 - 162 - /* 163 - * Data structure for handling LCA machine checks. Correctable errors 164 - * result in a short logout frame, uncorrectable ones in a long one. 165 - */ 166 - struct el_lca_mcheck_short { 167 - struct el_common h; /* common logout header */ 168 - unsigned long esr; /* error-status register */ 169 - unsigned long ear; /* error-address register */ 170 - unsigned long dc_stat; /* dcache status register */ 171 - unsigned long ioc_stat0; /* I/O controller status register 0 */ 172 - unsigned long ioc_stat1; /* I/O controller status register 1 */ 173 - }; 174 - 175 - struct el_lca_mcheck_long { 176 - struct el_common h; /* common logout header */ 177 - unsigned long pt[31]; /* PAL temps */ 178 - unsigned long exc_addr; /* exception address */ 179 - unsigned long pad1[3]; 180 - unsigned long pal_base; /* PALcode base address */ 181 - unsigned long hier; /* hw interrupt enable */ 182 - unsigned long hirr; /* hw interrupt request */ 183 - unsigned long mm_csr; /* MMU control & status */ 184 - unsigned long dc_stat; /* data cache status */ 185 - unsigned long dc_addr; /* data cache addr register */ 186 - unsigned long abox_ctl; /* address box control register */ 187 - unsigned long esr; /* error status register */ 188 - unsigned long ear; /* error address register */ 189 - unsigned long car; /* cache control register */ 190 - unsigned long ioc_stat0; /* I/O controller status register 0 */ 191 - unsigned long ioc_stat1; /* I/O controller status register 1 */ 192 - unsigned long va; /* virtual address register */ 193 - }; 194 - 195 - union el_lca { 196 - struct el_common * c; 197 - struct el_lca_mcheck_long * l; 198 - struct el_lca_mcheck_short * s; 199 - }; 200 - 201 - #ifdef __KERNEL__ 202 - 203 - #ifndef __EXTERN_INLINE 204 - #define __EXTERN_INLINE extern inline 205 - #define __IO_EXTERN_INLINE 206 - #endif 207 - 208 - /* 209 - * I/O functions: 210 - * 211 - * Unlike Jensen, the Noname machines have no concept of local 212 - * I/O---everything goes over the PCI bus. 213 - * 214 - * There is plenty room for optimization here. In particular, 215 - * the Alpha's insb/insw/extb/extw should be useful in moving 216 - * data to/from the right byte-lanes. 217 - */ 218 - 219 - #define vip volatile int __force * 220 - #define vuip volatile unsigned int __force * 221 - #define vulp volatile unsigned long __force * 222 - 223 - #define LCA_SET_HAE \ 224 - do { \ 225 - if (addr >= (1UL << 24)) { \ 226 - unsigned long msb = addr & 0xf8000000; \ 227 - addr -= msb; \ 228 - set_hae(msb); \ 229 - } \ 230 - } while (0) 231 - 232 - 233 - __EXTERN_INLINE u8 lca_ioread8(const void __iomem *xaddr) 234 - { 235 - unsigned long addr = (unsigned long) xaddr; 236 - unsigned long result, base_and_type; 237 - 238 - if (addr >= LCA_DENSE_MEM) { 239 - addr -= LCA_DENSE_MEM; 240 - LCA_SET_HAE; 241 - base_and_type = LCA_SPARSE_MEM + 0x00; 242 - } else { 243 - addr -= LCA_IO; 244 - base_and_type = LCA_IO + 0x00; 245 - } 246 - 247 - result = *(vip) ((addr << 5) + base_and_type); 248 - return __kernel_extbl(result, addr & 3); 249 - } 250 - 251 - __EXTERN_INLINE void lca_iowrite8(u8 b, void __iomem *xaddr) 252 - { 253 - unsigned long addr = (unsigned long) xaddr; 254 - unsigned long w, base_and_type; 255 - 256 - if (addr >= LCA_DENSE_MEM) { 257 - addr -= LCA_DENSE_MEM; 258 - LCA_SET_HAE; 259 - base_and_type = LCA_SPARSE_MEM + 0x00; 260 - } else { 261 - addr -= LCA_IO; 262 - base_and_type = LCA_IO + 0x00; 263 - } 264 - 265 - w = __kernel_insbl(b, addr & 3); 266 - *(vuip) ((addr << 5) + base_and_type) = w; 267 - } 268 - 269 - __EXTERN_INLINE u16 lca_ioread16(const void __iomem *xaddr) 270 - { 271 - unsigned long addr = (unsigned long) xaddr; 272 - unsigned long result, base_and_type; 273 - 274 - if (addr >= LCA_DENSE_MEM) { 275 - addr -= LCA_DENSE_MEM; 276 - LCA_SET_HAE; 277 - base_and_type = LCA_SPARSE_MEM + 0x08; 278 - } else { 279 - addr -= LCA_IO; 280 - base_and_type = LCA_IO + 0x08; 281 - } 282 - 283 - result = *(vip) ((addr << 5) + base_and_type); 284 - return __kernel_extwl(result, addr & 3); 285 - } 286 - 287 - __EXTERN_INLINE void lca_iowrite16(u16 b, void __iomem *xaddr) 288 - { 289 - unsigned long addr = (unsigned long) xaddr; 290 - unsigned long w, base_and_type; 291 - 292 - if (addr >= LCA_DENSE_MEM) { 293 - addr -= LCA_DENSE_MEM; 294 - LCA_SET_HAE; 295 - base_and_type = LCA_SPARSE_MEM + 0x08; 296 - } else { 297 - addr -= LCA_IO; 298 - base_and_type = LCA_IO + 0x08; 299 - } 300 - 301 - w = __kernel_inswl(b, addr & 3); 302 - *(vuip) ((addr << 5) + base_and_type) = w; 303 - } 304 - 305 - __EXTERN_INLINE u32 lca_ioread32(const void __iomem *xaddr) 306 - { 307 - unsigned long addr = (unsigned long) xaddr; 308 - if (addr < LCA_DENSE_MEM) 309 - addr = ((addr - LCA_IO) << 5) + LCA_IO + 0x18; 310 - return *(vuip)addr; 311 - } 312 - 313 - __EXTERN_INLINE void lca_iowrite32(u32 b, void __iomem *xaddr) 314 - { 315 - unsigned long addr = (unsigned long) xaddr; 316 - if (addr < LCA_DENSE_MEM) 317 - addr = ((addr - LCA_IO) << 5) + LCA_IO + 0x18; 318 - *(vuip)addr = b; 319 - } 320 - 321 - __EXTERN_INLINE u64 lca_ioread64(const void __iomem *xaddr) 322 - { 323 - unsigned long addr = (unsigned long) xaddr; 324 - if (addr < LCA_DENSE_MEM) 325 - addr = ((addr - LCA_IO) << 5) + LCA_IO + 0x18; 326 - return *(vulp)addr; 327 - } 328 - 329 - __EXTERN_INLINE void lca_iowrite64(u64 b, void __iomem *xaddr) 330 - { 331 - unsigned long addr = (unsigned long) xaddr; 332 - if (addr < LCA_DENSE_MEM) 333 - addr = ((addr - LCA_IO) << 5) + LCA_IO + 0x18; 334 - *(vulp)addr = b; 335 - } 336 - 337 - __EXTERN_INLINE void __iomem *lca_ioportmap(unsigned long addr) 338 - { 339 - return (void __iomem *)(addr + LCA_IO); 340 - } 341 - 342 - __EXTERN_INLINE void __iomem *lca_ioremap(unsigned long addr, 343 - unsigned long size) 344 - { 345 - return (void __iomem *)(addr + LCA_DENSE_MEM); 346 - } 347 - 348 - __EXTERN_INLINE int lca_is_ioaddr(unsigned long addr) 349 - { 350 - return addr >= IDENT_ADDR + 0x120000000UL; 351 - } 352 - 353 - __EXTERN_INLINE int lca_is_mmio(const volatile void __iomem *addr) 354 - { 355 - return (unsigned long)addr >= LCA_DENSE_MEM; 356 - } 357 - 358 - #undef vip 359 - #undef vuip 360 - #undef vulp 361 - 362 - #undef __IO_PREFIX 363 - #define __IO_PREFIX lca 364 - #define lca_trivial_rw_bw 2 365 - #define lca_trivial_rw_lq 1 366 - #define lca_trivial_io_bw 0 367 - #define lca_trivial_io_lq 0 368 - #define lca_trivial_iounmap 1 369 - #include <asm/io_trivial.h> 370 - 371 - #ifdef __IO_EXTERN_INLINE 372 - #undef __EXTERN_INLINE 373 - #undef __IO_EXTERN_INLINE 374 - #endif 375 - 376 - #endif /* __KERNEL__ */ 377 - 378 - #endif /* __ALPHA_LCA__H__ */
+1 -8
arch/alpha/include/asm/dma.h
··· 82 82 just a wiring limit. 83 83 */ 84 84 85 - /* The maximum address for ISA DMA transfer on Alpha XL, due to an 86 - hardware SIO limitation, is 64MB. 87 - */ 88 - #define ALPHA_XL_MAX_ISA_DMA_ADDRESS 0x04000000UL 89 - 90 85 /* The maximum address for ISA DMA transfer on RUFFIAN, 91 86 due to an hardware SIO limitation, is 16MB. 92 87 */ ··· 102 107 #ifdef CONFIG_ALPHA_GENERIC 103 108 # define MAX_ISA_DMA_ADDRESS (alpha_mv.max_isa_dma_address) 104 109 #else 105 - # if defined(CONFIG_ALPHA_XL) 106 - # define MAX_ISA_DMA_ADDRESS ALPHA_XL_MAX_ISA_DMA_ADDRESS 107 - # elif defined(CONFIG_ALPHA_RUFFIAN) 110 + # if defined(CONFIG_ALPHA_RUFFIAN) 108 111 # define MAX_ISA_DMA_ADDRESS ALPHA_RUFFIAN_MAX_ISA_DMA_ADDRESS 109 112 # elif defined(CONFIG_ALPHA_SABLE) 110 113 # define MAX_ISA_DMA_ADDRESS ALPHA_SABLE_MAX_ISA_DMA_ADDRESS
+1 -5
arch/alpha/include/asm/io.h
··· 203 203 204 204 #else 205 205 206 - #if defined(CONFIG_ALPHA_APECS) 207 - # include <asm/core_apecs.h> 208 - #elif defined(CONFIG_ALPHA_CIA) 206 + #if defined(CONFIG_ALPHA_CIA) 209 207 # include <asm/core_cia.h> 210 208 #elif defined(CONFIG_ALPHA_IRONGATE) 211 209 # include <asm/core_irongate.h> 212 - #elif defined(CONFIG_ALPHA_LCA) 213 - # include <asm/core_lca.h> 214 210 #elif defined(CONFIG_ALPHA_MARVEL) 215 211 # include <asm/core_marvel.h> 216 212 #elif defined(CONFIG_ALPHA_MCPCIA)
+2 -6
arch/alpha/include/asm/irq.h
··· 31 31 # define NR_IRQS (32768 + 16) /* marvel - 32 pids */ 32 32 # endif 33 33 34 - #elif defined(CONFIG_ALPHA_CABRIOLET) || \ 35 - defined(CONFIG_ALPHA_EB66P) || \ 36 - defined(CONFIG_ALPHA_EB164) || \ 34 + #elif defined(CONFIG_ALPHA_EB164) || \ 37 35 defined(CONFIG_ALPHA_PC164) || \ 38 36 defined(CONFIG_ALPHA_LX164) 39 37 # define NR_IRQS 35 40 38 41 - #elif defined(CONFIG_ALPHA_EB66) || \ 42 - defined(CONFIG_ALPHA_EB64P) || \ 43 - defined(CONFIG_ALPHA_MIKASA) 39 + #elif defined(CONFIG_ALPHA_MIKASA) 44 40 # define NR_IRQS 32 45 41 46 42 #elif defined(CONFIG_ALPHA_ALCOR) || \
+3 -16
arch/alpha/kernel/Makefile
··· 22 22 23 23 ifdef CONFIG_ALPHA_GENERIC 24 24 25 - obj-y += core_apecs.o core_cia.o core_irongate.o core_lca.o \ 25 + obj-y += core_cia.o core_irongate.o \ 26 26 core_mcpcia.o core_polaris.o core_t2.o \ 27 27 core_tsunami.o 28 28 29 - obj-y += sys_alcor.o sys_cabriolet.o sys_dp264.o sys_eb64p.o sys_eiger.o \ 29 + obj-y += sys_alcor.o sys_cabriolet.o sys_dp264.o sys_eiger.o \ 30 30 sys_miata.o sys_mikasa.o sys_nautilus.o \ 31 31 sys_noritake.o sys_rawhide.o sys_ruffian.o sys_rx164.o \ 32 - sys_sable.o sys_sio.o sys_sx164.o sys_takara.o 32 + sys_sable.o sys_sx164.o sys_takara.o 33 33 34 34 ifndef CONFIG_ALPHA_LEGACY_START_ADDRESS 35 35 obj-y += core_marvel.o core_titan.o core_wildfire.o ··· 48 48 obj-$(CONFIG_ALPHA_SRM) += srmcons.o 49 49 50 50 # Core logic support 51 - obj-$(CONFIG_ALPHA_APECS) += core_apecs.o 52 51 obj-$(CONFIG_ALPHA_CIA) += core_cia.o 53 52 obj-$(CONFIG_ALPHA_IRONGATE) += core_irongate.o 54 - obj-$(CONFIG_ALPHA_LCA) += core_lca.o 55 53 obj-$(CONFIG_ALPHA_MARVEL) += core_marvel.o gct.o 56 54 obj-$(CONFIG_ALPHA_MCPCIA) += core_mcpcia.o 57 55 obj-$(CONFIG_ALPHA_POLARIS) += core_polaris.o ··· 60 62 61 63 # Board support 62 64 obj-$(CONFIG_ALPHA_ALCOR) += sys_alcor.o irq_i8259.o irq_srm.o 63 - obj-$(CONFIG_ALPHA_CABRIOLET) += sys_cabriolet.o irq_i8259.o irq_srm.o \ 64 - pc873xx.o 65 65 obj-$(CONFIG_ALPHA_EB164) += sys_cabriolet.o irq_i8259.o irq_srm.o \ 66 - pc873xx.o 67 - obj-$(CONFIG_ALPHA_EB66P) += sys_cabriolet.o irq_i8259.o irq_srm.o \ 68 66 pc873xx.o 69 67 obj-$(CONFIG_ALPHA_LX164) += sys_cabriolet.o irq_i8259.o irq_srm.o \ 70 68 smc37c93x.o ··· 69 75 obj-$(CONFIG_ALPHA_DP264) += sys_dp264.o irq_i8259.o es1888.o smc37c669.o 70 76 obj-$(CONFIG_ALPHA_SHARK) += sys_dp264.o irq_i8259.o es1888.o smc37c669.o 71 77 obj-$(CONFIG_ALPHA_TITAN) += sys_titan.o irq_i8259.o smc37c669.o 72 - obj-$(CONFIG_ALPHA_EB64P) += sys_eb64p.o irq_i8259.o 73 - obj-$(CONFIG_ALPHA_EB66) += sys_eb64p.o irq_i8259.o 74 78 obj-$(CONFIG_ALPHA_EIGER) += sys_eiger.o irq_i8259.o 75 79 obj-$(CONFIG_ALPHA_MARVEL) += sys_marvel.o 76 80 obj-$(CONFIG_ALPHA_MIATA) += sys_miata.o irq_pyxis.o irq_i8259.o \ ··· 80 88 obj-$(CONFIG_ALPHA_RUFFIAN) += sys_ruffian.o irq_pyxis.o irq_i8259.o 81 89 obj-$(CONFIG_ALPHA_RX164) += sys_rx164.o irq_i8259.o 82 90 obj-$(CONFIG_ALPHA_SABLE) += sys_sable.o 83 - obj-$(CONFIG_ALPHA_BOOK1) += sys_sio.o irq_i8259.o irq_srm.o pc873xx.o 84 - obj-$(CONFIG_ALPHA_AVANTI) += sys_sio.o irq_i8259.o irq_srm.o pc873xx.o 85 - obj-$(CONFIG_ALPHA_NONAME) += sys_sio.o irq_i8259.o irq_srm.o pc873xx.o 86 - obj-$(CONFIG_ALPHA_P2K) += sys_sio.o irq_i8259.o irq_srm.o pc873xx.o 87 - obj-$(CONFIG_ALPHA_XL) += sys_sio.o irq_i8259.o irq_srm.o pc873xx.o 88 91 obj-$(CONFIG_ALPHA_SX164) += sys_sx164.o irq_pyxis.o irq_i8259.o \ 89 92 irq_srm.o smc37c669.o 90 93 obj-$(CONFIG_ALPHA_TAKARA) += sys_takara.o irq_i8259.o pc873xx.o
-420
arch/alpha/kernel/core_apecs.c
··· 1 - // SPDX-License-Identifier: GPL-2.0 2 - /* 3 - * linux/arch/alpha/kernel/core_apecs.c 4 - * 5 - * Rewritten for Apecs from the lca.c from: 6 - * 7 - * Written by David Mosberger (davidm@cs.arizona.edu) with some code 8 - * taken from Dave Rusling's (david.rusling@reo.mts.dec.com) 32-bit 9 - * bios code. 10 - * 11 - * Code common to all APECS core logic chips. 12 - */ 13 - 14 - #define __EXTERN_INLINE inline 15 - #include <asm/io.h> 16 - #include <asm/core_apecs.h> 17 - #undef __EXTERN_INLINE 18 - 19 - #include <linux/types.h> 20 - #include <linux/pci.h> 21 - #include <linux/init.h> 22 - 23 - #include <asm/ptrace.h> 24 - #include <asm/smp.h> 25 - #include <asm/mce.h> 26 - 27 - #include "proto.h" 28 - #include "pci_impl.h" 29 - 30 - /* 31 - * NOTE: Herein lie back-to-back mb instructions. They are magic. 32 - * One plausible explanation is that the i/o controller does not properly 33 - * handle the system transaction. Another involves timing. Ho hum. 34 - */ 35 - 36 - /* 37 - * BIOS32-style PCI interface: 38 - */ 39 - 40 - #define DEBUG_CONFIG 0 41 - 42 - #if DEBUG_CONFIG 43 - # define DBGC(args) printk args 44 - #else 45 - # define DBGC(args) 46 - #endif 47 - 48 - #define vuip volatile unsigned int * 49 - 50 - /* 51 - * Given a bus, device, and function number, compute resulting 52 - * configuration space address and setup the APECS_HAXR2 register 53 - * accordingly. It is therefore not safe to have concurrent 54 - * invocations to configuration space access routines, but there 55 - * really shouldn't be any need for this. 56 - * 57 - * Type 0: 58 - * 59 - * 3 3|3 3 2 2|2 2 2 2|2 2 2 2|1 1 1 1|1 1 1 1|1 1 60 - * 3 2|1 0 9 8|7 6 5 4|3 2 1 0|9 8 7 6|5 4 3 2|1 0 9 8|7 6 5 4|3 2 1 0 61 - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 62 - * | | | | | | | | | | | | | | | | | | | | | | | |F|F|F|R|R|R|R|R|R|0|0| 63 - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 64 - * 65 - * 31:11 Device select bit. 66 - * 10:8 Function number 67 - * 7:2 Register number 68 - * 69 - * Type 1: 70 - * 71 - * 3 3|3 3 2 2|2 2 2 2|2 2 2 2|1 1 1 1|1 1 1 1|1 1 72 - * 3 2|1 0 9 8|7 6 5 4|3 2 1 0|9 8 7 6|5 4 3 2|1 0 9 8|7 6 5 4|3 2 1 0 73 - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 74 - * | | | | | | | | | | |B|B|B|B|B|B|B|B|D|D|D|D|D|F|F|F|R|R|R|R|R|R|0|1| 75 - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 76 - * 77 - * 31:24 reserved 78 - * 23:16 bus number (8 bits = 128 possible buses) 79 - * 15:11 Device number (5 bits) 80 - * 10:8 function number 81 - * 7:2 register number 82 - * 83 - * Notes: 84 - * The function number selects which function of a multi-function device 85 - * (e.g., SCSI and Ethernet). 86 - * 87 - * The register selects a DWORD (32 bit) register offset. Hence it 88 - * doesn't get shifted by 2 bits as we want to "drop" the bottom two 89 - * bits. 90 - */ 91 - 92 - static int 93 - mk_conf_addr(struct pci_bus *pbus, unsigned int device_fn, int where, 94 - unsigned long *pci_addr, unsigned char *type1) 95 - { 96 - unsigned long addr; 97 - u8 bus = pbus->number; 98 - 99 - DBGC(("mk_conf_addr(bus=%d ,device_fn=0x%x, where=0x%x," 100 - " pci_addr=0x%p, type1=0x%p)\n", 101 - bus, device_fn, where, pci_addr, type1)); 102 - 103 - if (bus == 0) { 104 - int device = device_fn >> 3; 105 - 106 - /* type 0 configuration cycle: */ 107 - 108 - if (device > 20) { 109 - DBGC(("mk_conf_addr: device (%d) > 20, returning -1\n", 110 - device)); 111 - return -1; 112 - } 113 - 114 - *type1 = 0; 115 - addr = (device_fn << 8) | (where); 116 - } else { 117 - /* type 1 configuration cycle: */ 118 - *type1 = 1; 119 - addr = (bus << 16) | (device_fn << 8) | (where); 120 - } 121 - *pci_addr = addr; 122 - DBGC(("mk_conf_addr: returning pci_addr 0x%lx\n", addr)); 123 - return 0; 124 - } 125 - 126 - static unsigned int 127 - conf_read(unsigned long addr, unsigned char type1) 128 - { 129 - unsigned long flags; 130 - unsigned int stat0, value; 131 - unsigned int haxr2 = 0; 132 - 133 - local_irq_save(flags); /* avoid getting hit by machine check */ 134 - 135 - DBGC(("conf_read(addr=0x%lx, type1=%d)\n", addr, type1)); 136 - 137 - /* Reset status register to avoid losing errors. */ 138 - stat0 = *(vuip)APECS_IOC_DCSR; 139 - *(vuip)APECS_IOC_DCSR = stat0; 140 - mb(); 141 - DBGC(("conf_read: APECS DCSR was 0x%x\n", stat0)); 142 - 143 - /* If Type1 access, must set HAE #2. */ 144 - if (type1) { 145 - haxr2 = *(vuip)APECS_IOC_HAXR2; 146 - mb(); 147 - *(vuip)APECS_IOC_HAXR2 = haxr2 | 1; 148 - DBGC(("conf_read: TYPE1 access\n")); 149 - } 150 - 151 - draina(); 152 - mcheck_expected(0) = 1; 153 - mcheck_taken(0) = 0; 154 - mb(); 155 - 156 - /* Access configuration space. */ 157 - 158 - /* Some SRMs step on these registers during a machine check. */ 159 - asm volatile("ldl %0,%1; mb; mb" : "=r"(value) : "m"(*(vuip)addr) 160 - : "$9", "$10", "$11", "$12", "$13", "$14", "memory"); 161 - 162 - if (mcheck_taken(0)) { 163 - mcheck_taken(0) = 0; 164 - value = 0xffffffffU; 165 - mb(); 166 - } 167 - mcheck_expected(0) = 0; 168 - mb(); 169 - 170 - #if 1 171 - /* 172 - * david.rusling@reo.mts.dec.com. This code is needed for the 173 - * EB64+ as it does not generate a machine check (why I don't 174 - * know). When we build kernels for one particular platform 175 - * then we can make this conditional on the type. 176 - */ 177 - draina(); 178 - 179 - /* Now look for any errors. */ 180 - stat0 = *(vuip)APECS_IOC_DCSR; 181 - DBGC(("conf_read: APECS DCSR after read 0x%x\n", stat0)); 182 - 183 - /* Is any error bit set? */ 184 - if (stat0 & 0xffe0U) { 185 - /* If not NDEV, print status. */ 186 - if (!(stat0 & 0x0800)) { 187 - printk("apecs.c:conf_read: got stat0=%x\n", stat0); 188 - } 189 - 190 - /* Reset error status. */ 191 - *(vuip)APECS_IOC_DCSR = stat0; 192 - mb(); 193 - wrmces(0x7); /* reset machine check */ 194 - value = 0xffffffff; 195 - } 196 - #endif 197 - 198 - /* If Type1 access, must reset HAE #2 so normal IO space ops work. */ 199 - if (type1) { 200 - *(vuip)APECS_IOC_HAXR2 = haxr2 & ~1; 201 - mb(); 202 - } 203 - local_irq_restore(flags); 204 - 205 - return value; 206 - } 207 - 208 - static void 209 - conf_write(unsigned long addr, unsigned int value, unsigned char type1) 210 - { 211 - unsigned long flags; 212 - unsigned int stat0; 213 - unsigned int haxr2 = 0; 214 - 215 - local_irq_save(flags); /* avoid getting hit by machine check */ 216 - 217 - /* Reset status register to avoid losing errors. */ 218 - stat0 = *(vuip)APECS_IOC_DCSR; 219 - *(vuip)APECS_IOC_DCSR = stat0; 220 - mb(); 221 - 222 - /* If Type1 access, must set HAE #2. */ 223 - if (type1) { 224 - haxr2 = *(vuip)APECS_IOC_HAXR2; 225 - mb(); 226 - *(vuip)APECS_IOC_HAXR2 = haxr2 | 1; 227 - } 228 - 229 - draina(); 230 - mcheck_expected(0) = 1; 231 - mb(); 232 - 233 - /* Access configuration space. */ 234 - *(vuip)addr = value; 235 - mb(); 236 - mb(); /* magic */ 237 - mcheck_expected(0) = 0; 238 - mb(); 239 - 240 - #if 1 241 - /* 242 - * david.rusling@reo.mts.dec.com. This code is needed for the 243 - * EB64+ as it does not generate a machine check (why I don't 244 - * know). When we build kernels for one particular platform 245 - * then we can make this conditional on the type. 246 - */ 247 - draina(); 248 - 249 - /* Now look for any errors. */ 250 - stat0 = *(vuip)APECS_IOC_DCSR; 251 - 252 - /* Is any error bit set? */ 253 - if (stat0 & 0xffe0U) { 254 - /* If not NDEV, print status. */ 255 - if (!(stat0 & 0x0800)) { 256 - printk("apecs.c:conf_write: got stat0=%x\n", stat0); 257 - } 258 - 259 - /* Reset error status. */ 260 - *(vuip)APECS_IOC_DCSR = stat0; 261 - mb(); 262 - wrmces(0x7); /* reset machine check */ 263 - } 264 - #endif 265 - 266 - /* If Type1 access, must reset HAE #2 so normal IO space ops work. */ 267 - if (type1) { 268 - *(vuip)APECS_IOC_HAXR2 = haxr2 & ~1; 269 - mb(); 270 - } 271 - local_irq_restore(flags); 272 - } 273 - 274 - static int 275 - apecs_read_config(struct pci_bus *bus, unsigned int devfn, int where, 276 - int size, u32 *value) 277 - { 278 - unsigned long addr, pci_addr; 279 - unsigned char type1; 280 - long mask; 281 - int shift; 282 - 283 - if (mk_conf_addr(bus, devfn, where, &pci_addr, &type1)) 284 - return PCIBIOS_DEVICE_NOT_FOUND; 285 - 286 - mask = (size - 1) * 8; 287 - shift = (where & 3) * 8; 288 - addr = (pci_addr << 5) + mask + APECS_CONF; 289 - *value = conf_read(addr, type1) >> (shift); 290 - return PCIBIOS_SUCCESSFUL; 291 - } 292 - 293 - static int 294 - apecs_write_config(struct pci_bus *bus, unsigned int devfn, int where, 295 - int size, u32 value) 296 - { 297 - unsigned long addr, pci_addr; 298 - unsigned char type1; 299 - long mask; 300 - 301 - if (mk_conf_addr(bus, devfn, where, &pci_addr, &type1)) 302 - return PCIBIOS_DEVICE_NOT_FOUND; 303 - 304 - mask = (size - 1) * 8; 305 - addr = (pci_addr << 5) + mask + APECS_CONF; 306 - conf_write(addr, value << ((where & 3) * 8), type1); 307 - return PCIBIOS_SUCCESSFUL; 308 - } 309 - 310 - struct pci_ops apecs_pci_ops = 311 - { 312 - .read = apecs_read_config, 313 - .write = apecs_write_config, 314 - }; 315 - 316 - void 317 - apecs_pci_tbi(struct pci_controller *hose, dma_addr_t start, dma_addr_t end) 318 - { 319 - wmb(); 320 - *(vip)APECS_IOC_TBIA = 0; 321 - mb(); 322 - } 323 - 324 - void __init 325 - apecs_init_arch(void) 326 - { 327 - struct pci_controller *hose; 328 - 329 - /* 330 - * Create our single hose. 331 - */ 332 - 333 - pci_isa_hose = hose = alloc_pci_controller(); 334 - hose->io_space = &ioport_resource; 335 - hose->mem_space = &iomem_resource; 336 - hose->index = 0; 337 - 338 - hose->sparse_mem_base = APECS_SPARSE_MEM - IDENT_ADDR; 339 - hose->dense_mem_base = APECS_DENSE_MEM - IDENT_ADDR; 340 - hose->sparse_io_base = APECS_IO - IDENT_ADDR; 341 - hose->dense_io_base = 0; 342 - 343 - /* 344 - * Set up the PCI to main memory translation windows. 345 - * 346 - * Window 1 is direct access 1GB at 1GB 347 - * Window 2 is scatter-gather 8MB at 8MB (for isa) 348 - */ 349 - hose->sg_isa = iommu_arena_new(hose, 0x00800000, 0x00800000, 350 - SMP_CACHE_BYTES); 351 - hose->sg_pci = NULL; 352 - __direct_map_base = 0x40000000; 353 - __direct_map_size = 0x40000000; 354 - 355 - *(vuip)APECS_IOC_PB1R = __direct_map_base | 0x00080000; 356 - *(vuip)APECS_IOC_PM1R = (__direct_map_size - 1) & 0xfff00000U; 357 - *(vuip)APECS_IOC_TB1R = 0; 358 - 359 - *(vuip)APECS_IOC_PB2R = hose->sg_isa->dma_base | 0x000c0000; 360 - *(vuip)APECS_IOC_PM2R = (hose->sg_isa->size - 1) & 0xfff00000; 361 - *(vuip)APECS_IOC_TB2R = virt_to_phys(hose->sg_isa->ptes) >> 1; 362 - 363 - apecs_pci_tbi(hose, 0, -1); 364 - 365 - /* 366 - * Finally, clear the HAXR2 register, which gets used 367 - * for PCI Config Space accesses. That is the way 368 - * we want to use it, and we do not want to depend on 369 - * what ARC or SRM might have left behind... 370 - */ 371 - *(vuip)APECS_IOC_HAXR2 = 0; 372 - mb(); 373 - } 374 - 375 - void 376 - apecs_pci_clr_err(void) 377 - { 378 - unsigned int jd; 379 - 380 - jd = *(vuip)APECS_IOC_DCSR; 381 - if (jd & 0xffe0L) { 382 - *(vuip)APECS_IOC_SEAR; 383 - *(vuip)APECS_IOC_DCSR = jd | 0xffe1L; 384 - mb(); 385 - *(vuip)APECS_IOC_DCSR; 386 - } 387 - *(vuip)APECS_IOC_TBIA = (unsigned int)APECS_IOC_TBIA; 388 - mb(); 389 - *(vuip)APECS_IOC_TBIA; 390 - } 391 - 392 - void 393 - apecs_machine_check(unsigned long vector, unsigned long la_ptr) 394 - { 395 - struct el_common *mchk_header; 396 - struct el_apecs_procdata *mchk_procdata; 397 - struct el_apecs_sysdata_mcheck *mchk_sysdata; 398 - 399 - mchk_header = (struct el_common *)la_ptr; 400 - 401 - mchk_procdata = (struct el_apecs_procdata *) 402 - (la_ptr + mchk_header->proc_offset 403 - - sizeof(mchk_procdata->paltemp)); 404 - 405 - mchk_sysdata = (struct el_apecs_sysdata_mcheck *) 406 - (la_ptr + mchk_header->sys_offset); 407 - 408 - 409 - /* Clear the error before any reporting. */ 410 - mb(); 411 - mb(); /* magic */ 412 - draina(); 413 - apecs_pci_clr_err(); 414 - wrmces(0x7); /* reset machine check pending flag */ 415 - mb(); 416 - 417 - process_mcheck_info(vector, la_ptr, "APECS", 418 - (mcheck_expected(0) 419 - && (mchk_sysdata->epic_dcsr & 0x0c00UL))); 420 - }
-473
arch/alpha/kernel/core_lca.c
··· 1 - // SPDX-License-Identifier: GPL-2.0 2 - /* 3 - * linux/arch/alpha/kernel/core_lca.c 4 - * 5 - * Written by David Mosberger (davidm@cs.arizona.edu) with some code 6 - * taken from Dave Rusling's (david.rusling@reo.mts.dec.com) 32-bit 7 - * bios code. 8 - * 9 - * Code common to all LCA core logic chips. 10 - */ 11 - 12 - #define __EXTERN_INLINE inline 13 - #include <asm/io.h> 14 - #include <asm/core_lca.h> 15 - #undef __EXTERN_INLINE 16 - 17 - #include <linux/types.h> 18 - #include <linux/pci.h> 19 - #include <linux/init.h> 20 - #include <linux/tty.h> 21 - 22 - #include <asm/ptrace.h> 23 - #include <asm/irq_regs.h> 24 - #include <asm/smp.h> 25 - 26 - #include "proto.h" 27 - #include "pci_impl.h" 28 - 29 - 30 - /* 31 - * BIOS32-style PCI interface: 32 - */ 33 - 34 - /* 35 - * Machine check reasons. Defined according to PALcode sources 36 - * (osf.h and platform.h). 37 - */ 38 - #define MCHK_K_TPERR 0x0080 39 - #define MCHK_K_TCPERR 0x0082 40 - #define MCHK_K_HERR 0x0084 41 - #define MCHK_K_ECC_C 0x0086 42 - #define MCHK_K_ECC_NC 0x0088 43 - #define MCHK_K_UNKNOWN 0x008A 44 - #define MCHK_K_CACKSOFT 0x008C 45 - #define MCHK_K_BUGCHECK 0x008E 46 - #define MCHK_K_OS_BUGCHECK 0x0090 47 - #define MCHK_K_DCPERR 0x0092 48 - #define MCHK_K_ICPERR 0x0094 49 - 50 - 51 - /* 52 - * Platform-specific machine-check reasons: 53 - */ 54 - #define MCHK_K_SIO_SERR 0x204 /* all platforms so far */ 55 - #define MCHK_K_SIO_IOCHK 0x206 /* all platforms so far */ 56 - #define MCHK_K_DCSR 0x208 /* all but Noname */ 57 - 58 - 59 - /* 60 - * Given a bus, device, and function number, compute resulting 61 - * configuration space address and setup the LCA_IOC_CONF register 62 - * accordingly. It is therefore not safe to have concurrent 63 - * invocations to configuration space access routines, but there 64 - * really shouldn't be any need for this. 65 - * 66 - * Type 0: 67 - * 68 - * 3 3|3 3 2 2|2 2 2 2|2 2 2 2|1 1 1 1|1 1 1 1|1 1 69 - * 3 2|1 0 9 8|7 6 5 4|3 2 1 0|9 8 7 6|5 4 3 2|1 0 9 8|7 6 5 4|3 2 1 0 70 - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 71 - * | | | | | | | | | | | | | | | | | | | | | | | |F|F|F|R|R|R|R|R|R|0|0| 72 - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 73 - * 74 - * 31:11 Device select bit. 75 - * 10:8 Function number 76 - * 7:2 Register number 77 - * 78 - * Type 1: 79 - * 80 - * 3 3|3 3 2 2|2 2 2 2|2 2 2 2|1 1 1 1|1 1 1 1|1 1 81 - * 3 2|1 0 9 8|7 6 5 4|3 2 1 0|9 8 7 6|5 4 3 2|1 0 9 8|7 6 5 4|3 2 1 0 82 - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 83 - * | | | | | | | | | | |B|B|B|B|B|B|B|B|D|D|D|D|D|F|F|F|R|R|R|R|R|R|0|1| 84 - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 85 - * 86 - * 31:24 reserved 87 - * 23:16 bus number (8 bits = 128 possible buses) 88 - * 15:11 Device number (5 bits) 89 - * 10:8 function number 90 - * 7:2 register number 91 - * 92 - * Notes: 93 - * The function number selects which function of a multi-function device 94 - * (e.g., SCSI and Ethernet). 95 - * 96 - * The register selects a DWORD (32 bit) register offset. Hence it 97 - * doesn't get shifted by 2 bits as we want to "drop" the bottom two 98 - * bits. 99 - */ 100 - 101 - static int 102 - mk_conf_addr(struct pci_bus *pbus, unsigned int device_fn, int where, 103 - unsigned long *pci_addr) 104 - { 105 - unsigned long addr; 106 - u8 bus = pbus->number; 107 - 108 - if (bus == 0) { 109 - int device = device_fn >> 3; 110 - int func = device_fn & 0x7; 111 - 112 - /* Type 0 configuration cycle. */ 113 - 114 - if (device > 12) { 115 - return -1; 116 - } 117 - 118 - *(vulp)LCA_IOC_CONF = 0; 119 - addr = (1 << (11 + device)) | (func << 8) | where; 120 - } else { 121 - /* Type 1 configuration cycle. */ 122 - *(vulp)LCA_IOC_CONF = 1; 123 - addr = (bus << 16) | (device_fn << 8) | where; 124 - } 125 - *pci_addr = addr; 126 - return 0; 127 - } 128 - 129 - static unsigned int 130 - conf_read(unsigned long addr) 131 - { 132 - unsigned long flags, code, stat0; 133 - unsigned int value; 134 - 135 - local_irq_save(flags); 136 - 137 - /* Reset status register to avoid losing errors. */ 138 - stat0 = *(vulp)LCA_IOC_STAT0; 139 - *(vulp)LCA_IOC_STAT0 = stat0; 140 - mb(); 141 - 142 - /* Access configuration space. */ 143 - value = *(vuip)addr; 144 - draina(); 145 - 146 - stat0 = *(vulp)LCA_IOC_STAT0; 147 - if (stat0 & LCA_IOC_STAT0_ERR) { 148 - code = ((stat0 >> LCA_IOC_STAT0_CODE_SHIFT) 149 - & LCA_IOC_STAT0_CODE_MASK); 150 - if (code != 1) { 151 - printk("lca.c:conf_read: got stat0=%lx\n", stat0); 152 - } 153 - 154 - /* Reset error status. */ 155 - *(vulp)LCA_IOC_STAT0 = stat0; 156 - mb(); 157 - 158 - /* Reset machine check. */ 159 - wrmces(0x7); 160 - 161 - value = 0xffffffff; 162 - } 163 - local_irq_restore(flags); 164 - return value; 165 - } 166 - 167 - static void 168 - conf_write(unsigned long addr, unsigned int value) 169 - { 170 - unsigned long flags, code, stat0; 171 - 172 - local_irq_save(flags); /* avoid getting hit by machine check */ 173 - 174 - /* Reset status register to avoid losing errors. */ 175 - stat0 = *(vulp)LCA_IOC_STAT0; 176 - *(vulp)LCA_IOC_STAT0 = stat0; 177 - mb(); 178 - 179 - /* Access configuration space. */ 180 - *(vuip)addr = value; 181 - draina(); 182 - 183 - stat0 = *(vulp)LCA_IOC_STAT0; 184 - if (stat0 & LCA_IOC_STAT0_ERR) { 185 - code = ((stat0 >> LCA_IOC_STAT0_CODE_SHIFT) 186 - & LCA_IOC_STAT0_CODE_MASK); 187 - if (code != 1) { 188 - printk("lca.c:conf_write: got stat0=%lx\n", stat0); 189 - } 190 - 191 - /* Reset error status. */ 192 - *(vulp)LCA_IOC_STAT0 = stat0; 193 - mb(); 194 - 195 - /* Reset machine check. */ 196 - wrmces(0x7); 197 - } 198 - local_irq_restore(flags); 199 - } 200 - 201 - static int 202 - lca_read_config(struct pci_bus *bus, unsigned int devfn, int where, 203 - int size, u32 *value) 204 - { 205 - unsigned long addr, pci_addr; 206 - long mask; 207 - int shift; 208 - 209 - if (mk_conf_addr(bus, devfn, where, &pci_addr)) 210 - return PCIBIOS_DEVICE_NOT_FOUND; 211 - 212 - shift = (where & 3) * 8; 213 - mask = (size - 1) * 8; 214 - addr = (pci_addr << 5) + mask + LCA_CONF; 215 - *value = conf_read(addr) >> (shift); 216 - return PCIBIOS_SUCCESSFUL; 217 - } 218 - 219 - static int 220 - lca_write_config(struct pci_bus *bus, unsigned int devfn, int where, int size, 221 - u32 value) 222 - { 223 - unsigned long addr, pci_addr; 224 - long mask; 225 - 226 - if (mk_conf_addr(bus, devfn, where, &pci_addr)) 227 - return PCIBIOS_DEVICE_NOT_FOUND; 228 - 229 - mask = (size - 1) * 8; 230 - addr = (pci_addr << 5) + mask + LCA_CONF; 231 - conf_write(addr, value << ((where & 3) * 8)); 232 - return PCIBIOS_SUCCESSFUL; 233 - } 234 - 235 - struct pci_ops lca_pci_ops = 236 - { 237 - .read = lca_read_config, 238 - .write = lca_write_config, 239 - }; 240 - 241 - void 242 - lca_pci_tbi(struct pci_controller *hose, dma_addr_t start, dma_addr_t end) 243 - { 244 - wmb(); 245 - *(vulp)LCA_IOC_TBIA = 0; 246 - mb(); 247 - } 248 - 249 - void __init 250 - lca_init_arch(void) 251 - { 252 - struct pci_controller *hose; 253 - 254 - /* 255 - * Create our single hose. 256 - */ 257 - 258 - pci_isa_hose = hose = alloc_pci_controller(); 259 - hose->io_space = &ioport_resource; 260 - hose->mem_space = &iomem_resource; 261 - hose->index = 0; 262 - 263 - hose->sparse_mem_base = LCA_SPARSE_MEM - IDENT_ADDR; 264 - hose->dense_mem_base = LCA_DENSE_MEM - IDENT_ADDR; 265 - hose->sparse_io_base = LCA_IO - IDENT_ADDR; 266 - hose->dense_io_base = 0; 267 - 268 - /* 269 - * Set up the PCI to main memory translation windows. 270 - * 271 - * Mimic the SRM settings for the direct-map window. 272 - * Window 0 is scatter-gather 8MB at 8MB (for isa). 273 - * Window 1 is direct access 1GB at 1GB. 274 - * 275 - * Note that we do not try to save any of the DMA window CSRs 276 - * before setting them, since we cannot read those CSRs on LCA. 277 - */ 278 - hose->sg_isa = iommu_arena_new(hose, 0x00800000, 0x00800000, 279 - SMP_CACHE_BYTES); 280 - hose->sg_pci = NULL; 281 - __direct_map_base = 0x40000000; 282 - __direct_map_size = 0x40000000; 283 - 284 - *(vulp)LCA_IOC_W_BASE0 = hose->sg_isa->dma_base | (3UL << 32); 285 - *(vulp)LCA_IOC_W_MASK0 = (hose->sg_isa->size - 1) & 0xfff00000; 286 - *(vulp)LCA_IOC_T_BASE0 = virt_to_phys(hose->sg_isa->ptes); 287 - 288 - *(vulp)LCA_IOC_W_BASE1 = __direct_map_base | (2UL << 32); 289 - *(vulp)LCA_IOC_W_MASK1 = (__direct_map_size - 1) & 0xfff00000; 290 - *(vulp)LCA_IOC_T_BASE1 = 0; 291 - 292 - *(vulp)LCA_IOC_TB_ENA = 0x80; 293 - 294 - lca_pci_tbi(hose, 0, -1); 295 - 296 - /* 297 - * Disable PCI parity for now. The NCR53c810 chip has 298 - * troubles meeting the PCI spec which results in 299 - * data parity errors. 300 - */ 301 - *(vulp)LCA_IOC_PAR_DIS = 1UL<<5; 302 - 303 - /* 304 - * Finally, set up for restoring the correct HAE if using SRM. 305 - * Again, since we cannot read many of the CSRs on the LCA, 306 - * one of which happens to be the HAE, we save the value that 307 - * the SRM will expect... 308 - */ 309 - if (alpha_using_srm) 310 - srm_hae = 0x80000000UL; 311 - } 312 - 313 - /* 314 - * Constants used during machine-check handling. I suppose these 315 - * could be moved into lca.h but I don't see much reason why anybody 316 - * else would want to use them. 317 - */ 318 - 319 - #define ESR_EAV (1UL<< 0) /* error address valid */ 320 - #define ESR_CEE (1UL<< 1) /* correctable error */ 321 - #define ESR_UEE (1UL<< 2) /* uncorrectable error */ 322 - #define ESR_WRE (1UL<< 3) /* write-error */ 323 - #define ESR_SOR (1UL<< 4) /* error source */ 324 - #define ESR_CTE (1UL<< 7) /* cache-tag error */ 325 - #define ESR_MSE (1UL<< 9) /* multiple soft errors */ 326 - #define ESR_MHE (1UL<<10) /* multiple hard errors */ 327 - #define ESR_NXM (1UL<<12) /* non-existent memory */ 328 - 329 - #define IOC_ERR ( 1<<4) /* ioc logs an error */ 330 - #define IOC_CMD_SHIFT 0 331 - #define IOC_CMD (0xf<<IOC_CMD_SHIFT) 332 - #define IOC_CODE_SHIFT 8 333 - #define IOC_CODE (0xf<<IOC_CODE_SHIFT) 334 - #define IOC_LOST ( 1<<5) 335 - #define IOC_P_NBR ((__u32) ~((1<<13) - 1)) 336 - 337 - static void 338 - mem_error(unsigned long esr, unsigned long ear) 339 - { 340 - printk(" %s %s error to %s occurred at address %x\n", 341 - ((esr & ESR_CEE) ? "Correctable" : 342 - (esr & ESR_UEE) ? "Uncorrectable" : "A"), 343 - (esr & ESR_WRE) ? "write" : "read", 344 - (esr & ESR_SOR) ? "memory" : "b-cache", 345 - (unsigned) (ear & 0x1ffffff8)); 346 - if (esr & ESR_CTE) { 347 - printk(" A b-cache tag parity error was detected.\n"); 348 - } 349 - if (esr & ESR_MSE) { 350 - printk(" Several other correctable errors occurred.\n"); 351 - } 352 - if (esr & ESR_MHE) { 353 - printk(" Several other uncorrectable errors occurred.\n"); 354 - } 355 - if (esr & ESR_NXM) { 356 - printk(" Attempted to access non-existent memory.\n"); 357 - } 358 - } 359 - 360 - static void 361 - ioc_error(__u32 stat0, __u32 stat1) 362 - { 363 - static const char * const pci_cmd[] = { 364 - "Interrupt Acknowledge", "Special", "I/O Read", "I/O Write", 365 - "Rsvd 1", "Rsvd 2", "Memory Read", "Memory Write", "Rsvd3", 366 - "Rsvd4", "Configuration Read", "Configuration Write", 367 - "Memory Read Multiple", "Dual Address", "Memory Read Line", 368 - "Memory Write and Invalidate" 369 - }; 370 - static const char * const err_name[] = { 371 - "exceeded retry limit", "no device", "bad data parity", 372 - "target abort", "bad address parity", "page table read error", 373 - "invalid page", "data error" 374 - }; 375 - unsigned code = (stat0 & IOC_CODE) >> IOC_CODE_SHIFT; 376 - unsigned cmd = (stat0 & IOC_CMD) >> IOC_CMD_SHIFT; 377 - 378 - printk(" %s initiated PCI %s cycle to address %x" 379 - " failed due to %s.\n", 380 - code > 3 ? "PCI" : "CPU", pci_cmd[cmd], stat1, err_name[code]); 381 - 382 - if (code == 5 || code == 6) { 383 - printk(" (Error occurred at PCI memory address %x.)\n", 384 - (stat0 & ~IOC_P_NBR)); 385 - } 386 - if (stat0 & IOC_LOST) { 387 - printk(" Other PCI errors occurred simultaneously.\n"); 388 - } 389 - } 390 - 391 - void 392 - lca_machine_check(unsigned long vector, unsigned long la_ptr) 393 - { 394 - const char * reason; 395 - union el_lca el; 396 - 397 - el.c = (struct el_common *) la_ptr; 398 - 399 - wrmces(rdmces()); /* reset machine check pending flag */ 400 - 401 - printk(KERN_CRIT "LCA machine check: vector=%#lx pc=%#lx code=%#x\n", 402 - vector, get_irq_regs()->pc, (unsigned int) el.c->code); 403 - 404 - /* 405 - * The first quadword after the common header always seems to 406 - * be the machine check reason---don't know why this isn't 407 - * part of the common header instead. In the case of a long 408 - * logout frame, the upper 32 bits is the machine check 409 - * revision level, which we ignore for now. 410 - */ 411 - switch ((unsigned int) el.c->code) { 412 - case MCHK_K_TPERR: reason = "tag parity error"; break; 413 - case MCHK_K_TCPERR: reason = "tag control parity error"; break; 414 - case MCHK_K_HERR: reason = "access to non-existent memory"; break; 415 - case MCHK_K_ECC_C: reason = "correctable ECC error"; break; 416 - case MCHK_K_ECC_NC: reason = "non-correctable ECC error"; break; 417 - case MCHK_K_CACKSOFT: reason = "MCHK_K_CACKSOFT"; break; 418 - case MCHK_K_BUGCHECK: reason = "illegal exception in PAL mode"; break; 419 - case MCHK_K_OS_BUGCHECK: reason = "callsys in kernel mode"; break; 420 - case MCHK_K_DCPERR: reason = "d-cache parity error"; break; 421 - case MCHK_K_ICPERR: reason = "i-cache parity error"; break; 422 - case MCHK_K_SIO_SERR: reason = "SIO SERR occurred on PCI bus"; break; 423 - case MCHK_K_SIO_IOCHK: reason = "SIO IOCHK occurred on ISA bus"; break; 424 - case MCHK_K_DCSR: reason = "MCHK_K_DCSR"; break; 425 - case MCHK_K_UNKNOWN: 426 - default: reason = "unknown"; break; 427 - } 428 - 429 - switch (el.c->size) { 430 - case sizeof(struct el_lca_mcheck_short): 431 - printk(KERN_CRIT 432 - " Reason: %s (short frame%s, dc_stat=%#lx):\n", 433 - reason, el.c->retry ? ", retryable" : "", 434 - el.s->dc_stat); 435 - if (el.s->esr & ESR_EAV) { 436 - mem_error(el.s->esr, el.s->ear); 437 - } 438 - if (el.s->ioc_stat0 & IOC_ERR) { 439 - ioc_error(el.s->ioc_stat0, el.s->ioc_stat1); 440 - } 441 - break; 442 - 443 - case sizeof(struct el_lca_mcheck_long): 444 - printk(KERN_CRIT " Reason: %s (long frame%s):\n", 445 - reason, el.c->retry ? ", retryable" : ""); 446 - printk(KERN_CRIT 447 - " reason: %#lx exc_addr: %#lx dc_stat: %#lx\n", 448 - el.l->pt[0], el.l->exc_addr, el.l->dc_stat); 449 - printk(KERN_CRIT " car: %#lx\n", el.l->car); 450 - if (el.l->esr & ESR_EAV) { 451 - mem_error(el.l->esr, el.l->ear); 452 - } 453 - if (el.l->ioc_stat0 & IOC_ERR) { 454 - ioc_error(el.l->ioc_stat0, el.l->ioc_stat1); 455 - } 456 - break; 457 - 458 - default: 459 - printk(KERN_CRIT " Unknown errorlog size %d\n", el.c->size); 460 - } 461 - 462 - /* Dump the logout area to give all info. */ 463 - #ifdef CONFIG_VERBOSE_MCHECK 464 - if (alpha_verbose_mcheck > 1) { 465 - unsigned long * ptr = (unsigned long *) la_ptr; 466 - long i; 467 - for (i = 0; i < el.c->size / sizeof(long); i += 2) { 468 - printk(KERN_CRIT " +%8lx %016lx %016lx\n", 469 - i*sizeof(long), ptr[i], ptr[i+1]); 470 - } 471 - } 472 - #endif /* CONFIG_VERBOSE_MCHECK */ 473 - }
-4
arch/alpha/kernel/irq_i8259.c
··· 98 98 99 99 #if defined(CONFIG_ALPHA_GENERIC) 100 100 # define IACK_SC alpha_mv.iack_sc 101 - #elif defined(CONFIG_ALPHA_APECS) 102 - # define IACK_SC APECS_IACK_SC 103 - #elif defined(CONFIG_ALPHA_LCA) 104 - # define IACK_SC LCA_IACK_SC 105 101 #elif defined(CONFIG_ALPHA_CIA) 106 102 # define IACK_SC CIA_IACK_SC 107 103 #elif defined(CONFIG_ALPHA_PYXIS)
+1 -3
arch/alpha/kernel/pci_impl.h
··· 143 143 unsigned int align_entry; 144 144 }; 145 145 146 - #if defined(CONFIG_ALPHA_SRM) && \ 147 - (defined(CONFIG_ALPHA_CIA) || defined(CONFIG_ALPHA_LCA) || \ 148 - defined(CONFIG_ALPHA_AVANTI)) 146 + #if defined(CONFIG_ALPHA_SRM) && defined(CONFIG_ALPHA_CIA) 149 147 # define NEED_SRM_SAVE_RESTORE 150 148 #else 151 149 # undef NEED_SRM_SAVE_RESTORE
-13
arch/alpha/kernel/proto.h
··· 17 17 struct pci_controller; 18 18 struct pci_bus; 19 19 20 - /* core_apecs.c */ 21 - extern struct pci_ops apecs_pci_ops; 22 - extern void apecs_init_arch(void); 23 - extern void apecs_pci_clr_err(void); 24 - extern void apecs_machine_check(unsigned long vector, unsigned long la_ptr); 25 - extern void apecs_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t); 26 - 27 20 /* core_cia.c */ 28 21 extern struct pci_ops cia_pci_ops; 29 22 extern void cia_init_pci(void); ··· 31 38 extern int irongate_pci_clr_err(void); 32 39 extern void irongate_init_arch(void); 33 40 #define irongate_pci_tbi ((void *)0) 34 - 35 - /* core_lca.c */ 36 - extern struct pci_ops lca_pci_ops; 37 - extern void lca_init_arch(void); 38 - extern void lca_machine_check(unsigned long vector, unsigned long la_ptr); 39 - extern void lca_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t); 40 41 41 42 /* core_marvel.c */ 42 43 extern struct pci_ops marvel_pci_ops;
+8 -71
arch/alpha/kernel/setup.c
··· 171 171 asm(".weak "#X) 172 172 173 173 WEAK(alcor_mv); 174 - WEAK(alphabook1_mv); 175 - WEAK(avanti_mv); 176 - WEAK(cabriolet_mv); 177 174 WEAK(clipper_mv); 178 175 WEAK(dp264_mv); 179 176 WEAK(eb164_mv); 180 - WEAK(eb64p_mv); 181 - WEAK(eb66_mv); 182 - WEAK(eb66p_mv); 183 177 WEAK(eiger_mv); 184 178 WEAK(lx164_mv); 185 179 WEAK(marvel_ev7_mv); 186 180 WEAK(miata_mv); 187 - WEAK(mikasa_mv); 188 181 WEAK(mikasa_primo_mv); 189 182 WEAK(monet_mv); 190 183 WEAK(nautilus_mv); 191 - WEAK(noname_mv); 192 - WEAK(noritake_mv); 193 184 WEAK(noritake_primo_mv); 194 - WEAK(p2k_mv); 195 185 WEAK(pc164_mv); 196 186 WEAK(privateer_mv); 197 187 WEAK(rawhide_mv); ··· 194 204 WEAK(titan_mv); 195 205 WEAK(webbrick_mv); 196 206 WEAK(wildfire_mv); 197 - WEAK(xl_mv); 198 207 WEAK(xlt_mv); 199 208 200 209 #undef WEAK ··· 681 692 static char alcor_names[][16] = {"Alcor", "Maverick", "Bret"}; 682 693 static int alcor_indices[] = {0,0,0,1,1,1,0,0,0,0,0,0,2,2,2,2,2,2}; 683 694 684 - static char eb64p_names[][16] = {"EB64+", "Cabriolet", "AlphaPCI64"}; 685 - static int eb64p_indices[] = {0,0,1,2}; 686 - 687 - static char eb66_names[][8] = {"EB66", "EB66+"}; 688 - static int eb66_indices[] = {0,0,1}; 689 - 690 695 static char marvel_names[][16] = { 691 696 "Marvel/EV7" 692 697 }; ··· 719 736 NULL, /* Morgan */ 720 737 NULL, /* Sable -- see below. */ 721 738 NULL, /* Medulla */ 722 - &noname_mv, 739 + NULL, /* Noname */ 723 740 NULL, /* Turbolaser */ 724 - &avanti_mv, 741 + NULL, /* Avanti */ 725 742 NULL, /* Mustang */ 726 743 NULL, /* Alcor, Bret, Maverick. HWRPB inaccurate? */ 727 744 NULL, /* Tradewind */ 728 745 NULL, /* Mikasa -- see below. */ 729 746 NULL, /* EB64 */ 730 - NULL, /* EB66 -- see variation. */ 731 - NULL, /* EB64+ -- see variation. */ 732 - &alphabook1_mv, 747 + NULL, /* EB66 */ 748 + NULL, /* EB64+ */ 749 + NULL, /* Alphabook1 */ 733 750 &rawhide_mv, 734 751 NULL, /* K2 */ 735 752 NULL, /* Lynx */ 736 - &xl_mv, 753 + NULL, /* XL */ 737 754 NULL, /* EB164 -- see variation. */ 738 755 NULL, /* Noritake -- see below. */ 739 756 NULL, /* Cortex */ ··· 770 787 static struct alpha_machine_vector *eb164_vecs[] __initdata = 771 788 { 772 789 &eb164_mv, &pc164_mv, &lx164_mv, &sx164_mv, &rx164_mv 773 - }; 774 - 775 - static struct alpha_machine_vector *eb64p_vecs[] __initdata = 776 - { 777 - &eb64p_mv, 778 - &cabriolet_mv, 779 - &cabriolet_mv /* AlphaPCI64 */ 780 - }; 781 - 782 - static struct alpha_machine_vector *eb66_vecs[] __initdata = 783 - { 784 - &eb66_mv, 785 - &eb66p_mv 786 790 }; 787 791 788 792 static struct alpha_machine_vector *marvel_vecs[] __initdata = ··· 839 869 if (vec == &eb164_mv && cpu == EV56_CPU) 840 870 vec = &pc164_mv; 841 871 break; 842 - case ST_DEC_EB64P: 843 - if (member < ARRAY_SIZE(eb64p_indices)) 844 - vec = eb64p_vecs[eb64p_indices[member]]; 845 - break; 846 - case ST_DEC_EB66: 847 - if (member < ARRAY_SIZE(eb66_indices)) 848 - vec = eb66_vecs[eb66_indices[member]]; 849 - break; 850 872 case ST_DEC_MARVEL: 851 873 if (member < ARRAY_SIZE(marvel_indices)) 852 874 vec = marvel_vecs[marvel_indices[member]]; ··· 853 891 vec = tsunami_vecs[tsunami_indices[member]]; 854 892 break; 855 893 case ST_DEC_1000: 856 - if (cpu == EV5_CPU || cpu == EV56_CPU) 857 - vec = &mikasa_primo_mv; 858 - else 859 - vec = &mikasa_mv; 894 + vec = &mikasa_primo_mv; 860 895 break; 861 896 case ST_DEC_NORITAKE: 862 - if (cpu == EV5_CPU || cpu == EV56_CPU) 863 - vec = &noritake_primo_mv; 864 - else 865 - vec = &noritake_mv; 897 + vec = &noritake_primo_mv; 866 898 break; 867 899 case ST_DEC_2100_A500: 868 900 vec = &sable_gamma_mv; ··· 872 916 static struct alpha_machine_vector *all_vecs[] __initdata = 873 917 { 874 918 &alcor_mv, 875 - &alphabook1_mv, 876 - &avanti_mv, 877 - &cabriolet_mv, 878 919 &clipper_mv, 879 920 &dp264_mv, 880 921 &eb164_mv, 881 - &eb64p_mv, 882 - &eb66_mv, 883 - &eb66p_mv, 884 922 &eiger_mv, 885 923 &lx164_mv, 886 924 &miata_mv, 887 - &mikasa_mv, 888 925 &mikasa_primo_mv, 889 926 &monet_mv, 890 927 &nautilus_mv, 891 - &noname_mv, 892 - &noritake_mv, 893 928 &noritake_primo_mv, 894 - &p2k_mv, 895 929 &pc164_mv, 896 930 &privateer_mv, 897 931 &rawhide_mv, ··· 893 947 &takara_mv, 894 948 &webbrick_mv, 895 949 &wildfire_mv, 896 - &xl_mv, 897 950 &xlt_mv 898 951 }; 899 952 ··· 953 1008 case ST_DEC_ALCOR: 954 1009 if (member < ARRAY_SIZE(alcor_indices)) 955 1010 *variation_name = alcor_names[alcor_indices[member]]; 956 - break; 957 - case ST_DEC_EB64P: 958 - if (member < ARRAY_SIZE(eb64p_indices)) 959 - *variation_name = eb64p_names[eb64p_indices[member]]; 960 - break; 961 - case ST_DEC_EB66: 962 - if (member < ARRAY_SIZE(eb66_indices)) 963 - *variation_name = eb66_names[eb66_indices[member]]; 964 1011 break; 965 1012 case ST_DEC_MARVEL: 966 1013 if (member < ARRAY_SIZE(marvel_indices))
-59
arch/alpha/kernel/sys_cabriolet.c
··· 23 23 #include <asm/irq.h> 24 24 #include <asm/mmu_context.h> 25 25 #include <asm/io.h> 26 - #include <asm/core_apecs.h> 27 26 #include <asm/core_cia.h> 28 - #include <asm/core_lca.h> 29 27 #include <asm/tlbflush.h> 30 28 31 29 #include "proto.h" ··· 231 233 } 232 234 233 235 static inline void __init 234 - cabriolet_init_pci(void) 235 - { 236 - common_init_pci(); 237 - cabriolet_enable_ide(); 238 - } 239 - 240 - static inline void __init 241 236 cia_cab_init_pci(void) 242 237 { 243 238 cia_init_pci(); ··· 308 317 * The System Vector 309 318 */ 310 319 311 - #if defined(CONFIG_ALPHA_GENERIC) || defined(CONFIG_ALPHA_CABRIOLET) 312 - struct alpha_machine_vector cabriolet_mv __initmv = { 313 - .vector_name = "Cabriolet", 314 - DO_EV4_MMU, 315 - DO_DEFAULT_RTC, 316 - DO_APECS_IO, 317 - .machine_check = apecs_machine_check, 318 - .max_isa_dma_address = ALPHA_MAX_ISA_DMA_ADDRESS, 319 - .min_io_address = DEFAULT_IO_BASE, 320 - .min_mem_address = APECS_AND_LCA_DEFAULT_MEM_BASE, 321 - 322 - .nr_irqs = 35, 323 - .device_interrupt = cabriolet_device_interrupt, 324 - 325 - .init_arch = apecs_init_arch, 326 - .init_irq = cabriolet_init_irq, 327 - .init_rtc = common_init_rtc, 328 - .init_pci = cabriolet_init_pci, 329 - .pci_map_irq = cabriolet_map_irq, 330 - .pci_swizzle = common_swizzle, 331 - }; 332 - #ifndef CONFIG_ALPHA_EB64P 333 - ALIAS_MV(cabriolet) 334 - #endif 335 - #endif 336 - 337 320 #if defined(CONFIG_ALPHA_GENERIC) || defined(CONFIG_ALPHA_EB164) 338 321 struct alpha_machine_vector eb164_mv __initmv = { 339 322 .vector_name = "EB164", ··· 331 366 .pci_swizzle = common_swizzle, 332 367 }; 333 368 ALIAS_MV(eb164) 334 - #endif 335 - 336 - #if defined(CONFIG_ALPHA_GENERIC) || defined(CONFIG_ALPHA_EB66P) 337 - struct alpha_machine_vector eb66p_mv __initmv = { 338 - .vector_name = "EB66+", 339 - DO_EV4_MMU, 340 - DO_DEFAULT_RTC, 341 - DO_LCA_IO, 342 - .machine_check = lca_machine_check, 343 - .max_isa_dma_address = ALPHA_MAX_ISA_DMA_ADDRESS, 344 - .min_io_address = DEFAULT_IO_BASE, 345 - .min_mem_address = APECS_AND_LCA_DEFAULT_MEM_BASE, 346 - 347 - .nr_irqs = 35, 348 - .device_interrupt = cabriolet_device_interrupt, 349 - 350 - .init_arch = lca_init_arch, 351 - .init_irq = cabriolet_init_irq, 352 - .init_rtc = common_init_rtc, 353 - .init_pci = cabriolet_init_pci, 354 - .pci_map_irq = eb66p_map_irq, 355 - .pci_swizzle = common_swizzle, 356 - }; 357 - ALIAS_MV(eb66p) 358 369 #endif 359 370 360 371 #if defined(CONFIG_ALPHA_GENERIC) || defined(CONFIG_ALPHA_LX164)
-238
arch/alpha/kernel/sys_eb64p.c
··· 1 - // SPDX-License-Identifier: GPL-2.0 2 - /* 3 - * linux/arch/alpha/kernel/sys_eb64p.c 4 - * 5 - * Copyright (C) 1995 David A Rusling 6 - * Copyright (C) 1996 Jay A Estabrook 7 - * Copyright (C) 1998, 1999 Richard Henderson 8 - * 9 - * Code supporting the EB64+ and EB66. 10 - */ 11 - 12 - #include <linux/kernel.h> 13 - #include <linux/types.h> 14 - #include <linux/mm.h> 15 - #include <linux/sched.h> 16 - #include <linux/pci.h> 17 - #include <linux/init.h> 18 - #include <linux/bitops.h> 19 - 20 - #include <asm/ptrace.h> 21 - #include <asm/dma.h> 22 - #include <asm/irq.h> 23 - #include <asm/mmu_context.h> 24 - #include <asm/io.h> 25 - #include <asm/core_apecs.h> 26 - #include <asm/core_lca.h> 27 - #include <asm/hwrpb.h> 28 - #include <asm/tlbflush.h> 29 - 30 - #include "proto.h" 31 - #include "irq_impl.h" 32 - #include "pci_impl.h" 33 - #include "machvec_impl.h" 34 - 35 - 36 - /* Note mask bit is true for DISABLED irqs. */ 37 - static unsigned int cached_irq_mask = -1; 38 - 39 - static inline void 40 - eb64p_update_irq_hw(unsigned int irq, unsigned long mask) 41 - { 42 - outb(mask >> (irq >= 24 ? 24 : 16), (irq >= 24 ? 0x27 : 0x26)); 43 - } 44 - 45 - static inline void 46 - eb64p_enable_irq(struct irq_data *d) 47 - { 48 - eb64p_update_irq_hw(d->irq, cached_irq_mask &= ~(1 << d->irq)); 49 - } 50 - 51 - static void 52 - eb64p_disable_irq(struct irq_data *d) 53 - { 54 - eb64p_update_irq_hw(d->irq, cached_irq_mask |= 1 << d->irq); 55 - } 56 - 57 - static struct irq_chip eb64p_irq_type = { 58 - .name = "EB64P", 59 - .irq_unmask = eb64p_enable_irq, 60 - .irq_mask = eb64p_disable_irq, 61 - .irq_mask_ack = eb64p_disable_irq, 62 - }; 63 - 64 - static void 65 - eb64p_device_interrupt(unsigned long vector) 66 - { 67 - unsigned long pld; 68 - unsigned int i; 69 - 70 - /* Read the interrupt summary registers */ 71 - pld = inb(0x26) | (inb(0x27) << 8); 72 - 73 - /* 74 - * Now, for every possible bit set, work through 75 - * them and call the appropriate interrupt handler. 76 - */ 77 - while (pld) { 78 - i = ffz(~pld); 79 - pld &= pld - 1; /* clear least bit set */ 80 - 81 - if (i == 5) { 82 - isa_device_interrupt(vector); 83 - } else { 84 - handle_irq(16 + i); 85 - } 86 - } 87 - } 88 - 89 - static void __init 90 - eb64p_init_irq(void) 91 - { 92 - long i; 93 - 94 - #if defined(CONFIG_ALPHA_GENERIC) || defined(CONFIG_ALPHA_CABRIOLET) 95 - /* 96 - * CABRIO SRM may not set variation correctly, so here we test 97 - * the high word of the interrupt summary register for the RAZ 98 - * bits, and hope that a true EB64+ would read all ones... 99 - */ 100 - if (inw(0x806) != 0xffff) { 101 - extern struct alpha_machine_vector cabriolet_mv; 102 - 103 - printk("Detected Cabriolet: correcting HWRPB.\n"); 104 - 105 - hwrpb->sys_variation |= 2L << 10; 106 - hwrpb_update_checksum(hwrpb); 107 - 108 - alpha_mv = cabriolet_mv; 109 - alpha_mv.init_irq(); 110 - return; 111 - } 112 - #endif /* GENERIC */ 113 - 114 - outb(0xff, 0x26); 115 - outb(0xff, 0x27); 116 - 117 - init_i8259a_irqs(); 118 - 119 - for (i = 16; i < 32; ++i) { 120 - irq_set_chip_and_handler(i, &eb64p_irq_type, handle_level_irq); 121 - irq_set_status_flags(i, IRQ_LEVEL); 122 - } 123 - 124 - common_init_isa_dma(); 125 - if (request_irq(16 + 5, no_action, 0, "isa-cascade", NULL)) 126 - pr_err("Failed to register isa-cascade interrupt\n"); 127 - } 128 - 129 - /* 130 - * PCI Fixup configuration. 131 - * 132 - * There are two 8 bit external summary registers as follows: 133 - * 134 - * Summary @ 0x26: 135 - * Bit Meaning 136 - * 0 Interrupt Line A from slot 0 137 - * 1 Interrupt Line A from slot 1 138 - * 2 Interrupt Line B from slot 0 139 - * 3 Interrupt Line B from slot 1 140 - * 4 Interrupt Line C from slot 0 141 - * 5 Interrupt line from the two ISA PICs 142 - * 6 Tulip 143 - * 7 NCR SCSI 144 - * 145 - * Summary @ 0x27 146 - * Bit Meaning 147 - * 0 Interrupt Line C from slot 1 148 - * 1 Interrupt Line D from slot 0 149 - * 2 Interrupt Line D from slot 1 150 - * 3 RAZ 151 - * 4 RAZ 152 - * 5 RAZ 153 - * 6 RAZ 154 - * 7 RAZ 155 - * 156 - * The device to slot mapping looks like: 157 - * 158 - * Slot Device 159 - * 5 NCR SCSI controller 160 - * 6 PCI on board slot 0 161 - * 7 PCI on board slot 1 162 - * 8 Intel SIO PCI-ISA bridge chip 163 - * 9 Tulip - DECchip 21040 Ethernet controller 164 - * 165 - * 166 - * This two layered interrupt approach means that we allocate IRQ 16 and 167 - * above for PCI interrupts. The IRQ relates to which bit the interrupt 168 - * comes in on. This makes interrupt processing much easier. 169 - */ 170 - 171 - static int 172 - eb64p_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) 173 - { 174 - static char irq_tab[5][5] = { 175 - /*INT INTA INTB INTC INTD */ 176 - {16+7, 16+7, 16+7, 16+7, 16+7}, /* IdSel 5, slot ?, ?? */ 177 - {16+0, 16+0, 16+2, 16+4, 16+9}, /* IdSel 6, slot ?, ?? */ 178 - {16+1, 16+1, 16+3, 16+8, 16+10}, /* IdSel 7, slot ?, ?? */ 179 - { -1, -1, -1, -1, -1}, /* IdSel 8, SIO */ 180 - {16+6, 16+6, 16+6, 16+6, 16+6}, /* IdSel 9, TULIP */ 181 - }; 182 - const long min_idsel = 5, max_idsel = 9, irqs_per_slot = 5; 183 - return COMMON_TABLE_LOOKUP; 184 - } 185 - 186 - 187 - /* 188 - * The System Vector 189 - */ 190 - 191 - #if defined(CONFIG_ALPHA_GENERIC) || defined(CONFIG_ALPHA_EB64P) 192 - struct alpha_machine_vector eb64p_mv __initmv = { 193 - .vector_name = "EB64+", 194 - DO_EV4_MMU, 195 - DO_DEFAULT_RTC, 196 - DO_APECS_IO, 197 - .machine_check = apecs_machine_check, 198 - .max_isa_dma_address = ALPHA_MAX_ISA_DMA_ADDRESS, 199 - .min_io_address = DEFAULT_IO_BASE, 200 - .min_mem_address = APECS_AND_LCA_DEFAULT_MEM_BASE, 201 - 202 - .nr_irqs = 32, 203 - .device_interrupt = eb64p_device_interrupt, 204 - 205 - .init_arch = apecs_init_arch, 206 - .init_irq = eb64p_init_irq, 207 - .init_rtc = common_init_rtc, 208 - .init_pci = common_init_pci, 209 - .kill_arch = NULL, 210 - .pci_map_irq = eb64p_map_irq, 211 - .pci_swizzle = common_swizzle, 212 - }; 213 - ALIAS_MV(eb64p) 214 - #endif 215 - 216 - #if defined(CONFIG_ALPHA_GENERIC) || defined(CONFIG_ALPHA_EB66) 217 - struct alpha_machine_vector eb66_mv __initmv = { 218 - .vector_name = "EB66", 219 - DO_EV4_MMU, 220 - DO_DEFAULT_RTC, 221 - DO_LCA_IO, 222 - .machine_check = lca_machine_check, 223 - .max_isa_dma_address = ALPHA_MAX_ISA_DMA_ADDRESS, 224 - .min_io_address = DEFAULT_IO_BASE, 225 - .min_mem_address = APECS_AND_LCA_DEFAULT_MEM_BASE, 226 - 227 - .nr_irqs = 32, 228 - .device_interrupt = eb64p_device_interrupt, 229 - 230 - .init_arch = lca_init_arch, 231 - .init_irq = eb64p_init_irq, 232 - .init_rtc = common_init_rtc, 233 - .init_pci = common_init_pci, 234 - .pci_map_irq = eb64p_map_irq, 235 - .pci_swizzle = common_swizzle, 236 - }; 237 - ALIAS_MV(eb66) 238 - #endif
-57
arch/alpha/kernel/sys_mikasa.c
··· 23 23 #include <asm/irq.h> 24 24 #include <asm/mmu_context.h> 25 25 #include <asm/io.h> 26 - #include <asm/core_apecs.h> 27 26 #include <asm/core_cia.h> 28 27 #include <asm/tlbflush.h> 29 28 ··· 163 164 } 164 165 165 166 166 - #if defined(CONFIG_ALPHA_GENERIC) || !defined(CONFIG_ALPHA_PRIMO) 167 - static void 168 - mikasa_apecs_machine_check(unsigned long vector, unsigned long la_ptr) 169 - { 170 - #define MCHK_NO_DEVSEL 0x205U 171 - #define MCHK_NO_TABT 0x204U 172 - 173 - struct el_common *mchk_header; 174 - unsigned int code; 175 - 176 - mchk_header = (struct el_common *)la_ptr; 177 - 178 - /* Clear the error before any reporting. */ 179 - mb(); 180 - mb(); /* magic */ 181 - draina(); 182 - apecs_pci_clr_err(); 183 - wrmces(0x7); 184 - mb(); 185 - 186 - code = mchk_header->code; 187 - process_mcheck_info(vector, la_ptr, "MIKASA APECS", 188 - (mcheck_expected(0) 189 - && (code == MCHK_NO_DEVSEL 190 - || code == MCHK_NO_TABT))); 191 - } 192 - #endif 193 - 194 - 195 167 /* 196 168 * The System Vector 197 169 */ 198 - 199 - #if defined(CONFIG_ALPHA_GENERIC) || !defined(CONFIG_ALPHA_PRIMO) 200 - struct alpha_machine_vector mikasa_mv __initmv = { 201 - .vector_name = "Mikasa", 202 - DO_EV4_MMU, 203 - DO_DEFAULT_RTC, 204 - DO_APECS_IO, 205 - .machine_check = mikasa_apecs_machine_check, 206 - .max_isa_dma_address = ALPHA_MAX_ISA_DMA_ADDRESS, 207 - .min_io_address = DEFAULT_IO_BASE, 208 - .min_mem_address = APECS_AND_LCA_DEFAULT_MEM_BASE, 209 - 210 - .nr_irqs = 32, 211 - .device_interrupt = mikasa_device_interrupt, 212 - 213 - .init_arch = apecs_init_arch, 214 - .init_irq = mikasa_init_irq, 215 - .init_rtc = common_init_rtc, 216 - .init_pci = common_init_pci, 217 - .pci_map_irq = mikasa_map_irq, 218 - .pci_swizzle = common_swizzle, 219 - }; 220 - ALIAS_MV(mikasa) 221 - #endif 222 - 223 - #if defined(CONFIG_ALPHA_GENERIC) || defined(CONFIG_ALPHA_PRIMO) 224 170 struct alpha_machine_vector mikasa_primo_mv __initmv = { 225 171 .vector_name = "Mikasa-Primo", 226 172 DO_EV5_MMU, ··· 188 244 .pci_swizzle = common_swizzle, 189 245 }; 190 246 ALIAS_MV(mikasa_primo) 191 - #endif
-60
arch/alpha/kernel/sys_noritake.c
··· 24 24 #include <asm/irq.h> 25 25 #include <asm/mmu_context.h> 26 26 #include <asm/io.h> 27 - #include <asm/core_apecs.h> 28 27 #include <asm/core_cia.h> 29 28 #include <asm/tlbflush.h> 30 29 ··· 252 253 return slot; 253 254 } 254 255 255 - #if defined(CONFIG_ALPHA_GENERIC) || !defined(CONFIG_ALPHA_PRIMO) 256 - static void 257 - noritake_apecs_machine_check(unsigned long vector, unsigned long la_ptr) 258 - { 259 - #define MCHK_NO_DEVSEL 0x205U 260 - #define MCHK_NO_TABT 0x204U 261 - 262 - struct el_common *mchk_header; 263 - unsigned int code; 264 - 265 - mchk_header = (struct el_common *)la_ptr; 266 - 267 - /* Clear the error before any reporting. */ 268 - mb(); 269 - mb(); /* magic */ 270 - draina(); 271 - apecs_pci_clr_err(); 272 - wrmces(0x7); 273 - mb(); 274 - 275 - code = mchk_header->code; 276 - process_mcheck_info(vector, la_ptr, "NORITAKE APECS", 277 - (mcheck_expected(0) 278 - && (code == MCHK_NO_DEVSEL 279 - || code == MCHK_NO_TABT))); 280 - } 281 - #endif 282 - 283 - 284 - /* 285 - * The System Vectors 286 - */ 287 - 288 - #if defined(CONFIG_ALPHA_GENERIC) || !defined(CONFIG_ALPHA_PRIMO) 289 - struct alpha_machine_vector noritake_mv __initmv = { 290 - .vector_name = "Noritake", 291 - DO_EV4_MMU, 292 - DO_DEFAULT_RTC, 293 - DO_APECS_IO, 294 - .machine_check = noritake_apecs_machine_check, 295 - .max_isa_dma_address = ALPHA_MAX_ISA_DMA_ADDRESS, 296 - .min_io_address = EISA_DEFAULT_IO_BASE, 297 - .min_mem_address = APECS_AND_LCA_DEFAULT_MEM_BASE, 298 - 299 - .nr_irqs = 48, 300 - .device_interrupt = noritake_device_interrupt, 301 - 302 - .init_arch = apecs_init_arch, 303 - .init_irq = noritake_init_irq, 304 - .init_rtc = common_init_rtc, 305 - .init_pci = common_init_pci, 306 - .pci_map_irq = noritake_map_irq, 307 - .pci_swizzle = noritake_swizzle, 308 - }; 309 - ALIAS_MV(noritake) 310 - #endif 311 - 312 - #if defined(CONFIG_ALPHA_GENERIC) || defined(CONFIG_ALPHA_PRIMO) 313 256 struct alpha_machine_vector noritake_primo_mv __initmv = { 314 257 .vector_name = "Noritake-Primo", 315 258 DO_EV5_MMU, ··· 274 333 .pci_swizzle = noritake_swizzle, 275 334 }; 276 335 ALIAS_MV(noritake_primo) 277 - #endif
-486
arch/alpha/kernel/sys_sio.c
··· 1 - // SPDX-License-Identifier: GPL-2.0 2 - /* 3 - * linux/arch/alpha/kernel/sys_sio.c 4 - * 5 - * Copyright (C) 1995 David A Rusling 6 - * Copyright (C) 1996 Jay A Estabrook 7 - * Copyright (C) 1998, 1999 Richard Henderson 8 - * 9 - * Code for all boards that route the PCI interrupts through the SIO 10 - * PCI/ISA bridge. This includes Noname (AXPpci33), Multia (UDB), 11 - * Kenetics's Platform 2000, Avanti (AlphaStation), XL, and AlphaBook1. 12 - */ 13 - 14 - #include <linux/kernel.h> 15 - #include <linux/types.h> 16 - #include <linux/mm.h> 17 - #include <linux/sched.h> 18 - #include <linux/pci.h> 19 - #include <linux/init.h> 20 - #include <linux/screen_info.h> 21 - 22 - #include <asm/compiler.h> 23 - #include <asm/ptrace.h> 24 - #include <asm/dma.h> 25 - #include <asm/irq.h> 26 - #include <asm/mmu_context.h> 27 - #include <asm/io.h> 28 - #include <asm/core_apecs.h> 29 - #include <asm/core_lca.h> 30 - #include <asm/tlbflush.h> 31 - 32 - #include "proto.h" 33 - #include "irq_impl.h" 34 - #include "pci_impl.h" 35 - #include "machvec_impl.h" 36 - #include "pc873xx.h" 37 - 38 - #if defined(ALPHA_RESTORE_SRM_SETUP) 39 - /* Save LCA configuration data as the console had it set up. */ 40 - struct 41 - { 42 - unsigned int orig_route_tab; /* for SAVE/RESTORE */ 43 - } saved_config __attribute((common)); 44 - #endif 45 - 46 - 47 - static void __init 48 - sio_init_irq(void) 49 - { 50 - if (alpha_using_srm) 51 - alpha_mv.device_interrupt = srm_device_interrupt; 52 - 53 - init_i8259a_irqs(); 54 - common_init_isa_dma(); 55 - } 56 - 57 - static inline void __init 58 - alphabook1_init_arch(void) 59 - { 60 - #ifdef CONFIG_VGA_CONSOLE 61 - /* The AlphaBook1 has LCD video fixed at 800x600, 62 - 37 rows and 100 cols. */ 63 - vgacon_screen_info.orig_y = 37; 64 - vgacon_screen_info.orig_video_cols = 100; 65 - vgacon_screen_info.orig_video_lines = 37; 66 - #endif 67 - 68 - lca_init_arch(); 69 - } 70 - 71 - 72 - /* 73 - * sio_route_tab selects irq routing in PCI/ISA bridge so that: 74 - * PIRQ0 -> irq 15 75 - * PIRQ1 -> irq 9 76 - * PIRQ2 -> irq 10 77 - * PIRQ3 -> irq 11 78 - * 79 - * This probably ought to be configurable via MILO. For 80 - * example, sound boards seem to like using IRQ 9. 81 - * 82 - * This is NOT how we should do it. PIRQ0-X should have 83 - * their own IRQs, the way intel uses the IO-APIC IRQs. 84 - */ 85 - 86 - static void __init 87 - sio_pci_route(void) 88 - { 89 - unsigned int orig_route_tab; 90 - 91 - /* First, ALWAYS read and print the original setting. */ 92 - pci_bus_read_config_dword(pci_isa_hose->bus, PCI_DEVFN(7, 0), 0x60, 93 - &orig_route_tab); 94 - printk("%s: PIRQ original 0x%x new 0x%x\n", __func__, 95 - orig_route_tab, alpha_mv.sys.sio.route_tab); 96 - 97 - #if defined(ALPHA_RESTORE_SRM_SETUP) 98 - saved_config.orig_route_tab = orig_route_tab; 99 - #endif 100 - 101 - /* Now override with desired setting. */ 102 - pci_bus_write_config_dword(pci_isa_hose->bus, PCI_DEVFN(7, 0), 0x60, 103 - alpha_mv.sys.sio.route_tab); 104 - } 105 - 106 - static bool sio_pci_dev_irq_needs_level(const struct pci_dev *dev) 107 - { 108 - if ((dev->class >> 16 == PCI_BASE_CLASS_BRIDGE) && 109 - (dev->class >> 8 != PCI_CLASS_BRIDGE_PCMCIA)) 110 - return false; 111 - 112 - return true; 113 - } 114 - 115 - static unsigned int __init 116 - sio_collect_irq_levels(void) 117 - { 118 - unsigned int level_bits = 0; 119 - struct pci_dev *dev = NULL; 120 - 121 - /* Iterate through the devices, collecting IRQ levels. */ 122 - for_each_pci_dev(dev) { 123 - if (!sio_pci_dev_irq_needs_level(dev)) 124 - continue; 125 - 126 - if (dev->irq) 127 - level_bits |= (1 << dev->irq); 128 - } 129 - return level_bits; 130 - } 131 - 132 - static void __sio_fixup_irq_levels(unsigned int level_bits, bool reset) 133 - { 134 - unsigned int old_level_bits; 135 - 136 - /* 137 - * Now, make all PCI interrupts level sensitive. Notice: 138 - * these registers must be accessed byte-wise. inw()/outw() 139 - * don't work. 140 - * 141 - * Make sure to turn off any level bits set for IRQs 9,10,11,15, 142 - * so that the only bits getting set are for devices actually found. 143 - * Note that we do preserve the remainder of the bits, which we hope 144 - * will be set correctly by ARC/SRM. 145 - * 146 - * Note: we at least preserve any level-set bits on AlphaBook1 147 - */ 148 - old_level_bits = inb(0x4d0) | (inb(0x4d1) << 8); 149 - 150 - if (reset) 151 - old_level_bits &= 0x71ff; 152 - 153 - level_bits |= old_level_bits; 154 - 155 - outb((level_bits >> 0) & 0xff, 0x4d0); 156 - outb((level_bits >> 8) & 0xff, 0x4d1); 157 - } 158 - 159 - static inline void 160 - sio_fixup_irq_levels(unsigned int level_bits) 161 - { 162 - __sio_fixup_irq_levels(level_bits, true); 163 - } 164 - 165 - static inline int 166 - noname_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) 167 - { 168 - /* 169 - * The Noname board has 5 PCI slots with each of the 4 170 - * interrupt pins routed to different pins on the PCI/ISA 171 - * bridge (PIRQ0-PIRQ3). The table below is based on 172 - * information available at: 173 - * 174 - * http://ftp.digital.com/pub/DEC/axppci/ref_interrupts.txt 175 - * 176 - * I have no information on the Avanti interrupt routing, but 177 - * the routing seems to be identical to the Noname except 178 - * that the Avanti has an additional slot whose routing I'm 179 - * unsure of. 180 - * 181 - * pirq_tab[0] is a fake entry to deal with old PCI boards 182 - * that have the interrupt pin number hardwired to 0 (meaning 183 - * that they use the default INTA line, if they are interrupt 184 - * driven at all). 185 - */ 186 - static char irq_tab[][5] = { 187 - /*INT A B C D */ 188 - { 3, 3, 3, 3, 3}, /* idsel 6 (53c810) */ 189 - {-1, -1, -1, -1, -1}, /* idsel 7 (SIO: PCI/ISA bridge) */ 190 - { 2, 2, -1, -1, -1}, /* idsel 8 (Hack: slot closest ISA) */ 191 - {-1, -1, -1, -1, -1}, /* idsel 9 (unused) */ 192 - {-1, -1, -1, -1, -1}, /* idsel 10 (unused) */ 193 - { 0, 0, 2, 1, 0}, /* idsel 11 KN25_PCI_SLOT0 */ 194 - { 1, 1, 0, 2, 1}, /* idsel 12 KN25_PCI_SLOT1 */ 195 - { 2, 2, 1, 0, 2}, /* idsel 13 KN25_PCI_SLOT2 */ 196 - { 0, 0, 0, 0, 0}, /* idsel 14 AS255 TULIP */ 197 - }; 198 - const long min_idsel = 6, max_idsel = 14, irqs_per_slot = 5; 199 - int irq = COMMON_TABLE_LOOKUP, tmp; 200 - tmp = __kernel_extbl(alpha_mv.sys.sio.route_tab, irq); 201 - 202 - irq = irq >= 0 ? tmp : -1; 203 - 204 - /* Fixup IRQ level if an actual IRQ mapping is detected */ 205 - if (sio_pci_dev_irq_needs_level(dev) && irq >= 0) 206 - __sio_fixup_irq_levels(1 << irq, false); 207 - 208 - return irq; 209 - } 210 - 211 - static inline int 212 - p2k_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) 213 - { 214 - static char irq_tab[][5] = { 215 - /*INT A B C D */ 216 - { 0, 0, -1, -1, -1}, /* idsel 6 (53c810) */ 217 - {-1, -1, -1, -1, -1}, /* idsel 7 (SIO: PCI/ISA bridge) */ 218 - { 1, 1, 2, 3, 0}, /* idsel 8 (slot A) */ 219 - { 2, 2, 3, 0, 1}, /* idsel 9 (slot B) */ 220 - {-1, -1, -1, -1, -1}, /* idsel 10 (unused) */ 221 - {-1, -1, -1, -1, -1}, /* idsel 11 (unused) */ 222 - { 3, 3, -1, -1, -1}, /* idsel 12 (CMD0646) */ 223 - }; 224 - const long min_idsel = 6, max_idsel = 12, irqs_per_slot = 5; 225 - int irq = COMMON_TABLE_LOOKUP, tmp; 226 - tmp = __kernel_extbl(alpha_mv.sys.sio.route_tab, irq); 227 - return irq >= 0 ? tmp : -1; 228 - } 229 - 230 - static inline void __init 231 - noname_init_pci(void) 232 - { 233 - common_init_pci(); 234 - sio_pci_route(); 235 - sio_fixup_irq_levels(sio_collect_irq_levels()); 236 - 237 - if (pc873xx_probe() == -1) { 238 - printk(KERN_ERR "Probing for PC873xx Super IO chip failed.\n"); 239 - } else { 240 - printk(KERN_INFO "Found %s Super IO chip at 0x%x\n", 241 - pc873xx_get_model(), pc873xx_get_base()); 242 - 243 - /* Enabling things in the Super IO chip doesn't actually 244 - * configure and enable things, the legacy drivers still 245 - * need to do the actual configuration and enabling. 246 - * This only unblocks them. 247 - */ 248 - 249 - #if !defined(CONFIG_ALPHA_AVANTI) 250 - /* Don't bother on the Avanti family. 251 - * None of them had on-board IDE. 252 - */ 253 - pc873xx_enable_ide(); 254 - #endif 255 - pc873xx_enable_epp19(); 256 - } 257 - } 258 - 259 - static inline void __init 260 - alphabook1_init_pci(void) 261 - { 262 - struct pci_dev *dev; 263 - unsigned char orig, config; 264 - 265 - common_init_pci(); 266 - sio_pci_route(); 267 - 268 - /* 269 - * On the AlphaBook1, the PCMCIA chip (Cirrus 6729) 270 - * is sensitive to PCI bus bursts, so we must DISABLE 271 - * burst mode for the NCR 8xx SCSI... :-( 272 - * 273 - * Note that the NCR810 SCSI driver must preserve the 274 - * setting of the bit in order for this to work. At the 275 - * moment (2.0.29), ncr53c8xx.c does NOT do this, but 276 - * 53c7,8xx.c DOES. 277 - */ 278 - 279 - dev = NULL; 280 - while ((dev = pci_get_device(PCI_VENDOR_ID_NCR, PCI_ANY_ID, dev))) { 281 - if (dev->device == PCI_DEVICE_ID_NCR_53C810 282 - || dev->device == PCI_DEVICE_ID_NCR_53C815 283 - || dev->device == PCI_DEVICE_ID_NCR_53C820 284 - || dev->device == PCI_DEVICE_ID_NCR_53C825) { 285 - unsigned long io_port; 286 - unsigned char ctest4; 287 - 288 - io_port = dev->resource[0].start; 289 - ctest4 = inb(io_port+0x21); 290 - if (!(ctest4 & 0x80)) { 291 - printk("AlphaBook1 NCR init: setting" 292 - " burst disable\n"); 293 - outb(ctest4 | 0x80, io_port+0x21); 294 - } 295 - } 296 - } 297 - 298 - /* Do not set *ANY* level triggers for AlphaBook1. */ 299 - sio_fixup_irq_levels(0); 300 - 301 - /* Make sure that register PR1 indicates 1Mb mem */ 302 - outb(0x0f, 0x3ce); orig = inb(0x3cf); /* read PR5 */ 303 - outb(0x0f, 0x3ce); outb(0x05, 0x3cf); /* unlock PR0-4 */ 304 - outb(0x0b, 0x3ce); config = inb(0x3cf); /* read PR1 */ 305 - if ((config & 0xc0) != 0xc0) { 306 - printk("AlphaBook1 VGA init: setting 1Mb memory\n"); 307 - config |= 0xc0; 308 - outb(0x0b, 0x3ce); outb(config, 0x3cf); /* write PR1 */ 309 - } 310 - outb(0x0f, 0x3ce); outb(orig, 0x3cf); /* (re)lock PR0-4 */ 311 - } 312 - 313 - static void 314 - sio_kill_arch(int mode) 315 - { 316 - #if defined(ALPHA_RESTORE_SRM_SETUP) 317 - /* Since we cannot read the PCI DMA Window CSRs, we 318 - * cannot restore them here. 319 - * 320 - * However, we CAN read the PIRQ route register, so restore it 321 - * now... 322 - */ 323 - pci_bus_write_config_dword(pci_isa_hose->bus, PCI_DEVFN(7, 0), 0x60, 324 - saved_config.orig_route_tab); 325 - #endif 326 - } 327 - 328 - 329 - /* 330 - * The System Vectors 331 - */ 332 - 333 - #if defined(CONFIG_ALPHA_GENERIC) || defined(CONFIG_ALPHA_BOOK1) 334 - struct alpha_machine_vector alphabook1_mv __initmv = { 335 - .vector_name = "AlphaBook1", 336 - DO_EV4_MMU, 337 - DO_DEFAULT_RTC, 338 - DO_LCA_IO, 339 - .machine_check = lca_machine_check, 340 - .max_isa_dma_address = ALPHA_MAX_ISA_DMA_ADDRESS, 341 - .min_io_address = DEFAULT_IO_BASE, 342 - .min_mem_address = APECS_AND_LCA_DEFAULT_MEM_BASE, 343 - 344 - .nr_irqs = 16, 345 - .device_interrupt = isa_device_interrupt, 346 - 347 - .init_arch = alphabook1_init_arch, 348 - .init_irq = sio_init_irq, 349 - .init_rtc = common_init_rtc, 350 - .init_pci = alphabook1_init_pci, 351 - .kill_arch = sio_kill_arch, 352 - .pci_map_irq = noname_map_irq, 353 - .pci_swizzle = common_swizzle, 354 - 355 - .sys = { .sio = { 356 - /* NCR810 SCSI is 14, PCMCIA controller is 15. */ 357 - .route_tab = 0x0e0f0a0a, 358 - }} 359 - }; 360 - ALIAS_MV(alphabook1) 361 - #endif 362 - 363 - #if defined(CONFIG_ALPHA_GENERIC) || defined(CONFIG_ALPHA_AVANTI_CH) 364 - struct alpha_machine_vector avanti_mv __initmv = { 365 - .vector_name = "Avanti", 366 - DO_EV4_MMU, 367 - DO_DEFAULT_RTC, 368 - DO_APECS_IO, 369 - .machine_check = apecs_machine_check, 370 - .max_isa_dma_address = ALPHA_MAX_ISA_DMA_ADDRESS, 371 - .min_io_address = DEFAULT_IO_BASE, 372 - .min_mem_address = APECS_AND_LCA_DEFAULT_MEM_BASE, 373 - 374 - .nr_irqs = 16, 375 - .device_interrupt = isa_device_interrupt, 376 - 377 - .init_arch = apecs_init_arch, 378 - .init_irq = sio_init_irq, 379 - .init_rtc = common_init_rtc, 380 - .init_pci = noname_init_pci, 381 - .kill_arch = sio_kill_arch, 382 - .pci_map_irq = noname_map_irq, 383 - .pci_swizzle = common_swizzle, 384 - 385 - .sys = { .sio = { 386 - .route_tab = 0x0b0a050f, /* leave 14 for IDE, 9 for SND */ 387 - }} 388 - }; 389 - ALIAS_MV(avanti) 390 - #endif 391 - 392 - #if defined(CONFIG_ALPHA_GENERIC) || defined(CONFIG_ALPHA_NONAME_CH) 393 - struct alpha_machine_vector noname_mv __initmv = { 394 - .vector_name = "Noname", 395 - DO_EV4_MMU, 396 - DO_DEFAULT_RTC, 397 - DO_LCA_IO, 398 - .machine_check = lca_machine_check, 399 - .max_isa_dma_address = ALPHA_MAX_ISA_DMA_ADDRESS, 400 - .min_io_address = DEFAULT_IO_BASE, 401 - .min_mem_address = APECS_AND_LCA_DEFAULT_MEM_BASE, 402 - 403 - .nr_irqs = 16, 404 - .device_interrupt = srm_device_interrupt, 405 - 406 - .init_arch = lca_init_arch, 407 - .init_irq = sio_init_irq, 408 - .init_rtc = common_init_rtc, 409 - .init_pci = noname_init_pci, 410 - .kill_arch = sio_kill_arch, 411 - .pci_map_irq = noname_map_irq, 412 - .pci_swizzle = common_swizzle, 413 - 414 - .sys = { .sio = { 415 - /* For UDB, the only available PCI slot must not map to IRQ 9, 416 - since that's the builtin MSS sound chip. That PCI slot 417 - will map to PIRQ1 (for INTA at least), so we give it IRQ 15 418 - instead. 419 - 420 - Unfortunately we have to do this for NONAME as well, since 421 - they are co-indicated when the platform type "Noname" is 422 - selected... :-( */ 423 - 424 - .route_tab = 0x0b0a0f0d, 425 - }} 426 - }; 427 - ALIAS_MV(noname) 428 - #endif 429 - 430 - #if defined(CONFIG_ALPHA_GENERIC) || defined(CONFIG_ALPHA_P2K) 431 - struct alpha_machine_vector p2k_mv __initmv = { 432 - .vector_name = "Platform2000", 433 - DO_EV4_MMU, 434 - DO_DEFAULT_RTC, 435 - DO_LCA_IO, 436 - .machine_check = lca_machine_check, 437 - .max_isa_dma_address = ALPHA_MAX_ISA_DMA_ADDRESS, 438 - .min_io_address = DEFAULT_IO_BASE, 439 - .min_mem_address = APECS_AND_LCA_DEFAULT_MEM_BASE, 440 - 441 - .nr_irqs = 16, 442 - .device_interrupt = srm_device_interrupt, 443 - 444 - .init_arch = lca_init_arch, 445 - .init_irq = sio_init_irq, 446 - .init_rtc = common_init_rtc, 447 - .init_pci = noname_init_pci, 448 - .kill_arch = sio_kill_arch, 449 - .pci_map_irq = p2k_map_irq, 450 - .pci_swizzle = common_swizzle, 451 - 452 - .sys = { .sio = { 453 - .route_tab = 0x0b0a090f, 454 - }} 455 - }; 456 - ALIAS_MV(p2k) 457 - #endif 458 - 459 - #if defined(CONFIG_ALPHA_GENERIC) || defined(CONFIG_ALPHA_XL) 460 - struct alpha_machine_vector xl_mv __initmv = { 461 - .vector_name = "XL", 462 - DO_EV4_MMU, 463 - DO_DEFAULT_RTC, 464 - DO_APECS_IO, 465 - .machine_check = apecs_machine_check, 466 - .max_isa_dma_address = ALPHA_XL_MAX_ISA_DMA_ADDRESS, 467 - .min_io_address = DEFAULT_IO_BASE, 468 - .min_mem_address = XL_DEFAULT_MEM_BASE, 469 - 470 - .nr_irqs = 16, 471 - .device_interrupt = isa_device_interrupt, 472 - 473 - .init_arch = apecs_init_arch, 474 - .init_irq = sio_init_irq, 475 - .init_rtc = common_init_rtc, 476 - .init_pci = noname_init_pci, 477 - .kill_arch = sio_kill_arch, 478 - .pci_map_irq = noname_map_irq, 479 - .pci_swizzle = common_swizzle, 480 - 481 - .sys = { .sio = { 482 - .route_tab = 0x0b0a090f, 483 - }} 484 - }; 485 - ALIAS_MV(xl) 486 - #endif