mirror of
https://github.com/torvalds/linux.git
synced 2024-12-26 12:52:30 +00:00
ARC: Build system: Makefiles, Kconfig, Linker script
Arnd in his review pointed out that arch Kconfig organisation has several deficiencies: * Build time entries for things which can be runtime extracted from DT (e.g. SDRAM size, core clk frequency..) * Not multi-platform-image-build friendly (choice .. endchoice constructs) * cpu variants support (750/770) is exclusive. The first 2 have been fixed in subsequent patches. Due to the nature of the 750 and 770, it is not possible to build for both together, w/o special runtime glue code which would hurt performance. Signed-off-by: Vineet Gupta <vgupta@synopsys.com> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Sam Ravnborg <sam@ravnborg.org> Acked-by: Sam Ravnborg <sam@ravnborg.org>
This commit is contained in:
parent
79a033c6b9
commit
cfdbc2e16e
2
arch/arc/Kbuild
Normal file
2
arch/arc/Kbuild
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
obj-y += kernel/
|
||||||
|
obj-y += mm/
|
328
arch/arc/Kconfig
Normal file
328
arch/arc/Kconfig
Normal file
@ -0,0 +1,328 @@
|
|||||||
|
#
|
||||||
|
# Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License version 2 as
|
||||||
|
# published by the Free Software Foundation.
|
||||||
|
#
|
||||||
|
|
||||||
|
config ARC
|
||||||
|
def_bool y
|
||||||
|
select ARCH_NO_VIRT_TO_BUS
|
||||||
|
# ARC Busybox based initramfs absolutely relies on DEVTMPFS for /dev
|
||||||
|
select DEVTMPFS if !INITRAMFS_SOURCE=""
|
||||||
|
select GENERIC_ATOMIC64
|
||||||
|
select GENERIC_CLOCKEVENTS
|
||||||
|
select GENERIC_FIND_FIRST_BIT
|
||||||
|
# for now, we don't need GENERIC_IRQ_PROBE, CONFIG_GENERIC_IRQ_CHIP
|
||||||
|
select GENERIC_IRQ_SHOW
|
||||||
|
select GENERIC_PENDING_IRQ if SMP
|
||||||
|
select GENERIC_SMP_IDLE_THREAD
|
||||||
|
select HAVE_GENERIC_HARDIRQS
|
||||||
|
select MODULES_USE_ELF_RELA
|
||||||
|
|
||||||
|
config SCHED_OMIT_FRAME_POINTER
|
||||||
|
def_bool y
|
||||||
|
|
||||||
|
config GENERIC_CSUM
|
||||||
|
def_bool y
|
||||||
|
|
||||||
|
config RWSEM_GENERIC_SPINLOCK
|
||||||
|
def_bool y
|
||||||
|
|
||||||
|
config ARCH_FLATMEM_ENABLE
|
||||||
|
def_bool y
|
||||||
|
|
||||||
|
config MMU
|
||||||
|
def_bool y
|
||||||
|
|
||||||
|
config NO_IOPORT
|
||||||
|
def_bool y
|
||||||
|
|
||||||
|
config GENERIC_CALIBRATE_DELAY
|
||||||
|
def_bool y
|
||||||
|
|
||||||
|
config GENERIC_HWEIGHT
|
||||||
|
def_bool y
|
||||||
|
|
||||||
|
config BINFMT_ELF
|
||||||
|
def_bool y
|
||||||
|
|
||||||
|
config HAVE_LATENCYTOP_SUPPORT
|
||||||
|
def_bool y
|
||||||
|
|
||||||
|
config NO_DMA
|
||||||
|
def_bool n
|
||||||
|
|
||||||
|
source "init/Kconfig"
|
||||||
|
source "kernel/Kconfig.freezer"
|
||||||
|
|
||||||
|
menu "ARC Architecture Configuration"
|
||||||
|
|
||||||
|
choice
|
||||||
|
prompt "ARC Platform"
|
||||||
|
default ARC_PLAT_FPGA_LEGACY
|
||||||
|
|
||||||
|
config ARC_PLAT_FPGA_LEGACY
|
||||||
|
bool "\"Legacy\" ARC FPGA dev platform"
|
||||||
|
help
|
||||||
|
Support for ARC development platforms, provided by Synopsys.
|
||||||
|
These are based on FPGA or ISS. e.g.
|
||||||
|
- ARCAngel4
|
||||||
|
- ML509
|
||||||
|
- MetaWare ISS
|
||||||
|
|
||||||
|
#New platform adds here
|
||||||
|
endchoice
|
||||||
|
|
||||||
|
menu "ARC CPU Configuration"
|
||||||
|
|
||||||
|
choice
|
||||||
|
prompt "ARC Core"
|
||||||
|
default ARC_CPU_770
|
||||||
|
|
||||||
|
config ARC_CPU_750D
|
||||||
|
bool "ARC750D"
|
||||||
|
help
|
||||||
|
Support for ARC750 core
|
||||||
|
|
||||||
|
config ARC_CPU_770
|
||||||
|
bool "ARC770"
|
||||||
|
select ARC_CPU_REL_4_10
|
||||||
|
help
|
||||||
|
Support for ARC770 core introduced with Rel 4.10 (Summer 2011)
|
||||||
|
This core has a bunch of cool new features:
|
||||||
|
-MMU-v3: Variable Page Sz (4k, 8k, 16k), bigger J-TLB (128x4)
|
||||||
|
Shared Address Spaces (for sharing TLB entires in MMU)
|
||||||
|
-Caches: New Prog Model, Region Flush
|
||||||
|
-Insns: endian swap, load-locked/store-conditional, time-stamp-ctr
|
||||||
|
|
||||||
|
endchoice
|
||||||
|
|
||||||
|
config CPU_BIG_ENDIAN
|
||||||
|
bool "Enable Big Endian Mode"
|
||||||
|
default n
|
||||||
|
help
|
||||||
|
Build kernel for Big Endian Mode of ARC CPU
|
||||||
|
|
||||||
|
menuconfig ARC_CACHE
|
||||||
|
bool "Enable Cache Support"
|
||||||
|
default y
|
||||||
|
|
||||||
|
if ARC_CACHE
|
||||||
|
|
||||||
|
config ARC_CACHE_LINE_SHIFT
|
||||||
|
int "Cache Line Length (as power of 2)"
|
||||||
|
range 5 7
|
||||||
|
default "6"
|
||||||
|
help
|
||||||
|
Starting with ARC700 4.9, Cache line length is configurable,
|
||||||
|
This option specifies "N", with Line-len = 2 power N
|
||||||
|
So line lengths of 32, 64, 128 are specified by 5,6,7, respectively
|
||||||
|
Linux only supports same line lengths for I and D caches.
|
||||||
|
|
||||||
|
config ARC_HAS_ICACHE
|
||||||
|
bool "Use Instruction Cache"
|
||||||
|
default y
|
||||||
|
|
||||||
|
config ARC_HAS_DCACHE
|
||||||
|
bool "Use Data Cache"
|
||||||
|
default y
|
||||||
|
|
||||||
|
config ARC_CACHE_PAGES
|
||||||
|
bool "Per Page Cache Control"
|
||||||
|
default y
|
||||||
|
depends on ARC_HAS_ICACHE || ARC_HAS_DCACHE
|
||||||
|
help
|
||||||
|
This can be used to over-ride the global I/D Cache Enable on a
|
||||||
|
per-page basis (but only for pages accessed via MMU such as
|
||||||
|
Kernel Virtual address or User Virtual Address)
|
||||||
|
TLB entries have a per-page Cache Enable Bit.
|
||||||
|
Note that Global I/D ENABLE + Per Page DISABLE works but corollary
|
||||||
|
Global DISABLE + Per Page ENABLE won't work
|
||||||
|
|
||||||
|
endif #ARC_CACHE
|
||||||
|
|
||||||
|
config ARC_HAS_HW_MPY
|
||||||
|
bool "Use Hardware Multiplier (Normal or Faster XMAC)"
|
||||||
|
default y
|
||||||
|
help
|
||||||
|
Influences how gcc generates code for MPY operations.
|
||||||
|
If enabled, MPYxx insns are generated, provided by Standard/XMAC
|
||||||
|
Multipler. Otherwise software multipy lib is used
|
||||||
|
|
||||||
|
choice
|
||||||
|
prompt "ARC700 MMU Version"
|
||||||
|
default ARC_MMU_V3 if ARC_CPU_770
|
||||||
|
default ARC_MMU_V2 if ARC_CPU_750D
|
||||||
|
|
||||||
|
config ARC_MMU_V1
|
||||||
|
bool "MMU v1"
|
||||||
|
help
|
||||||
|
Orig ARC700 MMU
|
||||||
|
|
||||||
|
config ARC_MMU_V2
|
||||||
|
bool "MMU v2"
|
||||||
|
help
|
||||||
|
Fixed the deficiency of v1 - possible thrashing in memcpy sceanrio
|
||||||
|
when 2 D-TLB and 1 I-TLB entries index into same 2way set.
|
||||||
|
|
||||||
|
config ARC_MMU_V3
|
||||||
|
bool "MMU v3"
|
||||||
|
depends on ARC_CPU_770
|
||||||
|
help
|
||||||
|
Introduced with ARC700 4.10: New Features
|
||||||
|
Variable Page size (1k-16k), var JTLB size 128 x (2 or 4)
|
||||||
|
Shared Address Spaces (SASID)
|
||||||
|
|
||||||
|
endchoice
|
||||||
|
|
||||||
|
|
||||||
|
choice
|
||||||
|
prompt "MMU Page Size"
|
||||||
|
default ARC_PAGE_SIZE_8K
|
||||||
|
|
||||||
|
config ARC_PAGE_SIZE_8K
|
||||||
|
bool "8KB"
|
||||||
|
help
|
||||||
|
Choose between 8k vs 16k
|
||||||
|
|
||||||
|
config ARC_PAGE_SIZE_16K
|
||||||
|
bool "16KB"
|
||||||
|
depends on ARC_MMU_V3
|
||||||
|
|
||||||
|
config ARC_PAGE_SIZE_4K
|
||||||
|
bool "4KB"
|
||||||
|
depends on ARC_MMU_V3
|
||||||
|
|
||||||
|
endchoice
|
||||||
|
|
||||||
|
config ARC_FPU_SAVE_RESTORE
|
||||||
|
bool "Enable FPU state persistence across context switch"
|
||||||
|
default n
|
||||||
|
help
|
||||||
|
Double Precision Floating Point unit had dedictaed regs which
|
||||||
|
need to be saved/restored across context-switch.
|
||||||
|
Note that ARC FPU is overly simplistic, unlike say x86, which has
|
||||||
|
hardware pieces to allow software to conditionally save/restore,
|
||||||
|
based on actual usage of FPU by a task. Thus our implemn does
|
||||||
|
this for all tasks in system.
|
||||||
|
|
||||||
|
menuconfig ARC_CPU_REL_4_10
|
||||||
|
bool "Enable support for Rel 4.10 features"
|
||||||
|
default n
|
||||||
|
help
|
||||||
|
-ARC770 (and dependent features) enabled
|
||||||
|
-ARC750 also shares some of the new features with 770
|
||||||
|
|
||||||
|
config ARC_HAS_LLSC
|
||||||
|
bool "Insn: LLOCK/SCOND (efficient atomic ops)"
|
||||||
|
default y
|
||||||
|
depends on ARC_CPU_770
|
||||||
|
# if SMP, enable LLSC ONLY if ARC implementation has coherent atomics
|
||||||
|
depends on !SMP || ARC_HAS_COH_LLSC
|
||||||
|
|
||||||
|
config ARC_HAS_SWAPE
|
||||||
|
bool "Insn: SWAPE (endian-swap)"
|
||||||
|
default y
|
||||||
|
depends on ARC_CPU_REL_4_10
|
||||||
|
|
||||||
|
config ARC_HAS_RTSC
|
||||||
|
bool "Insn: RTSC (64-bit r/o cycle counter)"
|
||||||
|
default y
|
||||||
|
depends on ARC_CPU_REL_4_10
|
||||||
|
|
||||||
|
endmenu # "ARC CPU Configuration"
|
||||||
|
|
||||||
|
menu "Platform Board Configuration"
|
||||||
|
|
||||||
|
source "arch/arc/plat-arcfpga/Kconfig"
|
||||||
|
|
||||||
|
#New platform adds here
|
||||||
|
|
||||||
|
config ARC_PLAT_CLK
|
||||||
|
int "Clk speed in Hz"
|
||||||
|
default "80000000"
|
||||||
|
|
||||||
|
config LINUX_LINK_BASE
|
||||||
|
hex "Linux Link Address"
|
||||||
|
default "0x80000000"
|
||||||
|
help
|
||||||
|
ARC700 divides the 32 bit phy address space into two equal halves
|
||||||
|
-Lower 2G (0 - 0x7FFF_FFFF ) is user virtual, translated by MMU
|
||||||
|
-Upper 2G (0x8000_0000 onwards) is untranslated, for kernel
|
||||||
|
Typically Linux kernel is linked at the start of untransalted addr,
|
||||||
|
hence the default value of 0x8zs.
|
||||||
|
However some customers have peripherals mapped at this addr, so
|
||||||
|
Linux needs to be scooted a bit.
|
||||||
|
If you don't know what the above means, leave this setting alone.
|
||||||
|
|
||||||
|
config ARC_PLAT_SDRAM_SIZE
|
||||||
|
hex "SD RAM Size"
|
||||||
|
default "0x10000000"
|
||||||
|
help
|
||||||
|
Implies the amount of SDRAM/DRAM Linux is going to claim/own.
|
||||||
|
The actual memory itself could be larger than this number. But for
|
||||||
|
all software purposes, this is the amt of memory.
|
||||||
|
|
||||||
|
endmenu # "Platform Board Configuration"
|
||||||
|
|
||||||
|
config ARC_STACK_NONEXEC
|
||||||
|
bool "Make stack non-executable"
|
||||||
|
default n
|
||||||
|
help
|
||||||
|
To disable the execute permissions of stack/heap of processes
|
||||||
|
which are enabled by default.
|
||||||
|
|
||||||
|
config HZ
|
||||||
|
int "Timer Frequency"
|
||||||
|
default 100
|
||||||
|
|
||||||
|
menuconfig ARC_DBG
|
||||||
|
bool "ARC debugging"
|
||||||
|
default y
|
||||||
|
|
||||||
|
config ARC_DBG_TLB_PARANOIA
|
||||||
|
bool "Paranoia Checks in Low Level TLB Handlers"
|
||||||
|
depends on ARC_DBG
|
||||||
|
default n
|
||||||
|
|
||||||
|
config ARC_DBG_TLB_MISS_COUNT
|
||||||
|
bool "Profile TLB Misses"
|
||||||
|
default n
|
||||||
|
select DEBUG_FS
|
||||||
|
depends on ARC_DBG
|
||||||
|
help
|
||||||
|
Counts number of I and D TLB Misses and exports them via Debugfs
|
||||||
|
The counters can be cleared via Debugfs as well
|
||||||
|
|
||||||
|
config CMDLINE
|
||||||
|
string "Kernel command line to built-in"
|
||||||
|
default "print-fatal-signals=1"
|
||||||
|
help
|
||||||
|
The default command line which will be appended to the optional
|
||||||
|
u-boot provided command line (see below)
|
||||||
|
|
||||||
|
config CMDLINE_UBOOT
|
||||||
|
bool "Support U-boot kernel command line passing"
|
||||||
|
default n
|
||||||
|
help
|
||||||
|
If you are using U-boot (www.denx.de) and wish to pass the kernel
|
||||||
|
command line from the U-boot environment to the Linux kernel then
|
||||||
|
switch this option on.
|
||||||
|
ARC U-boot will setup the cmdline in RAM/flash and set r2 to point
|
||||||
|
to it. kernel startup code will copy the string into cmdline buffer
|
||||||
|
and also append CONFIG_CMDLINE.
|
||||||
|
|
||||||
|
source "kernel/Kconfig.preempt"
|
||||||
|
|
||||||
|
endmenu # "ARC Architecture Configuration"
|
||||||
|
|
||||||
|
source "mm/Kconfig"
|
||||||
|
source "net/Kconfig"
|
||||||
|
source "drivers/Kconfig"
|
||||||
|
source "fs/Kconfig"
|
||||||
|
source "arch/arc/Kconfig.debug"
|
||||||
|
source "security/Kconfig"
|
||||||
|
source "crypto/Kconfig"
|
||||||
|
source "lib/Kconfig"
|
34
arch/arc/Kconfig.debug
Normal file
34
arch/arc/Kconfig.debug
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
menu "Kernel hacking"
|
||||||
|
|
||||||
|
source "lib/Kconfig.debug"
|
||||||
|
|
||||||
|
config EARLY_PRINTK
|
||||||
|
bool "Early printk" if EMBEDDED
|
||||||
|
default y
|
||||||
|
help
|
||||||
|
Write kernel log output directly into the VGA buffer or to a serial
|
||||||
|
port.
|
||||||
|
|
||||||
|
This is useful for kernel debugging when your machine crashes very
|
||||||
|
early before the console code is initialized. For normal operation
|
||||||
|
it is not recommended because it looks ugly and doesn't cooperate
|
||||||
|
with klogd/syslogd or the X server. You should normally N here,
|
||||||
|
unless you want to debug such a crash.
|
||||||
|
|
||||||
|
config DEBUG_STACKOVERFLOW
|
||||||
|
bool "Check for stack overflows"
|
||||||
|
depends on DEBUG_KERNEL
|
||||||
|
help
|
||||||
|
This option will cause messages to be printed if free stack space
|
||||||
|
drops below a certain limit.
|
||||||
|
|
||||||
|
config 16KSTACKS
|
||||||
|
bool "Use 16Kb for kernel stacks instead of 8Kb"
|
||||||
|
help
|
||||||
|
If you say Y here the kernel will use a 16Kb stacksize for the
|
||||||
|
kernel stack attached to each process/thread. The default is 8K.
|
||||||
|
This increases the resident kernel footprint and will cause less
|
||||||
|
threads to run on the system and also increase the pressure
|
||||||
|
on the VM subsystem for higher order allocations.
|
||||||
|
|
||||||
|
endmenu
|
115
arch/arc/Makefile
Normal file
115
arch/arc/Makefile
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
#
|
||||||
|
# Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License version 2 as
|
||||||
|
# published by the Free Software Foundation.
|
||||||
|
#
|
||||||
|
|
||||||
|
UTS_MACHINE := arc
|
||||||
|
|
||||||
|
KBUILD_DEFCONFIG := fpga_defconfig
|
||||||
|
|
||||||
|
# For ARC FPGA Platforms
|
||||||
|
platform-$(CONFIG_ARC_PLAT_FPGA_LEGACY) := arcfpga
|
||||||
|
#New platform adds here
|
||||||
|
|
||||||
|
PLATFORM := $(platform-y)
|
||||||
|
export PLATFORM
|
||||||
|
|
||||||
|
cflags-y += -Iarch/arc/plat-$(PLATFORM)/include
|
||||||
|
cflags-y += -mA7 -fno-common -pipe -fno-builtin -D__linux__
|
||||||
|
|
||||||
|
atleast_gcc44 := $(call cc-ifversion, -gt, 0402, y)
|
||||||
|
cflags-$(atleast_gcc44) += -fsection-anchors
|
||||||
|
|
||||||
|
cflags-$(CONFIG_ARC_HAS_LLSC) += -mlock
|
||||||
|
cflags-$(CONFIG_ARC_HAS_SWAPE) += -mswape
|
||||||
|
cflags-$(CONFIG_ARC_HAS_RTSC) += -mrtsc
|
||||||
|
cflags-$(CONFIG_ARC_DW2_UNWIND) += -fasynchronous-unwind-tables
|
||||||
|
|
||||||
|
ifndef CONFIG_CC_OPTIMIZE_FOR_SIZE
|
||||||
|
# Generic build system uses -O2, we want -O3
|
||||||
|
cflags-y += -O3
|
||||||
|
endif
|
||||||
|
|
||||||
|
# small data is default for elf32 tool-chain. If not usable, disable it
|
||||||
|
# This also allows repurposing GP as scratch reg to gcc reg allocator
|
||||||
|
disable_small_data := y
|
||||||
|
cflags-$(disable_small_data) += -mno-sdata -fcall-used-gp
|
||||||
|
|
||||||
|
cflags-$(CONFIG_CPU_BIG_ENDIAN) += -mbig-endian
|
||||||
|
ldflags-$(CONFIG_CPU_BIG_ENDIAN) += -EB
|
||||||
|
|
||||||
|
# STAR 9000518362:
|
||||||
|
# arc-linux-uclibc-ld (buildroot) or arceb-elf32-ld (EZChip) don't accept
|
||||||
|
# --build-id w/o "-marclinux".
|
||||||
|
# Default arc-elf32-ld is OK
|
||||||
|
ldflags-y += -marclinux
|
||||||
|
|
||||||
|
ARC_LIBGCC := -mA7
|
||||||
|
cflags-$(CONFIG_ARC_HAS_HW_MPY) += -multcost=16
|
||||||
|
|
||||||
|
ifndef CONFIG_ARC_HAS_HW_MPY
|
||||||
|
cflags-y += -mno-mpy
|
||||||
|
|
||||||
|
# newlib for ARC700 assumes MPY to be always present, which is generally true
|
||||||
|
# However, if someone really doesn't want MPY, we need to use the 600 ver
|
||||||
|
# which coupled with -mno-mpy will use mpy emulation
|
||||||
|
# With gcc 4.4.7, -mno-mpy is enough to make any other related adjustments,
|
||||||
|
# e.g. increased cost of MPY. With gcc 4.2.1 this had to be explicitly hinted
|
||||||
|
|
||||||
|
ARC_LIBGCC := -marc600
|
||||||
|
ifneq ($(atleast_gcc44),y)
|
||||||
|
cflags-y += -multcost=30
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
LIBGCC := $(shell $(CC) $(ARC_LIBGCC) $(cflags-y) --print-libgcc-file-name)
|
||||||
|
|
||||||
|
# Modules with short calls might break for calls into builtin-kernel
|
||||||
|
KBUILD_CFLAGS_MODULE += -mlong-calls
|
||||||
|
|
||||||
|
# Finally dump eveything into kernel build system
|
||||||
|
KBUILD_CFLAGS += $(cflags-y)
|
||||||
|
KBUILD_AFLAGS += $(KBUILD_CFLAGS)
|
||||||
|
LDFLAGS += $(ldflags-y)
|
||||||
|
|
||||||
|
# Needed for Linker script preprocessing
|
||||||
|
KBUILD_CPPFLAGS += -Iarch/arc/plat-$(PLATFORM)/include
|
||||||
|
|
||||||
|
head-y := arch/arc/kernel/head.o
|
||||||
|
|
||||||
|
# See arch/arc/Kbuild for content of core part of the kernel
|
||||||
|
core-y += arch/arc/
|
||||||
|
|
||||||
|
# w/o this ifneq, make ARCH=arc clean was crapping out
|
||||||
|
ifneq ($(platform-y),)
|
||||||
|
core-y += arch/arc/plat-$(PLATFORM)/
|
||||||
|
endif
|
||||||
|
|
||||||
|
libs-y += arch/arc/lib/ $(LIBGCC)
|
||||||
|
|
||||||
|
#default target for make without any arguements.
|
||||||
|
KBUILD_IMAGE := bootpImage
|
||||||
|
|
||||||
|
all: $(KBUILD_IMAGE)
|
||||||
|
boot := arch/arc/boot
|
||||||
|
|
||||||
|
bootpImage: vmlinux
|
||||||
|
|
||||||
|
uImage: vmlinux
|
||||||
|
$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
|
||||||
|
|
||||||
|
archclean:
|
||||||
|
$(Q)$(MAKE) $(clean)=$(boot)
|
||||||
|
|
||||||
|
# Hacks to enable final link due to absence of link-time branch relexation
|
||||||
|
# and gcc choosing optimal(shorter) branches at -O3
|
||||||
|
#
|
||||||
|
# vineetg Feb 2010: -mlong-calls switched off for overall kernel build
|
||||||
|
# However lib/decompress_inflate.o (.init.text) calls
|
||||||
|
# zlib_inflate_workspacesize (.text) causing relocation errors.
|
||||||
|
# Thus forcing all exten calls in this file to be long calls
|
||||||
|
export CFLAGS_decompress_inflate.o = -mmedium-calls
|
||||||
|
export CFLAGS_initramfs.o = -mmedium-calls
|
26
arch/arc/boot/Makefile
Normal file
26
arch/arc/boot/Makefile
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
targets := vmlinux.bin vmlinux.bin.gz uImage
|
||||||
|
|
||||||
|
# uImage build relies on mkimage being availble on your host for ARC target
|
||||||
|
# You will need to build u-boot for ARC, rename mkimage to arc-elf32-mkimage
|
||||||
|
# and make sure it's reacable from your PATH
|
||||||
|
MKIMAGE := $(srctree)/scripts/mkuboot.sh
|
||||||
|
|
||||||
|
OBJCOPYFLAGS= -O binary -R .note -R .note.gnu.build-id -R .comment -S
|
||||||
|
|
||||||
|
LINUX_START_TEXT = $$(readelf -h vmlinux | \
|
||||||
|
grep "Entry point address" | grep -o 0x.*)
|
||||||
|
|
||||||
|
UIMAGE_LOADADDR = $(CONFIG_LINUX_LINK_BASE)
|
||||||
|
UIMAGE_ENTRYADDR = $(LINUX_START_TEXT)
|
||||||
|
UIMAGE_COMPRESSION = gzip
|
||||||
|
|
||||||
|
$(obj)/vmlinux.bin: vmlinux FORCE
|
||||||
|
$(call if_changed,objcopy)
|
||||||
|
|
||||||
|
$(obj)/vmlinux.bin.gz: $(obj)/vmlinux.bin FORCE
|
||||||
|
$(call if_changed,gzip)
|
||||||
|
|
||||||
|
$(obj)/uImage: $(obj)/vmlinux.bin.gz FORCE
|
||||||
|
$(call if_changed,uimage)
|
||||||
|
|
||||||
|
PHONY += FORCE
|
@ -33,6 +33,7 @@ generic-y += mman.h
|
|||||||
generic-y += msgbuf.h
|
generic-y += msgbuf.h
|
||||||
generic-y += param.h
|
generic-y += param.h
|
||||||
generic-y += parport.h
|
generic-y += parport.h
|
||||||
|
generic-y += pci.h
|
||||||
generic-y += percpu.h
|
generic-y += percpu.h
|
||||||
generic-y += poll.h
|
generic-y += poll.h
|
||||||
generic-y += posix_types.h
|
generic-y += posix_types.h
|
||||||
|
16
arch/arc/kernel/Makefile
Normal file
16
arch/arc/kernel/Makefile
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
#
|
||||||
|
# Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License version 2 as
|
||||||
|
# published by the Free Software Foundation.
|
||||||
|
|
||||||
|
obj-y := arcksyms.o setup.o irq.o time.o reset.o ptrace.o entry.o process.o
|
||||||
|
obj-y += signal.o traps.o sys.o troubleshoot.o stacktrace.o clk.o
|
||||||
|
|
||||||
|
obj-$(CONFIG_ARC_FPU_SAVE_RESTORE) += fpu.o
|
||||||
|
CFLAGS_fpu.o += -mdpfp
|
||||||
|
|
||||||
|
obj-y += ctx_sw_asm.o
|
||||||
|
|
||||||
|
extra-y := vmlinux.lds head.o
|
56
arch/arc/kernel/arcksyms.c
Normal file
56
arch/arc/kernel/arcksyms.c
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
/*
|
||||||
|
* arcksyms.c - Exporting symbols not exportable from their own sources
|
||||||
|
*
|
||||||
|
* Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/module.h>
|
||||||
|
|
||||||
|
/* libgcc functions, not part of kernel sources */
|
||||||
|
extern void __ashldi3(void);
|
||||||
|
extern void __ashrdi3(void);
|
||||||
|
extern void __divsi3(void);
|
||||||
|
extern void __divsf3(void);
|
||||||
|
extern void __lshrdi3(void);
|
||||||
|
extern void __modsi3(void);
|
||||||
|
extern void __muldi3(void);
|
||||||
|
extern void __ucmpdi2(void);
|
||||||
|
extern void __udivsi3(void);
|
||||||
|
extern void __umodsi3(void);
|
||||||
|
extern void __cmpdi2(void);
|
||||||
|
extern void __fixunsdfsi(void);
|
||||||
|
extern void __muldf3(void);
|
||||||
|
extern void __divdf3(void);
|
||||||
|
extern void __floatunsidf(void);
|
||||||
|
extern void __floatunsisf(void);
|
||||||
|
|
||||||
|
EXPORT_SYMBOL(__ashldi3);
|
||||||
|
EXPORT_SYMBOL(__ashrdi3);
|
||||||
|
EXPORT_SYMBOL(__divsi3);
|
||||||
|
EXPORT_SYMBOL(__divsf3);
|
||||||
|
EXPORT_SYMBOL(__lshrdi3);
|
||||||
|
EXPORT_SYMBOL(__modsi3);
|
||||||
|
EXPORT_SYMBOL(__muldi3);
|
||||||
|
EXPORT_SYMBOL(__ucmpdi2);
|
||||||
|
EXPORT_SYMBOL(__udivsi3);
|
||||||
|
EXPORT_SYMBOL(__umodsi3);
|
||||||
|
EXPORT_SYMBOL(__cmpdi2);
|
||||||
|
EXPORT_SYMBOL(__fixunsdfsi);
|
||||||
|
EXPORT_SYMBOL(__muldf3);
|
||||||
|
EXPORT_SYMBOL(__divdf3);
|
||||||
|
EXPORT_SYMBOL(__floatunsidf);
|
||||||
|
EXPORT_SYMBOL(__floatunsisf);
|
||||||
|
|
||||||
|
/* ARC optimised assembler routines */
|
||||||
|
EXPORT_SYMBOL(memset);
|
||||||
|
EXPORT_SYMBOL(memcpy);
|
||||||
|
EXPORT_SYMBOL(memcmp);
|
||||||
|
EXPORT_SYMBOL(strchr);
|
||||||
|
EXPORT_SYMBOL(strcpy);
|
||||||
|
EXPORT_SYMBOL(strcmp);
|
||||||
|
EXPORT_SYMBOL(strlen);
|
61
arch/arc/kernel/asm-offsets.c
Normal file
61
arch/arc/kernel/asm-offsets.c
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/sched.h>
|
||||||
|
#include <linux/mm.h>
|
||||||
|
#include <linux/interrupt.h>
|
||||||
|
#include <linux/thread_info.h>
|
||||||
|
#include <linux/kbuild.h>
|
||||||
|
#include <asm/hardirq.h>
|
||||||
|
#include <asm/page.h>
|
||||||
|
#include <asm/ptrace.h>
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
DEFINE(TASK_THREAD, offsetof(struct task_struct, thread));
|
||||||
|
DEFINE(TASK_THREAD_INFO, offsetof(struct task_struct, stack));
|
||||||
|
|
||||||
|
BLANK();
|
||||||
|
|
||||||
|
DEFINE(THREAD_KSP, offsetof(struct thread_struct, ksp));
|
||||||
|
DEFINE(THREAD_CALLEE_REG, offsetof(struct thread_struct, callee_reg));
|
||||||
|
DEFINE(THREAD_FAULT_ADDR,
|
||||||
|
offsetof(struct thread_struct, fault_address));
|
||||||
|
|
||||||
|
BLANK();
|
||||||
|
|
||||||
|
DEFINE(THREAD_INFO_FLAGS, offsetof(struct thread_info, flags));
|
||||||
|
DEFINE(THREAD_INFO_PREEMPT_COUNT,
|
||||||
|
offsetof(struct thread_info, preempt_count));
|
||||||
|
|
||||||
|
BLANK();
|
||||||
|
|
||||||
|
DEFINE(TASK_ACT_MM, offsetof(struct task_struct, active_mm));
|
||||||
|
DEFINE(TASK_TGID, offsetof(struct task_struct, tgid));
|
||||||
|
|
||||||
|
DEFINE(MM_CTXT, offsetof(struct mm_struct, context));
|
||||||
|
DEFINE(MM_PGD, offsetof(struct mm_struct, pgd));
|
||||||
|
|
||||||
|
DEFINE(MM_CTXT_ASID, offsetof(mm_context_t, asid));
|
||||||
|
|
||||||
|
BLANK();
|
||||||
|
|
||||||
|
DEFINE(PT_status32, offsetof(struct pt_regs, status32));
|
||||||
|
DEFINE(PT_orig_r8, offsetof(struct pt_regs, orig_r8));
|
||||||
|
DEFINE(PT_sp, offsetof(struct pt_regs, sp));
|
||||||
|
DEFINE(PT_r0, offsetof(struct pt_regs, r0));
|
||||||
|
DEFINE(PT_r1, offsetof(struct pt_regs, r1));
|
||||||
|
DEFINE(PT_r2, offsetof(struct pt_regs, r2));
|
||||||
|
DEFINE(PT_r3, offsetof(struct pt_regs, r3));
|
||||||
|
DEFINE(PT_r4, offsetof(struct pt_regs, r4));
|
||||||
|
DEFINE(PT_r5, offsetof(struct pt_regs, r5));
|
||||||
|
DEFINE(PT_r6, offsetof(struct pt_regs, r6));
|
||||||
|
DEFINE(PT_r7, offsetof(struct pt_regs, r7));
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
116
arch/arc/kernel/vmlinux.lds.S
Normal file
116
arch/arc/kernel/vmlinux.lds.S
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <asm-generic/vmlinux.lds.h>
|
||||||
|
#include <asm/cache.h>
|
||||||
|
#include <asm/page.h>
|
||||||
|
#include <asm/thread_info.h>
|
||||||
|
#include <plat/memmap.h>
|
||||||
|
|
||||||
|
OUTPUT_ARCH(arc)
|
||||||
|
ENTRY(_stext)
|
||||||
|
|
||||||
|
#ifdef CONFIG_CPU_BIG_ENDIAN
|
||||||
|
jiffies = jiffies_64 + 4;
|
||||||
|
#else
|
||||||
|
jiffies = jiffies_64;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
SECTIONS
|
||||||
|
{
|
||||||
|
. = CONFIG_LINUX_LINK_BASE;
|
||||||
|
|
||||||
|
_int_vec_base_lds = .;
|
||||||
|
.vector : {
|
||||||
|
*(.vector)
|
||||||
|
. = ALIGN(PAGE_SIZE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The reason for having a seperate subsection .init.ramfs is to
|
||||||
|
* prevent objump from including it in kernel dumps
|
||||||
|
*
|
||||||
|
* Reason for having .init.ramfs above .init is to make sure that the
|
||||||
|
* binary blob is tucked away to one side, reducing the displacement
|
||||||
|
* between .init.text and .text, avoiding any possible relocation
|
||||||
|
* errors because of calls from .init.text to .text
|
||||||
|
* Yes such calls do exist. e.g.
|
||||||
|
* decompress_inflate.c:gunzip( ) -> zlib_inflate_workspace( )
|
||||||
|
*/
|
||||||
|
|
||||||
|
__init_begin = .;
|
||||||
|
|
||||||
|
.init.ramfs : { INIT_RAM_FS }
|
||||||
|
|
||||||
|
. = ALIGN(PAGE_SIZE);
|
||||||
|
_stext = .;
|
||||||
|
|
||||||
|
HEAD_TEXT_SECTION
|
||||||
|
INIT_TEXT_SECTION(L1_CACHE_BYTES)
|
||||||
|
|
||||||
|
/* INIT_DATA_SECTION open-coded: special INIT_RAM_FS handling */
|
||||||
|
.init.data : {
|
||||||
|
INIT_DATA
|
||||||
|
INIT_SETUP(L1_CACHE_BYTES)
|
||||||
|
INIT_CALLS
|
||||||
|
CON_INITCALL
|
||||||
|
SECURITY_INITCALL
|
||||||
|
}
|
||||||
|
|
||||||
|
PERCPU_SECTION(L1_CACHE_BYTES)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* .exit.text is discard at runtime, not link time, to deal with
|
||||||
|
* references from .debug_frame
|
||||||
|
* It will be init freed, being inside [__init_start : __init_end]
|
||||||
|
*/
|
||||||
|
.exit.text : { EXIT_TEXT }
|
||||||
|
.exit.data : { EXIT_DATA }
|
||||||
|
|
||||||
|
. = ALIGN(PAGE_SIZE);
|
||||||
|
__init_end = .;
|
||||||
|
|
||||||
|
.text : {
|
||||||
|
_text = .;
|
||||||
|
TEXT_TEXT
|
||||||
|
SCHED_TEXT
|
||||||
|
LOCK_TEXT
|
||||||
|
KPROBES_TEXT
|
||||||
|
*(.fixup)
|
||||||
|
*(.gnu.warning)
|
||||||
|
}
|
||||||
|
EXCEPTION_TABLE(L1_CACHE_BYTES)
|
||||||
|
_etext = .;
|
||||||
|
|
||||||
|
_sdata = .;
|
||||||
|
RO_DATA_SECTION(PAGE_SIZE)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 1. this is .data essentially
|
||||||
|
* 2. THREAD_SIZE for init.task, must be kernel-stk sz aligned
|
||||||
|
*/
|
||||||
|
RW_DATA_SECTION(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE)
|
||||||
|
|
||||||
|
_edata = .;
|
||||||
|
|
||||||
|
BSS_SECTION(0, 0, 0)
|
||||||
|
|
||||||
|
NOTES
|
||||||
|
|
||||||
|
. = ALIGN(PAGE_SIZE);
|
||||||
|
_end = . ;
|
||||||
|
|
||||||
|
STABS_DEBUG
|
||||||
|
DWARF_DEBUG
|
||||||
|
DISCARDS
|
||||||
|
|
||||||
|
.arcextmap 0 : {
|
||||||
|
*(.gnu.linkonce.arcextmap.*)
|
||||||
|
*(.arcextmap.*)
|
||||||
|
}
|
||||||
|
}
|
9
arch/arc/lib/Makefile
Normal file
9
arch/arc/lib/Makefile
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#
|
||||||
|
# Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License version 2 as
|
||||||
|
# published by the Free Software Foundation.
|
||||||
|
|
||||||
|
lib-y := strchr-700.o strcmp.o strcpy-700.o strlen.o
|
||||||
|
lib-y += memcmp.o memcpy-700.o memset.o
|
10
arch/arc/mm/Makefile
Normal file
10
arch/arc/mm/Makefile
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
#
|
||||||
|
# Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License version 2 as
|
||||||
|
# published by the Free Software Foundation.
|
||||||
|
#
|
||||||
|
|
||||||
|
obj-y := extable.o ioremap.o dma.o fault.o init.o
|
||||||
|
obj-y += tlb.o tlbex.o cache_arc700.o
|
33
arch/arc/plat-arcfpga/Kconfig
Normal file
33
arch/arc/plat-arcfpga/Kconfig
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
#
|
||||||
|
# Copyright (C) 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License version 2 as
|
||||||
|
# published by the Free Software Foundation.
|
||||||
|
#
|
||||||
|
|
||||||
|
if ARC_PLAT_FPGA_LEGACY
|
||||||
|
|
||||||
|
choice
|
||||||
|
prompt "FPGA Board"
|
||||||
|
|
||||||
|
config ARC_BOARD_ANGEL4
|
||||||
|
bool "ARC Angel4"
|
||||||
|
help
|
||||||
|
ARC Angel4 FPGA Ref Platform (Xilinx Virtex Based)
|
||||||
|
|
||||||
|
config ARC_BOARD_ML509
|
||||||
|
bool "ML509"
|
||||||
|
help
|
||||||
|
ARC ML509 FPGA Ref Platform (Xilinx Virtex-5 Based)
|
||||||
|
|
||||||
|
endchoice
|
||||||
|
|
||||||
|
config ARC_SERIAL_BAUD
|
||||||
|
int "UART Baud rate"
|
||||||
|
default "115200"
|
||||||
|
depends on SERIAL_ARC || SERIAL_ARC_CONSOLE
|
||||||
|
help
|
||||||
|
Baud rate for the ARC UART
|
||||||
|
|
||||||
|
endif
|
9
arch/arc/plat-arcfpga/Makefile
Normal file
9
arch/arc/plat-arcfpga/Makefile
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#
|
||||||
|
# Copyright (C) 2011-2012 Synopsys, Inc. (www.synopsys.com)
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License version 2 as
|
||||||
|
# published by the Free Software Foundation.
|
||||||
|
#
|
||||||
|
|
||||||
|
obj-y := platform.o irq.o
|
Loading…
Reference in New Issue
Block a user