diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-09-24 12:01:44 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-09-24 12:01:44 -0400 |
commit | a6b49cb210f878709bdc0bddc16a853f18790d02 (patch) | |
tree | 6147078ef0ce584cb6a8dae7468f060ef5838d12 /arch/microblaze | |
parent | 2c9871de0ae89a0e2c365ea6e277135fe031d8b4 (diff) | |
parent | bfc8125858d777bd5bdba03a091c07cc2e0e17c0 (diff) |
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
...
Diffstat (limited to 'arch/microblaze')
23 files changed, 436 insertions, 113 deletions
diff --git a/arch/microblaze/Kconfig b/arch/microblaze/Kconfig index 2db722d80d4d..bbd8327f1890 100644 --- a/arch/microblaze/Kconfig +++ b/arch/microblaze/Kconfig | |||
@@ -6,6 +6,7 @@ mainmenu "Linux/Microblaze Kernel Configuration" | |||
6 | config MICROBLAZE | 6 | config MICROBLAZE |
7 | def_bool y | 7 | def_bool y |
8 | select HAVE_LMB | 8 | select HAVE_LMB |
9 | select USB_ARCH_HAS_EHCI | ||
9 | select ARCH_WANT_OPTIONAL_GPIOLIB | 10 | select ARCH_WANT_OPTIONAL_GPIOLIB |
10 | 11 | ||
11 | config SWAP | 12 | config SWAP |
diff --git a/arch/microblaze/Makefile b/arch/microblaze/Makefile index 8439598d4655..34187354304a 100644 --- a/arch/microblaze/Makefile +++ b/arch/microblaze/Makefile | |||
@@ -37,12 +37,12 @@ CPUFLAGS-$(CONFIG_XILINX_MICROBLAZE0_USE_PCMP_INSTR) += -mxl-pattern-compare | |||
37 | CPUFLAGS-1 += $(call cc-option,-mcpu=v$(CPU_VER)) | 37 | CPUFLAGS-1 += $(call cc-option,-mcpu=v$(CPU_VER)) |
38 | 38 | ||
39 | # r31 holds current when in kernel mode | 39 | # r31 holds current when in kernel mode |
40 | KBUILD_KERNEL += -ffixed-r31 $(CPUFLAGS-1) $(CPUFLAGS-2) | 40 | KBUILD_CFLAGS += -ffixed-r31 $(CPUFLAGS-1) $(CPUFLAGS-2) |
41 | 41 | ||
42 | LDFLAGS := | 42 | LDFLAGS := |
43 | LDFLAGS_vmlinux := | 43 | LDFLAGS_vmlinux := |
44 | 44 | ||
45 | LIBGCC := $(shell $(CC) $(KBUILD_KERNEL) -print-libgcc-file-name) | 45 | LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS) -print-libgcc-file-name) |
46 | 46 | ||
47 | head-y := arch/microblaze/kernel/head.o | 47 | head-y := arch/microblaze/kernel/head.o |
48 | libs-y += arch/microblaze/lib/ | 48 | libs-y += arch/microblaze/lib/ |
@@ -53,22 +53,41 @@ core-y += arch/microblaze/platform/ | |||
53 | 53 | ||
54 | boot := arch/microblaze/boot | 54 | boot := arch/microblaze/boot |
55 | 55 | ||
56 | # Are we making a simpleImage.<boardname> target? If so, crack out the boardname | ||
57 | DTB:=$(subst simpleImage.,,$(filter simpleImage.%, $(MAKECMDGOALS))) | ||
58 | |||
59 | ifneq ($(DTB),) | ||
60 | core-y += $(boot)/ | ||
61 | endif | ||
62 | |||
56 | # defines filename extension depending memory management type | 63 | # defines filename extension depending memory management type |
57 | ifeq ($(CONFIG_MMU),) | 64 | ifeq ($(CONFIG_MMU),) |
58 | MMU := -nommu | 65 | MMU := -nommu |
59 | endif | 66 | endif |
60 | 67 | ||
61 | export MMU | 68 | export MMU DTB |
62 | 69 | ||
63 | all: linux.bin | 70 | all: linux.bin |
64 | 71 | ||
72 | BOOT_TARGETS = linux.bin linux.bin.gz simpleImage.% | ||
73 | |||
65 | archclean: | 74 | archclean: |
66 | $(Q)$(MAKE) $(clean)=$(boot) | 75 | $(Q)$(MAKE) $(clean)=$(boot) |
67 | 76 | ||
68 | linux.bin linux.bin.gz: vmlinux | 77 | $(BOOT_TARGETS): vmlinux |
69 | $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@ | 78 | $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@ |
70 | 79 | ||
71 | define archhelp | 80 | define archhelp |
72 | echo '* linux.bin - Create raw binary' | 81 | echo '* linux.bin - Create raw binary' |
73 | echo ' linux.bin.gz - Create compressed raw binary' | 82 | echo ' linux.bin.gz - Create compressed raw binary' |
83 | echo ' simpleImage.<dt> - ELF image with $(arch)/boot/dts/<dt>.dts linked in' | ||
84 | echo ' - stripped elf with fdt blob | ||
85 | echo ' simpleImage.<dt>.unstrip - full ELF image with fdt blob' | ||
86 | echo ' *_defconfig - Select default config from arch/microblaze/configs' | ||
87 | echo '' | ||
88 | echo ' Targets with <dt> embed a device tree blob inside the image' | ||
89 | echo ' These targets support board with firmware that does not' | ||
90 | echo ' support passing a device tree directly. Replace <dt> with the' | ||
91 | echo ' name of a dts file from the arch/microblaze/boot/dts/ directory' | ||
92 | echo ' (minus the .dts extension).' | ||
74 | endef | 93 | endef |
diff --git a/arch/microblaze/boot/Makefile b/arch/microblaze/boot/Makefile index c2bb043a029d..21f13322a4ca 100644 --- a/arch/microblaze/boot/Makefile +++ b/arch/microblaze/boot/Makefile | |||
@@ -2,10 +2,24 @@ | |||
2 | # arch/microblaze/boot/Makefile | 2 | # arch/microblaze/boot/Makefile |
3 | # | 3 | # |
4 | 4 | ||
5 | targets := linux.bin linux.bin.gz | 5 | obj-y += linked_dtb.o |
6 | |||
7 | targets := linux.bin linux.bin.gz simpleImage.% | ||
6 | 8 | ||
7 | OBJCOPYFLAGS_linux.bin := -O binary | 9 | OBJCOPYFLAGS_linux.bin := -O binary |
8 | 10 | ||
11 | # Where the DTS files live | ||
12 | dtstree := $(srctree)/$(src)/dts | ||
13 | |||
14 | # Ensure system.dtb exists | ||
15 | $(obj)/linked_dtb.o: $(obj)/system.dtb | ||
16 | |||
17 | # Generate system.dtb from $(DTB).dtb | ||
18 | ifneq ($(DTB),system) | ||
19 | $(obj)/system.dtb: $(obj)/$(DTB).dtb | ||
20 | $(call if_changed,cp) | ||
21 | endif | ||
22 | |||
9 | $(obj)/linux.bin: vmlinux FORCE | 23 | $(obj)/linux.bin: vmlinux FORCE |
10 | [ -n $(CONFIG_INITRAMFS_SOURCE) ] && [ ! -e $(CONFIG_INITRAMFS_SOURCE) ] && \ | 24 | [ -n $(CONFIG_INITRAMFS_SOURCE) ] && [ ! -e $(CONFIG_INITRAMFS_SOURCE) ] && \ |
11 | touch $(CONFIG_INITRAMFS_SOURCE) || echo "No CPIO image" | 25 | touch $(CONFIG_INITRAMFS_SOURCE) || echo "No CPIO image" |
@@ -16,4 +30,27 @@ $(obj)/linux.bin.gz: $(obj)/linux.bin FORCE | |||
16 | $(call if_changed,gzip) | 30 | $(call if_changed,gzip) |
17 | @echo 'Kernel: $@ is ready' ' (#'`cat .version`')' | 31 | @echo 'Kernel: $@ is ready' ' (#'`cat .version`')' |
18 | 32 | ||
19 | clean-kernel += linux.bin linux.bin.gz | 33 | quiet_cmd_cp = CP $< $@$2 |
34 | cmd_cp = cat $< >$@$2 || (rm -f $@ && echo false) | ||
35 | |||
36 | quiet_cmd_strip = STRIP $@ | ||
37 | cmd_strip = $(STRIP) -K _start -K _end -K __log_buf -K _fdt_start vmlinux -o $@ | ||
38 | |||
39 | $(obj)/simpleImage.%: vmlinux FORCE | ||
40 | $(call if_changed,cp,.unstrip) | ||
41 | $(call if_changed,strip) | ||
42 | @echo 'Kernel: $@ is ready' ' (#'`cat .version`')' | ||
43 | |||
44 | # Rule to build device tree blobs | ||
45 | DTC = $(objtree)/scripts/dtc/dtc | ||
46 | |||
47 | # Rule to build device tree blobs | ||
48 | quiet_cmd_dtc = DTC $@ | ||
49 | cmd_dtc = $(DTC) -O dtb -o $(obj)/$*.dtb -b 0 -p 1024 $(dtstree)/$*.dts | ||
50 | |||
51 | $(obj)/%.dtb: $(dtstree)/%.dts FORCE | ||
52 | $(call if_changed,dtc) | ||
53 | |||
54 | clean-kernel += linux.bin linux.bin.gz simpleImage.* | ||
55 | |||
56 | clean-files += *.dtb | ||
diff --git a/arch/microblaze/boot/dts/system.dts b/arch/microblaze/boot/dts/system.dts new file mode 120000 index 000000000000..7cb657892f21 --- /dev/null +++ b/arch/microblaze/boot/dts/system.dts | |||
@@ -0,0 +1 @@ | |||
../../platform/generic/system.dts \ No newline at end of file | |||
diff --git a/arch/microblaze/boot/linked_dtb.S b/arch/microblaze/boot/linked_dtb.S new file mode 100644 index 000000000000..cb2b537aebee --- /dev/null +++ b/arch/microblaze/boot/linked_dtb.S | |||
@@ -0,0 +1,3 @@ | |||
1 | .section __fdt_blob,"a" | ||
2 | .incbin "arch/microblaze/boot/system.dtb" | ||
3 | |||
diff --git a/arch/microblaze/configs/mmu_defconfig b/arch/microblaze/configs/mmu_defconfig index 09c32962b66f..bb7c374713ad 100644 --- a/arch/microblaze/configs/mmu_defconfig +++ b/arch/microblaze/configs/mmu_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.31-rc6 | 3 | # Linux kernel version: 2.6.31 |
4 | # Tue Aug 18 11:00:02 2009 | 4 | # Thu Sep 24 10:28:50 2009 |
5 | # | 5 | # |
6 | CONFIG_MICROBLAZE=y | 6 | CONFIG_MICROBLAZE=y |
7 | # CONFIG_SWAP is not set | 7 | # CONFIG_SWAP is not set |
@@ -42,11 +42,12 @@ CONFIG_SYSVIPC_SYSCTL=y | |||
42 | # | 42 | # |
43 | # RCU Subsystem | 43 | # RCU Subsystem |
44 | # | 44 | # |
45 | CONFIG_CLASSIC_RCU=y | 45 | CONFIG_TREE_RCU=y |
46 | # CONFIG_TREE_RCU is not set | 46 | # CONFIG_TREE_PREEMPT_RCU is not set |
47 | # CONFIG_PREEMPT_RCU is not set | 47 | # CONFIG_RCU_TRACE is not set |
48 | CONFIG_RCU_FANOUT=32 | ||
49 | # CONFIG_RCU_FANOUT_EXACT is not set | ||
48 | # CONFIG_TREE_RCU_TRACE is not set | 50 | # CONFIG_TREE_RCU_TRACE is not set |
49 | # CONFIG_PREEMPT_RCU_TRACE is not set | ||
50 | CONFIG_IKCONFIG=y | 51 | CONFIG_IKCONFIG=y |
51 | CONFIG_IKCONFIG_PROC=y | 52 | CONFIG_IKCONFIG_PROC=y |
52 | CONFIG_LOG_BUF_SHIFT=17 | 53 | CONFIG_LOG_BUF_SHIFT=17 |
@@ -260,6 +261,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic" | |||
260 | # CONFIG_NETFILTER is not set | 261 | # CONFIG_NETFILTER is not set |
261 | # CONFIG_IP_DCCP is not set | 262 | # CONFIG_IP_DCCP is not set |
262 | # CONFIG_IP_SCTP is not set | 263 | # CONFIG_IP_SCTP is not set |
264 | # CONFIG_RDS is not set | ||
263 | # CONFIG_TIPC is not set | 265 | # CONFIG_TIPC is not set |
264 | # CONFIG_ATM is not set | 266 | # CONFIG_ATM is not set |
265 | # CONFIG_BRIDGE is not set | 267 | # CONFIG_BRIDGE is not set |
@@ -357,12 +359,10 @@ CONFIG_NET_ETHERNET=y | |||
357 | # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set | 359 | # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set |
358 | # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set | 360 | # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set |
359 | # CONFIG_KS8842 is not set | 361 | # CONFIG_KS8842 is not set |
362 | CONFIG_XILINX_EMACLITE=y | ||
360 | CONFIG_NETDEV_1000=y | 363 | CONFIG_NETDEV_1000=y |
361 | CONFIG_NETDEV_10000=y | 364 | CONFIG_NETDEV_10000=y |
362 | 365 | CONFIG_WLAN=y | |
363 | # | ||
364 | # Wireless LAN | ||
365 | # | ||
366 | # CONFIG_WLAN_PRE80211 is not set | 366 | # CONFIG_WLAN_PRE80211 is not set |
367 | # CONFIG_WLAN_80211 is not set | 367 | # CONFIG_WLAN_80211 is not set |
368 | 368 | ||
@@ -460,6 +460,7 @@ CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y | |||
460 | # CONFIG_DISPLAY_SUPPORT is not set | 460 | # CONFIG_DISPLAY_SUPPORT is not set |
461 | # CONFIG_SOUND is not set | 461 | # CONFIG_SOUND is not set |
462 | # CONFIG_USB_SUPPORT is not set | 462 | # CONFIG_USB_SUPPORT is not set |
463 | CONFIG_USB_ARCH_HAS_EHCI=y | ||
463 | # CONFIG_MMC is not set | 464 | # CONFIG_MMC is not set |
464 | # CONFIG_MEMSTICK is not set | 465 | # CONFIG_MEMSTICK is not set |
465 | # CONFIG_NEW_LEDS is not set | 466 | # CONFIG_NEW_LEDS is not set |
@@ -488,6 +489,7 @@ CONFIG_EXT2_FS=y | |||
488 | # CONFIG_GFS2_FS is not set | 489 | # CONFIG_GFS2_FS is not set |
489 | # CONFIG_OCFS2_FS is not set | 490 | # CONFIG_OCFS2_FS is not set |
490 | # CONFIG_BTRFS_FS is not set | 491 | # CONFIG_BTRFS_FS is not set |
492 | # CONFIG_NILFS2_FS is not set | ||
491 | CONFIG_FILE_LOCKING=y | 493 | CONFIG_FILE_LOCKING=y |
492 | CONFIG_FSNOTIFY=y | 494 | CONFIG_FSNOTIFY=y |
493 | # CONFIG_DNOTIFY is not set | 495 | # CONFIG_DNOTIFY is not set |
@@ -546,7 +548,6 @@ CONFIG_MISC_FILESYSTEMS=y | |||
546 | # CONFIG_ROMFS_FS is not set | 548 | # CONFIG_ROMFS_FS is not set |
547 | # CONFIG_SYSV_FS is not set | 549 | # CONFIG_SYSV_FS is not set |
548 | # CONFIG_UFS_FS is not set | 550 | # CONFIG_UFS_FS is not set |
549 | # CONFIG_NILFS2_FS is not set | ||
550 | CONFIG_NETWORK_FILESYSTEMS=y | 551 | CONFIG_NETWORK_FILESYSTEMS=y |
551 | CONFIG_NFS_FS=y | 552 | CONFIG_NFS_FS=y |
552 | CONFIG_NFS_V3=y | 553 | CONFIG_NFS_V3=y |
@@ -671,18 +672,20 @@ CONFIG_DEBUG_INFO=y | |||
671 | # CONFIG_DEBUG_LIST is not set | 672 | # CONFIG_DEBUG_LIST is not set |
672 | # CONFIG_DEBUG_SG is not set | 673 | # CONFIG_DEBUG_SG is not set |
673 | # CONFIG_DEBUG_NOTIFIERS is not set | 674 | # CONFIG_DEBUG_NOTIFIERS is not set |
675 | # CONFIG_DEBUG_CREDENTIALS is not set | ||
674 | # CONFIG_BOOT_PRINTK_DELAY is not set | 676 | # CONFIG_BOOT_PRINTK_DELAY is not set |
675 | # CONFIG_RCU_TORTURE_TEST is not set | 677 | # CONFIG_RCU_TORTURE_TEST is not set |
676 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | 678 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set |
677 | # CONFIG_BACKTRACE_SELF_TEST is not set | 679 | # CONFIG_BACKTRACE_SELF_TEST is not set |
678 | # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set | 680 | # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set |
681 | # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set | ||
679 | # CONFIG_FAULT_INJECTION is not set | 682 | # CONFIG_FAULT_INJECTION is not set |
680 | # CONFIG_SYSCTL_SYSCALL_CHECK is not set | 683 | # CONFIG_SYSCTL_SYSCALL_CHECK is not set |
681 | # CONFIG_PAGE_POISONING is not set | 684 | # CONFIG_PAGE_POISONING is not set |
682 | # CONFIG_SAMPLES is not set | 685 | # CONFIG_SAMPLES is not set |
683 | # CONFIG_KMEMCHECK is not set | 686 | # CONFIG_KMEMCHECK is not set |
684 | CONFIG_EARLY_PRINTK=y | 687 | CONFIG_EARLY_PRINTK=y |
685 | CONFIG_HEART_BEAT=y | 688 | # CONFIG_HEART_BEAT is not set |
686 | CONFIG_DEBUG_BOOTMEM=y | 689 | CONFIG_DEBUG_BOOTMEM=y |
687 | 690 | ||
688 | # | 691 | # |
@@ -697,7 +700,6 @@ CONFIG_CRYPTO=y | |||
697 | # | 700 | # |
698 | # Crypto core or helper | 701 | # Crypto core or helper |
699 | # | 702 | # |
700 | # CONFIG_CRYPTO_FIPS is not set | ||
701 | # CONFIG_CRYPTO_MANAGER is not set | 703 | # CONFIG_CRYPTO_MANAGER is not set |
702 | # CONFIG_CRYPTO_MANAGER2 is not set | 704 | # CONFIG_CRYPTO_MANAGER2 is not set |
703 | # CONFIG_CRYPTO_GF128MUL is not set | 705 | # CONFIG_CRYPTO_GF128MUL is not set |
@@ -729,11 +731,13 @@ CONFIG_CRYPTO=y | |||
729 | # | 731 | # |
730 | # CONFIG_CRYPTO_HMAC is not set | 732 | # CONFIG_CRYPTO_HMAC is not set |
731 | # CONFIG_CRYPTO_XCBC is not set | 733 | # CONFIG_CRYPTO_XCBC is not set |
734 | # CONFIG_CRYPTO_VMAC is not set | ||
732 | 735 | ||
733 | # | 736 | # |
734 | # Digest | 737 | # Digest |
735 | # | 738 | # |
736 | # CONFIG_CRYPTO_CRC32C is not set | 739 | # CONFIG_CRYPTO_CRC32C is not set |
740 | # CONFIG_CRYPTO_GHASH is not set | ||
737 | # CONFIG_CRYPTO_MD4 is not set | 741 | # CONFIG_CRYPTO_MD4 is not set |
738 | # CONFIG_CRYPTO_MD5 is not set | 742 | # CONFIG_CRYPTO_MD5 is not set |
739 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | 743 | # CONFIG_CRYPTO_MICHAEL_MIC is not set |
diff --git a/arch/microblaze/configs/nommu_defconfig b/arch/microblaze/configs/nommu_defconfig index 8b638615a972..adb839bab704 100644 --- a/arch/microblaze/configs/nommu_defconfig +++ b/arch/microblaze/configs/nommu_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.31-rc6 | 3 | # Linux kernel version: 2.6.31 |
4 | # Tue Aug 18 10:35:30 2009 | 4 | # Thu Sep 24 10:29:43 2009 |
5 | # | 5 | # |
6 | CONFIG_MICROBLAZE=y | 6 | CONFIG_MICROBLAZE=y |
7 | # CONFIG_SWAP is not set | 7 | # CONFIG_SWAP is not set |
@@ -44,11 +44,12 @@ CONFIG_BSD_PROCESS_ACCT_V3=y | |||
44 | # | 44 | # |
45 | # RCU Subsystem | 45 | # RCU Subsystem |
46 | # | 46 | # |
47 | CONFIG_CLASSIC_RCU=y | 47 | CONFIG_TREE_RCU=y |
48 | # CONFIG_TREE_RCU is not set | 48 | # CONFIG_TREE_PREEMPT_RCU is not set |
49 | # CONFIG_PREEMPT_RCU is not set | 49 | # CONFIG_RCU_TRACE is not set |
50 | CONFIG_RCU_FANOUT=32 | ||
51 | # CONFIG_RCU_FANOUT_EXACT is not set | ||
50 | # CONFIG_TREE_RCU_TRACE is not set | 52 | # CONFIG_TREE_RCU_TRACE is not set |
51 | # CONFIG_PREEMPT_RCU_TRACE is not set | ||
52 | CONFIG_IKCONFIG=y | 53 | CONFIG_IKCONFIG=y |
53 | CONFIG_IKCONFIG_PROC=y | 54 | CONFIG_IKCONFIG_PROC=y |
54 | CONFIG_LOG_BUF_SHIFT=17 | 55 | CONFIG_LOG_BUF_SHIFT=17 |
@@ -243,6 +244,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic" | |||
243 | # CONFIG_NETFILTER is not set | 244 | # CONFIG_NETFILTER is not set |
244 | # CONFIG_IP_DCCP is not set | 245 | # CONFIG_IP_DCCP is not set |
245 | # CONFIG_IP_SCTP is not set | 246 | # CONFIG_IP_SCTP is not set |
247 | # CONFIG_RDS is not set | ||
246 | # CONFIG_TIPC is not set | 248 | # CONFIG_TIPC is not set |
247 | # CONFIG_ATM is not set | 249 | # CONFIG_ATM is not set |
248 | # CONFIG_BRIDGE is not set | 250 | # CONFIG_BRIDGE is not set |
@@ -272,6 +274,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic" | |||
272 | # CONFIG_AF_RXRPC is not set | 274 | # CONFIG_AF_RXRPC is not set |
273 | CONFIG_WIRELESS=y | 275 | CONFIG_WIRELESS=y |
274 | # CONFIG_CFG80211 is not set | 276 | # CONFIG_CFG80211 is not set |
277 | CONFIG_CFG80211_DEFAULT_PS_VALUE=0 | ||
275 | CONFIG_WIRELESS_OLD_REGULATORY=y | 278 | CONFIG_WIRELESS_OLD_REGULATORY=y |
276 | # CONFIG_WIRELESS_EXT is not set | 279 | # CONFIG_WIRELESS_EXT is not set |
277 | # CONFIG_LIB80211 is not set | 280 | # CONFIG_LIB80211 is not set |
@@ -279,7 +282,6 @@ CONFIG_WIRELESS_OLD_REGULATORY=y | |||
279 | # | 282 | # |
280 | # CFG80211 needs to be enabled for MAC80211 | 283 | # CFG80211 needs to be enabled for MAC80211 |
281 | # | 284 | # |
282 | CONFIG_MAC80211_DEFAULT_PS_VALUE=0 | ||
283 | # CONFIG_WIMAX is not set | 285 | # CONFIG_WIMAX is not set |
284 | # CONFIG_RFKILL is not set | 286 | # CONFIG_RFKILL is not set |
285 | # CONFIG_NET_9P is not set | 287 | # CONFIG_NET_9P is not set |
@@ -304,6 +306,7 @@ CONFIG_MTD_PARTITIONS=y | |||
304 | # CONFIG_MTD_TESTS is not set | 306 | # CONFIG_MTD_TESTS is not set |
305 | # CONFIG_MTD_REDBOOT_PARTS is not set | 307 | # CONFIG_MTD_REDBOOT_PARTS is not set |
306 | CONFIG_MTD_CMDLINE_PARTS=y | 308 | CONFIG_MTD_CMDLINE_PARTS=y |
309 | # CONFIG_MTD_OF_PARTS is not set | ||
307 | # CONFIG_MTD_AR7_PARTS is not set | 310 | # CONFIG_MTD_AR7_PARTS is not set |
308 | 311 | ||
309 | # | 312 | # |
@@ -349,6 +352,7 @@ CONFIG_MTD_RAM=y | |||
349 | # | 352 | # |
350 | # CONFIG_MTD_COMPLEX_MAPPINGS is not set | 353 | # CONFIG_MTD_COMPLEX_MAPPINGS is not set |
351 | # CONFIG_MTD_PHYSMAP is not set | 354 | # CONFIG_MTD_PHYSMAP is not set |
355 | # CONFIG_MTD_PHYSMAP_OF is not set | ||
352 | CONFIG_MTD_UCLINUX=y | 356 | CONFIG_MTD_UCLINUX=y |
353 | # CONFIG_MTD_PLATRAM is not set | 357 | # CONFIG_MTD_PLATRAM is not set |
354 | 358 | ||
@@ -429,12 +433,10 @@ CONFIG_NET_ETHERNET=y | |||
429 | # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set | 433 | # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set |
430 | # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set | 434 | # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set |
431 | # CONFIG_KS8842 is not set | 435 | # CONFIG_KS8842 is not set |
436 | # CONFIG_XILINX_EMACLITE is not set | ||
432 | CONFIG_NETDEV_1000=y | 437 | CONFIG_NETDEV_1000=y |
433 | CONFIG_NETDEV_10000=y | 438 | CONFIG_NETDEV_10000=y |
434 | 439 | CONFIG_WLAN=y | |
435 | # | ||
436 | # Wireless LAN | ||
437 | # | ||
438 | # CONFIG_WLAN_PRE80211 is not set | 440 | # CONFIG_WLAN_PRE80211 is not set |
439 | # CONFIG_WLAN_80211 is not set | 441 | # CONFIG_WLAN_80211 is not set |
440 | 442 | ||
@@ -535,7 +537,7 @@ CONFIG_VIDEO_OUTPUT_CONTROL=y | |||
535 | CONFIG_USB_SUPPORT=y | 537 | CONFIG_USB_SUPPORT=y |
536 | CONFIG_USB_ARCH_HAS_HCD=y | 538 | CONFIG_USB_ARCH_HAS_HCD=y |
537 | # CONFIG_USB_ARCH_HAS_OHCI is not set | 539 | # CONFIG_USB_ARCH_HAS_OHCI is not set |
538 | # CONFIG_USB_ARCH_HAS_EHCI is not set | 540 | CONFIG_USB_ARCH_HAS_EHCI=y |
539 | # CONFIG_USB is not set | 541 | # CONFIG_USB is not set |
540 | # CONFIG_USB_OTG_WHITELIST is not set | 542 | # CONFIG_USB_OTG_WHITELIST is not set |
541 | # CONFIG_USB_OTG_BLACKLIST_HUB is not set | 543 | # CONFIG_USB_OTG_BLACKLIST_HUB is not set |
@@ -579,6 +581,7 @@ CONFIG_FS_POSIX_ACL=y | |||
579 | # CONFIG_GFS2_FS is not set | 581 | # CONFIG_GFS2_FS is not set |
580 | # CONFIG_OCFS2_FS is not set | 582 | # CONFIG_OCFS2_FS is not set |
581 | # CONFIG_BTRFS_FS is not set | 583 | # CONFIG_BTRFS_FS is not set |
584 | # CONFIG_NILFS2_FS is not set | ||
582 | CONFIG_FILE_LOCKING=y | 585 | CONFIG_FILE_LOCKING=y |
583 | CONFIG_FSNOTIFY=y | 586 | CONFIG_FSNOTIFY=y |
584 | # CONFIG_DNOTIFY is not set | 587 | # CONFIG_DNOTIFY is not set |
@@ -639,7 +642,6 @@ CONFIG_ROMFS_BACKED_BY_BLOCK=y | |||
639 | CONFIG_ROMFS_ON_BLOCK=y | 642 | CONFIG_ROMFS_ON_BLOCK=y |
640 | # CONFIG_SYSV_FS is not set | 643 | # CONFIG_SYSV_FS is not set |
641 | # CONFIG_UFS_FS is not set | 644 | # CONFIG_UFS_FS is not set |
642 | # CONFIG_NILFS2_FS is not set | ||
643 | CONFIG_NETWORK_FILESYSTEMS=y | 645 | CONFIG_NETWORK_FILESYSTEMS=y |
644 | CONFIG_NFS_FS=y | 646 | CONFIG_NFS_FS=y |
645 | CONFIG_NFS_V3=y | 647 | CONFIG_NFS_V3=y |
@@ -710,18 +712,20 @@ CONFIG_DEBUG_INFO=y | |||
710 | CONFIG_DEBUG_LIST=y | 712 | CONFIG_DEBUG_LIST=y |
711 | CONFIG_DEBUG_SG=y | 713 | CONFIG_DEBUG_SG=y |
712 | # CONFIG_DEBUG_NOTIFIERS is not set | 714 | # CONFIG_DEBUG_NOTIFIERS is not set |
715 | # CONFIG_DEBUG_CREDENTIALS is not set | ||
713 | # CONFIG_BOOT_PRINTK_DELAY is not set | 716 | # CONFIG_BOOT_PRINTK_DELAY is not set |
714 | # CONFIG_RCU_TORTURE_TEST is not set | 717 | # CONFIG_RCU_TORTURE_TEST is not set |
715 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | 718 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set |
716 | # CONFIG_BACKTRACE_SELF_TEST is not set | 719 | # CONFIG_BACKTRACE_SELF_TEST is not set |
717 | # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set | 720 | # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set |
721 | # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set | ||
718 | # CONFIG_FAULT_INJECTION is not set | 722 | # CONFIG_FAULT_INJECTION is not set |
719 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 723 | CONFIG_SYSCTL_SYSCALL_CHECK=y |
720 | # CONFIG_PAGE_POISONING is not set | 724 | # CONFIG_PAGE_POISONING is not set |
721 | # CONFIG_DYNAMIC_DEBUG is not set | 725 | # CONFIG_DYNAMIC_DEBUG is not set |
722 | # CONFIG_SAMPLES is not set | 726 | # CONFIG_SAMPLES is not set |
723 | CONFIG_EARLY_PRINTK=y | 727 | CONFIG_EARLY_PRINTK=y |
724 | CONFIG_HEART_BEAT=y | 728 | # CONFIG_HEART_BEAT is not set |
725 | # CONFIG_DEBUG_BOOTMEM is not set | 729 | # CONFIG_DEBUG_BOOTMEM is not set |
726 | 730 | ||
727 | # | 731 | # |
@@ -736,7 +740,6 @@ CONFIG_CRYPTO=y | |||
736 | # | 740 | # |
737 | # Crypto core or helper | 741 | # Crypto core or helper |
738 | # | 742 | # |
739 | # CONFIG_CRYPTO_FIPS is not set | ||
740 | # CONFIG_CRYPTO_MANAGER is not set | 743 | # CONFIG_CRYPTO_MANAGER is not set |
741 | # CONFIG_CRYPTO_MANAGER2 is not set | 744 | # CONFIG_CRYPTO_MANAGER2 is not set |
742 | # CONFIG_CRYPTO_GF128MUL is not set | 745 | # CONFIG_CRYPTO_GF128MUL is not set |
@@ -768,11 +771,13 @@ CONFIG_CRYPTO=y | |||
768 | # | 771 | # |
769 | # CONFIG_CRYPTO_HMAC is not set | 772 | # CONFIG_CRYPTO_HMAC is not set |
770 | # CONFIG_CRYPTO_XCBC is not set | 773 | # CONFIG_CRYPTO_XCBC is not set |
774 | # CONFIG_CRYPTO_VMAC is not set | ||
771 | 775 | ||
772 | # | 776 | # |
773 | # Digest | 777 | # Digest |
774 | # | 778 | # |
775 | # CONFIG_CRYPTO_CRC32C is not set | 779 | # CONFIG_CRYPTO_CRC32C is not set |
780 | # CONFIG_CRYPTO_GHASH is not set | ||
776 | # CONFIG_CRYPTO_MD4 is not set | 781 | # CONFIG_CRYPTO_MD4 is not set |
777 | # CONFIG_CRYPTO_MD5 is not set | 782 | # CONFIG_CRYPTO_MD5 is not set |
778 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | 783 | # CONFIG_CRYPTO_MICHAEL_MIC is not set |
diff --git a/arch/microblaze/include/asm/asm-compat.h b/arch/microblaze/include/asm/asm-compat.h new file mode 100644 index 000000000000..e7bc9dc11b57 --- /dev/null +++ b/arch/microblaze/include/asm/asm-compat.h | |||
@@ -0,0 +1,17 @@ | |||
1 | #ifndef _ASM_MICROBLAZE_ASM_COMPAT_H | ||
2 | #define _ASM_MICROBLAZE_ASM_COMPAT_H | ||
3 | |||
4 | #include <asm/types.h> | ||
5 | |||
6 | #ifdef __ASSEMBLY__ | ||
7 | # define stringify_in_c(...) __VA_ARGS__ | ||
8 | # define ASM_CONST(x) x | ||
9 | #else | ||
10 | /* This version of stringify will deal with commas... */ | ||
11 | # define __stringify_in_c(...) #__VA_ARGS__ | ||
12 | # define stringify_in_c(...) __stringify_in_c(__VA_ARGS__) " " | ||
13 | # define __ASM_CONST(x) x##UL | ||
14 | # define ASM_CONST(x) __ASM_CONST(x) | ||
15 | #endif | ||
16 | |||
17 | #endif /* _ASM_MICROBLAZE_ASM_COMPAT_H */ | ||
diff --git a/arch/microblaze/include/asm/io.h b/arch/microblaze/include/asm/io.h index 7c3ec13b44d8..fc9997b73c09 100644 --- a/arch/microblaze/include/asm/io.h +++ b/arch/microblaze/include/asm/io.h | |||
@@ -210,6 +210,9 @@ static inline void __iomem *__ioremap(phys_addr_t address, unsigned long size, | |||
210 | #define in_be32(a) __raw_readl((const void __iomem __force *)(a)) | 210 | #define in_be32(a) __raw_readl((const void __iomem __force *)(a)) |
211 | #define in_be16(a) __raw_readw(a) | 211 | #define in_be16(a) __raw_readw(a) |
212 | 212 | ||
213 | #define writel_be(v, a) out_be32((__force unsigned *)a, v) | ||
214 | #define readl_be(a) in_be32((__force unsigned *)a) | ||
215 | |||
213 | /* | 216 | /* |
214 | * Little endian | 217 | * Little endian |
215 | */ | 218 | */ |
diff --git a/arch/microblaze/include/asm/ipc.h b/arch/microblaze/include/asm/ipc.h deleted file mode 100644 index a46e3d9c2a3f..000000000000 --- a/arch/microblaze/include/asm/ipc.h +++ /dev/null | |||
@@ -1 +0,0 @@ | |||
1 | #include <asm-generic/ipc.h> | ||
diff --git a/arch/microblaze/include/asm/page.h b/arch/microblaze/include/asm/page.h index 72aceae88680..880c988c2237 100644 --- a/arch/microblaze/include/asm/page.h +++ b/arch/microblaze/include/asm/page.h | |||
@@ -17,6 +17,7 @@ | |||
17 | 17 | ||
18 | #include <linux/pfn.h> | 18 | #include <linux/pfn.h> |
19 | #include <asm/setup.h> | 19 | #include <asm/setup.h> |
20 | #include <asm/asm-compat.h> | ||
20 | #include <linux/const.h> | 21 | #include <linux/const.h> |
21 | 22 | ||
22 | #ifdef __KERNEL__ | 23 | #ifdef __KERNEL__ |
@@ -26,6 +27,8 @@ | |||
26 | #define PAGE_SIZE (_AC(1, UL) << PAGE_SHIFT) | 27 | #define PAGE_SIZE (_AC(1, UL) << PAGE_SHIFT) |
27 | #define PAGE_MASK (~(PAGE_SIZE-1)) | 28 | #define PAGE_MASK (~(PAGE_SIZE-1)) |
28 | 29 | ||
30 | #define LOAD_OFFSET ASM_CONST((CONFIG_KERNEL_START-CONFIG_KERNEL_BASE_ADDR)) | ||
31 | |||
29 | #ifndef __ASSEMBLY__ | 32 | #ifndef __ASSEMBLY__ |
30 | 33 | ||
31 | #define PAGE_UP(addr) (((addr)+((PAGE_SIZE)-1))&(~((PAGE_SIZE)-1))) | 34 | #define PAGE_UP(addr) (((addr)+((PAGE_SIZE)-1))&(~((PAGE_SIZE)-1))) |
diff --git a/arch/microblaze/include/asm/setup.h b/arch/microblaze/include/asm/setup.h index 27f8dafd8c34..ed67c9ed15b8 100644 --- a/arch/microblaze/include/asm/setup.h +++ b/arch/microblaze/include/asm/setup.h | |||
@@ -38,7 +38,7 @@ extern void early_console_reg_tlb_alloc(unsigned int addr); | |||
38 | void time_init(void); | 38 | void time_init(void); |
39 | void init_IRQ(void); | 39 | void init_IRQ(void); |
40 | void machine_early_init(const char *cmdline, unsigned int ram, | 40 | void machine_early_init(const char *cmdline, unsigned int ram, |
41 | unsigned int fdt); | 41 | unsigned int fdt, unsigned int msr); |
42 | 42 | ||
43 | void machine_restart(char *cmd); | 43 | void machine_restart(char *cmd); |
44 | void machine_shutdown(void); | 44 | void machine_shutdown(void); |
diff --git a/arch/microblaze/include/asm/syscall.h b/arch/microblaze/include/asm/syscall.h new file mode 100644 index 000000000000..048dfcd8d89d --- /dev/null +++ b/arch/microblaze/include/asm/syscall.h | |||
@@ -0,0 +1,99 @@ | |||
1 | #ifndef __ASM_MICROBLAZE_SYSCALL_H | ||
2 | #define __ASM_MICROBLAZE_SYSCALL_H | ||
3 | |||
4 | #include <linux/kernel.h> | ||
5 | #include <linux/sched.h> | ||
6 | #include <asm/ptrace.h> | ||
7 | |||
8 | /* The system call number is given by the user in R12 */ | ||
9 | static inline long syscall_get_nr(struct task_struct *task, | ||
10 | struct pt_regs *regs) | ||
11 | { | ||
12 | return regs->r12; | ||
13 | } | ||
14 | |||
15 | static inline void syscall_rollback(struct task_struct *task, | ||
16 | struct pt_regs *regs) | ||
17 | { | ||
18 | /* TODO. */ | ||
19 | } | ||
20 | |||
21 | static inline long syscall_get_error(struct task_struct *task, | ||
22 | struct pt_regs *regs) | ||
23 | { | ||
24 | return IS_ERR_VALUE(regs->r3) ? regs->r3 : 0; | ||
25 | } | ||
26 | |||
27 | static inline long syscall_get_return_value(struct task_struct *task, | ||
28 | struct pt_regs *regs) | ||
29 | { | ||
30 | return regs->r3; | ||
31 | } | ||
32 | |||
33 | static inline void syscall_set_return_value(struct task_struct *task, | ||
34 | struct pt_regs *regs, | ||
35 | int error, long val) | ||
36 | { | ||
37 | if (error) | ||
38 | regs->r3 = -error; | ||
39 | else | ||
40 | regs->r3 = val; | ||
41 | } | ||
42 | |||
43 | static inline microblaze_reg_t microblaze_get_syscall_arg(struct pt_regs *regs, | ||
44 | unsigned int n) | ||
45 | { | ||
46 | switch (n) { | ||
47 | case 5: return regs->r10; | ||
48 | case 4: return regs->r9; | ||
49 | case 3: return regs->r8; | ||
50 | case 2: return regs->r7; | ||
51 | case 1: return regs->r6; | ||
52 | case 0: return regs->r5; | ||
53 | default: | ||
54 | BUG(); | ||
55 | } | ||
56 | return ~0; | ||
57 | } | ||
58 | |||
59 | static inline void microblaze_set_syscall_arg(struct pt_regs *regs, | ||
60 | unsigned int n, | ||
61 | unsigned long val) | ||
62 | { | ||
63 | switch (n) { | ||
64 | case 5: | ||
65 | regs->r10 = val; | ||
66 | case 4: | ||
67 | regs->r9 = val; | ||
68 | case 3: | ||
69 | regs->r8 = val; | ||
70 | case 2: | ||
71 | regs->r7 = val; | ||
72 | case 1: | ||
73 | regs->r6 = val; | ||
74 | case 0: | ||
75 | regs->r5 = val; | ||
76 | default: | ||
77 | BUG(); | ||
78 | } | ||
79 | } | ||
80 | |||
81 | static inline void syscall_get_arguments(struct task_struct *task, | ||
82 | struct pt_regs *regs, | ||
83 | unsigned int i, unsigned int n, | ||
84 | unsigned long *args) | ||
85 | { | ||
86 | while (n--) | ||
87 | *args++ = microblaze_get_syscall_arg(regs, i++); | ||
88 | } | ||
89 | |||
90 | static inline void syscall_set_arguments(struct task_struct *task, | ||
91 | struct pt_regs *regs, | ||
92 | unsigned int i, unsigned int n, | ||
93 | const unsigned long *args) | ||
94 | { | ||
95 | while (n--) | ||
96 | microblaze_set_syscall_arg(regs, i++, *args++); | ||
97 | } | ||
98 | |||
99 | #endif /* __ASM_MICROBLAZE_SYSCALL_H */ | ||
diff --git a/arch/microblaze/kernel/cpu/cpuinfo.c b/arch/microblaze/kernel/cpu/cpuinfo.c index c411c6757deb..3539babc1c18 100644 --- a/arch/microblaze/kernel/cpu/cpuinfo.c +++ b/arch/microblaze/kernel/cpu/cpuinfo.c | |||
@@ -28,6 +28,7 @@ const struct cpu_ver_key cpu_ver_lookup[] = { | |||
28 | {"7.10.d", 0x0b}, | 28 | {"7.10.d", 0x0b}, |
29 | {"7.20.a", 0x0c}, | 29 | {"7.20.a", 0x0c}, |
30 | {"7.20.b", 0x0d}, | 30 | {"7.20.b", 0x0d}, |
31 | {"7.20.c", 0x0e}, | ||
31 | /* FIXME There is no keycode defined in MBV for these versions */ | 32 | /* FIXME There is no keycode defined in MBV for these versions */ |
32 | {"2.10.a", 0x10}, | 33 | {"2.10.a", 0x10}, |
33 | {"3.00.a", 0x20}, | 34 | {"3.00.a", 0x20}, |
@@ -49,6 +50,8 @@ const struct family_string_key family_string_lookup[] = { | |||
49 | {"spartan3a", 0xa}, | 50 | {"spartan3a", 0xa}, |
50 | {"spartan3an", 0xb}, | 51 | {"spartan3an", 0xb}, |
51 | {"spartan3adsp", 0xc}, | 52 | {"spartan3adsp", 0xc}, |
53 | {"spartan6", 0xd}, | ||
54 | {"virtex6", 0xe}, | ||
52 | /* FIXME There is no key code defined for spartan2 */ | 55 | /* FIXME There is no key code defined for spartan2 */ |
53 | {"spartan2", 0xf0}, | 56 | {"spartan2", 0xf0}, |
54 | {NULL, 0}, | 57 | {NULL, 0}, |
diff --git a/arch/microblaze/kernel/entry.S b/arch/microblaze/kernel/entry.S index c7353e79f4a2..acc1f05d1e2c 100644 --- a/arch/microblaze/kernel/entry.S +++ b/arch/microblaze/kernel/entry.S | |||
@@ -308,38 +308,69 @@ C_ENTRY(_user_exception): | |||
308 | swi r12, r1, PTO+PT_R0; | 308 | swi r12, r1, PTO+PT_R0; |
309 | tovirt(r1,r1) | 309 | tovirt(r1,r1) |
310 | 310 | ||
311 | la r15, r0, ret_from_trap-8 | ||
312 | /* where the trap should return need -8 to adjust for rtsd r15, 8*/ | 311 | /* where the trap should return need -8 to adjust for rtsd r15, 8*/ |
313 | /* Jump to the appropriate function for the system call number in r12 | 312 | /* Jump to the appropriate function for the system call number in r12 |
314 | * (r12 is not preserved), or return an error if r12 is not valid. The LP | 313 | * (r12 is not preserved), or return an error if r12 is not valid. The LP |
315 | * register should point to the location where | 314 | * register should point to the location where |
316 | * the called function should return. [note that MAKE_SYS_CALL uses label 1] */ | 315 | * the called function should return. [note that MAKE_SYS_CALL uses label 1] */ |
317 | /* See if the system call number is valid. */ | 316 | |
317 | # Step into virtual mode. | ||
318 | set_vms; | ||
319 | addik r11, r0, 3f | ||
320 | rtid r11, 0 | ||
321 | nop | ||
322 | 3: | ||
323 | add r11, r0, CURRENT_TASK /* Get current task ptr into r11 */ | ||
324 | lwi r11, r11, TS_THREAD_INFO /* get thread info */ | ||
325 | lwi r11, r11, TI_FLAGS /* get flags in thread info */ | ||
326 | andi r11, r11, _TIF_WORK_SYSCALL_MASK | ||
327 | beqi r11, 4f | ||
328 | |||
329 | addik r3, r0, -ENOSYS | ||
330 | swi r3, r1, PTO + PT_R3 | ||
331 | brlid r15, do_syscall_trace_enter | ||
332 | addik r5, r1, PTO + PT_R0 | ||
333 | |||
334 | # do_syscall_trace_enter returns the new syscall nr. | ||
335 | addk r12, r0, r3 | ||
336 | lwi r5, r1, PTO+PT_R5; | ||
337 | lwi r6, r1, PTO+PT_R6; | ||
338 | lwi r7, r1, PTO+PT_R7; | ||
339 | lwi r8, r1, PTO+PT_R8; | ||
340 | lwi r9, r1, PTO+PT_R9; | ||
341 | lwi r10, r1, PTO+PT_R10; | ||
342 | 4: | ||
343 | /* Jump to the appropriate function for the system call number in r12 | ||
344 | * (r12 is not preserved), or return an error if r12 is not valid. | ||
345 | * The LP register should point to the location where the called function | ||
346 | * should return. [note that MAKE_SYS_CALL uses label 1] */ | ||
347 | /* See if the system call number is valid */ | ||
318 | addi r11, r12, -__NR_syscalls; | 348 | addi r11, r12, -__NR_syscalls; |
319 | bgei r11,1f; | 349 | bgei r11,5f; |
320 | /* Figure out which function to use for this system call. */ | 350 | /* Figure out which function to use for this system call. */ |
321 | /* Note Microblaze barrel shift is optional, so don't rely on it */ | 351 | /* Note Microblaze barrel shift is optional, so don't rely on it */ |
322 | add r12, r12, r12; /* convert num -> ptr */ | 352 | add r12, r12, r12; /* convert num -> ptr */ |
323 | add r12, r12, r12; | 353 | add r12, r12, r12; |
324 | 354 | ||
325 | /* Trac syscalls and stored them to r0_ram */ | 355 | /* Trac syscalls and stored them to r0_ram */ |
326 | lwi r3, r12, 0x400 + TOPHYS(r0_ram) | 356 | lwi r3, r12, 0x400 + r0_ram |
327 | addi r3, r3, 1 | 357 | addi r3, r3, 1 |
328 | swi r3, r12, 0x400 + TOPHYS(r0_ram) | 358 | swi r3, r12, 0x400 + r0_ram |
359 | |||
360 | # Find and jump into the syscall handler. | ||
361 | lwi r12, r12, sys_call_table | ||
362 | /* where the trap should return need -8 to adjust for rtsd r15, 8 */ | ||
363 | la r15, r0, ret_from_trap-8 | ||
364 | bra r12 | ||
329 | 365 | ||
330 | lwi r12, r12, TOPHYS(sys_call_table); /* Function ptr */ | ||
331 | /* Make the system call. to r12*/ | ||
332 | set_vms; | ||
333 | rtid r12, 0; | ||
334 | nop; | ||
335 | /* The syscall number is invalid, return an error. */ | 366 | /* The syscall number is invalid, return an error. */ |
336 | 1: VM_ON; /* RETURN() expects virtual mode*/ | 367 | 5: |
337 | addi r3, r0, -ENOSYS; | 368 | addi r3, r0, -ENOSYS; |
338 | rtsd r15,8; /* looks like a normal subroutine return */ | 369 | rtsd r15,8; /* looks like a normal subroutine return */ |
339 | or r0, r0, r0 | 370 | or r0, r0, r0 |
340 | 371 | ||
341 | 372 | ||
342 | /* Entry point used to return from a syscall/trap. */ | 373 | /* Entry point used to return from a syscall/trap */ |
343 | /* We re-enable BIP bit before state restore */ | 374 | /* We re-enable BIP bit before state restore */ |
344 | C_ENTRY(ret_from_trap): | 375 | C_ENTRY(ret_from_trap): |
345 | set_bip; /* Ints masked for state restore*/ | 376 | set_bip; /* Ints masked for state restore*/ |
@@ -349,6 +380,23 @@ C_ENTRY(ret_from_trap): | |||
349 | 380 | ||
350 | /* We're returning to user mode, so check for various conditions that | 381 | /* We're returning to user mode, so check for various conditions that |
351 | * trigger rescheduling. */ | 382 | * trigger rescheduling. */ |
383 | # FIXME: Restructure all these flag checks. | ||
384 | add r11, r0, CURRENT_TASK; /* Get current task ptr into r11 */ | ||
385 | lwi r11, r11, TS_THREAD_INFO; /* get thread info */ | ||
386 | lwi r11, r11, TI_FLAGS; /* get flags in thread info */ | ||
387 | andi r11, r11, _TIF_WORK_SYSCALL_MASK | ||
388 | beqi r11, 1f | ||
389 | |||
390 | swi r3, r1, PTO + PT_R3 | ||
391 | swi r4, r1, PTO + PT_R4 | ||
392 | brlid r15, do_syscall_trace_leave | ||
393 | addik r5, r1, PTO + PT_R0 | ||
394 | lwi r3, r1, PTO + PT_R3 | ||
395 | lwi r4, r1, PTO + PT_R4 | ||
396 | 1: | ||
397 | |||
398 | /* We're returning to user mode, so check for various conditions that | ||
399 | * trigger rescheduling. */ | ||
352 | /* Get current task ptr into r11 */ | 400 | /* Get current task ptr into r11 */ |
353 | add r11, r0, CURRENT_TASK; /* Get current task ptr into r11 */ | 401 | add r11, r0, CURRENT_TASK; /* Get current task ptr into r11 */ |
354 | lwi r11, r11, TS_THREAD_INFO; /* get thread info */ | 402 | lwi r11, r11, TS_THREAD_INFO; /* get thread info */ |
diff --git a/arch/microblaze/kernel/exceptions.c b/arch/microblaze/kernel/exceptions.c index 0cb64a31e89a..d9f70f83097f 100644 --- a/arch/microblaze/kernel/exceptions.c +++ b/arch/microblaze/kernel/exceptions.c | |||
@@ -72,7 +72,8 @@ asmlinkage void full_exception(struct pt_regs *regs, unsigned int type, | |||
72 | #endif | 72 | #endif |
73 | 73 | ||
74 | #if 0 | 74 | #if 0 |
75 | printk(KERN_WARNING "Exception %02x in %s mode, FSR=%08x PC=%08x ESR=%08x\n", | 75 | printk(KERN_WARNING "Exception %02x in %s mode, FSR=%08x PC=%08x " \ |
76 | "ESR=%08x\n", | ||
76 | type, user_mode(regs) ? "user" : "kernel", fsr, | 77 | type, user_mode(regs) ? "user" : "kernel", fsr, |
77 | (unsigned int) regs->pc, (unsigned int) regs->esr); | 78 | (unsigned int) regs->pc, (unsigned int) regs->esr); |
78 | #endif | 79 | #endif |
@@ -80,42 +81,50 @@ asmlinkage void full_exception(struct pt_regs *regs, unsigned int type, | |||
80 | switch (type & 0x1F) { | 81 | switch (type & 0x1F) { |
81 | case MICROBLAZE_ILL_OPCODE_EXCEPTION: | 82 | case MICROBLAZE_ILL_OPCODE_EXCEPTION: |
82 | if (user_mode(regs)) { | 83 | if (user_mode(regs)) { |
83 | printk(KERN_WARNING "Illegal opcode exception in user mode.\n"); | 84 | pr_debug(KERN_WARNING "Illegal opcode exception " \ |
85 | "in user mode.\n"); | ||
84 | _exception(SIGILL, regs, ILL_ILLOPC, addr); | 86 | _exception(SIGILL, regs, ILL_ILLOPC, addr); |
85 | return; | 87 | return; |
86 | } | 88 | } |
87 | printk(KERN_WARNING "Illegal opcode exception in kernel mode.\n"); | 89 | printk(KERN_WARNING "Illegal opcode exception " \ |
90 | "in kernel mode.\n"); | ||
88 | die("opcode exception", regs, SIGBUS); | 91 | die("opcode exception", regs, SIGBUS); |
89 | break; | 92 | break; |
90 | case MICROBLAZE_IBUS_EXCEPTION: | 93 | case MICROBLAZE_IBUS_EXCEPTION: |
91 | if (user_mode(regs)) { | 94 | if (user_mode(regs)) { |
92 | printk(KERN_WARNING "Instruction bus error exception in user mode.\n"); | 95 | pr_debug(KERN_WARNING "Instruction bus error " \ |
96 | "exception in user mode.\n"); | ||
93 | _exception(SIGBUS, regs, BUS_ADRERR, addr); | 97 | _exception(SIGBUS, regs, BUS_ADRERR, addr); |
94 | return; | 98 | return; |
95 | } | 99 | } |
96 | printk(KERN_WARNING "Instruction bus error exception in kernel mode.\n"); | 100 | printk(KERN_WARNING "Instruction bus error exception " \ |
101 | "in kernel mode.\n"); | ||
97 | die("bus exception", regs, SIGBUS); | 102 | die("bus exception", regs, SIGBUS); |
98 | break; | 103 | break; |
99 | case MICROBLAZE_DBUS_EXCEPTION: | 104 | case MICROBLAZE_DBUS_EXCEPTION: |
100 | if (user_mode(regs)) { | 105 | if (user_mode(regs)) { |
101 | printk(KERN_WARNING "Data bus error exception in user mode.\n"); | 106 | pr_debug(KERN_WARNING "Data bus error exception " \ |
107 | "in user mode.\n"); | ||
102 | _exception(SIGBUS, regs, BUS_ADRERR, addr); | 108 | _exception(SIGBUS, regs, BUS_ADRERR, addr); |
103 | return; | 109 | return; |
104 | } | 110 | } |
105 | printk(KERN_WARNING "Data bus error exception in kernel mode.\n"); | 111 | printk(KERN_WARNING "Data bus error exception " \ |
112 | "in kernel mode.\n"); | ||
106 | die("bus exception", regs, SIGBUS); | 113 | die("bus exception", regs, SIGBUS); |
107 | break; | 114 | break; |
108 | case MICROBLAZE_DIV_ZERO_EXCEPTION: | 115 | case MICROBLAZE_DIV_ZERO_EXCEPTION: |
109 | if (user_mode(regs)) { | 116 | if (user_mode(regs)) { |
110 | printk(KERN_WARNING "Divide by zero exception in user mode\n"); | 117 | pr_debug(KERN_WARNING "Divide by zero exception " \ |
111 | _exception(SIGILL, regs, ILL_ILLOPC, addr); | 118 | "in user mode\n"); |
119 | _exception(SIGILL, regs, FPE_INTDIV, addr); | ||
112 | return; | 120 | return; |
113 | } | 121 | } |
114 | printk(KERN_WARNING "Divide by zero exception in kernel mode.\n"); | 122 | printk(KERN_WARNING "Divide by zero exception " \ |
123 | "in kernel mode.\n"); | ||
115 | die("Divide by exception", regs, SIGBUS); | 124 | die("Divide by exception", regs, SIGBUS); |
116 | break; | 125 | break; |
117 | case MICROBLAZE_FPU_EXCEPTION: | 126 | case MICROBLAZE_FPU_EXCEPTION: |
118 | printk(KERN_WARNING "FPU exception\n"); | 127 | pr_debug(KERN_WARNING "FPU exception\n"); |
119 | /* IEEE FP exception */ | 128 | /* IEEE FP exception */ |
120 | /* I removed fsr variable and use code var for storing fsr */ | 129 | /* I removed fsr variable and use code var for storing fsr */ |
121 | if (fsr & FSR_IO) | 130 | if (fsr & FSR_IO) |
@@ -133,7 +142,7 @@ asmlinkage void full_exception(struct pt_regs *regs, unsigned int type, | |||
133 | 142 | ||
134 | #ifdef CONFIG_MMU | 143 | #ifdef CONFIG_MMU |
135 | case MICROBLAZE_PRIVILEGED_EXCEPTION: | 144 | case MICROBLAZE_PRIVILEGED_EXCEPTION: |
136 | printk(KERN_WARNING "Privileged exception\n"); | 145 | pr_debug(KERN_WARNING "Privileged exception\n"); |
137 | /* "brk r0,r0" - used as debug breakpoint */ | 146 | /* "brk r0,r0" - used as debug breakpoint */ |
138 | if (get_user(code, (unsigned long *)regs->pc) == 0 | 147 | if (get_user(code, (unsigned long *)regs->pc) == 0 |
139 | && code == 0x980c0000) { | 148 | && code == 0x980c0000) { |
diff --git a/arch/microblaze/kernel/head.S b/arch/microblaze/kernel/head.S index e41c6ce2a7be..697ce3007f30 100644 --- a/arch/microblaze/kernel/head.S +++ b/arch/microblaze/kernel/head.S | |||
@@ -54,6 +54,16 @@ ENTRY(_start) | |||
54 | mfs r1, rmsr | 54 | mfs r1, rmsr |
55 | andi r1, r1, ~2 | 55 | andi r1, r1, ~2 |
56 | mts rmsr, r1 | 56 | mts rmsr, r1 |
57 | /* | ||
58 | * Here is checking mechanism which check if Microblaze has msr instructions | ||
59 | * We load msr and compare it with previous r1 value - if is the same, | ||
60 | * msr instructions works if not - cpu don't have them. | ||
61 | */ | ||
62 | /* r8=0 - I have msr instr, 1 - I don't have them */ | ||
63 | rsubi r0, r0, 1 /* set the carry bit */ | ||
64 | msrclr r0, 0x4 /* try to clear it */ | ||
65 | /* read the carry bit, r8 will be '0' if msrclr exists */ | ||
66 | addik r8, r0, 0 | ||
57 | 67 | ||
58 | /* r7 may point to an FDT, or there may be one linked in. | 68 | /* r7 may point to an FDT, or there may be one linked in. |
59 | if it's in r7, we've got to save it away ASAP. | 69 | if it's in r7, we've got to save it away ASAP. |
@@ -209,8 +219,8 @@ start_here: | |||
209 | * Please see $(ARCH)/mach-$(SUBARCH)/setup.c for | 219 | * Please see $(ARCH)/mach-$(SUBARCH)/setup.c for |
210 | * the function. | 220 | * the function. |
211 | */ | 221 | */ |
212 | la r8, r0, machine_early_init | 222 | la r9, r0, machine_early_init |
213 | brald r15, r8 | 223 | brald r15, r9 |
214 | nop | 224 | nop |
215 | 225 | ||
216 | #ifndef CONFIG_MMU | 226 | #ifndef CONFIG_MMU |
diff --git a/arch/microblaze/kernel/hw_exception_handler.S b/arch/microblaze/kernel/hw_exception_handler.S index 3288c9737671..6b0288ebccd6 100644 --- a/arch/microblaze/kernel/hw_exception_handler.S +++ b/arch/microblaze/kernel/hw_exception_handler.S | |||
@@ -84,9 +84,10 @@ | |||
84 | #define NUM_TO_REG(num) r ## num | 84 | #define NUM_TO_REG(num) r ## num |
85 | 85 | ||
86 | #ifdef CONFIG_MMU | 86 | #ifdef CONFIG_MMU |
87 | /* FIXME you can't change first load of MSR because there is | ||
88 | * hardcoded jump bri 4 */ | ||
89 | #define RESTORE_STATE \ | 87 | #define RESTORE_STATE \ |
88 | lwi r5, r1, 0; \ | ||
89 | mts rmsr, r5; \ | ||
90 | nop; \ | ||
90 | lwi r3, r1, PT_R3; \ | 91 | lwi r3, r1, PT_R3; \ |
91 | lwi r4, r1, PT_R4; \ | 92 | lwi r4, r1, PT_R4; \ |
92 | lwi r5, r1, PT_R5; \ | 93 | lwi r5, r1, PT_R5; \ |
@@ -309,6 +310,9 @@ _hw_exception_handler: | |||
309 | lwi r31, r0, TOPHYS(PER_CPU(CURRENT_SAVE)) /* get saved current */ | 310 | lwi r31, r0, TOPHYS(PER_CPU(CURRENT_SAVE)) /* get saved current */ |
310 | #endif | 311 | #endif |
311 | 312 | ||
313 | mfs r5, rmsr; | ||
314 | nop | ||
315 | swi r5, r1, 0; | ||
312 | mfs r3, resr | 316 | mfs r3, resr |
313 | nop | 317 | nop |
314 | mfs r4, rear; | 318 | mfs r4, rear; |
@@ -380,6 +384,8 @@ handle_other_ex: /* Handle Other exceptions here */ | |||
380 | addk r8, r17, r0; /* Load exception address */ | 384 | addk r8, r17, r0; /* Load exception address */ |
381 | bralid r15, full_exception; /* Branch to the handler */ | 385 | bralid r15, full_exception; /* Branch to the handler */ |
382 | nop; | 386 | nop; |
387 | mts r0, rfsr; /* Clear sticky fsr */ | ||
388 | nop | ||
383 | 389 | ||
384 | /* | 390 | /* |
385 | * Trigger execution of the signal handler by enabling | 391 | * Trigger execution of the signal handler by enabling |
diff --git a/arch/microblaze/kernel/process.c b/arch/microblaze/kernel/process.c index 00b12c6d5326..4201c743cc9f 100644 --- a/arch/microblaze/kernel/process.c +++ b/arch/microblaze/kernel/process.c | |||
@@ -235,6 +235,7 @@ void start_thread(struct pt_regs *regs, unsigned long pc, unsigned long usp) | |||
235 | regs->pc = pc; | 235 | regs->pc = pc; |
236 | regs->r1 = usp; | 236 | regs->r1 = usp; |
237 | regs->pt_mode = 0; | 237 | regs->pt_mode = 0; |
238 | regs->msr |= MSR_UMS; | ||
238 | } | 239 | } |
239 | 240 | ||
240 | #ifdef CONFIG_MMU | 241 | #ifdef CONFIG_MMU |
diff --git a/arch/microblaze/kernel/ptrace.c b/arch/microblaze/kernel/ptrace.c index 53ff39af6a5c..4b3ac32754de 100644 --- a/arch/microblaze/kernel/ptrace.c +++ b/arch/microblaze/kernel/ptrace.c | |||
@@ -29,6 +29,10 @@ | |||
29 | #include <linux/sched.h> | 29 | #include <linux/sched.h> |
30 | #include <linux/ptrace.h> | 30 | #include <linux/ptrace.h> |
31 | #include <linux/signal.h> | 31 | #include <linux/signal.h> |
32 | #include <linux/elf.h> | ||
33 | #include <linux/audit.h> | ||
34 | #include <linux/seccomp.h> | ||
35 | #include <linux/tracehook.h> | ||
32 | 36 | ||
33 | #include <linux/errno.h> | 37 | #include <linux/errno.h> |
34 | #include <asm/processor.h> | 38 | #include <asm/processor.h> |
@@ -174,6 +178,64 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
174 | return rval; | 178 | return rval; |
175 | } | 179 | } |
176 | 180 | ||
181 | asmlinkage long do_syscall_trace_enter(struct pt_regs *regs) | ||
182 | { | ||
183 | long ret = 0; | ||
184 | |||
185 | secure_computing(regs->r12); | ||
186 | |||
187 | if (test_thread_flag(TIF_SYSCALL_TRACE) && | ||
188 | tracehook_report_syscall_entry(regs)) | ||
189 | /* | ||
190 | * Tracing decided this syscall should not happen. | ||
191 | * We'll return a bogus call number to get an ENOSYS | ||
192 | * error, but leave the original number in regs->regs[0]. | ||
193 | */ | ||
194 | ret = -1L; | ||
195 | |||
196 | if (unlikely(current->audit_context)) | ||
197 | audit_syscall_entry(EM_XILINX_MICROBLAZE, regs->r12, | ||
198 | regs->r5, regs->r6, | ||
199 | regs->r7, regs->r8); | ||
200 | |||
201 | return ret ?: regs->r12; | ||
202 | } | ||
203 | |||
204 | asmlinkage void do_syscall_trace_leave(struct pt_regs *regs) | ||
205 | { | ||
206 | int step; | ||
207 | |||
208 | if (unlikely(current->audit_context)) | ||
209 | audit_syscall_exit(AUDITSC_RESULT(regs->r3), regs->r3); | ||
210 | |||
211 | step = test_thread_flag(TIF_SINGLESTEP); | ||
212 | if (step || test_thread_flag(TIF_SYSCALL_TRACE)) | ||
213 | tracehook_report_syscall_exit(regs, step); | ||
214 | } | ||
215 | |||
216 | #if 0 | ||
217 | static asmlinkage void syscall_trace(void) | ||
218 | { | ||
219 | if (!test_thread_flag(TIF_SYSCALL_TRACE)) | ||
220 | return; | ||
221 | if (!(current->ptrace & PT_PTRACED)) | ||
222 | return; | ||
223 | /* The 0x80 provides a way for the tracing parent to distinguish | ||
224 | between a syscall stop and SIGTRAP delivery */ | ||
225 | ptrace_notify(SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD) | ||
226 | ? 0x80 : 0)); | ||
227 | /* | ||
228 | * this isn't the same as continuing with a signal, but it will do | ||
229 | * for normal use. strace only continues with a signal if the | ||
230 | * stopping signal is not SIGTRAP. -brl | ||
231 | */ | ||
232 | if (current->exit_code) { | ||
233 | send_sig(current->exit_code, current, 1); | ||
234 | current->exit_code = 0; | ||
235 | } | ||
236 | } | ||
237 | #endif | ||
238 | |||
177 | void ptrace_disable(struct task_struct *child) | 239 | void ptrace_disable(struct task_struct *child) |
178 | { | 240 | { |
179 | /* nothing to do */ | 241 | /* nothing to do */ |
diff --git a/arch/microblaze/kernel/setup.c b/arch/microblaze/kernel/setup.c index 2a97bf513b64..8c1e0f4dcf18 100644 --- a/arch/microblaze/kernel/setup.c +++ b/arch/microblaze/kernel/setup.c | |||
@@ -94,7 +94,7 @@ inline unsigned get_romfs_len(unsigned *addr) | |||
94 | #endif /* CONFIG_MTD_UCLINUX_EBSS */ | 94 | #endif /* CONFIG_MTD_UCLINUX_EBSS */ |
95 | 95 | ||
96 | void __init machine_early_init(const char *cmdline, unsigned int ram, | 96 | void __init machine_early_init(const char *cmdline, unsigned int ram, |
97 | unsigned int fdt) | 97 | unsigned int fdt, unsigned int msr) |
98 | { | 98 | { |
99 | unsigned long *src, *dst = (unsigned long *)0x0; | 99 | unsigned long *src, *dst = (unsigned long *)0x0; |
100 | 100 | ||
@@ -157,6 +157,16 @@ void __init machine_early_init(const char *cmdline, unsigned int ram, | |||
157 | early_printk("New klimit: 0x%08x\n", (unsigned)klimit); | 157 | early_printk("New klimit: 0x%08x\n", (unsigned)klimit); |
158 | #endif | 158 | #endif |
159 | 159 | ||
160 | #if CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR | ||
161 | if (msr) | ||
162 | early_printk("!!!Your kernel has setup MSR instruction but " | ||
163 | "CPU don't have it %d\n", msr); | ||
164 | #else | ||
165 | if (!msr) | ||
166 | early_printk("!!!Your kernel not setup MSR instruction but " | ||
167 | "CPU have it %d\n", msr); | ||
168 | #endif | ||
169 | |||
160 | for (src = __ivt_start; src < __ivt_end; src++, dst++) | 170 | for (src = __ivt_start; src < __ivt_end; src++, dst++) |
161 | *dst = *src; | 171 | *dst = *src; |
162 | 172 | ||
diff --git a/arch/microblaze/kernel/vmlinux.lds.S b/arch/microblaze/kernel/vmlinux.lds.S index ec5fa91a48d8..e704188d7855 100644 --- a/arch/microblaze/kernel/vmlinux.lds.S +++ b/arch/microblaze/kernel/vmlinux.lds.S | |||
@@ -12,13 +12,16 @@ OUTPUT_FORMAT("elf32-microblaze", "elf32-microblaze", "elf32-microblaze") | |||
12 | OUTPUT_ARCH(microblaze) | 12 | OUTPUT_ARCH(microblaze) |
13 | ENTRY(_start) | 13 | ENTRY(_start) |
14 | 14 | ||
15 | #include <asm/page.h> | ||
15 | #include <asm-generic/vmlinux.lds.h> | 16 | #include <asm-generic/vmlinux.lds.h> |
17 | #include <asm/thread_info.h> | ||
16 | 18 | ||
17 | jiffies = jiffies_64 + 4; | 19 | jiffies = jiffies_64 + 4; |
18 | 20 | ||
19 | SECTIONS { | 21 | SECTIONS { |
20 | . = CONFIG_KERNEL_START; | 22 | . = CONFIG_KERNEL_START; |
21 | .text : { | 23 | _start = CONFIG_KERNEL_BASE_ADDR; |
24 | .text : AT(ADDR(.text) - LOAD_OFFSET) { | ||
22 | _text = . ; | 25 | _text = . ; |
23 | _stext = . ; | 26 | _stext = . ; |
24 | *(.text .text.*) | 27 | *(.text .text.*) |
@@ -33,24 +36,22 @@ SECTIONS { | |||
33 | } | 36 | } |
34 | 37 | ||
35 | . = ALIGN (4) ; | 38 | . = ALIGN (4) ; |
36 | _fdt_start = . ; /* place for fdt blob */ | 39 | __fdt_blob : AT(ADDR(__fdt_blob) - LOAD_OFFSET) { |
37 | . = . + 0x4000; | 40 | _fdt_start = . ; /* place for fdt blob */ |
38 | _fdt_end = . ; | 41 | *(__fdt_blob) ; /* Any link-placed DTB */ |
42 | . = _fdt_start + 0x4000; /* Pad up to 16kbyte */ | ||
43 | _fdt_end = . ; | ||
44 | } | ||
39 | 45 | ||
40 | . = ALIGN(16); | 46 | . = ALIGN(16); |
41 | RODATA | 47 | RODATA |
42 | . = ALIGN(16); | 48 | EXCEPTION_TABLE(16) |
43 | __ex_table : { | ||
44 | __start___ex_table = .; | ||
45 | *(__ex_table) | ||
46 | __stop___ex_table = .; | ||
47 | } | ||
48 | 49 | ||
49 | /* | 50 | /* |
50 | * sdata2 section can go anywhere, but must be word aligned | 51 | * sdata2 section can go anywhere, but must be word aligned |
51 | * and SDA2_BASE must point to the middle of it | 52 | * and SDA2_BASE must point to the middle of it |
52 | */ | 53 | */ |
53 | .sdata2 : { | 54 | .sdata2 : AT(ADDR(.sdata2) - LOAD_OFFSET) { |
54 | _ssrw = .; | 55 | _ssrw = .; |
55 | . = ALIGN(4096); /* page aligned when MMU used - origin 0x8 */ | 56 | . = ALIGN(4096); /* page aligned when MMU used - origin 0x8 */ |
56 | *(.sdata2) | 57 | *(.sdata2) |
@@ -61,12 +62,7 @@ SECTIONS { | |||
61 | } | 62 | } |
62 | 63 | ||
63 | _sdata = . ; | 64 | _sdata = . ; |
64 | .data ALIGN (4096) : { /* page aligned when MMU used - origin 0x4 */ | 65 | RW_DATA_SECTION(32, PAGE_SIZE, THREAD_SIZE) |
65 | DATA_DATA | ||
66 | CONSTRUCTORS | ||
67 | } | ||
68 | . = ALIGN(32); | ||
69 | .data.cacheline_aligned : { *(.data.cacheline_aligned) } | ||
70 | _edata = . ; | 66 | _edata = . ; |
71 | 67 | ||
72 | /* Reserve some low RAM for r0 based memory references */ | 68 | /* Reserve some low RAM for r0 based memory references */ |
@@ -74,18 +70,14 @@ SECTIONS { | |||
74 | r0_ram = . ; | 70 | r0_ram = . ; |
75 | . = . + 4096; /* a page should be enough */ | 71 | . = . + 4096; /* a page should be enough */ |
76 | 72 | ||
77 | /* The initial task */ | ||
78 | . = ALIGN(8192); | ||
79 | .data.init_task : { *(.data.init_task) } | ||
80 | |||
81 | /* Under the microblaze ABI, .sdata and .sbss must be contiguous */ | 73 | /* Under the microblaze ABI, .sdata and .sbss must be contiguous */ |
82 | . = ALIGN(8); | 74 | . = ALIGN(8); |
83 | .sdata : { | 75 | .sdata : AT(ADDR(.sdata) - LOAD_OFFSET) { |
84 | _ssro = .; | 76 | _ssro = .; |
85 | *(.sdata) | 77 | *(.sdata) |
86 | } | 78 | } |
87 | 79 | ||
88 | .sbss : { | 80 | .sbss : AT(ADDR(.sbss) - LOAD_OFFSET) { |
89 | _ssbss = .; | 81 | _ssbss = .; |
90 | *(.sbss) | 82 | *(.sbss) |
91 | _esbss = .; | 83 | _esbss = .; |
@@ -96,47 +88,36 @@ SECTIONS { | |||
96 | 88 | ||
97 | __init_begin = .; | 89 | __init_begin = .; |
98 | 90 | ||
99 | . = ALIGN(4096); | 91 | INIT_TEXT_SECTION(PAGE_SIZE) |
100 | .init.text : { | ||
101 | _sinittext = . ; | ||
102 | INIT_TEXT | ||
103 | _einittext = .; | ||
104 | } | ||
105 | 92 | ||
106 | .init.data : { | 93 | .init.data : AT(ADDR(.init.data) - LOAD_OFFSET) { |
107 | INIT_DATA | 94 | INIT_DATA |
108 | } | 95 | } |
109 | 96 | ||
110 | . = ALIGN(4); | 97 | . = ALIGN(4); |
111 | .init.ivt : { | 98 | .init.ivt : AT(ADDR(.init.ivt) - LOAD_OFFSET) { |
112 | __ivt_start = .; | 99 | __ivt_start = .; |
113 | *(.init.ivt) | 100 | *(.init.ivt) |
114 | __ivt_end = .; | 101 | __ivt_end = .; |
115 | } | 102 | } |
116 | 103 | ||
117 | .init.setup : { | 104 | .init.setup : AT(ADDR(.init.setup) - LOAD_OFFSET) { |
118 | __setup_start = .; | 105 | INIT_SETUP(0) |
119 | *(.init.setup) | ||
120 | __setup_end = .; | ||
121 | } | 106 | } |
122 | 107 | ||
123 | .initcall.init : { | 108 | .initcall.init : AT(ADDR(.initcall.init) - LOAD_OFFSET ) { |
124 | __initcall_start = .; | 109 | INIT_CALLS |
125 | INITCALLS | ||
126 | __initcall_end = .; | ||
127 | } | 110 | } |
128 | 111 | ||
129 | .con_initcall.init : { | 112 | .con_initcall.init : AT(ADDR(.con_initcall.init) - LOAD_OFFSET) { |
130 | __con_initcall_start = .; | 113 | CON_INITCALL |
131 | *(.con_initcall.init) | ||
132 | __con_initcall_end = .; | ||
133 | } | 114 | } |
134 | 115 | ||
135 | SECURITY_INIT | 116 | SECURITY_INIT |
136 | 117 | ||
137 | __init_end_before_initramfs = .; | 118 | __init_end_before_initramfs = .; |
138 | 119 | ||
139 | .init.ramfs ALIGN(4096) : { | 120 | .init.ramfs ALIGN(4096) : AT(ADDR(.init.ramfs) - LOAD_OFFSET) { |
140 | __initramfs_start = .; | 121 | __initramfs_start = .; |
141 | *(.init.ramfs) | 122 | *(.init.ramfs) |
142 | __initramfs_end = .; | 123 | __initramfs_end = .; |
@@ -152,7 +133,8 @@ SECTIONS { | |||
152 | } | 133 | } |
153 | __init_end = .; | 134 | __init_end = .; |
154 | 135 | ||
155 | .bss ALIGN (4096) : { /* page aligned when MMU used */ | 136 | .bss ALIGN (4096) : AT(ADDR(.bss) - LOAD_OFFSET) { |
137 | /* page aligned when MMU used */ | ||
156 | __bss_start = . ; | 138 | __bss_start = . ; |
157 | *(.bss*) | 139 | *(.bss*) |
158 | *(COMMON) | 140 | *(COMMON) |
diff --git a/arch/microblaze/mm/init.c b/arch/microblaze/mm/init.c index 1110784eb3f7..a44892e7cd5b 100644 --- a/arch/microblaze/mm/init.c +++ b/arch/microblaze/mm/init.c | |||
@@ -180,7 +180,8 @@ void free_initrd_mem(unsigned long start, unsigned long end) | |||
180 | totalram_pages++; | 180 | totalram_pages++; |
181 | pages++; | 181 | pages++; |
182 | } | 182 | } |
183 | printk(KERN_NOTICE "Freeing initrd memory: %dk freed\n", pages); | 183 | printk(KERN_NOTICE "Freeing initrd memory: %dk freed\n", |
184 | (int)(pages * (PAGE_SIZE / 1024))); | ||
184 | } | 185 | } |
185 | #endif | 186 | #endif |
186 | 187 | ||