From mboxrd@z Thu Jan 1 00:00:00 1970 From: Arnd Bergmann Date: Fri, 30 Oct 2020 15:17:44 +0000 Subject: [PATCH v2 01/15] ARM: remove ebsa110 platform Message-Id: <20201030151758.1241164-2-arnd@kernel.org> List-Id: References: <20201030151758.1241164-1-arnd@kernel.org> In-Reply-To: <20201030151758.1241164-1-arnd@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable To: linux-kernel@vger.kernel.org Cc: Thomas Gleixner , Arnd Bergmann , Russell King , Tony Luck , Fenghua Yu , Greg Ungerer , Finn Thain , Philip Blundell , Joshua Thompson , Sam Creasey , "James E.J. Bottomley" , Helge Deller , Daniel Lezcano , John Stultz , Stephen Boyd , Linus Walleij , linux-ia64@vger.kernel.org, Parisc List , linux-m68k , Linux ARM , Russell King From: Arnd Bergmann 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 Signed-off-by: Arnd Bergmann --- MAINTAINERS | 8 - arch/arm/Kconfig | 24 +- arch/arm/Kconfig.debug | 6 +- arch/arm/Makefile | 8 - arch/arm/configs/ebsa110_defconfig | 74 --- arch/arm/kernel/Makefile | 6 +- arch/arm/mach-ebsa110/Makefile | 8 - arch/arm/mach-ebsa110/Makefile.boot | 5 - arch/arm/mach-ebsa110/core.c | 323 ------------- arch/arm/mach-ebsa110/core.h | 38 -- .../mach-ebsa110/include/mach/entry-macro.S | 33 -- arch/arm/mach-ebsa110/include/mach/hardware.h | 21 - arch/arm/mach-ebsa110/include/mach/io.h | 89 ---- arch/arm/mach-ebsa110/include/mach/irqs.h | 17 - arch/arm/mach-ebsa110/include/mach/memory.h | 22 - .../mach-ebsa110/include/mach/uncompress.h | 41 -- arch/arm/mach-ebsa110/io.c | 440 ------------------ arch/arm/mach-ebsa110/leds.c | 71 --- drivers/watchdog/Kconfig | 2 +- 19 files changed, 7 insertions(+), 1229 deletions(-) delete mode 100644 arch/arm/configs/ebsa110_defconfig delete mode 100644 arch/arm/mach-ebsa110/Makefile delete mode 100644 arch/arm/mach-ebsa110/Makefile.boot delete mode 100644 arch/arm/mach-ebsa110/core.c delete mode 100644 arch/arm/mach-ebsa110/core.h delete mode 100644 arch/arm/mach-ebsa110/include/mach/entry-macro.S delete mode 100644 arch/arm/mach-ebsa110/include/mach/hardware.h delete mode 100644 arch/arm/mach-ebsa110/include/mach/io.h delete mode 100644 arch/arm/mach-ebsa110/include/mach/irqs.h delete mode 100644 arch/arm/mach-ebsa110/include/mach/memory.h delete mode 100644 arch/arm/mach-ebsa110/include/mach/uncompress.h delete mode 100644 arch/arm/mach-ebsa110/io.c delete mode 100644 arch/arm/mach-ebsa110/leds.c diff --git a/MAINTAINERS b/MAINTAINERS index e73636b75f29..12c6a9028ed2 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1789,14 +1789,6 @@ F: drivers/firmware/turris-mox-rwtm.c F: drivers/gpio/gpio-moxtet.c F: include/linux/moxtet.h =20 -ARM/EBSA110 MACHINE SUPPORT -M: Russell King -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained -W: http://www.armlinux.org.uk/ -F: arch/arm/mach-ebsa110/ -F: drivers/net/ethernet/amd/am79c961a.* - ARM/ENERGY MICRO (SILICON LABS) EFM32 SUPPORT M: Uwe Kleine-K=C3=B6nig R: Pengutronix Kernel Team diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index fe2f17eb2b50..1b9fda08b92f 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -267,8 +267,7 @@ config PHYS_OFFSET hex "Physical address of main memory" if MMU depends on !ARM_PATCH_PHYS_VIRT default DRAM_BASE if !MMU - default 0x00000000 if ARCH_EBSA110 || \ - ARCH_FOOTBRIDGE + default 0x00000000 ARCH_FOOTBRIDGE default 0x10000000 if ARCH_OMAP1 || ARCH_RPC default 0x20000000 if ARCH_S5PV210 default 0xc0000000 if ARCH_SA1100 @@ -342,20 +341,6 @@ config ARM_SINGLE_ARMV7M select SPARSE_IRQ select USE_OF =20 -config ARCH_EBSA110 - bool "EBSA-110" - select ARCH_USES_GETTIMEOFFSET - select CPU_SA110 - select ISA - select NEED_MACH_IO_H - select NEED_MACH_MEMORY_H - select NO_IOPORT_MAP - help - This is an evaluation board for the StrongARM processor available - from Digital. It has limited hardware on-board, including an - Ethernet interface, two PCMCIA sockets, two serial ports and a - parallel port. - config ARCH_EP93XX bool "EP93xx-based" select ARCH_SPARSEMEM_ENABLE @@ -1371,7 +1356,6 @@ config ARCH_NR_GPIO =20 config HZ_FIXED int - default 200 if ARCH_EBSA110 default 128 if SOC_AT91RM9200 default 0 =20 @@ -1587,9 +1571,7 @@ config FORCE_MAX_ZONEORDER a value of 11 means that the largest free memory block is 2^10 pages. =20 config ALIGNMENT_TRAP - bool - depends on CPU_CP15_MMU - default y if !ARCH_EBSA110 + def_bool CPU_CP15_MMU select HAVE_PROC_CPU if PROC_FS help ARM processors cannot fetch/store information which is not @@ -1784,7 +1766,7 @@ config CMDLINE string "Default kernel command string" default "" help - On some architectures (EBSA110 and CATS), there is currently no way + On some architectures (e.g. CATS), there is currently no way for the boot loader to pass arguments to the kernel. For these architectures, you should supply some command-line options at build time by entering them here. As a minimum, you should specify the diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug index 8986a91a6f31..4ff04201a8cc 100644 --- a/arch/arm/Kconfig.debug +++ b/arch/arm/Kconfig.debug @@ -1567,7 +1567,7 @@ config DEBUG_SIRFSOC_UART config DEBUG_UART_FLOW_CONTROL bool "Enable flow control (CTS) for the debug UART" depends on DEBUG_LL - default y if ARCH_EBSA110 || DEBUG_FOOTBRIDGE_COM1 || DEBUG_GEMINI || ARC= H_RPC + default y if DEBUG_FOOTBRIDGE_COM1 || DEBUG_GEMINI || ARCH_RPC help Some UART ports are connected to terminals that will use modem control signals to indicate whether they are ready to receive text. @@ -1639,7 +1639,7 @@ config DEBUG_UART_PL01X =20 # Compatibility options for 8250 config DEBUG_UART_8250 - def_bool ARCH_EBSA110 || ARCH_IOP32X || ARCH_IXP4XX || ARCH_RPC + def_bool ARCH_IOP32X || ARCH_IXP4XX || ARCH_RPC =20 config DEBUG_UART_PHYS hex "Physical base address of debug UART" @@ -1743,7 +1743,6 @@ config DEBUG_UART_PHYS default 0xe8008000 if DEBUG_R7S72100_SCIF2 || DEBUG_R7S9210_SCIF2 default 0xe8009000 if DEBUG_R7S9210_SCIF4 default 0xf0000000 if DEBUG_DIGICOLOR_UA0 - default 0xf0000be0 if ARCH_EBSA110 default 0xf1012000 if DEBUG_MVEBU_UART0_ALTERNATE default 0xf1012100 if DEBUG_MVEBU_UART1_ALTERNATE default 0xf7fc9000 if DEBUG_BERLIN_UART @@ -1790,7 +1789,6 @@ config DEBUG_UART_VIRT default 0xc8821000 if DEBUG_RV1108_UART1 default 0xc8912000 if DEBUG_RV1108_UART0 default 0xe0010fe0 if ARCH_RPC - default 0xf0000be0 if ARCH_EBSA110 default 0xf0010000 if DEBUG_ASM9260_UART default 0xf0100000 if DEBUG_DIGICOLOR_UA0 default 0xf01fb000 if DEBUG_NOMADIK_UART diff --git a/arch/arm/Makefile b/arch/arm/Makefile index 4d76eab2b22d..64999d94ed1b 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile @@ -172,7 +172,6 @@ machine-$(CONFIG_ARCH_CNS3XXX) +=3D cns3xxx machine-$(CONFIG_ARCH_DAVINCI) +=3D davinci machine-$(CONFIG_ARCH_DIGICOLOR) +=3D digicolor machine-$(CONFIG_ARCH_DOVE) +=3D dove -machine-$(CONFIG_ARCH_EBSA110) +=3D ebsa110 machine-$(CONFIG_ARCH_EFM32) +=3D efm32 machine-$(CONFIG_ARCH_EP93XX) +=3D ep93xx machine-$(CONFIG_ARCH_EXYNOS) +=3D exynos @@ -239,13 +238,6 @@ plat-$(CONFIG_PLAT_ORION) +=3D orion plat-$(CONFIG_PLAT_PXA) +=3D pxa plat-$(CONFIG_PLAT_VERSATILE) +=3D versatile =20 -ifeq ($(CONFIG_ARCH_EBSA110),y) -# This is what happens if you forget the IOCS16 line. -# PCMCIA cards stop working. -CFLAGS_3c589_cs.o :=3D-DISA_SIXTEEN_BIT_PERIPHERAL -export CFLAGS_3c589_cs.o -endif - # The byte offset of the kernel image in RAM from the start of RAM. TEXT_OFFSET :=3D $(textofs-y) =20 diff --git a/arch/arm/configs/ebsa110_defconfig b/arch/arm/configs/ebsa110_= defconfig deleted file mode 100644 index 731a22a55f4e..000000000000 --- a/arch/arm/configs/ebsa110_defconfig +++ /dev/null @@ -1,74 +0,0 @@ -CONFIG_SYSVIPC=3Dy -CONFIG_BSD_PROCESS_ACCT=3Dy -CONFIG_LOG_BUF_SHIFT=14 -CONFIG_EXPERT=3Dy -CONFIG_MODULES=3Dy -CONFIG_ARCH_EBSA110=3Dy -CONFIG_PCCARD=3Dm -CONFIG_I82365=3Dm -CONFIG_LEDS=3Dy -CONFIG_ZBOOT_ROM_TEXT=3D0x0 -CONFIG_ZBOOT_ROM_BSS=3D0x0 -CONFIG_CMDLINE=3D"root=3D/dev/nfs rw mem=16M console=3DttyS1,38400n8" -CONFIG_FPE_NWFPE=3Dy -CONFIG_FPE_FASTFPE=3Dy -CONFIG_BINFMT_AOUT=3Dy -CONFIG_NET=3Dy -CONFIG_PACKET=3Dy -CONFIG_UNIX=3Dy -CONFIG_INET=3Dy -CONFIG_IP_MULTICAST=3Dy -CONFIG_IP_ADVANCED_ROUTER=3Dy -CONFIG_IP_MULTIPLE_TABLES=3Dy -CONFIG_IP_ROUTE_VERBOSE=3Dy -CONFIG_IP_PNP=3Dy -CONFIG_IP_PNP_BOOTP=3Dy -CONFIG_SYN_COOKIES=3Dy -CONFIG_IPV6=3Dy -CONFIG_NETFILTER=3Dy -CONFIG_IP_NF_IPTABLES=3Dy -CONFIG_IP_NF_MATCH_ECN=3Dy -CONFIG_IP_NF_MATCH_TTL=3Dy -CONFIG_IP_NF_FILTER=3Dy -CONFIG_IP_NF_TARGET_REJECT=3Dy -CONFIG_IP_NF_TARGET_LOG=3Dy -CONFIG_IP_NF_MANGLE=3Dy -CONFIG_IP_NF_TARGET_ECN=3Dy -CONFIG_IP6_NF_IPTABLES=3Dy -CONFIG_IP6_NF_MATCH_FRAG=3Dy -CONFIG_IP6_NF_MATCH_OPTS=3Dy -CONFIG_IP6_NF_MATCH_HL=3Dy -CONFIG_IP6_NF_MATCH_RT=3Dy -CONFIG_IP6_NF_FILTER=3Dy -CONFIG_IP6_NF_MANGLE=3Dy -CONFIG_FW_LOADER=3Dm -CONFIG_PARPORT=3Dy -CONFIG_PARPORT_PC=3Dy -CONFIG_PARPORT_PC_FIFO=3Dy -CONFIG_PARPORT_1284=3Dy -CONFIG_BLK_DEV_RAM=3Dy -CONFIG_NETDEVICES=3Dy -CONFIG_NET_ETHERNET=3Dy -CONFIG_ARM_AM79C961A=3Dy -CONFIG_NET_PCMCIA=3Dy -CONFIG_PCMCIA_PCNET=3Dm -CONFIG_PPP=3Dm -CONFIG_PPP_ASYNC=3Dm -CONFIG_PPP_DEFLATE=3Dm -CONFIG_PPP_BSDCOMP=3Dm -# CONFIG_INPUT is not set -# CONFIG_SERIO is not set -# CONFIG_VT is not set -CONFIG_SERIAL_8250=3Dy -CONFIG_SERIAL_8250_CONSOLE=3Dy -CONFIG_SERIAL_8250_CS=3Dm -CONFIG_PRINTER=3Dm -CONFIG_WATCHDOG=3Dy -CONFIG_SOFT_WATCHDOG=3Dy -CONFIG_AUTOFS4_FS=3Dy -CONFIG_MINIX_FS=3Dy -CONFIG_NFS_FS=3Dy -CONFIG_NFS_V3=3Dy -CONFIG_ROOT_NFS=3Dy -CONFIG_PARTITION_ADVANCED=3Dy -# CONFIG_MSDOS_PARTITION is not set diff --git a/arch/arm/kernel/Makefile b/arch/arm/kernel/Makefile index 89e5d864e923..09e67cb02b20 100644 --- a/arch/arm/kernel/Makefile +++ b/arch/arm/kernel/Makefile @@ -17,7 +17,7 @@ CFLAGS_REMOVE_return_address.o =3D -pg # Object file lists. =20 obj-y :=3D elf.o entry-common.o irq.o opcodes.o \ - process.o ptrace.o reboot.o \ + process.o ptrace.o reboot.o io.o \ setup.o signal.o sigreturn_codes.o \ stacktrace.o sys_arm.o time.o traps.o =20 @@ -83,10 +83,6 @@ AFLAGS_iwmmxt.o :=3D -Wa,-mcpu=3Diwmmxt obj-$(CONFIG_ARM_CPU_TOPOLOGY) +=3D topology.o obj-$(CONFIG_VDSO) +=3D vdso.o obj-$(CONFIG_EFI) +=3D efi.o - -ifneq ($(CONFIG_ARCH_EBSA110),y) - obj-y +=3D io.o -endif obj-$(CONFIG_PARAVIRT) +=3D paravirt.o =20 head-y :=3D head$(MMUEXT).o diff --git a/arch/arm/mach-ebsa110/Makefile b/arch/arm/mach-ebsa110/Makefile deleted file mode 100644 index 296541315d25..000000000000 --- a/arch/arm/mach-ebsa110/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# -# Makefile for the linux kernel. -# - -# Object file lists. - -obj-y :=3D core.o io.o leds.o diff --git a/arch/arm/mach-ebsa110/Makefile.boot b/arch/arm/mach-ebsa110/Ma= kefile.boot deleted file mode 100644 index e7e98937c71b..000000000000 --- a/arch/arm/mach-ebsa110/Makefile.boot +++ /dev/null @@ -1,5 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only - zreladdr-y +=3D 0x00008000 -params_phys-y :=3D 0x00000400 -initrd_phys-y :=3D 0x00800000 - diff --git a/arch/arm/mach-ebsa110/core.c b/arch/arm/mach-ebsa110/core.c deleted file mode 100644 index 5960e3dfd2bf..000000000000 --- a/arch/arm/mach-ebsa110/core.c +++ /dev/null @@ -1,323 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * linux/arch/arm/mach-ebsa110/core.c - * - * Copyright (C) 1998-2001 Russell King - * - * Extra MM routines for the EBSA-110 architecture - */ -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include - -#include "core.h" - -static void ebsa110_mask_irq(struct irq_data *d) -{ - __raw_writeb(1 << d->irq, IRQ_MCLR); -} - -static void ebsa110_unmask_irq(struct irq_data *d) -{ - __raw_writeb(1 << d->irq, IRQ_MSET); -} - -static struct irq_chip ebsa110_irq_chip =3D { - .irq_ack =3D ebsa110_mask_irq, - .irq_mask =3D ebsa110_mask_irq, - .irq_unmask =3D ebsa110_unmask_irq, -}; -=20 -static void __init ebsa110_init_irq(void) -{ - unsigned long flags; - unsigned int irq; - - local_irq_save(flags); - __raw_writeb(0xff, IRQ_MCLR); - __raw_writeb(0x55, IRQ_MSET); - __raw_writeb(0x00, IRQ_MSET); - if (__raw_readb(IRQ_MASK) !=3D 0x55) - while (1); - __raw_writeb(0xff, IRQ_MCLR); /* clear all interrupt enables */ - local_irq_restore(flags); - - for (irq =3D 0; irq < NR_IRQS; irq++) { - irq_set_chip_and_handler(irq, &ebsa110_irq_chip, - handle_level_irq); - irq_clear_status_flags(irq, IRQ_NOREQUEST | IRQ_NOPROBE); - } -} - -static struct map_desc ebsa110_io_desc[] __initdata =3D { - /* - * sparse external-decode ISAIO space - */ - { /* IRQ_STAT/IRQ_MCLR */ - .virtual =3D (unsigned long)IRQ_STAT, - .pfn =3D __phys_to_pfn(TRICK4_PHYS), - .length =3D TRICK4_SIZE, - .type =3D MT_DEVICE - }, { /* IRQ_MASK/IRQ_MSET */ - .virtual =3D (unsigned long)IRQ_MASK, - .pfn =3D __phys_to_pfn(TRICK3_PHYS), - .length =3D TRICK3_SIZE, - .type =3D MT_DEVICE - }, { /* SOFT_BASE */ - .virtual =3D (unsigned long)SOFT_BASE, - .pfn =3D __phys_to_pfn(TRICK1_PHYS), - .length =3D TRICK1_SIZE, - .type =3D MT_DEVICE - }, { /* PIT_BASE */ - .virtual =3D (unsigned long)PIT_BASE, - .pfn =3D __phys_to_pfn(TRICK0_PHYS), - .length =3D TRICK0_SIZE, - .type =3D MT_DEVICE - }, - - /* - * self-decode ISAIO space - */ - { - .virtual =3D ISAIO_BASE, - .pfn =3D __phys_to_pfn(ISAIO_PHYS), - .length =3D ISAIO_SIZE, - .type =3D MT_DEVICE - }, { - .virtual =3D ISAMEM_BASE, - .pfn =3D __phys_to_pfn(ISAMEM_PHYS), - .length =3D ISAMEM_SIZE, - .type =3D MT_DEVICE - } -}; - -static void __init ebsa110_map_io(void) -{ - iotable_init(ebsa110_io_desc, ARRAY_SIZE(ebsa110_io_desc)); -} - -static void __iomem *ebsa110_ioremap_caller(phys_addr_t cookie, size_t siz= e, - unsigned int flags, void *caller) -{ - return (void __iomem *)cookie; -} - -static void ebsa110_iounmap(volatile void __iomem *io_addr) -{} - -static void __init ebsa110_init_early(void) -{ - arch_ioremap_caller =3D ebsa110_ioremap_caller; - arch_iounmap =3D ebsa110_iounmap; -} - -#define PIT_CTRL (PIT_BASE + 0x0d) -#define PIT_T2 (PIT_BASE + 0x09) -#define PIT_T1 (PIT_BASE + 0x05) -#define PIT_T0 (PIT_BASE + 0x01) - -/* - * This is the rate at which your MCLK signal toggles (in Hz) - * This was measured on a 10 digit frequency counter sampling - * over 1 second. - */ -#define MCLK 47894000 - -/* - * This is the rate at which the PIT timers get clocked - */ -#define CLKBY7 (MCLK / 7) - -/* - * This is the counter value. We tick at 200Hz on this platform. - */ -#define COUNT ((CLKBY7 + (HZ / 2)) / HZ) - -/* - * Get the time offset from the system PIT. Note that if we have missed an - * interrupt, then the PIT counter will roll over (ie, be negative). - * This actually works out to be convenient. - */ -static u32 ebsa110_gettimeoffset(void) -{ - unsigned long offset, count; - - __raw_writeb(0x40, PIT_CTRL); - count =3D __raw_readb(PIT_T1); - count |=3D __raw_readb(PIT_T1) << 8; - - /* - * If count > COUNT, make the number negative. - */ - if (count > COUNT) - count |=3D 0xffff0000; - - offset =3D COUNT; - offset -=3D count; - - /* - * `offset' is in units of timer counts. Convert - * offset to units of microseconds. - */ - offset =3D offset * (1000000 / HZ) / COUNT; - - return offset * 1000; -} - -static irqreturn_t -ebsa110_timer_interrupt(int irq, void *dev_id) -{ - u32 count; - - /* latch and read timer 1 */ - __raw_writeb(0x40, PIT_CTRL); - count =3D __raw_readb(PIT_T1); - count |=3D __raw_readb(PIT_T1) << 8; - - count +=3D COUNT; - - __raw_writeb(count & 0xff, PIT_T1); - __raw_writeb(count >> 8, PIT_T1); - - timer_tick(); - - return IRQ_HANDLED; -} - -/* - * Set up timer interrupt. - */ -void __init ebsa110_timer_init(void) -{ - int irq =3D IRQ_EBSA110_TIMER0; - - arch_gettimeoffset =3D ebsa110_gettimeoffset; - - /* - * Timer 1, mode 2, LSB/MSB - */ - __raw_writeb(0x70, PIT_CTRL); - __raw_writeb(COUNT & 0xff, PIT_T1); - __raw_writeb(COUNT >> 8, PIT_T1); - - if (request_irq(irq, ebsa110_timer_interrupt, IRQF_TIMER | IRQF_IRQPOLL, - "EBSA110 Timer Tick", NULL)) - pr_err("Failed to request irq %d (EBSA110 Timer Tick)\n", irq); -} - -static struct plat_serial8250_port serial_platform_data[] =3D { - { - .iobase =3D 0x3f8, - .irq =3D 1, - .uartclk =3D 1843200, - .regshift =3D 0, - .iotype =3D UPIO_PORT, - .flags =3D UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, - }, - { - .iobase =3D 0x2f8, - .irq =3D 2, - .uartclk =3D 1843200, - .regshift =3D 0, - .iotype =3D UPIO_PORT, - .flags =3D UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, - }, - { }, -}; - -static struct platform_device serial_device =3D { - .name =3D "serial8250", - .id =3D PLAT8250_DEV_PLATFORM, - .dev =3D { - .platform_data =3D serial_platform_data, - }, -}; - -static struct resource am79c961_resources[] =3D { - { - .start =3D 0x220, - .end =3D 0x238, - .flags =3D IORESOURCE_IO, - }, { - .start =3D IRQ_EBSA110_ETHERNET, - .end =3D IRQ_EBSA110_ETHERNET, - .flags =3D IORESOURCE_IRQ, - }, -}; - -static struct platform_device am79c961_device =3D { - .name =3D "am79c961", - .id =3D -1, - .num_resources =3D ARRAY_SIZE(am79c961_resources), - .resource =3D am79c961_resources, -}; - -static struct platform_device *ebsa110_devices[] =3D { - &serial_device, - &am79c961_device, -}; - -/* - * EBSA110 idling methodology: - * - * We can not execute the "wait for interrupt" instruction since that - * will stop our MCLK signal (which provides the clock for the glue - * logic, and therefore the timer interrupt). - * - * Instead, we spin, polling the IRQ_STAT register for the occurrence - * of any interrupt with core clock down to the memory clock. - */ -static void ebsa110_idle(void) -{ - const char *irq_stat =3D (char *)0xff000000; - - /* disable clock switching */ - asm volatile ("mcr p15, 0, ip, c15, c2, 2" : : : "cc"); - - /* wait for an interrupt to occur */ - while (!*irq_stat); - - /* enable clock switching */ - asm volatile ("mcr p15, 0, ip, c15, c1, 2" : : : "cc"); -} - -static int __init ebsa110_init(void) -{ - arm_pm_idle =3D ebsa110_idle; - return platform_add_devices(ebsa110_devices, ARRAY_SIZE(ebsa110_devices)); -} - -arch_initcall(ebsa110_init); - -static void ebsa110_restart(enum reboot_mode mode, const char *cmd) -{ - soft_restart(0x80000000); -} - -MACHINE_START(EBSA110, "EBSA110") - /* Maintainer: Russell King */ - .atag_offset =3D 0x400, - .reserve_lp0 =3D 1, - .reserve_lp2 =3D 1, - .map_io =3D ebsa110_map_io, - .init_early =3D ebsa110_init_early, - .init_irq =3D ebsa110_init_irq, - .init_time =3D ebsa110_timer_init, - .restart =3D ebsa110_restart, -MACHINE_END diff --git a/arch/arm/mach-ebsa110/core.h b/arch/arm/mach-ebsa110/core.h deleted file mode 100644 index 47acc610b6b4..000000000000 --- a/arch/arm/mach-ebsa110/core.h +++ /dev/null @@ -1,38 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-only */ -/* - * Copyright (C) 1996-2000 Russell King. - * - * This file contains the core hardware definitions of the EBSA-110. - */ -#ifndef CORE_H -#define CORE_H - -/* Physical addresses/sizes */ -#define ISAMEM_PHYS 0xe0000000 -#define ISAMEM_SIZE 0x10000000 - -#define ISAIO_PHYS 0xf0000000 -#define ISAIO_SIZE PGDIR_SIZE - -#define TRICK0_PHYS 0xf2000000 -#define TRICK0_SIZE PGDIR_SIZE -#define TRICK1_PHYS 0xf2400000 -#define TRICK1_SIZE PGDIR_SIZE -#define TRICK2_PHYS 0xf2800000 -#define TRICK3_PHYS 0xf2c00000 -#define TRICK3_SIZE PGDIR_SIZE -#define TRICK4_PHYS 0xf3000000 -#define TRICK4_SIZE PGDIR_SIZE -#define TRICK5_PHYS 0xf3400000 -#define TRICK6_PHYS 0xf3800000 -#define TRICK7_PHYS 0xf3c00000 - -/* Virtual addresses */ -#define PIT_BASE IOMEM(0xfc000000) /* trick 0 */ -#define SOFT_BASE IOMEM(0xfd000000) /* trick 1 */ -#define IRQ_MASK IOMEM(0xfe000000) /* trick 3 - read */ -#define IRQ_MSET IOMEM(0xfe000000) /* trick 3 - write */ -#define IRQ_STAT IOMEM(0xff000000) /* trick 4 - read */ -#define IRQ_MCLR IOMEM(0xff000000) /* trick 4 - write */ - -#endif diff --git a/arch/arm/mach-ebsa110/include/mach/entry-macro.S b/arch/arm/ma= ch-ebsa110/include/mach/entry-macro.S deleted file mode 100644 index 14b110de78a9..000000000000 --- a/arch/arm/mach-ebsa110/include/mach/entry-macro.S +++ /dev/null @@ -1,33 +0,0 @@ -/* - * arch/arm/mach-ebsa110/include/mach/entry-macro.S - * - * Low-level IRQ helper macros for ebsa110 platform. - * - * This file is licensed under the terms of the GNU General Public - * License version 2. This program is licensed "as is" without any - * warranty of any kind, whether express or implied. - */ - - - -#define IRQ_STAT 0xff000000 /* read */ - - .macro get_irqnr_preamble, base, tmp - mov \base, #IRQ_STAT - .endm - - .macro get_irqnr_and_base, irqnr, stat, base, tmp - ldrb \stat, [\base] @ get interrupts - mov \irqnr, #0 - tst \stat, #15 - addeq \irqnr, \irqnr, #4 - moveq \stat, \stat, lsr #4 - tst \stat, #3 - addeq \irqnr, \irqnr, #2 - moveq \stat, \stat, lsr #2 - tst \stat, #1 - addeq \irqnr, \irqnr, #1 - moveq \stat, \stat, lsr #1 - tst \stat, #1 @ bit 0 should be set - .endm - diff --git a/arch/arm/mach-ebsa110/include/mach/hardware.h b/arch/arm/mach-= ebsa110/include/mach/hardware.h deleted file mode 100644 index 81f6967683f6..000000000000 --- a/arch/arm/mach-ebsa110/include/mach/hardware.h +++ /dev/null @@ -1,21 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-only */ -/* - * arch/arm/mach-ebsa110/include/mach/hardware.h - * - * Copyright (C) 1996-2000 Russell King. - * - * This file contains the hardware definitions of the EBSA-110. - */ -#ifndef __ASM_ARCH_HARDWARE_H -#define __ASM_ARCH_HARDWARE_H - -#define ISAMEM_BASE 0xe0000000 -#define ISAIO_BASE 0xf0000000 - -/* - * RAM definitions - */ -#define UNCACHEABLE_ADDR 0xff000000 /* IRQ_STAT */ - -#endif - diff --git a/arch/arm/mach-ebsa110/include/mach/io.h b/arch/arm/mach-ebsa11= 0/include/mach/io.h deleted file mode 100644 index ad170886c9aa..000000000000 --- a/arch/arm/mach-ebsa110/include/mach/io.h +++ /dev/null @@ -1,89 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-only */ -/* - * arch/arm/mach-ebsa110/include/mach/io.h - * - * Copyright (C) 1997,1998 Russell King - * - * Modifications: - * 06-Dec-1997 RMK Created. - */ -#ifndef __ASM_ARM_ARCH_IO_H -#define __ASM_ARM_ARCH_IO_H - -u8 __inb8(unsigned int port); -void __outb8(u8 val, unsigned int port); - -u8 __inb16(unsigned int port); -void __outb16(u8 val, unsigned int port); - -u16 __inw(unsigned int port); -void __outw(u16 val, unsigned int port); - -u32 __inl(unsigned int port); -void __outl(u32 val, unsigned int port); - -u8 __readb(const volatile void __iomem *addr); -u16 __readw(const volatile void __iomem *addr); -u32 __readl(const volatile void __iomem *addr); - -void __writeb(u8 val, volatile void __iomem *addr); -void __writew(u16 val, volatile void __iomem *addr); -void __writel(u32 val, volatile void __iomem *addr); - -/* - * Argh, someone forgot the IOCS16 line. We therefore have to handle - * the byte stearing by selecting the correct byte IO functions here. - */ -#ifdef ISA_SIXTEEN_BIT_PERIPHERAL -#define inb(p) __inb16(p) -#define outb(v,p) __outb16(v,p) -#else -#define inb(p) __inb8(p) -#define outb(v,p) __outb8(v,p) -#endif - -#define inw(p) __inw(p) -#define outw(v,p) __outw(v,p) - -#define inl(p) __inl(p) -#define outl(v,p) __outl(v,p) - -#define readb(b) __readb(b) -#define readw(b) __readw(b) -#define readl(b) __readl(b) -#define readb_relaxed(addr) readb(addr) -#define readw_relaxed(addr) readw(addr) -#define readl_relaxed(addr) readl(addr) - -#define writeb(v,b) __writeb(v,b) -#define writew(v,b) __writew(v,b) -#define writel(v,b) __writel(v,b) - -#define insb insb -extern void insb(unsigned int port, void *buf, int sz); -#define insw insw -extern void insw(unsigned int port, void *buf, int sz); -#define insl insl -extern void insl(unsigned int port, void *buf, int sz); - -#define outsb outsb -extern void outsb(unsigned int port, const void *buf, int sz); -#define outsw outsw -extern void outsw(unsigned int port, const void *buf, int sz); -#define outsl outsl -extern void outsl(unsigned int port, const void *buf, int sz); - -/* can't support writesb atm */ -#define writesw writesw -extern void writesw(volatile void __iomem *addr, const void *data, int wor= dlen); -#define writesl writesl -extern void writesl(volatile void __iomem *addr, const void *data, int lon= glen); - -/* can't support readsb atm */ -#define readsw readsw -extern void readsw(const volatile void __iomem *addr, void *data, int word= len); - -#define readsl readsl -extern void readsl(const volatile void __iomem *addr, void *data, int long= len); - -#endif diff --git a/arch/arm/mach-ebsa110/include/mach/irqs.h b/arch/arm/mach-ebsa= 110/include/mach/irqs.h deleted file mode 100644 index 29a8671fe849..000000000000 --- a/arch/arm/mach-ebsa110/include/mach/irqs.h +++ /dev/null @@ -1,17 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-only */ -/* - * arch/arm/mach-ebsa110/include/mach/irqs.h - * - * Copyright (C) 1996 Russell King - */ - -#define NR_IRQS 8 - -#define IRQ_EBSA110_PRINTER 0 -#define IRQ_EBSA110_COM1 1 -#define IRQ_EBSA110_COM2 2 -#define IRQ_EBSA110_ETHERNET 3 -#define IRQ_EBSA110_TIMER0 4 -#define IRQ_EBSA110_TIMER1 5 -#define IRQ_EBSA110_PCMCIA 6 -#define IRQ_EBSA110_IMMEDIATE 7 diff --git a/arch/arm/mach-ebsa110/include/mach/memory.h b/arch/arm/mach-eb= sa110/include/mach/memory.h deleted file mode 100644 index f025f405de50..000000000000 --- a/arch/arm/mach-ebsa110/include/mach/memory.h +++ /dev/null @@ -1,22 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-only */ -/* - * arch/arm/mach-ebsa110/include/mach/memory.h - * - * Copyright (C) 1996-1999 Russell King. - * - * Changelog: - * 20-Oct-1996 RMK Created - * 31-Dec-1997 RMK Fixed definitions to reduce warnings - * 21-Mar-1999 RMK Renamed to memory.h - * RMK Moved TASK_SIZE and PAGE_OFFSET here - */ -#ifndef __ASM_ARCH_MEMORY_H -#define __ASM_ARCH_MEMORY_H - -/* - * Cache flushing area - SRAM - */ -#define FLUSH_BASE_PHYS 0x40000000 -#define FLUSH_BASE 0xdf000000 - -#endif diff --git a/arch/arm/mach-ebsa110/include/mach/uncompress.h b/arch/arm/mac= h-ebsa110/include/mach/uncompress.h deleted file mode 100644 index 3ec12efe98a6..000000000000 --- a/arch/arm/mach-ebsa110/include/mach/uncompress.h +++ /dev/null @@ -1,41 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-only */ -/* - * arch/arm/mach-ebsa110/include/mach/uncompress.h - * - * Copyright (C) 1996,1997,1998 Russell King - */ - -#include - -#define SERIAL_BASE ((unsigned char *)0xf0000be0) - -/* - * This does not append a newline - */ -static inline void putc(int c) -{ - unsigned char v, *base =3D SERIAL_BASE; - - do { - v =3D base[UART_LSR << 2]; - barrier(); - } while (!(v & UART_LSR_THRE)); - - base[UART_TX << 2] =3D c; -} - -static inline void flush(void) -{ - unsigned char v, *base =3D SERIAL_BASE; - - do { - v =3D base[UART_LSR << 2]; - barrier(); - } while ((v & (UART_LSR_TEMT|UART_LSR_THRE)) !- (UART_LSR_TEMT|UART_LSR= _THRE)); -} - -/* - * nothing to do - */ -#define arch_decomp_setup() diff --git a/arch/arm/mach-ebsa110/io.c b/arch/arm/mach-ebsa110/io.c deleted file mode 100644 index 3c44dd3596ea..000000000000 --- a/arch/arm/mach-ebsa110/io.c +++ /dev/null @@ -1,440 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -/* - * linux/arch/arm/mach-ebsa110/isamem.c - * - * Copyright (C) 2001 Russell King - * - * Perform "ISA" memory and IO accesses. The EBSA110 has some "peculiarit= ies" - * in the way it handles accesses to odd IO ports on 16-bit devices. These - * devices have their D0-D15 lines connected to the processors D0-D15 line= s. - * Since they expect all byte IO operations to be performed on D0-D7, and = the - * StrongARM expects to transfer the byte to these odd addresses on D8-D15, - * we must use a trick to get the required behaviour. - * - * The trick employed here is to use long word stores to odd address -1. = The - * glue logic picks this up as a "trick" access, and asserts the LSB of the - * peripherals address bus, thereby accessing the odd IO port. Meanwhile,= the - * StrongARM transfers its data on D0-D7 as expected. - * - * Things get more interesting on the pass-1 EBSA110 - the PCMCIA controll= er - * wiring was screwed in such a way that it had limited memory space acces= s. - * Luckily, the work-around for this is not too horrible. See - * __isamem_convert_addr for the details. - */ -#include -#include -#include -#include - -#include -#include - -static void __iomem *__isamem_convert_addr(const volatile void __iomem *ad= dr) -{ - u32 ret, a =3D (u32 __force) addr; - - /* - * The PCMCIA controller is wired up as follows: - * +---------+---------+---------+---------+---------+---------+ - * PCMCIA | 2 2 2 2 | 1 1 1 1 | 1 1 1 1 | 1 1 | | | - * | 3 2 1 0 | 9 8 7 6 | 5 4 3 2 | 1 0 9 8 | 7 6 5 4 | 3 2 1 0 | - * +---------+---------+---------+---------+---------+---------+ - * CPU | 2 2 2 2 | 2 1 1 1 | 1 1 1 1 | 1 1 1 | | | - * | 4 3 2 1 | 0 9 9 8 | 7 6 5 4 | 3 2 0 9 | 8 7 6 5 | 4 3 2 x | - * +---------+---------+---------+---------+---------+---------+ - * - * This means that we can access PCMCIA regions as follows: - * 0x*10000 -> 0x*1ffff - * 0x*70000 -> 0x*7ffff - * 0x*90000 -> 0x*9ffff - * 0x*f0000 -> 0x*fffff - */ - ret =3D (a & 0xf803fe) << 1; - ret |=3D (a & 0x03fc00) << 2; - - ret +=3D 0xe8000000; - - if ((a & 0x20000) =3D (a & 0x40000) >> 1) - return (void __iomem *)ret; - - BUG(); - return NULL; -} - -/* - * read[bwl] and write[bwl] - */ -u8 __readb(const volatile void __iomem *addr) -{ - void __iomem *a =3D __isamem_convert_addr(addr); - u32 ret; - - if ((unsigned long)addr & 1) - ret =3D __raw_readl(a); - else - ret =3D __raw_readb(a); - return ret; -} - -u16 __readw(const volatile void __iomem *addr) -{ - void __iomem *a =3D __isamem_convert_addr(addr); - - if ((unsigned long)addr & 1) - BUG(); - - return __raw_readw(a); -} - -u32 __readl(const volatile void __iomem *addr) -{ - void __iomem *a =3D __isamem_convert_addr(addr); - u32 ret; - - if ((unsigned long)addr & 3) - BUG(); - - ret =3D __raw_readw(a); - ret |=3D __raw_readw(a + 4) << 16; - return ret; -} - -EXPORT_SYMBOL(__readb); -EXPORT_SYMBOL(__readw); -EXPORT_SYMBOL(__readl); - -void readsw(const volatile void __iomem *addr, void *data, int len) -{ - void __iomem *a =3D __isamem_convert_addr(addr); - - BUG_ON((unsigned long)addr & 1); - - __raw_readsw(a, data, len); -} -EXPORT_SYMBOL(readsw); - -void readsl(const volatile void __iomem *addr, void *data, int len) -{ - void __iomem *a =3D __isamem_convert_addr(addr); - - BUG_ON((unsigned long)addr & 3); - - __raw_readsl(a, data, len); -} -EXPORT_SYMBOL(readsl); - -void __writeb(u8 val, volatile void __iomem *addr) -{ - void __iomem *a =3D __isamem_convert_addr(addr); - - if ((unsigned long)addr & 1) - __raw_writel(val, a); - else - __raw_writeb(val, a); -} - -void __writew(u16 val, volatile void __iomem *addr) -{ - void __iomem *a =3D __isamem_convert_addr(addr); - - if ((unsigned long)addr & 1) - BUG(); - - __raw_writew(val, a); -} - -void __writel(u32 val, volatile void __iomem *addr) -{ - void __iomem *a =3D __isamem_convert_addr(addr); - - if ((unsigned long)addr & 3) - BUG(); - - __raw_writew(val, a); - __raw_writew(val >> 16, a + 4); -} - -EXPORT_SYMBOL(__writeb); -EXPORT_SYMBOL(__writew); -EXPORT_SYMBOL(__writel); - -void writesw(volatile void __iomem *addr, const void *data, int len) -{ - void __iomem *a =3D __isamem_convert_addr(addr); - - BUG_ON((unsigned long)addr & 1); - - __raw_writesw(a, data, len); -} -EXPORT_SYMBOL(writesw); - -void writesl(volatile void __iomem *addr, const void *data, int len) -{ - void __iomem *a =3D __isamem_convert_addr(addr); - - BUG_ON((unsigned long)addr & 3); - - __raw_writesl(a, data, len); -} -EXPORT_SYMBOL(writesl); - -/* - * The EBSA110 has a weird "ISA IO" region: - * - * Region 0 (addr =3D 0xf0000000 + io << 2) - * -------------------------------------------------------- - * Physical region IO region - * f0000fe0 - f0000ffc 3f8 - 3ff ttyS0 - * f0000e60 - f0000e64 398 - 399 - * f0000de0 - f0000dfc 378 - 37f lp0 - * f0000be0 - f0000bfc 2f8 - 2ff ttyS1 - * - * Region 1 (addr =3D 0xf0000000 + (io & ~1) << 1 + (io & 1)) - * -------------------------------------------------------- - * Physical region IO region - * f00014f1 a79 pnp write data - * f00007c0 - f00007c1 3e0 - 3e1 pcmcia - * f00004f1 279 pnp address - * f0000440 - f000046c 220 - 236 eth0 - * f0000405 203 pnp read data - */ -#define SUPERIO_PORT(p) \ - (((p) >> 3) =3D (0x3f8 >> 3) || \ - ((p) >> 3) =3D (0x2f8 >> 3) || \ - ((p) >> 3) =3D (0x378 >> 3)) - -/* - * We're addressing an 8 or 16-bit peripheral which tranfers - * odd addresses on the low ISA byte lane. - */ -u8 __inb8(unsigned int port) -{ - u32 ret; - - /* - * The SuperIO registers use sane addressing techniques... - */ - if (SUPERIO_PORT(port)) - ret =3D __raw_readb((void __iomem *)ISAIO_BASE + (port << 2)); - else { - void __iomem *a =3D (void __iomem *)ISAIO_BASE + ((port & ~1) << 1); - - /* - * Shame nothing else does - */ - if (port & 1) - ret =3D __raw_readl(a); - else - ret =3D __raw_readb(a); - } - return ret; -} - -/* - * We're addressing a 16-bit peripheral which transfers odd - * addresses on the high ISA byte lane. - */ -u8 __inb16(unsigned int port) -{ - unsigned int offset; - - /* - * The SuperIO registers use sane addressing techniques... - */ - if (SUPERIO_PORT(port)) - offset =3D port << 2; - else - offset =3D (port & ~1) << 1 | (port & 1); - - return __raw_readb((void __iomem *)ISAIO_BASE + offset); -} - -u16 __inw(unsigned int port) -{ - unsigned int offset; - - /* - * The SuperIO registers use sane addressing techniques... - */ - if (SUPERIO_PORT(port)) - offset =3D port << 2; - else { - offset =3D port << 1; - BUG_ON(port & 1); - } - return __raw_readw((void __iomem *)ISAIO_BASE + offset); -} - -/* - * Fake a 32-bit read with two 16-bit reads. Needed for 3c589. - */ -u32 __inl(unsigned int port) -{ - void __iomem *a; - - if (SUPERIO_PORT(port) || port & 3) - BUG(); - - a =3D (void __iomem *)ISAIO_BASE + ((port & ~1) << 1); - - return __raw_readw(a) | __raw_readw(a + 4) << 16; -} - -EXPORT_SYMBOL(__inb8); -EXPORT_SYMBOL(__inb16); -EXPORT_SYMBOL(__inw); -EXPORT_SYMBOL(__inl); - -void __outb8(u8 val, unsigned int port) -{ - /* - * The SuperIO registers use sane addressing techniques... - */ - if (SUPERIO_PORT(port)) - __raw_writeb(val, (void __iomem *)ISAIO_BASE + (port << 2)); - else { - void __iomem *a =3D (void __iomem *)ISAIO_BASE + ((port & ~1) << 1); - - /* - * Shame nothing else does - */ - if (port & 1) - __raw_writel(val, a); - else - __raw_writeb(val, a); - } -} - -void __outb16(u8 val, unsigned int port) -{ - unsigned int offset; - - /* - * The SuperIO registers use sane addressing techniques... - */ - if (SUPERIO_PORT(port)) - offset =3D port << 2; - else - offset =3D (port & ~1) << 1 | (port & 1); - - __raw_writeb(val, (void __iomem *)ISAIO_BASE + offset); -} - -void __outw(u16 val, unsigned int port) -{ - unsigned int offset; - - /* - * The SuperIO registers use sane addressing techniques... - */ - if (SUPERIO_PORT(port)) - offset =3D port << 2; - else { - offset =3D port << 1; - BUG_ON(port & 1); - } - __raw_writew(val, (void __iomem *)ISAIO_BASE + offset); -} - -void __outl(u32 val, unsigned int port) -{ - BUG(); -} - -EXPORT_SYMBOL(__outb8); -EXPORT_SYMBOL(__outb16); -EXPORT_SYMBOL(__outw); -EXPORT_SYMBOL(__outl); - -void outsb(unsigned int port, const void *from, int len) -{ - u32 off; - - if (SUPERIO_PORT(port)) - off =3D port << 2; - else { - off =3D (port & ~1) << 1; - if (port & 1) - BUG(); - } - - __raw_writesb((void __iomem *)ISAIO_BASE + off, from, len); -} - -void insb(unsigned int port, void *from, int len) -{ - u32 off; - - if (SUPERIO_PORT(port)) - off =3D port << 2; - else { - off =3D (port & ~1) << 1; - if (port & 1) - BUG(); - } - - __raw_readsb((void __iomem *)ISAIO_BASE + off, from, len); -} - -EXPORT_SYMBOL(outsb); -EXPORT_SYMBOL(insb); - -void outsw(unsigned int port, const void *from, int len) -{ - u32 off; - - if (SUPERIO_PORT(port)) - off =3D port << 2; - else { - off =3D (port & ~1) << 1; - if (port & 1) - BUG(); - } - - __raw_writesw((void __iomem *)ISAIO_BASE + off, from, len); -} - -void insw(unsigned int port, void *from, int len) -{ - u32 off; - - if (SUPERIO_PORT(port)) - off =3D port << 2; - else { - off =3D (port & ~1) << 1; - if (port & 1) - BUG(); - } - - __raw_readsw((void __iomem *)ISAIO_BASE + off, from, len); -} - -EXPORT_SYMBOL(outsw); -EXPORT_SYMBOL(insw); - -/* - * We implement these as 16-bit insw/outsw, mainly for - * 3c589 cards. - */ -void outsl(unsigned int port, const void *from, int len) -{ - u32 off =3D port << 1; - - if (SUPERIO_PORT(port) || port & 3) - BUG(); - - __raw_writesw((void __iomem *)ISAIO_BASE + off, from, len << 1); -} - -void insl(unsigned int port, void *from, int len) -{ - u32 off =3D port << 1; - - if (SUPERIO_PORT(port) || port & 3) - BUG(); - - __raw_readsw((void __iomem *)ISAIO_BASE + off, from, len << 1); -} - -EXPORT_SYMBOL(outsl); -EXPORT_SYMBOL(insl); diff --git a/arch/arm/mach-ebsa110/leds.c b/arch/arm/mach-ebsa110/leds.c deleted file mode 100644 index fd1474b66d31..000000000000 --- a/arch/arm/mach-ebsa110/leds.c +++ /dev/null @@ -1,71 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * Driver for the LED found on the EBSA110 machine - * Based on Versatile and RealView machine LED code - * - * Author: Bryan Wu - */ -#include -#include -#include -#include -#include - -#include - -#include "core.h" - -#if defined(CONFIG_NEW_LEDS) && defined(CONFIG_LEDS_CLASS) -static void ebsa110_led_set(struct led_classdev *cdev, - enum led_brightness b) -{ - u8 reg =3D __raw_readb(SOFT_BASE); - - if (b !=3D LED_OFF) - reg |=3D 0x80; - else - reg &=3D ~0x80; - - __raw_writeb(reg, SOFT_BASE); -} - -static enum led_brightness ebsa110_led_get(struct led_classdev *cdev) -{ - u8 reg =3D __raw_readb(SOFT_BASE); - - return (reg & 0x80) ? LED_FULL : LED_OFF; -} - -static int __init ebsa110_leds_init(void) -{ - - struct led_classdev *cdev; - int ret; - - if (!machine_is_ebsa110()) - return -ENODEV; - - cdev =3D kzalloc(sizeof(*cdev), GFP_KERNEL); - if (!cdev) - return -ENOMEM; - - cdev->name =3D "ebsa110:0"; - cdev->brightness_set =3D ebsa110_led_set; - cdev->brightness_get =3D ebsa110_led_get; - cdev->default_trigger =3D "heartbeat"; - - ret =3D led_classdev_register(NULL, cdev); - if (ret < 0) { - kfree(cdev); - return ret; - } - - return 0; -} - -/* - * Since we may have triggers on any subsystem, defer registration - * until after subsystem_init. - */ -fs_initcall(ebsa110_leds_init); -#endif diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig index fd7968635e6d..f22e37337030 100644 --- a/drivers/watchdog/Kconfig +++ b/drivers/watchdog/Kconfig @@ -599,7 +599,7 @@ config K3_RTI_WATCHDOG =20 config ORION_WATCHDOG tristate "Orion watchdog" - depends on ARCH_ORION5X || ARCH_DOVE || MACH_DOVE || ARCH_MVEBU || (COMPI= LE_TEST && !ARCH_EBSA110) + depends on ARCH_ORION5X || ARCH_DOVE || MACH_DOVE || ARCH_MVEBU || COMPIL= E_TEST depends on ARM select WATCHDOG_CORE help --=20 2.27.0 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.1 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id DD907C4741F for ; Fri, 30 Oct 2020 15:27:13 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 66901206DC for ; Fri, 30 Oct 2020 15:27:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1604071633; bh=1vp/SJB7mnGBWfEVHLXuid5cTF9gxdNQ7WBfEo/ZU8U=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=GnqVz37pxHR7n7DM6JiER7ENKfCtGoxjEfF7qabQFCpgpLB4PN66d7HQ/0y/tQnOo J+EvNIq+DKAwDj1AdBJh6XIjRTWDnsE23K97PEas1Lhwg1SBbvPqPfUD0L+d6331+w dF0g04yKJm+QNdtueWG9Kh9gtgTp1EkO+X45I6fg= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726999AbgJ3P1N (ORCPT ); Fri, 30 Oct 2020 11:27:13 -0400 Received: from mail.kernel.org ([198.145.29.99]:59402 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727060AbgJ3P1L (ORCPT ); Fri, 30 Oct 2020 11:27:11 -0400 Received: from localhost.localdomain (HSI-KBW-46-223-126-90.hsi.kabel-badenwuerttemberg.de [46.223.126.90]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id CD42D20A8B; Fri, 30 Oct 2020 15:18:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1604071103; bh=1vp/SJB7mnGBWfEVHLXuid5cTF9gxdNQ7WBfEo/ZU8U=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=fzq/xIV/0ULHfa3KcYl2oHEuhekMt5MHHdZX+PGz1l0eSGRbcmNrFmSSo9G89QMPC 13bBZ7UuOr12XOybGldKg3vBqVy9v4Fey57KoaHMLrHH/Otrf0jK7XRuNe7tz+0XeU OYHypJ7cenR1YOlFVX7DP+DennW1Nk0Hz5+OTG5s= From: Arnd Bergmann To: linux-kernel@vger.kernel.org Cc: Thomas Gleixner , Arnd Bergmann , Russell King , Tony Luck , Fenghua Yu , Greg Ungerer , Finn Thain , Philip Blundell , Joshua Thompson , Sam Creasey , "James E.J. Bottomley" , Helge Deller , Daniel Lezcano , John Stultz , Stephen Boyd , Linus Walleij , linux-ia64@vger.kernel.org, Parisc List , linux-m68k , Linux ARM , Russell King Subject: [PATCH v2 01/15] ARM: remove ebsa110 platform Date: Fri, 30 Oct 2020 16:17:44 +0100 Message-Id: <20201030151758.1241164-2-arnd@kernel.org> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20201030151758.1241164-1-arnd@kernel.org> References: <20201030151758.1241164-1-arnd@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-m68k@vger.kernel.org From: Arnd Bergmann 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 Signed-off-by: Arnd Bergmann --- MAINTAINERS | 8 - arch/arm/Kconfig | 24 +- arch/arm/Kconfig.debug | 6 +- arch/arm/Makefile | 8 - arch/arm/configs/ebsa110_defconfig | 74 --- arch/arm/kernel/Makefile | 6 +- arch/arm/mach-ebsa110/Makefile | 8 - arch/arm/mach-ebsa110/Makefile.boot | 5 - arch/arm/mach-ebsa110/core.c | 323 ------------- arch/arm/mach-ebsa110/core.h | 38 -- .../mach-ebsa110/include/mach/entry-macro.S | 33 -- arch/arm/mach-ebsa110/include/mach/hardware.h | 21 - arch/arm/mach-ebsa110/include/mach/io.h | 89 ---- arch/arm/mach-ebsa110/include/mach/irqs.h | 17 - arch/arm/mach-ebsa110/include/mach/memory.h | 22 - .../mach-ebsa110/include/mach/uncompress.h | 41 -- arch/arm/mach-ebsa110/io.c | 440 ------------------ arch/arm/mach-ebsa110/leds.c | 71 --- drivers/watchdog/Kconfig | 2 +- 19 files changed, 7 insertions(+), 1229 deletions(-) delete mode 100644 arch/arm/configs/ebsa110_defconfig delete mode 100644 arch/arm/mach-ebsa110/Makefile delete mode 100644 arch/arm/mach-ebsa110/Makefile.boot delete mode 100644 arch/arm/mach-ebsa110/core.c delete mode 100644 arch/arm/mach-ebsa110/core.h delete mode 100644 arch/arm/mach-ebsa110/include/mach/entry-macro.S delete mode 100644 arch/arm/mach-ebsa110/include/mach/hardware.h delete mode 100644 arch/arm/mach-ebsa110/include/mach/io.h delete mode 100644 arch/arm/mach-ebsa110/include/mach/irqs.h delete mode 100644 arch/arm/mach-ebsa110/include/mach/memory.h delete mode 100644 arch/arm/mach-ebsa110/include/mach/uncompress.h delete mode 100644 arch/arm/mach-ebsa110/io.c delete mode 100644 arch/arm/mach-ebsa110/leds.c diff --git a/MAINTAINERS b/MAINTAINERS index e73636b75f29..12c6a9028ed2 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1789,14 +1789,6 @@ F: drivers/firmware/turris-mox-rwtm.c F: drivers/gpio/gpio-moxtet.c F: include/linux/moxtet.h -ARM/EBSA110 MACHINE SUPPORT -M: Russell King -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained -W: http://www.armlinux.org.uk/ -F: arch/arm/mach-ebsa110/ -F: drivers/net/ethernet/amd/am79c961a.* - ARM/ENERGY MICRO (SILICON LABS) EFM32 SUPPORT M: Uwe Kleine-König R: Pengutronix Kernel Team diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index fe2f17eb2b50..1b9fda08b92f 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -267,8 +267,7 @@ config PHYS_OFFSET hex "Physical address of main memory" if MMU depends on !ARM_PATCH_PHYS_VIRT default DRAM_BASE if !MMU - default 0x00000000 if ARCH_EBSA110 || \ - ARCH_FOOTBRIDGE + default 0x00000000 ARCH_FOOTBRIDGE default 0x10000000 if ARCH_OMAP1 || ARCH_RPC default 0x20000000 if ARCH_S5PV210 default 0xc0000000 if ARCH_SA1100 @@ -342,20 +341,6 @@ config ARM_SINGLE_ARMV7M select SPARSE_IRQ select USE_OF -config ARCH_EBSA110 - bool "EBSA-110" - select ARCH_USES_GETTIMEOFFSET - select CPU_SA110 - select ISA - select NEED_MACH_IO_H - select NEED_MACH_MEMORY_H - select NO_IOPORT_MAP - help - This is an evaluation board for the StrongARM processor available - from Digital. It has limited hardware on-board, including an - Ethernet interface, two PCMCIA sockets, two serial ports and a - parallel port. - config ARCH_EP93XX bool "EP93xx-based" select ARCH_SPARSEMEM_ENABLE @@ -1371,7 +1356,6 @@ config ARCH_NR_GPIO config HZ_FIXED int - default 200 if ARCH_EBSA110 default 128 if SOC_AT91RM9200 default 0 @@ -1587,9 +1571,7 @@ config FORCE_MAX_ZONEORDER a value of 11 means that the largest free memory block is 2^10 pages. config ALIGNMENT_TRAP - bool - depends on CPU_CP15_MMU - default y if !ARCH_EBSA110 + def_bool CPU_CP15_MMU select HAVE_PROC_CPU if PROC_FS help ARM processors cannot fetch/store information which is not @@ -1784,7 +1766,7 @@ config CMDLINE string "Default kernel command string" default "" help - On some architectures (EBSA110 and CATS), there is currently no way + On some architectures (e.g. CATS), there is currently no way for the boot loader to pass arguments to the kernel. For these architectures, you should supply some command-line options at build time by entering them here. As a minimum, you should specify the diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug index 8986a91a6f31..4ff04201a8cc 100644 --- a/arch/arm/Kconfig.debug +++ b/arch/arm/Kconfig.debug @@ -1567,7 +1567,7 @@ config DEBUG_SIRFSOC_UART config DEBUG_UART_FLOW_CONTROL bool "Enable flow control (CTS) for the debug UART" depends on DEBUG_LL - default y if ARCH_EBSA110 || DEBUG_FOOTBRIDGE_COM1 || DEBUG_GEMINI || ARCH_RPC + default y if DEBUG_FOOTBRIDGE_COM1 || DEBUG_GEMINI || ARCH_RPC help Some UART ports are connected to terminals that will use modem control signals to indicate whether they are ready to receive text. @@ -1639,7 +1639,7 @@ config DEBUG_UART_PL01X # Compatibility options for 8250 config DEBUG_UART_8250 - def_bool ARCH_EBSA110 || ARCH_IOP32X || ARCH_IXP4XX || ARCH_RPC + def_bool ARCH_IOP32X || ARCH_IXP4XX || ARCH_RPC config DEBUG_UART_PHYS hex "Physical base address of debug UART" @@ -1743,7 +1743,6 @@ config DEBUG_UART_PHYS default 0xe8008000 if DEBUG_R7S72100_SCIF2 || DEBUG_R7S9210_SCIF2 default 0xe8009000 if DEBUG_R7S9210_SCIF4 default 0xf0000000 if DEBUG_DIGICOLOR_UA0 - default 0xf0000be0 if ARCH_EBSA110 default 0xf1012000 if DEBUG_MVEBU_UART0_ALTERNATE default 0xf1012100 if DEBUG_MVEBU_UART1_ALTERNATE default 0xf7fc9000 if DEBUG_BERLIN_UART @@ -1790,7 +1789,6 @@ config DEBUG_UART_VIRT default 0xc8821000 if DEBUG_RV1108_UART1 default 0xc8912000 if DEBUG_RV1108_UART0 default 0xe0010fe0 if ARCH_RPC - default 0xf0000be0 if ARCH_EBSA110 default 0xf0010000 if DEBUG_ASM9260_UART default 0xf0100000 if DEBUG_DIGICOLOR_UA0 default 0xf01fb000 if DEBUG_NOMADIK_UART diff --git a/arch/arm/Makefile b/arch/arm/Makefile index 4d76eab2b22d..64999d94ed1b 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile @@ -172,7 +172,6 @@ machine-$(CONFIG_ARCH_CNS3XXX) += cns3xxx machine-$(CONFIG_ARCH_DAVINCI) += davinci machine-$(CONFIG_ARCH_DIGICOLOR) += digicolor machine-$(CONFIG_ARCH_DOVE) += dove -machine-$(CONFIG_ARCH_EBSA110) += ebsa110 machine-$(CONFIG_ARCH_EFM32) += efm32 machine-$(CONFIG_ARCH_EP93XX) += ep93xx machine-$(CONFIG_ARCH_EXYNOS) += exynos @@ -239,13 +238,6 @@ plat-$(CONFIG_PLAT_ORION) += orion plat-$(CONFIG_PLAT_PXA) += pxa plat-$(CONFIG_PLAT_VERSATILE) += versatile -ifeq ($(CONFIG_ARCH_EBSA110),y) -# This is what happens if you forget the IOCS16 line. -# PCMCIA cards stop working. -CFLAGS_3c589_cs.o :=-DISA_SIXTEEN_BIT_PERIPHERAL -export CFLAGS_3c589_cs.o -endif - # The byte offset of the kernel image in RAM from the start of RAM. TEXT_OFFSET := $(textofs-y) diff --git a/arch/arm/configs/ebsa110_defconfig b/arch/arm/configs/ebsa110_defconfig deleted file mode 100644 index 731a22a55f4e..000000000000 --- a/arch/arm/configs/ebsa110_defconfig +++ /dev/null @@ -1,74 +0,0 @@ -CONFIG_SYSVIPC=y -CONFIG_BSD_PROCESS_ACCT=y -CONFIG_LOG_BUF_SHIFT=14 -CONFIG_EXPERT=y -CONFIG_MODULES=y -CONFIG_ARCH_EBSA110=y -CONFIG_PCCARD=m -CONFIG_I82365=m -CONFIG_LEDS=y -CONFIG_ZBOOT_ROM_TEXT=0x0 -CONFIG_ZBOOT_ROM_BSS=0x0 -CONFIG_CMDLINE="root=/dev/nfs rw mem=16M console=ttyS1,38400n8" -CONFIG_FPE_NWFPE=y -CONFIG_FPE_FASTFPE=y -CONFIG_BINFMT_AOUT=y -CONFIG_NET=y -CONFIG_PACKET=y -CONFIG_UNIX=y -CONFIG_INET=y -CONFIG_IP_MULTICAST=y -CONFIG_IP_ADVANCED_ROUTER=y -CONFIG_IP_MULTIPLE_TABLES=y -CONFIG_IP_ROUTE_VERBOSE=y -CONFIG_IP_PNP=y -CONFIG_IP_PNP_BOOTP=y -CONFIG_SYN_COOKIES=y -CONFIG_IPV6=y -CONFIG_NETFILTER=y -CONFIG_IP_NF_IPTABLES=y -CONFIG_IP_NF_MATCH_ECN=y -CONFIG_IP_NF_MATCH_TTL=y -CONFIG_IP_NF_FILTER=y -CONFIG_IP_NF_TARGET_REJECT=y -CONFIG_IP_NF_TARGET_LOG=y -CONFIG_IP_NF_MANGLE=y -CONFIG_IP_NF_TARGET_ECN=y -CONFIG_IP6_NF_IPTABLES=y -CONFIG_IP6_NF_MATCH_FRAG=y -CONFIG_IP6_NF_MATCH_OPTS=y -CONFIG_IP6_NF_MATCH_HL=y -CONFIG_IP6_NF_MATCH_RT=y -CONFIG_IP6_NF_FILTER=y -CONFIG_IP6_NF_MANGLE=y -CONFIG_FW_LOADER=m -CONFIG_PARPORT=y -CONFIG_PARPORT_PC=y -CONFIG_PARPORT_PC_FIFO=y -CONFIG_PARPORT_1284=y -CONFIG_BLK_DEV_RAM=y -CONFIG_NETDEVICES=y -CONFIG_NET_ETHERNET=y -CONFIG_ARM_AM79C961A=y -CONFIG_NET_PCMCIA=y -CONFIG_PCMCIA_PCNET=m -CONFIG_PPP=m -CONFIG_PPP_ASYNC=m -CONFIG_PPP_DEFLATE=m -CONFIG_PPP_BSDCOMP=m -# CONFIG_INPUT is not set -# CONFIG_SERIO is not set -# CONFIG_VT is not set -CONFIG_SERIAL_8250=y -CONFIG_SERIAL_8250_CONSOLE=y -CONFIG_SERIAL_8250_CS=m -CONFIG_PRINTER=m -CONFIG_WATCHDOG=y -CONFIG_SOFT_WATCHDOG=y -CONFIG_AUTOFS4_FS=y -CONFIG_MINIX_FS=y -CONFIG_NFS_FS=y -CONFIG_NFS_V3=y -CONFIG_ROOT_NFS=y -CONFIG_PARTITION_ADVANCED=y -# CONFIG_MSDOS_PARTITION is not set diff --git a/arch/arm/kernel/Makefile b/arch/arm/kernel/Makefile index 89e5d864e923..09e67cb02b20 100644 --- a/arch/arm/kernel/Makefile +++ b/arch/arm/kernel/Makefile @@ -17,7 +17,7 @@ CFLAGS_REMOVE_return_address.o = -pg # Object file lists. obj-y := elf.o entry-common.o irq.o opcodes.o \ - process.o ptrace.o reboot.o \ + process.o ptrace.o reboot.o io.o \ setup.o signal.o sigreturn_codes.o \ stacktrace.o sys_arm.o time.o traps.o @@ -83,10 +83,6 @@ AFLAGS_iwmmxt.o := -Wa,-mcpu=iwmmxt obj-$(CONFIG_ARM_CPU_TOPOLOGY) += topology.o obj-$(CONFIG_VDSO) += vdso.o obj-$(CONFIG_EFI) += efi.o - -ifneq ($(CONFIG_ARCH_EBSA110),y) - obj-y += io.o -endif obj-$(CONFIG_PARAVIRT) += paravirt.o head-y := head$(MMUEXT).o diff --git a/arch/arm/mach-ebsa110/Makefile b/arch/arm/mach-ebsa110/Makefile deleted file mode 100644 index 296541315d25..000000000000 --- a/arch/arm/mach-ebsa110/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# -# Makefile for the linux kernel. -# - -# Object file lists. - -obj-y := core.o io.o leds.o diff --git a/arch/arm/mach-ebsa110/Makefile.boot b/arch/arm/mach-ebsa110/Makefile.boot deleted file mode 100644 index e7e98937c71b..000000000000 --- a/arch/arm/mach-ebsa110/Makefile.boot +++ /dev/null @@ -1,5 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only - zreladdr-y += 0x00008000 -params_phys-y := 0x00000400 -initrd_phys-y := 0x00800000 - diff --git a/arch/arm/mach-ebsa110/core.c b/arch/arm/mach-ebsa110/core.c deleted file mode 100644 index 5960e3dfd2bf..000000000000 --- a/arch/arm/mach-ebsa110/core.c +++ /dev/null @@ -1,323 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * linux/arch/arm/mach-ebsa110/core.c - * - * Copyright (C) 1998-2001 Russell King - * - * Extra MM routines for the EBSA-110 architecture - */ -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include - -#include "core.h" - -static void ebsa110_mask_irq(struct irq_data *d) -{ - __raw_writeb(1 << d->irq, IRQ_MCLR); -} - -static void ebsa110_unmask_irq(struct irq_data *d) -{ - __raw_writeb(1 << d->irq, IRQ_MSET); -} - -static struct irq_chip ebsa110_irq_chip = { - .irq_ack = ebsa110_mask_irq, - .irq_mask = ebsa110_mask_irq, - .irq_unmask = ebsa110_unmask_irq, -}; - -static void __init ebsa110_init_irq(void) -{ - unsigned long flags; - unsigned int irq; - - local_irq_save(flags); - __raw_writeb(0xff, IRQ_MCLR); - __raw_writeb(0x55, IRQ_MSET); - __raw_writeb(0x00, IRQ_MSET); - if (__raw_readb(IRQ_MASK) != 0x55) - while (1); - __raw_writeb(0xff, IRQ_MCLR); /* clear all interrupt enables */ - local_irq_restore(flags); - - for (irq = 0; irq < NR_IRQS; irq++) { - irq_set_chip_and_handler(irq, &ebsa110_irq_chip, - handle_level_irq); - irq_clear_status_flags(irq, IRQ_NOREQUEST | IRQ_NOPROBE); - } -} - -static struct map_desc ebsa110_io_desc[] __initdata = { - /* - * sparse external-decode ISAIO space - */ - { /* IRQ_STAT/IRQ_MCLR */ - .virtual = (unsigned long)IRQ_STAT, - .pfn = __phys_to_pfn(TRICK4_PHYS), - .length = TRICK4_SIZE, - .type = MT_DEVICE - }, { /* IRQ_MASK/IRQ_MSET */ - .virtual = (unsigned long)IRQ_MASK, - .pfn = __phys_to_pfn(TRICK3_PHYS), - .length = TRICK3_SIZE, - .type = MT_DEVICE - }, { /* SOFT_BASE */ - .virtual = (unsigned long)SOFT_BASE, - .pfn = __phys_to_pfn(TRICK1_PHYS), - .length = TRICK1_SIZE, - .type = MT_DEVICE - }, { /* PIT_BASE */ - .virtual = (unsigned long)PIT_BASE, - .pfn = __phys_to_pfn(TRICK0_PHYS), - .length = TRICK0_SIZE, - .type = MT_DEVICE - }, - - /* - * self-decode ISAIO space - */ - { - .virtual = ISAIO_BASE, - .pfn = __phys_to_pfn(ISAIO_PHYS), - .length = ISAIO_SIZE, - .type = MT_DEVICE - }, { - .virtual = ISAMEM_BASE, - .pfn = __phys_to_pfn(ISAMEM_PHYS), - .length = ISAMEM_SIZE, - .type = MT_DEVICE - } -}; - -static void __init ebsa110_map_io(void) -{ - iotable_init(ebsa110_io_desc, ARRAY_SIZE(ebsa110_io_desc)); -} - -static void __iomem *ebsa110_ioremap_caller(phys_addr_t cookie, size_t size, - unsigned int flags, void *caller) -{ - return (void __iomem *)cookie; -} - -static void ebsa110_iounmap(volatile void __iomem *io_addr) -{} - -static void __init ebsa110_init_early(void) -{ - arch_ioremap_caller = ebsa110_ioremap_caller; - arch_iounmap = ebsa110_iounmap; -} - -#define PIT_CTRL (PIT_BASE + 0x0d) -#define PIT_T2 (PIT_BASE + 0x09) -#define PIT_T1 (PIT_BASE + 0x05) -#define PIT_T0 (PIT_BASE + 0x01) - -/* - * This is the rate at which your MCLK signal toggles (in Hz) - * This was measured on a 10 digit frequency counter sampling - * over 1 second. - */ -#define MCLK 47894000 - -/* - * This is the rate at which the PIT timers get clocked - */ -#define CLKBY7 (MCLK / 7) - -/* - * This is the counter value. We tick at 200Hz on this platform. - */ -#define COUNT ((CLKBY7 + (HZ / 2)) / HZ) - -/* - * Get the time offset from the system PIT. Note that if we have missed an - * interrupt, then the PIT counter will roll over (ie, be negative). - * This actually works out to be convenient. - */ -static u32 ebsa110_gettimeoffset(void) -{ - unsigned long offset, count; - - __raw_writeb(0x40, PIT_CTRL); - count = __raw_readb(PIT_T1); - count |= __raw_readb(PIT_T1) << 8; - - /* - * If count > COUNT, make the number negative. - */ - if (count > COUNT) - count |= 0xffff0000; - - offset = COUNT; - offset -= count; - - /* - * `offset' is in units of timer counts. Convert - * offset to units of microseconds. - */ - offset = offset * (1000000 / HZ) / COUNT; - - return offset * 1000; -} - -static irqreturn_t -ebsa110_timer_interrupt(int irq, void *dev_id) -{ - u32 count; - - /* latch and read timer 1 */ - __raw_writeb(0x40, PIT_CTRL); - count = __raw_readb(PIT_T1); - count |= __raw_readb(PIT_T1) << 8; - - count += COUNT; - - __raw_writeb(count & 0xff, PIT_T1); - __raw_writeb(count >> 8, PIT_T1); - - timer_tick(); - - return IRQ_HANDLED; -} - -/* - * Set up timer interrupt. - */ -void __init ebsa110_timer_init(void) -{ - int irq = IRQ_EBSA110_TIMER0; - - arch_gettimeoffset = ebsa110_gettimeoffset; - - /* - * Timer 1, mode 2, LSB/MSB - */ - __raw_writeb(0x70, PIT_CTRL); - __raw_writeb(COUNT & 0xff, PIT_T1); - __raw_writeb(COUNT >> 8, PIT_T1); - - if (request_irq(irq, ebsa110_timer_interrupt, IRQF_TIMER | IRQF_IRQPOLL, - "EBSA110 Timer Tick", NULL)) - pr_err("Failed to request irq %d (EBSA110 Timer Tick)\n", irq); -} - -static struct plat_serial8250_port serial_platform_data[] = { - { - .iobase = 0x3f8, - .irq = 1, - .uartclk = 1843200, - .regshift = 0, - .iotype = UPIO_PORT, - .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, - }, - { - .iobase = 0x2f8, - .irq = 2, - .uartclk = 1843200, - .regshift = 0, - .iotype = UPIO_PORT, - .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, - }, - { }, -}; - -static struct platform_device serial_device = { - .name = "serial8250", - .id = PLAT8250_DEV_PLATFORM, - .dev = { - .platform_data = serial_platform_data, - }, -}; - -static struct resource am79c961_resources[] = { - { - .start = 0x220, - .end = 0x238, - .flags = IORESOURCE_IO, - }, { - .start = IRQ_EBSA110_ETHERNET, - .end = IRQ_EBSA110_ETHERNET, - .flags = IORESOURCE_IRQ, - }, -}; - -static struct platform_device am79c961_device = { - .name = "am79c961", - .id = -1, - .num_resources = ARRAY_SIZE(am79c961_resources), - .resource = am79c961_resources, -}; - -static struct platform_device *ebsa110_devices[] = { - &serial_device, - &am79c961_device, -}; - -/* - * EBSA110 idling methodology: - * - * We can not execute the "wait for interrupt" instruction since that - * will stop our MCLK signal (which provides the clock for the glue - * logic, and therefore the timer interrupt). - * - * Instead, we spin, polling the IRQ_STAT register for the occurrence - * of any interrupt with core clock down to the memory clock. - */ -static void ebsa110_idle(void) -{ - const char *irq_stat = (char *)0xff000000; - - /* disable clock switching */ - asm volatile ("mcr p15, 0, ip, c15, c2, 2" : : : "cc"); - - /* wait for an interrupt to occur */ - while (!*irq_stat); - - /* enable clock switching */ - asm volatile ("mcr p15, 0, ip, c15, c1, 2" : : : "cc"); -} - -static int __init ebsa110_init(void) -{ - arm_pm_idle = ebsa110_idle; - return platform_add_devices(ebsa110_devices, ARRAY_SIZE(ebsa110_devices)); -} - -arch_initcall(ebsa110_init); - -static void ebsa110_restart(enum reboot_mode mode, const char *cmd) -{ - soft_restart(0x80000000); -} - -MACHINE_START(EBSA110, "EBSA110") - /* Maintainer: Russell King */ - .atag_offset = 0x400, - .reserve_lp0 = 1, - .reserve_lp2 = 1, - .map_io = ebsa110_map_io, - .init_early = ebsa110_init_early, - .init_irq = ebsa110_init_irq, - .init_time = ebsa110_timer_init, - .restart = ebsa110_restart, -MACHINE_END diff --git a/arch/arm/mach-ebsa110/core.h b/arch/arm/mach-ebsa110/core.h deleted file mode 100644 index 47acc610b6b4..000000000000 --- a/arch/arm/mach-ebsa110/core.h +++ /dev/null @@ -1,38 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-only */ -/* - * Copyright (C) 1996-2000 Russell King. - * - * This file contains the core hardware definitions of the EBSA-110. - */ -#ifndef CORE_H -#define CORE_H - -/* Physical addresses/sizes */ -#define ISAMEM_PHYS 0xe0000000 -#define ISAMEM_SIZE 0x10000000 - -#define ISAIO_PHYS 0xf0000000 -#define ISAIO_SIZE PGDIR_SIZE - -#define TRICK0_PHYS 0xf2000000 -#define TRICK0_SIZE PGDIR_SIZE -#define TRICK1_PHYS 0xf2400000 -#define TRICK1_SIZE PGDIR_SIZE -#define TRICK2_PHYS 0xf2800000 -#define TRICK3_PHYS 0xf2c00000 -#define TRICK3_SIZE PGDIR_SIZE -#define TRICK4_PHYS 0xf3000000 -#define TRICK4_SIZE PGDIR_SIZE -#define TRICK5_PHYS 0xf3400000 -#define TRICK6_PHYS 0xf3800000 -#define TRICK7_PHYS 0xf3c00000 - -/* Virtual addresses */ -#define PIT_BASE IOMEM(0xfc000000) /* trick 0 */ -#define SOFT_BASE IOMEM(0xfd000000) /* trick 1 */ -#define IRQ_MASK IOMEM(0xfe000000) /* trick 3 - read */ -#define IRQ_MSET IOMEM(0xfe000000) /* trick 3 - write */ -#define IRQ_STAT IOMEM(0xff000000) /* trick 4 - read */ -#define IRQ_MCLR IOMEM(0xff000000) /* trick 4 - write */ - -#endif diff --git a/arch/arm/mach-ebsa110/include/mach/entry-macro.S b/arch/arm/mach-ebsa110/include/mach/entry-macro.S deleted file mode 100644 index 14b110de78a9..000000000000 --- a/arch/arm/mach-ebsa110/include/mach/entry-macro.S +++ /dev/null @@ -1,33 +0,0 @@ -/* - * arch/arm/mach-ebsa110/include/mach/entry-macro.S - * - * Low-level IRQ helper macros for ebsa110 platform. - * - * This file is licensed under the terms of the GNU General Public - * License version 2. This program is licensed "as is" without any - * warranty of any kind, whether express or implied. - */ - - - -#define IRQ_STAT 0xff000000 /* read */ - - .macro get_irqnr_preamble, base, tmp - mov \base, #IRQ_STAT - .endm - - .macro get_irqnr_and_base, irqnr, stat, base, tmp - ldrb \stat, [\base] @ get interrupts - mov \irqnr, #0 - tst \stat, #15 - addeq \irqnr, \irqnr, #4 - moveq \stat, \stat, lsr #4 - tst \stat, #3 - addeq \irqnr, \irqnr, #2 - moveq \stat, \stat, lsr #2 - tst \stat, #1 - addeq \irqnr, \irqnr, #1 - moveq \stat, \stat, lsr #1 - tst \stat, #1 @ bit 0 should be set - .endm - diff --git a/arch/arm/mach-ebsa110/include/mach/hardware.h b/arch/arm/mach-ebsa110/include/mach/hardware.h deleted file mode 100644 index 81f6967683f6..000000000000 --- a/arch/arm/mach-ebsa110/include/mach/hardware.h +++ /dev/null @@ -1,21 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-only */ -/* - * arch/arm/mach-ebsa110/include/mach/hardware.h - * - * Copyright (C) 1996-2000 Russell King. - * - * This file contains the hardware definitions of the EBSA-110. - */ -#ifndef __ASM_ARCH_HARDWARE_H -#define __ASM_ARCH_HARDWARE_H - -#define ISAMEM_BASE 0xe0000000 -#define ISAIO_BASE 0xf0000000 - -/* - * RAM definitions - */ -#define UNCACHEABLE_ADDR 0xff000000 /* IRQ_STAT */ - -#endif - diff --git a/arch/arm/mach-ebsa110/include/mach/io.h b/arch/arm/mach-ebsa110/include/mach/io.h deleted file mode 100644 index ad170886c9aa..000000000000 --- a/arch/arm/mach-ebsa110/include/mach/io.h +++ /dev/null @@ -1,89 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-only */ -/* - * arch/arm/mach-ebsa110/include/mach/io.h - * - * Copyright (C) 1997,1998 Russell King - * - * Modifications: - * 06-Dec-1997 RMK Created. - */ -#ifndef __ASM_ARM_ARCH_IO_H -#define __ASM_ARM_ARCH_IO_H - -u8 __inb8(unsigned int port); -void __outb8(u8 val, unsigned int port); - -u8 __inb16(unsigned int port); -void __outb16(u8 val, unsigned int port); - -u16 __inw(unsigned int port); -void __outw(u16 val, unsigned int port); - -u32 __inl(unsigned int port); -void __outl(u32 val, unsigned int port); - -u8 __readb(const volatile void __iomem *addr); -u16 __readw(const volatile void __iomem *addr); -u32 __readl(const volatile void __iomem *addr); - -void __writeb(u8 val, volatile void __iomem *addr); -void __writew(u16 val, volatile void __iomem *addr); -void __writel(u32 val, volatile void __iomem *addr); - -/* - * Argh, someone forgot the IOCS16 line. We therefore have to handle - * the byte stearing by selecting the correct byte IO functions here. - */ -#ifdef ISA_SIXTEEN_BIT_PERIPHERAL -#define inb(p) __inb16(p) -#define outb(v,p) __outb16(v,p) -#else -#define inb(p) __inb8(p) -#define outb(v,p) __outb8(v,p) -#endif - -#define inw(p) __inw(p) -#define outw(v,p) __outw(v,p) - -#define inl(p) __inl(p) -#define outl(v,p) __outl(v,p) - -#define readb(b) __readb(b) -#define readw(b) __readw(b) -#define readl(b) __readl(b) -#define readb_relaxed(addr) readb(addr) -#define readw_relaxed(addr) readw(addr) -#define readl_relaxed(addr) readl(addr) - -#define writeb(v,b) __writeb(v,b) -#define writew(v,b) __writew(v,b) -#define writel(v,b) __writel(v,b) - -#define insb insb -extern void insb(unsigned int port, void *buf, int sz); -#define insw insw -extern void insw(unsigned int port, void *buf, int sz); -#define insl insl -extern void insl(unsigned int port, void *buf, int sz); - -#define outsb outsb -extern void outsb(unsigned int port, const void *buf, int sz); -#define outsw outsw -extern void outsw(unsigned int port, const void *buf, int sz); -#define outsl outsl -extern void outsl(unsigned int port, const void *buf, int sz); - -/* can't support writesb atm */ -#define writesw writesw -extern void writesw(volatile void __iomem *addr, const void *data, int wordlen); -#define writesl writesl -extern void writesl(volatile void __iomem *addr, const void *data, int longlen); - -/* can't support readsb atm */ -#define readsw readsw -extern void readsw(const volatile void __iomem *addr, void *data, int wordlen); - -#define readsl readsl -extern void readsl(const volatile void __iomem *addr, void *data, int longlen); - -#endif diff --git a/arch/arm/mach-ebsa110/include/mach/irqs.h b/arch/arm/mach-ebsa110/include/mach/irqs.h deleted file mode 100644 index 29a8671fe849..000000000000 --- a/arch/arm/mach-ebsa110/include/mach/irqs.h +++ /dev/null @@ -1,17 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-only */ -/* - * arch/arm/mach-ebsa110/include/mach/irqs.h - * - * Copyright (C) 1996 Russell King - */ - -#define NR_IRQS 8 - -#define IRQ_EBSA110_PRINTER 0 -#define IRQ_EBSA110_COM1 1 -#define IRQ_EBSA110_COM2 2 -#define IRQ_EBSA110_ETHERNET 3 -#define IRQ_EBSA110_TIMER0 4 -#define IRQ_EBSA110_TIMER1 5 -#define IRQ_EBSA110_PCMCIA 6 -#define IRQ_EBSA110_IMMEDIATE 7 diff --git a/arch/arm/mach-ebsa110/include/mach/memory.h b/arch/arm/mach-ebsa110/include/mach/memory.h deleted file mode 100644 index f025f405de50..000000000000 --- a/arch/arm/mach-ebsa110/include/mach/memory.h +++ /dev/null @@ -1,22 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-only */ -/* - * arch/arm/mach-ebsa110/include/mach/memory.h - * - * Copyright (C) 1996-1999 Russell King. - * - * Changelog: - * 20-Oct-1996 RMK Created - * 31-Dec-1997 RMK Fixed definitions to reduce warnings - * 21-Mar-1999 RMK Renamed to memory.h - * RMK Moved TASK_SIZE and PAGE_OFFSET here - */ -#ifndef __ASM_ARCH_MEMORY_H -#define __ASM_ARCH_MEMORY_H - -/* - * Cache flushing area - SRAM - */ -#define FLUSH_BASE_PHYS 0x40000000 -#define FLUSH_BASE 0xdf000000 - -#endif diff --git a/arch/arm/mach-ebsa110/include/mach/uncompress.h b/arch/arm/mach-ebsa110/include/mach/uncompress.h deleted file mode 100644 index 3ec12efe98a6..000000000000 --- a/arch/arm/mach-ebsa110/include/mach/uncompress.h +++ /dev/null @@ -1,41 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-only */ -/* - * arch/arm/mach-ebsa110/include/mach/uncompress.h - * - * Copyright (C) 1996,1997,1998 Russell King - */ - -#include - -#define SERIAL_BASE ((unsigned char *)0xf0000be0) - -/* - * This does not append a newline - */ -static inline void putc(int c) -{ - unsigned char v, *base = SERIAL_BASE; - - do { - v = base[UART_LSR << 2]; - barrier(); - } while (!(v & UART_LSR_THRE)); - - base[UART_TX << 2] = c; -} - -static inline void flush(void) -{ - unsigned char v, *base = SERIAL_BASE; - - do { - v = base[UART_LSR << 2]; - barrier(); - } while ((v & (UART_LSR_TEMT|UART_LSR_THRE)) != - (UART_LSR_TEMT|UART_LSR_THRE)); -} - -/* - * nothing to do - */ -#define arch_decomp_setup() diff --git a/arch/arm/mach-ebsa110/io.c b/arch/arm/mach-ebsa110/io.c deleted file mode 100644 index 3c44dd3596ea..000000000000 --- a/arch/arm/mach-ebsa110/io.c +++ /dev/null @@ -1,440 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -/* - * linux/arch/arm/mach-ebsa110/isamem.c - * - * Copyright (C) 2001 Russell King - * - * Perform "ISA" memory and IO accesses. The EBSA110 has some "peculiarities" - * in the way it handles accesses to odd IO ports on 16-bit devices. These - * devices have their D0-D15 lines connected to the processors D0-D15 lines. - * Since they expect all byte IO operations to be performed on D0-D7, and the - * StrongARM expects to transfer the byte to these odd addresses on D8-D15, - * we must use a trick to get the required behaviour. - * - * The trick employed here is to use long word stores to odd address -1. The - * glue logic picks this up as a "trick" access, and asserts the LSB of the - * peripherals address bus, thereby accessing the odd IO port. Meanwhile, the - * StrongARM transfers its data on D0-D7 as expected. - * - * Things get more interesting on the pass-1 EBSA110 - the PCMCIA controller - * wiring was screwed in such a way that it had limited memory space access. - * Luckily, the work-around for this is not too horrible. See - * __isamem_convert_addr for the details. - */ -#include -#include -#include -#include - -#include -#include - -static void __iomem *__isamem_convert_addr(const volatile void __iomem *addr) -{ - u32 ret, a = (u32 __force) addr; - - /* - * The PCMCIA controller is wired up as follows: - * +---------+---------+---------+---------+---------+---------+ - * PCMCIA | 2 2 2 2 | 1 1 1 1 | 1 1 1 1 | 1 1 | | | - * | 3 2 1 0 | 9 8 7 6 | 5 4 3 2 | 1 0 9 8 | 7 6 5 4 | 3 2 1 0 | - * +---------+---------+---------+---------+---------+---------+ - * CPU | 2 2 2 2 | 2 1 1 1 | 1 1 1 1 | 1 1 1 | | | - * | 4 3 2 1 | 0 9 9 8 | 7 6 5 4 | 3 2 0 9 | 8 7 6 5 | 4 3 2 x | - * +---------+---------+---------+---------+---------+---------+ - * - * This means that we can access PCMCIA regions as follows: - * 0x*10000 -> 0x*1ffff - * 0x*70000 -> 0x*7ffff - * 0x*90000 -> 0x*9ffff - * 0x*f0000 -> 0x*fffff - */ - ret = (a & 0xf803fe) << 1; - ret |= (a & 0x03fc00) << 2; - - ret += 0xe8000000; - - if ((a & 0x20000) == (a & 0x40000) >> 1) - return (void __iomem *)ret; - - BUG(); - return NULL; -} - -/* - * read[bwl] and write[bwl] - */ -u8 __readb(const volatile void __iomem *addr) -{ - void __iomem *a = __isamem_convert_addr(addr); - u32 ret; - - if ((unsigned long)addr & 1) - ret = __raw_readl(a); - else - ret = __raw_readb(a); - return ret; -} - -u16 __readw(const volatile void __iomem *addr) -{ - void __iomem *a = __isamem_convert_addr(addr); - - if ((unsigned long)addr & 1) - BUG(); - - return __raw_readw(a); -} - -u32 __readl(const volatile void __iomem *addr) -{ - void __iomem *a = __isamem_convert_addr(addr); - u32 ret; - - if ((unsigned long)addr & 3) - BUG(); - - ret = __raw_readw(a); - ret |= __raw_readw(a + 4) << 16; - return ret; -} - -EXPORT_SYMBOL(__readb); -EXPORT_SYMBOL(__readw); -EXPORT_SYMBOL(__readl); - -void readsw(const volatile void __iomem *addr, void *data, int len) -{ - void __iomem *a = __isamem_convert_addr(addr); - - BUG_ON((unsigned long)addr & 1); - - __raw_readsw(a, data, len); -} -EXPORT_SYMBOL(readsw); - -void readsl(const volatile void __iomem *addr, void *data, int len) -{ - void __iomem *a = __isamem_convert_addr(addr); - - BUG_ON((unsigned long)addr & 3); - - __raw_readsl(a, data, len); -} -EXPORT_SYMBOL(readsl); - -void __writeb(u8 val, volatile void __iomem *addr) -{ - void __iomem *a = __isamem_convert_addr(addr); - - if ((unsigned long)addr & 1) - __raw_writel(val, a); - else - __raw_writeb(val, a); -} - -void __writew(u16 val, volatile void __iomem *addr) -{ - void __iomem *a = __isamem_convert_addr(addr); - - if ((unsigned long)addr & 1) - BUG(); - - __raw_writew(val, a); -} - -void __writel(u32 val, volatile void __iomem *addr) -{ - void __iomem *a = __isamem_convert_addr(addr); - - if ((unsigned long)addr & 3) - BUG(); - - __raw_writew(val, a); - __raw_writew(val >> 16, a + 4); -} - -EXPORT_SYMBOL(__writeb); -EXPORT_SYMBOL(__writew); -EXPORT_SYMBOL(__writel); - -void writesw(volatile void __iomem *addr, const void *data, int len) -{ - void __iomem *a = __isamem_convert_addr(addr); - - BUG_ON((unsigned long)addr & 1); - - __raw_writesw(a, data, len); -} -EXPORT_SYMBOL(writesw); - -void writesl(volatile void __iomem *addr, const void *data, int len) -{ - void __iomem *a = __isamem_convert_addr(addr); - - BUG_ON((unsigned long)addr & 3); - - __raw_writesl(a, data, len); -} -EXPORT_SYMBOL(writesl); - -/* - * The EBSA110 has a weird "ISA IO" region: - * - * Region 0 (addr = 0xf0000000 + io << 2) - * -------------------------------------------------------- - * Physical region IO region - * f0000fe0 - f0000ffc 3f8 - 3ff ttyS0 - * f0000e60 - f0000e64 398 - 399 - * f0000de0 - f0000dfc 378 - 37f lp0 - * f0000be0 - f0000bfc 2f8 - 2ff ttyS1 - * - * Region 1 (addr = 0xf0000000 + (io & ~1) << 1 + (io & 1)) - * -------------------------------------------------------- - * Physical region IO region - * f00014f1 a79 pnp write data - * f00007c0 - f00007c1 3e0 - 3e1 pcmcia - * f00004f1 279 pnp address - * f0000440 - f000046c 220 - 236 eth0 - * f0000405 203 pnp read data - */ -#define SUPERIO_PORT(p) \ - (((p) >> 3) == (0x3f8 >> 3) || \ - ((p) >> 3) == (0x2f8 >> 3) || \ - ((p) >> 3) == (0x378 >> 3)) - -/* - * We're addressing an 8 or 16-bit peripheral which tranfers - * odd addresses on the low ISA byte lane. - */ -u8 __inb8(unsigned int port) -{ - u32 ret; - - /* - * The SuperIO registers use sane addressing techniques... - */ - if (SUPERIO_PORT(port)) - ret = __raw_readb((void __iomem *)ISAIO_BASE + (port << 2)); - else { - void __iomem *a = (void __iomem *)ISAIO_BASE + ((port & ~1) << 1); - - /* - * Shame nothing else does - */ - if (port & 1) - ret = __raw_readl(a); - else - ret = __raw_readb(a); - } - return ret; -} - -/* - * We're addressing a 16-bit peripheral which transfers odd - * addresses on the high ISA byte lane. - */ -u8 __inb16(unsigned int port) -{ - unsigned int offset; - - /* - * The SuperIO registers use sane addressing techniques... - */ - if (SUPERIO_PORT(port)) - offset = port << 2; - else - offset = (port & ~1) << 1 | (port & 1); - - return __raw_readb((void __iomem *)ISAIO_BASE + offset); -} - -u16 __inw(unsigned int port) -{ - unsigned int offset; - - /* - * The SuperIO registers use sane addressing techniques... - */ - if (SUPERIO_PORT(port)) - offset = port << 2; - else { - offset = port << 1; - BUG_ON(port & 1); - } - return __raw_readw((void __iomem *)ISAIO_BASE + offset); -} - -/* - * Fake a 32-bit read with two 16-bit reads. Needed for 3c589. - */ -u32 __inl(unsigned int port) -{ - void __iomem *a; - - if (SUPERIO_PORT(port) || port & 3) - BUG(); - - a = (void __iomem *)ISAIO_BASE + ((port & ~1) << 1); - - return __raw_readw(a) | __raw_readw(a + 4) << 16; -} - -EXPORT_SYMBOL(__inb8); -EXPORT_SYMBOL(__inb16); -EXPORT_SYMBOL(__inw); -EXPORT_SYMBOL(__inl); - -void __outb8(u8 val, unsigned int port) -{ - /* - * The SuperIO registers use sane addressing techniques... - */ - if (SUPERIO_PORT(port)) - __raw_writeb(val, (void __iomem *)ISAIO_BASE + (port << 2)); - else { - void __iomem *a = (void __iomem *)ISAIO_BASE + ((port & ~1) << 1); - - /* - * Shame nothing else does - */ - if (port & 1) - __raw_writel(val, a); - else - __raw_writeb(val, a); - } -} - -void __outb16(u8 val, unsigned int port) -{ - unsigned int offset; - - /* - * The SuperIO registers use sane addressing techniques... - */ - if (SUPERIO_PORT(port)) - offset = port << 2; - else - offset = (port & ~1) << 1 | (port & 1); - - __raw_writeb(val, (void __iomem *)ISAIO_BASE + offset); -} - -void __outw(u16 val, unsigned int port) -{ - unsigned int offset; - - /* - * The SuperIO registers use sane addressing techniques... - */ - if (SUPERIO_PORT(port)) - offset = port << 2; - else { - offset = port << 1; - BUG_ON(port & 1); - } - __raw_writew(val, (void __iomem *)ISAIO_BASE + offset); -} - -void __outl(u32 val, unsigned int port) -{ - BUG(); -} - -EXPORT_SYMBOL(__outb8); -EXPORT_SYMBOL(__outb16); -EXPORT_SYMBOL(__outw); -EXPORT_SYMBOL(__outl); - -void outsb(unsigned int port, const void *from, int len) -{ - u32 off; - - if (SUPERIO_PORT(port)) - off = port << 2; - else { - off = (port & ~1) << 1; - if (port & 1) - BUG(); - } - - __raw_writesb((void __iomem *)ISAIO_BASE + off, from, len); -} - -void insb(unsigned int port, void *from, int len) -{ - u32 off; - - if (SUPERIO_PORT(port)) - off = port << 2; - else { - off = (port & ~1) << 1; - if (port & 1) - BUG(); - } - - __raw_readsb((void __iomem *)ISAIO_BASE + off, from, len); -} - -EXPORT_SYMBOL(outsb); -EXPORT_SYMBOL(insb); - -void outsw(unsigned int port, const void *from, int len) -{ - u32 off; - - if (SUPERIO_PORT(port)) - off = port << 2; - else { - off = (port & ~1) << 1; - if (port & 1) - BUG(); - } - - __raw_writesw((void __iomem *)ISAIO_BASE + off, from, len); -} - -void insw(unsigned int port, void *from, int len) -{ - u32 off; - - if (SUPERIO_PORT(port)) - off = port << 2; - else { - off = (port & ~1) << 1; - if (port & 1) - BUG(); - } - - __raw_readsw((void __iomem *)ISAIO_BASE + off, from, len); -} - -EXPORT_SYMBOL(outsw); -EXPORT_SYMBOL(insw); - -/* - * We implement these as 16-bit insw/outsw, mainly for - * 3c589 cards. - */ -void outsl(unsigned int port, const void *from, int len) -{ - u32 off = port << 1; - - if (SUPERIO_PORT(port) || port & 3) - BUG(); - - __raw_writesw((void __iomem *)ISAIO_BASE + off, from, len << 1); -} - -void insl(unsigned int port, void *from, int len) -{ - u32 off = port << 1; - - if (SUPERIO_PORT(port) || port & 3) - BUG(); - - __raw_readsw((void __iomem *)ISAIO_BASE + off, from, len << 1); -} - -EXPORT_SYMBOL(outsl); -EXPORT_SYMBOL(insl); diff --git a/arch/arm/mach-ebsa110/leds.c b/arch/arm/mach-ebsa110/leds.c deleted file mode 100644 index fd1474b66d31..000000000000 --- a/arch/arm/mach-ebsa110/leds.c +++ /dev/null @@ -1,71 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * Driver for the LED found on the EBSA110 machine - * Based on Versatile and RealView machine LED code - * - * Author: Bryan Wu - */ -#include -#include -#include -#include -#include - -#include - -#include "core.h" - -#if defined(CONFIG_NEW_LEDS) && defined(CONFIG_LEDS_CLASS) -static void ebsa110_led_set(struct led_classdev *cdev, - enum led_brightness b) -{ - u8 reg = __raw_readb(SOFT_BASE); - - if (b != LED_OFF) - reg |= 0x80; - else - reg &= ~0x80; - - __raw_writeb(reg, SOFT_BASE); -} - -static enum led_brightness ebsa110_led_get(struct led_classdev *cdev) -{ - u8 reg = __raw_readb(SOFT_BASE); - - return (reg & 0x80) ? LED_FULL : LED_OFF; -} - -static int __init ebsa110_leds_init(void) -{ - - struct led_classdev *cdev; - int ret; - - if (!machine_is_ebsa110()) - return -ENODEV; - - cdev = kzalloc(sizeof(*cdev), GFP_KERNEL); - if (!cdev) - return -ENOMEM; - - cdev->name = "ebsa110:0"; - cdev->brightness_set = ebsa110_led_set; - cdev->brightness_get = ebsa110_led_get; - cdev->default_trigger = "heartbeat"; - - ret = led_classdev_register(NULL, cdev); - if (ret < 0) { - kfree(cdev); - return ret; - } - - return 0; -} - -/* - * Since we may have triggers on any subsystem, defer registration - * until after subsystem_init. - */ -fs_initcall(ebsa110_leds_init); -#endif diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig index fd7968635e6d..f22e37337030 100644 --- a/drivers/watchdog/Kconfig +++ b/drivers/watchdog/Kconfig @@ -599,7 +599,7 @@ config K3_RTI_WATCHDOG config ORION_WATCHDOG tristate "Orion watchdog" - depends on ARCH_ORION5X || ARCH_DOVE || MACH_DOVE || ARCH_MVEBU || (COMPILE_TEST && !ARCH_EBSA110) + depends on ARCH_ORION5X || ARCH_DOVE || MACH_DOVE || ARCH_MVEBU || COMPILE_TEST depends on ARM select WATCHDOG_CORE help -- 2.27.0 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.0 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id BD86AC00A89 for ; Fri, 30 Oct 2020 15:20:52 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 1730D20756 for ; Fri, 30 Oct 2020 15:20:52 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="gaxQn1Ge"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="fzq/xIV/" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1730D20756 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:Message-Id:Date: Subject:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=1wnIdgNjOdzXLZJ0fu+RgHX8fuf4rbiTBbHx+bHreH4=; b=gaxQn1GeQq4wE9coKR28s93I1 oZ8qIKqt1FEo5R9WaPEN/Wlj4R8p322Vy6kLP+gD2vo/PD0QsSpq9RUqDKtJQM3pXtjpBqfE+pUnp GMmEpmHmAZJ/WD7PhcDiilB4Z8mxw6NPUnOkHiBJA3jwwnO4lsS1Unytf9//glDilHtZnI5M//aOV vCM0Q4psPq78qWU2wJ2pIXoWhO3sp+1MzbBwYt1aOnVwZ5zEhb60yF22rwUIbFpHY1sieJw9warTm uwJHhFUhjYgXborMydnWV93TB1VY8INMJGKsmhV6nMOIqUii2Pt8g6/B5/qGHK8p6iJPt/03pLli9 6vlgUJSNw==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kYWAh-0002RV-Tj; Fri, 30 Oct 2020 15:18:31 +0000 Received: from mail.kernel.org ([198.145.29.99]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kYWAa-0002PQ-8x for linux-arm-kernel@lists.infradead.org; Fri, 30 Oct 2020 15:18:29 +0000 Received: from localhost.localdomain (HSI-KBW-46-223-126-90.hsi.kabel-badenwuerttemberg.de [46.223.126.90]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id CD42D20A8B; Fri, 30 Oct 2020 15:18:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1604071103; bh=1vp/SJB7mnGBWfEVHLXuid5cTF9gxdNQ7WBfEo/ZU8U=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=fzq/xIV/0ULHfa3KcYl2oHEuhekMt5MHHdZX+PGz1l0eSGRbcmNrFmSSo9G89QMPC 13bBZ7UuOr12XOybGldKg3vBqVy9v4Fey57KoaHMLrHH/Otrf0jK7XRuNe7tz+0XeU OYHypJ7cenR1YOlFVX7DP+DennW1Nk0Hz5+OTG5s= From: Arnd Bergmann To: linux-kernel@vger.kernel.org Subject: [PATCH v2 01/15] ARM: remove ebsa110 platform Date: Fri, 30 Oct 2020 16:17:44 +0100 Message-Id: <20201030151758.1241164-2-arnd@kernel.org> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20201030151758.1241164-1-arnd@kernel.org> References: <20201030151758.1241164-1-arnd@kernel.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201030_111824_684282_87BB2967 X-CRM114-Status: GOOD ( 31.54 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Sam Creasey , Fenghua Yu , Linus Walleij , Tony Luck , linux-ia64@vger.kernel.org, Parisc List , Arnd Bergmann , Stephen Boyd , Philip Blundell , Helge Deller , Daniel Lezcano , Russell King , Finn Thain , "James E.J. Bottomley" , linux-m68k , John Stultz , Linux ARM , Thomas Gleixner , Russell King , Greg Ungerer , Joshua Thompson Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org RnJvbTogQXJuZCBCZXJnbWFubiA8YXJuZEBhcm5kYi5kZT4KClJ1c3NlbGwgc2FpZCB0aGF0IGhl IGlzIG5vIGxvbmdlciB1c2luZyB0aGlzIG1hY2hpbmUsIGFuZCBpdCBzZWVtcyB0aGF0Cm5vYm9k eSBlbHNlIGhhcyBpbiBhIGxvbmcgdGltZSwgc28gaXQncyB0aW1lIHRvIHNheSBnb29kYnllIHRv IGl0LgoKQXMgdGhpcyBpcyB0aGUgbGFzdCBwbGF0Zm9ybSB1c2luZyBDT05GSUdfQVJDSF9VU0VT X0dFVFRJTUVPRkZTRVQsCnRoZXJlIGFyZSBzb21lIGZvbGxvdy11cCBwYXRjaGVzIHRvIHJlbW92 ZSB0aGF0IGFzIHdlbGwuCgpBY2tlZC1ieTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxp bnV4Lm9yZy51az4KU2lnbmVkLW9mZi1ieTogQXJuZCBCZXJnbWFubiA8YXJuZEBhcm5kYi5kZT4K LS0tCiBNQUlOVEFJTkVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDgg LQogYXJjaC9hcm0vS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDI0ICst CiBhcmNoL2FybS9LY29uZmlnLmRlYnVnICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDYgKy0K IGFyY2gvYXJtL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgOCAtCiBh cmNoL2FybS9jb25maWdzL2Vic2ExMTBfZGVmY29uZmlnICAgICAgICAgICAgfCAgNzQgLS0tCiBh cmNoL2FybS9rZXJuZWwvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgfCAgIDYgKy0KIGFy Y2gvYXJtL21hY2gtZWJzYTExMC9NYWtlZmlsZSAgICAgICAgICAgICAgICB8ICAgOCAtCiBhcmNo L2FybS9tYWNoLWVic2ExMTAvTWFrZWZpbGUuYm9vdCAgICAgICAgICAgfCAgIDUgLQogYXJjaC9h cm0vbWFjaC1lYnNhMTEwL2NvcmUuYyAgICAgICAgICAgICAgICAgIHwgMzIzIC0tLS0tLS0tLS0t LS0KIGFyY2gvYXJtL21hY2gtZWJzYTExMC9jb3JlLmggICAgICAgICAgICAgICAgICB8ICAzOCAt LQogLi4uL21hY2gtZWJzYTExMC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUyAgIHwgIDMzIC0t CiBhcmNoL2FybS9tYWNoLWVic2ExMTAvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmggfCAgMjEgLQog YXJjaC9hcm0vbWFjaC1lYnNhMTEwL2luY2x1ZGUvbWFjaC9pby5oICAgICAgIHwgIDg5IC0tLS0K IGFyY2gvYXJtL21hY2gtZWJzYTExMC9pbmNsdWRlL21hY2gvaXJxcy5oICAgICB8ICAxNyAtCiBh cmNoL2FybS9tYWNoLWVic2ExMTAvaW5jbHVkZS9tYWNoL21lbW9yeS5oICAgfCAgMjIgLQogLi4u L21hY2gtZWJzYTExMC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oICAgIHwgIDQxIC0tCiBhcmNo L2FybS9tYWNoLWVic2ExMTAvaW8uYyAgICAgICAgICAgICAgICAgICAgfCA0NDAgLS0tLS0tLS0t LS0tLS0tLS0tCiBhcmNoL2FybS9tYWNoLWVic2ExMTAvbGVkcy5jICAgICAgICAgICAgICAgICAg fCAgNzEgLS0tCiBkcml2ZXJzL3dhdGNoZG9nL0tjb25maWcgICAgICAgICAgICAgICAgICAgICAg fCAgIDIgKy0KIDE5IGZpbGVzIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMTIyOSBkZWxldGlv bnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBhcmNoL2FybS9jb25maWdzL2Vic2ExMTBfZGVmY29u ZmlnCiBkZWxldGUgbW9kZSAxMDA2NDQgYXJjaC9hcm0vbWFjaC1lYnNhMTEwL01ha2VmaWxlCiBk ZWxldGUgbW9kZSAxMDA2NDQgYXJjaC9hcm0vbWFjaC1lYnNhMTEwL01ha2VmaWxlLmJvb3QKIGRl bGV0ZSBtb2RlIDEwMDY0NCBhcmNoL2FybS9tYWNoLWVic2ExMTAvY29yZS5jCiBkZWxldGUgbW9k ZSAxMDA2NDQgYXJjaC9hcm0vbWFjaC1lYnNhMTEwL2NvcmUuaAogZGVsZXRlIG1vZGUgMTAwNjQ0 IGFyY2gvYXJtL21hY2gtZWJzYTExMC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwogZGVsZXRl IG1vZGUgMTAwNjQ0IGFyY2gvYXJtL21hY2gtZWJzYTExMC9pbmNsdWRlL21hY2gvaGFyZHdhcmUu aAogZGVsZXRlIG1vZGUgMTAwNjQ0IGFyY2gvYXJtL21hY2gtZWJzYTExMC9pbmNsdWRlL21hY2gv aW8uaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGFyY2gvYXJtL21hY2gtZWJzYTExMC9pbmNsdWRlL21h Y2gvaXJxcy5oCiBkZWxldGUgbW9kZSAxMDA2NDQgYXJjaC9hcm0vbWFjaC1lYnNhMTEwL2luY2x1 ZGUvbWFjaC9tZW1vcnkuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGFyY2gvYXJtL21hY2gtZWJzYTEx MC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCiBkZWxldGUgbW9kZSAxMDA2NDQgYXJjaC9hcm0v bWFjaC1lYnNhMTEwL2lvLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBhcmNoL2FybS9tYWNoLWVic2Ex MTAvbGVkcy5jCgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCBl NzM2MzZiNzVmMjkuLjEyYzZhOTAyOGVkMiAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIv TUFJTlRBSU5FUlMKQEAgLTE3ODksMTQgKzE3ODksNiBAQCBGOglkcml2ZXJzL2Zpcm13YXJlL3R1 cnJpcy1tb3gtcnd0bS5jCiBGOglkcml2ZXJzL2dwaW8vZ3Bpby1tb3h0ZXQuYwogRjoJaW5jbHVk ZS9saW51eC9tb3h0ZXQuaAogCi1BUk0vRUJTQTExMCBNQUNISU5FIFNVUFBPUlQKLU06CVJ1c3Nl bGwgS2luZyA8bGludXhAYXJtbGludXgub3JnLnVrPgotTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0 cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKLVM6CU1haW50 YWluZWQKLVc6CWh0dHA6Ly93d3cuYXJtbGludXgub3JnLnVrLwotRjoJYXJjaC9hcm0vbWFjaC1l YnNhMTEwLwotRjoJZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2FtNzljOTYxYS4qCi0KIEFSTS9F TkVSR1kgTUlDUk8gKFNJTElDT04gTEFCUykgRUZNMzIgU1VQUE9SVAogTToJVXdlIEtsZWluZS1L w7ZuaWcgPHUua2xlaW5lLWtvZW5pZ0BwZW5ndXRyb25peC5kZT4KIFI6CVBlbmd1dHJvbml4IEtl cm5lbCBUZWFtIDxrZXJuZWxAcGVuZ3V0cm9uaXguZGU+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9L Y29uZmlnIGIvYXJjaC9hcm0vS2NvbmZpZwppbmRleCBmZTJmMTdlYjJiNTAuLjFiOWZkYTA4Yjky ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vS2NvbmZpZworKysgYi9hcmNoL2FybS9LY29uZmlnCkBA IC0yNjcsOCArMjY3LDcgQEAgY29uZmlnIFBIWVNfT0ZGU0VUCiAJaGV4ICJQaHlzaWNhbCBhZGRy ZXNzIG9mIG1haW4gbWVtb3J5IiBpZiBNTVUKIAlkZXBlbmRzIG9uICFBUk1fUEFUQ0hfUEhZU19W SVJUCiAJZGVmYXVsdCBEUkFNX0JBU0UgaWYgIU1NVQotCWRlZmF1bHQgMHgwMDAwMDAwMCBpZiBB UkNIX0VCU0ExMTAgfHwgXAotCQkJQVJDSF9GT09UQlJJREdFCisJZGVmYXVsdCAweDAwMDAwMDAw IEFSQ0hfRk9PVEJSSURHRQogCWRlZmF1bHQgMHgxMDAwMDAwMCBpZiBBUkNIX09NQVAxIHx8IEFS Q0hfUlBDCiAJZGVmYXVsdCAweDIwMDAwMDAwIGlmIEFSQ0hfUzVQVjIxMAogCWRlZmF1bHQgMHhj MDAwMDAwMCBpZiBBUkNIX1NBMTEwMApAQCAtMzQyLDIwICszNDEsNiBAQCBjb25maWcgQVJNX1NJ TkdMRV9BUk1WN00KIAlzZWxlY3QgU1BBUlNFX0lSUQogCXNlbGVjdCBVU0VfT0YKIAotY29uZmln IEFSQ0hfRUJTQTExMAotCWJvb2wgIkVCU0EtMTEwIgotCXNlbGVjdCBBUkNIX1VTRVNfR0VUVElN RU9GRlNFVAotCXNlbGVjdCBDUFVfU0ExMTAKLQlzZWxlY3QgSVNBCi0Jc2VsZWN0IE5FRURfTUFD SF9JT19ICi0Jc2VsZWN0IE5FRURfTUFDSF9NRU1PUllfSAotCXNlbGVjdCBOT19JT1BPUlRfTUFQ Ci0JaGVscAotCSAgVGhpcyBpcyBhbiBldmFsdWF0aW9uIGJvYXJkIGZvciB0aGUgU3Ryb25nQVJN IHByb2Nlc3NvciBhdmFpbGFibGUKLQkgIGZyb20gRGlnaXRhbC4gSXQgaGFzIGxpbWl0ZWQgaGFy ZHdhcmUgb24tYm9hcmQsIGluY2x1ZGluZyBhbgotCSAgRXRoZXJuZXQgaW50ZXJmYWNlLCB0d28g UENNQ0lBIHNvY2tldHMsIHR3byBzZXJpYWwgcG9ydHMgYW5kIGEKLQkgIHBhcmFsbGVsIHBvcnQu Ci0KIGNvbmZpZyBBUkNIX0VQOTNYWAogCWJvb2wgIkVQOTN4eC1iYXNlZCIKIAlzZWxlY3QgQVJD SF9TUEFSU0VNRU1fRU5BQkxFCkBAIC0xMzcxLDcgKzEzNTYsNiBAQCBjb25maWcgQVJDSF9OUl9H UElPCiAKIGNvbmZpZyBIWl9GSVhFRAogCWludAotCWRlZmF1bHQgMjAwIGlmIEFSQ0hfRUJTQTEx MAogCWRlZmF1bHQgMTI4IGlmIFNPQ19BVDkxUk05MjAwCiAJZGVmYXVsdCAwCiAKQEAgLTE1ODcs OSArMTU3MSw3IEBAIGNvbmZpZyBGT1JDRV9NQVhfWk9ORU9SREVSCiAJICBhIHZhbHVlIG9mIDEx IG1lYW5zIHRoYXQgdGhlIGxhcmdlc3QgZnJlZSBtZW1vcnkgYmxvY2sgaXMgMl4xMCBwYWdlcy4K IAogY29uZmlnIEFMSUdOTUVOVF9UUkFQCi0JYm9vbAotCWRlcGVuZHMgb24gQ1BVX0NQMTVfTU1V Ci0JZGVmYXVsdCB5IGlmICFBUkNIX0VCU0ExMTAKKwlkZWZfYm9vbCBDUFVfQ1AxNV9NTVUKIAlz ZWxlY3QgSEFWRV9QUk9DX0NQVSBpZiBQUk9DX0ZTCiAJaGVscAogCSAgQVJNIHByb2Nlc3NvcnMg Y2Fubm90IGZldGNoL3N0b3JlIGluZm9ybWF0aW9uIHdoaWNoIGlzIG5vdApAQCAtMTc4NCw3ICsx NzY2LDcgQEAgY29uZmlnIENNRExJTkUKIAlzdHJpbmcgIkRlZmF1bHQga2VybmVsIGNvbW1hbmQg c3RyaW5nIgogCWRlZmF1bHQgIiIKIAloZWxwCi0JICBPbiBzb21lIGFyY2hpdGVjdHVyZXMgKEVC U0ExMTAgYW5kIENBVFMpLCB0aGVyZSBpcyBjdXJyZW50bHkgbm8gd2F5CisJICBPbiBzb21lIGFy Y2hpdGVjdHVyZXMgKGUuZy4gQ0FUUyksIHRoZXJlIGlzIGN1cnJlbnRseSBubyB3YXkKIAkgIGZv ciB0aGUgYm9vdCBsb2FkZXIgdG8gcGFzcyBhcmd1bWVudHMgdG8gdGhlIGtlcm5lbC4gRm9yIHRo ZXNlCiAJICBhcmNoaXRlY3R1cmVzLCB5b3Ugc2hvdWxkIHN1cHBseSBzb21lIGNvbW1hbmQtbGlu ZSBvcHRpb25zIGF0IGJ1aWxkCiAJICB0aW1lIGJ5IGVudGVyaW5nIHRoZW0gaGVyZS4gQXMgYSBt aW5pbXVtLCB5b3Ugc2hvdWxkIHNwZWNpZnkgdGhlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9LY29u ZmlnLmRlYnVnIGIvYXJjaC9hcm0vS2NvbmZpZy5kZWJ1ZwppbmRleCA4OTg2YTkxYTZmMzEuLjRm ZjA0MjAxYThjYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNo L2FybS9LY29uZmlnLmRlYnVnCkBAIC0xNTY3LDcgKzE1NjcsNyBAQCBjb25maWcgREVCVUdfU0lS RlNPQ19VQVJUCiBjb25maWcgREVCVUdfVUFSVF9GTE9XX0NPTlRST0wKIAlib29sICJFbmFibGUg ZmxvdyBjb250cm9sIChDVFMpIGZvciB0aGUgZGVidWcgVUFSVCIKIAlkZXBlbmRzIG9uIERFQlVH X0xMCi0JZGVmYXVsdCB5IGlmIEFSQ0hfRUJTQTExMCB8fCBERUJVR19GT09UQlJJREdFX0NPTTEg fHwgREVCVUdfR0VNSU5JIHx8IEFSQ0hfUlBDCisJZGVmYXVsdCB5IGlmIERFQlVHX0ZPT1RCUklE R0VfQ09NMSB8fCBERUJVR19HRU1JTkkgfHwgQVJDSF9SUEMKIAloZWxwCiAJICBTb21lIFVBUlQg cG9ydHMgYXJlIGNvbm5lY3RlZCB0byB0ZXJtaW5hbHMgdGhhdCB3aWxsIHVzZSBtb2RlbQogCSAg Y29udHJvbCBzaWduYWxzIHRvIGluZGljYXRlIHdoZXRoZXIgdGhleSBhcmUgcmVhZHkgdG8gcmVj ZWl2ZSB0ZXh0LgpAQCAtMTYzOSw3ICsxNjM5LDcgQEAgY29uZmlnIERFQlVHX1VBUlRfUEwwMVgK IAogIyBDb21wYXRpYmlsaXR5IG9wdGlvbnMgZm9yIDgyNTAKIGNvbmZpZyBERUJVR19VQVJUXzgy NTAKLQlkZWZfYm9vbCBBUkNIX0VCU0ExMTAgfHwgQVJDSF9JT1AzMlggfHwgQVJDSF9JWFA0WFgg fHwgQVJDSF9SUEMKKwlkZWZfYm9vbCBBUkNIX0lPUDMyWCB8fCBBUkNIX0lYUDRYWCB8fCBBUkNI X1JQQwogCiBjb25maWcgREVCVUdfVUFSVF9QSFlTCiAJaGV4ICJQaHlzaWNhbCBiYXNlIGFkZHJl c3Mgb2YgZGVidWcgVUFSVCIKQEAgLTE3NDMsNyArMTc0Myw2IEBAIGNvbmZpZyBERUJVR19VQVJU X1BIWVMKIAlkZWZhdWx0IDB4ZTgwMDgwMDAgaWYgREVCVUdfUjdTNzIxMDBfU0NJRjIgfHwgREVC VUdfUjdTOTIxMF9TQ0lGMgogCWRlZmF1bHQgMHhlODAwOTAwMCBpZiBERUJVR19SN1M5MjEwX1ND SUY0CiAJZGVmYXVsdCAweGYwMDAwMDAwIGlmIERFQlVHX0RJR0lDT0xPUl9VQTAKLQlkZWZhdWx0 IDB4ZjAwMDBiZTAgaWYgQVJDSF9FQlNBMTEwCiAJZGVmYXVsdCAweGYxMDEyMDAwIGlmIERFQlVH X01WRUJVX1VBUlQwX0FMVEVSTkFURQogCWRlZmF1bHQgMHhmMTAxMjEwMCBpZiBERUJVR19NVkVC VV9VQVJUMV9BTFRFUk5BVEUKIAlkZWZhdWx0IDB4ZjdmYzkwMDAgaWYgREVCVUdfQkVSTElOX1VB UlQKQEAgLTE3OTAsNyArMTc4OSw2IEBAIGNvbmZpZyBERUJVR19VQVJUX1ZJUlQKIAlkZWZhdWx0 IDB4Yzg4MjEwMDAgaWYgREVCVUdfUlYxMTA4X1VBUlQxCiAJZGVmYXVsdCAweGM4OTEyMDAwIGlm IERFQlVHX1JWMTEwOF9VQVJUMAogCWRlZmF1bHQgMHhlMDAxMGZlMCBpZiBBUkNIX1JQQwotCWRl ZmF1bHQgMHhmMDAwMGJlMCBpZiBBUkNIX0VCU0ExMTAKIAlkZWZhdWx0IDB4ZjAwMTAwMDAgaWYg REVCVUdfQVNNOTI2MF9VQVJUCiAJZGVmYXVsdCAweGYwMTAwMDAwIGlmIERFQlVHX0RJR0lDT0xP Ul9VQTAKIAlkZWZhdWx0IDB4ZjAxZmIwMDAgaWYgREVCVUdfTk9NQURJS19VQVJUCmRpZmYgLS1n aXQgYS9hcmNoL2FybS9NYWtlZmlsZSBiL2FyY2gvYXJtL01ha2VmaWxlCmluZGV4IDRkNzZlYWIy YjIyZC4uNjQ5OTlkOTRlZDFiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9NYWtlZmlsZQorKysgYi9h cmNoL2FybS9NYWtlZmlsZQpAQCAtMTcyLDcgKzE3Miw2IEBAIG1hY2hpbmUtJChDT05GSUdfQVJD SF9DTlMzWFhYKQkJKz0gY25zM3h4eAogbWFjaGluZS0kKENPTkZJR19BUkNIX0RBVklOQ0kpCQkr PSBkYXZpbmNpCiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfRElHSUNPTE9SKQkrPSBkaWdpY29sb3IK IG1hY2hpbmUtJChDT05GSUdfQVJDSF9ET1ZFKQkJKz0gZG92ZQotbWFjaGluZS0kKENPTkZJR19B UkNIX0VCU0ExMTApCQkrPSBlYnNhMTEwCiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfRUZNMzIpCQkr PSBlZm0zMgogbWFjaGluZS0kKENPTkZJR19BUkNIX0VQOTNYWCkJCSs9IGVwOTN4eAogbWFjaGlu ZS0kKENPTkZJR19BUkNIX0VYWU5PUykJCSs9IGV4eW5vcwpAQCAtMjM5LDEzICsyMzgsNiBAQCBw bGF0LSQoQ09ORklHX1BMQVRfT1JJT04pCSs9IG9yaW9uCiBwbGF0LSQoQ09ORklHX1BMQVRfUFhB KQkJKz0gcHhhCiBwbGF0LSQoQ09ORklHX1BMQVRfVkVSU0FUSUxFKQkrPSB2ZXJzYXRpbGUKIAot aWZlcSAoJChDT05GSUdfQVJDSF9FQlNBMTEwKSx5KQotIyBUaGlzIGlzIHdoYXQgaGFwcGVucyBp ZiB5b3UgZm9yZ2V0IHRoZSBJT0NTMTYgbGluZS4KLSMgUENNQ0lBIGNhcmRzIHN0b3Agd29ya2lu Zy4KLUNGTEFHU18zYzU4OV9jcy5vIDo9LURJU0FfU0lYVEVFTl9CSVRfUEVSSVBIRVJBTAotZXhw b3J0IENGTEFHU18zYzU4OV9jcy5vCi1lbmRpZgotCiAjIFRoZSBieXRlIG9mZnNldCBvZiB0aGUg a2VybmVsIGltYWdlIGluIFJBTSBmcm9tIHRoZSBzdGFydCBvZiBSQU0uCiBURVhUX09GRlNFVCA6 PSAkKHRleHRvZnMteSkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9lYnNhMTEwX2Rl ZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvZWJzYTExMF9kZWZjb25maWcKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDczMWEyMmE1NWY0ZS4uMDAwMDAwMDAwMDAwCi0tLSBhL2FyY2gv YXJtL2NvbmZpZ3MvZWJzYTExMF9kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCww IEBACi1DT05GSUdfU1lTVklQQz15Ci1DT05GSUdfQlNEX1BST0NFU1NfQUNDVD15Ci1DT05GSUdf TE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0VYUEVSVD15Ci1DT05GSUdfTU9EVUxFUz15Ci1DT05G SUdfQVJDSF9FQlNBMTEwPXkKLUNPTkZJR19QQ0NBUkQ9bQotQ09ORklHX0k4MjM2NT1tCi1DT05G SUdfTEVEUz15Ci1DT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCi1DT05GSUdfWkJPT1RfUk9NX0JT Uz0weDAKLUNPTkZJR19DTURMSU5FPSJyb290PS9kZXYvbmZzIHJ3IG1lbT0xNk0gY29uc29sZT10 dHlTMSwzODQwMG44IgotQ09ORklHX0ZQRV9OV0ZQRT15Ci1DT05GSUdfRlBFX0ZBU1RGUEU9eQot Q09ORklHX0JJTkZNVF9BT1VUPXkKLUNPTkZJR19ORVQ9eQotQ09ORklHX1BBQ0tFVD15Ci1DT05G SUdfVU5JWD15Ci1DT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfTVVMVElDQVNUPXkKLUNPTkZJR19J UF9BRFZBTkNFRF9ST1VURVI9eQotQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUz15Ci1DT05GSUdf SVBfUk9VVEVfVkVSQk9TRT15Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfQk9PVFA9 eQotQ09ORklHX1NZTl9DT09LSUVTPXkKLUNPTkZJR19JUFY2PXkKLUNPTkZJR19ORVRGSUxURVI9 eQotQ09ORklHX0lQX05GX0lQVEFCTEVTPXkKLUNPTkZJR19JUF9ORl9NQVRDSF9FQ049eQotQ09O RklHX0lQX05GX01BVENIX1RUTD15Ci1DT05GSUdfSVBfTkZfRklMVEVSPXkKLUNPTkZJR19JUF9O Rl9UQVJHRVRfUkVKRUNUPXkKLUNPTkZJR19JUF9ORl9UQVJHRVRfTE9HPXkKLUNPTkZJR19JUF9O Rl9NQU5HTEU9eQotQ09ORklHX0lQX05GX1RBUkdFVF9FQ049eQotQ09ORklHX0lQNl9ORl9JUFRB QkxFUz15Ci1DT05GSUdfSVA2X05GX01BVENIX0ZSQUc9eQotQ09ORklHX0lQNl9ORl9NQVRDSF9P UFRTPXkKLUNPTkZJR19JUDZfTkZfTUFUQ0hfSEw9eQotQ09ORklHX0lQNl9ORl9NQVRDSF9SVD15 Ci1DT05GSUdfSVA2X05GX0ZJTFRFUj15Ci1DT05GSUdfSVA2X05GX01BTkdMRT15Ci1DT05GSUdf RldfTE9BREVSPW0KLUNPTkZJR19QQVJQT1JUPXkKLUNPTkZJR19QQVJQT1JUX1BDPXkKLUNPTkZJ R19QQVJQT1JUX1BDX0ZJRk89eQotQ09ORklHX1BBUlBPUlRfMTI4ND15Ci1DT05GSUdfQkxLX0RF Vl9SQU09eQotQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05G SUdfQVJNX0FNNzlDOTYxQT15Ci1DT05GSUdfTkVUX1BDTUNJQT15Ci1DT05GSUdfUENNQ0lBX1BD TkVUPW0KLUNPTkZJR19QUFA9bQotQ09ORklHX1BQUF9BU1lOQz1tCi1DT05GSUdfUFBQX0RFRkxB VEU9bQotQ09ORklHX1BQUF9CU0RDT01QPW0KLSMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKLSMg Q09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLUNPTkZJR19T RVJJQUxfODI1MD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFM XzgyNTBfQ1M9bQotQ09ORklHX1BSSU5URVI9bQotQ09ORklHX1dBVENIRE9HPXkKLUNPTkZJR19T T0ZUX1dBVENIRE9HPXkKLUNPTkZJR19BVVRPRlM0X0ZTPXkKLUNPTkZJR19NSU5JWF9GUz15Ci1D T05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQotQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJ R19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfTVNET1NfUEFSVElUSU9OIGlzIG5vdCBz ZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvYXJtL2tlcm5l bC9NYWtlZmlsZQppbmRleCA4OWU1ZDg2NGU5MjMuLjA5ZTY3Y2IwMmIyMCAxMDA2NDQKLS0tIGEv YXJjaC9hcm0va2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZQpA QCAtMTcsNyArMTcsNyBAQCBDRkxBR1NfUkVNT1ZFX3JldHVybl9hZGRyZXNzLm8gPSAtcGcKICMg T2JqZWN0IGZpbGUgbGlzdHMuCiAKIG9iai15CQk6PSBlbGYubyBlbnRyeS1jb21tb24ubyBpcnEu byBvcGNvZGVzLm8gXAotCQkgICBwcm9jZXNzLm8gcHRyYWNlLm8gcmVib290Lm8gXAorCQkgICBw cm9jZXNzLm8gcHRyYWNlLm8gcmVib290Lm8gaW8ubyBcCiAJCSAgIHNldHVwLm8gc2lnbmFsLm8g c2lncmV0dXJuX2NvZGVzLm8gXAogCQkgICBzdGFja3RyYWNlLm8gc3lzX2FybS5vIHRpbWUubyB0 cmFwcy5vCiAKQEAgLTgzLDEwICs4Myw2IEBAIEFGTEFHU19pd21teHQubwkJCTo9IC1XYSwtbWNw dT1pd21teHQKIG9iai0kKENPTkZJR19BUk1fQ1BVX1RPUE9MT0dZKSAgKz0gdG9wb2xvZ3kubwog b2JqLSQoQ09ORklHX1ZEU08pCQkrPSB2ZHNvLm8KIG9iai0kKENPTkZJR19FRkkpCQkrPSBlZmku bwotCi1pZm5lcSAoJChDT05GSUdfQVJDSF9FQlNBMTEwKSx5KQotICBvYmoteQkJKz0gaW8ubwot ZW5kaWYKIG9iai0kKENPTkZJR19QQVJBVklSVCkJKz0gcGFyYXZpcnQubwogCiBoZWFkLXkJCQk6 PSBoZWFkJChNTVVFWFQpLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZWJzYTExMC9NYWtl ZmlsZSBiL2FyY2gvYXJtL21hY2gtZWJzYTExMC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMjk2NTQxMzE1ZDI1Li4wMDAwMDAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFj aC1lYnNhMTEwL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi0jIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKLSMKLSMgTWFrZWZpbGUgZm9yIHRoZSBs aW51eCBrZXJuZWwuCi0jCi0KLSMgT2JqZWN0IGZpbGUgbGlzdHMuCi0KLW9iai15CQkJOj0gY29y ZS5vIGlvLm8gbGVkcy5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVic2ExMTAvTWFrZWZp bGUuYm9vdCBiL2FyY2gvYXJtL21hY2gtZWJzYTExMC9NYWtlZmlsZS5ib290CmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAppbmRleCBlN2U5ODkzN2M3MWIuLjAwMDAwMDAwMDAwMAotLS0gYS9hcmNo L2FybS9tYWNoLWVic2ExMTAvTWFrZWZpbGUuYm9vdAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAs MCBAQAotIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Ci0gICB6cmVsYWRk ci15CSs9IDB4MDAwMDgwMDAKLXBhcmFtc19waHlzLXkJOj0gMHgwMDAwMDQwMAotaW5pdHJkX3Bo eXMteQk6PSAweDAwODAwMDAwCi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZWJzYTExMC9j b3JlLmMgYi9hcmNoL2FybS9tYWNoLWVic2ExMTAvY29yZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NAppbmRleCA1OTYwZTNkZmQyYmYuLjAwMDAwMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNo LWVic2ExMTAvY29yZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzIzICswLDAgQEAKLS8vIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKLS8qCi0gKiAgbGludXgvYXJjaC9hcm0v bWFjaC1lYnNhMTEwL2NvcmUuYwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMSBSdXNz ZWxsIEtpbmcKLSAqCi0gKiAgRXh0cmEgTU0gcm91dGluZXMgZm9yIHRoZSBFQlNBLTExMCBhcmNo aXRlY3R1cmUKLSAqLwotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4 L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2Vy aWFsXzgyNTAuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW8u aD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0j aW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNs dWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW1fbWlzYy5oPgotCi0jaW5jbHVk ZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotI2luY2x1ZGUg PGFzbS9tYWNoL21hcC5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgotCi0jaW5jbHVk ZSAiY29yZS5oIgotCi1zdGF0aWMgdm9pZCBlYnNhMTEwX21hc2tfaXJxKHN0cnVjdCBpcnFfZGF0 YSAqZCkKLXsKLQlfX3Jhd193cml0ZWIoMSA8PCBkLT5pcnEsIElSUV9NQ0xSKTsKLX0KLQotc3Rh dGljIHZvaWQgZWJzYTExMF91bm1hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKLXsKLQlfX3Jh d193cml0ZWIoMSA8PCBkLT5pcnEsIElSUV9NU0VUKTsKLX0KLQotc3RhdGljIHN0cnVjdCBpcnFf Y2hpcCBlYnNhMTEwX2lycV9jaGlwID0gewotCS5pcnFfYWNrCT0gZWJzYTExMF9tYXNrX2lycSwK LQkuaXJxX21hc2sJPSBlYnNhMTEwX21hc2tfaXJxLAotCS5pcnFfdW5tYXNrCT0gZWJzYTExMF91 bm1hc2tfaXJxLAotfTsKLSAKLXN0YXRpYyB2b2lkIF9faW5pdCBlYnNhMTEwX2luaXRfaXJxKHZv aWQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgaXJxOwotCi0JbG9j YWxfaXJxX3NhdmUoZmxhZ3MpOwotCV9fcmF3X3dyaXRlYigweGZmLCBJUlFfTUNMUik7Ci0JX19y YXdfd3JpdGViKDB4NTUsIElSUV9NU0VUKTsKLQlfX3Jhd193cml0ZWIoMHgwMCwgSVJRX01TRVQp OwotCWlmIChfX3Jhd19yZWFkYihJUlFfTUFTSykgIT0gMHg1NSkKLQkJd2hpbGUgKDEpOwotCV9f cmF3X3dyaXRlYigweGZmLCBJUlFfTUNMUik7CS8qIGNsZWFyIGFsbCBpbnRlcnJ1cHQgZW5hYmxl cyAqLwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCWZvciAoaXJxID0gMDsgaXJxIDwg TlJfSVJRUzsgaXJxKyspIHsKLQkJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKGlycSwgJmVic2Ex MTBfaXJxX2NoaXAsCi0JCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKLQkJaXJxX2NsZWFyX3N0YXR1 c19mbGFncyhpcnEsIElSUV9OT1JFUVVFU1QgfCBJUlFfTk9QUk9CRSk7Ci0JfQotfQotCi1zdGF0 aWMgc3RydWN0IG1hcF9kZXNjIGVic2ExMTBfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7Ci0JLyoK LQkgKiBzcGFyc2UgZXh0ZXJuYWwtZGVjb2RlIElTQUlPIHNwYWNlCi0JICovCi0JewkvKiBJUlFf U1RBVC9JUlFfTUNMUiAqLwotCQkudmlydHVhbAk9ICh1bnNpZ25lZCBsb25nKUlSUV9TVEFULAot CQkucGZuCQk9IF9fcGh5c190b19wZm4oVFJJQ0s0X1BIWVMpLAotCQkubGVuZ3RoCQk9IFRSSUNL NF9TSVpFLAotCQkudHlwZQkJPSBNVF9ERVZJQ0UKLQl9LCB7CS8qIElSUV9NQVNLL0lSUV9NU0VU ICovCi0JCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpSVJRX01BU0ssCi0JCS5wZm4JCT0gX19w aHlzX3RvX3BmbihUUklDSzNfUEhZUyksCi0JCS5sZW5ndGgJCT0gVFJJQ0szX1NJWkUsCi0JCS50 eXBlCQk9IE1UX0RFVklDRQotCX0sIHsJLyogU09GVF9CQVNFICovCi0JCS52aXJ0dWFsCT0gKHVu c2lnbmVkIGxvbmcpU09GVF9CQVNFLAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oVFJJQ0sxX1BI WVMpLAotCQkubGVuZ3RoCQk9IFRSSUNLMV9TSVpFLAotCQkudHlwZQkJPSBNVF9ERVZJQ0UKLQl9 LCB7CS8qIFBJVF9CQVNFICovCi0JCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpUElUX0JBU0Us Ci0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihUUklDSzBfUEhZUyksCi0JCS5sZW5ndGgJCT0gVFJJ Q0swX1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRQotCX0sCi0KLQkvKgotCSAqIHNlbGYtZGVj b2RlIElTQUlPIHNwYWNlCi0JICovCi0JewotCQkudmlydHVhbAk9IElTQUlPX0JBU0UsCi0JCS5w Zm4JCT0gX19waHlzX3RvX3BmbihJU0FJT19QSFlTKSwKLQkJLmxlbmd0aAkJPSBJU0FJT19TSVpF LAotCQkudHlwZQkJPSBNVF9ERVZJQ0UKLQl9LCB7Ci0JCS52aXJ0dWFsCT0gSVNBTUVNX0JBU0Us Ci0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihJU0FNRU1fUEhZUyksCi0JCS5sZW5ndGgJCT0gSVNB TUVNX1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRQotCX0KLX07Ci0KLXN0YXRpYyB2b2lkIF9f aW5pdCBlYnNhMTEwX21hcF9pbyh2b2lkKQotewotCWlvdGFibGVfaW5pdChlYnNhMTEwX2lvX2Rl c2MsIEFSUkFZX1NJWkUoZWJzYTExMF9pb19kZXNjKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW9t ZW0gKmVic2ExMTBfaW9yZW1hcF9jYWxsZXIocGh5c19hZGRyX3QgY29va2llLCBzaXplX3Qgc2l6 ZSwKLQkJCQkJICAgIHVuc2lnbmVkIGludCBmbGFncywgdm9pZCAqY2FsbGVyKQotewotCXJldHVy biAodm9pZCBfX2lvbWVtICopY29va2llOwotfQotCi1zdGF0aWMgdm9pZCBlYnNhMTEwX2lvdW5t YXAodm9sYXRpbGUgdm9pZCBfX2lvbWVtICppb19hZGRyKQote30KLQotc3RhdGljIHZvaWQgX19p bml0IGVic2ExMTBfaW5pdF9lYXJseSh2b2lkKQotewotCWFyY2hfaW9yZW1hcF9jYWxsZXIgPSBl YnNhMTEwX2lvcmVtYXBfY2FsbGVyOwotCWFyY2hfaW91bm1hcCA9IGVic2ExMTBfaW91bm1hcDsK LX0KLQotI2RlZmluZSBQSVRfQ1RSTAkJKFBJVF9CQVNFICsgMHgwZCkKLSNkZWZpbmUgUElUX1Qy CQkJKFBJVF9CQVNFICsgMHgwOSkKLSNkZWZpbmUgUElUX1QxCQkJKFBJVF9CQVNFICsgMHgwNSkK LSNkZWZpbmUgUElUX1QwCQkJKFBJVF9CQVNFICsgMHgwMSkKLQotLyoKLSAqIFRoaXMgaXMgdGhl IHJhdGUgYXQgd2hpY2ggeW91ciBNQ0xLIHNpZ25hbCB0b2dnbGVzIChpbiBIeikKLSAqIFRoaXMg d2FzIG1lYXN1cmVkIG9uIGEgMTAgZGlnaXQgZnJlcXVlbmN5IGNvdW50ZXIgc2FtcGxpbmcKLSAq IG92ZXIgMSBzZWNvbmQuCi0gKi8KLSNkZWZpbmUgTUNMSwk0Nzg5NDAwMAotCi0vKgotICogVGhp cyBpcyB0aGUgcmF0ZSBhdCB3aGljaCB0aGUgUElUIHRpbWVycyBnZXQgY2xvY2tlZAotICovCi0j ZGVmaW5lIENMS0JZNwkoTUNMSyAvIDcpCi0KLS8qCi0gKiBUaGlzIGlzIHRoZSBjb3VudGVyIHZh bHVlLiAgV2UgdGljayBhdCAyMDBIeiBvbiB0aGlzIHBsYXRmb3JtLgotICovCi0jZGVmaW5lIENP VU5UCSgoQ0xLQlk3ICsgKEhaIC8gMikpIC8gSFopCi0KLS8qCi0gKiBHZXQgdGhlIHRpbWUgb2Zm c2V0IGZyb20gdGhlIHN5c3RlbSBQSVQuICBOb3RlIHRoYXQgaWYgd2UgaGF2ZSBtaXNzZWQgYW4K LSAqIGludGVycnVwdCwgdGhlbiB0aGUgUElUIGNvdW50ZXIgd2lsbCByb2xsIG92ZXIgKGllLCBi ZSBuZWdhdGl2ZSkuCi0gKiBUaGlzIGFjdHVhbGx5IHdvcmtzIG91dCB0byBiZSBjb252ZW5pZW50 LgotICovCi1zdGF0aWMgdTMyIGVic2ExMTBfZ2V0dGltZW9mZnNldCh2b2lkKQotewotCXVuc2ln bmVkIGxvbmcgb2Zmc2V0LCBjb3VudDsKLQotCV9fcmF3X3dyaXRlYigweDQwLCBQSVRfQ1RSTCk7 Ci0JY291bnQgPSBfX3Jhd19yZWFkYihQSVRfVDEpOwotCWNvdW50IHw9IF9fcmF3X3JlYWRiKFBJ VF9UMSkgPDwgODsKLQotCS8qCi0JICogSWYgY291bnQgPiBDT1VOVCwgbWFrZSB0aGUgbnVtYmVy IG5lZ2F0aXZlLgotCSAqLwotCWlmIChjb3VudCA+IENPVU5UKQotCQljb3VudCB8PSAweGZmZmYw MDAwOwotCi0Jb2Zmc2V0ID0gQ09VTlQ7Ci0Jb2Zmc2V0IC09IGNvdW50OwotCi0JLyoKLQkgKiBg b2Zmc2V0JyBpcyBpbiB1bml0cyBvZiB0aW1lciBjb3VudHMuICBDb252ZXJ0Ci0JICogb2Zmc2V0 IHRvIHVuaXRzIG9mIG1pY3Jvc2Vjb25kcy4KLQkgKi8KLQlvZmZzZXQgPSBvZmZzZXQgKiAoMTAw MDAwMCAvIEhaKSAvIENPVU5UOwotCi0JcmV0dXJuIG9mZnNldCAqIDEwMDA7Ci19Ci0KLXN0YXRp YyBpcnFyZXR1cm5fdAotZWJzYTExMF90aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2 X2lkKQotewotCXUzMiBjb3VudDsKLQotCS8qIGxhdGNoIGFuZCByZWFkIHRpbWVyIDEgKi8KLQlf X3Jhd193cml0ZWIoMHg0MCwgUElUX0NUUkwpOwotCWNvdW50ID0gX19yYXdfcmVhZGIoUElUX1Qx KTsKLQljb3VudCB8PSBfX3Jhd19yZWFkYihQSVRfVDEpIDw8IDg7Ci0KLQljb3VudCArPSBDT1VO VDsKLQotCV9fcmF3X3dyaXRlYihjb3VudCAmIDB4ZmYsIFBJVF9UMSk7Ci0JX19yYXdfd3JpdGVi KGNvdW50ID4+IDgsIFBJVF9UMSk7Ci0KLQl0aW1lcl90aWNrKCk7Ci0KLQlyZXR1cm4gSVJRX0hB TkRMRUQ7Ci19Ci0KLS8qCi0gKiBTZXQgdXAgdGltZXIgaW50ZXJydXB0LgotICovCi12b2lkIF9f aW5pdCBlYnNhMTEwX3RpbWVyX2luaXQodm9pZCkKLXsKLQlpbnQgaXJxID0gSVJRX0VCU0ExMTBf VElNRVIwOwotCi0JYXJjaF9nZXR0aW1lb2Zmc2V0ID0gZWJzYTExMF9nZXR0aW1lb2Zmc2V0Owot Ci0JLyoKLQkgKiBUaW1lciAxLCBtb2RlIDIsIExTQi9NU0IKLQkgKi8KLQlfX3Jhd193cml0ZWIo MHg3MCwgUElUX0NUUkwpOwotCV9fcmF3X3dyaXRlYihDT1VOVCAmIDB4ZmYsIFBJVF9UMSk7Ci0J X19yYXdfd3JpdGViKENPVU5UID4+IDgsIFBJVF9UMSk7Ci0KLQlpZiAocmVxdWVzdF9pcnEoaXJx LCBlYnNhMTEwX3RpbWVyX2ludGVycnVwdCwgSVJRRl9USU1FUiB8IElSUUZfSVJRUE9MTCwKLQkJ CSJFQlNBMTEwIFRpbWVyIFRpY2siLCBOVUxMKSkKLQkJcHJfZXJyKCJGYWlsZWQgdG8gcmVxdWVz dCBpcnEgJWQgKEVCU0ExMTAgVGltZXIgVGljaylcbiIsIGlycSk7Ci19Ci0KLXN0YXRpYyBzdHJ1 Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgc2VyaWFsX3BsYXRmb3JtX2RhdGFbXSA9IHsKLQl7Ci0J CS5pb2Jhc2UJCT0gMHgzZjgsCi0JCS5pcnEJCT0gMSwKLQkJLnVhcnRjbGsJPSAxODQzMjAwLAot CQkucmVnc2hpZnQJPSAwLAotCQkuaW90eXBlCQk9IFVQSU9fUE9SVCwKLQkJLmZsYWdzCQk9IFVQ Rl9CT09UX0FVVE9DT05GIHwgVVBGX1NLSVBfVEVTVCwKLQl9LAotCXsKLQkJLmlvYmFzZQkJPSAw eDJmOCwKLQkJLmlycQkJPSAyLAotCQkudWFydGNsawk9IDE4NDMyMDAsCi0JCS5yZWdzaGlmdAk9 IDAsCi0JCS5pb3R5cGUJCT0gVVBJT19QT1JULAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NP TkYgfCBVUEZfU0tJUF9URVNULAotCX0sCi0JeyB9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2Ugc2VyaWFsX2RldmljZSA9IHsKLQkubmFtZQkJCT0gInNlcmlhbDgyNTAiLAot CS5pZAkJCT0gUExBVDgyNTBfREVWX1BMQVRGT1JNLAotCS5kZXYJCQk9IHsKLQkJLnBsYXRmb3Jt X2RhdGEJPSBzZXJpYWxfcGxhdGZvcm1fZGF0YSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBy ZXNvdXJjZSBhbTc5Yzk2MV9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydAkJPSAweDIyMCwK LQkJLmVuZAkJPSAweDIzOCwKLQkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSU8sCi0JfSwgewotCQku c3RhcnQJCT0gSVJRX0VCU0ExMTBfRVRIRVJORVQsCi0JCS5lbmQJCT0gSVJRX0VCU0ExMTBfRVRI RVJORVQsCi0JCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYW03OWM5NjFfZGV2aWNlID0gewotCS5uYW1lCQkJPSAiYW03 OWM5NjEiLAotCS5pZAkJCT0gLTEsCi0JLm51bV9yZXNvdXJjZXMJCT0gQVJSQVlfU0laRShhbTc5 Yzk2MV9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQkJPSBhbTc5Yzk2MV9yZXNvdXJjZXMsCi19Owot Ci1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZWJzYTExMF9kZXZpY2VzW10gPSB7Ci0J JnNlcmlhbF9kZXZpY2UsCi0JJmFtNzljOTYxX2RldmljZSwKLX07Ci0KLS8qCi0gKiBFQlNBMTEw IGlkbGluZyBtZXRob2RvbG9neToKLSAqCi0gKiBXZSBjYW4gbm90IGV4ZWN1dGUgdGhlICJ3YWl0 IGZvciBpbnRlcnJ1cHQiIGluc3RydWN0aW9uIHNpbmNlIHRoYXQKLSAqIHdpbGwgc3RvcCBvdXIg TUNMSyBzaWduYWwgKHdoaWNoIHByb3ZpZGVzIHRoZSBjbG9jayBmb3IgdGhlIGdsdWUKLSAqIGxv Z2ljLCBhbmQgdGhlcmVmb3JlIHRoZSB0aW1lciBpbnRlcnJ1cHQpLgotICoKLSAqIEluc3RlYWQs IHdlIHNwaW4sIHBvbGxpbmcgdGhlIElSUV9TVEFUIHJlZ2lzdGVyIGZvciB0aGUgb2NjdXJyZW5j ZQotICogb2YgYW55IGludGVycnVwdCB3aXRoIGNvcmUgY2xvY2sgZG93biB0byB0aGUgbWVtb3J5 IGNsb2NrLgotICovCi1zdGF0aWMgdm9pZCBlYnNhMTEwX2lkbGUodm9pZCkKLXsKLQljb25zdCBj aGFyICppcnFfc3RhdCA9IChjaGFyICopMHhmZjAwMDAwMDsKLQotCS8qIGRpc2FibGUgY2xvY2sg c3dpdGNoaW5nICovCi0JYXNtIHZvbGF0aWxlICgibWNyIHAxNSwgMCwgaXAsIGMxNSwgYzIsIDIi IDogOiA6ICJjYyIpOwotCi0JLyogd2FpdCBmb3IgYW4gaW50ZXJydXB0IHRvIG9jY3VyICovCi0J d2hpbGUgKCEqaXJxX3N0YXQpOwotCi0JLyogZW5hYmxlIGNsb2NrIHN3aXRjaGluZyAqLwotCWFz bSB2b2xhdGlsZSAoIm1jciBwMTUsIDAsIGlwLCBjMTUsIGMxLCAyIiA6IDogOiAiY2MiKTsKLX0K LQotc3RhdGljIGludCBfX2luaXQgZWJzYTExMF9pbml0KHZvaWQpCi17Ci0JYXJtX3BtX2lkbGUg PSBlYnNhMTEwX2lkbGU7Ci0JcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKGVic2ExMTBfZGV2 aWNlcywgQVJSQVlfU0laRShlYnNhMTEwX2RldmljZXMpKTsKLX0KLQotYXJjaF9pbml0Y2FsbChl YnNhMTEwX2luaXQpOwotCi1zdGF0aWMgdm9pZCBlYnNhMTEwX3Jlc3RhcnQoZW51bSByZWJvb3Rf bW9kZSBtb2RlLCBjb25zdCBjaGFyICpjbWQpCi17Ci0Jc29mdF9yZXN0YXJ0KDB4ODAwMDAwMDAp OwotfQotCi1NQUNISU5FX1NUQVJUKEVCU0ExMTAsICJFQlNBMTEwIikKLQkvKiBNYWludGFpbmVy OiBSdXNzZWxsIEtpbmcgKi8KLQkuYXRhZ19vZmZzZXQJPSAweDQwMCwKLQkucmVzZXJ2ZV9scDAJ PSAxLAotCS5yZXNlcnZlX2xwMgk9IDEsCi0JLm1hcF9pbwkJPSBlYnNhMTEwX21hcF9pbywKLQku aW5pdF9lYXJseQk9IGVic2ExMTBfaW5pdF9lYXJseSwKLQkuaW5pdF9pcnEJPSBlYnNhMTEwX2lu aXRfaXJxLAotCS5pbml0X3RpbWUJPSBlYnNhMTEwX3RpbWVyX2luaXQsCi0JLnJlc3RhcnQJPSBl YnNhMTEwX3Jlc3RhcnQsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1l YnNhMTEwL2NvcmUuaCBiL2FyY2gvYXJtL21hY2gtZWJzYTExMC9jb3JlLmgKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDQ3YWNjNjEwYjZiNC4uMDAwMDAwMDAwMDAwCi0tLSBhL2FyY2gv YXJtL21hY2gtZWJzYTExMC9jb3JlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0v KiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCi0vKgotICogIENvcHly aWdodCAoQykgMTk5Ni0yMDAwIFJ1c3NlbGwgS2luZy4KLSAqCi0gKiBUaGlzIGZpbGUgY29udGFp bnMgdGhlIGNvcmUgaGFyZHdhcmUgZGVmaW5pdGlvbnMgb2YgdGhlIEVCU0EtMTEwLgotICovCi0j aWZuZGVmIENPUkVfSAotI2RlZmluZSBDT1JFX0gKLQotLyogUGh5c2ljYWwgYWRkcmVzc2VzL3Np emVzICovCi0jZGVmaW5lIElTQU1FTV9QSFlTCQkweGUwMDAwMDAwCi0jZGVmaW5lIElTQU1FTV9T SVpFCQkweDEwMDAwMDAwCi0KLSNkZWZpbmUgSVNBSU9fUEhZUwkJMHhmMDAwMDAwMAotI2RlZmlu ZSBJU0FJT19TSVpFCQlQR0RJUl9TSVpFCi0KLSNkZWZpbmUgVFJJQ0swX1BIWVMJCTB4ZjIwMDAw MDAKLSNkZWZpbmUgVFJJQ0swX1NJWkUJCVBHRElSX1NJWkUKLSNkZWZpbmUgVFJJQ0sxX1BIWVMJ CTB4ZjI0MDAwMDAKLSNkZWZpbmUgVFJJQ0sxX1NJWkUJCVBHRElSX1NJWkUKLSNkZWZpbmUgVFJJ Q0syX1BIWVMJCTB4ZjI4MDAwMDAKLSNkZWZpbmUgVFJJQ0szX1BIWVMJCTB4ZjJjMDAwMDAKLSNk ZWZpbmUgVFJJQ0szX1NJWkUJCVBHRElSX1NJWkUKLSNkZWZpbmUgVFJJQ0s0X1BIWVMJCTB4ZjMw MDAwMDAKLSNkZWZpbmUgVFJJQ0s0X1NJWkUJCVBHRElSX1NJWkUKLSNkZWZpbmUgVFJJQ0s1X1BI WVMJCTB4ZjM0MDAwMDAKLSNkZWZpbmUgVFJJQ0s2X1BIWVMJCTB4ZjM4MDAwMDAKLSNkZWZpbmUg VFJJQ0s3X1BIWVMJCTB4ZjNjMDAwMDAKLQotLyogVmlydHVhbCBhZGRyZXNzZXMgKi8KLSNkZWZp bmUgUElUX0JBU0UJCUlPTUVNKDB4ZmMwMDAwMDApCS8qIHRyaWNrIDAgKi8KLSNkZWZpbmUgU09G VF9CQVNFCQlJT01FTSgweGZkMDAwMDAwKQkvKiB0cmljayAxICovCi0jZGVmaW5lIElSUV9NQVNL CQlJT01FTSgweGZlMDAwMDAwKQkvKiB0cmljayAzIC0gcmVhZCAqLwotI2RlZmluZSBJUlFfTVNF VAkJSU9NRU0oMHhmZTAwMDAwMCkJLyogdHJpY2sgMyAtIHdyaXRlICovCi0jZGVmaW5lIElSUV9T VEFUCQlJT01FTSgweGZmMDAwMDAwKQkvKiB0cmljayA0IC0gcmVhZCAqLwotI2RlZmluZSBJUlFf TUNMUgkJSU9NRU0oMHhmZjAwMDAwMCkJLyogdHJpY2sgNCAtIHdyaXRlICovCi0KLSNlbmRpZgpk aWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lYnNhMTEwL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNy by5TIGIvYXJjaC9hcm0vbWFjaC1lYnNhMTEwL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGIxMTBkZTc4YTkuLjAwMDAwMDAwMDAwMAot LS0gYS9hcmNoL2FybS9tYWNoLWVic2ExMTAvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKKysr IC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKgotICogYXJjaC9hcm0vbWFjaC1lYnNhMTEw L2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCi0gKgotICogTG93LWxldmVsIElSUSBoZWxwZXIg bWFjcm9zIGZvciBlYnNhMTEwIHBsYXRmb3JtLgotICoKLSAqIFRoaXMgZmlsZSBpcyBsaWNlbnNl ZCB1bmRlciAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug dmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQot ICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICov Ci0KLQotCi0jZGVmaW5lIElSUV9TVEFUCQkweGZmMDAwMDAwCS8qIHJlYWQgKi8KLQotCS5tYWNy byAgZ2V0X2lycW5yX3ByZWFtYmxlLCBiYXNlLCB0bXAKLQltb3YJXGJhc2UsICNJUlFfU1RBVAot CS5lbmRtCi0KLQkubWFjcm8JZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgc3RhdCwgYmFzZSwg dG1wCi0JbGRyYglcc3RhdCwgW1xiYXNlXQkJCUAgZ2V0IGludGVycnVwdHMKLQltb3YJXGlycW5y LCAjMAotCXRzdAlcc3RhdCwgIzE1Ci0JYWRkZXEJXGlycW5yLCBcaXJxbnIsICM0Ci0JbW92ZXEJ XHN0YXQsIFxzdGF0LCBsc3IgIzQKLQl0c3QJXHN0YXQsICMzCi0JYWRkZXEJXGlycW5yLCBcaXJx bnIsICMyCi0JbW92ZXEJXHN0YXQsIFxzdGF0LCBsc3IgIzIKLQl0c3QJXHN0YXQsICMxCi0JYWRk ZXEJXGlycW5yLCBcaXJxbnIsICMxCi0JbW92ZXEJXHN0YXQsIFxzdGF0LCBsc3IgIzEKLQl0c3QJ XHN0YXQsICMxCQkJQCBiaXQgMCBzaG91bGQgYmUgc2V0Ci0JLmVuZG0KLQpkaWZmIC0tZ2l0IGEv YXJjaC9hcm0vbWFjaC1lYnNhMTEwL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oIGIvYXJjaC9hcm0v bWFjaC1lYnNhMTEwL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NAppbmRleCA4MWY2OTY3NjgzZjYuLjAwMDAwMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNo LWVic2ExMTAvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMSAr MCwwIEBACi0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCi0vKgot ICogIGFyY2gvYXJtL21hY2gtZWJzYTExMC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAotICoKLSAq ICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCBSdXNzZWxsIEtpbmcuCi0gKgotICogVGhpcyBmaWxl IGNvbnRhaW5zIHRoZSBoYXJkd2FyZSBkZWZpbml0aW9ucyBvZiB0aGUgRUJTQS0xMTAuCi0gKi8K LSNpZm5kZWYgX19BU01fQVJDSF9IQVJEV0FSRV9ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfSEFSRFdB UkVfSAotCi0jZGVmaW5lIElTQU1FTV9CQVNFCQkweGUwMDAwMDAwCi0jZGVmaW5lIElTQUlPX0JB U0UJCTB4ZjAwMDAwMDAKLQotLyoKLSAqIFJBTSBkZWZpbml0aW9ucwotICovCi0jZGVmaW5lIFVO Q0FDSEVBQkxFX0FERFIJMHhmZjAwMDAwMAkvKiBJUlFfU1RBVCAqLwotCi0jZW5kaWYKLQpkaWZm IC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lYnNhMTEwL2luY2x1ZGUvbWFjaC9pby5oIGIvYXJjaC9h cm0vbWFjaC1lYnNhMTEwL2luY2x1ZGUvbWFjaC9pby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCBhZDE3MDg4NmM5YWEuLjAwMDAwMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWVi c2ExMTAvaW5jbHVkZS9tYWNoL2lvLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0v KiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCi0vKgotICogIGFyY2gv YXJtL21hY2gtZWJzYTExMC9pbmNsdWRlL21hY2gvaW8uaAotICoKLSAqICBDb3B5cmlnaHQgKEMp IDE5OTcsMTk5OCBSdXNzZWxsIEtpbmcKLSAqCi0gKiBNb2RpZmljYXRpb25zOgotICogIDA2LURl Yy0xOTk3CVJNSwlDcmVhdGVkLgotICovCi0jaWZuZGVmIF9fQVNNX0FSTV9BUkNIX0lPX0gKLSNk ZWZpbmUgX19BU01fQVJNX0FSQ0hfSU9fSAotCi11OCBfX2luYjgodW5zaWduZWQgaW50IHBvcnQp Owotdm9pZCBfX291dGI4KHU4ICB2YWwsIHVuc2lnbmVkIGludCBwb3J0KTsKLQotdTggX19pbmIx Nih1bnNpZ25lZCBpbnQgcG9ydCk7Ci12b2lkIF9fb3V0YjE2KHU4ICB2YWwsIHVuc2lnbmVkIGlu dCBwb3J0KTsKLQotdTE2IF9faW53KHVuc2lnbmVkIGludCBwb3J0KTsKLXZvaWQgX19vdXR3KHUx NiB2YWwsIHVuc2lnbmVkIGludCBwb3J0KTsKLQotdTMyIF9faW5sKHVuc2lnbmVkIGludCBwb3J0 KTsKLXZvaWQgX19vdXRsKHUzMiB2YWwsIHVuc2lnbmVkIGludCBwb3J0KTsKLQotdTggIF9fcmVh ZGIoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKTsKLXUxNiBfX3JlYWR3KGNvbnN0 IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcik7Ci11MzIgX19yZWFkbChjb25zdCB2b2xhdGls ZSB2b2lkIF9faW9tZW0gKmFkZHIpOwotCi12b2lkIF9fd3JpdGViKHU4ICB2YWwsIHZvbGF0aWxl IHZvaWQgX19pb21lbSAqYWRkcik7Ci12b2lkIF9fd3JpdGV3KHUxNiB2YWwsIHZvbGF0aWxlIHZv aWQgX19pb21lbSAqYWRkcik7Ci12b2lkIF9fd3JpdGVsKHUzMiB2YWwsIHZvbGF0aWxlIHZvaWQg X19pb21lbSAqYWRkcik7Ci0KLS8qCi0gKiBBcmdoLCBzb21lb25lIGZvcmdvdCB0aGUgSU9DUzE2 IGxpbmUuICBXZSB0aGVyZWZvcmUgaGF2ZSB0byBoYW5kbGUKLSAqIHRoZSBieXRlIHN0ZWFyaW5n IGJ5IHNlbGVjdGluZyB0aGUgY29ycmVjdCBieXRlIElPIGZ1bmN0aW9ucyBoZXJlLgotICovCi0j aWZkZWYgSVNBX1NJWFRFRU5fQklUX1BFUklQSEVSQUwKLSNkZWZpbmUgaW5iKHApIAkJCV9faW5i MTYocCkKLSNkZWZpbmUgb3V0Yih2LHApCQlfX291dGIxNih2LHApCi0jZWxzZQotI2RlZmluZSBp bmIocCkJCQlfX2luYjgocCkKLSNkZWZpbmUgb3V0Yih2LHApCQlfX291dGI4KHYscCkKLSNlbmRp ZgotCi0jZGVmaW5lIGludyhwKQkJCV9faW53KHApCi0jZGVmaW5lIG91dHcodixwKQkJX19vdXR3 KHYscCkKLQotI2RlZmluZSBpbmwocCkJCQlfX2lubChwKQotI2RlZmluZSBvdXRsKHYscCkJCV9f b3V0bCh2LHApCi0KLSNkZWZpbmUgcmVhZGIoYikJCV9fcmVhZGIoYikKLSNkZWZpbmUgcmVhZHco YikJCV9fcmVhZHcoYikKLSNkZWZpbmUgcmVhZGwoYikJCV9fcmVhZGwoYikKLSNkZWZpbmUgcmVh ZGJfcmVsYXhlZChhZGRyKQlyZWFkYihhZGRyKQotI2RlZmluZSByZWFkd19yZWxheGVkKGFkZHIp CXJlYWR3KGFkZHIpCi0jZGVmaW5lIHJlYWRsX3JlbGF4ZWQoYWRkcikJcmVhZGwoYWRkcikKLQot I2RlZmluZSB3cml0ZWIodixiKQkJX193cml0ZWIodixiKQotI2RlZmluZSB3cml0ZXcodixiKQkJ X193cml0ZXcodixiKQotI2RlZmluZSB3cml0ZWwodixiKQkJX193cml0ZWwodixiKQotCi0jZGVm aW5lIGluc2IgaW5zYgotZXh0ZXJuIHZvaWQgaW5zYih1bnNpZ25lZCBpbnQgcG9ydCwgdm9pZCAq YnVmLCBpbnQgc3opOwotI2RlZmluZSBpbnN3IGluc3cKLWV4dGVybiB2b2lkIGluc3codW5zaWdu ZWQgaW50IHBvcnQsIHZvaWQgKmJ1ZiwgaW50IHN6KTsKLSNkZWZpbmUgaW5zbCBpbnNsCi1leHRl cm4gdm9pZCBpbnNsKHVuc2lnbmVkIGludCBwb3J0LCB2b2lkICpidWYsIGludCBzeik7Ci0KLSNk ZWZpbmUgb3V0c2Igb3V0c2IKLWV4dGVybiB2b2lkIG91dHNiKHVuc2lnbmVkIGludCBwb3J0LCBj b25zdCB2b2lkICpidWYsIGludCBzeik7Ci0jZGVmaW5lIG91dHN3IG91dHN3Ci1leHRlcm4gdm9p ZCBvdXRzdyh1bnNpZ25lZCBpbnQgcG9ydCwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgc3opOwotI2Rl ZmluZSBvdXRzbCBvdXRzbAotZXh0ZXJuIHZvaWQgb3V0c2wodW5zaWduZWQgaW50IHBvcnQsIGNv bnN0IHZvaWQgKmJ1ZiwgaW50IHN6KTsKLQotLyogY2FuJ3Qgc3VwcG9ydCB3cml0ZXNiIGF0bSAq LwotI2RlZmluZSB3cml0ZXN3IHdyaXRlc3cKLWV4dGVybiB2b2lkIHdyaXRlc3codm9sYXRpbGUg dm9pZCBfX2lvbWVtICphZGRyLCBjb25zdCB2b2lkICpkYXRhLCBpbnQgd29yZGxlbik7Ci0jZGVm aW5lIHdyaXRlc2wgd3JpdGVzbAotZXh0ZXJuIHZvaWQgd3JpdGVzbCh2b2xhdGlsZSB2b2lkIF9f aW9tZW0gKmFkZHIsIGNvbnN0IHZvaWQgKmRhdGEsIGludCBsb25nbGVuKTsKLQotLyogY2FuJ3Qg c3VwcG9ydCByZWFkc2IgYXRtICovCi0jZGVmaW5lIHJlYWRzdyByZWFkc3cKLWV4dGVybiB2b2lk IHJlYWRzdyhjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIsIHZvaWQgKmRhdGEsIGlu dCB3b3JkbGVuKTsKLQotI2RlZmluZSByZWFkc2wgcmVhZHNsCi1leHRlcm4gdm9pZCByZWFkc2wo Y29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpkYXRhLCBpbnQgbG9uZ2xl bik7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lYnNhMTEwL2luY2x1ZGUv bWFjaC9pcnFzLmggYi9hcmNoL2FybS9tYWNoLWVic2ExMTAvaW5jbHVkZS9tYWNoL2lycXMuaApk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjlhODY3MWZlODQ5Li4wMDAwMDAwMDAwMDAK LS0tIGEvYXJjaC9hcm0vbWFjaC1lYnNhMTEwL2luY2x1ZGUvbWFjaC9pcnFzLmgKKysrIC9kZXYv bnVsbApAQCAtMSwxNyArMCwwIEBACi0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MC1vbmx5ICovCi0vKgotICogIGFyY2gvYXJtL21hY2gtZWJzYTExMC9pbmNsdWRlL21hY2gvaXJx cy5oCi0gKgotICogIENvcHlyaWdodCAoQykgMTk5NiBSdXNzZWxsIEtpbmcKLSAqLwotCi0jZGVm aW5lIE5SX0lSUVMJCQk4Ci0KLSNkZWZpbmUgSVJRX0VCU0ExMTBfUFJJTlRFUgkwCi0jZGVmaW5l IElSUV9FQlNBMTEwX0NPTTEJMQotI2RlZmluZSBJUlFfRUJTQTExMF9DT00yCTIKLSNkZWZpbmUg SVJRX0VCU0ExMTBfRVRIRVJORVQJMwotI2RlZmluZSBJUlFfRUJTQTExMF9USU1FUjAJNAotI2Rl ZmluZSBJUlFfRUJTQTExMF9USU1FUjEJNQotI2RlZmluZSBJUlFfRUJTQTExMF9QQ01DSUEJNgot I2RlZmluZSBJUlFfRUJTQTExMF9JTU1FRElBVEUJNwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFj aC1lYnNhMTEwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtZWJzYTExMC9p bmNsdWRlL21hY2gvbWVtb3J5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwMjVm NDA1ZGU1MC4uMDAwMDAwMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtZWJzYTExMC9pbmNsdWRl L21hY2gvbWVtb3J5LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0vKiBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCi0vKgotICogIGFyY2gvYXJtL21hY2gt ZWJzYTExMC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk2 LTE5OTkgUnVzc2VsbCBLaW5nLgotICoKLSAqICBDaGFuZ2Vsb2c6Ci0gKiAgIDIwLU9jdC0xOTk2 IFJNSwlDcmVhdGVkCi0gKiAgIDMxLURlYy0xOTk3IFJNSwlGaXhlZCBkZWZpbml0aW9ucyB0byBy ZWR1Y2Ugd2FybmluZ3MKLSAqICAgMjEtTWFyLTE5OTkgUk1LCVJlbmFtZWQgdG8gbWVtb3J5LmgK LSAqCQkgUk1LCU1vdmVkIFRBU0tfU0laRSBhbmQgUEFHRV9PRkZTRVQgaGVyZQotICovCi0jaWZu ZGVmIF9fQVNNX0FSQ0hfTUVNT1JZX0gKLSNkZWZpbmUgX19BU01fQVJDSF9NRU1PUllfSAotCi0v KgotICogQ2FjaGUgZmx1c2hpbmcgYXJlYSAtIFNSQU0KLSAqLwotI2RlZmluZSBGTFVTSF9CQVNF X1BIWVMJCTB4NDAwMDAwMDAKLSNkZWZpbmUgRkxVU0hfQkFTRQkJMHhkZjAwMDAwMAotCi0jZW5k aWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZWJzYTExMC9pbmNsdWRlL21hY2gvdW5jb21w cmVzcy5oIGIvYXJjaC9hcm0vbWFjaC1lYnNhMTEwL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgK ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlYzEyZWZlOThhNi4uMDAwMDAwMDAwMDAw Ci0tLSBhL2FyY2gvYXJtL21hY2gtZWJzYTExMC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCisr KyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjAtb25seSAqLwotLyoKLSAqICBhcmNoL2FybS9tYWNoLWVic2ExMTAvaW5jbHVkZS9t YWNoL3VuY29tcHJlc3MuaAotICoKLSAqICBDb3B5cmlnaHQgKEMpIDE5OTYsMTk5NywxOTk4IFJ1 c3NlbGwgS2luZwotICovCi0KLSNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+Ci0KLSNkZWZp bmUgU0VSSUFMX0JBU0UJKCh1bnNpZ25lZCBjaGFyICopMHhmMDAwMGJlMCkKLQotLyoKLSAqIFRo aXMgZG9lcyBub3QgYXBwZW5kIGEgbmV3bGluZQotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgcHV0 YyhpbnQgYykKLXsKLQl1bnNpZ25lZCBjaGFyIHYsICpiYXNlID0gU0VSSUFMX0JBU0U7Ci0KLQlk byB7Ci0JCXYgPSBiYXNlW1VBUlRfTFNSIDw8IDJdOwotCQliYXJyaWVyKCk7Ci0JfSB3aGlsZSAo ISh2ICYgVUFSVF9MU1JfVEhSRSkpOwotCi0JYmFzZVtVQVJUX1RYIDw8IDJdID0gYzsKLX0KLQot c3RhdGljIGlubGluZSB2b2lkIGZsdXNoKHZvaWQpCi17Ci0JdW5zaWduZWQgY2hhciB2LCAqYmFz ZSA9IFNFUklBTF9CQVNFOwotCi0JZG8gewotCQl2ID0gYmFzZVtVQVJUX0xTUiA8PCAyXTsKLQkJ YmFycmllcigpOwotCX0gd2hpbGUgKCh2ICYgKFVBUlRfTFNSX1RFTVR8VUFSVF9MU1JfVEhSRSkp ICE9Ci0JCSAoVUFSVF9MU1JfVEVNVHxVQVJUX0xTUl9USFJFKSk7Ci19Ci0KLS8qCi0gKiBub3Ro aW5nIHRvIGRvCi0gKi8KLSNkZWZpbmUgYXJjaF9kZWNvbXBfc2V0dXAoKQpkaWZmIC0tZ2l0IGEv YXJjaC9hcm0vbWFjaC1lYnNhMTEwL2lvLmMgYi9hcmNoL2FybS9tYWNoLWVic2ExMTAvaW8uYwpk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2M0NGRkMzU5NmVhLi4wMDAwMDAwMDAwMDAK LS0tIGEvYXJjaC9hcm0vbWFjaC1lYnNhMTEwL2lvLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NDAg KzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKLS8qCi0gKiAgbGlu dXgvYXJjaC9hcm0vbWFjaC1lYnNhMTEwL2lzYW1lbS5jCi0gKgotICogIENvcHlyaWdodCAoQykg MjAwMSBSdXNzZWxsIEtpbmcKLSAqCi0gKiBQZXJmb3JtICJJU0EiIG1lbW9yeSBhbmQgSU8gYWNj ZXNzZXMuICBUaGUgRUJTQTExMCBoYXMgc29tZSAicGVjdWxpYXJpdGllcyIKLSAqIGluIHRoZSB3 YXkgaXQgaGFuZGxlcyBhY2Nlc3NlcyB0byBvZGQgSU8gcG9ydHMgb24gMTYtYml0IGRldmljZXMu ICBUaGVzZQotICogZGV2aWNlcyBoYXZlIHRoZWlyIEQwLUQxNSBsaW5lcyBjb25uZWN0ZWQgdG8g dGhlIHByb2Nlc3NvcnMgRDAtRDE1IGxpbmVzLgotICogU2luY2UgdGhleSBleHBlY3QgYWxsIGJ5 dGUgSU8gb3BlcmF0aW9ucyB0byBiZSBwZXJmb3JtZWQgb24gRDAtRDcsIGFuZCB0aGUKLSAqIFN0 cm9uZ0FSTSBleHBlY3RzIHRvIHRyYW5zZmVyIHRoZSBieXRlIHRvIHRoZXNlIG9kZCBhZGRyZXNz ZXMgb24gRDgtRDE1LAotICogd2UgbXVzdCB1c2UgYSB0cmljayB0byBnZXQgdGhlIHJlcXVpcmVk IGJlaGF2aW91ci4KLSAqCi0gKiBUaGUgdHJpY2sgZW1wbG95ZWQgaGVyZSBpcyB0byB1c2UgbG9u ZyB3b3JkIHN0b3JlcyB0byBvZGQgYWRkcmVzcyAtMS4gIFRoZQotICogZ2x1ZSBsb2dpYyBwaWNr cyB0aGlzIHVwIGFzIGEgInRyaWNrIiBhY2Nlc3MsIGFuZCBhc3NlcnRzIHRoZSBMU0Igb2YgdGhl Ci0gKiBwZXJpcGhlcmFscyBhZGRyZXNzIGJ1cywgdGhlcmVieSBhY2Nlc3NpbmcgdGhlIG9kZCBJ TyBwb3J0LiAgTWVhbndoaWxlLCB0aGUKLSAqIFN0cm9uZ0FSTSB0cmFuc2ZlcnMgaXRzIGRhdGEg b24gRDAtRDcgYXMgZXhwZWN0ZWQuCi0gKgotICogVGhpbmdzIGdldCBtb3JlIGludGVyZXN0aW5n IG9uIHRoZSBwYXNzLTEgRUJTQTExMCAtIHRoZSBQQ01DSUEgY29udHJvbGxlcgotICogd2lyaW5n IHdhcyBzY3Jld2VkIGluIHN1Y2ggYSB3YXkgdGhhdCBpdCBoYWQgbGltaXRlZCBtZW1vcnkgc3Bh Y2UgYWNjZXNzLgotICogTHVja2lseSwgdGhlIHdvcmstYXJvdW5kIGZvciB0aGlzIGlzIG5vdCB0 b28gaG9ycmlibGUuICBTZWUKLSAqIF9faXNhbWVtX2NvbnZlcnRfYWRkciBmb3IgdGhlIGRldGFp bHMuCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJu ZWwuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0K LSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLQotc3Rh dGljIHZvaWQgX19pb21lbSAqX19pc2FtZW1fY29udmVydF9hZGRyKGNvbnN0IHZvbGF0aWxlIHZv aWQgX19pb21lbSAqYWRkcikKLXsKLQl1MzIgcmV0LCBhID0gKHUzMiBfX2ZvcmNlKSBhZGRyOwot Ci0JLyoKLQkgKiBUaGUgUENNQ0lBIGNvbnRyb2xsZXIgaXMgd2lyZWQgdXAgYXMgZm9sbG93czoK LQkgKiAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKwotCSAqIFBDTUNJQSB8IDIgMiAyIDIgfCAxIDEgMSAxIHwgMSAxIDEg MSB8IDEgMSAgICAgfCAgICAgICAgIHwgICAgICAgICB8Ci0JICogICAgICAgIHwgMyAyIDEgMCB8 IDkgOCA3IDYgfCA1IDQgMyAyIHwgMSAwIDkgOCB8IDcgNiA1IDQgfCAzIDIgMSAwIHwKLQkgKiAg ICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKwotCSAqICBDUFUgICB8IDIgMiAyIDIgfCAyIDEgMSAxIHwgMSAxIDEgMSB8IDEg MSAxICAgfCAgICAgICAgIHwgICAgICAgICB8Ci0JICogICAgICAgIHwgNCAzIDIgMSB8IDAgOSA5 IDggfCA3IDYgNSA0IHwgMyAyIDAgOSB8IDggNyA2IDUgfCA0IDMgMiB4IHwKLQkgKiAgICAgICAg Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKwotCSAqCi0JICogVGhpcyBtZWFucyB0aGF0IHdlIGNhbiBhY2Nlc3MgUENNQ0lBIHJlZ2lv bnMgYXMgZm9sbG93czoKLQkgKgkweCoxMDAwMCAtPiAweCoxZmZmZgotCSAqCTB4KjcwMDAwIC0+ IDB4KjdmZmZmCi0JICoJMHgqOTAwMDAgLT4gMHgqOWZmZmYKLQkgKgkweCpmMDAwMCAtPiAweCpm ZmZmZgotCSAqLwotCXJldCAgPSAoYSAmIDB4ZjgwM2ZlKSA8PCAxOwotCXJldCB8PSAoYSAmIDB4 MDNmYzAwKSA8PCAyOwotCi0JcmV0ICs9IDB4ZTgwMDAwMDA7Ci0KLQlpZiAoKGEgJiAweDIwMDAw KSA9PSAoYSAmIDB4NDAwMDApID4+IDEpCi0JCXJldHVybiAodm9pZCBfX2lvbWVtICopcmV0Owot Ci0JQlVHKCk7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qCi0gKiByZWFkW2J3bF0gYW5kIHdyaXRl W2J3bF0KLSAqLwotdTggX19yZWFkYihjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIp Ci17Ci0Jdm9pZCBfX2lvbWVtICphID0gX19pc2FtZW1fY29udmVydF9hZGRyKGFkZHIpOwotCXUz MiByZXQ7Ci0KLQlpZiAoKHVuc2lnbmVkIGxvbmcpYWRkciAmIDEpCi0JCXJldCA9IF9fcmF3X3Jl YWRsKGEpOwotCWVsc2UKLQkJcmV0ID0gX19yYXdfcmVhZGIoYSk7Ci0JcmV0dXJuIHJldDsKLX0K LQotdTE2IF9fcmVhZHcoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQotewotCXZv aWQgX19pb21lbSAqYSA9IF9faXNhbWVtX2NvbnZlcnRfYWRkcihhZGRyKTsKLQotCWlmICgodW5z aWduZWQgbG9uZylhZGRyICYgMSkKLQkJQlVHKCk7Ci0KLQlyZXR1cm4gX19yYXdfcmVhZHcoYSk7 Ci19Ci0KLXUzMiBfX3JlYWRsKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKLXsK LQl2b2lkIF9faW9tZW0gKmEgPSBfX2lzYW1lbV9jb252ZXJ0X2FkZHIoYWRkcik7Ci0JdTMyIHJl dDsKLQotCWlmICgodW5zaWduZWQgbG9uZylhZGRyICYgMykKLQkJQlVHKCk7Ci0KLQlyZXQgPSBf X3Jhd19yZWFkdyhhKTsKLQlyZXQgfD0gX19yYXdfcmVhZHcoYSArIDQpIDw8IDE2OwotCXJldHVy biByZXQ7Ci19Ci0KLUVYUE9SVF9TWU1CT0woX19yZWFkYik7Ci1FWFBPUlRfU1lNQk9MKF9fcmVh ZHcpOwotRVhQT1JUX1NZTUJPTChfX3JlYWRsKTsKLQotdm9pZCByZWFkc3coY29uc3Qgdm9sYXRp bGUgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpkYXRhLCBpbnQgbGVuKQotewotCXZvaWQgX19p b21lbSAqYSA9IF9faXNhbWVtX2NvbnZlcnRfYWRkcihhZGRyKTsKLQotCUJVR19PTigodW5zaWdu ZWQgbG9uZylhZGRyICYgMSk7Ci0KLQlfX3Jhd19yZWFkc3coYSwgZGF0YSwgbGVuKTsKLX0KLUVY UE9SVF9TWU1CT0wocmVhZHN3KTsKLQotdm9pZCByZWFkc2woY29uc3Qgdm9sYXRpbGUgdm9pZCBf X2lvbWVtICphZGRyLCB2b2lkICpkYXRhLCBpbnQgbGVuKQotewotCXZvaWQgX19pb21lbSAqYSA9 IF9faXNhbWVtX2NvbnZlcnRfYWRkcihhZGRyKTsKLQotCUJVR19PTigodW5zaWduZWQgbG9uZylh ZGRyICYgMyk7Ci0KLQlfX3Jhd19yZWFkc2woYSwgZGF0YSwgbGVuKTsKLX0KLUVYUE9SVF9TWU1C T0wocmVhZHNsKTsKLQotdm9pZCBfX3dyaXRlYih1OCB2YWwsIHZvbGF0aWxlIHZvaWQgX19pb21l bSAqYWRkcikKLXsKLQl2b2lkIF9faW9tZW0gKmEgPSBfX2lzYW1lbV9jb252ZXJ0X2FkZHIoYWRk cik7Ci0KLQlpZiAoKHVuc2lnbmVkIGxvbmcpYWRkciAmIDEpCi0JCV9fcmF3X3dyaXRlbCh2YWws IGEpOwotCWVsc2UKLQkJX19yYXdfd3JpdGViKHZhbCwgYSk7Ci19Ci0KLXZvaWQgX193cml0ZXco dTE2IHZhbCwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQotewotCXZvaWQgX19pb21lbSAq YSA9IF9faXNhbWVtX2NvbnZlcnRfYWRkcihhZGRyKTsKLQotCWlmICgodW5zaWduZWQgbG9uZylh ZGRyICYgMSkKLQkJQlVHKCk7Ci0KLQlfX3Jhd193cml0ZXcodmFsLCBhKTsKLX0KLQotdm9pZCBf X3dyaXRlbCh1MzIgdmFsLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0Jdm9pZCBf X2lvbWVtICphID0gX19pc2FtZW1fY29udmVydF9hZGRyKGFkZHIpOwotCi0JaWYgKCh1bnNpZ25l ZCBsb25nKWFkZHIgJiAzKQotCQlCVUcoKTsKLQotCV9fcmF3X3dyaXRldyh2YWwsIGEpOwotCV9f cmF3X3dyaXRldyh2YWwgPj4gMTYsIGEgKyA0KTsKLX0KLQotRVhQT1JUX1NZTUJPTChfX3dyaXRl Yik7Ci1FWFBPUlRfU1lNQk9MKF9fd3JpdGV3KTsKLUVYUE9SVF9TWU1CT0woX193cml0ZWwpOwot Ci12b2lkIHdyaXRlc3codm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyLCBjb25zdCB2b2lkICpk YXRhLCBpbnQgbGVuKQotewotCXZvaWQgX19pb21lbSAqYSA9IF9faXNhbWVtX2NvbnZlcnRfYWRk cihhZGRyKTsKLQotCUJVR19PTigodW5zaWduZWQgbG9uZylhZGRyICYgMSk7Ci0KLQlfX3Jhd193 cml0ZXN3KGEsIGRhdGEsIGxlbik7Ci19Ci1FWFBPUlRfU1lNQk9MKHdyaXRlc3cpOwotCi12b2lk IHdyaXRlc2wodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyLCBjb25zdCB2b2lkICpkYXRhLCBp bnQgbGVuKQotewotCXZvaWQgX19pb21lbSAqYSA9IF9faXNhbWVtX2NvbnZlcnRfYWRkcihhZGRy KTsKLQotCUJVR19PTigodW5zaWduZWQgbG9uZylhZGRyICYgMyk7Ci0KLQlfX3Jhd193cml0ZXNs KGEsIGRhdGEsIGxlbik7Ci19Ci1FWFBPUlRfU1lNQk9MKHdyaXRlc2wpOwotCi0vKgotICogVGhl IEVCU0ExMTAgaGFzIGEgd2VpcmQgIklTQSBJTyIgcmVnaW9uOgotICoKLSAqIFJlZ2lvbiAwIChh ZGRyID0gMHhmMDAwMDAwMCArIGlvIDw8IDIpCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUGh5c2ljYWwgcmVnaW9uCUlPIHJl Z2lvbgotICogZjAwMDBmZTAgLSBmMDAwMGZmYwkzZjggLSAzZmYgIHR0eVMwCi0gKiBmMDAwMGU2 MCAtIGYwMDAwZTY0CTM5OCAtIDM5OQotICogZjAwMDBkZTAgLSBmMDAwMGRmYwkzNzggLSAzN2Yg IGxwMAotICogZjAwMDBiZTAgLSBmMDAwMGJmYwkyZjggLSAyZmYgIHR0eVMxCi0gKgotICogUmVn aW9uIDEgKGFkZHIgPSAweGYwMDAwMDAwICsgKGlvICYgfjEpIDw8IDEgKyAoaW8gJiAxKSkKLSAq IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ci0gKiBQaHlzaWNhbCByZWdpb24JSU8gcmVnaW9uCi0gKiBmMDAwMTRmMSAgICAgICAgICAgICBh NzkgICAgICAgIHBucCB3cml0ZSBkYXRhCi0gKiBmMDAwMDdjMCAtIGYwMDAwN2MxCTNlMCAtIDNl MSAgcGNtY2lhCi0gKiBmMDAwMDRmMQkJMjc5ICAgICAgICBwbnAgYWRkcmVzcwotICogZjAwMDA0 NDAgLSBmMDAwMDQ2YyAgMjIwIC0gMjM2ICBldGgwCi0gKiBmMDAwMDQwNQkJMjAzICAgICAgICBw bnAgcmVhZCBkYXRhCi0gKi8KLSNkZWZpbmUgU1VQRVJJT19QT1JUKHApIFwKLQkoKChwKSA+PiAz KSA9PSAoMHgzZjggPj4gMykgfHwgXAotCSAoKHApID4+IDMpID09ICgweDJmOCA+PiAzKSB8fCBc Ci0JICgocCkgPj4gMykgPT0gKDB4Mzc4ID4+IDMpKQotCi0vKgotICogV2UncmUgYWRkcmVzc2lu ZyBhbiA4IG9yIDE2LWJpdCBwZXJpcGhlcmFsIHdoaWNoIHRyYW5mZXJzCi0gKiBvZGQgYWRkcmVz c2VzIG9uIHRoZSBsb3cgSVNBIGJ5dGUgbGFuZS4KLSAqLwotdTggX19pbmI4KHVuc2lnbmVkIGlu dCBwb3J0KQotewotCXUzMiByZXQ7Ci0KLQkvKgotCSAqIFRoZSBTdXBlcklPIHJlZ2lzdGVycyB1 c2Ugc2FuZSBhZGRyZXNzaW5nIHRlY2huaXF1ZXMuLi4KLQkgKi8KLQlpZiAoU1VQRVJJT19QT1JU KHBvcnQpKQotCQlyZXQgPSBfX3Jhd19yZWFkYigodm9pZCBfX2lvbWVtICopSVNBSU9fQkFTRSAr IChwb3J0IDw8IDIpKTsKLQllbHNlIHsKLQkJdm9pZCBfX2lvbWVtICphID0gKHZvaWQgX19pb21l bSAqKUlTQUlPX0JBU0UgKyAoKHBvcnQgJiB+MSkgPDwgMSk7Ci0KLQkJLyoKLQkJICogU2hhbWUg bm90aGluZyBlbHNlIGRvZXMKLQkJICovCi0JCWlmIChwb3J0ICYgMSkKLQkJCXJldCA9IF9fcmF3 X3JlYWRsKGEpOwotCQllbHNlCi0JCQlyZXQgPSBfX3Jhd19yZWFkYihhKTsKLQl9Ci0JcmV0dXJu IHJldDsKLX0KLQotLyoKLSAqIFdlJ3JlIGFkZHJlc3NpbmcgYSAxNi1iaXQgcGVyaXBoZXJhbCB3 aGljaCB0cmFuc2ZlcnMgb2RkCi0gKiBhZGRyZXNzZXMgb24gdGhlIGhpZ2ggSVNBIGJ5dGUgbGFu ZS4KLSAqLwotdTggX19pbmIxNih1bnNpZ25lZCBpbnQgcG9ydCkKLXsKLQl1bnNpZ25lZCBpbnQg b2Zmc2V0OwotCi0JLyoKLQkgKiBUaGUgU3VwZXJJTyByZWdpc3RlcnMgdXNlIHNhbmUgYWRkcmVz c2luZyB0ZWNobmlxdWVzLi4uCi0JICovCi0JaWYgKFNVUEVSSU9fUE9SVChwb3J0KSkKLQkJb2Zm c2V0ID0gcG9ydCA8PCAyOwotCWVsc2UKLQkJb2Zmc2V0ID0gKHBvcnQgJiB+MSkgPDwgMSB8IChw b3J0ICYgMSk7Ci0KLQlyZXR1cm4gX19yYXdfcmVhZGIoKHZvaWQgX19pb21lbSAqKUlTQUlPX0JB U0UgKyBvZmZzZXQpOwotfQotCi11MTYgX19pbncodW5zaWduZWQgaW50IHBvcnQpCi17Ci0JdW5z aWduZWQgaW50IG9mZnNldDsKLQotCS8qCi0JICogVGhlIFN1cGVySU8gcmVnaXN0ZXJzIHVzZSBz YW5lIGFkZHJlc3NpbmcgdGVjaG5pcXVlcy4uLgotCSAqLwotCWlmIChTVVBFUklPX1BPUlQocG9y dCkpCi0JCW9mZnNldCA9IHBvcnQgPDwgMjsKLQllbHNlIHsKLQkJb2Zmc2V0ID0gcG9ydCA8PCAx OwotCQlCVUdfT04ocG9ydCAmIDEpOwotCX0KLQlyZXR1cm4gX19yYXdfcmVhZHcoKHZvaWQgX19p b21lbSAqKUlTQUlPX0JBU0UgKyBvZmZzZXQpOwotfQotCi0vKgotICogRmFrZSBhIDMyLWJpdCBy ZWFkIHdpdGggdHdvIDE2LWJpdCByZWFkcy4gIE5lZWRlZCBmb3IgM2M1ODkuCi0gKi8KLXUzMiBf X2lubCh1bnNpZ25lZCBpbnQgcG9ydCkKLXsKLQl2b2lkIF9faW9tZW0gKmE7Ci0KLQlpZiAoU1VQ RVJJT19QT1JUKHBvcnQpIHx8IHBvcnQgJiAzKQotCQlCVUcoKTsKLQotCWEgPSAodm9pZCBfX2lv bWVtICopSVNBSU9fQkFTRSArICgocG9ydCAmIH4xKSA8PCAxKTsKLQotCXJldHVybiBfX3Jhd19y ZWFkdyhhKSB8IF9fcmF3X3JlYWR3KGEgKyA0KSA8PCAxNjsKLX0KLQotRVhQT1JUX1NZTUJPTChf X2luYjgpOwotRVhQT1JUX1NZTUJPTChfX2luYjE2KTsKLUVYUE9SVF9TWU1CT0woX19pbncpOwot RVhQT1JUX1NZTUJPTChfX2lubCk7Ci0KLXZvaWQgX19vdXRiOCh1OCB2YWwsIHVuc2lnbmVkIGlu dCBwb3J0KQotewotCS8qCi0JICogVGhlIFN1cGVySU8gcmVnaXN0ZXJzIHVzZSBzYW5lIGFkZHJl c3NpbmcgdGVjaG5pcXVlcy4uLgotCSAqLwotCWlmIChTVVBFUklPX1BPUlQocG9ydCkpCi0JCV9f cmF3X3dyaXRlYih2YWwsICh2b2lkIF9faW9tZW0gKilJU0FJT19CQVNFICsgKHBvcnQgPDwgMikp OwotCWVsc2UgewotCQl2b2lkIF9faW9tZW0gKmEgPSAodm9pZCBfX2lvbWVtICopSVNBSU9fQkFT RSArICgocG9ydCAmIH4xKSA8PCAxKTsKLQotCQkvKgotCQkgKiBTaGFtZSBub3RoaW5nIGVsc2Ug ZG9lcwotCQkgKi8KLQkJaWYgKHBvcnQgJiAxKQotCQkJX19yYXdfd3JpdGVsKHZhbCwgYSk7Ci0J CWVsc2UKLQkJCV9fcmF3X3dyaXRlYih2YWwsIGEpOwotCX0KLX0KLQotdm9pZCBfX291dGIxNih1 OCB2YWwsIHVuc2lnbmVkIGludCBwb3J0KQotewotCXVuc2lnbmVkIGludCBvZmZzZXQ7Ci0KLQkv KgotCSAqIFRoZSBTdXBlcklPIHJlZ2lzdGVycyB1c2Ugc2FuZSBhZGRyZXNzaW5nIHRlY2huaXF1 ZXMuLi4KLQkgKi8KLQlpZiAoU1VQRVJJT19QT1JUKHBvcnQpKQotCQlvZmZzZXQgPSBwb3J0IDw8 IDI7Ci0JZWxzZQotCQlvZmZzZXQgPSAocG9ydCAmIH4xKSA8PCAxIHwgKHBvcnQgJiAxKTsKLQot CV9fcmF3X3dyaXRlYih2YWwsICh2b2lkIF9faW9tZW0gKilJU0FJT19CQVNFICsgb2Zmc2V0KTsK LX0KLQotdm9pZCBfX291dHcodTE2IHZhbCwgdW5zaWduZWQgaW50IHBvcnQpCi17Ci0JdW5zaWdu ZWQgaW50IG9mZnNldDsKLQotCS8qCi0JICogVGhlIFN1cGVySU8gcmVnaXN0ZXJzIHVzZSBzYW5l IGFkZHJlc3NpbmcgdGVjaG5pcXVlcy4uLgotCSAqLwotCWlmIChTVVBFUklPX1BPUlQocG9ydCkp Ci0JCW9mZnNldCA9IHBvcnQgPDwgMjsKLQllbHNlIHsKLQkJb2Zmc2V0ID0gcG9ydCA8PCAxOwot CQlCVUdfT04ocG9ydCAmIDEpOwotCX0KLQlfX3Jhd193cml0ZXcodmFsLCAodm9pZCBfX2lvbWVt ICopSVNBSU9fQkFTRSArIG9mZnNldCk7Ci19Ci0KLXZvaWQgX19vdXRsKHUzMiB2YWwsIHVuc2ln bmVkIGludCBwb3J0KQotewotCUJVRygpOwotfQotCi1FWFBPUlRfU1lNQk9MKF9fb3V0YjgpOwot RVhQT1JUX1NZTUJPTChfX291dGIxNik7Ci1FWFBPUlRfU1lNQk9MKF9fb3V0dyk7Ci1FWFBPUlRf U1lNQk9MKF9fb3V0bCk7Ci0KLXZvaWQgb3V0c2IodW5zaWduZWQgaW50IHBvcnQsIGNvbnN0IHZv aWQgKmZyb20sIGludCBsZW4pCi17Ci0JdTMyIG9mZjsKLQotCWlmIChTVVBFUklPX1BPUlQocG9y dCkpCi0JCW9mZiA9IHBvcnQgPDwgMjsKLQllbHNlIHsKLQkJb2ZmID0gKHBvcnQgJiB+MSkgPDwg MTsKLQkJaWYgKHBvcnQgJiAxKQotCQkJQlVHKCk7Ci0JfQotCi0JX19yYXdfd3JpdGVzYigodm9p ZCBfX2lvbWVtICopSVNBSU9fQkFTRSArIG9mZiwgZnJvbSwgbGVuKTsKLX0KLQotdm9pZCBpbnNi KHVuc2lnbmVkIGludCBwb3J0LCB2b2lkICpmcm9tLCBpbnQgbGVuKQotewotCXUzMiBvZmY7Ci0K LQlpZiAoU1VQRVJJT19QT1JUKHBvcnQpKQotCQlvZmYgPSBwb3J0IDw8IDI7Ci0JZWxzZSB7Ci0J CW9mZiA9IChwb3J0ICYgfjEpIDw8IDE7Ci0JCWlmIChwb3J0ICYgMSkKLQkJCUJVRygpOwotCX0K LQotCV9fcmF3X3JlYWRzYigodm9pZCBfX2lvbWVtICopSVNBSU9fQkFTRSArIG9mZiwgZnJvbSwg bGVuKTsKLX0KLQotRVhQT1JUX1NZTUJPTChvdXRzYik7Ci1FWFBPUlRfU1lNQk9MKGluc2IpOwot Ci12b2lkIG91dHN3KHVuc2lnbmVkIGludCBwb3J0LCBjb25zdCB2b2lkICpmcm9tLCBpbnQgbGVu KQotewotCXUzMiBvZmY7Ci0KLQlpZiAoU1VQRVJJT19QT1JUKHBvcnQpKQotCQlvZmYgPSBwb3J0 IDw8IDI7Ci0JZWxzZSB7Ci0JCW9mZiA9IChwb3J0ICYgfjEpIDw8IDE7Ci0JCWlmIChwb3J0ICYg MSkKLQkJCUJVRygpOwotCX0KLQotCV9fcmF3X3dyaXRlc3coKHZvaWQgX19pb21lbSAqKUlTQUlP X0JBU0UgKyBvZmYsIGZyb20sIGxlbik7Ci19Ci0KLXZvaWQgaW5zdyh1bnNpZ25lZCBpbnQgcG9y dCwgdm9pZCAqZnJvbSwgaW50IGxlbikKLXsKLQl1MzIgb2ZmOwotCi0JaWYgKFNVUEVSSU9fUE9S VChwb3J0KSkKLQkJb2ZmID0gcG9ydCA8PCAyOwotCWVsc2UgewotCQlvZmYgPSAocG9ydCAmIH4x KSA8PCAxOwotCQlpZiAocG9ydCAmIDEpCi0JCQlCVUcoKTsKLQl9Ci0KLQlfX3Jhd19yZWFkc3co KHZvaWQgX19pb21lbSAqKUlTQUlPX0JBU0UgKyBvZmYsIGZyb20sIGxlbik7Ci19Ci0KLUVYUE9S VF9TWU1CT0wob3V0c3cpOwotRVhQT1JUX1NZTUJPTChpbnN3KTsKLQotLyoKLSAqIFdlIGltcGxl bWVudCB0aGVzZSBhcyAxNi1iaXQgaW5zdy9vdXRzdywgbWFpbmx5IGZvcgotICogM2M1ODkgY2Fy ZHMuCi0gKi8KLXZvaWQgb3V0c2wodW5zaWduZWQgaW50IHBvcnQsIGNvbnN0IHZvaWQgKmZyb20s IGludCBsZW4pCi17Ci0JdTMyIG9mZiA9IHBvcnQgPDwgMTsKLQotCWlmIChTVVBFUklPX1BPUlQo cG9ydCkgfHwgcG9ydCAmIDMpCi0JCUJVRygpOwotCi0JX19yYXdfd3JpdGVzdygodm9pZCBfX2lv bWVtICopSVNBSU9fQkFTRSArIG9mZiwgZnJvbSwgbGVuIDw8IDEpOwotfQotCi12b2lkIGluc2wo dW5zaWduZWQgaW50IHBvcnQsIHZvaWQgKmZyb20sIGludCBsZW4pCi17Ci0JdTMyIG9mZiA9IHBv cnQgPDwgMTsKLQotCWlmIChTVVBFUklPX1BPUlQocG9ydCkgfHwgcG9ydCAmIDMpCi0JCUJVRygp OwotCi0JX19yYXdfcmVhZHN3KCh2b2lkIF9faW9tZW0gKilJU0FJT19CQVNFICsgb2ZmLCBmcm9t LCBsZW4gPDwgMSk7Ci19Ci0KLUVYUE9SVF9TWU1CT0wob3V0c2wpOwotRVhQT1JUX1NZTUJPTChp bnNsKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZWJzYTExMC9sZWRzLmMgYi9hcmNoL2Fy bS9tYWNoLWVic2ExMTAvbGVkcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDE0 NzRiNjZkMzEuLjAwMDAwMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWVic2ExMTAvbGVkcy5j CisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAtb25seQotLyoKLSAqIERyaXZlciBmb3IgdGhlIExFRCBmb3VuZCBvbiB0aGUg RUJTQTExMCBtYWNoaW5lCi0gKiBCYXNlZCBvbiBWZXJzYXRpbGUgYW5kIFJlYWxWaWV3IG1hY2hp bmUgTEVEIGNvZGUKLSAqCi0gKiBBdXRob3I6IEJyeWFuIFd1IDxicnlhbi53dUBjYW5vbmljYWwu Y29tPgotICovCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5p dC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2lu Y2x1ZGUgPGxpbnV4L2xlZHMuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0KLSNp bmNsdWRlICJjb3JlLmgiCi0KLSNpZiBkZWZpbmVkKENPTkZJR19ORVdfTEVEUykgJiYgZGVmaW5l ZChDT05GSUdfTEVEU19DTEFTUykKLXN0YXRpYyB2b2lkIGVic2ExMTBfbGVkX3NldChzdHJ1Y3Qg bGVkX2NsYXNzZGV2ICpjZGV2LAotCQkJICAgICAgZW51bSBsZWRfYnJpZ2h0bmVzcyBiKQotewot CXU4IHJlZyA9IF9fcmF3X3JlYWRiKFNPRlRfQkFTRSk7Ci0KLQlpZiAoYiAhPSBMRURfT0ZGKQot CQlyZWcgfD0gMHg4MDsKLQllbHNlCi0JCXJlZyAmPSB+MHg4MDsKLQotCV9fcmF3X3dyaXRlYihy ZWcsIFNPRlRfQkFTRSk7Ci19Ci0KLXN0YXRpYyBlbnVtIGxlZF9icmlnaHRuZXNzIGVic2ExMTBf bGVkX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpjZGV2KQotewotCXU4IHJlZyA9IF9fcmF3X3Jl YWRiKFNPRlRfQkFTRSk7Ci0KLQlyZXR1cm4gKHJlZyAmIDB4ODApID8gTEVEX0ZVTEwgOiBMRURf T0ZGOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBlYnNhMTEwX2xlZHNfaW5pdCh2b2lkKQotewot Ci0Jc3RydWN0IGxlZF9jbGFzc2RldiAqY2RldjsKLQlpbnQgcmV0OwotCi0JaWYgKCFtYWNoaW5l X2lzX2Vic2ExMTAoKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQljZGV2ID0ga3phbGxvYyhzaXpl b2YoKmNkZXYpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNkZXYpCi0JCXJldHVybiAtRU5PTUVNOwot Ci0JY2Rldi0+bmFtZSA9ICJlYnNhMTEwOjAiOwotCWNkZXYtPmJyaWdodG5lc3Nfc2V0ID0gZWJz YTExMF9sZWRfc2V0OwotCWNkZXYtPmJyaWdodG5lc3NfZ2V0ID0gZWJzYTExMF9sZWRfZ2V0Owot CWNkZXYtPmRlZmF1bHRfdHJpZ2dlciA9ICJoZWFydGJlYXQiOwotCi0JcmV0ID0gbGVkX2NsYXNz ZGV2X3JlZ2lzdGVyKE5VTEwsIGNkZXYpOwotCWlmIChyZXQJPCAwKSB7Ci0JCWtmcmVlKGNkZXYp OwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKgotICogU2luY2Ugd2Ug bWF5IGhhdmUgdHJpZ2dlcnMgb24gYW55IHN1YnN5c3RlbSwgZGVmZXIgcmVnaXN0cmF0aW9uCi0g KiB1bnRpbCBhZnRlciBzdWJzeXN0ZW1faW5pdC4KLSAqLwotZnNfaW5pdGNhbGwoZWJzYTExMF9s ZWRzX2luaXQpOwotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcg Yi9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcKaW5kZXggZmQ3OTY4NjM1ZTZkLi5mMjJlMzczMzcw MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZworKysgYi9kcml2ZXJzL3dh dGNoZG9nL0tjb25maWcKQEAgLTU5OSw3ICs1OTksNyBAQCBjb25maWcgSzNfUlRJX1dBVENIRE9H CiAKIGNvbmZpZyBPUklPTl9XQVRDSERPRwogCXRyaXN0YXRlICJPcmlvbiB3YXRjaGRvZyIKLQlk ZXBlbmRzIG9uIEFSQ0hfT1JJT041WCB8fCBBUkNIX0RPVkUgfHwgTUFDSF9ET1ZFIHx8IEFSQ0hf TVZFQlUgfHwgKENPTVBJTEVfVEVTVCAmJiAhQVJDSF9FQlNBMTEwKQorCWRlcGVuZHMgb24gQVJD SF9PUklPTjVYIHx8IEFSQ0hfRE9WRSB8fCBNQUNIX0RPVkUgfHwgQVJDSF9NVkVCVSB8fCBDT01Q SUxFX1RFU1QKIAlkZXBlbmRzIG9uIEFSTQogCXNlbGVjdCBXQVRDSERPR19DT1JFCiAJaGVscAot LSAKMi4yNy4wCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5p bmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8v bGludXgtYXJtLWtlcm5lbAo=