diff options
27 files changed, 439 insertions, 117 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 | ||
diff --git a/drivers/mtd/Kconfig b/drivers/mtd/Kconfig index e4ec3659759a..ecf90f5c97c2 100644 --- a/drivers/mtd/Kconfig +++ b/drivers/mtd/Kconfig | |||
| @@ -159,7 +159,7 @@ config MTD_AFS_PARTS | |||
| 159 | 159 | ||
| 160 | config MTD_OF_PARTS | 160 | config MTD_OF_PARTS |
| 161 | tristate "Flash partition map based on OF description" | 161 | tristate "Flash partition map based on OF description" |
| 162 | depends on PPC_OF && MTD_PARTITIONS | 162 | depends on (MICROBLAZE || PPC_OF) && MTD_PARTITIONS |
| 163 | help | 163 | help |
| 164 | This provides a partition parsing function which derives | 164 | This provides a partition parsing function which derives |
| 165 | the partition map from the children of the flash node, | 165 | the partition map from the children of the flash node, |
diff --git a/drivers/mtd/maps/Kconfig b/drivers/mtd/maps/Kconfig index 3a9a960644b6..841e085ab74a 100644 --- a/drivers/mtd/maps/Kconfig +++ b/drivers/mtd/maps/Kconfig | |||
| @@ -74,7 +74,7 @@ config MTD_PHYSMAP_BANKWIDTH | |||
| 74 | 74 | ||
| 75 | config MTD_PHYSMAP_OF | 75 | config MTD_PHYSMAP_OF |
| 76 | tristate "Flash device in physical memory map based on OF description" | 76 | tristate "Flash device in physical memory map based on OF description" |
| 77 | depends on PPC_OF && (MTD_CFI || MTD_JEDECPROBE || MTD_ROM) | 77 | depends on (MICROBLAZE || PPC_OF) && (MTD_CFI || MTD_JEDECPROBE || MTD_ROM) |
| 78 | help | 78 | help |
| 79 | This provides a 'mapping' driver which allows the NOR Flash and | 79 | This provides a 'mapping' driver which allows the NOR Flash and |
| 80 | ROM driver code to communicate with chips which are mapped | 80 | ROM driver code to communicate with chips which are mapped |
diff --git a/drivers/usb/Kconfig b/drivers/usb/Kconfig index ebd7237230e3..240750881d28 100644 --- a/drivers/usb/Kconfig +++ b/drivers/usb/Kconfig | |||
| @@ -22,7 +22,6 @@ config USB_ARCH_HAS_HCD | |||
| 22 | default y if PCMCIA && !M32R # sl811_cs | 22 | default y if PCMCIA && !M32R # sl811_cs |
| 23 | default y if ARM # SL-811 | 23 | default y if ARM # SL-811 |
| 24 | default y if SUPERH # r8a66597-hcd | 24 | default y if SUPERH # r8a66597-hcd |
| 25 | default y if MICROBLAZE | ||
| 26 | default PCI | 25 | default PCI |
| 27 | 26 | ||
| 28 | # many non-PCI SOC chips embed OHCI | 27 | # many non-PCI SOC chips embed OHCI |
diff --git a/kernel/gcov/Kconfig b/kernel/gcov/Kconfig index 654efd09f6a9..70a298d6da71 100644 --- a/kernel/gcov/Kconfig +++ b/kernel/gcov/Kconfig | |||
| @@ -34,7 +34,7 @@ config GCOV_KERNEL | |||
| 34 | config GCOV_PROFILE_ALL | 34 | config GCOV_PROFILE_ALL |
| 35 | bool "Profile entire Kernel" | 35 | bool "Profile entire Kernel" |
| 36 | depends on GCOV_KERNEL | 36 | depends on GCOV_KERNEL |
| 37 | depends on S390 || X86 || (PPC && EXPERIMENTAL) | 37 | depends on S390 || X86 || (PPC && EXPERIMENTAL) || MICROBLAZE |
| 38 | default n | 38 | default n |
| 39 | ---help--- | 39 | ---help--- |
| 40 | This options activates profiling for the entire kernel. | 40 | This options activates profiling for the entire kernel. |
