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

ARM: remove ebsa110 platform

Russell said that he is no longer using this machine, and it seems that
nobody else has in a long time, so it's time to say goodbye to it.

As this is the last platform using CONFIG_ARCH_USES_GETTIMEOFFSET,
there are some follow-up patches to remove that as well.

Acked-by: Russell King <rmk+kernel@armlinux.org.uk>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>

+7 -1229
-8
MAINTAINERS
··· 1789 1789 F: drivers/gpio/gpio-moxtet.c 1790 1790 F: include/linux/moxtet.h 1791 1791 1792 - ARM/EBSA110 MACHINE SUPPORT 1793 - M: Russell King <linux@armlinux.org.uk> 1794 - L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 1795 - S: Maintained 1796 - W: http://www.armlinux.org.uk/ 1797 - F: arch/arm/mach-ebsa110/ 1798 - F: drivers/net/ethernet/amd/am79c961a.* 1799 - 1800 1792 ARM/ENERGY MICRO (SILICON LABS) EFM32 SUPPORT 1801 1793 M: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> 1802 1794 R: Pengutronix Kernel Team <kernel@pengutronix.de>
+3 -21
arch/arm/Kconfig
··· 267 267 hex "Physical address of main memory" if MMU 268 268 depends on !ARM_PATCH_PHYS_VIRT 269 269 default DRAM_BASE if !MMU 270 - default 0x00000000 if ARCH_EBSA110 || \ 271 - ARCH_FOOTBRIDGE 270 + default 0x00000000 if ARCH_FOOTBRIDGE 272 271 default 0x10000000 if ARCH_OMAP1 || ARCH_RPC 273 272 default 0x20000000 if ARCH_S5PV210 274 273 default 0xc0000000 if ARCH_SA1100 ··· 340 341 select NO_IOPORT_MAP 341 342 select SPARSE_IRQ 342 343 select USE_OF 343 - 344 - config ARCH_EBSA110 345 - bool "EBSA-110" 346 - select ARCH_USES_GETTIMEOFFSET 347 - select CPU_SA110 348 - select ISA 349 - select NEED_MACH_IO_H 350 - select NEED_MACH_MEMORY_H 351 - select NO_IOPORT_MAP 352 - help 353 - This is an evaluation board for the StrongARM processor available 354 - from Digital. It has limited hardware on-board, including an 355 - Ethernet interface, two PCMCIA sockets, two serial ports and a 356 - parallel port. 357 344 358 345 config ARCH_EP93XX 359 346 bool "EP93xx-based" ··· 1356 1371 1357 1372 config HZ_FIXED 1358 1373 int 1359 - default 200 if ARCH_EBSA110 1360 1374 default 128 if SOC_AT91RM9200 1361 1375 default 0 1362 1376 ··· 1571 1587 a value of 11 means that the largest free memory block is 2^10 pages. 1572 1588 1573 1589 config ALIGNMENT_TRAP 1574 - bool 1575 - depends on CPU_CP15_MMU 1576 - default y if !ARCH_EBSA110 1590 + def_bool CPU_CP15_MMU 1577 1591 select HAVE_PROC_CPU if PROC_FS 1578 1592 help 1579 1593 ARM processors cannot fetch/store information which is not ··· 1766 1784 string "Default kernel command string" 1767 1785 default "" 1768 1786 help 1769 - On some architectures (EBSA110 and CATS), there is currently no way 1787 + On some architectures (e.g. CATS), there is currently no way 1770 1788 for the boot loader to pass arguments to the kernel. For these 1771 1789 architectures, you should supply some command-line options at build 1772 1790 time by entering them here. As a minimum, you should specify the
+2 -4
arch/arm/Kconfig.debug
··· 1567 1567 config DEBUG_UART_FLOW_CONTROL 1568 1568 bool "Enable flow control (CTS) for the debug UART" 1569 1569 depends on DEBUG_LL 1570 - default y if ARCH_EBSA110 || DEBUG_FOOTBRIDGE_COM1 || DEBUG_GEMINI || ARCH_RPC 1570 + default y if DEBUG_FOOTBRIDGE_COM1 || DEBUG_GEMINI || ARCH_RPC 1571 1571 help 1572 1572 Some UART ports are connected to terminals that will use modem 1573 1573 control signals to indicate whether they are ready to receive text. ··· 1639 1639 1640 1640 # Compatibility options for 8250 1641 1641 config DEBUG_UART_8250 1642 - def_bool ARCH_EBSA110 || ARCH_IOP32X || ARCH_IXP4XX || ARCH_RPC 1642 + def_bool ARCH_IOP32X || ARCH_IXP4XX || ARCH_RPC 1643 1643 1644 1644 config DEBUG_UART_PHYS 1645 1645 hex "Physical base address of debug UART" ··· 1743 1743 default 0xe8008000 if DEBUG_R7S72100_SCIF2 || DEBUG_R7S9210_SCIF2 1744 1744 default 0xe8009000 if DEBUG_R7S9210_SCIF4 1745 1745 default 0xf0000000 if DEBUG_DIGICOLOR_UA0 1746 - default 0xf0000be0 if ARCH_EBSA110 1747 1746 default 0xf1012000 if DEBUG_MVEBU_UART0_ALTERNATE 1748 1747 default 0xf1012100 if DEBUG_MVEBU_UART1_ALTERNATE 1749 1748 default 0xf7fc9000 if DEBUG_BERLIN_UART ··· 1789 1790 default 0xc8821000 if DEBUG_RV1108_UART1 1790 1791 default 0xc8912000 if DEBUG_RV1108_UART0 1791 1792 default 0xe0010fe0 if ARCH_RPC 1792 - default 0xf0000be0 if ARCH_EBSA110 1793 1793 default 0xf0010000 if DEBUG_ASM9260_UART 1794 1794 default 0xf0100000 if DEBUG_DIGICOLOR_UA0 1795 1795 default 0xf01fb000 if DEBUG_NOMADIK_UART
-8
arch/arm/Makefile
··· 172 172 machine-$(CONFIG_ARCH_DAVINCI) += davinci 173 173 machine-$(CONFIG_ARCH_DIGICOLOR) += digicolor 174 174 machine-$(CONFIG_ARCH_DOVE) += dove 175 - machine-$(CONFIG_ARCH_EBSA110) += ebsa110 176 175 machine-$(CONFIG_ARCH_EFM32) += efm32 177 176 machine-$(CONFIG_ARCH_EP93XX) += ep93xx 178 177 machine-$(CONFIG_ARCH_EXYNOS) += exynos ··· 237 238 plat-$(CONFIG_PLAT_ORION) += orion 238 239 plat-$(CONFIG_PLAT_PXA) += pxa 239 240 plat-$(CONFIG_PLAT_VERSATILE) += versatile 240 - 241 - ifeq ($(CONFIG_ARCH_EBSA110),y) 242 - # This is what happens if you forget the IOCS16 line. 243 - # PCMCIA cards stop working. 244 - CFLAGS_3c589_cs.o :=-DISA_SIXTEEN_BIT_PERIPHERAL 245 - export CFLAGS_3c589_cs.o 246 - endif 247 241 248 242 # The byte offset of the kernel image in RAM from the start of RAM. 249 243 TEXT_OFFSET := $(textofs-y)
-74
arch/arm/configs/ebsa110_defconfig
··· 1 - CONFIG_SYSVIPC=y 2 - CONFIG_BSD_PROCESS_ACCT=y 3 - CONFIG_LOG_BUF_SHIFT=14 4 - CONFIG_EXPERT=y 5 - CONFIG_MODULES=y 6 - CONFIG_ARCH_EBSA110=y 7 - CONFIG_PCCARD=m 8 - CONFIG_I82365=m 9 - CONFIG_LEDS=y 10 - CONFIG_ZBOOT_ROM_TEXT=0x0 11 - CONFIG_ZBOOT_ROM_BSS=0x0 12 - CONFIG_CMDLINE="root=/dev/nfs rw mem=16M console=ttyS1,38400n8" 13 - CONFIG_FPE_NWFPE=y 14 - CONFIG_FPE_FASTFPE=y 15 - CONFIG_BINFMT_AOUT=y 16 - CONFIG_NET=y 17 - CONFIG_PACKET=y 18 - CONFIG_UNIX=y 19 - CONFIG_INET=y 20 - CONFIG_IP_MULTICAST=y 21 - CONFIG_IP_ADVANCED_ROUTER=y 22 - CONFIG_IP_MULTIPLE_TABLES=y 23 - CONFIG_IP_ROUTE_VERBOSE=y 24 - CONFIG_IP_PNP=y 25 - CONFIG_IP_PNP_BOOTP=y 26 - CONFIG_SYN_COOKIES=y 27 - CONFIG_IPV6=y 28 - CONFIG_NETFILTER=y 29 - CONFIG_IP_NF_IPTABLES=y 30 - CONFIG_IP_NF_MATCH_ECN=y 31 - CONFIG_IP_NF_MATCH_TTL=y 32 - CONFIG_IP_NF_FILTER=y 33 - CONFIG_IP_NF_TARGET_REJECT=y 34 - CONFIG_IP_NF_TARGET_LOG=y 35 - CONFIG_IP_NF_MANGLE=y 36 - CONFIG_IP_NF_TARGET_ECN=y 37 - CONFIG_IP6_NF_IPTABLES=y 38 - CONFIG_IP6_NF_MATCH_FRAG=y 39 - CONFIG_IP6_NF_MATCH_OPTS=y 40 - CONFIG_IP6_NF_MATCH_HL=y 41 - CONFIG_IP6_NF_MATCH_RT=y 42 - CONFIG_IP6_NF_FILTER=y 43 - CONFIG_IP6_NF_MANGLE=y 44 - CONFIG_FW_LOADER=m 45 - CONFIG_PARPORT=y 46 - CONFIG_PARPORT_PC=y 47 - CONFIG_PARPORT_PC_FIFO=y 48 - CONFIG_PARPORT_1284=y 49 - CONFIG_BLK_DEV_RAM=y 50 - CONFIG_NETDEVICES=y 51 - CONFIG_NET_ETHERNET=y 52 - CONFIG_ARM_AM79C961A=y 53 - CONFIG_NET_PCMCIA=y 54 - CONFIG_PCMCIA_PCNET=m 55 - CONFIG_PPP=m 56 - CONFIG_PPP_ASYNC=m 57 - CONFIG_PPP_DEFLATE=m 58 - CONFIG_PPP_BSDCOMP=m 59 - # CONFIG_INPUT is not set 60 - # CONFIG_SERIO is not set 61 - # CONFIG_VT is not set 62 - CONFIG_SERIAL_8250=y 63 - CONFIG_SERIAL_8250_CONSOLE=y 64 - CONFIG_SERIAL_8250_CS=m 65 - CONFIG_PRINTER=m 66 - CONFIG_WATCHDOG=y 67 - CONFIG_SOFT_WATCHDOG=y 68 - CONFIG_AUTOFS4_FS=y 69 - CONFIG_MINIX_FS=y 70 - CONFIG_NFS_FS=y 71 - CONFIG_NFS_V3=y 72 - CONFIG_ROOT_NFS=y 73 - CONFIG_PARTITION_ADVANCED=y 74 - # CONFIG_MSDOS_PARTITION is not set
+1 -5
arch/arm/kernel/Makefile
··· 17 17 # Object file lists. 18 18 19 19 obj-y := elf.o entry-common.o irq.o opcodes.o \ 20 - process.o ptrace.o reboot.o \ 20 + process.o ptrace.o reboot.o io.o \ 21 21 setup.o signal.o sigreturn_codes.o \ 22 22 stacktrace.o sys_arm.o time.o traps.o 23 23 ··· 83 83 obj-$(CONFIG_ARM_CPU_TOPOLOGY) += topology.o 84 84 obj-$(CONFIG_VDSO) += vdso.o 85 85 obj-$(CONFIG_EFI) += efi.o 86 - 87 - ifneq ($(CONFIG_ARCH_EBSA110),y) 88 - obj-y += io.o 89 - endif 90 86 obj-$(CONFIG_PARAVIRT) += paravirt.o 91 87 92 88 head-y := head$(MMUEXT).o
-8
arch/arm/mach-ebsa110/Makefile
··· 1 - # SPDX-License-Identifier: GPL-2.0-only 2 - # 3 - # Makefile for the linux kernel. 4 - # 5 - 6 - # Object file lists. 7 - 8 - obj-y := core.o io.o leds.o
-5
arch/arm/mach-ebsa110/Makefile.boot
··· 1 - # SPDX-License-Identifier: GPL-2.0-only 2 - zreladdr-y += 0x00008000 3 - params_phys-y := 0x00000400 4 - initrd_phys-y := 0x00800000 5 -
-323
arch/arm/mach-ebsa110/core.c
··· 1 - // SPDX-License-Identifier: GPL-2.0-only 2 - /* 3 - * linux/arch/arm/mach-ebsa110/core.c 4 - * 5 - * Copyright (C) 1998-2001 Russell King 6 - * 7 - * Extra MM routines for the EBSA-110 architecture 8 - */ 9 - #include <linux/kernel.h> 10 - #include <linux/mm.h> 11 - #include <linux/interrupt.h> 12 - #include <linux/serial_8250.h> 13 - #include <linux/init.h> 14 - #include <linux/io.h> 15 - 16 - #include <mach/hardware.h> 17 - #include <asm/irq.h> 18 - #include <asm/setup.h> 19 - #include <asm/mach-types.h> 20 - #include <asm/page.h> 21 - #include <asm/system_misc.h> 22 - 23 - #include <asm/mach/arch.h> 24 - #include <asm/mach/irq.h> 25 - #include <asm/mach/map.h> 26 - 27 - #include <asm/mach/time.h> 28 - 29 - #include "core.h" 30 - 31 - static void ebsa110_mask_irq(struct irq_data *d) 32 - { 33 - __raw_writeb(1 << d->irq, IRQ_MCLR); 34 - } 35 - 36 - static void ebsa110_unmask_irq(struct irq_data *d) 37 - { 38 - __raw_writeb(1 << d->irq, IRQ_MSET); 39 - } 40 - 41 - static struct irq_chip ebsa110_irq_chip = { 42 - .irq_ack = ebsa110_mask_irq, 43 - .irq_mask = ebsa110_mask_irq, 44 - .irq_unmask = ebsa110_unmask_irq, 45 - }; 46 - 47 - static void __init ebsa110_init_irq(void) 48 - { 49 - unsigned long flags; 50 - unsigned int irq; 51 - 52 - local_irq_save(flags); 53 - __raw_writeb(0xff, IRQ_MCLR); 54 - __raw_writeb(0x55, IRQ_MSET); 55 - __raw_writeb(0x00, IRQ_MSET); 56 - if (__raw_readb(IRQ_MASK) != 0x55) 57 - while (1); 58 - __raw_writeb(0xff, IRQ_MCLR); /* clear all interrupt enables */ 59 - local_irq_restore(flags); 60 - 61 - for (irq = 0; irq < NR_IRQS; irq++) { 62 - irq_set_chip_and_handler(irq, &ebsa110_irq_chip, 63 - handle_level_irq); 64 - irq_clear_status_flags(irq, IRQ_NOREQUEST | IRQ_NOPROBE); 65 - } 66 - } 67 - 68 - static struct map_desc ebsa110_io_desc[] __initdata = { 69 - /* 70 - * sparse external-decode ISAIO space 71 - */ 72 - { /* IRQ_STAT/IRQ_MCLR */ 73 - .virtual = (unsigned long)IRQ_STAT, 74 - .pfn = __phys_to_pfn(TRICK4_PHYS), 75 - .length = TRICK4_SIZE, 76 - .type = MT_DEVICE 77 - }, { /* IRQ_MASK/IRQ_MSET */ 78 - .virtual = (unsigned long)IRQ_MASK, 79 - .pfn = __phys_to_pfn(TRICK3_PHYS), 80 - .length = TRICK3_SIZE, 81 - .type = MT_DEVICE 82 - }, { /* SOFT_BASE */ 83 - .virtual = (unsigned long)SOFT_BASE, 84 - .pfn = __phys_to_pfn(TRICK1_PHYS), 85 - .length = TRICK1_SIZE, 86 - .type = MT_DEVICE 87 - }, { /* PIT_BASE */ 88 - .virtual = (unsigned long)PIT_BASE, 89 - .pfn = __phys_to_pfn(TRICK0_PHYS), 90 - .length = TRICK0_SIZE, 91 - .type = MT_DEVICE 92 - }, 93 - 94 - /* 95 - * self-decode ISAIO space 96 - */ 97 - { 98 - .virtual = ISAIO_BASE, 99 - .pfn = __phys_to_pfn(ISAIO_PHYS), 100 - .length = ISAIO_SIZE, 101 - .type = MT_DEVICE 102 - }, { 103 - .virtual = ISAMEM_BASE, 104 - .pfn = __phys_to_pfn(ISAMEM_PHYS), 105 - .length = ISAMEM_SIZE, 106 - .type = MT_DEVICE 107 - } 108 - }; 109 - 110 - static void __init ebsa110_map_io(void) 111 - { 112 - iotable_init(ebsa110_io_desc, ARRAY_SIZE(ebsa110_io_desc)); 113 - } 114 - 115 - static void __iomem *ebsa110_ioremap_caller(phys_addr_t cookie, size_t size, 116 - unsigned int flags, void *caller) 117 - { 118 - return (void __iomem *)cookie; 119 - } 120 - 121 - static void ebsa110_iounmap(volatile void __iomem *io_addr) 122 - {} 123 - 124 - static void __init ebsa110_init_early(void) 125 - { 126 - arch_ioremap_caller = ebsa110_ioremap_caller; 127 - arch_iounmap = ebsa110_iounmap; 128 - } 129 - 130 - #define PIT_CTRL (PIT_BASE + 0x0d) 131 - #define PIT_T2 (PIT_BASE + 0x09) 132 - #define PIT_T1 (PIT_BASE + 0x05) 133 - #define PIT_T0 (PIT_BASE + 0x01) 134 - 135 - /* 136 - * This is the rate at which your MCLK signal toggles (in Hz) 137 - * This was measured on a 10 digit frequency counter sampling 138 - * over 1 second. 139 - */ 140 - #define MCLK 47894000 141 - 142 - /* 143 - * This is the rate at which the PIT timers get clocked 144 - */ 145 - #define CLKBY7 (MCLK / 7) 146 - 147 - /* 148 - * This is the counter value. We tick at 200Hz on this platform. 149 - */ 150 - #define COUNT ((CLKBY7 + (HZ / 2)) / HZ) 151 - 152 - /* 153 - * Get the time offset from the system PIT. Note that if we have missed an 154 - * interrupt, then the PIT counter will roll over (ie, be negative). 155 - * This actually works out to be convenient. 156 - */ 157 - static u32 ebsa110_gettimeoffset(void) 158 - { 159 - unsigned long offset, count; 160 - 161 - __raw_writeb(0x40, PIT_CTRL); 162 - count = __raw_readb(PIT_T1); 163 - count |= __raw_readb(PIT_T1) << 8; 164 - 165 - /* 166 - * If count > COUNT, make the number negative. 167 - */ 168 - if (count > COUNT) 169 - count |= 0xffff0000; 170 - 171 - offset = COUNT; 172 - offset -= count; 173 - 174 - /* 175 - * `offset' is in units of timer counts. Convert 176 - * offset to units of microseconds. 177 - */ 178 - offset = offset * (1000000 / HZ) / COUNT; 179 - 180 - return offset * 1000; 181 - } 182 - 183 - static irqreturn_t 184 - ebsa110_timer_interrupt(int irq, void *dev_id) 185 - { 186 - u32 count; 187 - 188 - /* latch and read timer 1 */ 189 - __raw_writeb(0x40, PIT_CTRL); 190 - count = __raw_readb(PIT_T1); 191 - count |= __raw_readb(PIT_T1) << 8; 192 - 193 - count += COUNT; 194 - 195 - __raw_writeb(count & 0xff, PIT_T1); 196 - __raw_writeb(count >> 8, PIT_T1); 197 - 198 - timer_tick(); 199 - 200 - return IRQ_HANDLED; 201 - } 202 - 203 - /* 204 - * Set up timer interrupt. 205 - */ 206 - void __init ebsa110_timer_init(void) 207 - { 208 - int irq = IRQ_EBSA110_TIMER0; 209 - 210 - arch_gettimeoffset = ebsa110_gettimeoffset; 211 - 212 - /* 213 - * Timer 1, mode 2, LSB/MSB 214 - */ 215 - __raw_writeb(0x70, PIT_CTRL); 216 - __raw_writeb(COUNT & 0xff, PIT_T1); 217 - __raw_writeb(COUNT >> 8, PIT_T1); 218 - 219 - if (request_irq(irq, ebsa110_timer_interrupt, IRQF_TIMER | IRQF_IRQPOLL, 220 - "EBSA110 Timer Tick", NULL)) 221 - pr_err("Failed to request irq %d (EBSA110 Timer Tick)\n", irq); 222 - } 223 - 224 - static struct plat_serial8250_port serial_platform_data[] = { 225 - { 226 - .iobase = 0x3f8, 227 - .irq = 1, 228 - .uartclk = 1843200, 229 - .regshift = 0, 230 - .iotype = UPIO_PORT, 231 - .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, 232 - }, 233 - { 234 - .iobase = 0x2f8, 235 - .irq = 2, 236 - .uartclk = 1843200, 237 - .regshift = 0, 238 - .iotype = UPIO_PORT, 239 - .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, 240 - }, 241 - { }, 242 - }; 243 - 244 - static struct platform_device serial_device = { 245 - .name = "serial8250", 246 - .id = PLAT8250_DEV_PLATFORM, 247 - .dev = { 248 - .platform_data = serial_platform_data, 249 - }, 250 - }; 251 - 252 - static struct resource am79c961_resources[] = { 253 - { 254 - .start = 0x220, 255 - .end = 0x238, 256 - .flags = IORESOURCE_IO, 257 - }, { 258 - .start = IRQ_EBSA110_ETHERNET, 259 - .end = IRQ_EBSA110_ETHERNET, 260 - .flags = IORESOURCE_IRQ, 261 - }, 262 - }; 263 - 264 - static struct platform_device am79c961_device = { 265 - .name = "am79c961", 266 - .id = -1, 267 - .num_resources = ARRAY_SIZE(am79c961_resources), 268 - .resource = am79c961_resources, 269 - }; 270 - 271 - static struct platform_device *ebsa110_devices[] = { 272 - &serial_device, 273 - &am79c961_device, 274 - }; 275 - 276 - /* 277 - * EBSA110 idling methodology: 278 - * 279 - * We can not execute the "wait for interrupt" instruction since that 280 - * will stop our MCLK signal (which provides the clock for the glue 281 - * logic, and therefore the timer interrupt). 282 - * 283 - * Instead, we spin, polling the IRQ_STAT register for the occurrence 284 - * of any interrupt with core clock down to the memory clock. 285 - */ 286 - static void ebsa110_idle(void) 287 - { 288 - const char *irq_stat = (char *)0xff000000; 289 - 290 - /* disable clock switching */ 291 - asm volatile ("mcr p15, 0, ip, c15, c2, 2" : : : "cc"); 292 - 293 - /* wait for an interrupt to occur */ 294 - while (!*irq_stat); 295 - 296 - /* enable clock switching */ 297 - asm volatile ("mcr p15, 0, ip, c15, c1, 2" : : : "cc"); 298 - } 299 - 300 - static int __init ebsa110_init(void) 301 - { 302 - arm_pm_idle = ebsa110_idle; 303 - return platform_add_devices(ebsa110_devices, ARRAY_SIZE(ebsa110_devices)); 304 - } 305 - 306 - arch_initcall(ebsa110_init); 307 - 308 - static void ebsa110_restart(enum reboot_mode mode, const char *cmd) 309 - { 310 - soft_restart(0x80000000); 311 - } 312 - 313 - MACHINE_START(EBSA110, "EBSA110") 314 - /* Maintainer: Russell King */ 315 - .atag_offset = 0x400, 316 - .reserve_lp0 = 1, 317 - .reserve_lp2 = 1, 318 - .map_io = ebsa110_map_io, 319 - .init_early = ebsa110_init_early, 320 - .init_irq = ebsa110_init_irq, 321 - .init_time = ebsa110_timer_init, 322 - .restart = ebsa110_restart, 323 - MACHINE_END
-38
arch/arm/mach-ebsa110/core.h
··· 1 - /* SPDX-License-Identifier: GPL-2.0-only */ 2 - /* 3 - * Copyright (C) 1996-2000 Russell King. 4 - * 5 - * This file contains the core hardware definitions of the EBSA-110. 6 - */ 7 - #ifndef CORE_H 8 - #define CORE_H 9 - 10 - /* Physical addresses/sizes */ 11 - #define ISAMEM_PHYS 0xe0000000 12 - #define ISAMEM_SIZE 0x10000000 13 - 14 - #define ISAIO_PHYS 0xf0000000 15 - #define ISAIO_SIZE PGDIR_SIZE 16 - 17 - #define TRICK0_PHYS 0xf2000000 18 - #define TRICK0_SIZE PGDIR_SIZE 19 - #define TRICK1_PHYS 0xf2400000 20 - #define TRICK1_SIZE PGDIR_SIZE 21 - #define TRICK2_PHYS 0xf2800000 22 - #define TRICK3_PHYS 0xf2c00000 23 - #define TRICK3_SIZE PGDIR_SIZE 24 - #define TRICK4_PHYS 0xf3000000 25 - #define TRICK4_SIZE PGDIR_SIZE 26 - #define TRICK5_PHYS 0xf3400000 27 - #define TRICK6_PHYS 0xf3800000 28 - #define TRICK7_PHYS 0xf3c00000 29 - 30 - /* Virtual addresses */ 31 - #define PIT_BASE IOMEM(0xfc000000) /* trick 0 */ 32 - #define SOFT_BASE IOMEM(0xfd000000) /* trick 1 */ 33 - #define IRQ_MASK IOMEM(0xfe000000) /* trick 3 - read */ 34 - #define IRQ_MSET IOMEM(0xfe000000) /* trick 3 - write */ 35 - #define IRQ_STAT IOMEM(0xff000000) /* trick 4 - read */ 36 - #define IRQ_MCLR IOMEM(0xff000000) /* trick 4 - write */ 37 - 38 - #endif
-33
arch/arm/mach-ebsa110/include/mach/entry-macro.S
··· 1 - /* 2 - * arch/arm/mach-ebsa110/include/mach/entry-macro.S 3 - * 4 - * Low-level IRQ helper macros for ebsa110 platform. 5 - * 6 - * This file is licensed under the terms of the GNU General Public 7 - * License version 2. This program is licensed "as is" without any 8 - * warranty of any kind, whether express or implied. 9 - */ 10 - 11 - 12 - 13 - #define IRQ_STAT 0xff000000 /* read */ 14 - 15 - .macro get_irqnr_preamble, base, tmp 16 - mov \base, #IRQ_STAT 17 - .endm 18 - 19 - .macro get_irqnr_and_base, irqnr, stat, base, tmp 20 - ldrb \stat, [\base] @ get interrupts 21 - mov \irqnr, #0 22 - tst \stat, #15 23 - addeq \irqnr, \irqnr, #4 24 - moveq \stat, \stat, lsr #4 25 - tst \stat, #3 26 - addeq \irqnr, \irqnr, #2 27 - moveq \stat, \stat, lsr #2 28 - tst \stat, #1 29 - addeq \irqnr, \irqnr, #1 30 - moveq \stat, \stat, lsr #1 31 - tst \stat, #1 @ bit 0 should be set 32 - .endm 33 -
-21
arch/arm/mach-ebsa110/include/mach/hardware.h
··· 1 - /* SPDX-License-Identifier: GPL-2.0-only */ 2 - /* 3 - * arch/arm/mach-ebsa110/include/mach/hardware.h 4 - * 5 - * Copyright (C) 1996-2000 Russell King. 6 - * 7 - * This file contains the hardware definitions of the EBSA-110. 8 - */ 9 - #ifndef __ASM_ARCH_HARDWARE_H 10 - #define __ASM_ARCH_HARDWARE_H 11 - 12 - #define ISAMEM_BASE 0xe0000000 13 - #define ISAIO_BASE 0xf0000000 14 - 15 - /* 16 - * RAM definitions 17 - */ 18 - #define UNCACHEABLE_ADDR 0xff000000 /* IRQ_STAT */ 19 - 20 - #endif 21 -
-89
arch/arm/mach-ebsa110/include/mach/io.h
··· 1 - /* SPDX-License-Identifier: GPL-2.0-only */ 2 - /* 3 - * arch/arm/mach-ebsa110/include/mach/io.h 4 - * 5 - * Copyright (C) 1997,1998 Russell King 6 - * 7 - * Modifications: 8 - * 06-Dec-1997 RMK Created. 9 - */ 10 - #ifndef __ASM_ARM_ARCH_IO_H 11 - #define __ASM_ARM_ARCH_IO_H 12 - 13 - u8 __inb8(unsigned int port); 14 - void __outb8(u8 val, unsigned int port); 15 - 16 - u8 __inb16(unsigned int port); 17 - void __outb16(u8 val, unsigned int port); 18 - 19 - u16 __inw(unsigned int port); 20 - void __outw(u16 val, unsigned int port); 21 - 22 - u32 __inl(unsigned int port); 23 - void __outl(u32 val, unsigned int port); 24 - 25 - u8 __readb(const volatile void __iomem *addr); 26 - u16 __readw(const volatile void __iomem *addr); 27 - u32 __readl(const volatile void __iomem *addr); 28 - 29 - void __writeb(u8 val, volatile void __iomem *addr); 30 - void __writew(u16 val, volatile void __iomem *addr); 31 - void __writel(u32 val, volatile void __iomem *addr); 32 - 33 - /* 34 - * Argh, someone forgot the IOCS16 line. We therefore have to handle 35 - * the byte stearing by selecting the correct byte IO functions here. 36 - */ 37 - #ifdef ISA_SIXTEEN_BIT_PERIPHERAL 38 - #define inb(p) __inb16(p) 39 - #define outb(v,p) __outb16(v,p) 40 - #else 41 - #define inb(p) __inb8(p) 42 - #define outb(v,p) __outb8(v,p) 43 - #endif 44 - 45 - #define inw(p) __inw(p) 46 - #define outw(v,p) __outw(v,p) 47 - 48 - #define inl(p) __inl(p) 49 - #define outl(v,p) __outl(v,p) 50 - 51 - #define readb(b) __readb(b) 52 - #define readw(b) __readw(b) 53 - #define readl(b) __readl(b) 54 - #define readb_relaxed(addr) readb(addr) 55 - #define readw_relaxed(addr) readw(addr) 56 - #define readl_relaxed(addr) readl(addr) 57 - 58 - #define writeb(v,b) __writeb(v,b) 59 - #define writew(v,b) __writew(v,b) 60 - #define writel(v,b) __writel(v,b) 61 - 62 - #define insb insb 63 - extern void insb(unsigned int port, void *buf, int sz); 64 - #define insw insw 65 - extern void insw(unsigned int port, void *buf, int sz); 66 - #define insl insl 67 - extern void insl(unsigned int port, void *buf, int sz); 68 - 69 - #define outsb outsb 70 - extern void outsb(unsigned int port, const void *buf, int sz); 71 - #define outsw outsw 72 - extern void outsw(unsigned int port, const void *buf, int sz); 73 - #define outsl outsl 74 - extern void outsl(unsigned int port, const void *buf, int sz); 75 - 76 - /* can't support writesb atm */ 77 - #define writesw writesw 78 - extern void writesw(volatile void __iomem *addr, const void *data, int wordlen); 79 - #define writesl writesl 80 - extern void writesl(volatile void __iomem *addr, const void *data, int longlen); 81 - 82 - /* can't support readsb atm */ 83 - #define readsw readsw 84 - extern void readsw(const volatile void __iomem *addr, void *data, int wordlen); 85 - 86 - #define readsl readsl 87 - extern void readsl(const volatile void __iomem *addr, void *data, int longlen); 88 - 89 - #endif
-17
arch/arm/mach-ebsa110/include/mach/irqs.h
··· 1 - /* SPDX-License-Identifier: GPL-2.0-only */ 2 - /* 3 - * arch/arm/mach-ebsa110/include/mach/irqs.h 4 - * 5 - * Copyright (C) 1996 Russell King 6 - */ 7 - 8 - #define NR_IRQS 8 9 - 10 - #define IRQ_EBSA110_PRINTER 0 11 - #define IRQ_EBSA110_COM1 1 12 - #define IRQ_EBSA110_COM2 2 13 - #define IRQ_EBSA110_ETHERNET 3 14 - #define IRQ_EBSA110_TIMER0 4 15 - #define IRQ_EBSA110_TIMER1 5 16 - #define IRQ_EBSA110_PCMCIA 6 17 - #define IRQ_EBSA110_IMMEDIATE 7
-22
arch/arm/mach-ebsa110/include/mach/memory.h
··· 1 - /* SPDX-License-Identifier: GPL-2.0-only */ 2 - /* 3 - * arch/arm/mach-ebsa110/include/mach/memory.h 4 - * 5 - * Copyright (C) 1996-1999 Russell King. 6 - * 7 - * Changelog: 8 - * 20-Oct-1996 RMK Created 9 - * 31-Dec-1997 RMK Fixed definitions to reduce warnings 10 - * 21-Mar-1999 RMK Renamed to memory.h 11 - * RMK Moved TASK_SIZE and PAGE_OFFSET here 12 - */ 13 - #ifndef __ASM_ARCH_MEMORY_H 14 - #define __ASM_ARCH_MEMORY_H 15 - 16 - /* 17 - * Cache flushing area - SRAM 18 - */ 19 - #define FLUSH_BASE_PHYS 0x40000000 20 - #define FLUSH_BASE 0xdf000000 21 - 22 - #endif
-41
arch/arm/mach-ebsa110/include/mach/uncompress.h
··· 1 - /* SPDX-License-Identifier: GPL-2.0-only */ 2 - /* 3 - * arch/arm/mach-ebsa110/include/mach/uncompress.h 4 - * 5 - * Copyright (C) 1996,1997,1998 Russell King 6 - */ 7 - 8 - #include <linux/serial_reg.h> 9 - 10 - #define SERIAL_BASE ((unsigned char *)0xf0000be0) 11 - 12 - /* 13 - * This does not append a newline 14 - */ 15 - static inline void putc(int c) 16 - { 17 - unsigned char v, *base = SERIAL_BASE; 18 - 19 - do { 20 - v = base[UART_LSR << 2]; 21 - barrier(); 22 - } while (!(v & UART_LSR_THRE)); 23 - 24 - base[UART_TX << 2] = c; 25 - } 26 - 27 - static inline void flush(void) 28 - { 29 - unsigned char v, *base = SERIAL_BASE; 30 - 31 - do { 32 - v = base[UART_LSR << 2]; 33 - barrier(); 34 - } while ((v & (UART_LSR_TEMT|UART_LSR_THRE)) != 35 - (UART_LSR_TEMT|UART_LSR_THRE)); 36 - } 37 - 38 - /* 39 - * nothing to do 40 - */ 41 - #define arch_decomp_setup()
-440
arch/arm/mach-ebsa110/io.c
··· 1 - // SPDX-License-Identifier: GPL-2.0 2 - /* 3 - * linux/arch/arm/mach-ebsa110/isamem.c 4 - * 5 - * Copyright (C) 2001 Russell King 6 - * 7 - * Perform "ISA" memory and IO accesses. The EBSA110 has some "peculiarities" 8 - * in the way it handles accesses to odd IO ports on 16-bit devices. These 9 - * devices have their D0-D15 lines connected to the processors D0-D15 lines. 10 - * Since they expect all byte IO operations to be performed on D0-D7, and the 11 - * StrongARM expects to transfer the byte to these odd addresses on D8-D15, 12 - * we must use a trick to get the required behaviour. 13 - * 14 - * The trick employed here is to use long word stores to odd address -1. The 15 - * glue logic picks this up as a "trick" access, and asserts the LSB of the 16 - * peripherals address bus, thereby accessing the odd IO port. Meanwhile, the 17 - * StrongARM transfers its data on D0-D7 as expected. 18 - * 19 - * Things get more interesting on the pass-1 EBSA110 - the PCMCIA controller 20 - * wiring was screwed in such a way that it had limited memory space access. 21 - * Luckily, the work-around for this is not too horrible. See 22 - * __isamem_convert_addr for the details. 23 - */ 24 - #include <linux/module.h> 25 - #include <linux/kernel.h> 26 - #include <linux/types.h> 27 - #include <linux/io.h> 28 - 29 - #include <mach/hardware.h> 30 - #include <asm/page.h> 31 - 32 - static void __iomem *__isamem_convert_addr(const volatile void __iomem *addr) 33 - { 34 - u32 ret, a = (u32 __force) addr; 35 - 36 - /* 37 - * The PCMCIA controller is wired up as follows: 38 - * +---------+---------+---------+---------+---------+---------+ 39 - * PCMCIA | 2 2 2 2 | 1 1 1 1 | 1 1 1 1 | 1 1 | | | 40 - * | 3 2 1 0 | 9 8 7 6 | 5 4 3 2 | 1 0 9 8 | 7 6 5 4 | 3 2 1 0 | 41 - * +---------+---------+---------+---------+---------+---------+ 42 - * CPU | 2 2 2 2 | 2 1 1 1 | 1 1 1 1 | 1 1 1 | | | 43 - * | 4 3 2 1 | 0 9 9 8 | 7 6 5 4 | 3 2 0 9 | 8 7 6 5 | 4 3 2 x | 44 - * +---------+---------+---------+---------+---------+---------+ 45 - * 46 - * This means that we can access PCMCIA regions as follows: 47 - * 0x*10000 -> 0x*1ffff 48 - * 0x*70000 -> 0x*7ffff 49 - * 0x*90000 -> 0x*9ffff 50 - * 0x*f0000 -> 0x*fffff 51 - */ 52 - ret = (a & 0xf803fe) << 1; 53 - ret |= (a & 0x03fc00) << 2; 54 - 55 - ret += 0xe8000000; 56 - 57 - if ((a & 0x20000) == (a & 0x40000) >> 1) 58 - return (void __iomem *)ret; 59 - 60 - BUG(); 61 - return NULL; 62 - } 63 - 64 - /* 65 - * read[bwl] and write[bwl] 66 - */ 67 - u8 __readb(const volatile void __iomem *addr) 68 - { 69 - void __iomem *a = __isamem_convert_addr(addr); 70 - u32 ret; 71 - 72 - if ((unsigned long)addr & 1) 73 - ret = __raw_readl(a); 74 - else 75 - ret = __raw_readb(a); 76 - return ret; 77 - } 78 - 79 - u16 __readw(const volatile void __iomem *addr) 80 - { 81 - void __iomem *a = __isamem_convert_addr(addr); 82 - 83 - if ((unsigned long)addr & 1) 84 - BUG(); 85 - 86 - return __raw_readw(a); 87 - } 88 - 89 - u32 __readl(const volatile void __iomem *addr) 90 - { 91 - void __iomem *a = __isamem_convert_addr(addr); 92 - u32 ret; 93 - 94 - if ((unsigned long)addr & 3) 95 - BUG(); 96 - 97 - ret = __raw_readw(a); 98 - ret |= __raw_readw(a + 4) << 16; 99 - return ret; 100 - } 101 - 102 - EXPORT_SYMBOL(__readb); 103 - EXPORT_SYMBOL(__readw); 104 - EXPORT_SYMBOL(__readl); 105 - 106 - void readsw(const volatile void __iomem *addr, void *data, int len) 107 - { 108 - void __iomem *a = __isamem_convert_addr(addr); 109 - 110 - BUG_ON((unsigned long)addr & 1); 111 - 112 - __raw_readsw(a, data, len); 113 - } 114 - EXPORT_SYMBOL(readsw); 115 - 116 - void readsl(const volatile void __iomem *addr, void *data, int len) 117 - { 118 - void __iomem *a = __isamem_convert_addr(addr); 119 - 120 - BUG_ON((unsigned long)addr & 3); 121 - 122 - __raw_readsl(a, data, len); 123 - } 124 - EXPORT_SYMBOL(readsl); 125 - 126 - void __writeb(u8 val, volatile void __iomem *addr) 127 - { 128 - void __iomem *a = __isamem_convert_addr(addr); 129 - 130 - if ((unsigned long)addr & 1) 131 - __raw_writel(val, a); 132 - else 133 - __raw_writeb(val, a); 134 - } 135 - 136 - void __writew(u16 val, volatile void __iomem *addr) 137 - { 138 - void __iomem *a = __isamem_convert_addr(addr); 139 - 140 - if ((unsigned long)addr & 1) 141 - BUG(); 142 - 143 - __raw_writew(val, a); 144 - } 145 - 146 - void __writel(u32 val, volatile void __iomem *addr) 147 - { 148 - void __iomem *a = __isamem_convert_addr(addr); 149 - 150 - if ((unsigned long)addr & 3) 151 - BUG(); 152 - 153 - __raw_writew(val, a); 154 - __raw_writew(val >> 16, a + 4); 155 - } 156 - 157 - EXPORT_SYMBOL(__writeb); 158 - EXPORT_SYMBOL(__writew); 159 - EXPORT_SYMBOL(__writel); 160 - 161 - void writesw(volatile void __iomem *addr, const void *data, int len) 162 - { 163 - void __iomem *a = __isamem_convert_addr(addr); 164 - 165 - BUG_ON((unsigned long)addr & 1); 166 - 167 - __raw_writesw(a, data, len); 168 - } 169 - EXPORT_SYMBOL(writesw); 170 - 171 - void writesl(volatile void __iomem *addr, const void *data, int len) 172 - { 173 - void __iomem *a = __isamem_convert_addr(addr); 174 - 175 - BUG_ON((unsigned long)addr & 3); 176 - 177 - __raw_writesl(a, data, len); 178 - } 179 - EXPORT_SYMBOL(writesl); 180 - 181 - /* 182 - * The EBSA110 has a weird "ISA IO" region: 183 - * 184 - * Region 0 (addr = 0xf0000000 + io << 2) 185 - * -------------------------------------------------------- 186 - * Physical region IO region 187 - * f0000fe0 - f0000ffc 3f8 - 3ff ttyS0 188 - * f0000e60 - f0000e64 398 - 399 189 - * f0000de0 - f0000dfc 378 - 37f lp0 190 - * f0000be0 - f0000bfc 2f8 - 2ff ttyS1 191 - * 192 - * Region 1 (addr = 0xf0000000 + (io & ~1) << 1 + (io & 1)) 193 - * -------------------------------------------------------- 194 - * Physical region IO region 195 - * f00014f1 a79 pnp write data 196 - * f00007c0 - f00007c1 3e0 - 3e1 pcmcia 197 - * f00004f1 279 pnp address 198 - * f0000440 - f000046c 220 - 236 eth0 199 - * f0000405 203 pnp read data 200 - */ 201 - #define SUPERIO_PORT(p) \ 202 - (((p) >> 3) == (0x3f8 >> 3) || \ 203 - ((p) >> 3) == (0x2f8 >> 3) || \ 204 - ((p) >> 3) == (0x378 >> 3)) 205 - 206 - /* 207 - * We're addressing an 8 or 16-bit peripheral which tranfers 208 - * odd addresses on the low ISA byte lane. 209 - */ 210 - u8 __inb8(unsigned int port) 211 - { 212 - u32 ret; 213 - 214 - /* 215 - * The SuperIO registers use sane addressing techniques... 216 - */ 217 - if (SUPERIO_PORT(port)) 218 - ret = __raw_readb((void __iomem *)ISAIO_BASE + (port << 2)); 219 - else { 220 - void __iomem *a = (void __iomem *)ISAIO_BASE + ((port & ~1) << 1); 221 - 222 - /* 223 - * Shame nothing else does 224 - */ 225 - if (port & 1) 226 - ret = __raw_readl(a); 227 - else 228 - ret = __raw_readb(a); 229 - } 230 - return ret; 231 - } 232 - 233 - /* 234 - * We're addressing a 16-bit peripheral which transfers odd 235 - * addresses on the high ISA byte lane. 236 - */ 237 - u8 __inb16(unsigned int port) 238 - { 239 - unsigned int offset; 240 - 241 - /* 242 - * The SuperIO registers use sane addressing techniques... 243 - */ 244 - if (SUPERIO_PORT(port)) 245 - offset = port << 2; 246 - else 247 - offset = (port & ~1) << 1 | (port & 1); 248 - 249 - return __raw_readb((void __iomem *)ISAIO_BASE + offset); 250 - } 251 - 252 - u16 __inw(unsigned int port) 253 - { 254 - unsigned int offset; 255 - 256 - /* 257 - * The SuperIO registers use sane addressing techniques... 258 - */ 259 - if (SUPERIO_PORT(port)) 260 - offset = port << 2; 261 - else { 262 - offset = port << 1; 263 - BUG_ON(port & 1); 264 - } 265 - return __raw_readw((void __iomem *)ISAIO_BASE + offset); 266 - } 267 - 268 - /* 269 - * Fake a 32-bit read with two 16-bit reads. Needed for 3c589. 270 - */ 271 - u32 __inl(unsigned int port) 272 - { 273 - void __iomem *a; 274 - 275 - if (SUPERIO_PORT(port) || port & 3) 276 - BUG(); 277 - 278 - a = (void __iomem *)ISAIO_BASE + ((port & ~1) << 1); 279 - 280 - return __raw_readw(a) | __raw_readw(a + 4) << 16; 281 - } 282 - 283 - EXPORT_SYMBOL(__inb8); 284 - EXPORT_SYMBOL(__inb16); 285 - EXPORT_SYMBOL(__inw); 286 - EXPORT_SYMBOL(__inl); 287 - 288 - void __outb8(u8 val, unsigned int port) 289 - { 290 - /* 291 - * The SuperIO registers use sane addressing techniques... 292 - */ 293 - if (SUPERIO_PORT(port)) 294 - __raw_writeb(val, (void __iomem *)ISAIO_BASE + (port << 2)); 295 - else { 296 - void __iomem *a = (void __iomem *)ISAIO_BASE + ((port & ~1) << 1); 297 - 298 - /* 299 - * Shame nothing else does 300 - */ 301 - if (port & 1) 302 - __raw_writel(val, a); 303 - else 304 - __raw_writeb(val, a); 305 - } 306 - } 307 - 308 - void __outb16(u8 val, unsigned int port) 309 - { 310 - unsigned int offset; 311 - 312 - /* 313 - * The SuperIO registers use sane addressing techniques... 314 - */ 315 - if (SUPERIO_PORT(port)) 316 - offset = port << 2; 317 - else 318 - offset = (port & ~1) << 1 | (port & 1); 319 - 320 - __raw_writeb(val, (void __iomem *)ISAIO_BASE + offset); 321 - } 322 - 323 - void __outw(u16 val, unsigned int port) 324 - { 325 - unsigned int offset; 326 - 327 - /* 328 - * The SuperIO registers use sane addressing techniques... 329 - */ 330 - if (SUPERIO_PORT(port)) 331 - offset = port << 2; 332 - else { 333 - offset = port << 1; 334 - BUG_ON(port & 1); 335 - } 336 - __raw_writew(val, (void __iomem *)ISAIO_BASE + offset); 337 - } 338 - 339 - void __outl(u32 val, unsigned int port) 340 - { 341 - BUG(); 342 - } 343 - 344 - EXPORT_SYMBOL(__outb8); 345 - EXPORT_SYMBOL(__outb16); 346 - EXPORT_SYMBOL(__outw); 347 - EXPORT_SYMBOL(__outl); 348 - 349 - void outsb(unsigned int port, const void *from, int len) 350 - { 351 - u32 off; 352 - 353 - if (SUPERIO_PORT(port)) 354 - off = port << 2; 355 - else { 356 - off = (port & ~1) << 1; 357 - if (port & 1) 358 - BUG(); 359 - } 360 - 361 - __raw_writesb((void __iomem *)ISAIO_BASE + off, from, len); 362 - } 363 - 364 - void insb(unsigned int port, void *from, int len) 365 - { 366 - u32 off; 367 - 368 - if (SUPERIO_PORT(port)) 369 - off = port << 2; 370 - else { 371 - off = (port & ~1) << 1; 372 - if (port & 1) 373 - BUG(); 374 - } 375 - 376 - __raw_readsb((void __iomem *)ISAIO_BASE + off, from, len); 377 - } 378 - 379 - EXPORT_SYMBOL(outsb); 380 - EXPORT_SYMBOL(insb); 381 - 382 - void outsw(unsigned int port, const void *from, int len) 383 - { 384 - u32 off; 385 - 386 - if (SUPERIO_PORT(port)) 387 - off = port << 2; 388 - else { 389 - off = (port & ~1) << 1; 390 - if (port & 1) 391 - BUG(); 392 - } 393 - 394 - __raw_writesw((void __iomem *)ISAIO_BASE + off, from, len); 395 - } 396 - 397 - void insw(unsigned int port, void *from, int len) 398 - { 399 - u32 off; 400 - 401 - if (SUPERIO_PORT(port)) 402 - off = port << 2; 403 - else { 404 - off = (port & ~1) << 1; 405 - if (port & 1) 406 - BUG(); 407 - } 408 - 409 - __raw_readsw((void __iomem *)ISAIO_BASE + off, from, len); 410 - } 411 - 412 - EXPORT_SYMBOL(outsw); 413 - EXPORT_SYMBOL(insw); 414 - 415 - /* 416 - * We implement these as 16-bit insw/outsw, mainly for 417 - * 3c589 cards. 418 - */ 419 - void outsl(unsigned int port, const void *from, int len) 420 - { 421 - u32 off = port << 1; 422 - 423 - if (SUPERIO_PORT(port) || port & 3) 424 - BUG(); 425 - 426 - __raw_writesw((void __iomem *)ISAIO_BASE + off, from, len << 1); 427 - } 428 - 429 - void insl(unsigned int port, void *from, int len) 430 - { 431 - u32 off = port << 1; 432 - 433 - if (SUPERIO_PORT(port) || port & 3) 434 - BUG(); 435 - 436 - __raw_readsw((void __iomem *)ISAIO_BASE + off, from, len << 1); 437 - } 438 - 439 - EXPORT_SYMBOL(outsl); 440 - EXPORT_SYMBOL(insl);
-71
arch/arm/mach-ebsa110/leds.c
··· 1 - // SPDX-License-Identifier: GPL-2.0-only 2 - /* 3 - * Driver for the LED found on the EBSA110 machine 4 - * Based on Versatile and RealView machine LED code 5 - * 6 - * Author: Bryan Wu <bryan.wu@canonical.com> 7 - */ 8 - #include <linux/kernel.h> 9 - #include <linux/init.h> 10 - #include <linux/io.h> 11 - #include <linux/slab.h> 12 - #include <linux/leds.h> 13 - 14 - #include <asm/mach-types.h> 15 - 16 - #include "core.h" 17 - 18 - #if defined(CONFIG_NEW_LEDS) && defined(CONFIG_LEDS_CLASS) 19 - static void ebsa110_led_set(struct led_classdev *cdev, 20 - enum led_brightness b) 21 - { 22 - u8 reg = __raw_readb(SOFT_BASE); 23 - 24 - if (b != LED_OFF) 25 - reg |= 0x80; 26 - else 27 - reg &= ~0x80; 28 - 29 - __raw_writeb(reg, SOFT_BASE); 30 - } 31 - 32 - static enum led_brightness ebsa110_led_get(struct led_classdev *cdev) 33 - { 34 - u8 reg = __raw_readb(SOFT_BASE); 35 - 36 - return (reg & 0x80) ? LED_FULL : LED_OFF; 37 - } 38 - 39 - static int __init ebsa110_leds_init(void) 40 - { 41 - 42 - struct led_classdev *cdev; 43 - int ret; 44 - 45 - if (!machine_is_ebsa110()) 46 - return -ENODEV; 47 - 48 - cdev = kzalloc(sizeof(*cdev), GFP_KERNEL); 49 - if (!cdev) 50 - return -ENOMEM; 51 - 52 - cdev->name = "ebsa110:0"; 53 - cdev->brightness_set = ebsa110_led_set; 54 - cdev->brightness_get = ebsa110_led_get; 55 - cdev->default_trigger = "heartbeat"; 56 - 57 - ret = led_classdev_register(NULL, cdev); 58 - if (ret < 0) { 59 - kfree(cdev); 60 - return ret; 61 - } 62 - 63 - return 0; 64 - } 65 - 66 - /* 67 - * Since we may have triggers on any subsystem, defer registration 68 - * until after subsystem_init. 69 - */ 70 - fs_initcall(ebsa110_leds_init); 71 - #endif
+1 -1
drivers/watchdog/Kconfig
··· 599 599 600 600 config ORION_WATCHDOG 601 601 tristate "Orion watchdog" 602 - depends on ARCH_ORION5X || ARCH_DOVE || MACH_DOVE || ARCH_MVEBU || (COMPILE_TEST && !ARCH_EBSA110) 602 + depends on ARCH_ORION5X || ARCH_DOVE || MACH_DOVE || ARCH_MVEBU || COMPILE_TEST 603 603 depends on ARM 604 604 select WATCHDOG_CORE 605 605 help