summaryrefslogtreecommitdiffstats
path: root/arch/x86
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86')
-rw-r--r--arch/x86/Kconfig65
-rw-r--r--arch/x86/Makefile32
-rw-r--r--arch/x86/bios/Makefile3
-rw-r--r--arch/x86/bios/bios_disk.S57
-rw-r--r--arch/x86/bios/memory16.S54
-rw-r--r--arch/x86/bios/traveler.S166
-rw-r--r--arch/x86/boards/x86_generic/Makefile4
-rw-r--r--arch/x86/boards/x86_generic/disk_bios_drive.c33
-rw-r--r--arch/x86/boards/x86_generic/env/bin/boot37
-rw-r--r--arch/x86/boards/x86_generic/env/bin/init15
-rw-r--r--arch/x86/boards/x86_generic/env/config31
-rw-r--r--arch/x86/boards/x86_generic/envsector.h24
-rw-r--r--arch/x86/boards/x86_generic/generic_pc.c18
-rw-r--r--arch/x86/boards/x86_generic/intf_platform_ide.c80
-rw-r--r--arch/x86/boards/x86_generic/serial_ns16550.c35
-rw-r--r--arch/x86/boot/Kconfig20
-rw-r--r--arch/x86/boot/Makefile13
-rw-r--r--arch/x86/boot/a20.c166
-rw-r--r--arch/x86/boot/bioscall.S90
-rw-r--r--arch/x86/boot/boot.h189
-rw-r--r--arch/x86/boot/boot_hdisk.S170
-rw-r--r--arch/x86/boot/boot_main.S39
-rw-r--r--arch/x86/boot/main_entry.c24
-rw-r--r--arch/x86/boot/pmjump.S82
-rw-r--r--arch/x86/boot/prepare_uboot.c80
-rw-r--r--arch/x86/boot/regs.c29
-rw-r--r--arch/x86/boot/tty.c41
-rw-r--r--arch/x86/configs/generic_defconfig26
-rw-r--r--arch/x86/include/asm/setjmp.h44
-rw-r--r--arch/x86/include/asm/syslib.h13
-rw-r--r--arch/x86/lib/.gitignore1
-rw-r--r--arch/x86/lib/Makefile10
-rw-r--r--arch/x86/lib/asm-offsets.c6
-rw-r--r--arch/x86/lib/barebox.lds.S161
-rw-r--r--arch/x86/lib/gdt.c38
-rw-r--r--arch/x86/lib/linux_start.S55
-rw-r--r--arch/x86/lib/memory.c49
-rw-r--r--arch/x86/lib/setjmp_32.S60
-rw-r--r--arch/x86/lib/setjmp_64.S60
-rw-r--r--arch/x86/mach-efi/elf_x86_64_efi.lds.S3
-rw-r--r--arch/x86/mach-i386/Kconfig13
-rw-r--r--arch/x86/mach-i386/Makefile2
-rw-r--r--arch/x86/mach-i386/include/mach/barebox.lds.h82
-rw-r--r--arch/x86/mach-i386/pit_timer.c53
44 files changed, 183 insertions, 2090 deletions
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 0e3e5d6..311c3d1 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -9,17 +9,7 @@ config X86
config ARCH_TEXT_BASE
hex
- default 0x00007c00 if MACH_X86_GENERIC
- default 0x0 if MACH_EFI_GENERIC
-
-config BOARD_LINKER_SCRIPT
- bool
- default n
-
-config GENERIC_LINKER_SCRIPT
- bool
- default y
- depends on !BOARD_LINKER_SCRIPT
+ default 0x0
menu "ARCH specific settings"
@@ -36,58 +26,27 @@ config 64BIT
config X86_32
def_bool y
depends on !64BIT
+ select HAS_ARCH_SJLJ
config X86_64
def_bool y
depends on 64BIT
+ select HAS_ARCH_SJLJ
endmenu
-config X86_BOOTLOADER
- bool
- select X86_32
- select HAS_MODULES
- select HAVE_CONFIGURABLE_MEMORY_LAYOUT
- select HAVE_CONFIGURABLE_TEXT_BASE
-
-choice
- prompt "Select your board"
-
-config MACH_X86_GENERIC
- bool "Generic x86"
- select X86_BOOTLOADER
- depends on !X86_EFI
- help
- Say Y here if you want barebox to be your BIOS based bootloader
-
config MACH_EFI_GENERIC
- bool "Generic EFI"
- depends on X86_EFI
+ def_bool y
+ depends on X86_EFI
select HAS_DEBUG_LL
help
Say Y here if you want barebox to be your EFI based bootloader
-endchoice
-
-choice
- prompt "Bring up type"
- config X86_EFI
- bool "EFI"
- select EFI_BOOTUP
- select EFI_GUID
- select EFI_DEVICEPATH
- select PRINTF_UUID
- select CLOCKSOURCE_EFI_X86
-
- config X86_BIOS_BRINGUP
- bool "16 bit BIOS"
- help
- Barebox will act as a BIOS based bootloader. This includes
- some 16 bit real mode code and some restrictions everyone knows
- from BIOS based systems.
-
-endchoice
-
-source "arch/x86/boot/Kconfig"
-source "arch/x86/mach-i386/Kconfig"
+config X86_EFI
+ def_bool y
+ select EFI_BOOTUP
+ select EFI_GUID
+ select EFI_DEVICEPATH
+ select PRINTF_UUID
+ select CLOCKSOURCE_EFI_X86
diff --git a/arch/x86/Makefile b/arch/x86/Makefile
index 61e51ab..fd871ca 100644
--- a/arch/x86/Makefile
+++ b/arch/x86/Makefile
@@ -1,12 +1,9 @@
-KBUILD_DEFCONFIG := generic_defconfig
+KBUILD_DEFCONFIG := efi_defconfig
KBUILD_CPPFLAGS += -D__X86__
-board-$(CONFIG_MACH_X86_GENERIC) := x86_generic
-
TEXT_BASE = $(CONFIG_TEXT_BASE)
-ifeq ($(CONFIG_X86_EFI),y)
machine-y := efi
KBUILD_CFLAGS += -fpic -fshort-wchar -mno-sse -mno-mmx
ifeq ($(CONFIG_X86_32),y)
@@ -14,13 +11,6 @@ ifeq ($(CONFIG_X86_32),y)
else
TARGET = efi-app-x86_64
endif
-else
-KBUILD_CPPFLAGS += -fno-strict-aliasing
-KBUILD_CPPFLAGS += -march=i386 -DTEXT_BASE=$(TEXT_BASE) \
- -fno-unwind-tables -fno-asynchronous-unwind-tables
-
-machine-y := i386
-endif
ifeq ($(CONFIG_X86_32),y)
UTS_MACHINE := i386
@@ -48,25 +38,17 @@ machdirs := $(patsubst %,arch/x86/mach-%/,$(machine-y))
KBUILD_CPPFLAGS += $(patsubst %,-I$(srctree)/%include,$(machdirs))
-ifneq ($(board-y),)
-BOARD := arch/x86/boards/$(board-y)/
-else
-BOARD :=
-endif
-
ifneq ($(machine-y),)
MACH := arch/x86/mach-$(machine-y)/
else
MACH :=
endif
-common-y += $(BOARD) $(MACH)
+common-y += $(MACH)
common-y += arch/x86/lib/
-common-$(CONFIG_X86_BIOS_BRINGUP) += arch/x86/bios/
# arch/x86/cpu/
-ifeq ($(CONFIG_X86_EFI),y)
lds-$(CONFIG_X86_32) := arch/x86/mach-efi/elf_ia32_efi.lds
lds-$(CONFIG_X86_64) := arch/x86/mach-efi/elf_x86_64_efi.lds
@@ -92,16 +74,6 @@ barebox.efi: $(KBUILD_BINARY) FORCE
KBUILD_IMAGE := barebox.efi
-else
-common-y += arch/x86/boot/
-
-lds-$(CONFIG_GENERIC_LINKER_SCRIPT) := arch/x86/lib/barebox.lds
-lds-$(CONFIG_BOARD_LINKER_SCRIPT) := $(BOARD)/barebox.lds
-
-endif
-
KBUILD_LDFLAGS += -m elf_$(UTS_MACHINE)
CLEAN_FILES += $(lds-y)
-CLEAN_FILES += arch/x86/lib/barebox.lds barebox.map barebox.S
-
diff --git a/arch/x86/bios/Makefile b/arch/x86/bios/Makefile
deleted file mode 100644
index 414ee42..0000000
--- a/arch/x86/bios/Makefile
+++ /dev/null
@@ -1,3 +0,0 @@
-obj-y += memory16.o
-obj-y += traveler.o
-obj-y += bios_disk.o
diff --git a/arch/x86/bios/bios_disk.S b/arch/x86/bios/bios_disk.S
deleted file mode 100644
index c2a824e..0000000
--- a/arch/x86/bios/bios_disk.S
+++ /dev/null
@@ -1,57 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-or-later */
-/* SPDX-FileCopyrightText: 2009 Juergen Beisert, Pengutronix */
-/* SPDX-FileCopyrightText: 1999-2008 Free Software Foundation, Inc. */
-
-/* Mostly stolen from the GRUB2 project */
-
-/**
- * @file
- * @brief Do BIOS calls to load or save data from disks
- *
- * @note These functions are running in flat and real mode. Due to some
- * other restrictions these routines must running from an address
- * space below 0x10000
- */
-
-/*
- * int bios_disk_rw_int13_extensions (int ah, int drive, void *dap)
- *
- * Call IBM/MS INT13 Extensions (int 13 %ah=AH) for DRIVE. DAP
- * is passed for disk address packet. If an error occurs, return
- * non-zero, otherwise zero.
- */
- .section .boot.text.bios_disk_rw_int13_extensions, "ax"
- .code32
- .globl bios_disk_rw_int13_extensions
- .type bios_disk_rw_int13_extensions, @function
-
- .extern prot_to_real
- .extern real_to_prot
-
-bios_disk_rw_int13_extensions:
- pushl %ebp
- pushl %esi
-
- /* compute the address of disk_address_packet */
- movw %cx, %si
- xorw %cx, %cx
- shrl $4, %ecx /* save the segment to cx */
-
- movb %al, %dh
- call prot_to_real /* enter real mode right now */
-
- .code16
- movb %dh, %ah
- movw %cx, %ds
- int $0x13 /* do the operation */
- movb %ah, %dl /* save return value */
- /* back to protected mode */
- DATA32 call real_to_prot
-
- .code32
- movb %dl, %al /* return value in %eax */
-
- popl %esi
- popl %ebp
-
- ret
diff --git a/arch/x86/bios/memory16.S b/arch/x86/bios/memory16.S
deleted file mode 100644
index e4aef2f..0000000
--- a/arch/x86/bios/memory16.S
+++ /dev/null
@@ -1,54 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-or-later */
-/* SPDX-FileCopyrightText: 2009 Juergen Beisert, Pengutronix */
-
-/* This code was inspired by the GRUB2 project. */
-
-/**
- * @file
- * @brief Query the memory layout information from the BIOS
- *
- * Note: This function is running in flat and real mode. Due to some
- * other restrictions it must running from an address space below 0x10000
- */
-
-/**
- * @fn unsigned short bios_get_memsize(void)
- * @brief Does a BIOS call "INT 15H, AH=88H" to get extended memory size
- * @return Extended memory size in KB
- *
- * @note This call is limited to 64 MiB. So, if the system provides more than
- * 64 MiB of memory, still 64 MiB are reported.
- *
- */
-
-
- .section .boot.text.bios_get_memsize, "ax"
- .code32
- .globl bios_get_memsize
- .type bios_get_memsize, @function
-
- .extern prot_to_real
-
-bios_get_memsize:
-
- pushl %ebp
-
- call prot_to_real /* enter real mode */
- .code16
-
- movb $0x88, %ah
- int $0x15
-
- movw %ax, %dx
-
- DATA32 call real_to_prot
-
- .code32
-
- movw %dx, %ax
-
- popl %ebp
- ret
-
- .size bios_get_memsize, .-bios_get_memsize
-
diff --git a/arch/x86/bios/traveler.S b/arch/x86/bios/traveler.S
deleted file mode 100644
index 1c11c9d..0000000
--- a/arch/x86/bios/traveler.S
+++ /dev/null
@@ -1,166 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-or-later */
-/* SPDX-FileCopyrightText: 2009 Juergen Beisert, Pengutronix */
-
-/* Mostly stolen from the GRUB2 project */
-
-/**
- * @file
- * @brief Switch from the flat mode world into the real mode world and vice versa
- *
- * Note: These functions are *called* and return in a different operating mode
- */
-
-/**
- * @fn void real_to_prot(void)
- * @brief Switch from temp. real mode back to flat mode
- *
- * Called from a 32 bit flat mode segment and returns into a 16 bit segment
- */
-
-/**
- * @fn void prot_to_real(void)
- * @brief Switch from flat mode to real mode
- *
- * Called from a 16 bit real mode segment and returns into a 32 bit segment
- */
-
-#include <asm/modes.h>
-
- .file "walkyrie.S"
-
-/* keep the current flat mode stack pointer, while playing in real mode */
- .section .boot.data.protstack
- .code32
-protstack: .long 4
-/* temp. store */
-return_addr: .long 4
-
-
- .section .boot.text.real_to_prot, "ax"
- .code16
- .globl real_to_prot
- .type real_to_prot, @function
-
-/* Note: This routine should not change any other standard registers than eax */
-real_to_prot:
- /*
- * Always disable the interrupts, when returning to flat mode
- */
- cli
-
- /* turn on protected mode */
- movl %cr0, %eax
- orl $0x00000001, %eax
- movl %eax, %cr0
-
- /* jump to relocation, flush prefetch queue, and reload %cs */
- DATA32 ljmp $__BOOT_CS, $return_to_flatmode
- .size real_to_prot, .-real_to_prot
-
-/* ----------------------------------------------------------------------- */
- .section .boot.text.return_to_flatmode, "ax"
- .type return_to_flatmode, @function
- .code32
-
-return_to_flatmode:
- /* reload other segment registers */
- movw $__BOOT_DS, %ax
- movw %ax, %ds
- movw %ax, %es
- movw %ax, %fs
- movw %ax, %gs
- movw %ax, %ss
-
- /* move the return address from the real mode to the flat mode stack */
- movl (%esp), %eax
- movl %eax, return_addr
-
- /* setup again the flat mode stack */
- movl protstack, %eax
- movl %eax, %esp
- movl %eax, %ebp
-
- movl return_addr, %eax
- movl %eax, (%esp)
-
- /* flag we returned happy here */
- xorl %eax, %eax
- ret
- .size return_to_flatmode, .-return_to_flatmode
-
-/* ------------------------------------------------------------------------ */
-
-/* Note: This routine should not change any other standard registers than eax */
-
- .section .boot.text.prot_to_real, "ax"
- .globl prot_to_real
- .type prot_to_real, @function
- .extern boot_stack
- .code32
-
-prot_to_real:
- /* save the protected mode stack */
- movl %esp, %eax
- movl %eax, protstack
-
- /* prepare the real mode stack */
- /* - address to call to the top of this stack */
- movl (%esp), %eax
- movl %eax, boot_stack - 4
-
- /* - the stack itself */
- movl $boot_stack - 4, %eax
- movl %eax, %esp
- movl %eax, %ebp
-
- /* prepare segments limits to 16 bit */
- movw $__REAL_DS, %ax
- movw %ax, %ds
- movw %ax, %es
- movw %ax, %fs
- movw %ax, %gs
- movw %ax, %ss
-
- /* at last, also limit the code segment to 16 bit */
- ljmp $__REAL_CS, $return_to_realmode
- .size prot_to_real, .-prot_to_real
-
-/* ----------------------------------------------------------------------- */
-
- .section .boot.text.return_to_realmode, "ax"
- .globl return_to_realmode
- .type return_to_realmode, @function
- .code16
-
-return_to_realmode:
- /* disable protected mode */
- movl %cr0, %eax
- andl $(~0x00000001), %eax
- movl %eax, %cr0
-
- /*
- * all the protected mode settings are still cached in the CPU.
- * Refresh them by re-loading all registers in realmode
- * Start with the CS, continue with the data registers
- */
- ljmp $0, $enter_realmode
-
-enter_realmode:
- xorl %eax, %eax
- movw %ax, %ds
- movw %ax, %es
- movw %ax, %fs
- movw %ax, %gs
- movw %ax, %ss
- /*
- * back in plain real mode now, we can play again with the BIOS
- */
-
- /* restore interrupts */
- sti
-
- /* return on realmode stack! */
- DATA32 ret
-
- .size return_to_realmode, .-return_to_realmode
-
diff --git a/arch/x86/boards/x86_generic/Makefile b/arch/x86/boards/x86_generic/Makefile
deleted file mode 100644
index fca707d..0000000
--- a/arch/x86/boards/x86_generic/Makefile
+++ /dev/null
@@ -1,4 +0,0 @@
-obj-y += generic_pc.o
-obj-$(CONFIG_DISK_INTF_PLATFORM_IDE) += intf_platform_ide.o
-obj-$(CONFIG_DISK_BIOS) += disk_bios_drive.o
-obj-$(CONFIG_DRIVER_SERIAL_NS16550) += serial_ns16550.o
diff --git a/arch/x86/boards/x86_generic/disk_bios_drive.c b/arch/x86/boards/x86_generic/disk_bios_drive.c
deleted file mode 100644
index c8e9ae8..0000000
--- a/arch/x86/boards/x86_generic/disk_bios_drive.c
+++ /dev/null
@@ -1,33 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-or-later
-// SPDX-FileCopyrightText: 2009 Juergen Beisert, Pengutronix
-
-/**
- * @file
- * @brief Generic PC support for the BIOS disk interface
- */
-
-#include <common.h>
-#include <driver.h>
-#include <init.h>
-#include <linux/err.h>
-#include "envsector.h"
-
-static int bios_disk_init(void)
-{
- struct cdev *cdev;
-
- add_generic_device("biosdrive", DEVICE_ID_DYNAMIC, NULL, 0, 0,
- IORESOURCE_MEM, NULL);
-
- if (pers_env_size != PATCH_AREA_PERS_SIZE_UNUSED) {
- cdev = devfs_add_partition("biosdisk0",
- pers_env_storage * 512,
- (unsigned)pers_env_size * 512,
- DEVFS_PARTITION_FIXED, "env0");
- printf("Partition: %ld\n", IS_ERR(cdev) ? PTR_ERR(cdev) : 0);
- } else
- printf("No persistent storage defined\n");
-
- return 0;
-}
-device_initcall(bios_disk_init);
diff --git a/arch/x86/boards/x86_generic/env/bin/boot b/arch/x86/boards/x86_generic/env/bin/boot
deleted file mode 100644
index fcfffe3..0000000
--- a/arch/x86/boards/x86_generic/env/bin/boot
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/bin/sh
-
-. /env/config
-
-if [ x$1 = xdisk ]; then
- root=disk
- kernel=disk
-fi
-
-if [ x$1 = xnet ]; then
- root=net
- kernel=net
-fi
-
-if [ x$ip = xdhcp ]; then
- bootargs="$bootargs ip=dhcp"
-else
- bootargs="$bootargs ip=$eth0.ipaddr:$eth0.serverip:$eth0.gateway:$eth0.netmask:::"
-fi
-
-if [ x$root = xdisk ]; then
- bootargs="$bootargs root=$rootpart_disk rootfstype=$rootpart_fs rw"
-else
- bootargs="$bootargs root=/dev/nfs nfsroot=$eth0.serverip:$nfsroot,v3,tcp rw"
-fi
-
-if [ $kernel = net ]; then
- if [ x$ip = xdhcp ]; then
- dhcp
- fi
- tftp $uimage uImage || exit 1
- bootm uImage
-else
- bootargs="BOOT_IMAGE=$kernel_device auto $bootargs"
- linux16 $kernel_device
-fi
-
diff --git a/arch/x86/boards/x86_generic/env/bin/init b/arch/x86/boards/x86_generic/env/bin/init
deleted file mode 100644
index 2924a44..0000000
--- a/arch/x86/boards/x86_generic/env/bin/init
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/sh
-
-PATH=/env/bin
-export PATH
-
-. /env/config
-
-echo
-echo -n "Hit any key to stop autoboot: "
-timeout -a $autoboot_timeout
-if [ $? != 0 ]; then
- exit
-fi
-
-boot
diff --git a/arch/x86/boards/x86_generic/env/config b/arch/x86/boards/x86_generic/env/config
deleted file mode 100644
index dd57aad..0000000
--- a/arch/x86/boards/x86_generic/env/config
+++ /dev/null
@@ -1,31 +0,0 @@
-#
-# basic config
-#
-# boot source: 'disk' or 'net'
-kernel=disk
-root=disk
-
-# data for the NFS case
-nfsroot="/path/to/nfs_root"
-
-# data for the disk case
-kernel_device=/dev/biosdisk0.1
-rootpart_disk=/dev/sda1
-rootpart_fs=ext2
-
-baudrate=115200
-serial=ttyS0
-
-# use UART for console
-bootargs="console=$serial,$baudrate"
-
-autoboot_timeout=3
-
-# use 'dhcp' to do dhcp in uboot and in kernel
-# ip=dhcp
-# or set your networking parameters here
-# eth0.ipaddr=192.168.3.11
-# eth0.netmask=255.255.255.0
-# eth0.gateway=a.b.c.d
-# eth0.serverip=192.168.3.10
-# eth0.ethaddr=aa.bb.cc.dd.ee.ff
diff --git a/arch/x86/boards/x86_generic/envsector.h b/arch/x86/boards/x86_generic/envsector.h
deleted file mode 100644
index 57a6d2a..0000000
--- a/arch/x86/boards/x86_generic/envsector.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-or-later */
-
-/**
- * @file
- * @brief x86 Generic PC common definitions
- */
-#ifndef __X86_ENVSECTOR_H
-#define __ENVSECTOR_H
-
-/*
- * These datas are from the MBR, created by the linker and filled by the
- * setup tool while installing barebox on the disk drive
- */
-extern uint64_t pers_env_storage;
-extern uint16_t pers_env_size;
-extern uint8_t pers_env_drive;
-
-/**
- * Persistent environment "not used" marker.
- * Note: Must be in accordance to the value the tool "setup_mbr" writes.
- */
-#define PATCH_AREA_PERS_SIZE_UNUSED 0x000
-
-#endif
diff --git a/arch/x86/boards/x86_generic/generic_pc.c b/arch/x86/boards/x86_generic/generic_pc.c
deleted file mode 100644
index 2f1db7a..0000000
--- a/arch/x86/boards/x86_generic/generic_pc.c
+++ /dev/null
@@ -1,18 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-or-later
-// SPDX-FileCopyrightText: 2009 Juergen Beisert, Pengutronix
-
-#include <common.h>
-#include <types.h>
-#include <driver.h>
-#include <init.h>
-#include <asm/syslib.h>
-#include <linux/err.h>
-
-static int devices_init(void)
-{
- /* extended memory only */
- add_mem_device("ram0", 0x0, bios_get_memsize() << 10,
- IORESOURCE_MEM_WRITEABLE);
- return 0;
-}
-device_initcall(devices_init);
diff --git a/arch/x86/boards/x86_generic/intf_platform_ide.c b/arch/x86/boards/x86_generic/intf_platform_ide.c
deleted file mode 100644
index 0db0314..0000000
--- a/arch/x86/boards/x86_generic/intf_platform_ide.c
+++ /dev/null
@@ -1,80 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-or-later
-// SPDX-FileCopyrightText: 2014 Juergen Beisert, Pengutronix
-// SPDX-FileCopyrightText: 2014 Michel Stam, Fugro Intersite
-
-/**
- * @file
- * @brief Generic PC support for the IDE platform driver
- */
-
-#include <common.h>
-#include <driver.h>
-#include <init.h>
-#include <linux/err.h>
-#include <platform_data/ide.h>
-#include "envsector.h"
-
-static struct ide_port_info ide_plat = {
- .ioport_shift = 0,
- .dataif_be = 0,
-};
-
-static struct resource primary_ide_resources[] = {
- {
- .name = "base",
- .start = 0x1f0,
- .end = 0x1f7,
- .flags = IORESOURCE_IO
- },
- {
- .name = "alt",
- .start = 0x3f6,
- .end = 0x3f7,
- .flags = IORESOURCE_IO
- }
-};
-
-static struct resource secondary_ide_resources[] = {
- {
- .name = "base",
- .start = 0x170,
- .end = 0x177,
- .flags = IORESOURCE_IO
- },
-};
-
-static struct device_d primary_ide_device = {
- .name = "ide_intf",
- .id = 0,
- .platform_data = &ide_plat,
- .resource = primary_ide_resources,
- .num_resources = ARRAY_SIZE(primary_ide_resources),
-};
-
-static struct device_d secondary_ide_device = {
- .name = "ide_intf",
- .id = 1,
- .platform_data = &ide_plat,
- .resource = secondary_ide_resources,
- .num_resources = ARRAY_SIZE(secondary_ide_resources),
-};
-
-static int platform_ide_init(void)
-{
- struct cdev *cdev;
-
- platform_device_register(&primary_ide_device);
- platform_device_register(&secondary_ide_device);
-
- if (pers_env_size != PATCH_AREA_PERS_SIZE_UNUSED) {
- cdev = devfs_add_partition("ata0",
- pers_env_storage * 512,
- (unsigned)pers_env_size * 512,
- DEVFS_PARTITION_FIXED, "env0");
- printf("Partition: %ld\n", IS_ERR(cdev) ? PTR_ERR(cdev) : 0);
- } else
- printf("No persistent storage defined\n");
-
- return 0;
-}
-device_initcall(platform_ide_init);
diff --git a/arch/x86/boards/x86_generic/serial_ns16550.c b/arch/x86/boards/x86_generic/serial_ns16550.c
deleted file mode 100644
index 4159bc3..0000000
--- a/arch/x86/boards/x86_generic/serial_ns16550.c
+++ /dev/null
@@ -1,35 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-or-later
-// SPDX-FileCopyrightText: 2009 Juergen Beisert, Pengutronix
-// SPDX-FileCopyrightText: 2009 Michel Stam, Fugro Intersite
-
-/**
- * @file
- * @brief Generic PC support to let barebox acting as a boot loader
- */
-
-#include <common.h>
-#include <types.h>
-#include <driver.h>
-#include <init.h>
-#include <asm/syslib.h>
-#include <platform_data/serial-ns16550.h>
-#include <linux/err.h>
-
-static struct NS16550_plat serial_plat = {
- .clock = 1843200,
-};
-
-static int pc_console_init(void)
-{
- barebox_set_model("X86 generic barebox");
- barebox_set_hostname("x86");
-
- /* Register the serial port */
- add_ns16550_device(DEVICE_ID_DYNAMIC, 0x3f8, 8, IORESOURCE_IO,
- &serial_plat);
- add_ns16550_device(DEVICE_ID_DYNAMIC, 0x2f8, 8, IORESOURCE_IO,
- &serial_plat);
-
- return 0;
-}
-console_initcall(pc_console_init);
diff --git a/arch/x86/boot/Kconfig b/arch/x86/boot/Kconfig
deleted file mode 100644
index 8dba00d..0000000
--- a/arch/x86/boot/Kconfig
+++ /dev/null
@@ -1,20 +0,0 @@
-if X86_BIOS_BRINGUP
-
-menu "BIOS boot source"
-
-config X86_HDBOOT
- bool "HD boot"
- help
- Add code to boot from harddisk
-
-config X86_VESA
- bool
- default y if X86_GENERIC_HAS_VIDEO
-
-config X86_VGA
- bool
- default y if X86_GENERIC_HAS_VIDEO
-
-endmenu
-
-endif
diff --git a/arch/x86/boot/Makefile b/arch/x86/boot/Makefile
deleted file mode 100644
index 4a520a2..0000000
--- a/arch/x86/boot/Makefile
+++ /dev/null
@@ -1,13 +0,0 @@
-
-KBUILD_CPPFLAGS += -D__I386__ -fno-strict-aliasing -m32 -g -Os -march=i386 \
- -mregparm=3 -fno-strict-aliasing -fomit-frame-pointer -ffreestanding \
- -fno-toplevel-reorder -fno-unit-at-a-time -fno-stack-protector \
- -mpreferred-stack-boundary=2
-
-obj-$(CONFIG_X86_HDBOOT) += boot_main.o boot_hdisk.o
-
-obj-$(CONFIG_X86_BIOS_BRINGUP) += prepare_uboot.o a20.o bioscall.o regs.o tty.o pmjump.o main_entry.o
-
-obj-$(CONFIG_X86_VESA) += console_vesa.o
-obj-$(CONFIG_X86_VGA) += console_vga.o
-obj-$(CONFIG_X86_SERIAL) += console_serial.o
diff --git a/arch/x86/boot/a20.c b/arch/x86/boot/a20.c
deleted file mode 100644
index f501fee..0000000
--- a/arch/x86/boot/a20.c
+++ /dev/null
@@ -1,166 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-// SPDX-FileCopyrightText: 1991,1992 Linus Torvalds
-// SPDX-FileCopyrightText: 2007-2008 rPath, Inc.
-// SPDX-FileCopyrightText: 2009 Intel Corporation
-
-/* Author: H. Peter Anvin and others */
-
-/*
- * Enable A20 gate (return -1 on failure)
- */
-
-#include <asm/segment.h>
-#include <io.h>
-#include "boot.h"
-
-#define MAX_8042_LOOPS 100000
-#define MAX_8042_FF 32
-
-/* be aware of: */
-THIS_IS_REALMODE_CODE
-
-static int __bootcode empty_8042(void)
-{
- u8 status;
- int loops = MAX_8042_LOOPS;
- int ffs = MAX_8042_FF;
-
- while (loops--) {
- io_delay();
-
- status = inb(0x64);
- if (status == 0xff) {
- /* FF is a plausible, but very unlikely status */
- if (!--ffs)
- return -1; /* Assume no KBC present */
- }
- if (status & 1) {
- /* Read and discard input data */
- io_delay();
- (void)inb(0x60);
- } else if (!(status & 2)) {
- /* Buffers empty, finished! */
- return 0;
- }
- }
-
- return -1;
-}
-
-/* Returns nonzero if the A20 line is enabled. The memory address
- used as a test is the int $0x80 vector, which should be safe. */
-
-#define A20_TEST_ADDR (4*0x80)
-#define A20_TEST_SHORT 32
-#define A20_TEST_LONG 2097152 /* 2^21 */
-
-static int __bootcode a20_test(int loops)
-{
- int ok = 0;
- int saved, ctr;
-
- set_fs(0x0000);
- set_gs(0xffff);
-
- saved = ctr = rdfs32(A20_TEST_ADDR);
-
- while (loops--) {
- wrfs32(++ctr, A20_TEST_ADDR);
- io_delay(); /* Serialize and make delay constant */
- ok = rdgs32(A20_TEST_ADDR+0x10) ^ ctr;
- if (ok)
- break;
- }
-
- wrfs32(saved, A20_TEST_ADDR);
- return ok;
-}
-
-/* Quick test to see if A20 is already enabled */
-static int __bootcode a20_test_short(void)
-{
- return a20_test(A20_TEST_SHORT);
-}
-
-/* Longer test that actually waits for A20 to come on line; this
- is useful when dealing with the KBC or other slow external circuitry. */
-static int __bootcode a20_test_long(void)
-{
- return a20_test(A20_TEST_LONG);
-}
-
-static void __bootcode enable_a20_bios(void)
-{
- struct biosregs ireg;
-
- initregs(&ireg);
- ireg.ax = 0x2401;
- intcall(0x15, &ireg, NULL);
-}
-
-static void __bootcode enable_a20_kbc(void)
-{
- empty_8042();
-
- outb(0xd1, 0x64); /* Command write */
- empty_8042();
-
- outb(0xdf, 0x60); /* A20 on */
- empty_8042();
-
- outb(0xff, 0x64); /* Null command, but UHCI wants it */
- empty_8042();
-}
-
-static void __bootcode enable_a20_fast(void)
-{
- u8 port_a;
-
- port_a = inb(0x92); /* Configuration port A */
- port_a |= 0x02; /* Enable A20 */
- port_a &= ~0x01; /* Do not reset machine */
- outb(port_a, 0x92);
-}
-
-/*
- * Actual routine to enable A20; return 0 on ok, -1 on failure
- */
-
-#define A20_ENABLE_LOOPS 255 /* Number of times to try */
-
-int __bootcode enable_a20(void)
-{
- int loops = A20_ENABLE_LOOPS;
- int kbc_err;
-
- while (loops--) {
- /* First, check to see if A20 is already enabled
- (legacy free, etc.) */
- if (a20_test_short())
- return 0;
-
- /* Next, try the BIOS (INT 0x15, AX=0x2401) */
- enable_a20_bios();
- if (a20_test_short())
- return 0;
-
- /* Try enabling A20 through the keyboard controller */
- kbc_err = empty_8042();
-
- if (a20_test_short())
- return 0; /* BIOS worked, but with delayed reaction */
-
- if (!kbc_err) {
- enable_a20_kbc();
- if (a20_test_long())
- return 0;
- }
-
- /* Finally, try enabling the "fast A20 gate" */
- enable_a20_fast();
- if (a20_test_long())
- return 0;
- }
-
- return -1;
-}
diff --git a/arch/x86/boot/bioscall.S b/arch/x86/boot/bioscall.S
deleted file mode 100644
index 6cda1eb..0000000
--- a/arch/x86/boot/bioscall.S
+++ /dev/null
@@ -1,90 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-or-later */
-/* SPDX-FileCopyrightText: 2009 Intel Corporation */
-
-/* Author: H. Peter Anvin */
-
-/*
- * "Glove box" for BIOS calls. Avoids the constant problems with BIOSes
- * touching registers they shouldn't be.
- */
-
- .file "bioscall.S"
- .code16
- .section .boot.text.intcall, "ax"
-
- .globl intcall
- .type intcall, @function
-intcall:
- /* Self-modify the INT instruction. Ugly, but works. */
- cmpb %al, 3f
- je 1f
- movb %al, 3f
- jmp 1f /* Synchronize pipeline */
-1:
- /* Save state */
- pushfl
- pushw %fs
- pushw %gs
- pushal
-
- /* Copy input state to stack frame */
- subw $44, %sp
- movw %dx, %si
- movw %sp, %di
- movw $11, %cx
- rep; movsd
-
- /* Pop full state from the stack */
- popal
- popw %gs
- popw %fs
- popw %es
- popw %ds
- popfl
-
- /* Actual INT */
- .byte 0xcd /* INT opcode */
-3: .byte 0
-
- /* Push full state to the stack */
- pushfl
- pushw %ds
- pushw %es
- pushw %fs
- pushw %gs
- pushal
-
- /* Re-establish C environment invariants */
- cld
- movzwl %sp, %esp
- movw %cs, %ax
- movw %ax, %ds
- movw %ax, %es
-
- /* Copy output state from stack frame */
- movw 68(%esp), %di /* Original %cx == 3rd argument */
- andw %di, %di
- jz 4f
- movw %sp, %si
- movw $11, %cx
- rep; movsd
-4: addw $44, %sp
-
- /* Restore state and return */
- popal
- popw %gs
- popw %fs
- popfl
- retl
- .size intcall, .-intcall
-
-/* ------------------------------------------------------------------------ */
- .code16
- .section .boot.text.die, "ax"
-
- .globl die
- .type die, @function
-die:
- hlt
- jmp die
- .size die, .-die
diff --git a/arch/x86/boot/boot.h b/arch/x86/boot/boot.h
deleted file mode 100644
index 54483c4..0000000
--- a/arch/x86/boot/boot.h
+++ /dev/null
@@ -1,189 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-/* SPDX-FileCopyrightText: 1991,1992 Linus Torvalds */
-/* SPDX-FileCopyrightText: 2007 rPath, Inc. */
-/* SPDX-FileCopyrightText: 2009 Intel Corporation */
-
-/* Author: H. Peter Anvin and others */
-
-/**
- * @file
- * @brief Main declarations for the real mode code
- */
-
-#ifndef BOOT_BOOT_H
-#define BOOT_BOOT_H
-
-#define STACK_SIZE 512 /* Minimum number of bytes for stack */
-
-/** Carry flag */
-#define X86_EFLAGS_CF 0x00000001
-
-/** PE flag */
-#define X86_CR0_PE 0x00000001
-
-#ifndef __ASSEMBLY__
-
-#include <types.h>
-
-/* we are still in real mode here! */
-#define THIS_IS_REALMODE_CODE asm(".code16gcc");
-
-struct biosregs {
- union {
- struct {
- uint32_t edi;
- uint32_t esi;
- uint32_t ebp;
- uint32_t _esp;
- uint32_t ebx;
- uint32_t edx;
- uint32_t ecx;
- uint32_t eax;
- uint32_t _fsgs;
- uint32_t _dses;
- uint32_t eflags;
- };
- struct {
- uint16_t di, hdi;
- uint16_t si, hsi;
- uint16_t bp, hbp;
- uint16_t _sp, _hsp;
- uint16_t bx, hbx;
- uint16_t dx, hdx;
- uint16_t cx, hcx;
- uint16_t ax, hax;
- uint16_t gs, fs;
- uint16_t es, ds;
- uint16_t flags, hflags;
- };
- struct {
- uint8_t dil, dih, edi2, edi3;
- uint8_t sil, sih, esi2, esi3;
- uint8_t bpl, bph, ebp2, ebp3;
- uint8_t _spl, _sph, _esp2, _esp3;
- uint8_t bl, bh, ebx2, ebx3;
- uint8_t dl, dh, edx2, edx3;
- uint8_t cl, ch, ecx2, ecx3;
- uint8_t al, ah, eax2, eax3;
- };
- };
-};
-
-/* functions in the realmode part */
-extern int enable_a20(void);
-extern void initregs(struct biosregs *regs);
-extern void intcall(uint8_t int_no, const struct biosregs *ireg, struct biosregs *oreg);
-extern void boot_puts(char*);
-extern void __attribute__((noreturn)) die(void);
-extern void __attribute__((noreturn)) protected_mode_jump(void);
-
-struct gdt_ptr {
- uint16_t len;
- uint32_t ptr;
-} __attribute__((packed));
-
-/* These functions are used to reference data in other segments. */
-
-static inline uint16_t ds(void)
-{
- uint16_t seg;
- asm("movw %%ds,%0" : "=rm" (seg));
- return seg;
-}
-
-static inline void set_fs(uint16_t seg)
-{
- asm volatile("movw %0,%%fs" : : "rm" (seg));
-}
-
-static inline uint16_t fs(void)
-{
- uint16_t seg;
- asm volatile("movw %%fs,%0" : "=rm" (seg));
- return seg;
-}
-
-static inline void set_gs(uint16_t seg)
-{
- asm volatile("movw %0,%%gs" : : "rm" (seg));
-}
-
-static inline uint16_t gs(void)
-{
- uint16_t seg;
- asm volatile("movw %%gs,%0" : "=rm" (seg));
- return seg;
-}
-
-typedef unsigned int addr_t;
-
-static inline uint8_t rdfs8(addr_t addr)
-{
- uint8_t v;
- asm volatile("movb %%fs:%1,%0" : "=q" (v) : "m" (*(uint8_t *)addr));
- return v;
-}
-static inline uint16_t rdfs16(addr_t addr)
-{
- uint16_t v;
- asm volatile("movw %%fs:%1,%0" : "=r" (v) : "m" (*(uint16_t *)addr));
- return v;
-}
-static inline uint32_t rdfs32(addr_t addr)
-{
- uint32_t v;
- asm volatile("movl %%fs:%1,%0" : "=r" (v) : "m" (*(uint32_t *)addr));
- return v;
-}
-
-static inline void wrfs8(uint8_t v, addr_t addr)
-{
- asm volatile("movb %1,%%fs:%0" : "+m" (*(uint8_t *)addr) : "qi" (v));
-}
-static inline void wrfs16(uint16_t v, addr_t addr)
-{
- asm volatile("movw %1,%%fs:%0" : "+m" (*(uint16_t *)addr) : "ri" (v));
-}
-static inline void wrfs32(uint32_t v, addr_t addr)
-{
- asm volatile("movl %1,%%fs:%0" : "+m" (*(uint32_t *)addr) : "ri" (v));
-}
-
-static inline uint8_t rdgs8(addr_t addr)
-{
- uint8_t v;
- asm volatile("movb %%gs:%1,%0" : "=q" (v) : "m" (*(uint8_t *)addr));
- return v;
-}
-static inline uint16_t rdgs16(addr_t addr)
-{
- uint16_t v;
- asm volatile("movw %%gs:%1,%0" : "=r" (v) : "m" (*(uint16_t *)addr));
- return v;
-}
-static inline uint32_t rdgs32(addr_t addr)
-{
- uint32_t v;
- asm volatile("movl %%gs:%1,%0" : "=r" (v) : "m" (*(uint32_t *)addr));
- return v;
-}
-
-static inline void wrgs8(uint8_t v, addr_t addr)
-{
- asm volatile("movb %1,%%gs:%0" : "+m" (*(uint8_t *)addr) : "qi" (v));
-}
-static inline void wrgs16(uint16_t v, addr_t addr)
-{
- asm volatile("movw %1,%%gs:%0" : "+m" (*(uint16_t *)addr) : "ri" (v));
-}
-static inline void wrgs32(uint32_t v, addr_t addr)
-{
- asm volatile("movl %1,%%gs:%0" : "+m" (*(uint32_t *)addr) : "ri" (v));
-}
-
-/** use the built in memset function for the real mode code */
-#define memset(d,c,l) __builtin_memset(d,c,l)
-
-#endif /* __ASSEMBLY__ */
-
-#endif /* BOOT_BOOT_H */
diff --git a/arch/x86/boot/boot_hdisk.S b/arch/x86/boot/boot_hdisk.S
deleted file mode 100644
index 6f98197..0000000
--- a/arch/x86/boot/boot_hdisk.S
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * Copyright (C) 2009 Juergen Beisert, Pengutronix
- *
- * This code was inspired by the GRUB2 project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- *
- */
-
-/**
- * @file
- * @brief Loading the barebox image from a disk drive in LBA mode
- */
-
-/**
- * @fn void real_start(void)
- * @brief A very simple and small loader to fetch all required sectors
- * from the boot media.
- */
-
-
- .file "boot_hdisk.S"
- .code16
-
- /*
- * These symbols are generated by the linker, because they need a
- * special layout. This layout is needed to be able to setup this
- * bootloader by patching the binary when it gets stored into the
- * master boot record.
- */
- .extern indirect_sector_lba
- .extern boot_stack
- .extern start_pre_uboot
- .extern boot_disk
- .section .boot_code, "ax"
-
- .globl real_start
- .type real_start, @function
-
-real_start:
-
- xorw %ax, %ax /* set up %ds and %ss as offset from 0 */
- movw %ax, %ds
- movw %ax, %ss
-
- /* set up the REAL stack */
- movw $boot_stack, %sp
-
- sti /* we're safe again */
-
- /* save drive reference first thing! */
- movb %dl, boot_disk
- pushw %dx
-
- movw $notification_string, %si
- call output_message
-
- /*
- * This boot code only supports LBA. We fail here, if the BIOS
- * does not support LBA for the harddisk
- */
-
- /* check if LBA is supported */
- movb $0x41, %ah
- movw $0x55aa, %bx
- int $0x13
-
- /*
- * %dl may have been clobbered by INT 13, AH=41H.
- * This happens, for example, with AST BIOS 1.04.
- */
- popw %dx
- pushw %dx
-
- /* stop if no LBA support */
- jc no_lba
- cmpw $0xaa55, %bx
- jne no_lba
- andw $1, %cx
- jz no_lba
-
-lba_mode:
- /*
- * Load the indirect sector. Its content is ready for use,
- * provided by the installer
- */
- movw $indirect_sector_lba, %si
- movb $0x42, %ah
- int $0x13
- jc no_lba /* error? Then die */
-
- /*
- * Now loop through all valid entries in the indirect sector
- */
- movw $indirect_area, %si
-
-load_loop:
- /*
- * Stop if this "Disk Address Packet Structure" is invalid
- * We call it invalid, if the size member is zero. If it is invalid
- * we are optimistic and calling the loaded image
- */
- movw (%si), %ax
- cmpw $0x0000, %ax
- je start_main
-
- /*
- * Load this entry
- */
- movb $0x42, %ah
- int $0x13
- jc no_lba
-
- addw (%si), %si /* next entry */
- cmpw $indirect_area + 512, %si
- jne load_loop
- /*
- * fall through to start u-boot.
- */
-start_main:
- movw $jmp_string, %si
- call output_message
- jmp start_pre_uboot
-/*
- * die if there is no LBA support
- */
-no_lba: movw $chs_string, %si
- call output_message
- hlt
-
-/*
- * message: write the string pointed to by %si
- *
- * WARNING: trashes %si, %ax, and %bx
- */
-
-/*
- * Use BIOS "int 10H Function 0Eh" to write character in teletype mode
- * %ah = 0xe %al = character
- * %bh = page %bl = foreground color (graphics modes)
- */
-
-1:
- movw $0x0001, %bx
- movb $0xe, %ah
- int $0x10 /* display this char */
-
-output_message:
- lodsb
- cmpb $0, %al
- jne 1b /* if not end of string, next char */
- ret
-
-/* ---------------------------------------------------------------------- */
-
- .section .boot_data
-
-notification_string: .asciz "BAREBOX "
-chs_string: .asciz "CHS "
-jmp_string: .asciz "JMP "
-
diff --git a/arch/x86/boot/boot_main.S b/arch/x86/boot/boot_main.S
deleted file mode 100644
index 632b3f4..0000000
--- a/arch/x86/boot/boot_main.S
+++ /dev/null
@@ -1,39 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-or-later */
-/* SPDX-FileCopyrightText: Juergen Beisert, Pengutronix */
-
-/* This code was inspired by the GRUB2 project. */
-
-/**
- * @file
- * @brief Common boot sector main routine to be entered by the BIOS
- */
-/**
- * @fn void _start(void)
- *
- * @brief Fix segment:offset settings of some buggy BIOSs
- */
-
-
- .file "boot_main.S"
- .code16
-
- .extern real_start
-
- .section .boot_start, "ax"
- .type _start, @function
-
- /*
- * The BIOS loads this code to address 0x00007c00.
- * The code should be called with CS:IP 0:0x7c00 (hopefully).
- */
- .globl _start
-_start:
- cli /* we're not safe here! */
- /*
- * It seems there are implementations in the wild which call this
- * code with CS:IP 0x07C0:0000 instead. We fix it immediately.
- */
- ljmp $0, $real_start
-
- .size _start, .-_start
-
diff --git a/arch/x86/boot/main_entry.c b/arch/x86/boot/main_entry.c
deleted file mode 100644
index b37aa38..0000000
--- a/arch/x86/boot/main_entry.c
+++ /dev/null
@@ -1,24 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-or-later
-// SPDX-FileCopyrightText: 2009 Juergen Beisert, Pengutronix
-
-/**
- * @file
- * @brief Start of the 32 bit flat mode
- */
-
-#include <string.h>
-#include <asm/sections.h>
-
-extern void x86_start_barebox(void);
-
-/**
- * Called plainly from assembler that switches from real to flat mode
- *
- * @note The C environment isn't initialized yet
- */
-void uboot_entry(void)
-{
- /* clear the BSS first */
- memset(__bss_start, 0x00, __bss_stop - __bss_start);
- x86_start_barebox();
-}
diff --git a/arch/x86/boot/pmjump.S b/arch/x86/boot/pmjump.S
deleted file mode 100644
index 4dd1881..0000000
--- a/arch/x86/boot/pmjump.S
+++ /dev/null
@@ -1,82 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-/* SPDX-FileCopyrightText: 1991,1992 Linus Torvalds */
-/* SPDX-FileCopyrightText: 2007 rPath, Inc. */
-
-/**
- * @file
- * @brief The actual transition into protected mode
- *
- * Note: This function is running in flat and real mode. Due to some
- * other restrictions it must running from an address space below 0x10000
- */
-
-/**
- * @fn void protected_mode_jump(void)
- * @brief Switches the first time from real mode to flat mode
- */
-
-#include <asm/modes.h>
-#include "boot.h"
-
- .file "pmjump.S"
- .code16
- .section .boot.text.protected_mode_jump, "ax"
-
- .globl protected_mode_jump
- .type protected_mode_jump, @function
-
-protected_mode_jump:
- jmp 1f /* Short jump to serialize on 386/486 */
-1:
-
- movw $__BOOT_DS, %cx
- movw $__BOOT_TSS, %di
-
- movl %cr0, %edx
- orb $X86_CR0_PE, %dl /* enable protected mode */
- movl %edx, %cr0
-
- /* Transition to 32-bit flat mode */
- data32 ljmp $__BOOT_CS, $in_pm32
- .size protected_mode_jump, .-protected_mode_jump
-
-/* ------------------------------------------------------------------------ */
-
- .section ".text.in_pm32","ax"
- .code32
-
- .extern uboot_entry
- .extern __bss_stop
-
- .type in_pm32, @function
-in_pm32:
- # Set up data segments for flat 32-bit mode
- movl %ecx, %ds
- movl %ecx, %es
- movl %ecx, %fs
- movl %ecx, %gs
- movl %ecx, %ss
-/*
- * Our flat mode code uses its own stack area behind the bss. With this we
- * are still able to return to real mode temporarely
- */
- movl $__bss_stop + 32768, %esp
-
- # Set up TR to make Intel VT happy
- ltr %di
-
- # Clear registers to allow for future extensions to the
- # 32-bit boot protocol
- xorl %ecx, %ecx
- xorl %edx, %edx
- xorl %ebx, %ebx
- xorl %ebp, %ebp
- xorl %edi, %edi
-
- # Set up LDTR to make Intel VT happy
- lldt %cx
-
- jmp uboot_entry
-
- .size in_pm32, .-in_pm32
-
diff --git a/arch/x86/boot/prepare_uboot.c b/arch/x86/boot/prepare_uboot.c
deleted file mode 100644
index 9cac594..0000000
--- a/arch/x86/boot/prepare_uboot.c
+++ /dev/null
@@ -1,80 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-// SPDX-FileCopyrightText: 1991,1992 Linus Torvalds
-// SPDX-FileCopyrightText: 2007 rPath, Inc.
-
-/*
- * Prepare the machine for transition to protected mode.
- */
-#include <asm/segment.h>
-#include <asm/modes.h>
-#include <io.h>
-#include "boot.h"
-
-/* be aware of: */
-THIS_IS_REALMODE_CODE
-
-/*
- * While we are in flat mode, we can't handle interrupts. But we can't
- * switch them off for ever in the PIC, because we need them again while
- * entering real mode code again and again....
- */
-static void __bootcode realmode_switch_hook(void)
-{
- asm volatile("cli");
- outb(0x80, 0x70); /* Disable NMI */
- io_delay();
-}
-
-/*
- * Reset IGNNE# if asserted in the FPU.
- */
-static void __bootcode reset_coprocessor(void)
-{
- outb(0, 0xf0);
- io_delay();
- outb(0, 0xf1);
- io_delay();
-}
-
-/**
- * Setup and register the global descriptor table (GDT)
- *
- * @note This is for the first time only
- */
-static void __bootcode setup_gdt(void)
-{
- /* Xen HVM incorrectly stores a pointer to the gdt_ptr, instead
- of the gdt_ptr contents. Thus, make it static so it will
- stay in memory, at least long enough that we switch to the
- proper kernel GDT. */
- static struct gdt_ptr __bootdata gdt_ptr;
-
- gdt_ptr.len = gdt_size - 1;
- gdt_ptr.ptr = (uint32_t)&gdt + (ds() << 4);
-
- asm volatile("lgdtl %0" : : "m" (gdt_ptr));
-}
-
-static char a20_message[] __bootdata = "A20 gate not responding, unable to boot...\n";
-
-/*
- * Actual invocation sequence
- */
-void __bootcode start_pre_uboot(void)
-{
- /* Hook before leaving real mode, also disables interrupts */
- realmode_switch_hook();
-
- /* Enable the A20 gate */
- if (enable_a20()) {
- boot_puts(a20_message);
- die();
- }
-
- /* Reset coprocessor (IGNNE#) */
- reset_coprocessor();
-
- setup_gdt();
- /* Actual transition to protected mode... */
- protected_mode_jump();
-}
diff --git a/arch/x86/boot/regs.c b/arch/x86/boot/regs.c
deleted file mode 100644
index 318b662..0000000
--- a/arch/x86/boot/regs.c
+++ /dev/null
@@ -1,29 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-or-later
-// SPDX-FileCopyrightText: 2009 Intel Corporation
-
-/* Author: H. Peter Anvin */
-
-/**
- * @file
- * @brief Simple helper function for initializing a register set.
- *
- * Note that this sets EFLAGS_CF in the input register set; this
- * makes it easier to catch functions which do nothing but don't
- * explicitly set CF.
- */
-
-#include <asm/segment.h>
-#include "boot.h"
-
-/* be aware of: */
-THIS_IS_REALMODE_CODE
-
-void __bootcode initregs(struct biosregs *reg)
-{
- memset(reg, 0, sizeof *reg);
- reg->eflags |= X86_EFLAGS_CF;
- reg->ds = ds();
- reg->es = ds();
- reg->fs = fs();
- reg->gs = gs();
-}
diff --git a/arch/x86/boot/tty.c b/arch/x86/boot/tty.c
deleted file mode 100644
index 620197c..0000000
--- a/arch/x86/boot/tty.c
+++ /dev/null
@@ -1,41 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-// SPDX-FileCopyrightText: 1991,1992 Linus Torvalds
-// SPDX-FileCopyrightText: 2007 rPath, Inc.
-// SPDX-FileCopyrightText: 2009 Intel Corporation
-
-/* Author: H. Peter Anvin and others */
-
-/**
- * @file
- * @brief Very simple screen I/O for the initialization stage
- *
- * @todo Probably should add very simple serial I/O?
- * @attention This is real mode code!
- */
-
-#include <asm/segment.h>
-#include "boot.h"
-
-/* be aware of: */
-THIS_IS_REALMODE_CODE
-
-static void __bootcode putchar(int ch)
-{
- struct biosregs ireg;
-
- if (ch == '\n')
- putchar('\r'); /* \n -> \r\n */
-
- initregs(&ireg);
- ireg.bx = 0x0007;
- ireg.cx = 0x0001;
- ireg.ah = 0x0e;
- ireg.al = ch;
- intcall(0x10, &ireg, NULL);
-}
-
-void __bootcode boot_puts(char *str)
-{
- while (*str)
- putchar(*str++);
-}
diff --git a/arch/x86/configs/generic_defconfig b/arch/x86/configs/generic_defconfig
deleted file mode 100644
index 4620280..0000000
--- a/arch/x86/configs/generic_defconfig
+++ /dev/null
@@ -1,26 +0,0 @@
-CONFIG_X86_BIOS_BRINGUP=y
-CONFIG_X86_HDBOOT=y
-CONFIG_STACK_SIZE=0x7000
-CONFIG_EXPERIMENTAL=y
-CONFIG_GLOB=y
-CONFIG_CMDLINE_EDITING=y
-CONFIG_AUTO_COMPLETE=y
-CONFIG_PARTITION=y
-CONFIG_DEFAULT_ENVIRONMENT_PATH="arch/x86/boards/x86_generic/env"
-CONFIG_LONGHELP=y
-CONFIG_CMD_MEMINFO=y
-# CONFIG_CMD_BOOTM is not set
-CONFIG_CMD_GO=y
-CONFIG_CMD_RESET=y
-CONFIG_CMD_EXPORT=y
-CONFIG_CMD_LOADENV=y
-CONFIG_CMD_PRINTENV=y
-CONFIG_CMD_SAVEENV=y
-# CONFIG_CMD_FALSE is not set
-CONFIG_CMD_SLEEP=y
-# CONFIG_CMD_TRUE is not set
-CONFIG_CMD_EDIT=y
-CONFIG_CMD_READLINE=y
-CONFIG_CMD_TIMEOUT=y
-CONFIG_DRIVER_SERIAL_NS16550=y
-# CONFIG_SPI is not set
diff --git a/arch/x86/include/asm/setjmp.h b/arch/x86/include/asm/setjmp.h
new file mode 100644
index 0000000..5af5e62
--- /dev/null
+++ b/arch/x86/include/asm/setjmp.h
@@ -0,0 +1,44 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Written by H. Peter Anvin <hpa@zytor.com>
+ * Brought in from Linux v4.4 and modified for U-Boot
+ * From Linux arch/um/sys-i386/setjmp.S
+ */
+
+#ifndef __setjmp_h
+#define __setjmp_h
+
+#include <linux/compiler.h>
+
+struct jmp_buf_data {
+#if defined CONFIG_X86_64
+#define __sjlj_attr
+ unsigned long __rip;
+ unsigned long __rsp;
+ unsigned long __rbp;
+ unsigned long __rbx;
+ unsigned long __r12;
+ unsigned long __r13;
+ unsigned long __r14;
+ unsigned long __r15;
+#elif defined CONFIG_X86_32
+#define __sjlj_attr __attribute__((regparm(3)))
+ unsigned int __ebx;
+ unsigned int __esp;
+ unsigned int __ebp;
+ unsigned int __esi;
+ unsigned int __edi;
+ unsigned int __eip;
+#else
+#error "Unsupported configuration"
+#endif
+};
+
+typedef struct jmp_buf_data jmp_buf[1];
+
+int setjmp(jmp_buf jmp) __attribute__((returns_twice)) __sjlj_attr;
+void longjmp(jmp_buf jmp, int ret) __attribute__((noreturn)) __sjlj_attr;
+
+int initjmp(jmp_buf jmp, void __attribute__((noreturn)) (*func)(void), void *stack_top) __sjlj_attr;
+
+#endif
diff --git a/arch/x86/include/asm/syslib.h b/arch/x86/include/asm/syslib.h
deleted file mode 100644
index 7e08cfd..0000000
--- a/arch/x86/include/asm/syslib.h
+++ /dev/null
@@ -1,13 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-or-later */
-/* SPDX-FileCopyrightText: 2009 Juergen Beisert, Pengutronix */
-
-#ifdef CONFIG_X86_BIOS_BRINGUP
-
-extern int bios_disk_rw_int13_extensions(int, int, void*) __attribute__((regparm(3)));
-extern uint16_t bios_get_memsize(void);
-
-#endif
-
-#ifdef CONFIG_CMD_LINUX16
-extern void bios_start_linux(unsigned) __attribute__((regparm(1)));
-#endif
diff --git a/arch/x86/lib/.gitignore b/arch/x86/lib/.gitignore
deleted file mode 100644
index d116578..0000000
--- a/arch/x86/lib/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-barebox.lds
diff --git a/arch/x86/lib/Makefile b/arch/x86/lib/Makefile
index 05e43f0..360aebf 100644
--- a/arch/x86/lib/Makefile
+++ b/arch/x86/lib/Makefile
@@ -1,8 +1,2 @@
-extra-$(CONFIG_GENERIC_LINKER_SCRIPT) += barebox.lds
-ifneq ($(CONFIG_X86_EFI),y)
-obj-y += memory.o
-obj-y += gdt.o
-endif
-
-# needed, when running via a 16 bit BIOS
-obj-$(CONFIG_CMD_LINUX16) += linux_start.o
+obj-$(CONFIG_X86_32) += setjmp_32.o
+obj-$(CONFIG_X86_64) += setjmp_64.o
diff --git a/arch/x86/lib/asm-offsets.c b/arch/x86/lib/asm-offsets.c
index 0f9c47e..22f382b 100644
--- a/arch/x86/lib/asm-offsets.c
+++ b/arch/x86/lib/asm-offsets.c
@@ -6,13 +6,7 @@
#include <linux/kbuild.h>
-#ifdef CONFIG_EFI_BOOTUP
int main(void)
{
return 0;
}
-#else
-void common(void)
-{
-}
-#endif
diff --git a/arch/x86/lib/barebox.lds.S b/arch/x86/lib/barebox.lds.S
deleted file mode 100644
index b24c480..0000000
--- a/arch/x86/lib/barebox.lds.S
+++ /dev/null
@@ -1,161 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-or-later */
-
-#undef i386
-#include <asm-generic/barebox.lds.h>
-
-OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
-OUTPUT_ARCH(i386)
-ENTRY(_start)
-
-MEMORY
-{
- mbr(rwx): ORIGIN = TEXT_BASE, LENGTH = 2 * SECTOR_SIZE
- barebox (rwx) : ORIGIN = TEXT_BASE + SECTOR_SIZE, LENGTH = (256 * 1024 * 1024)
-}
-
-SECTIONS
-{
-#ifdef CONFIG_X86_HDBOOT
-
- .ramlayout : {
- boot_stack = INDIRECT_AREA;
- indirect_area = INDIRECT_AREA;
- }
- /* describing the main boot sector */
- .bootsector : AT (0) {
- *(.boot_start)
-
- . = 0x00b;
- /*
- * Maybe later on occupied by a "BIOS parameter block". So,
- * keep it free from code.
- * - BytesPerSector dw@0x000B
- * - SectorsPerCluster db@0x000D
- * - ReservedSectors dw@0x000E
- * - FatCopies db@0x0010
- * - RootDirEntries dw@0x0011
- * - NumSectors dw@0x0013
- * - MediaType db@0x0015
- * - SectorsPerFAT dw@0x0016
- * - SectorsPerTrack dw@0x0018
- * - NumberOfHeads dw@0x001A
- * - HiddenSectors dd@0x001C
- * - SectorsBig dd@0x0020
- */
- LONG(0);
-
- . = 0x024;
- *(.boot_code)
- *(.boot_data)
-
- /*
- * embed one "Disk Address Packet Structure" into the boot sector
- * This DAPS points to the 'indirect' sector to give the boot code
- * an idea what and where to load. Its content must be adapted
- * to the system it should run on, so, this structure must be
- * located at a well known offset.
- */
- . = PATCH_AREA;
- indirect_sector_lba = .;
- SHORT(0x0010); /* size of this structure */
- SHORT(0x0001); /* one sector */
- SHORT(indirect_area); /* where to store: offset */
- SHORT(0x0000); /* where to store: segment */
- /* the following values are filled by the installer */
- LONG(0x00000000); /* LBA start lower */
- LONG(0x00000000); /* LBA start upper */
-
- /* boot disk number used by upper layers */
- . = PATCH_AREA + PATCH_AREA_BOOT_DEV;
- boot_disk = .;
- BYTE(0x00); /* boot disk number (provided by the BIOS)
-
- /* information about the persistent environment storage */
- . = PATCH_AREA + PATCH_AREA_PERS_START;
- pers_env_storage = .;
- LONG(0x00000000); /* LBA start lower */
- LONG(0x00000000); /* LBA start upper */
-
- . = PATCH_AREA + PATCH_AREA_PERS_SIZE;
- pers_env_size = .;
- SHORT(PATCH_AREA_PERS_SIZE_UNUSED); /* size of this area in sectors */
-
- . = PATCH_AREA + PATCH_AREA_PERS_DRIVE;
- pers_env_drive = .;
- BYTE(0x00); /* used drive */
-
- /* partition table area (fixed location) */
- . = OFFSET_OF_PARTITION_TABLE;
- /* create an empty one */
- LONG(0x00000000); LONG(0x00000000); LONG(0x00000000); LONG(0x00000000);
- LONG(0x00000000); LONG(0x00000000); LONG(0x00000000); LONG(0x00000000);
- LONG(0x00000000); LONG(0x00000000); LONG(0x00000000); LONG(0x00000000);
- LONG(0x00000000); LONG(0x00000000); LONG(0x00000000); LONG(0x00000000);
-
- /* boot sector signature */
- . = OFFSET_OF_SIGNATURE;
- BYTE(0x55);
- BYTE(0xAA);
- /* end of the first sector */
-
- /*
- * The indirect sector starts here
- */
- . = SECTOR_SIZE;
- BYTE(MARK_DAPS_INVALID); /* mark the first entry invalid */
- BYTE(0x00);
- . = SECTOR_SIZE + 496;
- BYTE(MARK_DAPS_INVALID); /* mark the last entry invalid */
- BYTE(0x00);
- . = SECTOR_SIZE + 508;
- LONG(0x00000000); /* LBA start upper */
- } > mbr
-
- /* some real mode bootstrapping */
- .bootstrapping : AT ( LOADADDR(.bootsector) + SIZEOF(.bootsector) ) {
- *(.boot.head)
- *(.boot.text*)
- *(.boot.rodata*)
- *(.boot.data*)
- . = ALIGN(4);
- RO_DATA_SECTION
- } > barebox
-#endif
-
- /* the main barebox part (32 bit) */
- .text : AT ( LOADADDR(.bootstrapping) + SIZEOF(.bootstrapping) ) {
- /* do not align here! It may fails with the LOADADDR! */
- _stext = .;
- _text = .;
- *(.text_entry*)
- __bare_init_start = .;
- *(.text_bare_init*)
- __bare_init_end = .;
- *(.text*)
- . = ALIGN(4);
- *(.rodata*)
- . = ALIGN(4);
- _etext = .; /* End of text and rodata section */
- } > barebox
- BAREBOX_BARE_INIT_SIZE
-
- _sdata = .;
- .data : AT ( LOADADDR(.text) + SIZEOF(.text) ) {
- *(.data*)
- . = ALIGN(4);
- } > barebox
-
- .got : AT ( LOADADDR(.data) + SIZEOF (.data) ) {
- *(.got*)
- . = ALIGN(4);
- } > barebox
-
- _edata = .;
- .bss : {
- __bss_start = .;
- *(.bss*);
- *( COMMON )
- __bss_stop = .;
- _end = .;
- } > barebox
-}
diff --git a/arch/x86/lib/gdt.c b/arch/x86/lib/gdt.c
deleted file mode 100644
index 4cd1622..0000000
--- a/arch/x86/lib/gdt.c
+++ /dev/null
@@ -1,38 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-or-later
-// SPDX-FileCopyrightText: 2009 Juergen Beisert, Pengutronix
-
-/**
- * @file
- * @brief Definition of the Global Descriptor Table
- */
-
-#include <types.h>
-#include <asm/modes.h>
-#include <asm/segment.h>
-
-/**
- * The 'Global Descriptor Table' used in barebox
- *
- * Note: This table must reachable by real and flat mode code
- */
-uint64_t gdt[] __attribute__((aligned(16))) __bootdata = {
- /* CS: code, read/execute, 4 GB, base 0 */
- [GDT_ENTRY_BOOT_CS] = GDT_ENTRY(0xc09b, 0, 0xfffff),
- /* DS: data, read/write, 4 GB, base 0 */
- [GDT_ENTRY_BOOT_DS] = GDT_ENTRY(0xc093, 0, 0xfffff),
- /* CS: for real mode calls */
- [GDT_ENTRY_REAL_CS] = GDT_ENTRY(0x009E, 0, 0x0ffff),
- /* DS: for real mode calls */
- [GDT_ENTRY_REAL_DS] = GDT_ENTRY(0x0092, 0, 0x0ffff),
- /* TSS: 32-bit tss, 104 bytes, base 4096 */
- /* We only have a TSS here to keep Intel VT happy;
- we don't actually use it for anything. */
- [GDT_ENTRY_BOOT_TSS] = GDT_ENTRY(0x0089, 4096, 103),
-};
-
-/**
- * Size of the GDT must be known to load it
- *
- * Note: This varibale must reachable by real and flat mode code
- */
-unsigned gdt_size __bootdata = sizeof(gdt);
diff --git a/arch/x86/lib/linux_start.S b/arch/x86/lib/linux_start.S
deleted file mode 100644
index 07be37f..0000000
--- a/arch/x86/lib/linux_start.S
+++ /dev/null
@@ -1,55 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-or-later */
-/* SPDX-FileCopyrightText: 2009 Juergen Beisert, Pengutronix */
-/* SPDX-FileCopyrightText: 1999-2008 Free Software Foundation, Inc. */
-
-/* Mostly stolen from the GRUB2 project */
-
-/**
- * @file
- * @brief Start the Linux real mode setup code
- *
- * Note: These functions are running in flat and real mode. Due to some
- * other restrictions these routines must running from an address
- * space below 0x10000
- */
-
-/*
- * void bios_start_linux(unsigned segment)
- *
- */
-
- .section .boot.text.bios_start_linux, "ax"
- .code32
- .globl bios_start_linux
- .type bios_start_linux, @function
-
- .extern prot_to_real
-
-bios_start_linux:
- /* 'prot_to_real' eats our eax content */
- movl %eax, %ebx
- addl $0x20, %eax
- movw %ax, setup_seg
-
- call prot_to_real
-
- .code16
-
- cli
- /* all segment registers are using the same segment */
- movw %bx, %ss
- movw %bx, %ds
- movw %bx, %es
- movw %bx, %fs
- movw %bx, %gs
-
- /* stack for the setup code (end of heap) */
- movw $0x9000, %sp
-
- /* do an 'ljmp' and never return */
- .byte 0xea
- .word 0
-setup_seg:
- .word 0
-
- .code32
diff --git a/arch/x86/lib/memory.c b/arch/x86/lib/memory.c
deleted file mode 100644
index 64fbbb9..0000000
--- a/arch/x86/lib/memory.c
+++ /dev/null
@@ -1,49 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-or-later
-// SPDX-FileCopyrightText: 2009 Juergen Beisert, Pengutronix
-
-/* This code was inspired by the GRUB2 project. */
-
-/**
- * @file
- * @brief Memory management
- */
-
-#include <common.h>
-#include <init.h>
-#include <stdio.h>
-#include <memory.h>
-#include <asm/syslib.h>
-#include <asm-generic/memory_layout.h>
-
-/**
- * Handling of free memory
- *
- * Topics:
- * - areas used by BIOS code
- * - The 0xa0000... 0xfffff hole
- * - memory above 0x100000
- */
-
-int x86_start_barebox(void)
-{
-#ifdef CONFIG_MEMORY_LAYOUT_DEFAULT
- unsigned long memory_size;
-
- memory_size = bios_get_memsize();
- memory_size <<= 10; /* BIOS reports in kiB */
-
- /*
- * We do not want to conflict with the kernel. So, we keep the
- * area from 0x100000 ... 0xFFFFFF free from usage
- */
- if (memory_size >= (15 * 1024 * 1024 + MALLOC_SIZE))
- mem_malloc_init((void*)(16 * 1024 * 1024),
- (void*)(16 * 1024 * 1024 + MALLOC_SIZE - 1));
- else
- return -1;
-#else
- mem_malloc_init((void *)MALLOC_BASE,
- (void *)(MALLOC_BASE + MALLOC_SIZE - 1));
-#endif
- start_barebox();
-}
diff --git a/arch/x86/lib/setjmp_32.S b/arch/x86/lib/setjmp_32.S
new file mode 100644
index 0000000..38dcb68
--- /dev/null
+++ b/arch/x86/lib/setjmp_32.S
@@ -0,0 +1,60 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Written by H. Peter Anvin <hpa@zytor.com>
+ * Brought in from Linux v4.4 and modified for U-Boot
+ * From Linux arch/um/sys-i386/setjmp.S
+ */
+
+#define _REGPARM
+
+#include <linux/linkage.h>
+
+.text
+.align 8
+
+/*
+ * The jmp_buf is assumed to contain the following, in order:
+ * %ebx
+ * %esp
+ * %ebp
+ * %esi
+ * %edi
+ * <return address>
+ */
+
+ENTRY(setjmp)
+
+ movl %eax, %edx
+ popl %ecx /* Return address, and adjust the stack */
+ xorl %eax, %eax /* Return value */
+ movl %ebx, (%edx)
+ movl %esp, 4(%edx) /* Post-return %esp! */
+ pushl %ecx /* Make the call/return stack happy */
+ movl %ebp, 8(%edx)
+ movl %esi, 12(%edx)
+ movl %edi, 16(%edx)
+ movl %ecx, 20(%edx) /* Return address */
+ ret
+
+ENDPROC(setjmp)
+
+ENTRY(longjmp)
+
+ xchgl %eax, %edx
+ movl (%edx), %ebx
+ movl 4(%edx), %esp
+ movl 8(%edx), %ebp
+ movl 12(%edx), %esi
+ movl 16(%edx), %edi
+ jmp *20(%edx)
+
+ENDPROC(longjmp)
+
+ENTRY(initjmp)
+
+ movl %edx, 20(%eax) /* Return address */
+ movl %ecx, 4(%eax) /* Post-return %esp! */
+ xorl %eax, %eax /* Return value */
+ ret
+
+ENDPROC(initjmp)
diff --git a/arch/x86/lib/setjmp_64.S b/arch/x86/lib/setjmp_64.S
new file mode 100644
index 0000000..28ea576
--- /dev/null
+++ b/arch/x86/lib/setjmp_64.S
@@ -0,0 +1,60 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2018 Intel Corporation
+ *
+ * See arch/x86/include/asm/setjmp.h for jmp_buf format
+ */
+
+#include <linux/linkage.h>
+
+.text
+.align 8
+
+ENTRY(setjmp)
+
+ pop %rcx
+ movq %rcx, (%rdi) /* Return address */
+ movq %rsp, 8(%rdi)
+ movq %rbp, 16(%rdi)
+ movq %rbx, 24(%rdi)
+ movq %r12, 32(%rdi)
+ movq %r13, 40(%rdi)
+ movq %r14, 48(%rdi)
+ movq %r15, 56(%rdi)
+ xorq %rax, %rax /* Direct invocation returns 0 */
+ jmpq *%rcx
+
+ENDPROC(setjmp)
+
+.align 8
+
+ENTRY(longjmp)
+
+ movq (%rdi), %rcx /* Return address */
+ movq 8(%rdi), %rsp
+ movq 16(%rdi), %rbp
+ movq 24(%rdi), %rbx
+ movq 32(%rdi), %r12
+ movq 40(%rdi), %r13
+ movq 48(%rdi), %r14
+ movq 56(%rdi), %r15
+
+ movq %rsi, %rax /* Value to be returned by setjmp() */
+ testq %rax, %rax /* cannot be 0 in this case */
+ jnz 1f
+ incq %rax /* Return 1 instead */
+1:
+ jmpq *%rcx
+
+ENDPROC(longjmp)
+
+.align 8
+
+ENTRY(initjmp)
+
+ movq %rsi, (%rdi) /* Return address */
+ movq %rdx, 8(%rdi) /* Stack top */
+ xorq %rax, %rax
+ ret
+
+ENDPROC(initjmp)
diff --git a/arch/x86/mach-efi/elf_x86_64_efi.lds.S b/arch/x86/mach-efi/elf_x86_64_efi.lds.S
index ed79118..ab4a9e8 100644
--- a/arch/x86/mach-efi/elf_x86_64_efi.lds.S
+++ b/arch/x86/mach-efi/elf_x86_64_efi.lds.S
@@ -42,6 +42,7 @@ SECTIONS
*(.got.plt)
*(.got)
*(.data*)
+ __bss_start = .;
*(.sdata)
/* the EFI loader doesn't seem to like a .bss section, so we stick
* it all into .data: */
@@ -51,7 +52,9 @@ SECTIONS
*(.bss)
*(COMMON)
*(.rel.local)
+ __bss_stop = .;
}
+ _edata = .;
. = ALIGN(4096);
.dynamic : { *(.dynamic) }
diff --git a/arch/x86/mach-i386/Kconfig b/arch/x86/mach-i386/Kconfig
deleted file mode 100644
index 2d0bfb4..0000000
--- a/arch/x86/mach-i386/Kconfig
+++ /dev/null
@@ -1,13 +0,0 @@
-
-menu "Board specific settings"
-
-if X86_BOOTLOADER
-
-config X86_GENERIC_HAS_VIDEO
- bool "video support"
- help
- Say Y here if the target supports a video output
-
-endif
-
-endmenu
diff --git a/arch/x86/mach-i386/Makefile b/arch/x86/mach-i386/Makefile
deleted file mode 100644
index 225b481..0000000
--- a/arch/x86/mach-i386/Makefile
+++ /dev/null
@@ -1,2 +0,0 @@
-# reference clocksource
-obj-y += pit_timer.o
diff --git a/arch/x86/mach-i386/include/mach/barebox.lds.h b/arch/x86/mach-i386/include/mach/barebox.lds.h
deleted file mode 100644
index 50f1734..0000000
--- a/arch/x86/mach-i386/include/mach/barebox.lds.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-or-later */
-/* SPDX-FileCopyrightText: 2009 Juergen Beisert, Pengutronix */
-
-/**
- * @file
- * @brief Adapt linker script content in accordance to Kconfig settings
- */
-
-/**
- * Area in the MBR of the barebox basic boot code. This offset must be in
- * accordance to the 'indirect_sector_lba' label.
- */
-#define PATCH_AREA 400
-
-/**
- * Offset where to store the boot drive number (BIOS number, 1 byte)
- */
-#define PATCH_AREA_BOOT_DEV 16
-
-/**
- * Offset where to store information about the persistent environment storage
- * It points to an LBA number (8 bytes) and defines the first sector of this
- * storage on disk.
- */
-#define PATCH_AREA_PERS_START 20
-
-/**
- * Offset where to store information about the persistent environment storage
- * It points to a short number (2 bytes) and defines the sector count of this
- * storage on disk.
- */
-#define PATCH_AREA_PERS_SIZE 28
-
-/**
- * Offset where to store information about the persistent environment storage
- * drive number (BIOS number, 1 byte)
- */
-#define PATCH_AREA_PERS_DRIVE 30
-
-/**
- * Mark the persistent environment as not used
- */
-#define PATCH_AREA_PERS_SIZE_UNUSED 0x000
-
-/**
- * Mark a DAPS as unused/invalid
- */
-#define MARK_DAPS_INVALID 0x0000
-
-/**
- * Offset of the partition table in an MBR
- */
-#define OFFSET_OF_PARTITION_TABLE 446
-
-/**
- * Offset of the signature in an MBR
- */
-#define OFFSET_OF_SIGNATURE 510
-
-/**
- * Area where to store indirect sector to loop through. Keep this value
- * in accordance to the 'indirect_area' label. Note: .
- *
- * @attention These addresses are real mode ones (seg:offset)
- */
-#define INDIRECT_AREA 0x7A00
-#define INDIRECT_SEGMENT 0x0000
-
-/**
- * Area where to load sectors from disk to. They should start after the
- * MBR area and must be in accordance to the offset of the '.bootstrapping'
- * section in the linker file.
- *
- * @attention The address must be a multiple of 512.
- */
-#define LOAD_AREA 0x7e00
-#define LOAD_SEGMENT 0x0000
-
-/**
- * Size of one sector.
- */
-#define SECTOR_SIZE 512
diff --git a/arch/x86/mach-i386/pit_timer.c b/arch/x86/mach-i386/pit_timer.c
deleted file mode 100644
index d2da3b6..0000000
--- a/arch/x86/mach-i386/pit_timer.c
+++ /dev/null
@@ -1,53 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-or-later
-// SPDX-FileCopyrightText: 2009 Juergen Beisert, Pengutronix */
-
-/**
- * @file
- * @brief Clocksource based on the 'Programmable Interval Timer' PIT (8253)
- *
- * This timer should be available on almost all PCs. It also should be run
- * at a fixed frequency (1193181.8181 Hz) and not modified to use another
- * reload value than 0xFFFF. So, it always counts from 0xffff down to 0.
- *
- * @note: We can't reprogram the PIT, it will be still used by the BIOS. This
- * clocksource driver does not touch any PIT settings.
- */
-
-#include <init.h>
-#include <clock.h>
-#include <io.h>
-
-/** base address of the PIT in a standard PC */
-#define PIT 0x40
-
-static uint64_t pit_clocksource_read(void)
-{
- uint16_t val1, val2;
-
- outb(0x00, PIT + 3); /* latch counter 0 */
- outb(0x00, 0x80);
-
- val1 = inb(PIT);
- outb(0x00, 0x80);
-
- val2 = inb(PIT);
- val2 <<= 8;
-
- /* note: its a down counter */
- return 0xFFFFU - (val1 | val2);
-}
-
-static struct clocksource cs = {
- .read = pit_clocksource_read,
- .mask = CLOCKSOURCE_MASK(16),
- .shift = 10,
-};
-
-static int clocksource_init (void)
-{
- cs.mult = clocksource_hz2mult(1193182, cs.shift);
-
- return init_clock(&cs);
-}
-
-core_initcall(clocksource_init);