* 'for-linus' of git://git.monstr.eu/linux-2.6-microblaze: microblaze: Defconfig update microblaze: Optimize CACHE_LOOP_LIMITS and CACHE_RANGE_LOOP macros microblaze: Fix consistent-sync code microblaze: Define correct L1_CACHE_SHIFT value microblaze: cpuinfo shows cache line length microblaze: Fix kmalloc alignment on non-coherent DMA platforms microblaze: Fix typo fault in cache code microblaze: Fix consistent code microblaze: pci-dma: use include/linux/dma-mapping.h microblaze: page.h: Remove get_user_page and free_user_page microblaze: Remove "cache" optimized copy_page function microblaze: invoke oom-killer from page fault microblaze: fix divide by zero exception message microblaze: Add isa_dma_bridge_buggy to dma.h microblaze: Remove ancient code microblaze: Quiet section mismatch warnings for MMU version microblaze: Quiet section mismatch warnings microblaze: Fix IRQ entry/exit ftracing microblaze: resource/PCI: align functions now return start of resource microblaze: PCI: add pci_bus_for_each_resource(), remove direct bus->resource[] refs
Unified · Split
| @@ -1,7 +1,7 @@ | ||
| 1 | 1 | # |
| 2 | 2 | # Automatically generated make config: don't edit |
| 3 | −# Linux kernel version: 2.6.33-rc6 | |
| 4 | −# Wed Feb 3 10:02:59 2010 | |
| 3 | +# Linux kernel version: 2.6.34-rc6 | |
| 4 | +# Thu May 6 11:22:14 2010 | |
| 5 | 5 | # |
| 6 | 6 | CONFIG_MICROBLAZE=y |
| 7 | 7 | # CONFIG_SWAP is not set |
| @@ -22,8 +22,6 @@ CONFIG_GENERIC_CSUM=y · 14 unmodified lines | ||
| 22 | 22 | CONFIG_STACKTRACE_SUPPORT=y |
| 23 | 23 | CONFIG_LOCKDEP_SUPPORT=y |
| 24 | 24 | CONFIG_HAVE_LATENCYTOP_SUPPORT=y |
| 25 | −# CONFIG_PCI is not set | |
| 26 | −CONFIG_NO_DMA=y | |
| 27 | 25 | CONFIG_DTC=y |
| 28 | 26 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" |
| 29 | 27 | CONFIG_CONSTRUCTORS=y |
| @@ -56,7 +54,6 @@ CONFIG_RCU_FANOUT=32 · 26 unmodified lines | ||
| 56 | 54 | CONFIG_IKCONFIG=y |
| 57 | 55 | CONFIG_IKCONFIG_PROC=y |
| 58 | 56 | CONFIG_LOG_BUF_SHIFT=17 |
| 59 | −# CONFIG_GROUP_SCHED is not set | |
| 60 | 57 | # CONFIG_CGROUPS is not set |
| 61 | 58 | CONFIG_SYSFS_DEPRECATED=y |
| 62 | 59 | CONFIG_SYSFS_DEPRECATED_V2=y |
| @@ -106,6 +103,8 @@ CONFIG_SLAB=y · 43 unmodified lines | ||
| 106 | 103 | # CONFIG_SLOB is not set |
| 107 | 104 | # CONFIG_PROFILING is not set |
| 108 | 105 | CONFIG_HAVE_OPROFILE=y |
| 106 | +CONFIG_HAVE_DMA_ATTRS=y | |
| 107 | +CONFIG_HAVE_DMA_API_DEBUG=y | |
| 109 | 108 | |
| 110 | 109 | # |
| 111 | 110 | # GCOV-based kernel profiling |
| @@ -245,13 +244,20 @@ CONFIG_BINFMT_ELF=y · 133 unmodified lines | ||
| 245 | 244 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set |
| 246 | 245 | # CONFIG_HAVE_AOUT is not set |
| 247 | 246 | # CONFIG_BINFMT_MISC is not set |
| 247 | + | |
| 248 | +# | |
| 249 | +# Bus Options | |
| 250 | +# | |
| 251 | +# CONFIG_PCI is not set | |
| 252 | +# CONFIG_PCI_DOMAINS is not set | |
| 253 | +# CONFIG_PCI_SYSCALL is not set | |
| 254 | +# CONFIG_ARCH_SUPPORTS_MSI is not set | |
| 248 | 255 | CONFIG_NET=y |
| 249 | 256 | |
| 250 | 257 | # |
| 251 | 258 | # Networking options |
| 252 | 259 | # |
| 253 | 260 | CONFIG_PACKET=y |
| 254 | −# CONFIG_PACKET_MMAP is not set | |
| 255 | 261 | CONFIG_UNIX=y |
| 256 | 262 | CONFIG_XFRM=y |
| 257 | 263 | # CONFIG_XFRM_USER is not set |
| @@ -341,7 +347,9 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y · 83 unmodified lines | ||
| 341 | 347 | # CONFIG_SYS_HYPERVISOR is not set |
| 342 | 348 | # CONFIG_CONNECTOR is not set |
| 343 | 349 | # CONFIG_MTD is not set |
| 350 | +CONFIG_OF_FLATTREE=y | |
| 344 | 351 | CONFIG_OF_DEVICE=y |
| 352 | +CONFIG_OF_MDIO=y | |
| 345 | 353 | # CONFIG_PARPORT is not set |
| 346 | 354 | CONFIG_BLK_DEV=y |
| 347 | 355 | # CONFIG_BLK_DEV_COW_COMMON is not set |
| @@ -370,6 +378,7 @@ CONFIG_MISC_DEVICES=y · 22 unmodified lines | ||
| 370 | 378 | # |
| 371 | 379 | # SCSI device support |
| 372 | 380 | # |
| 381 | +CONFIG_SCSI_MOD=y | |
| 373 | 382 | # CONFIG_RAID_ATTRS is not set |
| 374 | 383 | # CONFIG_SCSI is not set |
| 375 | 384 | # CONFIG_SCSI_DMA is not set |
| @@ -383,9 +392,30 @@ CONFIG_NETDEVICES=y · 7 unmodified lines | ||
| 383 | 392 | # CONFIG_EQUALIZER is not set |
| 384 | 393 | # CONFIG_TUN is not set |
| 385 | 394 | # CONFIG_VETH is not set |
| 386 | −# CONFIG_PHYLIB is not set | |
| 395 | +CONFIG_PHYLIB=y | |
| 396 | + | |
| 397 | +# | |
| 398 | +# MII PHY device drivers | |
| 399 | +# | |
| 400 | +# CONFIG_MARVELL_PHY is not set | |
| 401 | +# CONFIG_DAVICOM_PHY is not set | |
| 402 | +# CONFIG_QSEMI_PHY is not set | |
| 403 | +# CONFIG_LXT_PHY is not set | |
| 404 | +# CONFIG_CICADA_PHY is not set | |
| 405 | +# CONFIG_VITESSE_PHY is not set | |
| 406 | +# CONFIG_SMSC_PHY is not set | |
| 407 | +# CONFIG_BROADCOM_PHY is not set | |
| 408 | +# CONFIG_ICPLUS_PHY is not set | |
| 409 | +# CONFIG_REALTEK_PHY is not set | |
| 410 | +# CONFIG_NATIONAL_PHY is not set | |
| 411 | +# CONFIG_STE10XP is not set | |
| 412 | +# CONFIG_LSI_ET1011C_PHY is not set | |
| 413 | +# CONFIG_MICREL_PHY is not set | |
| 414 | +# CONFIG_FIXED_PHY is not set | |
| 415 | +# CONFIG_MDIO_BITBANG is not set | |
| 387 | 416 | CONFIG_NET_ETHERNET=y |
| 388 | 417 | # CONFIG_MII is not set |
| 418 | +# CONFIG_ETHOC is not set | |
| 389 | 419 | # CONFIG_DNET is not set |
| 390 | 420 | # CONFIG_IBM_NEW_EMAC_ZMII is not set |
| 391 | 421 | # CONFIG_IBM_NEW_EMAC_RGMII is not set |
| @@ -394,6 +424,7 @@ CONFIG_NET_ETHERNET=y · 2 unmodified lines | ||
| 394 | 424 | # CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set |
| 395 | 425 | # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set |
| 396 | 426 | # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set |
| 427 | +# CONFIG_B44 is not set | |
| 397 | 428 | # CONFIG_KS8842 is not set |
| 398 | 429 | # CONFIG_KS8851_MLL is not set |
| 399 | 430 | CONFIG_XILINX_EMACLITE=y |
| @@ -444,6 +475,7 @@ CONFIG_SERIAL_UARTLITE=y · 44 unmodified lines | ||
| 444 | 475 | CONFIG_SERIAL_UARTLITE_CONSOLE=y |
| 445 | 476 | CONFIG_SERIAL_CORE=y |
| 446 | 477 | CONFIG_SERIAL_CORE_CONSOLE=y |
| 478 | +# CONFIG_SERIAL_TIMBERDALE is not set | |
| 447 | 479 | # CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set |
| 448 | 480 | CONFIG_UNIX98_PTYS=y |
| 449 | 481 | # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set |
| @@ -471,6 +503,12 @@ CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y · 21 unmodified lines | ||
| 471 | 503 | # CONFIG_HWMON is not set |
| 472 | 504 | # CONFIG_THERMAL is not set |
| 473 | 505 | # CONFIG_WATCHDOG is not set |
| 506 | +CONFIG_SSB_POSSIBLE=y | |
| 507 | + | |
| 508 | +# | |
| 509 | +# Sonics Silicon Backplane | |
| 510 | +# | |
| 511 | +# CONFIG_SSB is not set | |
| 474 | 512 | |
| 475 | 513 | # |
| 476 | 514 | # Multifunction device drivers |
| @@ -502,6 +540,7 @@ CONFIG_USB_ARCH_HAS_EHCI=y · 25 unmodified lines | ||
| 502 | 540 | # CONFIG_NEW_LEDS is not set |
| 503 | 541 | # CONFIG_ACCESSIBILITY is not set |
| 504 | 542 | # CONFIG_RTC_CLASS is not set |
| 543 | +# CONFIG_DMADEVICES is not set | |
| 505 | 544 | # CONFIG_AUXDISPLAY is not set |
| 506 | 545 | # CONFIG_UIO is not set |
| 507 | 546 | |
| @@ -572,6 +611,7 @@ CONFIG_MISC_FILESYSTEMS=y · 64 unmodified lines | ||
| 572 | 611 | # CONFIG_BEFS_FS is not set |
| 573 | 612 | # CONFIG_BFS_FS is not set |
| 574 | 613 | # CONFIG_EFS_FS is not set |
| 614 | +# CONFIG_LOGFS is not set | |
| 575 | 615 | # CONFIG_CRAMFS is not set |
| 576 | 616 | # CONFIG_SQUASHFS is not set |
| 577 | 617 | # CONFIG_VXFS_FS is not set |
| @@ -595,6 +635,7 @@ CONFIG_SUNRPC=y · 17 unmodified lines | ||
| 595 | 635 | # CONFIG_RPCSEC_GSS_KRB5 is not set |
| 596 | 636 | # CONFIG_RPCSEC_GSS_SPKM3 is not set |
| 597 | 637 | # CONFIG_SMB_FS is not set |
| 638 | +# CONFIG_CEPH_FS is not set | |
| 598 | 639 | CONFIG_CIFS=y |
| 599 | 640 | CONFIG_CIFS_STATS=y |
| 600 | 641 | CONFIG_CIFS_STATS2=y |
| @@ -696,6 +737,7 @@ CONFIG_SCHED_DEBUG=y · 95 unmodified lines | ||
| 696 | 737 | # CONFIG_DEBUG_OBJECTS is not set |
| 697 | 738 | CONFIG_DEBUG_SLAB=y |
| 698 | 739 | # CONFIG_DEBUG_SLAB_LEAK is not set |
| 740 | +# CONFIG_DEBUG_KMEMLEAK is not set | |
| 699 | 741 | CONFIG_DEBUG_SPINLOCK=y |
| 700 | 742 | # CONFIG_DEBUG_MUTEXES is not set |
| 701 | 743 | # CONFIG_DEBUG_LOCK_ALLOC is not set |
| @@ -741,6 +783,7 @@ CONFIG_BRANCH_PROFILE_NONE=y · 39 unmodified lines | ||
| 741 | 783 | # CONFIG_KMEMTRACE is not set |
| 742 | 784 | # CONFIG_WORKQUEUE_TRACER is not set |
| 743 | 785 | # CONFIG_BLK_DEV_IO_TRACE is not set |
| 786 | +# CONFIG_DMA_API_DEBUG is not set | |
| 744 | 787 | # CONFIG_SAMPLES is not set |
| 745 | 788 | CONFIG_EARLY_PRINTK=y |
| 746 | 789 | # CONFIG_HEART_BEAT is not set |
| @@ -862,5 +905,6 @@ CONFIG_ZLIB_INFLATE=y · 115 unmodified lines | ||
| 862 | 905 | CONFIG_DECOMPRESS_GZIP=y |
| 863 | 906 | CONFIG_HAS_IOMEM=y |
| 864 | 907 | CONFIG_HAS_IOPORT=y |
| 908 | +CONFIG_HAS_DMA=y | |
| 865 | 909 | CONFIG_HAVE_LMB=y |
| 866 | 910 | CONFIG_NLATTR=y |
| @@ -1,7 +1,7 @@ | ||
| 1 | 1 | # |
| 2 | 2 | # Automatically generated make config: don't edit |
| 3 | −# Linux kernel version: 2.6.33-rc6 | |
| 4 | −# Wed Feb 3 10:03:21 2010 | |
| 3 | +# Linux kernel version: 2.6.34-rc6 | |
| 4 | +# Thu May 6 11:25:12 2010 | |
| 5 | 5 | # |
| 6 | 6 | CONFIG_MICROBLAZE=y |
| 7 | 7 | # CONFIG_SWAP is not set |
| @@ -22,8 +22,6 @@ CONFIG_GENERIC_CSUM=y · 14 unmodified lines | ||
| 22 | 22 | CONFIG_STACKTRACE_SUPPORT=y |
| 23 | 23 | CONFIG_LOCKDEP_SUPPORT=y |
| 24 | 24 | CONFIG_HAVE_LATENCYTOP_SUPPORT=y |
| 25 | −# CONFIG_PCI is not set | |
| 26 | −CONFIG_NO_DMA=y | |
| 27 | 25 | CONFIG_DTC=y |
| 28 | 26 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" |
| 29 | 27 | CONFIG_CONSTRUCTORS=y |
| @@ -58,7 +56,6 @@ CONFIG_RCU_FANOUT=32 · 28 unmodified lines | ||
| 58 | 56 | CONFIG_IKCONFIG=y |
| 59 | 57 | CONFIG_IKCONFIG_PROC=y |
| 60 | 58 | CONFIG_LOG_BUF_SHIFT=17 |
| 61 | −# CONFIG_GROUP_SCHED is not set | |
| 62 | 59 | # CONFIG_CGROUPS is not set |
| 63 | 60 | CONFIG_SYSFS_DEPRECATED=y |
| 64 | 61 | CONFIG_SYSFS_DEPRECATED_V2=y |
| @@ -96,6 +93,8 @@ CONFIG_SLAB=y · 31 unmodified lines | ||
| 96 | 93 | # CONFIG_MMAP_ALLOW_UNINITIALIZED is not set |
| 97 | 94 | # CONFIG_PROFILING is not set |
| 98 | 95 | CONFIG_HAVE_OPROFILE=y |
| 96 | +CONFIG_HAVE_DMA_ATTRS=y | |
| 97 | +CONFIG_HAVE_DMA_API_DEBUG=y | |
| 99 | 98 | |
| 100 | 99 | # |
| 101 | 100 | # GCOV-based kernel profiling |
| @@ -209,11 +208,14 @@ CONFIG_PROC_DEVICETREE=y · 107 unmodified lines | ||
| 209 | 208 | # |
| 210 | 209 | # Advanced setup |
| 211 | 210 | # |
| 211 | +# CONFIG_ADVANCED_OPTIONS is not set | |
| 212 | 212 | |
| 213 | 213 | # |
| 214 | 214 | # Default settings for advanced configuration options are used |
| 215 | 215 | # |
| 216 | +CONFIG_LOWMEM_SIZE=0x30000000 | |
| 216 | 217 | CONFIG_KERNEL_START=0x90000000 |
| 218 | +CONFIG_TASK_SIZE=0x80000000 | |
| 217 | 219 | CONFIG_SELECT_MEMORY_MODEL=y |
| 218 | 220 | CONFIG_FLATMEM_MANUAL=y |
| 219 | 221 | # CONFIG_DISCONTIGMEM_MANUAL is not set |
| @@ -235,13 +237,20 @@ CONFIG_BINFMT_FLAT=y · 15 unmodified lines | ||
| 235 | 237 | # CONFIG_BINFMT_SHARED_FLAT is not set |
| 236 | 238 | # CONFIG_HAVE_AOUT is not set |
| 237 | 239 | # CONFIG_BINFMT_MISC is not set |
| 240 | + | |
| 241 | +# | |
| 242 | +# Bus Options | |
| 243 | +# | |
| 244 | +# CONFIG_PCI is not set | |
| 245 | +# CONFIG_PCI_DOMAINS is not set | |
| 246 | +# CONFIG_PCI_SYSCALL is not set | |
| 247 | +# CONFIG_ARCH_SUPPORTS_MSI is not set | |
| 238 | 248 | CONFIG_NET=y |
| 239 | 249 | |
| 240 | 250 | # |
| 241 | 251 | # Networking options |
| 242 | 252 | # |
| 243 | 253 | CONFIG_PACKET=y |
| 244 | −# CONFIG_PACKET_MMAP is not set | |
| 245 | 254 | CONFIG_UNIX=y |
| 246 | 255 | CONFIG_XFRM=y |
| 247 | 256 | # CONFIG_XFRM_USER is not set |
| @@ -413,6 +422,7 @@ CONFIG_MTD_UCLINUX=y · 165 unmodified lines | ||
| 413 | 422 | # UBI - Unsorted block images |
| 414 | 423 | # |
| 415 | 424 | # CONFIG_MTD_UBI is not set |
| 425 | +CONFIG_OF_FLATTREE=y | |
| 416 | 426 | CONFIG_OF_DEVICE=y |
| 417 | 427 | # CONFIG_PARPORT is not set |
| 418 | 428 | CONFIG_BLK_DEV=y |
| @@ -442,6 +452,7 @@ CONFIG_MISC_DEVICES=y · 23 unmodified lines | ||
| 442 | 452 | # |
| 443 | 453 | # SCSI device support |
| 444 | 454 | # |
| 455 | +CONFIG_SCSI_MOD=y | |
| 445 | 456 | # CONFIG_RAID_ATTRS is not set |
| 446 | 457 | # CONFIG_SCSI is not set |
| 447 | 458 | # CONFIG_SCSI_DMA is not set |
| @@ -458,6 +469,7 @@ CONFIG_NETDEVICES=y · 10 unmodified lines | ||
| 458 | 469 | # CONFIG_PHYLIB is not set |
| 459 | 470 | CONFIG_NET_ETHERNET=y |
| 460 | 471 | # CONFIG_MII is not set |
| 472 | +# CONFIG_ETHOC is not set | |
| 461 | 473 | # CONFIG_DNET is not set |
| 462 | 474 | # CONFIG_IBM_NEW_EMAC_ZMII is not set |
| 463 | 475 | # CONFIG_IBM_NEW_EMAC_RGMII is not set |
| @@ -466,6 +478,7 @@ CONFIG_NET_ETHERNET=y · 2 unmodified lines | ||
| 466 | 478 | # CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set |
| 467 | 479 | # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set |
| 468 | 480 | # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set |
| 481 | +# CONFIG_B44 is not set | |
| 469 | 482 | # CONFIG_KS8842 is not set |
| 470 | 483 | # CONFIG_KS8851_MLL is not set |
| 471 | 484 | # CONFIG_XILINX_EMACLITE is not set |
| @@ -516,6 +529,7 @@ CONFIG_SERIAL_UARTLITE=y · 44 unmodified lines | ||
| 516 | 529 | CONFIG_SERIAL_UARTLITE_CONSOLE=y |
| 517 | 530 | CONFIG_SERIAL_CORE=y |
| 518 | 531 | CONFIG_SERIAL_CORE_CONSOLE=y |
| 532 | +# CONFIG_SERIAL_TIMBERDALE is not set | |
| 519 | 533 | # CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set |
| 520 | 534 | CONFIG_UNIX98_PTYS=y |
| 521 | 535 | # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set |
| @@ -544,6 +558,12 @@ CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y · 22 unmodified lines | ||
| 544 | 558 | # CONFIG_HWMON is not set |
| 545 | 559 | # CONFIG_THERMAL is not set |
| 546 | 560 | # CONFIG_WATCHDOG is not set |
| 561 | +CONFIG_SSB_POSSIBLE=y | |
| 562 | + | |
| 563 | +# | |
| 564 | +# Sonics Silicon Backplane | |
| 565 | +# | |
| 566 | +# CONFIG_SSB is not set | |
| 547 | 567 | |
| 548 | 568 | # |
| 549 | 569 | # Multifunction device drivers |
| @@ -593,6 +613,7 @@ CONFIG_USB_ARCH_HAS_EHCI=y · 43 unmodified lines | ||
| 593 | 613 | # CONFIG_NEW_LEDS is not set |
| 594 | 614 | # CONFIG_ACCESSIBILITY is not set |
| 595 | 615 | # CONFIG_RTC_CLASS is not set |
| 616 | +# CONFIG_DMADEVICES is not set | |
| 596 | 617 | # CONFIG_AUXDISPLAY is not set |
| 597 | 618 | # CONFIG_UIO is not set |
| 598 | 619 | |
| @@ -661,6 +682,7 @@ CONFIG_MISC_FILESYSTEMS=y · 62 unmodified lines | ||
| 661 | 682 | # CONFIG_BFS_FS is not set |
| 662 | 683 | # CONFIG_EFS_FS is not set |
| 663 | 684 | # CONFIG_JFFS2_FS is not set |
| 685 | +# CONFIG_LOGFS is not set | |
| 664 | 686 | CONFIG_CRAMFS=y |
| 665 | 687 | # CONFIG_SQUASHFS is not set |
| 666 | 688 | # CONFIG_VXFS_FS is not set |
| @@ -689,6 +711,7 @@ CONFIG_SUNRPC=y · 22 unmodified lines | ||
| 689 | 711 | # CONFIG_RPCSEC_GSS_KRB5 is not set |
| 690 | 712 | # CONFIG_RPCSEC_GSS_SPKM3 is not set |
| 691 | 713 | # CONFIG_SMB_FS is not set |
| 714 | +# CONFIG_CEPH_FS is not set | |
| 692 | 715 | # CONFIG_CIFS is not set |
| 693 | 716 | # CONFIG_NCP_FS is not set |
| 694 | 717 | # CONFIG_CODA_FS is not set |
| @@ -733,6 +756,7 @@ CONFIG_DEBUG_OBJECTS_TIMERS=y · 38 unmodified lines | ||
| 733 | 756 | # CONFIG_DEBUG_OBJECTS_WORK is not set |
| 734 | 757 | CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1 |
| 735 | 758 | # CONFIG_DEBUG_SLAB is not set |
| 759 | +# CONFIG_DEBUG_KMEMLEAK is not set | |
| 736 | 760 | # CONFIG_DEBUG_RT_MUTEXES is not set |
| 737 | 761 | # CONFIG_RT_MUTEX_TESTER is not set |
| 738 | 762 | # CONFIG_DEBUG_SPINLOCK is not set |
| @@ -758,6 +782,7 @@ CONFIG_DEBUG_SG=y · 19 unmodified lines | ||
| 758 | 782 | # CONFIG_BACKTRACE_SELF_TEST is not set |
| 759 | 783 | # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set |
| 760 | 784 | # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set |
| 785 | +# CONFIG_LKDTM is not set | |
| 761 | 786 | # CONFIG_FAULT_INJECTION is not set |
| 762 | 787 | # CONFIG_LATENCYTOP is not set |
| 763 | 788 | CONFIG_SYSCTL_SYSCALL_CHECK=y |
| @@ -782,6 +807,7 @@ CONFIG_BRANCH_PROFILE_NONE=y · 18 unmodified lines | ||
| 782 | 807 | # CONFIG_WORKQUEUE_TRACER is not set |
| 783 | 808 | # CONFIG_BLK_DEV_IO_TRACE is not set |
| 784 | 809 | # CONFIG_DYNAMIC_DEBUG is not set |
| 810 | +# CONFIG_DMA_API_DEBUG is not set | |
| 785 | 811 | # CONFIG_SAMPLES is not set |
| 786 | 812 | CONFIG_EARLY_PRINTK=y |
| 787 | 813 | # CONFIG_HEART_BEAT is not set |
| @@ -901,5 +927,6 @@ CONFIG_GENERIC_FIND_LAST_BIT=y · 113 unmodified lines | ||
| 901 | 927 | CONFIG_ZLIB_INFLATE=y |
| 902 | 928 | CONFIG_HAS_IOMEM=y |
| 903 | 929 | CONFIG_HAS_IOPORT=y |
| 930 | +CONFIG_HAS_DMA=y | |
| 904 | 931 | CONFIG_HAVE_LMB=y |
| 905 | 932 | CONFIG_NLATTR=y |
| @@ -15,7 +15,7 @@ · 14 unmodified lines | ||
| 15 | 15 | |
| 16 | 16 | #include <asm/registers.h> |
| 17 | 17 | |
| 18 | −#define L1_CACHE_SHIFT 2 | |
| 18 | +#define L1_CACHE_SHIFT 5 | |
| 19 | 19 | /* word-granular cache in microblaze */ |
| 20 | 20 | #define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT) |
| 21 | 21 | |
| @@ -18,4 +18,10 @@ · 17 unmodified lines | ||
| 18 | 18 | #define MAX_DMA_ADDRESS (CONFIG_KERNEL_START + memory_size - 1) |
| 19 | 19 | #endif |
| 20 | 20 | |
| 21 | +#ifdef CONFIG_PCI | |
| 22 | +extern int isa_dma_bridge_buggy; | |
| 23 | +#else | |
| 24 | +#define isa_dma_bridge_buggy (0) | |
| 25 | +#endif | |
| 26 | + | |
| 21 | 27 | #endif /* _ASM_MICROBLAZE_DMA_H */ |
| @@ -64,12 +64,6 @@ asmlinkage void full_exception(struct pt_regs *regs, unsigned int type, · 63 unmodified lines | ||
| 64 | 64 | void die(const char *str, struct pt_regs *fp, long err); |
| 65 | 65 | void _exception(int signr, struct pt_regs *regs, int code, unsigned long addr); |
| 66 | 66 | |
| 67 | −#ifdef CONFIG_MMU | |
| 68 | −void __bug(const char *file, int line, void *data); | |
| 69 | −int bad_trap(int trap_num, struct pt_regs *regs); | |
| 70 | −int debug_trap(struct pt_regs *regs); | |
| 71 | −#endif /* CONFIG_MMU */ | |
| 72 | − | |
| 73 | 67 | #if defined(CONFIG_KGDB) |
| 74 | 68 | void (*debugger)(struct pt_regs *regs); |
| 75 | 69 | int (*debugger_bpt)(struct pt_regs *regs); |
| @@ -139,8 +139,6 @@ static inline void writel(unsigned int v, volatile void __iomem *addr) · 138 unmodified lines | ||
| 139 | 139 | |
| 140 | 140 | #ifdef CONFIG_MMU |
| 141 | 141 | |
| 142 | −#define mm_ptov(addr) ((void *)__phys_to_virt(addr)) | |
| 143 | −#define mm_vtop(addr) ((unsigned long)__virt_to_phys(addr)) | |
| 144 | 142 | #define phys_to_virt(addr) ((void *)__phys_to_virt(addr)) |
| 145 | 143 | #define virt_to_phys(addr) ((unsigned long)__virt_to_phys(addr)) |
| 146 | 144 | #define virt_to_bus(addr) ((unsigned long)__virt_to_phys(addr)) |
| @@ -31,6 +31,9 @@ · 30 unmodified lines | ||
| 31 | 31 | |
| 32 | 32 | #ifndef __ASSEMBLY__ |
| 33 | 33 | |
| 34 | +/* MS be sure that SLAB allocates aligned objects */ | |
| 35 | +#define ARCH_KMALLOC_MINALIGN L1_CACHE_BYTES | |
| 36 | + | |
| 34 | 37 | #define PAGE_UP(addr) (((addr)+((PAGE_SIZE)-1))&(~((PAGE_SIZE)-1))) |
| 35 | 38 | #define PAGE_DOWN(addr) ((addr)&(~((PAGE_SIZE)-1))) |
| 36 | 39 | |
| @@ -70,14 +73,7 @@ typedef unsigned long pte_basic_t; · 33 unmodified lines | ||
| 70 | 73 | |
| 71 | 74 | #endif /* CONFIG_MMU */ |
| 72 | 75 | |
| 73 | −# ifndef CONFIG_MMU | |
| 74 | −# define copy_page(to, from) memcpy((to), (from), PAGE_SIZE) | |
| 75 | −# define get_user_page(vaddr) __get_free_page(GFP_KERNEL) | |
| 76 | −# define free_user_page(page, addr) free_page(addr) | |
| 77 | −# else /* CONFIG_MMU */ | |
| 78 | −extern void copy_page(void *to, void *from); | |
| 79 | −# endif /* CONFIG_MMU */ | |
| 80 | − | |
| 76 | +# define copy_page(to, from) memcpy((to), (from), PAGE_SIZE) | |
| 81 | 77 | # define clear_page(pgaddr) memset((pgaddr), 0, PAGE_SIZE) |
| 82 | 78 | |
| 83 | 79 | # define clear_user_page(pgaddr, vaddr, page) memset((pgaddr), 0, PAGE_SIZE) |
| @@ -94,14 +94,6 @@ extern int pci_mmap_legacy_page_range(struct pci_bus *bus, · 93 unmodified lines | ||
| 94 | 94 | |
| 95 | 95 | #define HAVE_PCI_LEGACY 1 |
| 96 | 96 | |
| 97 | −/* pci_unmap_{page,single} is a nop so... */ | |
| 98 | −#define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) | |
| 99 | −#define DECLARE_PCI_UNMAP_LEN(LEN_NAME) | |
| 100 | −#define pci_unmap_addr(PTR, ADDR_NAME) (0) | |
| 101 | −#define pci_unmap_addr_set(PTR, ADDR_NAME, VAL) do { } while (0) | |
| 102 | −#define pci_unmap_len(PTR, LEN_NAME) (0) | |
| 103 | −#define pci_unmap_len_set(PTR, LEN_NAME, VAL) do { } while (0) | |
| 104 | − | |
| 105 | 97 | /* The PCI address space does equal the physical memory |
| 106 | 98 | * address space (no IOMMU). The IDE and SCSI device layers use |
| 107 | 99 | * this boolean for bounce buffer decisions. |
| @@ -108,21 +108,7 @@ extern inline void free_pgd_slow(pgd_t *pgd) · 107 unmodified lines | ||
| 108 | 108 | #define pmd_alloc_one_fast(mm, address) ({ BUG(); ((pmd_t *)1); }) |
| 109 | 109 | #define pmd_alloc_one(mm, address) ({ BUG(); ((pmd_t *)2); }) |
| 110 | 110 | |
| 111 | −static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, | |
| 112 | − unsigned long address) | |
| 113 | −{ | |
| 114 | − pte_t *pte; | |
| 115 | − extern void *early_get_page(void); | |
| 116 | − if (mem_init_done) { | |
| 117 | − pte = (pte_t *)__get_free_page(GFP_KERNEL | | |
| 118 | − __GFP_REPEAT | __GFP_ZERO); | |
| 119 | − } else { | |
| 120 | − pte = (pte_t *)early_get_page(); | |
| 121 | − if (pte) | |
| 122 | − clear_page(pte); | |
| 123 | − } | |
| 124 | − return pte; | |
| 125 | −} | |
| 111 | +extern pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr); | |
| 126 | 112 | |
| 127 | 113 | static inline struct page *pte_alloc_one(struct mm_struct *mm, |
| 128 | 114 | unsigned long address) |
| @@ -511,15 +511,6 @@ static inline pmd_t *pmd_offset(pgd_t *dir, unsigned long address) · 510 unmodified lines | ||
| 511 | 511 | |
| 512 | 512 | extern pgd_t swapper_pg_dir[PTRS_PER_PGD]; |
| 513 | 513 | |
| 514 | −/* | |
| 515 | − * When flushing the tlb entry for a page, we also need to flush the hash | |
| 516 | − * table entry. flush_hash_page is assembler (for speed) in hashtable.S. | |
| 517 | − */ | |
| 518 | −extern int flush_hash_page(unsigned context, unsigned long va, pte_t *ptep); | |
| 519 | − | |
| 520 | −/* Add an HPTE to the hash table */ | |
| 521 | −extern void add_hash_page(unsigned context, unsigned long va, pte_t *ptep); | |
| 522 | − | |
| 523 | 514 | /* |
| 524 | 515 | * Encode and decode a swap entry. |
| 525 | 516 | * Note that the bits we use in a PTE for representing a swap entry |
| @@ -533,15 +524,7 @@ extern void add_hash_page(unsigned context, unsigned long va, pte_t *ptep); · 7 unmodified lines | ||
| 533 | 524 | #define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) >> 2 }) |
| 534 | 525 | #define __swp_entry_to_pte(x) ((pte_t) { (x).val << 2 }) |
| 535 | 526 | |
| 536 | − | |
| 537 | −/* CONFIG_APUS */ | |
| 538 | −/* For virtual address to physical address conversion */ | |
| 539 | −extern void cache_clear(__u32 addr, int length); | |
| 540 | −extern void cache_push(__u32 addr, int length); | |
| 541 | −extern int mm_end_of_chunk(unsigned long addr, int len); | |
| 542 | 527 | extern unsigned long iopa(unsigned long addr); |
| 543 | −/* extern unsigned long mm_ptov(unsigned long addr) \ | |
| 544 | − __attribute__ ((const)); TBD */ | |
| 545 | 528 | |
| 546 | 529 | /* Values for nocacheflag and cmode */ |
| 547 | 530 | /* These are not used by the APUS kernel_map, but prevents |
| @@ -552,18 +535,6 @@ extern unsigned long iopa(unsigned long addr); · 4 unmodified lines | ||
| 552 | 535 | #define IOMAP_NOCACHE_NONSER 2 |
| 553 | 536 | #define IOMAP_NO_COPYBACK 3 |
| 554 | 537 | |
| 555 | −/* | |
| 556 | − * Map some physical address range into the kernel address space. | |
| 557 | − */ | |
| 558 | −extern unsigned long kernel_map(unsigned long paddr, unsigned long size, | |
| 559 | − int nocacheflag, unsigned long *memavailp); | |
| 560 | − | |
| 561 | −/* | |
| 562 | − * Set cache mode of (kernel space) address range. | |
| 563 | − */ | |
| 564 | −extern void kernel_set_cachemode(unsigned long address, unsigned long size, | |
| 565 | − unsigned int cmode); | |
| 566 | − | |
| 567 | 538 | /* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ |
| 568 | 539 | #define kern_addr_valid(addr) (1) |
| 569 | 540 | |
| @@ -577,10 +548,6 @@ extern void kernel_set_cachemode(unsigned long address, unsigned long size, · 7 unmodified lines | ||
| 577 | 548 | void do_page_fault(struct pt_regs *regs, unsigned long address, |
| 578 | 549 | unsigned long error_code); |
| 579 | 550 | |
| 580 | −void __init io_block_mapping(unsigned long virt, phys_addr_t phys, | |
| 581 | − unsigned int size, int flags); | |
| 582 | − | |
| 583 | −void __init adjust_total_lowmem(void); | |
| 584 | 551 | void mapin_ram(void); |
| 585 | 552 | int map_page(unsigned long va, phys_addr_t pa, int flags); |
| 586 | 553 | |
| @@ -601,7 +568,7 @@ void __init *early_get_page(void); · 14 unmodified lines | ||
| 601 | 568 | extern unsigned long ioremap_bot, ioremap_base; |
| 602 | 569 | |
| 603 | 570 | void *consistent_alloc(int gfp, size_t size, dma_addr_t *dma_handle); |
| 604 | −void consistent_free(void *vaddr); | |
| 571 | +void consistent_free(size_t size, void *vaddr); | |
| 605 | 572 | void consistent_sync(void *vaddr, size_t size, int direction); |
| 606 | 573 | void consistent_sync_page(struct page *page, unsigned long offset, |
| 607 | 574 | size_t size, int direction); |
| @@ -16,6 +16,7 @@ · 15 unmodified lines | ||
| 16 | 16 | #include <linux/hardirq.h> |
| 17 | 17 | #include <linux/thread_info.h> |
| 18 | 18 | #include <linux/kbuild.h> |
| 19 | +#include <asm/cpuinfo.h> | |
| 19 | 20 | |
| 20 | 21 | int main(int argc, char *argv[]) |
| 21 | 22 | { |
| @@ -96,13 +96,16 @@ static inline void __disable_dcache_nomsr(void) · 95 unmodified lines | ||
| 96 | 96 | } |
| 97 | 97 | |
| 98 | 98 | |
| 99 | −/* Helper macro for computing the limits of cache range loops */ | |
| 99 | +/* Helper macro for computing the limits of cache range loops | |
| 100 | + * | |
| 101 | + * End address can be unaligned which is OK for C implementation. | |
| 102 | + * ASM implementation align it in ASM macros | |
| 103 | + */ | |
| 100 | 104 | #define CACHE_LOOP_LIMITS(start, end, cache_line_length, cache_size) \ |
| 101 | 105 | do { \ |
| 102 | 106 | int align = ~(cache_line_length - 1); \ |
| 103 | 107 | end = min(start + cache_size, end); \ |
| 104 | 108 | start &= align; \ |
| 105 | − end = ((end & align) + cache_line_length); \ | |
| 106 | 109 | } while (0); |
| 107 | 110 | |
| 108 | 111 | /* |
| @@ -111,9 +114,9 @@ do { \ · 2 unmodified lines | ||
| 111 | 114 | */ |
| 112 | 115 | #define CACHE_ALL_LOOP(cache_size, line_length, op) \ |
| 113 | 116 | do { \ |
| 114 | − unsigned int len = cache_size; \ | |
| 117 | + unsigned int len = cache_size - line_length; \ | |
| 115 | 118 | int step = -line_length; \ |
| 116 | − BUG_ON(step >= 0); \ | |
| 119 | + WARN_ON(step >= 0); \ | |
| 117 | 120 | \ |
| 118 | 121 | __asm__ __volatile__ (" 1: " #op " %0, r0; \ |
| 119 | 122 | bgtid %0, 1b; \ |
| @@ -122,26 +125,21 @@ do { \ · 2 unmodified lines | ||
| 122 | 125 | : "memory"); \ |
| 123 | 126 | } while (0); |
| 124 | 127 | |
| 125 | − | |
| 126 | −#define CACHE_ALL_LOOP2(cache_size, line_length, op) \ | |
| 127 | −do { \ | |
| 128 | − unsigned int len = cache_size; \ | |
| 129 | − int step = -line_length; \ | |
| 130 | − BUG_ON(step >= 0); \ | |
| 131 | − \ | |
| 132 | − __asm__ __volatile__ (" 1: " #op " r0, %0; \ | |
| 133 | − bgtid %0, 1b; \ | |
| 134 | − addk %0, %0, %1; \ | |
| 135 | − " : : "r" (len), "r" (step) \ | |
| 136 | − : "memory"); \ | |
| 137 | −} while (0); | |
| 138 | − | |
| 139 | −/* for wdc.flush/clear */ | |
| 128 | +/* Used for wdc.flush/clear which can use rB for offset which is not possible | |
| 129 | + * to use for simple wdc or wic. | |
| 130 | + * | |
| 131 | + * start address is cache aligned | |
| 132 | + * end address is not aligned, if end is aligned then I have to substract | |
| 133 | + * cacheline length because I can't flush/invalidate the next cacheline. | |
| 134 | + * If is not, I align it because I will flush/invalidate whole line. | |
| 135 | + */ | |
| 140 | 136 | #define CACHE_RANGE_LOOP_2(start, end, line_length, op) \ |
| 141 | 137 | do { \ |
| 142 | 138 | int step = -line_length; \ |
| 139 | + int align = ~(line_length - 1); \ | |
| 140 | + end = ((end & align) == end) ? end - line_length : end & align; \ | |
| 143 | 141 | int count = end - start; \ |
| 144 | − BUG_ON(count <= 0); \ | |
| 142 | + WARN_ON(count < 0); \ | |
| 145 | 143 | \ |
| 146 | 144 | __asm__ __volatile__ (" 1: " #op " %0, %1; \ |
| 147 | 145 | bgtid %1, 1b; \ |
| @@ -154,7 +152,9 @@ do { \ · 6 unmodified lines | ||
| 154 | 152 | #define CACHE_RANGE_LOOP_1(start, end, line_length, op) \ |
| 155 | 153 | do { \ |
| 156 | 154 | int volatile temp; \ |
| 157 | − BUG_ON(end - start <= 0); \ | |
| 155 | + int align = ~(line_length - 1); \ | |
| 156 | + end = ((end & align) == end) ? end - line_length : end & align; \ | |
| 157 | + WARN_ON(end - start < 0); \ | |
| 158 | 158 | \ |
| 159 | 159 | __asm__ __volatile__ (" 1: " #op " %1, r0; \ |
| 160 | 160 | cmpu %0, %1, %2; \ |
| @@ -360,8 +360,12 @@ static void __invalidate_dcache_all_noirq_wt(void) · 199 unmodified lines | ||
| 360 | 360 | #endif |
| 361 | 361 | } |
| 362 | 362 | |
| 363 | −/* FIXME this is weird - should be only wdc but not work | |
| 364 | − * MS: I am getting bus errors and other weird things */ | |
| 363 | +/* FIXME It is blindly invalidation as is expected | |
| 364 | + * but can't be called on noMMU in microblaze_cache_init below | |
| 365 | + * | |
| 366 | + * MS: noMMU kernel won't boot if simple wdc is used | |
| 367 | + * The reason should be that there are discared data which kernel needs | |
| 368 | + */ | |
| 365 | 369 | static void __invalidate_dcache_all_wb(void) |
| 366 | 370 | { |
| 367 | 371 | #ifndef ASM_LOOP |
| @@ -369,12 +373,12 @@ static void __invalidate_dcache_all_wb(void) · 1 unmodified line | ||
| 369 | 373 | #endif |
| 370 | 374 | pr_debug("%s\n", __func__); |
| 371 | 375 | #ifdef ASM_LOOP |
| 372 | − CACHE_ALL_LOOP2(cpuinfo.dcache_size, cpuinfo.dcache_line_length, | |
| 373 | − wdc.clear) | |
| 376 | + CACHE_ALL_LOOP(cpuinfo.dcache_size, cpuinfo.dcache_line_length, | |
| 377 | + wdc) | |
| 374 | 378 | #else |
| 375 | 379 | for (i = 0; i < cpuinfo.dcache_size; |
| 376 | 380 | i += cpuinfo.dcache_line_length) |
| 377 | − __asm__ __volatile__ ("wdc.clear %0, r0;" \ | |
| 381 | + __asm__ __volatile__ ("wdc %0, r0;" \ | |
| 378 | 382 | : : "r" (i)); |
| 379 | 383 | #endif |
| 380 | 384 | } |
| @@ -393,7 +397,7 @@ static void __invalidate_dcache_range_wb(unsigned long start, · 12 unmodified lines | ||
| 393 | 397 | #ifdef ASM_LOOP |
| 394 | 398 | CACHE_RANGE_LOOP_2(start, end, cpuinfo.dcache_line_length, wdc.clear); |
| 395 | 399 | #else |
| 396 | − for (i = start; i < end; i += cpuinfo.icache_line_length) | |
| 400 | + for (i = start; i < end; i += cpuinfo.dcache_line_length) | |
| 397 | 401 | __asm__ __volatile__ ("wdc.clear %0, r0;" \ |
| 398 | 402 | : : "r" (i)); |
| 399 | 403 | #endif |
| @@ -413,7 +417,7 @@ static void __invalidate_dcache_range_nomsr_wt(unsigned long start, · 13 unmodified lines | ||
| 413 | 417 | #ifdef ASM_LOOP |
| 414 | 418 | CACHE_RANGE_LOOP_1(start, end, cpuinfo.dcache_line_length, wdc); |
| 415 | 419 | #else |
| 416 | − for (i = start; i < end; i += cpuinfo.icache_line_length) | |
| 420 | + for (i = start; i < end; i += cpuinfo.dcache_line_length) | |
| 417 | 421 | __asm__ __volatile__ ("wdc %0, r0;" \ |
| 418 | 422 | : : "r" (i)); |
| 419 | 423 | #endif |
| @@ -437,7 +441,7 @@ static void __invalidate_dcache_range_msr_irq_wt(unsigned long start, · 17 unmodified lines | ||
| 437 | 441 | #ifdef ASM_LOOP |
| 438 | 442 | CACHE_RANGE_LOOP_1(start, end, cpuinfo.dcache_line_length, wdc); |
| 439 | 443 | #else |
| 440 | − for (i = start; i < end; i += cpuinfo.icache_line_length) | |
| 444 | + for (i = start; i < end; i += cpuinfo.dcache_line_length) | |
| 441 | 445 | __asm__ __volatile__ ("wdc %0, r0;" \ |
| 442 | 446 | : : "r" (i)); |
| 443 | 447 | #endif |
| @@ -465,7 +469,7 @@ static void __invalidate_dcache_range_nomsr_irq(unsigned long start, · 21 unmodified lines | ||
| 465 | 469 | #ifdef ASM_LOOP |
| 466 | 470 | CACHE_RANGE_LOOP_1(start, end, cpuinfo.dcache_line_length, wdc); |
| 467 | 471 | #else |
| 468 | − for (i = start; i < end; i += cpuinfo.icache_line_length) | |
| 472 | + for (i = start; i < end; i += cpuinfo.dcache_line_length) | |
| 469 | 473 | __asm__ __volatile__ ("wdc %0, r0;" \ |
| 470 | 474 | : : "r" (i)); |
| 471 | 475 | #endif |
| @@ -504,7 +508,7 @@ static void __flush_dcache_range_wb(unsigned long start, unsigned long end) · 32 unmodified lines | ||
| 504 | 508 | #ifdef ASM_LOOP |
| 505 | 509 | CACHE_RANGE_LOOP_2(start, end, cpuinfo.dcache_line_length, wdc.flush); |
| 506 | 510 | #else |
| 507 | − for (i = start; i < end; i += cpuinfo.icache_line_length) | |
| 511 | + for (i = start; i < end; i += cpuinfo.dcache_line_length) | |
| 508 | 512 | __asm__ __volatile__ ("wdc.flush %0, r0;" \ |
| 509 | 513 | : : "r" (i)); |
| 510 | 514 | #endif |
| @@ -650,7 +654,11 @@ void microblaze_cache_init(void) · 139 unmodified lines | ||
| 650 | 654 | } |
| 651 | 655 | } |
| 652 | 656 | } |
| 653 | − invalidate_dcache(); | |
| 657 | +/* FIXME Invalidation is done in U-BOOT | |
| 658 | + * WT cache: Data is already written to main memory | |
| 659 | + * WB cache: Discard data on noMMU which caused that kernel doesn't boot | |
| 660 | + */ | |
| 661 | + /* invalidate_dcache(); */ | |
| 654 | 662 | enable_dcache(); |
| 655 | 663 | |
| 656 | 664 | invalidate_icache(); |
| @@ -98,15 +98,17 @@ static int show_cpuinfo(struct seq_file *m, void *v) · 97 unmodified lines | ||
| 98 | 98 | |
| 99 | 99 | if (cpuinfo.use_icache) |
| 100 | 100 | count += seq_printf(m, |
| 101 | − "Icache:\t\t%ukB\n", | |
| 102 | − cpuinfo.icache_size >> 10); | |
| 101 | + "Icache:\t\t%ukB\tline length:\t%dB\n", | |
| 102 | + cpuinfo.icache_size >> 10, | |
| 103 | + cpuinfo.icache_line_length); | |
| 103 | 104 | else |
| 104 | 105 | count += seq_printf(m, "Icache:\t\tno\n"); |
| 105 | 106 | |
| 106 | 107 | if (cpuinfo.use_dcache) { |
| 107 | 108 | count += seq_printf(m, |
| 108 | − "Dcache:\t\t%ukB\n", | |
| 109 | − cpuinfo.dcache_size >> 10); | |
| 109 | + "Dcache:\t\t%ukB\tline length:\t%dB\n", | |
| 110 | + cpuinfo.dcache_size >> 10, | |
| 111 | + cpuinfo.dcache_line_length); | |
| 110 | 112 | if (cpuinfo.dcache_wb) |
| 111 | 113 | count += seq_printf(m, "\t\twrite-back\n"); |
| 112 | 114 | else |
| @@ -74,7 +74,7 @@ static void dma_direct_free_coherent(struct device *dev, size_t size, · 73 unmodified lines | ||
| 74 | 74 | void *vaddr, dma_addr_t dma_handle) |
| 75 | 75 | { |
| 76 | 76 | #ifdef NOT_COHERENT_CACHE |
| 77 | − consistent_free(vaddr); | |
| 77 | + consistent_free(size, vaddr); | |
| 78 | 78 | #else |
| 79 | 79 | free_pages((unsigned long)vaddr, get_order(size)); |
| 80 | 80 | #endif |
| @@ -121,7 +121,7 @@ asmlinkage void full_exception(struct pt_regs *regs, unsigned int type, · 120 unmodified lines | ||
| 121 | 121 | } |
| 122 | 122 | printk(KERN_WARNING "Divide by zero exception " \ |
| 123 | 123 | "in kernel mode.\n"); |
| 124 | − die("Divide by exception", regs, SIGBUS); | |
| 124 | + die("Divide by zero exception", regs, SIGBUS); | |
| 125 | 125 | break; |
| 126 | 126 | case MICROBLAZE_FPU_EXCEPTION: |
| 127 | 127 | pr_debug(KERN_WARNING "FPU exception\n"); |
| @@ -28,6 +28,7 @@ · 27 unmodified lines | ||
| 28 | 28 | * for more details. |
| 29 | 29 | */ |
| 30 | 30 | |
| 31 | +#include <linux/init.h> | |
| 31 | 32 | #include <linux/linkage.h> |
| 32 | 33 | #include <asm/thread_info.h> |
| 33 | 34 | #include <asm/page.h> |
| @@ -49,7 +50,7 @@ swapper_pg_dir: · 15 unmodified lines | ||
| 49 | 50 | |
| 50 | 51 | #endif /* CONFIG_MMU */ |
| 51 | 52 | |
| 52 | − .text | |
| 53 | + __HEAD | |
| 53 | 54 | ENTRY(_start) |
| 54 | 55 | #if CONFIG_KERNEL_BASE_ADDR == 0 |
| 55 | 56 | brai TOPHYS(real_start) |
| @@ -9,6 +9,7 @@ · 8 unmodified lines | ||
| 9 | 9 | */ |
| 10 | 10 | |
| 11 | 11 | #include <linux/init.h> |
| 12 | +#include <linux/ftrace.h> | |
| 12 | 13 | #include <linux/kernel.h> |
| 13 | 14 | #include <linux/hardirq.h> |
| 14 | 15 | #include <linux/interrupt.h> |
| @@ -32,7 +33,7 @@ EXPORT_SYMBOL_GPL(irq_of_parse_and_map); · 17 unmodified lines | ||
| 32 | 33 | |
| 33 | 34 | static u32 concurrent_irq; |
| 34 | 35 | |
| 35 | −void do_IRQ(struct pt_regs *regs) | |
| 36 | +void __irq_entry do_IRQ(struct pt_regs *regs) | |
| 36 | 37 | { |
| 37 | 38 | unsigned int irq; |
| 38 | 39 | struct pt_regs *old_regs = set_irq_regs(regs); |
| @@ -93,39 +93,3 @@ early_console_reg_tlb_alloc: · 92 unmodified lines | ||
| 93 | 93 | nop |
| 94 | 94 | |
| 95 | 95 | .size early_console_reg_tlb_alloc, . - early_console_reg_tlb_alloc |
| 96 | − | |
| 97 | −/* | |
| 98 | − * Copy a whole page (4096 bytes). | |
| 99 | − */ | |
| 100 | −#define COPY_16_BYTES \ | |
| 101 | − lwi r7, r6, 0; \ | |
| 102 | − lwi r8, r6, 4; \ | |
| 103 | − lwi r9, r6, 8; \ | |
| 104 | − lwi r10, r6, 12; \ | |
| 105 | − swi r7, r5, 0; \ | |
| 106 | − swi r8, r5, 4; \ | |
| 107 | − swi r9, r5, 8; \ | |
| 108 | − swi r10, r5, 12 | |
| 109 | − | |
| 110 | − | |
| 111 | −/* FIXME DCACHE_LINE_BYTES (CONFIG_XILINX_MICROBLAZE0_DCACHE_LINE_LEN * 4)*/ | |
| 112 | −#define DCACHE_LINE_BYTES (4 * 4) | |
| 113 | − | |
| 114 | −.globl copy_page; | |
| 115 | −.type copy_page, @function | |
| 116 | −.align 4; | |
| 117 | −copy_page: | |
| 118 | − ori r11, r0, (PAGE_SIZE/DCACHE_LINE_BYTES) - 1 | |
| 119 | −_copy_page_loop: | |
| 120 | − COPY_16_BYTES | |
| 121 | −#if DCACHE_LINE_BYTES >= 32 | |
| 122 | − COPY_16_BYTES | |
| 123 | −#endif | |
| 124 | − addik r6, r6, DCACHE_LINE_BYTES | |
| 125 | − addik r5, r5, DCACHE_LINE_BYTES | |
| 126 | − bneid r11, _copy_page_loop | |
| 127 | − addik r11, r11, -1 | |
| 128 | − rtsd r15, 8 | |
| 129 | − nop | |
| 130 | − | |
| 131 | − .size copy_page, . - copy_page | |
| @@ -95,37 +95,3 @@ void dump_stack(void) · 94 unmodified lines | ||
| 95 | 95 | show_stack(NULL, NULL); |
| 96 | 96 | } |
| 97 | 97 | EXPORT_SYMBOL(dump_stack); |
| 98 | − | |
| 99 | −#ifdef CONFIG_MMU | |
| 100 | −void __bug(const char *file, int line, void *data) | |
| 101 | −{ | |
| 102 | − if (data) | |
| 103 | − printk(KERN_CRIT "kernel BUG at %s:%d (data = %p)!\n", | |
| 104 | − file, line, data); | |
| 105 | − else | |
| 106 | − printk(KERN_CRIT "kernel BUG at %s:%d!\n", file, line); | |
| 107 | − | |
| 108 | − machine_halt(); | |
| 109 | −} | |
| 110 | − | |
| 111 | −int bad_trap(int trap_num, struct pt_regs *regs) | |
| 112 | −{ | |
| 113 | − printk(KERN_CRIT | |
| 114 | − "unimplemented trap %d called at 0x%08lx, pid %d!\n", | |
| 115 | − trap_num, regs->pc, current->pid); | |
| 116 | − return -ENOSYS; | |
| 117 | −} | |
| 118 | − | |
| 119 | −int debug_trap(struct pt_regs *regs) | |
| 120 | −{ | |
| 121 | − int i; | |
| 122 | − printk(KERN_CRIT "debug trap\n"); | |
| 123 | − for (i = 0; i < 32; i++) { | |
| 124 | − /* printk("r%i:%08X\t",i,regs->gpr[i]); */ | |
| 125 | − if ((i % 4) == 3) | |
| 126 | − printk(KERN_CRIT "\n"); | |
| 127 | − } | |
| 128 | − printk(KERN_CRIT "pc:%08lX\tmsr:%08lX\n", regs->pc, regs->msr); | |
| 129 | − return -ENOSYS; | |
| 130 | −} | |
| 131 | −#endif | |
| @@ -24,7 +24,8 @@ SECTIONS { · 23 unmodified lines | ||
| 24 | 24 | .text : AT(ADDR(.text) - LOAD_OFFSET) { |
| 25 | 25 | _text = . ; |
| 26 | 26 | _stext = . ; |
| 27 | − *(.text .text.*) | |
| 27 | + HEAD_TEXT | |
| 28 | + TEXT_TEXT | |
| 28 | 29 | *(.fixup) |
| 29 | 30 | EXIT_TEXT |
| 30 | 31 | EXIT_CALL |
| @@ -42,11 +42,12 @@ · 41 unmodified lines | ||
| 42 | 42 | #include <linux/uaccess.h> |
| 43 | 43 | #include <asm/pgtable.h> |
| 44 | 44 | #include <asm/cpuinfo.h> |
| 45 | +#include <asm/tlbflush.h> | |
| 45 | 46 | |
| 46 | 47 | #ifndef CONFIG_MMU |
| 47 | − | |
| 48 | 48 | /* I have to use dcache values because I can't relate on ram size */ |
| 49 | −#define UNCACHED_SHADOW_MASK (cpuinfo.dcache_high - cpuinfo.dcache_base + 1) | |
| 49 | +# define UNCACHED_SHADOW_MASK (cpuinfo.dcache_high - cpuinfo.dcache_base + 1) | |
| 50 | +#endif | |
| 50 | 51 | |
| 51 | 52 | /* |
| 52 | 53 | * Consistent memory allocators. Used for DMA devices that want to |
| @@ -60,71 +61,16 @@ · 7 unmodified lines | ||
| 60 | 61 | */ |
| 61 | 62 | void *consistent_alloc(int gfp, size_t size, dma_addr_t *dma_handle) |
| 62 | 63 | { |
| 63 | − struct page *page, *end, *free; | |
| 64 | − unsigned long order; | |
| 65 | − void *ret, *virt; | |
| 66 | − | |
| 67 | − if (in_interrupt()) | |
| 68 | − BUG(); | |
| 69 | − | |
| 70 | − size = PAGE_ALIGN(size); | |
| 71 | − order = get_order(size); | |
| 72 | − | |
| 73 | − page = alloc_pages(gfp, order); | |
| 74 | − if (!page) | |
| 75 | − goto no_page; | |
| 76 | − | |
| 77 | − /* We could do with a page_to_phys and page_to_bus here. */ | |
| 78 | − virt = page_address(page); | |
| 79 | − ret = ioremap(virt_to_phys(virt), size); | |
| 80 | − if (!ret) | |
| 81 | − goto no_remap; | |
| 82 | − | |
| 83 | − /* | |
| 84 | − * Here's the magic! Note if the uncached shadow is not implemented, | |
| 85 | − * it's up to the calling code to also test that condition and make | |
| 86 | − * other arranegments, such as manually flushing the cache and so on. | |
| 87 | − */ | |
| 88 | −#ifdef CONFIG_XILINX_UNCACHED_SHADOW | |
| 89 | − ret = (void *)((unsigned) ret | UNCACHED_SHADOW_MASK); | |
| 90 | −#endif | |
| 91 | − /* dma_handle is same as physical (shadowed) address */ | |
| 92 | − *dma_handle = (dma_addr_t)ret; | |
| 93 | − | |
| 94 | − /* | |
| 95 | − * free wasted pages. We skip the first page since we know | |
| 96 | − * that it will have count = 1 and won't require freeing. | |
| 97 | − * We also mark the pages in use as reserved so that | |
| 98 | − * remap_page_range works. | |
| 99 | − */ | |
| 100 | − page = virt_to_page(virt); | |
| 101 | − free = page + (size >> PAGE_SHIFT); | |
| 102 | − end = page + (1 << order); | |
| 103 | − | |
| 104 | − for (; page < end; page++) { | |
| 105 | − init_page_count(page); | |
| 106 | − if (page >= free) | |
| 107 | − __free_page(page); | |
| 108 | − else | |
| 109 | − SetPageReserved(page); | |
| 110 | − } | |
| 111 | − | |
| 112 | − return ret; | |
| 113 | −no_remap: | |
| 114 | − __free_pages(page, order); | |
| 115 | −no_page: | |
| 116 | − return NULL; | |
| 117 | −} | |
| 118 | − | |
| 119 | −#else | |
| 64 | + unsigned long order, vaddr; | |
| 65 | + void *ret; | |
| 66 | + unsigned int i, err = 0; | |
| 67 | + struct page *page, *end; | |
| 120 | 68 | |
| 121 | −void *consistent_alloc(int gfp, size_t size, dma_addr_t *dma_handle) | |
| 122 | −{ | |
| 123 | − int order, err, i; | |
| 124 | − unsigned long page, va, flags; | |
| 69 | +#ifdef CONFIG_MMU | |
| 125 | 70 | phys_addr_t pa; |
| 126 | 71 | struct vm_struct *area; |
| 127 | − void *ret; | |
| 72 | + unsigned long va; | |
| 73 | +#endif | |
| 128 | 74 | |
| 129 | 75 | if (in_interrupt()) |
| 130 | 76 | BUG(); |
| @@ -133,71 +79,133 @@ void *consistent_alloc(int gfp, size_t size, dma_addr_t *dma_handle) · 2 unmodified lines | ||
| 133 | 79 | size = PAGE_ALIGN(size); |
| 134 | 80 | order = get_order(size); |
| 135 | 81 | |
| 136 | − page = __get_free_pages(gfp, order); | |
| 137 | − if (!page) { | |
| 138 | − BUG(); | |
| 82 | + vaddr = __get_free_pages(gfp, order); | |
| 83 | + if (!vaddr) | |
| 139 | 84 | return NULL; |
| 140 | − } | |
| 141 | 85 | |
| 142 | 86 | /* |
| 143 | 87 | * we need to ensure that there are no cachelines in use, |
| 144 | 88 | * or worse dirty in this area. |
| 145 | 89 | */ |
| 146 | − flush_dcache_range(virt_to_phys(page), virt_to_phys(page) + size); | |
| 90 | + flush_dcache_range(virt_to_phys((void *)vaddr), | |
| 91 | + virt_to_phys((void *)vaddr) + size); | |
| 147 | 92 | |
| 93 | +#ifndef CONFIG_MMU | |
| 94 | + ret = (void *)vaddr; | |
| 95 | + /* | |
| 96 | + * Here's the magic! Note if the uncached shadow is not implemented, | |
| 97 | + * it's up to the calling code to also test that condition and make | |
| 98 | + * other arranegments, such as manually flushing the cache and so on. | |
| 99 | + */ | |
| 100 | +# ifdef CONFIG_XILINX_UNCACHED_SHADOW | |
| 101 | + ret = (void *)((unsigned) ret | UNCACHED_SHADOW_MASK); | |
| 102 | +# endif | |
| 103 | + if ((unsigned int)ret > cpuinfo.dcache_base && | |
| 104 | + (unsigned int)ret < cpuinfo.dcache_high) | |
| 105 | + printk(KERN_WARNING | |
| 106 | + "ERROR: Your cache coherent area is CACHED!!!\n"); | |
| 107 | + | |
| 108 | + /* dma_handle is same as physical (shadowed) address */ | |
| 109 | + *dma_handle = (dma_addr_t)ret; | |
| 110 | +#else | |
| 148 | 111 | /* Allocate some common virtual space to map the new pages. */ |
| 149 | 112 | area = get_vm_area(size, VM_ALLOC); |
| 150 | − if (area == NULL) { | |
| 151 | − free_pages(page, order); | |
| 113 | + if (!area) { | |
| 114 | + free_pages(vaddr, order); | |
| 152 | 115 | return NULL; |
| 153 | 116 | } |
| 154 | 117 | va = (unsigned long) area->addr; |
| 155 | 118 | ret = (void *)va; |
| 156 | 119 | |
| 157 | 120 | /* This gives us the real physical address of the first page. */ |
| 158 | − *dma_handle = pa = virt_to_bus((void *)page); | |
| 159 | − | |
| 160 | − /* MS: This is the whole magic - use cache inhibit pages */ | |
| 161 | − flags = _PAGE_KERNEL | _PAGE_NO_CACHE; | |
| 121 | + *dma_handle = pa = virt_to_bus((void *)vaddr); | |
| 122 | +#endif | |
| 162 | 123 | |
| 163 | 124 | /* |
| 164 | − * Set refcount=1 on all pages in an order>0 | |
| 165 | − * allocation so that vfree() will actually | |
| 166 | − * free all pages that were allocated. | |
| 125 | + * free wasted pages. We skip the first page since we know | |
| 126 | + * that it will have count = 1 and won't require freeing. | |
| 127 | + * We also mark the pages in use as reserved so that | |
| 128 | + * remap_page_range works. | |
| 167 | 129 | */ |
| 168 | − if (order > 0) { | |
| 169 | − struct page *rpage = virt_to_page(page); | |
| 170 | − for (i = 1; i < (1 << order); i++) | |
| 171 | − init_page_count(rpage+i); | |
| 130 | + page = virt_to_page(vaddr); | |
| 131 | + end = page + (1 << order); | |
| 132 | + | |
| 133 | + split_page(page, order); | |
| 134 | + | |
| 135 | + for (i = 0; i < size && err == 0; i += PAGE_SIZE) { | |
| 136 | +#ifdef CONFIG_MMU | |
| 137 | + /* MS: This is the whole magic - use cache inhibit pages */ | |
| 138 | + err = map_page(va + i, pa + i, _PAGE_KERNEL | _PAGE_NO_CACHE); | |
| 139 | +#endif | |
| 140 | + | |
| 141 | + SetPageReserved(page); | |
| 142 | + page++; | |
| 172 | 143 | } |
| 173 | 144 | |
| 174 | − err = 0; | |
| 175 | − for (i = 0; i < size && err == 0; i += PAGE_SIZE) | |
| 176 | − err = map_page(va+i, pa+i, flags); | |
| 145 | + /* Free the otherwise unused pages. */ | |
| 146 | + while (page < end) { | |
| 147 | + __free_page(page); | |
| 148 | + page++; | |
| 149 | + } | |
| 177 | 150 | |
| 178 | 151 | if (err) { |
| 179 | − vfree((void *)va); | |
| 152 | + free_pages(vaddr, order); | |
| 180 | 153 | return NULL; |
| 181 | 154 | } |
| 182 | 155 | |
| 183 | 156 | return ret; |
| 184 | 157 | } |
| 185 | −#endif /* CONFIG_MMU */ | |
| 186 | 158 | EXPORT_SYMBOL(consistent_alloc); |
| 187 | 159 | |
| 188 | 160 | /* |
| 189 | 161 | * free page(s) as defined by the above mapping. |
| 190 | 162 | */ |
| 191 | −void consistent_free(void *vaddr) | |
| 163 | +void consistent_free(size_t size, void *vaddr) | |
| 192 | 164 | { |
| 165 | + struct page *page; | |
| 166 | + | |
| 193 | 167 | if (in_interrupt()) |
| 194 | 168 | BUG(); |
| 195 | 169 | |
| 170 | + size = PAGE_ALIGN(size); | |
| 171 | + | |
| 172 | +#ifndef CONFIG_MMU | |
| 196 | 173 | /* Clear SHADOW_MASK bit in address, and free as per usual */ |
| 197 | −#ifdef CONFIG_XILINX_UNCACHED_SHADOW | |
| 174 | +# ifdef CONFIG_XILINX_UNCACHED_SHADOW | |
| 198 | 175 | vaddr = (void *)((unsigned)vaddr & ~UNCACHED_SHADOW_MASK); |
| 176 | +# endif | |
| 177 | + page = virt_to_page(vaddr); | |
| 178 | + | |
| 179 | + do { | |
| 180 | + ClearPageReserved(page); | |
| 181 | + __free_page(page); | |
| 182 | + page++; | |
| 183 | + } while (size -= PAGE_SIZE); | |
| 184 | +#else | |
| 185 | + do { | |
| 186 | + pte_t *ptep; | |
| 187 | + unsigned long pfn; | |
| 188 | + | |
| 189 | + ptep = pte_offset_kernel(pmd_offset(pgd_offset_k( | |
| 190 | + (unsigned int)vaddr), | |
| 191 | + (unsigned int)vaddr), | |
| 192 | + (unsigned int)vaddr); | |
| 193 | + if (!pte_none(*ptep) && pte_present(*ptep)) { | |
| 194 | + pfn = pte_pfn(*ptep); | |
| 195 | + pte_clear(&init_mm, (unsigned int)vaddr, ptep); | |
| 196 | + if (pfn_valid(pfn)) { | |
| 197 | + page = pfn_to_page(pfn); | |
| 198 | + | |
| 199 | + ClearPageReserved(page); | |
| 200 | + __free_page(page); | |
| 201 | + } | |
| 202 | + } | |
| 203 | + vaddr += PAGE_SIZE; | |
| 204 | + } while (size -= PAGE_SIZE); | |
| 205 | + | |
| 206 | + /* flush tlb */ | |
| 207 | + flush_tlb_all(); | |
| 199 | 208 | #endif |
| 200 | − vfree(vaddr); | |
| 201 | 209 | } |
| 202 | 210 | EXPORT_SYMBOL(consistent_free); |
| 203 | 211 | |
| @@ -221,7 +229,7 @@ void consistent_sync(void *vaddr, size_t size, int direction) · 17 unmodified lines | ||
| 221 | 229 | case PCI_DMA_NONE: |
| 222 | 230 | BUG(); |
| 223 | 231 | case PCI_DMA_FROMDEVICE: /* invalidate only */ |
| 224 | − flush_dcache_range(start, end); | |
| 232 | + invalidate_dcache_range(start, end); | |
| 225 | 233 | break; |
| 226 | 234 | case PCI_DMA_TODEVICE: /* writeback only */ |
| 227 | 235 | flush_dcache_range(start, end); |
| @@ -273,16 +273,11 @@ bad_area_nosemaphore: · 272 unmodified lines | ||
| 273 | 273 | * us unable to handle the page fault gracefully. |
| 274 | 274 | */ |
| 275 | 275 | out_of_memory: |
| 276 | − if (current->pid == 1) { | |
| 277 | − yield(); | |
| 278 | − down_read(&mm->mmap_sem); | |
| 279 | − goto survive; | |
| 280 | − } | |
| 281 | 276 | up_read(&mm->mmap_sem); |
| 282 | − printk(KERN_WARNING "VM: killing process %s\n", current->comm); | |
| 283 | − if (user_mode(regs)) | |
| 284 | − do_exit(SIGKILL); | |
| 285 | − bad_page_fault(regs, address, SIGKILL); | |
| 277 | + if (!user_mode(regs)) | |
| 278 | + bad_page_fault(regs, address, SIGKILL); | |
| 279 | + else | |
| 280 | + pagefault_out_of_memory(); | |
| 286 | 281 | return; |
| 287 | 282 | |
| 288 | 283 | do_sigbus: |
| @@ -161,24 +161,6 @@ int map_page(unsigned long va, phys_addr_t pa, int flags) · 160 unmodified lines | ||
| 161 | 161 | return err; |
| 162 | 162 | } |
| 163 | 163 | |
| 164 | −void __init adjust_total_lowmem(void) | |
| 165 | −{ | |
| 166 | −/* TBD */ | |
| 167 | −#if 0 | |
| 168 | − unsigned long max_low_mem = MAX_LOW_MEM; | |
| 169 | − | |
| 170 | − if (total_lowmem > max_low_mem) { | |
| 171 | − total_lowmem = max_low_mem; | |
| 172 | −#ifndef CONFIG_HIGHMEM | |
| 173 | − printk(KERN_INFO "Warning, memory limited to %ld Mb, use " | |
| 174 | − "CONFIG_HIGHMEM to reach %ld Mb\n", | |
| 175 | − max_low_mem >> 20, total_memory >> 20); | |
| 176 | − total_memory = total_lowmem; | |
| 177 | −#endif /* CONFIG_HIGHMEM */ | |
| 178 | − } | |
| 179 | −#endif | |
| 180 | −} | |
| 181 | − | |
| 182 | 164 | /* |
| 183 | 165 | * Map in all of physical memory starting at CONFIG_KERNEL_START. |
| 184 | 166 | */ |
| @@ -206,24 +188,6 @@ void __init mapin_ram(void) · 21 unmodified lines | ||
| 206 | 188 | /* is x a power of 2? */ |
| 207 | 189 | #define is_power_of_2(x) ((x) != 0 && (((x) & ((x) - 1)) == 0)) |
| 208 | 190 | |
| 209 | −/* | |
| 210 | − * Set up a mapping for a block of I/O. | |
| 211 | − * virt, phys, size must all be page-aligned. | |
| 212 | − * This should only be called before ioremap is called. | |
| 213 | − */ | |
| 214 | −void __init io_block_mapping(unsigned long virt, phys_addr_t phys, | |
| 215 | − unsigned int size, int flags) | |
| 216 | −{ | |
| 217 | − int i; | |
| 218 | − | |
| 219 | − if (virt > CONFIG_KERNEL_START && virt < ioremap_bot) | |
| 220 | − ioremap_bot = ioremap_base = virt; | |
| 221 | − | |
| 222 | − /* Put it in the page tables. */ | |
| 223 | − for (i = 0; i < size; i += PAGE_SIZE) | |
| 224 | − map_page(virt + i, phys + i, flags); | |
| 225 | −} | |
| 226 | − | |
| 227 | 191 | /* Scan the real Linux page tables and return a PTE pointer for |
| 228 | 192 | * a virtual address in a context. |
| 229 | 193 | * Returns true (1) if PTE was found, zero otherwise. The pointer to |
| @@ -274,3 +238,18 @@ unsigned long iopa(unsigned long addr) · 44 unmodified lines | ||
| 274 | 238 | |
| 275 | 239 | return pa; |
| 276 | 240 | } |
| 241 | + | |
| 242 | +__init_refok pte_t *pte_alloc_one_kernel(struct mm_struct *mm, | |
| 243 | + unsigned long address) | |
| 244 | +{ | |
| 245 | + pte_t *pte; | |
| 246 | + if (mem_init_done) { | |
| 247 | + pte = (pte_t *)__get_free_page(GFP_KERNEL | | |
| 248 | + __GFP_REPEAT | __GFP_ZERO); | |
| 249 | + } else { | |
| 250 | + pte = (pte_t *)early_get_page(); | |
| 251 | + if (pte) | |
| 252 | + clear_page(pte); | |
| 253 | + } | |
| 254 | + return pte; | |
| 255 | +} | |
| @@ -1025,7 +1025,7 @@ static void __devinit pcibios_fixup_bridge(struct pci_bus *bus) · 1024 unmodified lines | ||
| 1025 | 1025 | |
| 1026 | 1026 | struct pci_dev *dev = bus->self; |
| 1027 | 1027 | |
| 1028 | − for (i = 0; i < PCI_BUS_NUM_RESOURCES; ++i) { | |
| 1028 | + pci_bus_for_each_resource(bus, res, i) { | |
| 1029 | 1029 | res = bus->resource[i]; |
| 1030 | 1030 | if (!res) |
| 1031 | 1031 | continue; |
| @@ -1131,21 +1131,20 @@ static int skip_isa_ioresource_align(struct pci_dev *dev) · 99 unmodified lines | ||
| 1131 | 1131 | * but we want to try to avoid allocating at 0x2900-0x2bff |
| 1132 | 1132 | * which might have be mirrored at 0x0100-0x03ff.. |
| 1133 | 1133 | */ |
| 1134 | −void pcibios_align_resource(void *data, struct resource *res, | |
| 1134 | +resource_size_t pcibios_align_resource(void *data, const struct resource *res, | |
| 1135 | 1135 | resource_size_t size, resource_size_t align) |
| 1136 | 1136 | { |
| 1137 | 1137 | struct pci_dev *dev = data; |
| 1138 | + resource_size_t start = res->start; | |
| 1138 | 1139 | |
| 1139 | 1140 | if (res->flags & IORESOURCE_IO) { |
| 1140 | − resource_size_t start = res->start; | |
| 1141 | − | |
| 1142 | 1141 | if (skip_isa_ioresource_align(dev)) |
| 1143 | − return; | |
| 1144 | − if (start & 0x300) { | |
| 1142 | + return start; | |
| 1143 | + if (start & 0x300) | |
| 1145 | 1144 | start = (start + 0x3ff) & ~0x3ff; |
| 1146 | − res->start = start; | |
| 1147 | − } | |
| 1148 | 1145 | } |
| 1146 | + | |
| 1147 | + return start; | |
| 1149 | 1148 | } |
| 1150 | 1149 | EXPORT_SYMBOL(pcibios_align_resource); |
| 1151 | 1150 | |
| @@ -1228,7 +1227,7 @@ void pcibios_allocate_bus_resources(struct pci_bus *bus) · 76 unmodified lines | ||
| 1228 | 1227 | pr_debug("PCI: Allocating bus resources for %04x:%02x...\n", |
| 1229 | 1228 | pci_domain_nr(bus), bus->number); |
| 1230 | 1229 | |
| 1231 | − for (i = 0; i < PCI_BUS_NUM_RESOURCES; ++i) { | |
| 1230 | + pci_bus_for_each_resource(bus, res, i) { | |
| 1232 | 1231 | res = bus->resource[i]; |
| 1233 | 1232 | if (!res || !res->flags |
| 1234 | 1233 | || res->start > res->end || res->parent) |