mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-11-20 00:26:39 +08:00
Merge branch 'for-linus' of git://git.monstr.eu/linux-2.6-microblaze
* 'for-linus' of git://git.monstr.eu/linux-2.6-microblaze: (24 commits) microblaze: Disable heartbeat/enable emaclite in defconfigs microblaze: Support simpleImage.dts make target microblaze: Fix _start symbol to physical address microblaze: Use LOAD_OFFSET macro to get correct LMA for all sections microblaze: Create the LOAD_OFFSET macro used to compute VMA vs LMA offsets microblaze: Copy ppc asm-compat.h for clean handling of constants in asm and C microblaze: Actually show KiB rather than pages in "Freeing initrd memory:" microblaze: Support ptrace syscall tracing. microblaze: Updated CPU version and FPGA family codes in PVR microblaze: Generate correct signal and siginfo for integer div-by-zero microblaze: Don't be noisy when userspace causes hardware exceptions microblaze: Remove ipc.h file which points to non-existing asm-generic file microblaze: Clear sticky FSR register after generating exception signals microblaze: Ensure CPU usermode is set on new userspace processes microblaze: Use correct kbuild variable KBUILD_CFLAGS microblaze: Save and restore msr in hw exception microblaze: Add architectural support for USB EHCI host controllers microblaze: Implement include/asm/syscall.h. microblaze: Improve checking mechanism for MSR instruction microblaze: Add checking mechanism for MSR instruction ...
This commit is contained in:
commit
a6b49cb210
@ -6,6 +6,7 @@ mainmenu "Linux/Microblaze Kernel Configuration"
|
||||
config MICROBLAZE
|
||||
def_bool y
|
||||
select HAVE_LMB
|
||||
select USB_ARCH_HAS_EHCI
|
||||
select ARCH_WANT_OPTIONAL_GPIOLIB
|
||||
|
||||
config SWAP
|
||||
|
@ -37,12 +37,12 @@ CPUFLAGS-$(CONFIG_XILINX_MICROBLAZE0_USE_PCMP_INSTR) += -mxl-pattern-compare
|
||||
CPUFLAGS-1 += $(call cc-option,-mcpu=v$(CPU_VER))
|
||||
|
||||
# r31 holds current when in kernel mode
|
||||
KBUILD_KERNEL += -ffixed-r31 $(CPUFLAGS-1) $(CPUFLAGS-2)
|
||||
KBUILD_CFLAGS += -ffixed-r31 $(CPUFLAGS-1) $(CPUFLAGS-2)
|
||||
|
||||
LDFLAGS :=
|
||||
LDFLAGS_vmlinux :=
|
||||
|
||||
LIBGCC := $(shell $(CC) $(KBUILD_KERNEL) -print-libgcc-file-name)
|
||||
LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS) -print-libgcc-file-name)
|
||||
|
||||
head-y := arch/microblaze/kernel/head.o
|
||||
libs-y += arch/microblaze/lib/
|
||||
@ -53,22 +53,41 @@ core-y += arch/microblaze/platform/
|
||||
|
||||
boot := arch/microblaze/boot
|
||||
|
||||
# Are we making a simpleImage.<boardname> target? If so, crack out the boardname
|
||||
DTB:=$(subst simpleImage.,,$(filter simpleImage.%, $(MAKECMDGOALS)))
|
||||
|
||||
ifneq ($(DTB),)
|
||||
core-y += $(boot)/
|
||||
endif
|
||||
|
||||
# defines filename extension depending memory management type
|
||||
ifeq ($(CONFIG_MMU),)
|
||||
MMU := -nommu
|
||||
endif
|
||||
|
||||
export MMU
|
||||
export MMU DTB
|
||||
|
||||
all: linux.bin
|
||||
|
||||
BOOT_TARGETS = linux.bin linux.bin.gz simpleImage.%
|
||||
|
||||
archclean:
|
||||
$(Q)$(MAKE) $(clean)=$(boot)
|
||||
|
||||
linux.bin linux.bin.gz: vmlinux
|
||||
$(BOOT_TARGETS): vmlinux
|
||||
$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
|
||||
|
||||
define archhelp
|
||||
echo '* linux.bin - Create raw binary'
|
||||
echo ' linux.bin.gz - Create compressed raw binary'
|
||||
echo '* linux.bin - Create raw binary'
|
||||
echo ' linux.bin.gz - Create compressed raw binary'
|
||||
echo ' simpleImage.<dt> - ELF image with $(arch)/boot/dts/<dt>.dts linked in'
|
||||
echo ' - stripped elf with fdt blob
|
||||
echo ' simpleImage.<dt>.unstrip - full ELF image with fdt blob'
|
||||
echo ' *_defconfig - Select default config from arch/microblaze/configs'
|
||||
echo ''
|
||||
echo ' Targets with <dt> embed a device tree blob inside the image'
|
||||
echo ' These targets support board with firmware that does not'
|
||||
echo ' support passing a device tree directly. Replace <dt> with the'
|
||||
echo ' name of a dts file from the arch/microblaze/boot/dts/ directory'
|
||||
echo ' (minus the .dts extension).'
|
||||
endef
|
||||
|
@ -2,10 +2,24 @@
|
||||
# arch/microblaze/boot/Makefile
|
||||
#
|
||||
|
||||
targets := linux.bin linux.bin.gz
|
||||
obj-y += linked_dtb.o
|
||||
|
||||
targets := linux.bin linux.bin.gz simpleImage.%
|
||||
|
||||
OBJCOPYFLAGS_linux.bin := -O binary
|
||||
|
||||
# Where the DTS files live
|
||||
dtstree := $(srctree)/$(src)/dts
|
||||
|
||||
# Ensure system.dtb exists
|
||||
$(obj)/linked_dtb.o: $(obj)/system.dtb
|
||||
|
||||
# Generate system.dtb from $(DTB).dtb
|
||||
ifneq ($(DTB),system)
|
||||
$(obj)/system.dtb: $(obj)/$(DTB).dtb
|
||||
$(call if_changed,cp)
|
||||
endif
|
||||
|
||||
$(obj)/linux.bin: vmlinux FORCE
|
||||
[ -n $(CONFIG_INITRAMFS_SOURCE) ] && [ ! -e $(CONFIG_INITRAMFS_SOURCE) ] && \
|
||||
touch $(CONFIG_INITRAMFS_SOURCE) || echo "No CPIO image"
|
||||
@ -16,4 +30,27 @@ $(obj)/linux.bin.gz: $(obj)/linux.bin FORCE
|
||||
$(call if_changed,gzip)
|
||||
@echo 'Kernel: $@ is ready' ' (#'`cat .version`')'
|
||||
|
||||
clean-kernel += linux.bin linux.bin.gz
|
||||
quiet_cmd_cp = CP $< $@$2
|
||||
cmd_cp = cat $< >$@$2 || (rm -f $@ && echo false)
|
||||
|
||||
quiet_cmd_strip = STRIP $@
|
||||
cmd_strip = $(STRIP) -K _start -K _end -K __log_buf -K _fdt_start vmlinux -o $@
|
||||
|
||||
$(obj)/simpleImage.%: vmlinux FORCE
|
||||
$(call if_changed,cp,.unstrip)
|
||||
$(call if_changed,strip)
|
||||
@echo 'Kernel: $@ is ready' ' (#'`cat .version`')'
|
||||
|
||||
# Rule to build device tree blobs
|
||||
DTC = $(objtree)/scripts/dtc/dtc
|
||||
|
||||
# Rule to build device tree blobs
|
||||
quiet_cmd_dtc = DTC $@
|
||||
cmd_dtc = $(DTC) -O dtb -o $(obj)/$*.dtb -b 0 -p 1024 $(dtstree)/$*.dts
|
||||
|
||||
$(obj)/%.dtb: $(dtstree)/%.dts FORCE
|
||||
$(call if_changed,dtc)
|
||||
|
||||
clean-kernel += linux.bin linux.bin.gz simpleImage.*
|
||||
|
||||
clean-files += *.dtb
|
||||
|
1
arch/microblaze/boot/dts/system.dts
Symbolic link
1
arch/microblaze/boot/dts/system.dts
Symbolic link
@ -0,0 +1 @@
|
||||
../../platform/generic/system.dts
|
3
arch/microblaze/boot/linked_dtb.S
Normal file
3
arch/microblaze/boot/linked_dtb.S
Normal file
@ -0,0 +1,3 @@
|
||||
.section __fdt_blob,"a"
|
||||
.incbin "arch/microblaze/boot/system.dtb"
|
||||
|
@ -1,7 +1,7 @@
|
||||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.31-rc6
|
||||
# Tue Aug 18 11:00:02 2009
|
||||
# Linux kernel version: 2.6.31
|
||||
# Thu Sep 24 10:28:50 2009
|
||||
#
|
||||
CONFIG_MICROBLAZE=y
|
||||
# CONFIG_SWAP is not set
|
||||
@ -42,11 +42,12 @@ CONFIG_SYSVIPC_SYSCTL=y
|
||||
#
|
||||
# RCU Subsystem
|
||||
#
|
||||
CONFIG_CLASSIC_RCU=y
|
||||
# CONFIG_TREE_RCU is not set
|
||||
# CONFIG_PREEMPT_RCU is not set
|
||||
CONFIG_TREE_RCU=y
|
||||
# CONFIG_TREE_PREEMPT_RCU is not set
|
||||
# CONFIG_RCU_TRACE is not set
|
||||
CONFIG_RCU_FANOUT=32
|
||||
# CONFIG_RCU_FANOUT_EXACT is not set
|
||||
# CONFIG_TREE_RCU_TRACE is not set
|
||||
# CONFIG_PREEMPT_RCU_TRACE is not set
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_LOG_BUF_SHIFT=17
|
||||
@ -260,6 +261,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
|
||||
# CONFIG_NETFILTER is not set
|
||||
# CONFIG_IP_DCCP is not set
|
||||
# CONFIG_IP_SCTP is not set
|
||||
# CONFIG_RDS is not set
|
||||
# CONFIG_TIPC is not set
|
||||
# CONFIG_ATM is not set
|
||||
# CONFIG_BRIDGE is not set
|
||||
@ -357,12 +359,10 @@ CONFIG_NET_ETHERNET=y
|
||||
# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
|
||||
# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
|
||||
# CONFIG_KS8842 is not set
|
||||
CONFIG_XILINX_EMACLITE=y
|
||||
CONFIG_NETDEV_1000=y
|
||||
CONFIG_NETDEV_10000=y
|
||||
|
||||
#
|
||||
# Wireless LAN
|
||||
#
|
||||
CONFIG_WLAN=y
|
||||
# CONFIG_WLAN_PRE80211 is not set
|
||||
# CONFIG_WLAN_80211 is not set
|
||||
|
||||
@ -460,6 +460,7 @@ CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
|
||||
# CONFIG_DISPLAY_SUPPORT is not set
|
||||
# CONFIG_SOUND is not set
|
||||
# CONFIG_USB_SUPPORT is not set
|
||||
CONFIG_USB_ARCH_HAS_EHCI=y
|
||||
# CONFIG_MMC is not set
|
||||
# CONFIG_MEMSTICK is not set
|
||||
# CONFIG_NEW_LEDS is not set
|
||||
@ -488,6 +489,7 @@ CONFIG_EXT2_FS=y
|
||||
# CONFIG_GFS2_FS is not set
|
||||
# CONFIG_OCFS2_FS is not set
|
||||
# CONFIG_BTRFS_FS is not set
|
||||
# CONFIG_NILFS2_FS is not set
|
||||
CONFIG_FILE_LOCKING=y
|
||||
CONFIG_FSNOTIFY=y
|
||||
# CONFIG_DNOTIFY is not set
|
||||
@ -546,7 +548,6 @@ CONFIG_MISC_FILESYSTEMS=y
|
||||
# CONFIG_ROMFS_FS is not set
|
||||
# CONFIG_SYSV_FS is not set
|
||||
# CONFIG_UFS_FS is not set
|
||||
# CONFIG_NILFS2_FS is not set
|
||||
CONFIG_NETWORK_FILESYSTEMS=y
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V3=y
|
||||
@ -671,18 +672,20 @@ CONFIG_DEBUG_INFO=y
|
||||
# CONFIG_DEBUG_LIST is not set
|
||||
# CONFIG_DEBUG_SG is not set
|
||||
# CONFIG_DEBUG_NOTIFIERS is not set
|
||||
# CONFIG_DEBUG_CREDENTIALS is not set
|
||||
# CONFIG_BOOT_PRINTK_DELAY is not set
|
||||
# CONFIG_RCU_TORTURE_TEST is not set
|
||||
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
|
||||
# CONFIG_BACKTRACE_SELF_TEST is not set
|
||||
# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
|
||||
# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
|
||||
# CONFIG_FAULT_INJECTION is not set
|
||||
# CONFIG_SYSCTL_SYSCALL_CHECK is not set
|
||||
# CONFIG_PAGE_POISONING is not set
|
||||
# CONFIG_SAMPLES is not set
|
||||
# CONFIG_KMEMCHECK is not set
|
||||
CONFIG_EARLY_PRINTK=y
|
||||
CONFIG_HEART_BEAT=y
|
||||
# CONFIG_HEART_BEAT is not set
|
||||
CONFIG_DEBUG_BOOTMEM=y
|
||||
|
||||
#
|
||||
@ -697,7 +700,6 @@ CONFIG_CRYPTO=y
|
||||
#
|
||||
# Crypto core or helper
|
||||
#
|
||||
# CONFIG_CRYPTO_FIPS is not set
|
||||
# CONFIG_CRYPTO_MANAGER is not set
|
||||
# CONFIG_CRYPTO_MANAGER2 is not set
|
||||
# CONFIG_CRYPTO_GF128MUL is not set
|
||||
@ -729,11 +731,13 @@ CONFIG_CRYPTO=y
|
||||
#
|
||||
# CONFIG_CRYPTO_HMAC is not set
|
||||
# CONFIG_CRYPTO_XCBC is not set
|
||||
# CONFIG_CRYPTO_VMAC is not set
|
||||
|
||||
#
|
||||
# Digest
|
||||
#
|
||||
# CONFIG_CRYPTO_CRC32C is not set
|
||||
# CONFIG_CRYPTO_GHASH is not set
|
||||
# CONFIG_CRYPTO_MD4 is not set
|
||||
# CONFIG_CRYPTO_MD5 is not set
|
||||
# CONFIG_CRYPTO_MICHAEL_MIC is not set
|
||||
|
@ -1,7 +1,7 @@
|
||||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.31-rc6
|
||||
# Tue Aug 18 10:35:30 2009
|
||||
# Linux kernel version: 2.6.31
|
||||
# Thu Sep 24 10:29:43 2009
|
||||
#
|
||||
CONFIG_MICROBLAZE=y
|
||||
# CONFIG_SWAP is not set
|
||||
@ -44,11 +44,12 @@ CONFIG_BSD_PROCESS_ACCT_V3=y
|
||||
#
|
||||
# RCU Subsystem
|
||||
#
|
||||
CONFIG_CLASSIC_RCU=y
|
||||
# CONFIG_TREE_RCU is not set
|
||||
# CONFIG_PREEMPT_RCU is not set
|
||||
CONFIG_TREE_RCU=y
|
||||
# CONFIG_TREE_PREEMPT_RCU is not set
|
||||
# CONFIG_RCU_TRACE is not set
|
||||
CONFIG_RCU_FANOUT=32
|
||||
# CONFIG_RCU_FANOUT_EXACT is not set
|
||||
# CONFIG_TREE_RCU_TRACE is not set
|
||||
# CONFIG_PREEMPT_RCU_TRACE is not set
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_LOG_BUF_SHIFT=17
|
||||
@ -243,6 +244,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
|
||||
# CONFIG_NETFILTER is not set
|
||||
# CONFIG_IP_DCCP is not set
|
||||
# CONFIG_IP_SCTP is not set
|
||||
# CONFIG_RDS is not set
|
||||
# CONFIG_TIPC is not set
|
||||
# CONFIG_ATM is not set
|
||||
# CONFIG_BRIDGE is not set
|
||||
@ -272,6 +274,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
|
||||
# CONFIG_AF_RXRPC is not set
|
||||
CONFIG_WIRELESS=y
|
||||
# CONFIG_CFG80211 is not set
|
||||
CONFIG_CFG80211_DEFAULT_PS_VALUE=0
|
||||
CONFIG_WIRELESS_OLD_REGULATORY=y
|
||||
# CONFIG_WIRELESS_EXT is not set
|
||||
# CONFIG_LIB80211 is not set
|
||||
@ -279,7 +282,6 @@ CONFIG_WIRELESS_OLD_REGULATORY=y
|
||||
#
|
||||
# CFG80211 needs to be enabled for MAC80211
|
||||
#
|
||||
CONFIG_MAC80211_DEFAULT_PS_VALUE=0
|
||||
# CONFIG_WIMAX is not set
|
||||
# CONFIG_RFKILL is not set
|
||||
# CONFIG_NET_9P is not set
|
||||
@ -304,6 +306,7 @@ CONFIG_MTD_PARTITIONS=y
|
||||
# CONFIG_MTD_TESTS is not set
|
||||
# CONFIG_MTD_REDBOOT_PARTS is not set
|
||||
CONFIG_MTD_CMDLINE_PARTS=y
|
||||
# CONFIG_MTD_OF_PARTS is not set
|
||||
# CONFIG_MTD_AR7_PARTS is not set
|
||||
|
||||
#
|
||||
@ -349,6 +352,7 @@ CONFIG_MTD_RAM=y
|
||||
#
|
||||
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
|
||||
# CONFIG_MTD_PHYSMAP is not set
|
||||
# CONFIG_MTD_PHYSMAP_OF is not set
|
||||
CONFIG_MTD_UCLINUX=y
|
||||
# CONFIG_MTD_PLATRAM is not set
|
||||
|
||||
@ -429,12 +433,10 @@ CONFIG_NET_ETHERNET=y
|
||||
# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
|
||||
# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
|
||||
# CONFIG_KS8842 is not set
|
||||
# CONFIG_XILINX_EMACLITE is not set
|
||||
CONFIG_NETDEV_1000=y
|
||||
CONFIG_NETDEV_10000=y
|
||||
|
||||
#
|
||||
# Wireless LAN
|
||||
#
|
||||
CONFIG_WLAN=y
|
||||
# CONFIG_WLAN_PRE80211 is not set
|
||||
# CONFIG_WLAN_80211 is not set
|
||||
|
||||
@ -535,7 +537,7 @@ CONFIG_VIDEO_OUTPUT_CONTROL=y
|
||||
CONFIG_USB_SUPPORT=y
|
||||
CONFIG_USB_ARCH_HAS_HCD=y
|
||||
# CONFIG_USB_ARCH_HAS_OHCI is not set
|
||||
# CONFIG_USB_ARCH_HAS_EHCI is not set
|
||||
CONFIG_USB_ARCH_HAS_EHCI=y
|
||||
# CONFIG_USB is not set
|
||||
# CONFIG_USB_OTG_WHITELIST is not set
|
||||
# CONFIG_USB_OTG_BLACKLIST_HUB is not set
|
||||
@ -579,6 +581,7 @@ CONFIG_FS_POSIX_ACL=y
|
||||
# CONFIG_GFS2_FS is not set
|
||||
# CONFIG_OCFS2_FS is not set
|
||||
# CONFIG_BTRFS_FS is not set
|
||||
# CONFIG_NILFS2_FS is not set
|
||||
CONFIG_FILE_LOCKING=y
|
||||
CONFIG_FSNOTIFY=y
|
||||
# CONFIG_DNOTIFY is not set
|
||||
@ -639,7 +642,6 @@ CONFIG_ROMFS_BACKED_BY_BLOCK=y
|
||||
CONFIG_ROMFS_ON_BLOCK=y
|
||||
# CONFIG_SYSV_FS is not set
|
||||
# CONFIG_UFS_FS is not set
|
||||
# CONFIG_NILFS2_FS is not set
|
||||
CONFIG_NETWORK_FILESYSTEMS=y
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V3=y
|
||||
@ -710,18 +712,20 @@ CONFIG_DEBUG_INFO=y
|
||||
CONFIG_DEBUG_LIST=y
|
||||
CONFIG_DEBUG_SG=y
|
||||
# CONFIG_DEBUG_NOTIFIERS is not set
|
||||
# CONFIG_DEBUG_CREDENTIALS is not set
|
||||
# CONFIG_BOOT_PRINTK_DELAY is not set
|
||||
# CONFIG_RCU_TORTURE_TEST is not set
|
||||
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
|
||||
# CONFIG_BACKTRACE_SELF_TEST is not set
|
||||
# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
|
||||
# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
|
||||
# CONFIG_FAULT_INJECTION is not set
|
||||
CONFIG_SYSCTL_SYSCALL_CHECK=y
|
||||
# CONFIG_PAGE_POISONING is not set
|
||||
# CONFIG_DYNAMIC_DEBUG is not set
|
||||
# CONFIG_SAMPLES is not set
|
||||
CONFIG_EARLY_PRINTK=y
|
||||
CONFIG_HEART_BEAT=y
|
||||
# CONFIG_HEART_BEAT is not set
|
||||
# CONFIG_DEBUG_BOOTMEM is not set
|
||||
|
||||
#
|
||||
@ -736,7 +740,6 @@ CONFIG_CRYPTO=y
|
||||
#
|
||||
# Crypto core or helper
|
||||
#
|
||||
# CONFIG_CRYPTO_FIPS is not set
|
||||
# CONFIG_CRYPTO_MANAGER is not set
|
||||
# CONFIG_CRYPTO_MANAGER2 is not set
|
||||
# CONFIG_CRYPTO_GF128MUL is not set
|
||||
@ -768,11 +771,13 @@ CONFIG_CRYPTO=y
|
||||
#
|
||||
# CONFIG_CRYPTO_HMAC is not set
|
||||
# CONFIG_CRYPTO_XCBC is not set
|
||||
# CONFIG_CRYPTO_VMAC is not set
|
||||
|
||||
#
|
||||
# Digest
|
||||
#
|
||||
# CONFIG_CRYPTO_CRC32C is not set
|
||||
# CONFIG_CRYPTO_GHASH is not set
|
||||
# CONFIG_CRYPTO_MD4 is not set
|
||||
# CONFIG_CRYPTO_MD5 is not set
|
||||
# CONFIG_CRYPTO_MICHAEL_MIC is not set
|
||||
|
17
arch/microblaze/include/asm/asm-compat.h
Normal file
17
arch/microblaze/include/asm/asm-compat.h
Normal file
@ -0,0 +1,17 @@
|
||||
#ifndef _ASM_MICROBLAZE_ASM_COMPAT_H
|
||||
#define _ASM_MICROBLAZE_ASM_COMPAT_H
|
||||
|
||||
#include <asm/types.h>
|
||||
|
||||
#ifdef __ASSEMBLY__
|
||||
# define stringify_in_c(...) __VA_ARGS__
|
||||
# define ASM_CONST(x) x
|
||||
#else
|
||||
/* This version of stringify will deal with commas... */
|
||||
# define __stringify_in_c(...) #__VA_ARGS__
|
||||
# define stringify_in_c(...) __stringify_in_c(__VA_ARGS__) " "
|
||||
# define __ASM_CONST(x) x##UL
|
||||
# define ASM_CONST(x) __ASM_CONST(x)
|
||||
#endif
|
||||
|
||||
#endif /* _ASM_MICROBLAZE_ASM_COMPAT_H */
|
@ -210,6 +210,9 @@ static inline void __iomem *__ioremap(phys_addr_t address, unsigned long size,
|
||||
#define in_be32(a) __raw_readl((const void __iomem __force *)(a))
|
||||
#define in_be16(a) __raw_readw(a)
|
||||
|
||||
#define writel_be(v, a) out_be32((__force unsigned *)a, v)
|
||||
#define readl_be(a) in_be32((__force unsigned *)a)
|
||||
|
||||
/*
|
||||
* Little endian
|
||||
*/
|
||||
|
@ -1 +0,0 @@
|
||||
#include <asm-generic/ipc.h>
|
@ -17,6 +17,7 @@
|
||||
|
||||
#include <linux/pfn.h>
|
||||
#include <asm/setup.h>
|
||||
#include <asm/asm-compat.h>
|
||||
#include <linux/const.h>
|
||||
|
||||
#ifdef __KERNEL__
|
||||
@ -26,6 +27,8 @@
|
||||
#define PAGE_SIZE (_AC(1, UL) << PAGE_SHIFT)
|
||||
#define PAGE_MASK (~(PAGE_SIZE-1))
|
||||
|
||||
#define LOAD_OFFSET ASM_CONST((CONFIG_KERNEL_START-CONFIG_KERNEL_BASE_ADDR))
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
#define PAGE_UP(addr) (((addr)+((PAGE_SIZE)-1))&(~((PAGE_SIZE)-1)))
|
||||
|
@ -38,7 +38,7 @@ extern void early_console_reg_tlb_alloc(unsigned int addr);
|
||||
void time_init(void);
|
||||
void init_IRQ(void);
|
||||
void machine_early_init(const char *cmdline, unsigned int ram,
|
||||
unsigned int fdt);
|
||||
unsigned int fdt, unsigned int msr);
|
||||
|
||||
void machine_restart(char *cmd);
|
||||
void machine_shutdown(void);
|
||||
|
99
arch/microblaze/include/asm/syscall.h
Normal file
99
arch/microblaze/include/asm/syscall.h
Normal file
@ -0,0 +1,99 @@
|
||||
#ifndef __ASM_MICROBLAZE_SYSCALL_H
|
||||
#define __ASM_MICROBLAZE_SYSCALL_H
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/sched.h>
|
||||
#include <asm/ptrace.h>
|
||||
|
||||
/* The system call number is given by the user in R12 */
|
||||
static inline long syscall_get_nr(struct task_struct *task,
|
||||
struct pt_regs *regs)
|
||||
{
|
||||
return regs->r12;
|
||||
}
|
||||
|
||||
static inline void syscall_rollback(struct task_struct *task,
|
||||
struct pt_regs *regs)
|
||||
{
|
||||
/* TODO. */
|
||||
}
|
||||
|
||||
static inline long syscall_get_error(struct task_struct *task,
|
||||
struct pt_regs *regs)
|
||||
{
|
||||
return IS_ERR_VALUE(regs->r3) ? regs->r3 : 0;
|
||||
}
|
||||
|
||||
static inline long syscall_get_return_value(struct task_struct *task,
|
||||
struct pt_regs *regs)
|
||||
{
|
||||
return regs->r3;
|
||||
}
|
||||
|
||||
static inline void syscall_set_return_value(struct task_struct *task,
|
||||
struct pt_regs *regs,
|
||||
int error, long val)
|
||||
{
|
||||
if (error)
|
||||
regs->r3 = -error;
|
||||
else
|
||||
regs->r3 = val;
|
||||
}
|
||||
|
||||
static inline microblaze_reg_t microblaze_get_syscall_arg(struct pt_regs *regs,
|
||||
unsigned int n)
|
||||
{
|
||||
switch (n) {
|
||||
case 5: return regs->r10;
|
||||
case 4: return regs->r9;
|
||||
case 3: return regs->r8;
|
||||
case 2: return regs->r7;
|
||||
case 1: return regs->r6;
|
||||
case 0: return regs->r5;
|
||||
default:
|
||||
BUG();
|
||||
}
|
||||
return ~0;
|
||||
}
|
||||
|
||||
static inline void microblaze_set_syscall_arg(struct pt_regs *regs,
|
||||
unsigned int n,
|
||||
unsigned long val)
|
||||
{
|
||||
switch (n) {
|
||||
case 5:
|
||||
regs->r10 = val;
|
||||
case 4:
|
||||
regs->r9 = val;
|
||||
case 3:
|
||||
regs->r8 = val;
|
||||
case 2:
|
||||
regs->r7 = val;
|
||||
case 1:
|
||||
regs->r6 = val;
|
||||
case 0:
|
||||
regs->r5 = val;
|
||||
default:
|
||||
BUG();
|
||||
}
|
||||
}
|
||||
|
||||
static inline void syscall_get_arguments(struct task_struct *task,
|
||||
struct pt_regs *regs,
|
||||
unsigned int i, unsigned int n,
|
||||
unsigned long *args)
|
||||
{
|
||||
while (n--)
|
||||
*args++ = microblaze_get_syscall_arg(regs, i++);
|
||||
}
|
||||
|
||||
static inline void syscall_set_arguments(struct task_struct *task,
|
||||
struct pt_regs *regs,
|
||||
unsigned int i, unsigned int n,
|
||||
const unsigned long *args)
|
||||
{
|
||||
while (n--)
|
||||
microblaze_set_syscall_arg(regs, i++, *args++);
|
||||
}
|
||||
|
||||
#endif /* __ASM_MICROBLAZE_SYSCALL_H */
|
@ -28,6 +28,7 @@ const struct cpu_ver_key cpu_ver_lookup[] = {
|
||||
{"7.10.d", 0x0b},
|
||||
{"7.20.a", 0x0c},
|
||||
{"7.20.b", 0x0d},
|
||||
{"7.20.c", 0x0e},
|
||||
/* FIXME There is no keycode defined in MBV for these versions */
|
||||
{"2.10.a", 0x10},
|
||||
{"3.00.a", 0x20},
|
||||
@ -49,6 +50,8 @@ const struct family_string_key family_string_lookup[] = {
|
||||
{"spartan3a", 0xa},
|
||||
{"spartan3an", 0xb},
|
||||
{"spartan3adsp", 0xc},
|
||||
{"spartan6", 0xd},
|
||||
{"virtex6", 0xe},
|
||||
/* FIXME There is no key code defined for spartan2 */
|
||||
{"spartan2", 0xf0},
|
||||
{NULL, 0},
|
||||
|
@ -308,38 +308,69 @@ C_ENTRY(_user_exception):
|
||||
swi r12, r1, PTO+PT_R0;
|
||||
tovirt(r1,r1)
|
||||
|
||||
la r15, r0, ret_from_trap-8
|
||||
/* where the trap should return need -8 to adjust for rtsd r15, 8*/
|
||||
/* Jump to the appropriate function for the system call number in r12
|
||||
* (r12 is not preserved), or return an error if r12 is not valid. The LP
|
||||
* register should point to the location where
|
||||
* the called function should return. [note that MAKE_SYS_CALL uses label 1] */
|
||||
/* See if the system call number is valid. */
|
||||
|
||||
# Step into virtual mode.
|
||||
set_vms;
|
||||
addik r11, r0, 3f
|
||||
rtid r11, 0
|
||||
nop
|
||||
3:
|
||||
add r11, r0, CURRENT_TASK /* Get current task ptr into r11 */
|
||||
lwi r11, r11, TS_THREAD_INFO /* get thread info */
|
||||
lwi r11, r11, TI_FLAGS /* get flags in thread info */
|
||||
andi r11, r11, _TIF_WORK_SYSCALL_MASK
|
||||
beqi r11, 4f
|
||||
|
||||
addik r3, r0, -ENOSYS
|
||||
swi r3, r1, PTO + PT_R3
|
||||
brlid r15, do_syscall_trace_enter
|
||||
addik r5, r1, PTO + PT_R0
|
||||
|
||||
# do_syscall_trace_enter returns the new syscall nr.
|
||||
addk r12, r0, r3
|
||||
lwi r5, r1, PTO+PT_R5;
|
||||
lwi r6, r1, PTO+PT_R6;
|
||||
lwi r7, r1, PTO+PT_R7;
|
||||
lwi r8, r1, PTO+PT_R8;
|
||||
lwi r9, r1, PTO+PT_R9;
|
||||
lwi r10, r1, PTO+PT_R10;
|
||||
4:
|
||||
/* Jump to the appropriate function for the system call number in r12
|
||||
* (r12 is not preserved), or return an error if r12 is not valid.
|
||||
* The LP register should point to the location where the called function
|
||||
* should return. [note that MAKE_SYS_CALL uses label 1] */
|
||||
/* See if the system call number is valid */
|
||||
addi r11, r12, -__NR_syscalls;
|
||||
bgei r11,1f;
|
||||
bgei r11,5f;
|
||||
/* Figure out which function to use for this system call. */
|
||||
/* Note Microblaze barrel shift is optional, so don't rely on it */
|
||||
add r12, r12, r12; /* convert num -> ptr */
|
||||
add r12, r12, r12;
|
||||
|
||||
/* Trac syscalls and stored them to r0_ram */
|
||||
lwi r3, r12, 0x400 + TOPHYS(r0_ram)
|
||||
lwi r3, r12, 0x400 + r0_ram
|
||||
addi r3, r3, 1
|
||||
swi r3, r12, 0x400 + TOPHYS(r0_ram)
|
||||
swi r3, r12, 0x400 + r0_ram
|
||||
|
||||
# Find and jump into the syscall handler.
|
||||
lwi r12, r12, sys_call_table
|
||||
/* where the trap should return need -8 to adjust for rtsd r15, 8 */
|
||||
la r15, r0, ret_from_trap-8
|
||||
bra r12
|
||||
|
||||
lwi r12, r12, TOPHYS(sys_call_table); /* Function ptr */
|
||||
/* Make the system call. to r12*/
|
||||
set_vms;
|
||||
rtid r12, 0;
|
||||
nop;
|
||||
/* The syscall number is invalid, return an error. */
|
||||
1: VM_ON; /* RETURN() expects virtual mode*/
|
||||
5:
|
||||
addi r3, r0, -ENOSYS;
|
||||
rtsd r15,8; /* looks like a normal subroutine return */
|
||||
or r0, r0, r0
|
||||
|
||||
|
||||
/* Entry point used to return from a syscall/trap. */
|
||||
/* Entry point used to return from a syscall/trap */
|
||||
/* We re-enable BIP bit before state restore */
|
||||
C_ENTRY(ret_from_trap):
|
||||
set_bip; /* Ints masked for state restore*/
|
||||
@ -347,6 +378,23 @@ C_ENTRY(ret_from_trap):
|
||||
/* See if returning to kernel mode, if so, skip resched &c. */
|
||||
bnei r11, 2f;
|
||||
|
||||
/* We're returning to user mode, so check for various conditions that
|
||||
* trigger rescheduling. */
|
||||
# FIXME: Restructure all these flag checks.
|
||||
add r11, r0, CURRENT_TASK; /* Get current task ptr into r11 */
|
||||
lwi r11, r11, TS_THREAD_INFO; /* get thread info */
|
||||
lwi r11, r11, TI_FLAGS; /* get flags in thread info */
|
||||
andi r11, r11, _TIF_WORK_SYSCALL_MASK
|
||||
beqi r11, 1f
|
||||
|
||||
swi r3, r1, PTO + PT_R3
|
||||
swi r4, r1, PTO + PT_R4
|
||||
brlid r15, do_syscall_trace_leave
|
||||
addik r5, r1, PTO + PT_R0
|
||||
lwi r3, r1, PTO + PT_R3
|
||||
lwi r4, r1, PTO + PT_R4
|
||||
1:
|
||||
|
||||
/* We're returning to user mode, so check for various conditions that
|
||||
* trigger rescheduling. */
|
||||
/* Get current task ptr into r11 */
|
||||
|
@ -72,7 +72,8 @@ asmlinkage void full_exception(struct pt_regs *regs, unsigned int type,
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
printk(KERN_WARNING "Exception %02x in %s mode, FSR=%08x PC=%08x ESR=%08x\n",
|
||||
printk(KERN_WARNING "Exception %02x in %s mode, FSR=%08x PC=%08x " \
|
||||
"ESR=%08x\n",
|
||||
type, user_mode(regs) ? "user" : "kernel", fsr,
|
||||
(unsigned int) regs->pc, (unsigned int) regs->esr);
|
||||
#endif
|
||||
@ -80,42 +81,50 @@ asmlinkage void full_exception(struct pt_regs *regs, unsigned int type,
|
||||
switch (type & 0x1F) {
|
||||
case MICROBLAZE_ILL_OPCODE_EXCEPTION:
|
||||
if (user_mode(regs)) {
|
||||
printk(KERN_WARNING "Illegal opcode exception in user mode.\n");
|
||||
pr_debug(KERN_WARNING "Illegal opcode exception " \
|
||||
"in user mode.\n");
|
||||
_exception(SIGILL, regs, ILL_ILLOPC, addr);
|
||||
return;
|
||||
}
|
||||
printk(KERN_WARNING "Illegal opcode exception in kernel mode.\n");
|
||||
printk(KERN_WARNING "Illegal opcode exception " \
|
||||
"in kernel mode.\n");
|
||||
die("opcode exception", regs, SIGBUS);
|
||||
break;
|
||||
case MICROBLAZE_IBUS_EXCEPTION:
|
||||
if (user_mode(regs)) {
|
||||
printk(KERN_WARNING "Instruction bus error exception in user mode.\n");
|
||||
pr_debug(KERN_WARNING "Instruction bus error " \
|
||||
"exception in user mode.\n");
|
||||
_exception(SIGBUS, regs, BUS_ADRERR, addr);
|
||||
return;
|
||||
}
|
||||
printk(KERN_WARNING "Instruction bus error exception in kernel mode.\n");
|
||||
printk(KERN_WARNING "Instruction bus error exception " \
|
||||
"in kernel mode.\n");
|
||||
die("bus exception", regs, SIGBUS);
|
||||
break;
|
||||
case MICROBLAZE_DBUS_EXCEPTION:
|
||||
if (user_mode(regs)) {
|
||||
printk(KERN_WARNING "Data bus error exception in user mode.\n");
|
||||
pr_debug(KERN_WARNING "Data bus error exception " \
|
||||
"in user mode.\n");
|
||||
_exception(SIGBUS, regs, BUS_ADRERR, addr);
|
||||
return;
|
||||
}
|
||||
printk(KERN_WARNING "Data bus error exception in kernel mode.\n");
|
||||
printk(KERN_WARNING "Data bus error exception " \
|
||||
"in kernel mode.\n");
|
||||
die("bus exception", regs, SIGBUS);
|
||||
break;
|
||||
case MICROBLAZE_DIV_ZERO_EXCEPTION:
|
||||
if (user_mode(regs)) {
|
||||
printk(KERN_WARNING "Divide by zero exception in user mode\n");
|
||||
_exception(SIGILL, regs, ILL_ILLOPC, addr);
|
||||
pr_debug(KERN_WARNING "Divide by zero exception " \
|
||||
"in user mode\n");
|
||||
_exception(SIGILL, regs, FPE_INTDIV, addr);
|
||||
return;
|
||||
}
|
||||
printk(KERN_WARNING "Divide by zero exception in kernel mode.\n");
|
||||
printk(KERN_WARNING "Divide by zero exception " \
|
||||
"in kernel mode.\n");
|
||||
die("Divide by exception", regs, SIGBUS);
|
||||
break;
|
||||
case MICROBLAZE_FPU_EXCEPTION:
|
||||
printk(KERN_WARNING "FPU exception\n");
|
||||
pr_debug(KERN_WARNING "FPU exception\n");
|
||||
/* IEEE FP exception */
|
||||
/* I removed fsr variable and use code var for storing fsr */
|
||||
if (fsr & FSR_IO)
|
||||
@ -133,7 +142,7 @@ asmlinkage void full_exception(struct pt_regs *regs, unsigned int type,
|
||||
|
||||
#ifdef CONFIG_MMU
|
||||
case MICROBLAZE_PRIVILEGED_EXCEPTION:
|
||||
printk(KERN_WARNING "Privileged exception\n");
|
||||
pr_debug(KERN_WARNING "Privileged exception\n");
|
||||
/* "brk r0,r0" - used as debug breakpoint */
|
||||
if (get_user(code, (unsigned long *)regs->pc) == 0
|
||||
&& code == 0x980c0000) {
|
||||
|
@ -54,6 +54,16 @@ ENTRY(_start)
|
||||
mfs r1, rmsr
|
||||
andi r1, r1, ~2
|
||||
mts rmsr, r1
|
||||
/*
|
||||
* Here is checking mechanism which check if Microblaze has msr instructions
|
||||
* We load msr and compare it with previous r1 value - if is the same,
|
||||
* msr instructions works if not - cpu don't have them.
|
||||
*/
|
||||
/* r8=0 - I have msr instr, 1 - I don't have them */
|
||||
rsubi r0, r0, 1 /* set the carry bit */
|
||||
msrclr r0, 0x4 /* try to clear it */
|
||||
/* read the carry bit, r8 will be '0' if msrclr exists */
|
||||
addik r8, r0, 0
|
||||
|
||||
/* r7 may point to an FDT, or there may be one linked in.
|
||||
if it's in r7, we've got to save it away ASAP.
|
||||
@ -209,8 +219,8 @@ start_here:
|
||||
* Please see $(ARCH)/mach-$(SUBARCH)/setup.c for
|
||||
* the function.
|
||||
*/
|
||||
la r8, r0, machine_early_init
|
||||
brald r15, r8
|
||||
la r9, r0, machine_early_init
|
||||
brald r15, r9
|
||||
nop
|
||||
|
||||
#ifndef CONFIG_MMU
|
||||
|
@ -84,9 +84,10 @@
|
||||
#define NUM_TO_REG(num) r ## num
|
||||
|
||||
#ifdef CONFIG_MMU
|
||||
/* FIXME you can't change first load of MSR because there is
|
||||
* hardcoded jump bri 4 */
|
||||
#define RESTORE_STATE \
|
||||
lwi r5, r1, 0; \
|
||||
mts rmsr, r5; \
|
||||
nop; \
|
||||
lwi r3, r1, PT_R3; \
|
||||
lwi r4, r1, PT_R4; \
|
||||
lwi r5, r1, PT_R5; \
|
||||
@ -309,6 +310,9 @@ _hw_exception_handler:
|
||||
lwi r31, r0, TOPHYS(PER_CPU(CURRENT_SAVE)) /* get saved current */
|
||||
#endif
|
||||
|
||||
mfs r5, rmsr;
|
||||
nop
|
||||
swi r5, r1, 0;
|
||||
mfs r3, resr
|
||||
nop
|
||||
mfs r4, rear;
|
||||
@ -380,6 +384,8 @@ handle_other_ex: /* Handle Other exceptions here */
|
||||
addk r8, r17, r0; /* Load exception address */
|
||||
bralid r15, full_exception; /* Branch to the handler */
|
||||
nop;
|
||||
mts r0, rfsr; /* Clear sticky fsr */
|
||||
nop
|
||||
|
||||
/*
|
||||
* Trigger execution of the signal handler by enabling
|
||||
|
@ -235,6 +235,7 @@ void start_thread(struct pt_regs *regs, unsigned long pc, unsigned long usp)
|
||||
regs->pc = pc;
|
||||
regs->r1 = usp;
|
||||
regs->pt_mode = 0;
|
||||
regs->msr |= MSR_UMS;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MMU
|
||||
|
@ -29,6 +29,10 @@
|
||||
#include <linux/sched.h>
|
||||
#include <linux/ptrace.h>
|
||||
#include <linux/signal.h>
|
||||
#include <linux/elf.h>
|
||||
#include <linux/audit.h>
|
||||
#include <linux/seccomp.h>
|
||||
#include <linux/tracehook.h>
|
||||
|
||||
#include <linux/errno.h>
|
||||
#include <asm/processor.h>
|
||||
@ -174,6 +178,64 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
|
||||
return rval;
|
||||
}
|
||||
|
||||
asmlinkage long do_syscall_trace_enter(struct pt_regs *regs)
|
||||
{
|
||||
long ret = 0;
|
||||
|
||||
secure_computing(regs->r12);
|
||||
|
||||
if (test_thread_flag(TIF_SYSCALL_TRACE) &&
|
||||
tracehook_report_syscall_entry(regs))
|
||||
/*
|
||||
* Tracing decided this syscall should not happen.
|
||||
* We'll return a bogus call number to get an ENOSYS
|
||||
* error, but leave the original number in regs->regs[0].
|
||||
*/
|
||||
ret = -1L;
|
||||
|
||||
if (unlikely(current->audit_context))
|
||||
audit_syscall_entry(EM_XILINX_MICROBLAZE, regs->r12,
|
||||
regs->r5, regs->r6,
|
||||
regs->r7, regs->r8);
|
||||
|
||||
return ret ?: regs->r12;
|
||||
}
|
||||
|
||||
asmlinkage void do_syscall_trace_leave(struct pt_regs *regs)
|
||||
{
|
||||
int step;
|
||||
|
||||
if (unlikely(current->audit_context))
|
||||
audit_syscall_exit(AUDITSC_RESULT(regs->r3), regs->r3);
|
||||
|
||||
step = test_thread_flag(TIF_SINGLESTEP);
|
||||
if (step || test_thread_flag(TIF_SYSCALL_TRACE))
|
||||
tracehook_report_syscall_exit(regs, step);
|
||||
}
|
||||
|
||||
#if 0
|
||||
static asmlinkage void syscall_trace(void)
|
||||
{
|
||||
if (!test_thread_flag(TIF_SYSCALL_TRACE))
|
||||
return;
|
||||
if (!(current->ptrace & PT_PTRACED))
|
||||
return;
|
||||
/* The 0x80 provides a way for the tracing parent to distinguish
|
||||
between a syscall stop and SIGTRAP delivery */
|
||||
ptrace_notify(SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD)
|
||||
? 0x80 : 0));
|
||||
/*
|
||||
* this isn't the same as continuing with a signal, but it will do
|
||||
* for normal use. strace only continues with a signal if the
|
||||
* stopping signal is not SIGTRAP. -brl
|
||||
*/
|
||||
if (current->exit_code) {
|
||||
send_sig(current->exit_code, current, 1);
|
||||
current->exit_code = 0;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
void ptrace_disable(struct task_struct *child)
|
||||
{
|
||||
/* nothing to do */
|
||||
|
@ -94,7 +94,7 @@ inline unsigned get_romfs_len(unsigned *addr)
|
||||
#endif /* CONFIG_MTD_UCLINUX_EBSS */
|
||||
|
||||
void __init machine_early_init(const char *cmdline, unsigned int ram,
|
||||
unsigned int fdt)
|
||||
unsigned int fdt, unsigned int msr)
|
||||
{
|
||||
unsigned long *src, *dst = (unsigned long *)0x0;
|
||||
|
||||
@ -157,6 +157,16 @@ void __init machine_early_init(const char *cmdline, unsigned int ram,
|
||||
early_printk("New klimit: 0x%08x\n", (unsigned)klimit);
|
||||
#endif
|
||||
|
||||
#if CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR
|
||||
if (msr)
|
||||
early_printk("!!!Your kernel has setup MSR instruction but "
|
||||
"CPU don't have it %d\n", msr);
|
||||
#else
|
||||
if (!msr)
|
||||
early_printk("!!!Your kernel not setup MSR instruction but "
|
||||
"CPU have it %d\n", msr);
|
||||
#endif
|
||||
|
||||
for (src = __ivt_start; src < __ivt_end; src++, dst++)
|
||||
*dst = *src;
|
||||
|
||||
|
@ -12,13 +12,16 @@ OUTPUT_FORMAT("elf32-microblaze", "elf32-microblaze", "elf32-microblaze")
|
||||
OUTPUT_ARCH(microblaze)
|
||||
ENTRY(_start)
|
||||
|
||||
#include <asm/page.h>
|
||||
#include <asm-generic/vmlinux.lds.h>
|
||||
#include <asm/thread_info.h>
|
||||
|
||||
jiffies = jiffies_64 + 4;
|
||||
|
||||
SECTIONS {
|
||||
. = CONFIG_KERNEL_START;
|
||||
.text : {
|
||||
_start = CONFIG_KERNEL_BASE_ADDR;
|
||||
.text : AT(ADDR(.text) - LOAD_OFFSET) {
|
||||
_text = . ;
|
||||
_stext = . ;
|
||||
*(.text .text.*)
|
||||
@ -33,24 +36,22 @@ SECTIONS {
|
||||
}
|
||||
|
||||
. = ALIGN (4) ;
|
||||
_fdt_start = . ; /* place for fdt blob */
|
||||
. = . + 0x4000;
|
||||
_fdt_end = . ;
|
||||
__fdt_blob : AT(ADDR(__fdt_blob) - LOAD_OFFSET) {
|
||||
_fdt_start = . ; /* place for fdt blob */
|
||||
*(__fdt_blob) ; /* Any link-placed DTB */
|
||||
. = _fdt_start + 0x4000; /* Pad up to 16kbyte */
|
||||
_fdt_end = . ;
|
||||
}
|
||||
|
||||
. = ALIGN(16);
|
||||
RODATA
|
||||
. = ALIGN(16);
|
||||
__ex_table : {
|
||||
__start___ex_table = .;
|
||||
*(__ex_table)
|
||||
__stop___ex_table = .;
|
||||
}
|
||||
EXCEPTION_TABLE(16)
|
||||
|
||||
/*
|
||||
* sdata2 section can go anywhere, but must be word aligned
|
||||
* and SDA2_BASE must point to the middle of it
|
||||
*/
|
||||
.sdata2 : {
|
||||
.sdata2 : AT(ADDR(.sdata2) - LOAD_OFFSET) {
|
||||
_ssrw = .;
|
||||
. = ALIGN(4096); /* page aligned when MMU used - origin 0x8 */
|
||||
*(.sdata2)
|
||||
@ -61,12 +62,7 @@ SECTIONS {
|
||||
}
|
||||
|
||||
_sdata = . ;
|
||||
.data ALIGN (4096) : { /* page aligned when MMU used - origin 0x4 */
|
||||
DATA_DATA
|
||||
CONSTRUCTORS
|
||||
}
|
||||
. = ALIGN(32);
|
||||
.data.cacheline_aligned : { *(.data.cacheline_aligned) }
|
||||
RW_DATA_SECTION(32, PAGE_SIZE, THREAD_SIZE)
|
||||
_edata = . ;
|
||||
|
||||
/* Reserve some low RAM for r0 based memory references */
|
||||
@ -74,18 +70,14 @@ SECTIONS {
|
||||
r0_ram = . ;
|
||||
. = . + 4096; /* a page should be enough */
|
||||
|
||||
/* The initial task */
|
||||
. = ALIGN(8192);
|
||||
.data.init_task : { *(.data.init_task) }
|
||||
|
||||
/* Under the microblaze ABI, .sdata and .sbss must be contiguous */
|
||||
. = ALIGN(8);
|
||||
.sdata : {
|
||||
.sdata : AT(ADDR(.sdata) - LOAD_OFFSET) {
|
||||
_ssro = .;
|
||||
*(.sdata)
|
||||
}
|
||||
|
||||
.sbss : {
|
||||
.sbss : AT(ADDR(.sbss) - LOAD_OFFSET) {
|
||||
_ssbss = .;
|
||||
*(.sbss)
|
||||
_esbss = .;
|
||||
@ -96,47 +88,36 @@ SECTIONS {
|
||||
|
||||
__init_begin = .;
|
||||
|
||||
. = ALIGN(4096);
|
||||
.init.text : {
|
||||
_sinittext = . ;
|
||||
INIT_TEXT
|
||||
_einittext = .;
|
||||
}
|
||||
INIT_TEXT_SECTION(PAGE_SIZE)
|
||||
|
||||
.init.data : {
|
||||
.init.data : AT(ADDR(.init.data) - LOAD_OFFSET) {
|
||||
INIT_DATA
|
||||
}
|
||||
|
||||
. = ALIGN(4);
|
||||
.init.ivt : {
|
||||
.init.ivt : AT(ADDR(.init.ivt) - LOAD_OFFSET) {
|
||||
__ivt_start = .;
|
||||
*(.init.ivt)
|
||||
__ivt_end = .;
|
||||
}
|
||||
|
||||
.init.setup : {
|
||||
__setup_start = .;
|
||||
*(.init.setup)
|
||||
__setup_end = .;
|
||||
.init.setup : AT(ADDR(.init.setup) - LOAD_OFFSET) {
|
||||
INIT_SETUP(0)
|
||||
}
|
||||
|
||||
.initcall.init : {
|
||||
__initcall_start = .;
|
||||
INITCALLS
|
||||
__initcall_end = .;
|
||||
.initcall.init : AT(ADDR(.initcall.init) - LOAD_OFFSET ) {
|
||||
INIT_CALLS
|
||||
}
|
||||
|
||||
.con_initcall.init : {
|
||||
__con_initcall_start = .;
|
||||
*(.con_initcall.init)
|
||||
__con_initcall_end = .;
|
||||
.con_initcall.init : AT(ADDR(.con_initcall.init) - LOAD_OFFSET) {
|
||||
CON_INITCALL
|
||||
}
|
||||
|
||||
SECURITY_INIT
|
||||
|
||||
__init_end_before_initramfs = .;
|
||||
|
||||
.init.ramfs ALIGN(4096) : {
|
||||
.init.ramfs ALIGN(4096) : AT(ADDR(.init.ramfs) - LOAD_OFFSET) {
|
||||
__initramfs_start = .;
|
||||
*(.init.ramfs)
|
||||
__initramfs_end = .;
|
||||
@ -152,7 +133,8 @@ SECTIONS {
|
||||
}
|
||||
__init_end = .;
|
||||
|
||||
.bss ALIGN (4096) : { /* page aligned when MMU used */
|
||||
.bss ALIGN (4096) : AT(ADDR(.bss) - LOAD_OFFSET) {
|
||||
/* page aligned when MMU used */
|
||||
__bss_start = . ;
|
||||
*(.bss*)
|
||||
*(COMMON)
|
||||
|
@ -180,7 +180,8 @@ void free_initrd_mem(unsigned long start, unsigned long end)
|
||||
totalram_pages++;
|
||||
pages++;
|
||||
}
|
||||
printk(KERN_NOTICE "Freeing initrd memory: %dk freed\n", pages);
|
||||
printk(KERN_NOTICE "Freeing initrd memory: %dk freed\n",
|
||||
(int)(pages * (PAGE_SIZE / 1024)));
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -159,7 +159,7 @@ config MTD_AFS_PARTS
|
||||
|
||||
config MTD_OF_PARTS
|
||||
tristate "Flash partition map based on OF description"
|
||||
depends on PPC_OF && MTD_PARTITIONS
|
||||
depends on (MICROBLAZE || PPC_OF) && MTD_PARTITIONS
|
||||
help
|
||||
This provides a partition parsing function which derives
|
||||
the partition map from the children of the flash node,
|
||||
|
@ -74,7 +74,7 @@ config MTD_PHYSMAP_BANKWIDTH
|
||||
|
||||
config MTD_PHYSMAP_OF
|
||||
tristate "Flash device in physical memory map based on OF description"
|
||||
depends on PPC_OF && (MTD_CFI || MTD_JEDECPROBE || MTD_ROM)
|
||||
depends on (MICROBLAZE || PPC_OF) && (MTD_CFI || MTD_JEDECPROBE || MTD_ROM)
|
||||
help
|
||||
This provides a 'mapping' driver which allows the NOR Flash and
|
||||
ROM driver code to communicate with chips which are mapped
|
||||
|
@ -22,7 +22,6 @@ config USB_ARCH_HAS_HCD
|
||||
default y if PCMCIA && !M32R # sl811_cs
|
||||
default y if ARM # SL-811
|
||||
default y if SUPERH # r8a66597-hcd
|
||||
default y if MICROBLAZE
|
||||
default PCI
|
||||
|
||||
# many non-PCI SOC chips embed OHCI
|
||||
|
@ -34,7 +34,7 @@ config GCOV_KERNEL
|
||||
config GCOV_PROFILE_ALL
|
||||
bool "Profile entire Kernel"
|
||||
depends on GCOV_KERNEL
|
||||
depends on S390 || X86 || (PPC && EXPERIMENTAL)
|
||||
depends on S390 || X86 || (PPC && EXPERIMENTAL) || MICROBLAZE
|
||||
default n
|
||||
---help---
|
||||
This options activates profiling for the entire kernel.
|
||||
|
Loading…
Reference in New Issue
Block a user