Commit a6b49cb2 authored by Linus Torvalds's avatar Linus Torvalds

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
  ...
parents 2c9871de bfc81258
...@@ -6,6 +6,7 @@ mainmenu "Linux/Microblaze Kernel Configuration" ...@@ -6,6 +6,7 @@ mainmenu "Linux/Microblaze Kernel Configuration"
config MICROBLAZE config MICROBLAZE
def_bool y def_bool y
select HAVE_LMB select HAVE_LMB
select USB_ARCH_HAS_EHCI
select ARCH_WANT_OPTIONAL_GPIOLIB select ARCH_WANT_OPTIONAL_GPIOLIB
config SWAP config SWAP
......
...@@ -37,12 +37,12 @@ CPUFLAGS-$(CONFIG_XILINX_MICROBLAZE0_USE_PCMP_INSTR) += -mxl-pattern-compare ...@@ -37,12 +37,12 @@ CPUFLAGS-$(CONFIG_XILINX_MICROBLAZE0_USE_PCMP_INSTR) += -mxl-pattern-compare
CPUFLAGS-1 += $(call cc-option,-mcpu=v$(CPU_VER)) CPUFLAGS-1 += $(call cc-option,-mcpu=v$(CPU_VER))
# r31 holds current when in kernel mode # 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 :=
LDFLAGS_vmlinux := 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 head-y := arch/microblaze/kernel/head.o
libs-y += arch/microblaze/lib/ libs-y += arch/microblaze/lib/
...@@ -53,22 +53,41 @@ core-y += arch/microblaze/platform/ ...@@ -53,22 +53,41 @@ core-y += arch/microblaze/platform/
boot := arch/microblaze/boot 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 # defines filename extension depending memory management type
ifeq ($(CONFIG_MMU),) ifeq ($(CONFIG_MMU),)
MMU := -nommu MMU := -nommu
endif endif
export MMU export MMU DTB
all: linux.bin all: linux.bin
BOOT_TARGETS = linux.bin linux.bin.gz simpleImage.%
archclean: archclean:
$(Q)$(MAKE) $(clean)=$(boot) $(Q)$(MAKE) $(clean)=$(boot)
linux.bin linux.bin.gz: vmlinux $(BOOT_TARGETS): vmlinux
$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@ $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
define archhelp define archhelp
echo '* linux.bin - Create raw binary' echo '* linux.bin - Create raw binary'
echo ' linux.bin.gz - Create compressed 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 endef
...@@ -2,10 +2,24 @@ ...@@ -2,10 +2,24 @@
# arch/microblaze/boot/Makefile # 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 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 $(obj)/linux.bin: vmlinux FORCE
[ -n $(CONFIG_INITRAMFS_SOURCE) ] && [ ! -e $(CONFIG_INITRAMFS_SOURCE) ] && \ [ -n $(CONFIG_INITRAMFS_SOURCE) ] && [ ! -e $(CONFIG_INITRAMFS_SOURCE) ] && \
touch $(CONFIG_INITRAMFS_SOURCE) || echo "No CPIO image" touch $(CONFIG_INITRAMFS_SOURCE) || echo "No CPIO image"
...@@ -16,4 +30,27 @@ $(obj)/linux.bin.gz: $(obj)/linux.bin FORCE ...@@ -16,4 +30,27 @@ $(obj)/linux.bin.gz: $(obj)/linux.bin FORCE
$(call if_changed,gzip) $(call if_changed,gzip)
@echo 'Kernel: $@ is ready' ' (#'`cat .version`')' @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
../../platform/generic/system.dts
\ No newline at end of file
.section __fdt_blob,"a"
.incbin "arch/microblaze/boot/system.dtb"
# #
# Automatically generated make config: don't edit # Automatically generated make config: don't edit
# Linux kernel version: 2.6.31-rc6 # Linux kernel version: 2.6.31
# Tue Aug 18 11:00:02 2009 # Thu Sep 24 10:28:50 2009
# #
CONFIG_MICROBLAZE=y CONFIG_MICROBLAZE=y
# CONFIG_SWAP is not set # CONFIG_SWAP is not set
...@@ -42,11 +42,12 @@ CONFIG_SYSVIPC_SYSCTL=y ...@@ -42,11 +42,12 @@ CONFIG_SYSVIPC_SYSCTL=y
# #
# RCU Subsystem # RCU Subsystem
# #
CONFIG_CLASSIC_RCU=y CONFIG_TREE_RCU=y
# CONFIG_TREE_RCU is not set # CONFIG_TREE_PREEMPT_RCU is not set
# CONFIG_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_TREE_RCU_TRACE is not set
# CONFIG_PREEMPT_RCU_TRACE is not set
CONFIG_IKCONFIG=y CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y CONFIG_IKCONFIG_PROC=y
CONFIG_LOG_BUF_SHIFT=17 CONFIG_LOG_BUF_SHIFT=17
...@@ -260,6 +261,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic" ...@@ -260,6 +261,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
# CONFIG_NETFILTER is not set # CONFIG_NETFILTER is not set
# CONFIG_IP_DCCP is not set # CONFIG_IP_DCCP is not set
# CONFIG_IP_SCTP is not set # CONFIG_IP_SCTP is not set
# CONFIG_RDS is not set
# CONFIG_TIPC is not set # CONFIG_TIPC is not set
# CONFIG_ATM is not set # CONFIG_ATM is not set
# CONFIG_BRIDGE is not set # CONFIG_BRIDGE is not set
...@@ -357,12 +359,10 @@ CONFIG_NET_ETHERNET=y ...@@ -357,12 +359,10 @@ CONFIG_NET_ETHERNET=y
# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
# CONFIG_KS8842 is not set # CONFIG_KS8842 is not set
CONFIG_XILINX_EMACLITE=y
CONFIG_NETDEV_1000=y CONFIG_NETDEV_1000=y
CONFIG_NETDEV_10000=y CONFIG_NETDEV_10000=y
CONFIG_WLAN=y
#
# Wireless LAN
#
# CONFIG_WLAN_PRE80211 is not set # CONFIG_WLAN_PRE80211 is not set
# CONFIG_WLAN_80211 is not set # CONFIG_WLAN_80211 is not set
...@@ -460,6 +460,7 @@ CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y ...@@ -460,6 +460,7 @@ CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
# CONFIG_DISPLAY_SUPPORT is not set # CONFIG_DISPLAY_SUPPORT is not set
# CONFIG_SOUND is not set # CONFIG_SOUND is not set
# CONFIG_USB_SUPPORT is not set # CONFIG_USB_SUPPORT is not set
CONFIG_USB_ARCH_HAS_EHCI=y
# CONFIG_MMC is not set # CONFIG_MMC is not set
# CONFIG_MEMSTICK is not set # CONFIG_MEMSTICK is not set
# CONFIG_NEW_LEDS is not set # CONFIG_NEW_LEDS is not set
...@@ -488,6 +489,7 @@ CONFIG_EXT2_FS=y ...@@ -488,6 +489,7 @@ CONFIG_EXT2_FS=y
# CONFIG_GFS2_FS is not set # CONFIG_GFS2_FS is not set
# CONFIG_OCFS2_FS is not set # CONFIG_OCFS2_FS is not set
# CONFIG_BTRFS_FS is not set # CONFIG_BTRFS_FS is not set
# CONFIG_NILFS2_FS is not set
CONFIG_FILE_LOCKING=y CONFIG_FILE_LOCKING=y
CONFIG_FSNOTIFY=y CONFIG_FSNOTIFY=y
# CONFIG_DNOTIFY is not set # CONFIG_DNOTIFY is not set
...@@ -546,7 +548,6 @@ CONFIG_MISC_FILESYSTEMS=y ...@@ -546,7 +548,6 @@ CONFIG_MISC_FILESYSTEMS=y
# CONFIG_ROMFS_FS is not set # CONFIG_ROMFS_FS is not set
# CONFIG_SYSV_FS is not set # CONFIG_SYSV_FS is not set
# CONFIG_UFS_FS is not set # CONFIG_UFS_FS is not set
# CONFIG_NILFS2_FS is not set
CONFIG_NETWORK_FILESYSTEMS=y CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NFS_FS=y CONFIG_NFS_FS=y
CONFIG_NFS_V3=y CONFIG_NFS_V3=y
...@@ -671,18 +672,20 @@ CONFIG_DEBUG_INFO=y ...@@ -671,18 +672,20 @@ CONFIG_DEBUG_INFO=y
# CONFIG_DEBUG_LIST is not set # CONFIG_DEBUG_LIST is not set
# CONFIG_DEBUG_SG is not set # CONFIG_DEBUG_SG is not set
# CONFIG_DEBUG_NOTIFIERS is not set # CONFIG_DEBUG_NOTIFIERS is not set
# CONFIG_DEBUG_CREDENTIALS is not set
# CONFIG_BOOT_PRINTK_DELAY is not set # CONFIG_BOOT_PRINTK_DELAY is not set
# CONFIG_RCU_TORTURE_TEST is not set # CONFIG_RCU_TORTURE_TEST is not set
# CONFIG_RCU_CPU_STALL_DETECTOR is not set # CONFIG_RCU_CPU_STALL_DETECTOR is not set
# CONFIG_BACKTRACE_SELF_TEST is not set # CONFIG_BACKTRACE_SELF_TEST is not set
# CONFIG_DEBUG_BLOCK_EXT_DEVT 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_FAULT_INJECTION is not set
# CONFIG_SYSCTL_SYSCALL_CHECK is not set # CONFIG_SYSCTL_SYSCALL_CHECK is not set
# CONFIG_PAGE_POISONING is not set # CONFIG_PAGE_POISONING is not set
# CONFIG_SAMPLES is not set # CONFIG_SAMPLES is not set
# CONFIG_KMEMCHECK is not set # CONFIG_KMEMCHECK is not set
CONFIG_EARLY_PRINTK=y CONFIG_EARLY_PRINTK=y
CONFIG_HEART_BEAT=y # CONFIG_HEART_BEAT is not set
CONFIG_DEBUG_BOOTMEM=y CONFIG_DEBUG_BOOTMEM=y
# #
...@@ -697,7 +700,6 @@ CONFIG_CRYPTO=y ...@@ -697,7 +700,6 @@ CONFIG_CRYPTO=y
# #
# Crypto core or helper # Crypto core or helper
# #
# CONFIG_CRYPTO_FIPS is not set
# CONFIG_CRYPTO_MANAGER is not set # CONFIG_CRYPTO_MANAGER is not set
# CONFIG_CRYPTO_MANAGER2 is not set # CONFIG_CRYPTO_MANAGER2 is not set
# CONFIG_CRYPTO_GF128MUL is not set # CONFIG_CRYPTO_GF128MUL is not set
...@@ -729,11 +731,13 @@ CONFIG_CRYPTO=y ...@@ -729,11 +731,13 @@ CONFIG_CRYPTO=y
# #
# CONFIG_CRYPTO_HMAC is not set # CONFIG_CRYPTO_HMAC is not set
# CONFIG_CRYPTO_XCBC is not set # CONFIG_CRYPTO_XCBC is not set
# CONFIG_CRYPTO_VMAC is not set
# #
# Digest # Digest
# #
# CONFIG_CRYPTO_CRC32C is not set # CONFIG_CRYPTO_CRC32C is not set
# CONFIG_CRYPTO_GHASH is not set
# CONFIG_CRYPTO_MD4 is not set # CONFIG_CRYPTO_MD4 is not set
# CONFIG_CRYPTO_MD5 is not set # CONFIG_CRYPTO_MD5 is not set
# CONFIG_CRYPTO_MICHAEL_MIC is not set # CONFIG_CRYPTO_MICHAEL_MIC is not set
......
# #
# Automatically generated make config: don't edit # Automatically generated make config: don't edit
# Linux kernel version: 2.6.31-rc6 # Linux kernel version: 2.6.31
# Tue Aug 18 10:35:30 2009 # Thu Sep 24 10:29:43 2009
# #
CONFIG_MICROBLAZE=y CONFIG_MICROBLAZE=y
# CONFIG_SWAP is not set # CONFIG_SWAP is not set
...@@ -44,11 +44,12 @@ CONFIG_BSD_PROCESS_ACCT_V3=y ...@@ -44,11 +44,12 @@ CONFIG_BSD_PROCESS_ACCT_V3=y
# #
# RCU Subsystem # RCU Subsystem
# #
CONFIG_CLASSIC_RCU=y CONFIG_TREE_RCU=y
# CONFIG_TREE_RCU is not set # CONFIG_TREE_PREEMPT_RCU is not set
# CONFIG_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_TREE_RCU_TRACE is not set
# CONFIG_PREEMPT_RCU_TRACE is not set
CONFIG_IKCONFIG=y CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y CONFIG_IKCONFIG_PROC=y
CONFIG_LOG_BUF_SHIFT=17 CONFIG_LOG_BUF_SHIFT=17
...@@ -243,6 +244,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic" ...@@ -243,6 +244,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
# CONFIG_NETFILTER is not set # CONFIG_NETFILTER is not set
# CONFIG_IP_DCCP is not set # CONFIG_IP_DCCP is not set
# CONFIG_IP_SCTP is not set # CONFIG_IP_SCTP is not set
# CONFIG_RDS is not set
# CONFIG_TIPC is not set # CONFIG_TIPC is not set
# CONFIG_ATM is not set # CONFIG_ATM is not set
# CONFIG_BRIDGE is not set # CONFIG_BRIDGE is not set
...@@ -272,6 +274,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic" ...@@ -272,6 +274,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
# CONFIG_AF_RXRPC is not set # CONFIG_AF_RXRPC is not set
CONFIG_WIRELESS=y CONFIG_WIRELESS=y
# CONFIG_CFG80211 is not set # CONFIG_CFG80211 is not set
CONFIG_CFG80211_DEFAULT_PS_VALUE=0
CONFIG_WIRELESS_OLD_REGULATORY=y CONFIG_WIRELESS_OLD_REGULATORY=y
# CONFIG_WIRELESS_EXT is not set # CONFIG_WIRELESS_EXT is not set
# CONFIG_LIB80211 is not set # CONFIG_LIB80211 is not set
...@@ -279,7 +282,6 @@ CONFIG_WIRELESS_OLD_REGULATORY=y ...@@ -279,7 +282,6 @@ CONFIG_WIRELESS_OLD_REGULATORY=y
# #
# CFG80211 needs to be enabled for MAC80211 # CFG80211 needs to be enabled for MAC80211
# #
CONFIG_MAC80211_DEFAULT_PS_VALUE=0
# CONFIG_WIMAX is not set # CONFIG_WIMAX is not set
# CONFIG_RFKILL is not set # CONFIG_RFKILL is not set
# CONFIG_NET_9P is not set # CONFIG_NET_9P is not set
...@@ -304,6 +306,7 @@ CONFIG_MTD_PARTITIONS=y ...@@ -304,6 +306,7 @@ CONFIG_MTD_PARTITIONS=y
# CONFIG_MTD_TESTS is not set # CONFIG_MTD_TESTS is not set
# CONFIG_MTD_REDBOOT_PARTS is not set # CONFIG_MTD_REDBOOT_PARTS is not set
CONFIG_MTD_CMDLINE_PARTS=y CONFIG_MTD_CMDLINE_PARTS=y
# CONFIG_MTD_OF_PARTS is not set
# CONFIG_MTD_AR7_PARTS is not set # CONFIG_MTD_AR7_PARTS is not set
# #
...@@ -349,6 +352,7 @@ CONFIG_MTD_RAM=y ...@@ -349,6 +352,7 @@ CONFIG_MTD_RAM=y
# #
# CONFIG_MTD_COMPLEX_MAPPINGS is not set # CONFIG_MTD_COMPLEX_MAPPINGS is not set
# CONFIG_MTD_PHYSMAP is not set # CONFIG_MTD_PHYSMAP is not set
# CONFIG_MTD_PHYSMAP_OF is not set
CONFIG_MTD_UCLINUX=y CONFIG_MTD_UCLINUX=y
# CONFIG_MTD_PLATRAM is not set # CONFIG_MTD_PLATRAM is not set
...@@ -429,12 +433,10 @@ CONFIG_NET_ETHERNET=y ...@@ -429,12 +433,10 @@ CONFIG_NET_ETHERNET=y
# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
# CONFIG_KS8842 is not set # CONFIG_KS8842 is not set
# CONFIG_XILINX_EMACLITE is not set
CONFIG_NETDEV_1000=y CONFIG_NETDEV_1000=y
CONFIG_NETDEV_10000=y CONFIG_NETDEV_10000=y
CONFIG_WLAN=y
#
# Wireless LAN
#
# CONFIG_WLAN_PRE80211 is not set # CONFIG_WLAN_PRE80211 is not set
# CONFIG_WLAN_80211 is not set # CONFIG_WLAN_80211 is not set
...@@ -535,7 +537,7 @@ CONFIG_VIDEO_OUTPUT_CONTROL=y ...@@ -535,7 +537,7 @@ CONFIG_VIDEO_OUTPUT_CONTROL=y
CONFIG_USB_SUPPORT=y CONFIG_USB_SUPPORT=y
CONFIG_USB_ARCH_HAS_HCD=y CONFIG_USB_ARCH_HAS_HCD=y
# CONFIG_USB_ARCH_HAS_OHCI is not set # 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 is not set
# CONFIG_USB_OTG_WHITELIST is not set # CONFIG_USB_OTG_WHITELIST is not set
# CONFIG_USB_OTG_BLACKLIST_HUB is not set # CONFIG_USB_OTG_BLACKLIST_HUB is not set
...@@ -579,6 +581,7 @@ CONFIG_FS_POSIX_ACL=y ...@@ -579,6 +581,7 @@ CONFIG_FS_POSIX_ACL=y
# CONFIG_GFS2_FS is not set # CONFIG_GFS2_FS is not set
# CONFIG_OCFS2_FS is not set # CONFIG_OCFS2_FS is not set
# CONFIG_BTRFS_FS is not set # CONFIG_BTRFS_FS is not set
# CONFIG_NILFS2_FS is not set
CONFIG_FILE_LOCKING=y CONFIG_FILE_LOCKING=y
CONFIG_FSNOTIFY=y CONFIG_FSNOTIFY=y
# CONFIG_DNOTIFY is not set # CONFIG_DNOTIFY is not set
...@@ -639,7 +642,6 @@ CONFIG_ROMFS_BACKED_BY_BLOCK=y ...@@ -639,7 +642,6 @@ CONFIG_ROMFS_BACKED_BY_BLOCK=y
CONFIG_ROMFS_ON_BLOCK=y CONFIG_ROMFS_ON_BLOCK=y
# CONFIG_SYSV_FS is not set # CONFIG_SYSV_FS is not set
# CONFIG_UFS_FS is not set # CONFIG_UFS_FS is not set
# CONFIG_NILFS2_FS is not set
CONFIG_NETWORK_FILESYSTEMS=y CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NFS_FS=y CONFIG_NFS_FS=y
CONFIG_NFS_V3=y CONFIG_NFS_V3=y
...@@ -710,18 +712,20 @@ CONFIG_DEBUG_INFO=y ...@@ -710,18 +712,20 @@ CONFIG_DEBUG_INFO=y
CONFIG_DEBUG_LIST=y CONFIG_DEBUG_LIST=y
CONFIG_DEBUG_SG=y CONFIG_DEBUG_SG=y
# CONFIG_DEBUG_NOTIFIERS is not set # CONFIG_DEBUG_NOTIFIERS is not set
# CONFIG_DEBUG_CREDENTIALS is not set
# CONFIG_BOOT_PRINTK_DELAY is not set # CONFIG_BOOT_PRINTK_DELAY is not set
# CONFIG_RCU_TORTURE_TEST is not set # CONFIG_RCU_TORTURE_TEST is not set
# CONFIG_RCU_CPU_STALL_DETECTOR is not set # CONFIG_RCU_CPU_STALL_DETECTOR is not set
# CONFIG_BACKTRACE_SELF_TEST is not set # CONFIG_BACKTRACE_SELF_TEST is not set
# CONFIG_DEBUG_BLOCK_EXT_DEVT 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_FAULT_INJECTION is not set
CONFIG_SYSCTL_SYSCALL_CHECK=y CONFIG_SYSCTL_SYSCALL_CHECK=y
# CONFIG_PAGE_POISONING is not set # CONFIG_PAGE_POISONING is not set
# CONFIG_DYNAMIC_DEBUG is not set # CONFIG_DYNAMIC_DEBUG is not set
# CONFIG_SAMPLES is not set # CONFIG_SAMPLES is not set
CONFIG_EARLY_PRINTK=y CONFIG_EARLY_PRINTK=y
CONFIG_HEART_BEAT=y # CONFIG_HEART_BEAT is not set
# CONFIG_DEBUG_BOOTMEM is not set # CONFIG_DEBUG_BOOTMEM is not set
# #
...@@ -736,7 +740,6 @@ CONFIG_CRYPTO=y ...@@ -736,7 +740,6 @@ CONFIG_CRYPTO=y
# #
# Crypto core or helper # Crypto core or helper
# #
# CONFIG_CRYPTO_FIPS is not set
# CONFIG_CRYPTO_MANAGER is not set # CONFIG_CRYPTO_MANAGER is not set
# CONFIG_CRYPTO_MANAGER2 is not set # CONFIG_CRYPTO_MANAGER2 is not set
# CONFIG_CRYPTO_GF128MUL is not set # CONFIG_CRYPTO_GF128MUL is not set
...@@ -768,11 +771,13 @@ CONFIG_CRYPTO=y ...@@ -768,11 +771,13 @@ CONFIG_CRYPTO=y
# #
# CONFIG_CRYPTO_HMAC is not set # CONFIG_CRYPTO_HMAC is not set
# CONFIG_CRYPTO_XCBC is not set # CONFIG_CRYPTO_XCBC is not set
# CONFIG_CRYPTO_VMAC is not set
# #
# Digest # Digest
# #
# CONFIG_CRYPTO_CRC32C is not set # CONFIG_CRYPTO_CRC32C is not set
# CONFIG_CRYPTO_GHASH is not set
# CONFIG_CRYPTO_MD4 is not set # CONFIG_CRYPTO_MD4 is not set
# CONFIG_CRYPTO_MD5 is not set # CONFIG_CRYPTO_MD5 is not set
# CONFIG_CRYPTO_MICHAEL_MIC is not set # CONFIG_CRYPTO_MICHAEL_MIC is not set
......
#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, ...@@ -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_be32(a) __raw_readl((const void __iomem __force *)(a))
#define in_be16(a) __raw_readw(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 * Little endian
*/ */
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include <linux/pfn.h> #include <linux/pfn.h>
#include <asm/setup.h> #include <asm/setup.h>
#include <asm/asm-compat.h>
#include <linux/const.h> #include <linux/const.h>
#ifdef __KERNEL__ #ifdef __KERNEL__
...@@ -26,6 +27,8 @@ ...@@ -26,6 +27,8 @@
#define PAGE_SIZE (_AC(1, UL) << PAGE_SHIFT) #define PAGE_SIZE (_AC(1, UL) << PAGE_SHIFT)
#define PAGE_MASK (~(PAGE_SIZE-1)) #define PAGE_MASK (~(PAGE_SIZE-1))
#define LOAD_OFFSET ASM_CONST((CONFIG_KERNEL_START-CONFIG_KERNEL_BASE_ADDR))
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
#define PAGE_UP(addr) (((addr)+((PAGE_SIZE)-1))&(~((PAGE_SIZE)-1))) #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); ...@@ -38,7 +38,7 @@ extern void early_console_reg_tlb_alloc(unsigned int addr);
void time_init(void); void time_init(void);
void init_IRQ(void); void init_IRQ(void);
void machine_early_init(const char *cmdline, unsigned int ram, 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_restart(char *cmd);
void machine_shutdown(void); void machine_shutdown(void);
......
#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[] = { ...@@ -28,6 +28,7 @@ const struct cpu_ver_key cpu_ver_lookup[] = {
{"7.10.d", 0x0b}, {"7.10.d", 0x0b},
{"7.20.a", 0x0c}, {"7.20.a", 0x0c},
{"7.20.b", 0x0d}, {"7.20.b", 0x0d},
{"7.20.c", 0x0e},
/* FIXME There is no keycode defined in MBV for these versions */ /* FIXME There is no keycode defined in MBV for these versions */
{"2.10.a", 0x10}, {"2.10.a", 0x10},
{"3.00.a", 0x20}, {"3.00.a", 0x20},
...@@ -49,6 +50,8 @@ const struct family_string_key family_string_lookup[] = { ...@@ -49,6 +50,8 @@ const struct family_string_key family_string_lookup[] = {
{"spartan3a", 0xa}, {"spartan3a", 0xa},
{"spartan3an", 0xb}, {"spartan3an", 0xb},
{"spartan3adsp", 0xc}, {"spartan3adsp", 0xc},
{"spartan6", 0xd},
{"virtex6", 0xe},
/* FIXME There is no key code defined for spartan2 */ /* FIXME There is no key code defined for spartan2 */
{"spartan2", 0xf0}, {"spartan2", 0xf0},
{NULL, 0}, {NULL, 0},
......
...@@ -308,38 +308,69 @@ C_ENTRY(_user_exception): ...@@ -308,38 +308,69 @@ C_ENTRY(_user_exception):
swi r12, r1, PTO+PT_R0; swi r12, r1, PTO+PT_R0;
tovirt(r1,r1) tovirt(r1,r1)
la r15, r0, ret_from_trap-8
/* where the trap should return need -8 to adjust for rtsd r15, 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 /* 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 * (r12 is not preserved), or return an error if r12 is not valid. The LP
* register should point to the location where * register should point to the location where
* the called function should return. [note that MAKE_SYS_CALL uses label 1] */ * 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; addi r11, r12, -__NR_syscalls;
bgei r11,1f; bgei r11,5f;
/* Figure out which function to use for this system call. */ /* Figure out which function to use for this system call. */
/* Note Microblaze barrel shift is optional, so don't rely on it */ /* Note Microblaze barrel shift is optional, so don't rely on it */
add r12, r12, r12; /* convert num -> ptr */ add r12, r12, r12; /* convert num -> ptr */
add r12, r12, r12; add r12, r12, r12;
/* Trac syscalls and stored them to r0_ram */ /* 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 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. */ /* The syscall number is invalid, return an error. */
1: VM_ON; /* RETURN() expects virtual mode*/ 5:
addi r3, r0, -ENOSYS; addi r3, r0, -ENOSYS;
rtsd r15,8; /* looks like a normal subroutine return */ rtsd r15,8; /* looks like a normal subroutine return */
or r0, r0, r0 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 */ /* We re-enable BIP bit before state restore */
C_ENTRY(ret_from_trap): C_ENTRY(ret_from_trap):
set_bip; /* Ints masked for state restore*/ set_bip; /* Ints masked for state restore*/
...@@ -347,6 +378,23 @@ C_ENTRY(ret_from_trap): ...@@ -347,6 +378,23 @@ C_ENTRY(ret_from_trap):
/* See if returning to kernel mode, if so, skip resched &c. */ /* See if returning to kernel mode, if so, skip resched &c. */
bnei r11, 2f; 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 /* We're returning to user mode, so check for various conditions that
* trigger rescheduling. */ * trigger rescheduling. */
/* Get current task ptr into r11 */ /* Get current task ptr into r11 */
......
...@@ -72,7 +72,8 @@ asmlinkage void full_exception(struct pt_regs *regs, unsigned int type, ...@@ -72,7 +72,8 @@ asmlinkage void full_exception(struct pt_regs *regs, unsigned int type,
#endif #endif
#if 0 #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, type, user_mode(regs) ? "user" : "kernel", fsr,
(unsigned int) regs->pc, (unsigned int) regs->esr); (unsigned int) regs->pc, (unsigned int) regs->esr);
#endif #endif
...@@ -80,42 +81,50 @@ asmlinkage void full_exception(struct pt_regs *regs, unsigned int type, ...@@ -80,42 +81,50 @@ asmlinkage void full_exception(struct pt_regs *regs, unsigned int type,
switch (type & 0x1F) { switch (type & 0x1F) {
case MICROBLAZE_ILL_OPCODE_EXCEPTION: case MICROBLAZE_ILL_OPCODE_EXCEPTION:
if (user_mode(regs)) { 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); _exception(SIGILL, regs, ILL_ILLOPC, addr);
return; 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); die("opcode exception", regs, SIGBUS);
break; break;
case MICROBLAZE_IBUS_EXCEPTION: case MICROBLAZE_IBUS_EXCEPTION:
if (user_mode(regs)) { 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); _exception(SIGBUS, regs, BUS_ADRERR, addr);
return; 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); die("bus exception", regs, SIGBUS);
break; break;
case MICROBLAZE_DBUS_EXCEPTION: case MICROBLAZE_DBUS_EXCEPTION:
if (user_mode(regs)) { 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); _exception(SIGBUS, regs, BUS_ADRERR, addr);
return; 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); die("bus exception", regs, SIGBUS);
break; break;
case MICROBLAZE_DIV_ZERO_EXCEPTION: case MICROBLAZE_DIV_ZERO_EXCEPTION:
if (user_mode(regs)) { if (user_mode(regs)) {
printk(KERN_WARNING "Divide by zero exception in user mode\n"); pr_debug(KERN_WARNING "Divide by zero exception " \
_exception(SIGILL, regs, ILL_ILLOPC, addr); "in user mode\n");
_exception(SIGILL, regs, FPE_INTDIV, addr);
return; 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); die("Divide by exception", regs, SIGBUS);
break; break;
case MICROBLAZE_FPU_EXCEPTION: case MICROBLAZE_FPU_EXCEPTION:
printk(KERN_WARNING "FPU exception\n"); pr_debug(KERN_WARNING "FPU exception\n");
/* IEEE FP exception */ /* IEEE FP exception */
/* I removed fsr variable and use code var for storing fsr */ /* I removed fsr variable and use code var for storing fsr */
if (fsr & FSR_IO) if (fsr & FSR_IO)
...@@ -133,7 +142,7 @@ asmlinkage void full_exception(struct pt_regs *regs, unsigned int type, ...@@ -133,7 +142,7 @@ asmlinkage void full_exception(struct pt_regs *regs, unsigned int type,
#ifdef CONFIG_MMU #ifdef CONFIG_MMU
case MICROBLAZE_PRIVILEGED_EXCEPTION: case MICROBLAZE_PRIVILEGED_EXCEPTION:
printk(KERN_WARNING "Privileged exception\n"); pr_debug(KERN_WARNING "Privileged exception\n");
/* "brk r0,r0" - used as debug breakpoint */ /* "brk r0,r0" - used as debug breakpoint */
if (get_user(code, (unsigned long *)regs->pc) == 0 if (get_user(code, (unsigned long *)regs->pc) == 0
&& code == 0x980c0000) { && code == 0x980c0000) {
......
...@@ -54,6 +54,16 @@ ENTRY(_start) ...@@ -54,6 +54,16 @@ ENTRY(_start)
mfs r1, rmsr mfs r1, rmsr
andi r1, r1, ~2 andi r1, r1, ~2
mts rmsr, r1 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. /* 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. if it's in r7, we've got to save it away ASAP.
...@@ -209,8 +219,8 @@ start_here: ...@@ -209,8 +219,8 @@ start_here:
* Please see $(ARCH)/mach-$(SUBARCH)/setup.c for * Please see $(ARCH)/mach-$(SUBARCH)/setup.c for
* the function. * the function.
*/ */
la r8, r0, machine_early_init la r9, r0, machine_early_init
brald r15, r8 brald r15, r9
nop nop
#ifndef CONFIG_MMU #ifndef CONFIG_MMU
......
...@@ -84,9 +84,10 @@ ...@@ -84,9 +84,10 @@
#define NUM_TO_REG(num) r ## num #define NUM_TO_REG(num) r ## num
#ifdef CONFIG_MMU #ifdef CONFIG_MMU
/* FIXME you can't change first load of MSR because there is
* hardcoded jump bri 4 */
#define RESTORE_STATE \ #define RESTORE_STATE \
lwi r5, r1, 0; \
mts rmsr, r5; \
nop; \
lwi r3, r1, PT_R3; \ lwi r3, r1, PT_R3; \
lwi r4, r1, PT_R4; \ lwi r4, r1, PT_R4; \
lwi r5, r1, PT_R5; \ lwi r5, r1, PT_R5; \
...@@ -309,6 +310,9 @@ _hw_exception_handler: ...@@ -309,6 +310,9 @@ _hw_exception_handler:
lwi r31, r0, TOPHYS(PER_CPU(CURRENT_SAVE)) /* get saved current */ lwi r31, r0, TOPHYS(PER_CPU(CURRENT_SAVE)) /* get saved current */
#endif #endif
mfs r5, rmsr;
nop
swi r5, r1, 0;
mfs r3, resr mfs r3, resr
nop nop
mfs r4, rear; mfs r4, rear;
...@@ -380,6 +384,8 @@ handle_other_ex: /* Handle Other exceptions here */ ...@@ -380,6 +384,8 @@ handle_other_ex: /* Handle Other exceptions here */
addk r8, r17, r0; /* Load exception address */ addk r8, r17, r0; /* Load exception address */
bralid r15, full_exception; /* Branch to the handler */ bralid r15, full_exception; /* Branch to the handler */
nop; nop;
mts r0, rfsr; /* Clear sticky fsr */
nop
/* /*
* Trigger execution of the signal handler by enabling * 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) ...@@ -235,6 +235,7 @@ void start_thread(struct pt_regs *regs, unsigned long pc, unsigned long usp)
regs->pc = pc; regs->pc = pc;
regs->r1 = usp; regs->r1 = usp;
regs->pt_mode = 0; regs->pt_mode = 0;
regs->msr |= MSR_UMS;
} }
#ifdef CONFIG_MMU #ifdef CONFIG_MMU
......
...@@ -29,6 +29,10 @@ ...@@ -29,6 +29,10 @@
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/ptrace.h> #include <linux/ptrace.h>
#include <linux/signal.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 <linux/errno.h>
#include <asm/processor.h> #include <asm/processor.h>
...@@ -174,6 +178,64 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) ...@@ -174,6 +178,64 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
return rval; 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) void ptrace_disable(struct task_struct *child)
{ {
/* nothing to do */ /* nothing to do */
......
...@@ -94,7 +94,7 @@ inline unsigned get_romfs_len(unsigned *addr) ...@@ -94,7 +94,7 @@ inline unsigned get_romfs_len(unsigned *addr)
#endif /* CONFIG_MTD_UCLINUX_EBSS */ #endif /* CONFIG_MTD_UCLINUX_EBSS */
void __init machine_early_init(const char *cmdline, unsigned int ram, 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; unsigned long *src, *dst = (unsigned long *)0x0;
...@@ -157,6 +157,16 @@ void __init machine_early_init(const char *cmdline, unsigned int ram, ...@@ -157,6 +157,16 @@ void __init machine_early_init(const char *cmdline, unsigned int ram,
early_printk("New klimit: 0x%08x\n", (unsigned)klimit); early_printk("New klimit: 0x%08x\n", (unsigned)klimit);
#endif #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++) for (src = __ivt_start; src < __ivt_end; src++, dst++)
*dst = *src; *dst = *src;
......
...@@ -12,13 +12,16 @@ OUTPUT_FORMAT("elf32-microblaze", "elf32-microblaze", "elf32-microblaze") ...@@ -12,13 +12,16 @@ OUTPUT_FORMAT("elf32-microblaze", "elf32-microblaze", "elf32-microblaze")
OUTPUT_ARCH(microblaze) OUTPUT_ARCH(microblaze)
ENTRY(_start) ENTRY(_start)
#include <asm/page.h>
#include <asm-generic/vmlinux.lds.h> #include <asm-generic/vmlinux.lds.h>
#include <asm/thread_info.h>
jiffies = jiffies_64 + 4; jiffies = jiffies_64 + 4;
SECTIONS { SECTIONS {
. = CONFIG_KERNEL_START; . = CONFIG_KERNEL_START;
.text : { _start = CONFIG_KERNEL_BASE_ADDR;
.text : AT(ADDR(.text) - LOAD_OFFSET) {
_text = . ; _text = . ;
_stext = . ; _stext = . ;
*(.text .text.*) *(.text .text.*)
...@@ -33,24 +36,22 @@ SECTIONS { ...@@ -33,24 +36,22 @@ SECTIONS {
} }
. = ALIGN (4) ; . = ALIGN (4) ;
_fdt_start = . ; /* place for fdt blob */ __fdt_blob : AT(ADDR(__fdt_blob) - LOAD_OFFSET) {
. = . + 0x4000; _fdt_start = . ; /* place for fdt blob */
_fdt_end = . ; *(__fdt_blob) ; /* Any link-placed DTB */
. = _fdt_start + 0x4000; /* Pad up to 16kbyte */
_fdt_end = . ;
}
. = ALIGN(16); . = ALIGN(16);
RODATA RODATA
. = ALIGN(16); EXCEPTION_TABLE(16)
__ex_table : {
__start___ex_table = .;
*(__ex_table)
__stop___ex_table = .;
}
/* /*
* sdata2 section can go anywhere, but must be word aligned * sdata2 section can go anywhere, but must be word aligned
* and SDA2_BASE must point to the middle of it * and SDA2_BASE must point to the middle of it
*/ */
.sdata2 : { .sdata2 : AT(ADDR(.sdata2) - LOAD_OFFSET) {
_ssrw = .; _ssrw = .;
. = ALIGN(4096); /* page aligned when MMU used - origin 0x8 */ . = ALIGN(4096); /* page aligned when MMU used - origin 0x8 */
*(.sdata2) *(.sdata2)
...@@ -61,12 +62,7 @@ SECTIONS { ...@@ -61,12 +62,7 @@ SECTIONS {
} }
_sdata = . ; _sdata = . ;
.data ALIGN (4096) : { /* page aligned when MMU used - origin 0x4 */ RW_DATA_SECTION(32, PAGE_SIZE, THREAD_SIZE)
DATA_DATA
CONSTRUCTORS
}
. = ALIGN(32);
.data.cacheline_aligned : { *(.data.cacheline_aligned) }
_edata = . ; _edata = . ;
/* Reserve some low RAM for r0 based memory references */ /* Reserve some low RAM for r0 based memory references */
...@@ -74,18 +70,14 @@ SECTIONS { ...@@ -74,18 +70,14 @@ SECTIONS {
r0_ram = . ; r0_ram = . ;
. = . + 4096; /* a page should be enough */ . = . + 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 */ /* Under the microblaze ABI, .sdata and .sbss must be contiguous */
. = ALIGN(8); . = ALIGN(8);
.sdata : { .sdata : AT(ADDR(.sdata) - LOAD_OFFSET) {
_ssro = .; _ssro = .;
*(.sdata) *(.sdata)
} }
.sbss : { .sbss : AT(ADDR(.sbss) - LOAD_OFFSET) {
_ssbss = .; _ssbss = .;
*(.sbss) *(.sbss)
_esbss = .; _esbss = .;
...@@ -96,47 +88,36 @@ SECTIONS { ...@@ -96,47 +88,36 @@ SECTIONS {
__init_begin = .; __init_begin = .;
. = ALIGN(4096); INIT_TEXT_SECTION(PAGE_SIZE)
.init.text : {
_sinittext = . ;
INIT_TEXT
_einittext = .;
}
.init.data : { .init.data : AT(ADDR(.init.data) - LOAD_OFFSET) {
INIT_DATA INIT_DATA
} }
. = ALIGN(4); . = ALIGN(4);
.init.ivt : { .init.ivt : AT(ADDR(.init.ivt) - LOAD_OFFSET) {
__ivt_start = .; __ivt_start = .;
*(.init.ivt) *(.init.ivt)
__ivt_end = .; __ivt_end = .;
} }
.init.setup : { .init.setup : AT(ADDR(.init.setup) - LOAD_OFFSET) {
__setup_start = .; INIT_SETUP(0)
*(.init.setup)
__setup_end = .;
} }
.initcall.init : { .initcall.init : AT(ADDR(.initcall.init) - LOAD_OFFSET ) {
__initcall_start = .; INIT_CALLS
INITCALLS
__initcall_end = .;
} }
.con_initcall.init : { .con_initcall.init : AT(ADDR(.con_initcall.init) - LOAD_OFFSET) {
__con_initcall_start = .; CON_INITCALL
*(.con_initcall.init)
__con_initcall_end = .;
} }
SECURITY_INIT SECURITY_INIT
__init_end_before_initramfs = .; __init_end_before_initramfs = .;
.init.ramfs ALIGN(4096) : { .init.ramfs ALIGN(4096) : AT(ADDR(.init.ramfs) - LOAD_OFFSET) {
__initramfs_start = .; __initramfs_start = .;
*(.init.ramfs) *(.init.ramfs)
__initramfs_end = .; __initramfs_end = .;
...@@ -152,7 +133,8 @@ SECTIONS { ...@@ -152,7 +133,8 @@ SECTIONS {
} }
__init_end = .; __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_start = . ;
*(.bss*) *(.bss*)
*(COMMON) *(COMMON)
......
...@@ -180,7 +180,8 @@ void free_initrd_mem(unsigned long start, unsigned long end) ...@@ -180,7 +180,8 @@ void free_initrd_mem(unsigned long start, unsigned long end)
totalram_pages++; totalram_pages++;
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 #endif
......
...@@ -159,7 +159,7 @@ config MTD_AFS_PARTS ...@@ -159,7 +159,7 @@ config MTD_AFS_PARTS
config MTD_OF_PARTS config MTD_OF_PARTS
tristate "Flash partition map based on OF description" tristate "Flash partition map based on OF description"
depends on PPC_OF && MTD_PARTITIONS depends on (MICROBLAZE || PPC_OF) && MTD_PARTITIONS
help help
This provides a partition parsing function which derives This provides a partition parsing function which derives
the partition map from the children of the flash node, the partition map from the children of the flash node,
......
...@@ -74,7 +74,7 @@ config MTD_PHYSMAP_BANKWIDTH ...@@ -74,7 +74,7 @@ config MTD_PHYSMAP_BANKWIDTH
config MTD_PHYSMAP_OF config MTD_PHYSMAP_OF
tristate "Flash device in physical memory map based on OF description" 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 help
This provides a 'mapping' driver which allows the NOR Flash and This provides a 'mapping' driver which allows the NOR Flash and
ROM driver code to communicate with chips which are mapped ROM driver code to communicate with chips which are mapped
......
...@@ -22,7 +22,6 @@ config USB_ARCH_HAS_HCD ...@@ -22,7 +22,6 @@ config USB_ARCH_HAS_HCD
default y if PCMCIA && !M32R # sl811_cs default y if PCMCIA && !M32R # sl811_cs
default y if ARM # SL-811 default y if ARM # SL-811
default y if SUPERH # r8a66597-hcd default y if SUPERH # r8a66597-hcd
default y if MICROBLAZE
default PCI default PCI
# many non-PCI SOC chips embed OHCI # many non-PCI SOC chips embed OHCI
......
...@@ -34,7 +34,7 @@ config GCOV_KERNEL ...@@ -34,7 +34,7 @@ config GCOV_KERNEL
config GCOV_PROFILE_ALL config GCOV_PROFILE_ALL
bool "Profile entire Kernel" bool "Profile entire Kernel"
depends on GCOV_KERNEL depends on GCOV_KERNEL
depends on S390 || X86 || (PPC && EXPERIMENTAL) depends on S390 || X86 || (PPC && EXPERIMENTAL) || MICROBLAZE
default n default n
---help--- ---help---
This options activates profiling for the entire kernel. This options activates profiling for the entire kernel.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment