forked from Minki/linux
f1c6872e49
* Allow a Linux guest to boot as initial domain and as normal guests on Xen on ARM (specifically ARMv7 with virtualized extensions). PV console, block and network frontend/backends are working. Bug-fixes: * Fix compile linux-next fallout. * Fix PVHVM bootup crashing. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iQEcBAABAgAGBQJQbJELAAoJEFjIrFwIi8fJSI4H/32qrQKyF5IIkFKHTN9FYDC1 OxEGc4y47DIQpGUd/PgZ/i6h9Iyhj+I6pb4lCevykwgd0j83noepluZlCIcJnTfL HVXNiRIQKqFhqKdjTANxVM4APup+7Lqrvqj6OZfUuoxaZ3tSTLhabJ/7UXf2+9xy g2RfZtbSdQ1sukQ/A2MeGQNT79rh7v7PrYQUYSrqytjSjSLPTqRf75HWQ+eapIAH X3aVz8Tn6nTixZWvZOK7rAaD4awsFxGP6E46oFekB02f4x9nWHJiCZiXwb35lORb tz9F9td99f6N4fPJ9LgcYTaCPwzVnceZKqE9hGfip4uT+0WrEqDxq8QmBqI5YtI= =gxJD -----END PGP SIGNATURE----- Merge tag 'stable/for-linus-3.7-arm-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen Pull ADM Xen support from Konrad Rzeszutek Wilk: Features: * Allow a Linux guest to boot as initial domain and as normal guests on Xen on ARM (specifically ARMv7 with virtualized extensions). PV console, block and network frontend/backends are working. Bug-fixes: * Fix compile linux-next fallout. * Fix PVHVM bootup crashing. The Xen-unstable hypervisor (so will be 4.3 in a ~6 months), supports ARMv7 platforms. The goal in implementing this architecture is to exploit the hardware as much as possible. That means use as little as possible of PV operations (so no PV MMU) - and use existing PV drivers for I/Os (network, block, console, etc). This is similar to how PVHVM guests operate in X86 platform nowadays - except that on ARM there is no need for QEMU. The end result is that we share a lot of the generic Xen drivers and infrastructure. Details on how to compile/boot/etc are available at this Wiki: http://wiki.xen.org/wiki/Xen_ARMv7_with_Virtualization_Extensions and this blog has links to a technical discussion/presentations on the overall architecture: http://blog.xen.org/index.php/2012/09/21/xensummit-sessions-new-pvh-virtualisation-mode-for-arm-cortex-a15arm-servers-and-x86/ * tag 'stable/for-linus-3.7-arm-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen: (21 commits) xen/xen_initial_domain: check that xen_start_info is initialized xen: mark xen_init_IRQ __init xen/Makefile: fix dom-y build arm: introduce a DTS for Xen unprivileged virtual machines MAINTAINERS: add myself as Xen ARM maintainer xen/arm: compile netback xen/arm: compile blkfront and blkback xen/arm: implement alloc/free_xenballooned_pages with alloc_pages/kfree xen/arm: receive Xen events on ARM xen/arm: initialize grant_table on ARM xen/arm: get privilege status xen/arm: introduce CONFIG_XEN on ARM xen: do not compile manage, balloon, pci, acpi, pcpu and cpu_hotplug on ARM xen/arm: Introduce xen_ulong_t for unsigned long xen/arm: Xen detection and shared_info page mapping docs: Xen ARM DT bindings xen/arm: empty implementation of grant_table arch specific functions xen/arm: sync_bitops xen/arm: page.h definitions xen/arm: hypercalls ...
318 lines
11 KiB
Makefile
318 lines
11 KiB
Makefile
#
|
|
# arch/arm/Makefile
|
|
#
|
|
# This file is included by the global makefile so that you can add your own
|
|
# architecture-specific flags and dependencies.
|
|
#
|
|
# This file is subject to the terms and conditions of the GNU General Public
|
|
# License. See the file "COPYING" in the main directory of this archive
|
|
# for more details.
|
|
#
|
|
# Copyright (C) 1995-2001 by Russell King
|
|
|
|
# Ensure linker flags are correct
|
|
LDFLAGS :=
|
|
|
|
LDFLAGS_vmlinux :=-p --no-undefined -X
|
|
ifeq ($(CONFIG_CPU_ENDIAN_BE8),y)
|
|
LDFLAGS_vmlinux += --be8
|
|
endif
|
|
|
|
OBJCOPYFLAGS :=-O binary -R .comment -S
|
|
GZFLAGS :=-9
|
|
#KBUILD_CFLAGS +=-pipe
|
|
# Explicitly specifiy 32-bit ARM ISA since toolchain default can be -mthumb:
|
|
KBUILD_CFLAGS +=$(call cc-option,-marm,)
|
|
|
|
# Never generate .eh_frame
|
|
KBUILD_CFLAGS += $(call cc-option,-fno-dwarf2-cfi-asm)
|
|
|
|
# Do not use arch/arm/defconfig - it's always outdated.
|
|
# Select a platform tht is kept up-to-date
|
|
KBUILD_DEFCONFIG := versatile_defconfig
|
|
|
|
# defines filename extension depending memory management type.
|
|
ifeq ($(CONFIG_MMU),)
|
|
MMUEXT := -nommu
|
|
endif
|
|
|
|
ifeq ($(CONFIG_FRAME_POINTER),y)
|
|
KBUILD_CFLAGS +=-fno-omit-frame-pointer -mapcs -mno-sched-prolog
|
|
endif
|
|
|
|
ifeq ($(CONFIG_CC_STACKPROTECTOR),y)
|
|
KBUILD_CFLAGS +=-fstack-protector
|
|
endif
|
|
|
|
ifeq ($(CONFIG_CPU_BIG_ENDIAN),y)
|
|
KBUILD_CPPFLAGS += -mbig-endian
|
|
AS += -EB
|
|
LD += -EB
|
|
else
|
|
KBUILD_CPPFLAGS += -mlittle-endian
|
|
AS += -EL
|
|
LD += -EL
|
|
endif
|
|
|
|
comma = ,
|
|
|
|
# This selects which instruction set is used.
|
|
# Note that GCC does not numerically define an architecture version
|
|
# macro, but instead defines a whole series of macros which makes
|
|
# testing for a specific architecture or later rather impossible.
|
|
arch-$(CONFIG_CPU_32v7) :=-D__LINUX_ARM_ARCH__=7 $(call cc-option,-march=armv7-a,-march=armv5t -Wa$(comma)-march=armv7-a)
|
|
arch-$(CONFIG_CPU_32v6) :=-D__LINUX_ARM_ARCH__=6 $(call cc-option,-march=armv6,-march=armv5t -Wa$(comma)-march=armv6)
|
|
# Only override the compiler option if ARMv6. The ARMv6K extensions are
|
|
# always available in ARMv7
|
|
ifeq ($(CONFIG_CPU_32v6),y)
|
|
arch-$(CONFIG_CPU_32v6K) :=-D__LINUX_ARM_ARCH__=6 $(call cc-option,-march=armv6k,-march=armv5t -Wa$(comma)-march=armv6k)
|
|
endif
|
|
arch-$(CONFIG_CPU_32v5) :=-D__LINUX_ARM_ARCH__=5 $(call cc-option,-march=armv5te,-march=armv4t)
|
|
arch-$(CONFIG_CPU_32v4T) :=-D__LINUX_ARM_ARCH__=4 -march=armv4t
|
|
arch-$(CONFIG_CPU_32v4) :=-D__LINUX_ARM_ARCH__=4 -march=armv4
|
|
arch-$(CONFIG_CPU_32v3) :=-D__LINUX_ARM_ARCH__=3 -march=armv3
|
|
|
|
# This selects how we optimise for the processor.
|
|
tune-$(CONFIG_CPU_ARM7TDMI) :=-mtune=arm7tdmi
|
|
tune-$(CONFIG_CPU_ARM720T) :=-mtune=arm7tdmi
|
|
tune-$(CONFIG_CPU_ARM740T) :=-mtune=arm7tdmi
|
|
tune-$(CONFIG_CPU_ARM9TDMI) :=-mtune=arm9tdmi
|
|
tune-$(CONFIG_CPU_ARM940T) :=-mtune=arm9tdmi
|
|
tune-$(CONFIG_CPU_ARM946E) :=$(call cc-option,-mtune=arm9e,-mtune=arm9tdmi)
|
|
tune-$(CONFIG_CPU_ARM920T) :=-mtune=arm9tdmi
|
|
tune-$(CONFIG_CPU_ARM922T) :=-mtune=arm9tdmi
|
|
tune-$(CONFIG_CPU_ARM925T) :=-mtune=arm9tdmi
|
|
tune-$(CONFIG_CPU_ARM926T) :=-mtune=arm9tdmi
|
|
tune-$(CONFIG_CPU_FA526) :=-mtune=arm9tdmi
|
|
tune-$(CONFIG_CPU_SA110) :=-mtune=strongarm110
|
|
tune-$(CONFIG_CPU_SA1100) :=-mtune=strongarm1100
|
|
tune-$(CONFIG_CPU_XSCALE) :=$(call cc-option,-mtune=xscale,-mtune=strongarm110) -Wa,-mcpu=xscale
|
|
tune-$(CONFIG_CPU_XSC3) :=$(call cc-option,-mtune=xscale,-mtune=strongarm110) -Wa,-mcpu=xscale
|
|
tune-$(CONFIG_CPU_FEROCEON) :=$(call cc-option,-mtune=marvell-f,-mtune=xscale)
|
|
tune-$(CONFIG_CPU_V6) :=$(call cc-option,-mtune=arm1136j-s,-mtune=strongarm)
|
|
tune-$(CONFIG_CPU_V6K) :=$(call cc-option,-mtune=arm1136j-s,-mtune=strongarm)
|
|
|
|
ifeq ($(CONFIG_AEABI),y)
|
|
CFLAGS_ABI :=-mabi=aapcs-linux -mno-thumb-interwork
|
|
else
|
|
CFLAGS_ABI :=$(call cc-option,-mapcs-32,-mabi=apcs-gnu) $(call cc-option,-mno-thumb-interwork,)
|
|
endif
|
|
|
|
ifeq ($(CONFIG_ARM_UNWIND),y)
|
|
CFLAGS_ABI +=-funwind-tables
|
|
endif
|
|
|
|
ifeq ($(CONFIG_THUMB2_KERNEL),y)
|
|
AFLAGS_AUTOIT :=$(call as-option,-Wa$(comma)-mimplicit-it=always,-Wa$(comma)-mauto-it)
|
|
AFLAGS_NOWARN :=$(call as-option,-Wa$(comma)-mno-warn-deprecated,-Wa$(comma)-W)
|
|
CFLAGS_THUMB2 :=-mthumb $(AFLAGS_AUTOIT) $(AFLAGS_NOWARN)
|
|
AFLAGS_THUMB2 :=$(CFLAGS_THUMB2) -Wa$(comma)-mthumb
|
|
# Work around buggy relocation from gas if requested:
|
|
ifeq ($(CONFIG_THUMB2_AVOID_R_ARM_THM_JUMP11),y)
|
|
CFLAGS_MODULE +=-fno-optimize-sibling-calls
|
|
endif
|
|
endif
|
|
|
|
# Need -Uarm for gcc < 3.x
|
|
KBUILD_CFLAGS +=$(CFLAGS_ABI) $(CFLAGS_THUMB2) $(arch-y) $(tune-y) $(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,)) -msoft-float -Uarm
|
|
KBUILD_AFLAGS +=$(CFLAGS_ABI) $(AFLAGS_THUMB2) $(arch-y) $(tune-y) -include asm/unified.h -msoft-float
|
|
|
|
CHECKFLAGS += -D__arm__
|
|
|
|
#Default value
|
|
head-y := arch/arm/kernel/head$(MMUEXT).o
|
|
textofs-y := 0x00008000
|
|
textofs-$(CONFIG_ARCH_CLPS711X) := 0x00028000
|
|
# We don't want the htc bootloader to corrupt kernel during resume
|
|
textofs-$(CONFIG_PM_H1940) := 0x00108000
|
|
# SA1111 DMA bug: we don't want the kernel to live in precious DMA-able memory
|
|
ifeq ($(CONFIG_ARCH_SA1100),y)
|
|
textofs-$(CONFIG_SA1111) := 0x00208000
|
|
endif
|
|
textofs-$(CONFIG_ARCH_MSM7X30) := 0x00208000
|
|
textofs-$(CONFIG_ARCH_MSM8X60) := 0x00208000
|
|
textofs-$(CONFIG_ARCH_MSM8960) := 0x00208000
|
|
|
|
# Machine directory name. This list is sorted alphanumerically
|
|
# by CONFIG_* macro name.
|
|
machine-$(CONFIG_ARCH_AT91) += at91
|
|
machine-$(CONFIG_ARCH_BCM2835) += bcm2835
|
|
machine-$(CONFIG_ARCH_CLPS711X) += clps711x
|
|
machine-$(CONFIG_ARCH_CNS3XXX) += cns3xxx
|
|
machine-$(CONFIG_ARCH_DAVINCI) += davinci
|
|
machine-$(CONFIG_ARCH_DOVE) += dove
|
|
machine-$(CONFIG_ARCH_EBSA110) += ebsa110
|
|
machine-$(CONFIG_ARCH_EP93XX) += ep93xx
|
|
machine-$(CONFIG_ARCH_GEMINI) += gemini
|
|
machine-$(CONFIG_ARCH_H720X) += h720x
|
|
machine-$(CONFIG_ARCH_HIGHBANK) += highbank
|
|
machine-$(CONFIG_ARCH_INTEGRATOR) += integrator
|
|
machine-$(CONFIG_ARCH_IOP13XX) += iop13xx
|
|
machine-$(CONFIG_ARCH_IOP32X) += iop32x
|
|
machine-$(CONFIG_ARCH_IOP33X) += iop33x
|
|
machine-$(CONFIG_ARCH_IXP4XX) += ixp4xx
|
|
machine-$(CONFIG_ARCH_KIRKWOOD) += kirkwood
|
|
machine-$(CONFIG_ARCH_KS8695) += ks8695
|
|
machine-$(CONFIG_ARCH_LPC32XX) += lpc32xx
|
|
machine-$(CONFIG_ARCH_MMP) += mmp
|
|
machine-$(CONFIG_ARCH_MSM) += msm
|
|
machine-$(CONFIG_ARCH_MV78XX0) += mv78xx0
|
|
machine-$(CONFIG_ARCH_MXC) += imx
|
|
machine-$(CONFIG_ARCH_MXS) += mxs
|
|
machine-$(CONFIG_ARCH_MVEBU) += mvebu
|
|
machine-$(CONFIG_ARCH_NETX) += netx
|
|
machine-$(CONFIG_ARCH_NOMADIK) += nomadik
|
|
machine-$(CONFIG_ARCH_OMAP1) += omap1
|
|
machine-$(CONFIG_ARCH_OMAP2PLUS) += omap2
|
|
machine-$(CONFIG_ARCH_ORION5X) += orion5x
|
|
machine-$(CONFIG_ARCH_PICOXCELL) += picoxcell
|
|
machine-$(CONFIG_ARCH_PRIMA2) += prima2
|
|
machine-$(CONFIG_ARCH_PXA) += pxa
|
|
machine-$(CONFIG_ARCH_REALVIEW) += realview
|
|
machine-$(CONFIG_ARCH_RPC) += rpc
|
|
machine-$(CONFIG_ARCH_S3C24XX) += s3c24xx s3c2412 s3c2440
|
|
machine-$(CONFIG_ARCH_S3C64XX) += s3c64xx
|
|
machine-$(CONFIG_ARCH_S5P64X0) += s5p64x0
|
|
machine-$(CONFIG_ARCH_S5PC100) += s5pc100
|
|
machine-$(CONFIG_ARCH_S5PV210) += s5pv210
|
|
machine-$(CONFIG_ARCH_EXYNOS) += exynos
|
|
machine-$(CONFIG_ARCH_SA1100) += sa1100
|
|
machine-$(CONFIG_ARCH_SHARK) += shark
|
|
machine-$(CONFIG_ARCH_SHMOBILE) += shmobile
|
|
machine-$(CONFIG_ARCH_TEGRA) += tegra
|
|
machine-$(CONFIG_ARCH_U300) += u300
|
|
machine-$(CONFIG_ARCH_U8500) += ux500
|
|
machine-$(CONFIG_ARCH_VERSATILE) += versatile
|
|
machine-$(CONFIG_ARCH_VEXPRESS) += vexpress
|
|
machine-$(CONFIG_ARCH_VT8500) += vt8500
|
|
machine-$(CONFIG_ARCH_W90X900) += w90x900
|
|
machine-$(CONFIG_FOOTBRIDGE) += footbridge
|
|
machine-$(CONFIG_ARCH_SOCFPGA) += socfpga
|
|
machine-$(CONFIG_ARCH_SPEAR13XX) += spear13xx
|
|
machine-$(CONFIG_ARCH_SPEAR3XX) += spear3xx
|
|
machine-$(CONFIG_MACH_SPEAR600) += spear6xx
|
|
machine-$(CONFIG_ARCH_ZYNQ) += zynq
|
|
|
|
# Platform directory name. This list is sorted alphanumerically
|
|
# by CONFIG_* macro name.
|
|
plat-$(CONFIG_ARCH_MXC) += mxc
|
|
plat-$(CONFIG_ARCH_OMAP) += omap
|
|
plat-$(CONFIG_ARCH_S3C64XX) += samsung
|
|
plat-$(CONFIG_ARCH_ZYNQ) += versatile
|
|
plat-$(CONFIG_PLAT_IOP) += iop
|
|
plat-$(CONFIG_PLAT_NOMADIK) += nomadik
|
|
plat-$(CONFIG_PLAT_ORION) += orion
|
|
plat-$(CONFIG_PLAT_PXA) += pxa
|
|
plat-$(CONFIG_PLAT_S3C24XX) += s3c24xx samsung
|
|
plat-$(CONFIG_PLAT_S5P) += samsung
|
|
plat-$(CONFIG_PLAT_SPEAR) += spear
|
|
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)
|
|
|
|
# The first directory contains additional information for the boot setup code
|
|
ifneq ($(machine-y),)
|
|
MACHINE := arch/arm/mach-$(word 1,$(machine-y))/
|
|
else
|
|
MACHINE :=
|
|
endif
|
|
ifeq ($(CONFIG_ARCH_MULTIPLATFORM),y)
|
|
MACHINE :=
|
|
endif
|
|
|
|
machdirs := $(patsubst %,arch/arm/mach-%/,$(machine-y))
|
|
platdirs := $(patsubst %,arch/arm/plat-%/,$(plat-y))
|
|
|
|
ifneq ($(CONFIG_ARCH_MULTIPLATFORM),y)
|
|
ifeq ($(KBUILD_SRC),)
|
|
KBUILD_CPPFLAGS += $(patsubst %,-I%include,$(machdirs) $(platdirs))
|
|
else
|
|
KBUILD_CPPFLAGS += $(patsubst %,-I$(srctree)/%include,$(machdirs) $(platdirs))
|
|
endif
|
|
endif
|
|
|
|
export TEXT_OFFSET GZFLAGS MMUEXT
|
|
|
|
# Do we have FASTFPE?
|
|
FASTFPE :=arch/arm/fastfpe
|
|
ifeq ($(FASTFPE),$(wildcard $(FASTFPE)))
|
|
FASTFPE_OBJ :=$(FASTFPE)/
|
|
endif
|
|
|
|
core-$(CONFIG_FPE_NWFPE) += arch/arm/nwfpe/
|
|
core-$(CONFIG_FPE_FASTFPE) += $(FASTFPE_OBJ)
|
|
core-$(CONFIG_VFP) += arch/arm/vfp/
|
|
core-$(CONFIG_XEN) += arch/arm/xen/
|
|
|
|
# If we have a machine-specific directory, then include it in the build.
|
|
core-y += arch/arm/kernel/ arch/arm/mm/ arch/arm/common/
|
|
core-y += arch/arm/net/
|
|
core-y += arch/arm/crypto/
|
|
core-y += $(machdirs) $(platdirs)
|
|
|
|
drivers-$(CONFIG_OPROFILE) += arch/arm/oprofile/
|
|
|
|
libs-y := arch/arm/lib/ $(libs-y)
|
|
|
|
# Default target when executing plain make
|
|
ifeq ($(CONFIG_XIP_KERNEL),y)
|
|
KBUILD_IMAGE := xipImage
|
|
else
|
|
KBUILD_IMAGE := zImage
|
|
endif
|
|
|
|
all: $(KBUILD_IMAGE)
|
|
|
|
boot := arch/arm/boot
|
|
|
|
archprepare:
|
|
$(Q)$(MAKE) $(build)=arch/arm/tools include/generated/mach-types.h
|
|
|
|
# Convert bzImage to zImage
|
|
bzImage: zImage
|
|
|
|
zImage Image xipImage bootpImage uImage: vmlinux
|
|
$(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@
|
|
|
|
zinstall uinstall install: vmlinux
|
|
$(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $@
|
|
|
|
%.dtb: scripts
|
|
$(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@
|
|
|
|
dtbs: scripts
|
|
$(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@
|
|
|
|
# We use MRPROPER_FILES and CLEAN_FILES now
|
|
archclean:
|
|
$(Q)$(MAKE) $(clean)=$(boot)
|
|
|
|
# My testing targets (bypasses dependencies)
|
|
bp:; $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/bootpImage
|
|
i zi:; $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $@
|
|
|
|
|
|
define archhelp
|
|
echo '* zImage - Compressed kernel image (arch/$(ARCH)/boot/zImage)'
|
|
echo ' Image - Uncompressed kernel image (arch/$(ARCH)/boot/Image)'
|
|
echo '* xipImage - XIP kernel image, if configured (arch/$(ARCH)/boot/xipImage)'
|
|
echo ' uImage - U-Boot wrapped zImage'
|
|
echo ' bootpImage - Combined zImage and initial RAM disk'
|
|
echo ' (supply initrd image via make variable INITRD=<path>)'
|
|
echo ' dtbs - Build device tree blobs for enabled boards'
|
|
echo ' install - Install uncompressed kernel'
|
|
echo ' zinstall - Install compressed kernel'
|
|
echo ' uinstall - Install U-Boot wrapped compressed kernel'
|
|
echo ' Install using (your) ~/bin/$(INSTALLKERNEL) or'
|
|
echo ' (distribution) /sbin/$(INSTALLKERNEL) or'
|
|
echo ' install to $$(INSTALL_PATH) and run lilo'
|
|
endef
|