diff options
| -rw-r--r-- | arch/powerpc/configs/cell_defconfig | 151 | ||||
| -rw-r--r-- | arch/powerpc/mm/hash_utils_64.c | 6 | ||||
| -rw-r--r-- | arch/powerpc/mm/hugetlbpage.c | 4 | ||||
| -rw-r--r-- | arch/powerpc/platforms/cell/spu_base.c | 81 | ||||
| -rw-r--r-- | arch/powerpc/platforms/cell/spufs/file.c | 24 | ||||
| -rw-r--r-- | arch/powerpc/platforms/cell/spufs/run.c | 4 | ||||
| -rw-r--r-- | arch/powerpc/platforms/cell/spufs/sched.c | 20 | ||||
| -rw-r--r-- | arch/powerpc/platforms/cell/spufs/spufs.h | 6 | ||||
| -rw-r--r-- | arch/powerpc/platforms/cell/spufs/switch.c | 62 | ||||
| -rw-r--r-- | arch/powerpc/platforms/ps3/mm.c | 2 | ||||
| -rw-r--r-- | arch/powerpc/platforms/ps3/system-bus.c | 2 | ||||
| -rw-r--r-- | drivers/ps3/ps3av.c | 9 | ||||
| -rw-r--r-- | drivers/ps3/sys-manager.c | 6 | ||||
| -rw-r--r-- | drivers/ps3/vuart.c | 2 | ||||
| -rw-r--r-- | include/asm-powerpc/spu.h | 7 | ||||
| -rw-r--r-- | include/asm-powerpc/spu_csa.h | 4 | ||||
| -rw-r--r-- | include/asm-powerpc/systbl.h | 3 | ||||
| -rw-r--r-- | include/asm-powerpc/unistd.h | 4 |
18 files changed, 263 insertions, 134 deletions
diff --git a/arch/powerpc/configs/cell_defconfig b/arch/powerpc/configs/cell_defconfig index 24367319ce24..cf7e316ad4f6 100644 --- a/arch/powerpc/configs/cell_defconfig +++ b/arch/powerpc/configs/cell_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.20-rc5 | 3 | # Linux kernel version: 2.6.21-rc3 |
| 4 | # Mon Jan 22 22:12:56 2007 | 4 | # Fri Mar 9 23:34:53 2007 |
| 5 | # | 5 | # |
| 6 | CONFIG_PPC64=y | 6 | CONFIG_PPC64=y |
| 7 | CONFIG_64BIT=y | 7 | CONFIG_64BIT=y |
| @@ -61,6 +61,7 @@ CONFIG_LOCALVERSION_AUTO=y | |||
| 61 | CONFIG_SWAP=y | 61 | CONFIG_SWAP=y |
| 62 | CONFIG_SYSVIPC=y | 62 | CONFIG_SYSVIPC=y |
| 63 | # CONFIG_IPC_NS is not set | 63 | # CONFIG_IPC_NS is not set |
| 64 | CONFIG_SYSVIPC_SYSCTL=y | ||
| 64 | # CONFIG_POSIX_MQUEUE is not set | 65 | # CONFIG_POSIX_MQUEUE is not set |
| 65 | # CONFIG_BSD_PROCESS_ACCT is not set | 66 | # CONFIG_BSD_PROCESS_ACCT is not set |
| 66 | # CONFIG_TASKSTATS is not set | 67 | # CONFIG_TASKSTATS is not set |
| @@ -71,6 +72,7 @@ CONFIG_IKCONFIG_PROC=y | |||
| 71 | CONFIG_CPUSETS=y | 72 | CONFIG_CPUSETS=y |
| 72 | CONFIG_SYSFS_DEPRECATED=y | 73 | CONFIG_SYSFS_DEPRECATED=y |
| 73 | # CONFIG_RELAY is not set | 74 | # CONFIG_RELAY is not set |
| 75 | CONFIG_BLK_DEV_INITRD=y | ||
| 74 | CONFIG_INITRAMFS_SOURCE="" | 76 | CONFIG_INITRAMFS_SOURCE="" |
| 75 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | 77 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y |
| 76 | CONFIG_SYSCTL=y | 78 | CONFIG_SYSCTL=y |
| @@ -133,6 +135,7 @@ CONFIG_PPC_MULTIPLATFORM=y | |||
| 133 | # CONFIG_PPC_PSERIES is not set | 135 | # CONFIG_PPC_PSERIES is not set |
| 134 | # CONFIG_PPC_ISERIES is not set | 136 | # CONFIG_PPC_ISERIES is not set |
| 135 | # CONFIG_PPC_MPC52xx is not set | 137 | # CONFIG_PPC_MPC52xx is not set |
| 138 | # CONFIG_PPC_MPC5200 is not set | ||
| 136 | # CONFIG_PPC_PMAC is not set | 139 | # CONFIG_PPC_PMAC is not set |
| 137 | # CONFIG_PPC_MAPLE is not set | 140 | # CONFIG_PPC_MAPLE is not set |
| 138 | # CONFIG_PPC_PASEMI is not set | 141 | # CONFIG_PPC_PASEMI is not set |
| @@ -140,8 +143,10 @@ CONFIG_PPC_CELL=y | |||
| 140 | CONFIG_PPC_CELL_NATIVE=y | 143 | CONFIG_PPC_CELL_NATIVE=y |
| 141 | CONFIG_PPC_IBM_CELL_BLADE=y | 144 | CONFIG_PPC_IBM_CELL_BLADE=y |
| 142 | CONFIG_PPC_PS3=y | 145 | CONFIG_PPC_PS3=y |
| 146 | CONFIG_PPC_CELLEB=y | ||
| 143 | CONFIG_PPC_NATIVE=y | 147 | CONFIG_PPC_NATIVE=y |
| 144 | CONFIG_UDBG_RTAS_CONSOLE=y | 148 | CONFIG_UDBG_RTAS_CONSOLE=y |
| 149 | CONFIG_PPC_UDBG_BEAT=y | ||
| 145 | # CONFIG_U3_DART is not set | 150 | # CONFIG_U3_DART is not set |
| 146 | CONFIG_PPC_RTAS=y | 151 | CONFIG_PPC_RTAS=y |
| 147 | # CONFIG_RTAS_ERROR_LOGGING is not set | 152 | # CONFIG_RTAS_ERROR_LOGGING is not set |
| @@ -181,10 +186,13 @@ CONFIG_CBE_CPUFREQ=m | |||
| 181 | # | 186 | # |
| 182 | # PS3 Platform Options | 187 | # PS3 Platform Options |
| 183 | # | 188 | # |
| 189 | # CONFIG_PS3_ADVANCED is not set | ||
| 184 | CONFIG_PS3_HTAB_SIZE=20 | 190 | CONFIG_PS3_HTAB_SIZE=20 |
| 185 | # CONFIG_PS3_DYNAMIC_DMA is not set | 191 | # CONFIG_PS3_DYNAMIC_DMA is not set |
| 186 | CONFIG_PS3_USE_LPAR_ADDR=y | 192 | CONFIG_PS3_USE_LPAR_ADDR=y |
| 187 | CONFIG_PS3_VUART=y | 193 | CONFIG_PS3_VUART=y |
| 194 | CONFIG_PS3_PS3AV=y | ||
| 195 | CONFIG_PS3_SYS_MANAGER=y | ||
| 188 | 196 | ||
| 189 | # | 197 | # |
| 190 | # Kernel options | 198 | # Kernel options |
| @@ -226,6 +234,7 @@ CONFIG_MEMORY_HOTPLUG_SPARSE=y | |||
| 226 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 234 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
| 227 | CONFIG_MIGRATION=y | 235 | CONFIG_MIGRATION=y |
| 228 | CONFIG_RESOURCES_64BIT=y | 236 | CONFIG_RESOURCES_64BIT=y |
| 237 | CONFIG_ZONE_DMA_FLAG=1 | ||
| 229 | CONFIG_ARCH_MEMORY_PROBE=y | 238 | CONFIG_ARCH_MEMORY_PROBE=y |
| 230 | CONFIG_NODES_SPAN_OTHER_NODES=y | 239 | CONFIG_NODES_SPAN_OTHER_NODES=y |
| 231 | CONFIG_PPC_64K_PAGES=y | 240 | CONFIG_PPC_64K_PAGES=y |
| @@ -239,6 +248,7 @@ CONFIG_ISA_DMA_API=y | |||
| 239 | # | 248 | # |
| 240 | # Bus options | 249 | # Bus options |
| 241 | # | 250 | # |
| 251 | CONFIG_ZONE_DMA=y | ||
| 242 | CONFIG_GENERIC_ISA_DMA=y | 252 | CONFIG_GENERIC_ISA_DMA=y |
| 243 | # CONFIG_MPIC_WEIRD is not set | 253 | # CONFIG_MPIC_WEIRD is not set |
| 244 | # CONFIG_PPC_I8259 is not set | 254 | # CONFIG_PPC_I8259 is not set |
| @@ -274,6 +284,7 @@ CONFIG_UNIX=y | |||
| 274 | CONFIG_XFRM=y | 284 | CONFIG_XFRM=y |
| 275 | # CONFIG_XFRM_USER is not set | 285 | # CONFIG_XFRM_USER is not set |
| 276 | # CONFIG_XFRM_SUB_POLICY is not set | 286 | # CONFIG_XFRM_SUB_POLICY is not set |
| 287 | # CONFIG_XFRM_MIGRATE is not set | ||
| 277 | # CONFIG_NET_KEY is not set | 288 | # CONFIG_NET_KEY is not set |
| 278 | CONFIG_INET=y | 289 | CONFIG_INET=y |
| 279 | CONFIG_IP_MULTICAST=y | 290 | CONFIG_IP_MULTICAST=y |
| @@ -340,6 +351,7 @@ CONFIG_NETFILTER_XT_TARGET_DSCP=m | |||
| 340 | CONFIG_NETFILTER_XT_TARGET_MARK=m | 351 | CONFIG_NETFILTER_XT_TARGET_MARK=m |
| 341 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | 352 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m |
| 342 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m | 353 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m |
| 354 | CONFIG_NETFILTER_XT_TARGET_TCPMSS=m | ||
| 343 | CONFIG_NETFILTER_XT_MATCH_COMMENT=m | 355 | CONFIG_NETFILTER_XT_MATCH_COMMENT=m |
| 344 | CONFIG_NETFILTER_XT_MATCH_DCCP=m | 356 | CONFIG_NETFILTER_XT_MATCH_DCCP=m |
| 345 | CONFIG_NETFILTER_XT_MATCH_DSCP=m | 357 | CONFIG_NETFILTER_XT_MATCH_DSCP=m |
| @@ -376,7 +388,6 @@ CONFIG_IP_NF_FILTER=m | |||
| 376 | CONFIG_IP_NF_TARGET_REJECT=m | 388 | CONFIG_IP_NF_TARGET_REJECT=m |
| 377 | CONFIG_IP_NF_TARGET_LOG=m | 389 | CONFIG_IP_NF_TARGET_LOG=m |
| 378 | CONFIG_IP_NF_TARGET_ULOG=m | 390 | CONFIG_IP_NF_TARGET_ULOG=m |
| 379 | CONFIG_IP_NF_TARGET_TCPMSS=m | ||
| 380 | CONFIG_IP_NF_MANGLE=m | 391 | CONFIG_IP_NF_MANGLE=m |
| 381 | CONFIG_IP_NF_TARGET_TOS=m | 392 | CONFIG_IP_NF_TARGET_TOS=m |
| 382 | CONFIG_IP_NF_TARGET_ECN=m | 393 | CONFIG_IP_NF_TARGET_ECN=m |
| @@ -444,6 +455,7 @@ CONFIG_STANDALONE=y | |||
| 444 | CONFIG_PREVENT_FIRMWARE_BUILD=y | 455 | CONFIG_PREVENT_FIRMWARE_BUILD=y |
| 445 | CONFIG_FW_LOADER=y | 456 | CONFIG_FW_LOADER=y |
| 446 | # CONFIG_DEBUG_DRIVER is not set | 457 | # CONFIG_DEBUG_DRIVER is not set |
| 458 | # CONFIG_DEBUG_DEVRES is not set | ||
| 447 | # CONFIG_SYS_HYPERVISOR is not set | 459 | # CONFIG_SYS_HYPERVISOR is not set |
| 448 | 460 | ||
| 449 | # | 461 | # |
| @@ -464,6 +476,7 @@ CONFIG_FW_LOADER=y | |||
| 464 | # | 476 | # |
| 465 | # Plug and Play support | 477 | # Plug and Play support |
| 466 | # | 478 | # |
| 479 | # CONFIG_PNPACPI is not set | ||
| 467 | 480 | ||
| 468 | # | 481 | # |
| 469 | # Block devices | 482 | # Block devices |
| @@ -483,7 +496,6 @@ CONFIG_BLK_DEV_RAM=y | |||
| 483 | CONFIG_BLK_DEV_RAM_COUNT=16 | 496 | CONFIG_BLK_DEV_RAM_COUNT=16 |
| 484 | CONFIG_BLK_DEV_RAM_SIZE=131072 | 497 | CONFIG_BLK_DEV_RAM_SIZE=131072 |
| 485 | CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 | 498 | CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 |
| 486 | CONFIG_BLK_DEV_INITRD=y | ||
| 487 | # CONFIG_CDROM_PKTCDVD is not set | 499 | # CONFIG_CDROM_PKTCDVD is not set |
| 488 | # CONFIG_ATA_OVER_ETH is not set | 500 | # CONFIG_ATA_OVER_ETH is not set |
| 489 | 501 | ||
| @@ -537,6 +549,7 @@ CONFIG_BLK_DEV_AEC62XX=y | |||
| 537 | # CONFIG_BLK_DEV_JMICRON is not set | 549 | # CONFIG_BLK_DEV_JMICRON is not set |
| 538 | # CONFIG_BLK_DEV_SC1200 is not set | 550 | # CONFIG_BLK_DEV_SC1200 is not set |
| 539 | # CONFIG_BLK_DEV_PIIX is not set | 551 | # CONFIG_BLK_DEV_PIIX is not set |
| 552 | # CONFIG_BLK_DEV_IT8213 is not set | ||
| 540 | # CONFIG_BLK_DEV_IT821X is not set | 553 | # CONFIG_BLK_DEV_IT821X is not set |
| 541 | # CONFIG_BLK_DEV_NS87415 is not set | 554 | # CONFIG_BLK_DEV_NS87415 is not set |
| 542 | # CONFIG_BLK_DEV_PDC202XX_OLD is not set | 555 | # CONFIG_BLK_DEV_PDC202XX_OLD is not set |
| @@ -547,6 +560,8 @@ CONFIG_BLK_DEV_SIIMAGE=y | |||
| 547 | # CONFIG_BLK_DEV_SLC90E66 is not set | 560 | # CONFIG_BLK_DEV_SLC90E66 is not set |
| 548 | # CONFIG_BLK_DEV_TRM290 is not set | 561 | # CONFIG_BLK_DEV_TRM290 is not set |
| 549 | # CONFIG_BLK_DEV_VIA82CXXX is not set | 562 | # CONFIG_BLK_DEV_VIA82CXXX is not set |
| 563 | # CONFIG_BLK_DEV_TC86C001 is not set | ||
| 564 | CONFIG_BLK_DEV_IDE_CELLEB=y | ||
| 550 | # CONFIG_IDE_ARM is not set | 565 | # CONFIG_IDE_ARM is not set |
| 551 | CONFIG_BLK_DEV_IDEDMA=y | 566 | CONFIG_BLK_DEV_IDEDMA=y |
| 552 | # CONFIG_IDEDMA_IVB is not set | 567 | # CONFIG_IDEDMA_IVB is not set |
| @@ -557,7 +572,7 @@ CONFIG_IDEDMA_AUTO=y | |||
| 557 | # SCSI device support | 572 | # SCSI device support |
| 558 | # | 573 | # |
| 559 | # CONFIG_RAID_ATTRS is not set | 574 | # CONFIG_RAID_ATTRS is not set |
| 560 | CONFIG_SCSI=m | 575 | CONFIG_SCSI=y |
| 561 | # CONFIG_SCSI_TGT is not set | 576 | # CONFIG_SCSI_TGT is not set |
| 562 | # CONFIG_SCSI_NETLINK is not set | 577 | # CONFIG_SCSI_NETLINK is not set |
| 563 | CONFIG_SCSI_PROC_FS=y | 578 | CONFIG_SCSI_PROC_FS=y |
| @@ -565,12 +580,12 @@ CONFIG_SCSI_PROC_FS=y | |||
| 565 | # | 580 | # |
| 566 | # SCSI support type (disk, tape, CD-ROM) | 581 | # SCSI support type (disk, tape, CD-ROM) |
| 567 | # | 582 | # |
| 568 | CONFIG_BLK_DEV_SD=m | 583 | CONFIG_BLK_DEV_SD=y |
| 569 | # CONFIG_CHR_DEV_ST is not set | 584 | # CONFIG_CHR_DEV_ST is not set |
| 570 | # CONFIG_CHR_DEV_OSST is not set | 585 | # CONFIG_CHR_DEV_OSST is not set |
| 571 | CONFIG_BLK_DEV_SR=m | 586 | CONFIG_BLK_DEV_SR=m |
| 572 | # CONFIG_BLK_DEV_SR_VENDOR is not set | 587 | # CONFIG_BLK_DEV_SR_VENDOR is not set |
| 573 | CONFIG_CHR_DEV_SG=m | 588 | CONFIG_CHR_DEV_SG=y |
| 574 | # CONFIG_CHR_DEV_SCH is not set | 589 | # CONFIG_CHR_DEV_SCH is not set |
| 575 | 590 | ||
| 576 | # | 591 | # |
| @@ -587,7 +602,7 @@ CONFIG_CHR_DEV_SG=m | |||
| 587 | # CONFIG_SCSI_SPI_ATTRS is not set | 602 | # CONFIG_SCSI_SPI_ATTRS is not set |
| 588 | # CONFIG_SCSI_FC_ATTRS is not set | 603 | # CONFIG_SCSI_FC_ATTRS is not set |
| 589 | # CONFIG_SCSI_ISCSI_ATTRS is not set | 604 | # CONFIG_SCSI_ISCSI_ATTRS is not set |
| 590 | # CONFIG_SCSI_SAS_ATTRS is not set | 605 | CONFIG_SCSI_SAS_ATTRS=y |
| 591 | # CONFIG_SCSI_SAS_LIBSAS is not set | 606 | # CONFIG_SCSI_SAS_LIBSAS is not set |
| 592 | 607 | ||
| 593 | # | 608 | # |
| @@ -617,6 +632,7 @@ CONFIG_CHR_DEV_SG=m | |||
| 617 | # CONFIG_SCSI_INIA100 is not set | 632 | # CONFIG_SCSI_INIA100 is not set |
| 618 | # CONFIG_SCSI_STEX is not set | 633 | # CONFIG_SCSI_STEX is not set |
| 619 | # CONFIG_SCSI_SYM53C8XX_2 is not set | 634 | # CONFIG_SCSI_SYM53C8XX_2 is not set |
| 635 | # CONFIG_SCSI_IPR is not set | ||
| 620 | # CONFIG_SCSI_QLOGIC_1280 is not set | 636 | # CONFIG_SCSI_QLOGIC_1280 is not set |
| 621 | # CONFIG_SCSI_QLA_FC is not set | 637 | # CONFIG_SCSI_QLA_FC is not set |
| 622 | # CONFIG_SCSI_QLA_ISCSI is not set | 638 | # CONFIG_SCSI_QLA_ISCSI is not set |
| @@ -629,7 +645,60 @@ CONFIG_CHR_DEV_SG=m | |||
| 629 | # | 645 | # |
| 630 | # Serial ATA (prod) and Parallel ATA (experimental) drivers | 646 | # Serial ATA (prod) and Parallel ATA (experimental) drivers |
| 631 | # | 647 | # |
| 632 | # CONFIG_ATA is not set | 648 | CONFIG_ATA=y |
| 649 | # CONFIG_ATA_NONSTANDARD is not set | ||
| 650 | # CONFIG_SATA_AHCI is not set | ||
| 651 | # CONFIG_SATA_SVW is not set | ||
| 652 | # CONFIG_ATA_PIIX is not set | ||
| 653 | # CONFIG_SATA_MV is not set | ||
| 654 | # CONFIG_SATA_NV is not set | ||
| 655 | # CONFIG_PDC_ADMA is not set | ||
| 656 | # CONFIG_SATA_QSTOR is not set | ||
| 657 | CONFIG_SATA_PROMISE=y | ||
| 658 | # CONFIG_SATA_SX4 is not set | ||
| 659 | # CONFIG_SATA_SIL is not set | ||
| 660 | # CONFIG_SATA_SIL24 is not set | ||
| 661 | # CONFIG_SATA_SIS is not set | ||
| 662 | # CONFIG_SATA_ULI is not set | ||
| 663 | # CONFIG_SATA_VIA is not set | ||
| 664 | # CONFIG_SATA_VITESSE is not set | ||
| 665 | # CONFIG_SATA_INIC162X is not set | ||
| 666 | # CONFIG_PATA_ALI is not set | ||
| 667 | # CONFIG_PATA_AMD is not set | ||
| 668 | # CONFIG_PATA_ARTOP is not set | ||
| 669 | # CONFIG_PATA_ATIIXP is not set | ||
| 670 | # CONFIG_PATA_CMD64X is not set | ||
| 671 | # CONFIG_PATA_CS5520 is not set | ||
| 672 | # CONFIG_PATA_CS5530 is not set | ||
| 673 | # CONFIG_PATA_CYPRESS is not set | ||
| 674 | # CONFIG_PATA_EFAR is not set | ||
| 675 | # CONFIG_ATA_GENERIC is not set | ||
| 676 | # CONFIG_PATA_HPT366 is not set | ||
| 677 | # CONFIG_PATA_HPT37X is not set | ||
| 678 | # CONFIG_PATA_HPT3X2N is not set | ||
| 679 | # CONFIG_PATA_HPT3X3 is not set | ||
| 680 | # CONFIG_PATA_IT821X is not set | ||
| 681 | # CONFIG_PATA_IT8213 is not set | ||
| 682 | # CONFIG_PATA_JMICRON is not set | ||
| 683 | # CONFIG_PATA_TRIFLEX is not set | ||
| 684 | # CONFIG_PATA_MARVELL is not set | ||
| 685 | # CONFIG_PATA_MPIIX is not set | ||
| 686 | # CONFIG_PATA_OLDPIIX is not set | ||
| 687 | # CONFIG_PATA_NETCELL is not set | ||
| 688 | # CONFIG_PATA_NS87410 is not set | ||
| 689 | # CONFIG_PATA_OPTI is not set | ||
| 690 | # CONFIG_PATA_OPTIDMA is not set | ||
| 691 | # CONFIG_PATA_PDC_OLD is not set | ||
| 692 | # CONFIG_PATA_RADISYS is not set | ||
| 693 | # CONFIG_PATA_RZ1000 is not set | ||
| 694 | # CONFIG_PATA_SC1200 is not set | ||
| 695 | # CONFIG_PATA_SERVERWORKS is not set | ||
| 696 | CONFIG_PATA_PDC2027X=m | ||
| 697 | # CONFIG_PATA_SIL680 is not set | ||
| 698 | # CONFIG_PATA_SIS is not set | ||
| 699 | # CONFIG_PATA_VIA is not set | ||
| 700 | # CONFIG_PATA_WINBOND is not set | ||
| 701 | # CONFIG_PATA_SCC is not set | ||
| 633 | 702 | ||
| 634 | # | 703 | # |
| 635 | # Multi-device support (RAID and LVM) | 704 | # Multi-device support (RAID and LVM) |
| @@ -655,10 +724,12 @@ CONFIG_DM_MULTIPATH=m | |||
| 655 | # | 724 | # |
| 656 | # Fusion MPT device support | 725 | # Fusion MPT device support |
| 657 | # | 726 | # |
| 658 | # CONFIG_FUSION is not set | 727 | CONFIG_FUSION=y |
| 659 | # CONFIG_FUSION_SPI is not set | 728 | # CONFIG_FUSION_SPI is not set |
| 660 | # CONFIG_FUSION_FC is not set | 729 | # CONFIG_FUSION_FC is not set |
| 661 | # CONFIG_FUSION_SAS is not set | 730 | CONFIG_FUSION_SAS=y |
| 731 | CONFIG_FUSION_MAX_SGE=128 | ||
| 732 | # CONFIG_FUSION_CTL is not set | ||
| 662 | 733 | ||
| 663 | # | 734 | # |
| 664 | # IEEE 1394 (FireWire) support | 735 | # IEEE 1394 (FireWire) support |
| @@ -732,15 +803,18 @@ CONFIG_TIGON3=y | |||
| 732 | # CONFIG_BNX2 is not set | 803 | # CONFIG_BNX2 is not set |
| 733 | CONFIG_SPIDER_NET=y | 804 | CONFIG_SPIDER_NET=y |
| 734 | # CONFIG_QLA3XXX is not set | 805 | # CONFIG_QLA3XXX is not set |
| 806 | # CONFIG_ATL1 is not set | ||
| 735 | 807 | ||
| 736 | # | 808 | # |
| 737 | # Ethernet (10000 Mbit) | 809 | # Ethernet (10000 Mbit) |
| 738 | # | 810 | # |
| 739 | # CONFIG_CHELSIO_T1 is not set | 811 | # CONFIG_CHELSIO_T1 is not set |
| 812 | # CONFIG_CHELSIO_T3 is not set | ||
| 740 | # CONFIG_IXGB is not set | 813 | # CONFIG_IXGB is not set |
| 741 | # CONFIG_S2IO is not set | 814 | # CONFIG_S2IO is not set |
| 742 | # CONFIG_MYRI10GE is not set | 815 | # CONFIG_MYRI10GE is not set |
| 743 | # CONFIG_NETXEN_NIC is not set | 816 | # CONFIG_NETXEN_NIC is not set |
| 817 | # CONFIG_PASEMI_MAC is not set | ||
| 744 | 818 | ||
| 745 | # | 819 | # |
| 746 | # Token Ring devices | 820 | # Token Ring devices |
| @@ -853,16 +927,27 @@ CONFIG_SERIAL_8250_RUNTIME_UARTS=4 | |||
| 853 | # | 927 | # |
| 854 | CONFIG_SERIAL_CORE=y | 928 | CONFIG_SERIAL_CORE=y |
| 855 | CONFIG_SERIAL_CORE_CONSOLE=y | 929 | CONFIG_SERIAL_CORE_CONSOLE=y |
| 930 | CONFIG_SERIAL_TXX9=y | ||
| 931 | CONFIG_HAS_TXX9_SERIAL=y | ||
| 932 | CONFIG_SERIAL_TXX9_NR_UARTS=2 | ||
| 933 | CONFIG_SERIAL_TXX9_CONSOLE=y | ||
| 856 | # CONFIG_SERIAL_JSM is not set | 934 | # CONFIG_SERIAL_JSM is not set |
| 935 | CONFIG_SERIAL_OF_PLATFORM=y | ||
| 857 | CONFIG_UNIX98_PTYS=y | 936 | CONFIG_UNIX98_PTYS=y |
| 858 | # CONFIG_LEGACY_PTYS is not set | 937 | # CONFIG_LEGACY_PTYS is not set |
| 859 | CONFIG_HVC_DRIVER=y | 938 | CONFIG_HVC_DRIVER=y |
| 860 | CONFIG_HVC_RTAS=y | 939 | CONFIG_HVC_RTAS=y |
| 940 | # CONFIG_HVC_BEAT is not set | ||
| 861 | 941 | ||
| 862 | # | 942 | # |
| 863 | # IPMI | 943 | # IPMI |
| 864 | # | 944 | # |
| 865 | # CONFIG_IPMI_HANDLER is not set | 945 | CONFIG_IPMI_HANDLER=m |
| 946 | # CONFIG_IPMI_PANIC_EVENT is not set | ||
| 947 | CONFIG_IPMI_DEVICE_INTERFACE=m | ||
| 948 | CONFIG_IPMI_SI=m | ||
| 949 | CONFIG_IPMI_WATCHDOG=m | ||
| 950 | CONFIG_IPMI_POWEROFF=m | ||
| 866 | 951 | ||
| 867 | # | 952 | # |
| 868 | # Watchdog Cards | 953 | # Watchdog Cards |
| @@ -874,7 +959,7 @@ CONFIG_WATCHDOG=y | |||
| 874 | # Watchdog Device Drivers | 959 | # Watchdog Device Drivers |
| 875 | # | 960 | # |
| 876 | # CONFIG_SOFT_WATCHDOG is not set | 961 | # CONFIG_SOFT_WATCHDOG is not set |
| 877 | CONFIG_WATCHDOG_RTAS=y | 962 | # CONFIG_WATCHDOG_RTAS is not set |
| 878 | 963 | ||
| 879 | # | 964 | # |
| 880 | # PCI-based Watchdog Cards | 965 | # PCI-based Watchdog Cards |
| @@ -929,6 +1014,7 @@ CONFIG_I2C_ALGOBIT=y | |||
| 929 | # CONFIG_I2C_NFORCE2 is not set | 1014 | # CONFIG_I2C_NFORCE2 is not set |
| 930 | # CONFIG_I2C_OCORES is not set | 1015 | # CONFIG_I2C_OCORES is not set |
| 931 | # CONFIG_I2C_PARPORT_LIGHT is not set | 1016 | # CONFIG_I2C_PARPORT_LIGHT is not set |
| 1017 | # CONFIG_I2C_PASEMI is not set | ||
| 932 | # CONFIG_I2C_PROSAVAGE is not set | 1018 | # CONFIG_I2C_PROSAVAGE is not set |
| 933 | # CONFIG_I2C_SAVAGE4 is not set | 1019 | # CONFIG_I2C_SAVAGE4 is not set |
| 934 | # CONFIG_I2C_SIS5595 is not set | 1020 | # CONFIG_I2C_SIS5595 is not set |
| @@ -973,6 +1059,11 @@ CONFIG_I2C_ALGOBIT=y | |||
| 973 | # CONFIG_HWMON_VID is not set | 1059 | # CONFIG_HWMON_VID is not set |
| 974 | 1060 | ||
| 975 | # | 1061 | # |
| 1062 | # Multifunction device drivers | ||
| 1063 | # | ||
| 1064 | # CONFIG_MFD_SM501 is not set | ||
| 1065 | |||
| 1066 | # | ||
| 976 | # Multimedia devices | 1067 | # Multimedia devices |
| 977 | # | 1068 | # |
| 978 | # CONFIG_VIDEO_DEV is not set | 1069 | # CONFIG_VIDEO_DEV is not set |
| @@ -986,7 +1077,7 @@ CONFIG_I2C_ALGOBIT=y | |||
| 986 | # | 1077 | # |
| 987 | # Graphics support | 1078 | # Graphics support |
| 988 | # | 1079 | # |
| 989 | CONFIG_FIRMWARE_EDID=y | 1080 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set |
| 990 | # CONFIG_FB is not set | 1081 | # CONFIG_FB is not set |
| 991 | # CONFIG_FB_IBM_GXT4500 is not set | 1082 | # CONFIG_FB_IBM_GXT4500 is not set |
| 992 | 1083 | ||
| @@ -995,7 +1086,6 @@ CONFIG_FIRMWARE_EDID=y | |||
| 995 | # | 1086 | # |
| 996 | # CONFIG_VGA_CONSOLE is not set | 1087 | # CONFIG_VGA_CONSOLE is not set |
| 997 | CONFIG_DUMMY_CONSOLE=y | 1088 | CONFIG_DUMMY_CONSOLE=y |
| 998 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
| 999 | 1089 | ||
| 1000 | # | 1090 | # |
| 1001 | # Sound | 1091 | # Sound |
| @@ -1006,6 +1096,7 @@ CONFIG_DUMMY_CONSOLE=y | |||
| 1006 | # HID Devices | 1096 | # HID Devices |
| 1007 | # | 1097 | # |
| 1008 | CONFIG_HID=m | 1098 | CONFIG_HID=m |
| 1099 | # CONFIG_HID_DEBUG is not set | ||
| 1009 | 1100 | ||
| 1010 | # | 1101 | # |
| 1011 | # USB support | 1102 | # USB support |
| @@ -1020,9 +1111,7 @@ CONFIG_USB=m | |||
| 1020 | # Miscellaneous USB options | 1111 | # Miscellaneous USB options |
| 1021 | # | 1112 | # |
| 1022 | CONFIG_USB_DEVICEFS=y | 1113 | CONFIG_USB_DEVICEFS=y |
| 1023 | # CONFIG_USB_BANDWIDTH is not set | ||
| 1024 | # CONFIG_USB_DYNAMIC_MINORS is not set | 1114 | # CONFIG_USB_DYNAMIC_MINORS is not set |
| 1025 | # CONFIG_USB_MULTITHREAD_PROBE is not set | ||
| 1026 | # CONFIG_USB_OTG is not set | 1115 | # CONFIG_USB_OTG is not set |
| 1027 | 1116 | ||
| 1028 | # | 1117 | # |
| @@ -1032,9 +1121,15 @@ CONFIG_USB_EHCI_HCD=m | |||
| 1032 | # CONFIG_USB_EHCI_SPLIT_ISO is not set | 1121 | # CONFIG_USB_EHCI_SPLIT_ISO is not set |
| 1033 | # CONFIG_USB_EHCI_ROOT_HUB_TT is not set | 1122 | # CONFIG_USB_EHCI_ROOT_HUB_TT is not set |
| 1034 | # CONFIG_USB_EHCI_TT_NEWSCHED is not set | 1123 | # CONFIG_USB_EHCI_TT_NEWSCHED is not set |
| 1124 | CONFIG_USB_EHCI_BIG_ENDIAN_MMIO=y | ||
| 1035 | # CONFIG_USB_ISP116X_HCD is not set | 1125 | # CONFIG_USB_ISP116X_HCD is not set |
| 1036 | CONFIG_USB_OHCI_HCD=m | 1126 | CONFIG_USB_OHCI_HCD=m |
| 1037 | # CONFIG_USB_OHCI_BIG_ENDIAN is not set | 1127 | CONFIG_USB_OHCI_HCD_PPC_OF=y |
| 1128 | CONFIG_USB_OHCI_HCD_PPC_OF_BE=y | ||
| 1129 | # CONFIG_USB_OHCI_HCD_PPC_OF_LE is not set | ||
| 1130 | CONFIG_USB_OHCI_HCD_PCI=y | ||
| 1131 | CONFIG_USB_OHCI_BIG_ENDIAN_DESC=y | ||
| 1132 | CONFIG_USB_OHCI_BIG_ENDIAN_MMIO=y | ||
| 1038 | CONFIG_USB_OHCI_LITTLE_ENDIAN=y | 1133 | CONFIG_USB_OHCI_LITTLE_ENDIAN=y |
| 1039 | # CONFIG_USB_UHCI_HCD is not set | 1134 | # CONFIG_USB_UHCI_HCD is not set |
| 1040 | # CONFIG_USB_SL811_HCD is not set | 1135 | # CONFIG_USB_SL811_HCD is not set |
| @@ -1088,6 +1183,7 @@ CONFIG_USB_STORAGE=m | |||
| 1088 | # CONFIG_USB_ATI_REMOTE2 is not set | 1183 | # CONFIG_USB_ATI_REMOTE2 is not set |
| 1089 | # CONFIG_USB_KEYSPAN_REMOTE is not set | 1184 | # CONFIG_USB_KEYSPAN_REMOTE is not set |
| 1090 | # CONFIG_USB_APPLETOUCH is not set | 1185 | # CONFIG_USB_APPLETOUCH is not set |
| 1186 | # CONFIG_USB_GTCO is not set | ||
| 1091 | 1187 | ||
| 1092 | # | 1188 | # |
| 1093 | # USB Imaging devices | 1189 | # USB Imaging devices |
| @@ -1125,6 +1221,7 @@ CONFIG_USB_MON=y | |||
| 1125 | # CONFIG_USB_RIO500 is not set | 1221 | # CONFIG_USB_RIO500 is not set |
| 1126 | # CONFIG_USB_LEGOTOWER is not set | 1222 | # CONFIG_USB_LEGOTOWER is not set |
| 1127 | # CONFIG_USB_LCD is not set | 1223 | # CONFIG_USB_LCD is not set |
| 1224 | # CONFIG_USB_BERRY_CHARGE is not set | ||
| 1128 | # CONFIG_USB_LED is not set | 1225 | # CONFIG_USB_LED is not set |
| 1129 | # CONFIG_USB_CYPRESS_CY7C63 is not set | 1226 | # CONFIG_USB_CYPRESS_CY7C63 is not set |
| 1130 | # CONFIG_USB_CYTHERM is not set | 1227 | # CONFIG_USB_CYTHERM is not set |
| @@ -1135,6 +1232,7 @@ CONFIG_USB_MON=y | |||
| 1135 | # CONFIG_USB_SISUSBVGA is not set | 1232 | # CONFIG_USB_SISUSBVGA is not set |
| 1136 | # CONFIG_USB_LD is not set | 1233 | # CONFIG_USB_LD is not set |
| 1137 | # CONFIG_USB_TRANCEVIBRATOR is not set | 1234 | # CONFIG_USB_TRANCEVIBRATOR is not set |
| 1235 | # CONFIG_USB_IOWARRIOR is not set | ||
| 1138 | # CONFIG_USB_TEST is not set | 1236 | # CONFIG_USB_TEST is not set |
| 1139 | 1237 | ||
| 1140 | # | 1238 | # |
| @@ -1175,6 +1273,7 @@ CONFIG_INFINIBAND_MTHCA=m | |||
| 1175 | CONFIG_INFINIBAND_MTHCA_DEBUG=y | 1273 | CONFIG_INFINIBAND_MTHCA_DEBUG=y |
| 1176 | # CONFIG_INFINIBAND_AMSO1100 is not set | 1274 | # CONFIG_INFINIBAND_AMSO1100 is not set |
| 1177 | CONFIG_INFINIBAND_IPOIB=m | 1275 | CONFIG_INFINIBAND_IPOIB=m |
| 1276 | # CONFIG_INFINIBAND_IPOIB_CM is not set | ||
| 1178 | CONFIG_INFINIBAND_IPOIB_DEBUG=y | 1277 | CONFIG_INFINIBAND_IPOIB_DEBUG=y |
| 1179 | CONFIG_INFINIBAND_IPOIB_DEBUG_DATA=y | 1278 | CONFIG_INFINIBAND_IPOIB_DEBUG_DATA=y |
| 1180 | # CONFIG_INFINIBAND_SRP is not set | 1279 | # CONFIG_INFINIBAND_SRP is not set |
| @@ -1203,6 +1302,10 @@ CONFIG_INFINIBAND_IPOIB_DEBUG_DATA=y | |||
| 1203 | # | 1302 | # |
| 1204 | 1303 | ||
| 1205 | # | 1304 | # |
| 1305 | # Auxiliary Display support | ||
| 1306 | # | ||
| 1307 | |||
| 1308 | # | ||
| 1206 | # Virtualization | 1309 | # Virtualization |
| 1207 | # | 1310 | # |
| 1208 | 1311 | ||
| @@ -1395,7 +1498,8 @@ CONFIG_TEXTSEARCH_KMP=m | |||
| 1395 | CONFIG_TEXTSEARCH_BM=m | 1498 | CONFIG_TEXTSEARCH_BM=m |
| 1396 | CONFIG_TEXTSEARCH_FSM=m | 1499 | CONFIG_TEXTSEARCH_FSM=m |
| 1397 | CONFIG_PLIST=y | 1500 | CONFIG_PLIST=y |
| 1398 | CONFIG_IOMAP_COPY=y | 1501 | CONFIG_HAS_IOMEM=y |
| 1502 | CONFIG_HAS_IOPORT=y | ||
| 1399 | 1503 | ||
| 1400 | # | 1504 | # |
| 1401 | # Instrumentation Support | 1505 | # Instrumentation Support |
| @@ -1414,15 +1518,16 @@ CONFIG_MAGIC_SYSRQ=y | |||
| 1414 | CONFIG_DEBUG_FS=y | 1518 | CONFIG_DEBUG_FS=y |
| 1415 | # CONFIG_HEADERS_CHECK is not set | 1519 | # CONFIG_HEADERS_CHECK is not set |
| 1416 | CONFIG_DEBUG_KERNEL=y | 1520 | CONFIG_DEBUG_KERNEL=y |
| 1521 | # CONFIG_DEBUG_SHIRQ is not set | ||
| 1417 | CONFIG_LOG_BUF_SHIFT=15 | 1522 | CONFIG_LOG_BUF_SHIFT=15 |
| 1418 | CONFIG_DETECT_SOFTLOCKUP=y | 1523 | # CONFIG_DETECT_SOFTLOCKUP is not set |
| 1419 | # CONFIG_SCHEDSTATS is not set | 1524 | # CONFIG_SCHEDSTATS is not set |
| 1525 | # CONFIG_TIMER_STATS is not set | ||
| 1420 | # CONFIG_DEBUG_SLAB is not set | 1526 | # CONFIG_DEBUG_SLAB is not set |
| 1421 | # CONFIG_DEBUG_RT_MUTEXES is not set | 1527 | # CONFIG_DEBUG_RT_MUTEXES is not set |
| 1422 | # CONFIG_RT_MUTEX_TESTER is not set | 1528 | # CONFIG_RT_MUTEX_TESTER is not set |
| 1423 | # CONFIG_DEBUG_SPINLOCK is not set | 1529 | # CONFIG_DEBUG_SPINLOCK is not set |
| 1424 | CONFIG_DEBUG_MUTEXES=y | 1530 | CONFIG_DEBUG_MUTEXES=y |
| 1425 | # CONFIG_DEBUG_RWSEMS is not set | ||
| 1426 | CONFIG_DEBUG_SPINLOCK_SLEEP=y | 1531 | CONFIG_DEBUG_SPINLOCK_SLEEP=y |
| 1427 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | 1532 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set |
| 1428 | # CONFIG_DEBUG_KOBJECT is not set | 1533 | # CONFIG_DEBUG_KOBJECT is not set |
| @@ -1432,6 +1537,7 @@ CONFIG_DEBUG_BUGVERBOSE=y | |||
| 1432 | # CONFIG_DEBUG_LIST is not set | 1537 | # CONFIG_DEBUG_LIST is not set |
| 1433 | # CONFIG_FORCED_INLINING is not set | 1538 | # CONFIG_FORCED_INLINING is not set |
| 1434 | # CONFIG_RCU_TORTURE_TEST is not set | 1539 | # CONFIG_RCU_TORTURE_TEST is not set |
| 1540 | # CONFIG_FAULT_INJECTION is not set | ||
| 1435 | # CONFIG_DEBUG_STACKOVERFLOW is not set | 1541 | # CONFIG_DEBUG_STACKOVERFLOW is not set |
| 1436 | # CONFIG_DEBUG_STACK_USAGE is not set | 1542 | # CONFIG_DEBUG_STACK_USAGE is not set |
| 1437 | CONFIG_DEBUGGER=y | 1543 | CONFIG_DEBUGGER=y |
| @@ -1469,8 +1575,10 @@ CONFIG_CRYPTO_SHA1=m | |||
| 1469 | # CONFIG_CRYPTO_GF128MUL is not set | 1575 | # CONFIG_CRYPTO_GF128MUL is not set |
| 1470 | CONFIG_CRYPTO_ECB=m | 1576 | CONFIG_CRYPTO_ECB=m |
| 1471 | CONFIG_CRYPTO_CBC=m | 1577 | CONFIG_CRYPTO_CBC=m |
| 1578 | CONFIG_CRYPTO_PCBC=m | ||
| 1472 | # CONFIG_CRYPTO_LRW is not set | 1579 | # CONFIG_CRYPTO_LRW is not set |
| 1473 | CONFIG_CRYPTO_DES=m | 1580 | CONFIG_CRYPTO_DES=m |
| 1581 | # CONFIG_CRYPTO_FCRYPT is not set | ||
| 1474 | # CONFIG_CRYPTO_BLOWFISH is not set | 1582 | # CONFIG_CRYPTO_BLOWFISH is not set |
| 1475 | # CONFIG_CRYPTO_TWOFISH is not set | 1583 | # CONFIG_CRYPTO_TWOFISH is not set |
| 1476 | # CONFIG_CRYPTO_SERPENT is not set | 1584 | # CONFIG_CRYPTO_SERPENT is not set |
| @@ -1484,6 +1592,7 @@ CONFIG_CRYPTO_DES=m | |||
| 1484 | CONFIG_CRYPTO_DEFLATE=m | 1592 | CONFIG_CRYPTO_DEFLATE=m |
| 1485 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | 1593 | # CONFIG_CRYPTO_MICHAEL_MIC is not set |
| 1486 | # CONFIG_CRYPTO_CRC32C is not set | 1594 | # CONFIG_CRYPTO_CRC32C is not set |
| 1595 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
| 1487 | # CONFIG_CRYPTO_TEST is not set | 1596 | # CONFIG_CRYPTO_TEST is not set |
| 1488 | 1597 | ||
| 1489 | # | 1598 | # |
diff --git a/arch/powerpc/mm/hash_utils_64.c b/arch/powerpc/mm/hash_utils_64.c index c0d2a694fa30..3c7fe2c65b5a 100644 --- a/arch/powerpc/mm/hash_utils_64.c +++ b/arch/powerpc/mm/hash_utils_64.c | |||
| @@ -685,6 +685,9 @@ int hash_page(unsigned long ea, unsigned long access, unsigned long trap) | |||
| 685 | "non-cacheable mapping\n"); | 685 | "non-cacheable mapping\n"); |
| 686 | psize = mmu_vmalloc_psize = MMU_PAGE_4K; | 686 | psize = mmu_vmalloc_psize = MMU_PAGE_4K; |
| 687 | } | 687 | } |
| 688 | #ifdef CONFIG_SPE_BASE | ||
| 689 | spu_flush_all_slbs(mm); | ||
| 690 | #endif | ||
| 688 | } | 691 | } |
| 689 | if (user_region) { | 692 | if (user_region) { |
| 690 | if (psize != get_paca()->context.user_psize) { | 693 | if (psize != get_paca()->context.user_psize) { |
| @@ -759,6 +762,9 @@ void hash_preload(struct mm_struct *mm, unsigned long ea, | |||
| 759 | mmu_psize_defs[MMU_PAGE_4K].sllp; | 762 | mmu_psize_defs[MMU_PAGE_4K].sllp; |
| 760 | get_paca()->context = mm->context; | 763 | get_paca()->context = mm->context; |
| 761 | slb_flush_and_rebolt(); | 764 | slb_flush_and_rebolt(); |
| 765 | #ifdef CONFIG_SPE_BASE | ||
| 766 | spu_flush_all_slbs(mm); | ||
| 767 | #endif | ||
| 762 | } | 768 | } |
| 763 | } | 769 | } |
| 764 | if (mm->context.user_psize == MMU_PAGE_64K) | 770 | if (mm->context.user_psize == MMU_PAGE_64K) |
diff --git a/arch/powerpc/mm/hugetlbpage.c b/arch/powerpc/mm/hugetlbpage.c index 8c77c791f87e..f6ffaaa7a5bf 100644 --- a/arch/powerpc/mm/hugetlbpage.c +++ b/arch/powerpc/mm/hugetlbpage.c | |||
| @@ -24,6 +24,7 @@ | |||
| 24 | #include <asm/machdep.h> | 24 | #include <asm/machdep.h> |
| 25 | #include <asm/cputable.h> | 25 | #include <asm/cputable.h> |
| 26 | #include <asm/tlb.h> | 26 | #include <asm/tlb.h> |
| 27 | #include <asm/spu.h> | ||
| 27 | 28 | ||
| 28 | #include <linux/sysctl.h> | 29 | #include <linux/sysctl.h> |
| 29 | 30 | ||
| @@ -513,6 +514,9 @@ int prepare_hugepage_range(unsigned long addr, unsigned long len, pgoff_t pgoff) | |||
| 513 | if ((addr + len) > 0x100000000UL) | 514 | if ((addr + len) > 0x100000000UL) |
| 514 | err = open_high_hpage_areas(current->mm, | 515 | err = open_high_hpage_areas(current->mm, |
| 515 | HTLB_AREA_MASK(addr, len)); | 516 | HTLB_AREA_MASK(addr, len)); |
| 517 | #ifdef CONFIG_SPE_BASE | ||
| 518 | spu_flush_all_slbs(current->mm); | ||
| 519 | #endif | ||
| 516 | if (err) { | 520 | if (err) { |
| 517 | printk(KERN_DEBUG "prepare_hugepage_range(%lx, %lx)" | 521 | printk(KERN_DEBUG "prepare_hugepage_range(%lx, %lx)" |
| 518 | " failed (lowmask: 0x%04hx, highmask: 0x%04hx)\n", | 522 | " failed (lowmask: 0x%04hx, highmask: 0x%04hx)\n", |
diff --git a/arch/powerpc/platforms/cell/spu_base.c b/arch/powerpc/platforms/cell/spu_base.c index c43999a10deb..eba7a2641dce 100644 --- a/arch/powerpc/platforms/cell/spu_base.c +++ b/arch/powerpc/platforms/cell/spu_base.c | |||
| @@ -38,8 +38,61 @@ | |||
| 38 | const struct spu_management_ops *spu_management_ops; | 38 | const struct spu_management_ops *spu_management_ops; |
| 39 | const struct spu_priv1_ops *spu_priv1_ops; | 39 | const struct spu_priv1_ops *spu_priv1_ops; |
| 40 | 40 | ||
| 41 | static struct list_head spu_list[MAX_NUMNODES]; | ||
| 42 | static LIST_HEAD(spu_full_list); | ||
| 43 | static DEFINE_MUTEX(spu_mutex); | ||
| 44 | static spinlock_t spu_list_lock = SPIN_LOCK_UNLOCKED; | ||
| 45 | |||
| 41 | EXPORT_SYMBOL_GPL(spu_priv1_ops); | 46 | EXPORT_SYMBOL_GPL(spu_priv1_ops); |
| 42 | 47 | ||
| 48 | void spu_invalidate_slbs(struct spu *spu) | ||
| 49 | { | ||
| 50 | struct spu_priv2 __iomem *priv2 = spu->priv2; | ||
| 51 | |||
| 52 | if (spu_mfc_sr1_get(spu) & MFC_STATE1_RELOCATE_MASK) | ||
| 53 | out_be64(&priv2->slb_invalidate_all_W, 0UL); | ||
| 54 | } | ||
| 55 | EXPORT_SYMBOL_GPL(spu_invalidate_slbs); | ||
| 56 | |||
| 57 | /* This is called by the MM core when a segment size is changed, to | ||
| 58 | * request a flush of all the SPEs using a given mm | ||
| 59 | */ | ||
| 60 | void spu_flush_all_slbs(struct mm_struct *mm) | ||
| 61 | { | ||
| 62 | struct spu *spu; | ||
| 63 | unsigned long flags; | ||
| 64 | |||
| 65 | spin_lock_irqsave(&spu_list_lock, flags); | ||
| 66 | list_for_each_entry(spu, &spu_full_list, full_list) { | ||
| 67 | if (spu->mm == mm) | ||
| 68 | spu_invalidate_slbs(spu); | ||
| 69 | } | ||
| 70 | spin_unlock_irqrestore(&spu_list_lock, flags); | ||
| 71 | } | ||
| 72 | |||
| 73 | /* The hack below stinks... try to do something better one of | ||
| 74 | * these days... Does it even work properly with NR_CPUS == 1 ? | ||
| 75 | */ | ||
| 76 | static inline void mm_needs_global_tlbie(struct mm_struct *mm) | ||
| 77 | { | ||
| 78 | int nr = (NR_CPUS > 1) ? NR_CPUS : NR_CPUS + 1; | ||
| 79 | |||
| 80 | /* Global TLBIE broadcast required with SPEs. */ | ||
| 81 | __cpus_setall(&mm->cpu_vm_mask, nr); | ||
| 82 | } | ||
| 83 | |||
| 84 | void spu_associate_mm(struct spu *spu, struct mm_struct *mm) | ||
| 85 | { | ||
| 86 | unsigned long flags; | ||
| 87 | |||
| 88 | spin_lock_irqsave(&spu_list_lock, flags); | ||
| 89 | spu->mm = mm; | ||
| 90 | spin_unlock_irqrestore(&spu_list_lock, flags); | ||
| 91 | if (mm) | ||
| 92 | mm_needs_global_tlbie(mm); | ||
| 93 | } | ||
| 94 | EXPORT_SYMBOL_GPL(spu_associate_mm); | ||
| 95 | |||
| 43 | static int __spu_trap_invalid_dma(struct spu *spu) | 96 | static int __spu_trap_invalid_dma(struct spu *spu) |
| 44 | { | 97 | { |
| 45 | pr_debug("%s\n", __FUNCTION__); | 98 | pr_debug("%s\n", __FUNCTION__); |
| @@ -74,6 +127,7 @@ static int __spu_trap_data_seg(struct spu *spu, unsigned long ea) | |||
| 74 | struct spu_priv2 __iomem *priv2 = spu->priv2; | 127 | struct spu_priv2 __iomem *priv2 = spu->priv2; |
| 75 | struct mm_struct *mm = spu->mm; | 128 | struct mm_struct *mm = spu->mm; |
| 76 | u64 esid, vsid, llp; | 129 | u64 esid, vsid, llp; |
| 130 | int psize; | ||
| 77 | 131 | ||
| 78 | pr_debug("%s\n", __FUNCTION__); | 132 | pr_debug("%s\n", __FUNCTION__); |
| 79 | 133 | ||
| @@ -90,22 +144,25 @@ static int __spu_trap_data_seg(struct spu *spu, unsigned long ea) | |||
| 90 | case USER_REGION_ID: | 144 | case USER_REGION_ID: |
| 91 | #ifdef CONFIG_HUGETLB_PAGE | 145 | #ifdef CONFIG_HUGETLB_PAGE |
| 92 | if (in_hugepage_area(mm->context, ea)) | 146 | if (in_hugepage_area(mm->context, ea)) |
| 93 | llp = mmu_psize_defs[mmu_huge_psize].sllp; | 147 | psize = mmu_huge_psize; |
| 94 | else | 148 | else |
| 95 | #endif | 149 | #endif |
| 96 | llp = mmu_psize_defs[mmu_virtual_psize].sllp; | 150 | psize = mm->context.user_psize; |
| 97 | vsid = (get_vsid(mm->context.id, ea) << SLB_VSID_SHIFT) | | 151 | vsid = (get_vsid(mm->context.id, ea) << SLB_VSID_SHIFT) | |
| 98 | SLB_VSID_USER | llp; | 152 | SLB_VSID_USER; |
| 99 | break; | 153 | break; |
| 100 | case VMALLOC_REGION_ID: | 154 | case VMALLOC_REGION_ID: |
| 101 | llp = mmu_psize_defs[mmu_virtual_psize].sllp; | 155 | if (ea < VMALLOC_END) |
| 156 | psize = mmu_vmalloc_psize; | ||
| 157 | else | ||
| 158 | psize = mmu_io_psize; | ||
| 102 | vsid = (get_kernel_vsid(ea) << SLB_VSID_SHIFT) | | 159 | vsid = (get_kernel_vsid(ea) << SLB_VSID_SHIFT) | |
| 103 | SLB_VSID_KERNEL | llp; | 160 | SLB_VSID_KERNEL; |
| 104 | break; | 161 | break; |
| 105 | case KERNEL_REGION_ID: | 162 | case KERNEL_REGION_ID: |
| 106 | llp = mmu_psize_defs[mmu_linear_psize].sllp; | 163 | psize = mmu_linear_psize; |
| 107 | vsid = (get_kernel_vsid(ea) << SLB_VSID_SHIFT) | | 164 | vsid = (get_kernel_vsid(ea) << SLB_VSID_SHIFT) | |
| 108 | SLB_VSID_KERNEL | llp; | 165 | SLB_VSID_KERNEL; |
| 109 | break; | 166 | break; |
| 110 | default: | 167 | default: |
| 111 | /* Future: support kernel segments so that drivers | 168 | /* Future: support kernel segments so that drivers |
| @@ -114,9 +171,10 @@ static int __spu_trap_data_seg(struct spu *spu, unsigned long ea) | |||
| 114 | pr_debug("invalid region access at %016lx\n", ea); | 171 | pr_debug("invalid region access at %016lx\n", ea); |
| 115 | return 1; | 172 | return 1; |
| 116 | } | 173 | } |
| 174 | llp = mmu_psize_defs[psize].sllp; | ||
| 117 | 175 | ||
| 118 | out_be64(&priv2->slb_index_W, spu->slb_replace); | 176 | out_be64(&priv2->slb_index_W, spu->slb_replace); |
| 119 | out_be64(&priv2->slb_vsid_RW, vsid); | 177 | out_be64(&priv2->slb_vsid_RW, vsid | llp); |
| 120 | out_be64(&priv2->slb_esid_RW, esid); | 178 | out_be64(&priv2->slb_esid_RW, esid); |
| 121 | 179 | ||
| 122 | spu->slb_replace++; | 180 | spu->slb_replace++; |
| @@ -330,10 +388,6 @@ static void spu_free_irqs(struct spu *spu) | |||
| 330 | free_irq(spu->irqs[2], spu); | 388 | free_irq(spu->irqs[2], spu); |
| 331 | } | 389 | } |
| 332 | 390 | ||
| 333 | static struct list_head spu_list[MAX_NUMNODES]; | ||
| 334 | static LIST_HEAD(spu_full_list); | ||
| 335 | static DEFINE_MUTEX(spu_mutex); | ||
| 336 | |||
| 337 | static void spu_init_channels(struct spu *spu) | 391 | static void spu_init_channels(struct spu *spu) |
| 338 | { | 392 | { |
| 339 | static const struct { | 393 | static const struct { |
| @@ -593,6 +647,7 @@ static int __init create_spu(void *data) | |||
| 593 | struct spu *spu; | 647 | struct spu *spu; |
| 594 | int ret; | 648 | int ret; |
| 595 | static int number; | 649 | static int number; |
| 650 | unsigned long flags; | ||
| 596 | 651 | ||
| 597 | ret = -ENOMEM; | 652 | ret = -ENOMEM; |
| 598 | spu = kzalloc(sizeof (*spu), GFP_KERNEL); | 653 | spu = kzalloc(sizeof (*spu), GFP_KERNEL); |
| @@ -620,8 +675,10 @@ static int __init create_spu(void *data) | |||
| 620 | goto out_free_irqs; | 675 | goto out_free_irqs; |
| 621 | 676 | ||
| 622 | mutex_lock(&spu_mutex); | 677 | mutex_lock(&spu_mutex); |
| 678 | spin_lock_irqsave(&spu_list_lock, flags); | ||
| 623 | list_add(&spu->list, &spu_list[spu->node]); | 679 | list_add(&spu->list, &spu_list[spu->node]); |
| 624 | list_add(&spu->full_list, &spu_full_list); | 680 | list_add(&spu->full_list, &spu_full_list); |
| 681 | spin_unlock_irqrestore(&spu_list_lock, flags); | ||
| 625 | mutex_unlock(&spu_mutex); | 682 | mutex_unlock(&spu_mutex); |
| 626 | 683 | ||
| 627 | goto out; | 684 | goto out; |
diff --git a/arch/powerpc/platforms/cell/spufs/file.c b/arch/powerpc/platforms/cell/spufs/file.c index b00653d69c01..505266a568d4 100644 --- a/arch/powerpc/platforms/cell/spufs/file.c +++ b/arch/powerpc/platforms/cell/spufs/file.c | |||
| @@ -63,8 +63,8 @@ static ssize_t | |||
| 63 | spufs_mem_read(struct file *file, char __user *buffer, | 63 | spufs_mem_read(struct file *file, char __user *buffer, |
| 64 | size_t size, loff_t *pos) | 64 | size_t size, loff_t *pos) |
| 65 | { | 65 | { |
| 66 | int ret; | ||
| 67 | struct spu_context *ctx = file->private_data; | 66 | struct spu_context *ctx = file->private_data; |
| 67 | ssize_t ret; | ||
| 68 | 68 | ||
| 69 | spu_acquire(ctx); | 69 | spu_acquire(ctx); |
| 70 | ret = __spufs_mem_read(ctx, buffer, size, pos); | 70 | ret = __spufs_mem_read(ctx, buffer, size, pos); |
| @@ -74,25 +74,29 @@ spufs_mem_read(struct file *file, char __user *buffer, | |||
| 74 | 74 | ||
| 75 | static ssize_t | 75 | static ssize_t |
| 76 | spufs_mem_write(struct file *file, const char __user *buffer, | 76 | spufs_mem_write(struct file *file, const char __user *buffer, |
| 77 | size_t size, loff_t *pos) | 77 | size_t size, loff_t *ppos) |
| 78 | { | 78 | { |
| 79 | struct spu_context *ctx = file->private_data; | 79 | struct spu_context *ctx = file->private_data; |
| 80 | char *local_store; | 80 | char *local_store; |
| 81 | loff_t pos = *ppos; | ||
| 81 | int ret; | 82 | int ret; |
| 82 | 83 | ||
| 83 | size = min_t(ssize_t, LS_SIZE - *pos, size); | 84 | if (pos < 0) |
| 84 | if (size <= 0) | 85 | return -EINVAL; |
| 86 | if (pos > LS_SIZE) | ||
| 85 | return -EFBIG; | 87 | return -EFBIG; |
| 86 | *pos += size; | 88 | if (size > LS_SIZE - pos) |
| 89 | size = LS_SIZE - pos; | ||
| 87 | 90 | ||
| 88 | spu_acquire(ctx); | 91 | spu_acquire(ctx); |
| 89 | |||
| 90 | local_store = ctx->ops->get_ls(ctx); | 92 | local_store = ctx->ops->get_ls(ctx); |
| 91 | ret = copy_from_user(local_store + *pos - size, | 93 | ret = copy_from_user(local_store + pos, buffer, size); |
| 92 | buffer, size) ? -EFAULT : size; | ||
| 93 | |||
| 94 | spu_release(ctx); | 94 | spu_release(ctx); |
| 95 | return ret; | 95 | |
| 96 | if (ret) | ||
| 97 | return -EFAULT; | ||
| 98 | *ppos = pos + size; | ||
| 99 | return size; | ||
| 96 | } | 100 | } |
| 97 | 101 | ||
| 98 | static unsigned long spufs_mem_mmap_nopfn(struct vm_area_struct *vma, | 102 | static unsigned long spufs_mem_mmap_nopfn(struct vm_area_struct *vma, |
diff --git a/arch/powerpc/platforms/cell/spufs/run.c b/arch/powerpc/platforms/cell/spufs/run.c index 353a8fa07ab8..f95a611ca362 100644 --- a/arch/powerpc/platforms/cell/spufs/run.c +++ b/arch/powerpc/platforms/cell/spufs/run.c | |||
| @@ -143,7 +143,7 @@ static inline int spu_run_init(struct spu_context *ctx, u32 * npc) | |||
| 143 | int ret; | 143 | int ret; |
| 144 | unsigned long runcntl = SPU_RUNCNTL_RUNNABLE; | 144 | unsigned long runcntl = SPU_RUNCNTL_RUNNABLE; |
| 145 | 145 | ||
| 146 | ret = spu_acquire_runnable(ctx, SPU_ACTIVATE_NOWAKE); | 146 | ret = spu_acquire_runnable(ctx, 0); |
| 147 | if (ret) | 147 | if (ret) |
| 148 | return ret; | 148 | return ret; |
| 149 | 149 | ||
| @@ -155,7 +155,7 @@ static inline int spu_run_init(struct spu_context *ctx, u32 * npc) | |||
| 155 | spu_release(ctx); | 155 | spu_release(ctx); |
| 156 | ret = spu_setup_isolated(ctx); | 156 | ret = spu_setup_isolated(ctx); |
| 157 | if (!ret) | 157 | if (!ret) |
| 158 | ret = spu_acquire_runnable(ctx, SPU_ACTIVATE_NOWAKE); | 158 | ret = spu_acquire_runnable(ctx, 0); |
| 159 | } | 159 | } |
| 160 | 160 | ||
| 161 | /* if userspace has set the runcntrl register (eg, to issue an | 161 | /* if userspace has set the runcntrl register (eg, to issue an |
diff --git a/arch/powerpc/platforms/cell/spufs/sched.c b/arch/powerpc/platforms/cell/spufs/sched.c index 2f25e68b4bac..39823cec0844 100644 --- a/arch/powerpc/platforms/cell/spufs/sched.c +++ b/arch/powerpc/platforms/cell/spufs/sched.c | |||
| @@ -127,14 +127,6 @@ static void spu_remove_from_active_list(struct spu *spu) | |||
| 127 | mutex_unlock(&spu_prio->active_mutex[node]); | 127 | mutex_unlock(&spu_prio->active_mutex[node]); |
| 128 | } | 128 | } |
| 129 | 129 | ||
| 130 | static inline void mm_needs_global_tlbie(struct mm_struct *mm) | ||
| 131 | { | ||
| 132 | int nr = (NR_CPUS > 1) ? NR_CPUS : NR_CPUS + 1; | ||
| 133 | |||
| 134 | /* Global TLBIE broadcast required with SPEs. */ | ||
| 135 | __cpus_setall(&mm->cpu_vm_mask, nr); | ||
| 136 | } | ||
| 137 | |||
| 138 | static BLOCKING_NOTIFIER_HEAD(spu_switch_notifier); | 130 | static BLOCKING_NOTIFIER_HEAD(spu_switch_notifier); |
| 139 | 131 | ||
| 140 | static void spu_switch_notify(struct spu *spu, struct spu_context *ctx) | 132 | static void spu_switch_notify(struct spu *spu, struct spu_context *ctx) |
| @@ -167,8 +159,7 @@ static void spu_bind_context(struct spu *spu, struct spu_context *ctx) | |||
| 167 | ctx->spu = spu; | 159 | ctx->spu = spu; |
| 168 | ctx->ops = &spu_hw_ops; | 160 | ctx->ops = &spu_hw_ops; |
| 169 | spu->pid = current->pid; | 161 | spu->pid = current->pid; |
| 170 | spu->mm = ctx->owner; | 162 | spu_associate_mm(spu, ctx->owner); |
| 171 | mm_needs_global_tlbie(spu->mm); | ||
| 172 | spu->ibox_callback = spufs_ibox_callback; | 163 | spu->ibox_callback = spufs_ibox_callback; |
| 173 | spu->wbox_callback = spufs_wbox_callback; | 164 | spu->wbox_callback = spufs_wbox_callback; |
| 174 | spu->stop_callback = spufs_stop_callback; | 165 | spu->stop_callback = spufs_stop_callback; |
| @@ -205,7 +196,7 @@ static void spu_unbind_context(struct spu *spu, struct spu_context *ctx) | |||
| 205 | spu->stop_callback = NULL; | 196 | spu->stop_callback = NULL; |
| 206 | spu->mfc_callback = NULL; | 197 | spu->mfc_callback = NULL; |
| 207 | spu->dma_callback = NULL; | 198 | spu->dma_callback = NULL; |
| 208 | spu->mm = NULL; | 199 | spu_associate_mm(spu, NULL); |
| 209 | spu->pid = 0; | 200 | spu->pid = 0; |
| 210 | ctx->ops = &spu_backing_ops; | 201 | ctx->ops = &spu_backing_ops; |
| 211 | ctx->spu = NULL; | 202 | ctx->spu = NULL; |
| @@ -263,7 +254,6 @@ static void spu_prio_wait(struct spu_context *ctx) | |||
| 263 | { | 254 | { |
| 264 | DEFINE_WAIT(wait); | 255 | DEFINE_WAIT(wait); |
| 265 | 256 | ||
| 266 | set_bit(SPU_SCHED_WAKE, &ctx->sched_flags); | ||
| 267 | prepare_to_wait_exclusive(&ctx->stop_wq, &wait, TASK_INTERRUPTIBLE); | 257 | prepare_to_wait_exclusive(&ctx->stop_wq, &wait, TASK_INTERRUPTIBLE); |
| 268 | if (!signal_pending(current)) { | 258 | if (!signal_pending(current)) { |
| 269 | mutex_unlock(&ctx->state_mutex); | 259 | mutex_unlock(&ctx->state_mutex); |
| @@ -272,7 +262,6 @@ static void spu_prio_wait(struct spu_context *ctx) | |||
| 272 | } | 262 | } |
| 273 | __set_current_state(TASK_RUNNING); | 263 | __set_current_state(TASK_RUNNING); |
| 274 | remove_wait_queue(&ctx->stop_wq, &wait); | 264 | remove_wait_queue(&ctx->stop_wq, &wait); |
| 275 | clear_bit(SPU_SCHED_WAKE, &ctx->sched_flags); | ||
| 276 | } | 265 | } |
| 277 | 266 | ||
| 278 | /** | 267 | /** |
| @@ -292,7 +281,7 @@ static void spu_reschedule(struct spu *spu) | |||
| 292 | best = sched_find_first_bit(spu_prio->bitmap); | 281 | best = sched_find_first_bit(spu_prio->bitmap); |
| 293 | if (best < MAX_PRIO) { | 282 | if (best < MAX_PRIO) { |
| 294 | struct spu_context *ctx = spu_grab_context(best); | 283 | struct spu_context *ctx = spu_grab_context(best); |
| 295 | if (ctx && test_bit(SPU_SCHED_WAKE, &ctx->sched_flags)) | 284 | if (ctx) |
| 296 | wake_up(&ctx->stop_wq); | 285 | wake_up(&ctx->stop_wq); |
| 297 | } | 286 | } |
| 298 | spin_unlock(&spu_prio->runq_lock); | 287 | spin_unlock(&spu_prio->runq_lock); |
| @@ -414,8 +403,7 @@ int spu_activate(struct spu_context *ctx, unsigned long flags) | |||
| 414 | } | 403 | } |
| 415 | 404 | ||
| 416 | spu_add_to_rq(ctx); | 405 | spu_add_to_rq(ctx); |
| 417 | if (!(flags & SPU_ACTIVATE_NOWAKE)) | 406 | spu_prio_wait(ctx); |
| 418 | spu_prio_wait(ctx); | ||
| 419 | spu_del_from_rq(ctx); | 407 | spu_del_from_rq(ctx); |
| 420 | } while (!signal_pending(current)); | 408 | } while (!signal_pending(current)); |
| 421 | 409 | ||
diff --git a/arch/powerpc/platforms/cell/spufs/spufs.h b/arch/powerpc/platforms/cell/spufs/spufs.h index 0c437891dfd5..5c4e47d69d79 100644 --- a/arch/powerpc/platforms/cell/spufs/spufs.h +++ b/arch/powerpc/platforms/cell/spufs/spufs.h | |||
| @@ -41,7 +41,7 @@ struct spu_gang; | |||
| 41 | 41 | ||
| 42 | /* ctx->sched_flags */ | 42 | /* ctx->sched_flags */ |
| 43 | enum { | 43 | enum { |
| 44 | SPU_SCHED_WAKE = 0, | 44 | SPU_SCHED_WAKE = 0, /* currently unused */ |
| 45 | }; | 45 | }; |
| 46 | 46 | ||
| 47 | struct spu_context { | 47 | struct spu_context { |
| @@ -191,9 +191,7 @@ void spu_forget(struct spu_context *ctx); | |||
| 191 | int spu_acquire_runnable(struct spu_context *ctx, unsigned long flags); | 191 | int spu_acquire_runnable(struct spu_context *ctx, unsigned long flags); |
| 192 | void spu_acquire_saved(struct spu_context *ctx); | 192 | void spu_acquire_saved(struct spu_context *ctx); |
| 193 | int spu_acquire_exclusive(struct spu_context *ctx); | 193 | int spu_acquire_exclusive(struct spu_context *ctx); |
| 194 | enum { | 194 | |
| 195 | SPU_ACTIVATE_NOWAKE = 1, | ||
| 196 | }; | ||
| 197 | int spu_activate(struct spu_context *ctx, unsigned long flags); | 195 | int spu_activate(struct spu_context *ctx, unsigned long flags); |
| 198 | void spu_deactivate(struct spu_context *ctx); | 196 | void spu_deactivate(struct spu_context *ctx); |
| 199 | void spu_yield(struct spu_context *ctx); | 197 | void spu_yield(struct spu_context *ctx); |
diff --git a/arch/powerpc/platforms/cell/spufs/switch.c b/arch/powerpc/platforms/cell/spufs/switch.c index c08981ff7fc6..fd91c73de34e 100644 --- a/arch/powerpc/platforms/cell/spufs/switch.c +++ b/arch/powerpc/platforms/cell/spufs/switch.c | |||
| @@ -468,26 +468,6 @@ static inline void wait_purge_complete(struct spu_state *csa, struct spu *spu) | |||
| 468 | MFC_CNTL_PURGE_DMA_COMPLETE); | 468 | MFC_CNTL_PURGE_DMA_COMPLETE); |
| 469 | } | 469 | } |
| 470 | 470 | ||
| 471 | static inline void save_mfc_slbs(struct spu_state *csa, struct spu *spu) | ||
| 472 | { | ||
| 473 | struct spu_priv2 __iomem *priv2 = spu->priv2; | ||
| 474 | int i; | ||
| 475 | |||
| 476 | /* Save, Step 29: | ||
| 477 | * If MFC_SR1[R]='1', save SLBs in CSA. | ||
| 478 | */ | ||
| 479 | if (spu_mfc_sr1_get(spu) & MFC_STATE1_RELOCATE_MASK) { | ||
| 480 | csa->priv2.slb_index_W = in_be64(&priv2->slb_index_W); | ||
| 481 | for (i = 0; i < 8; i++) { | ||
| 482 | out_be64(&priv2->slb_index_W, i); | ||
| 483 | eieio(); | ||
| 484 | csa->slb_esid_RW[i] = in_be64(&priv2->slb_esid_RW); | ||
| 485 | csa->slb_vsid_RW[i] = in_be64(&priv2->slb_vsid_RW); | ||
| 486 | eieio(); | ||
| 487 | } | ||
| 488 | } | ||
| 489 | } | ||
| 490 | |||
| 491 | static inline void setup_mfc_sr1(struct spu_state *csa, struct spu *spu) | 471 | static inline void setup_mfc_sr1(struct spu_state *csa, struct spu *spu) |
| 492 | { | 472 | { |
| 493 | /* Save, Step 30: | 473 | /* Save, Step 30: |
| @@ -708,20 +688,6 @@ static inline void resume_mfc_queue(struct spu_state *csa, struct spu *spu) | |||
| 708 | out_be64(&priv2->mfc_control_RW, MFC_CNTL_RESUME_DMA_QUEUE); | 688 | out_be64(&priv2->mfc_control_RW, MFC_CNTL_RESUME_DMA_QUEUE); |
| 709 | } | 689 | } |
| 710 | 690 | ||
| 711 | static inline void invalidate_slbs(struct spu_state *csa, struct spu *spu) | ||
| 712 | { | ||
| 713 | struct spu_priv2 __iomem *priv2 = spu->priv2; | ||
| 714 | |||
| 715 | /* Save, Step 45: | ||
| 716 | * Restore, Step 19: | ||
| 717 | * If MFC_SR1[R]=1, write 0 to SLB_Invalidate_All. | ||
| 718 | */ | ||
| 719 | if (spu_mfc_sr1_get(spu) & MFC_STATE1_RELOCATE_MASK) { | ||
| 720 | out_be64(&priv2->slb_invalidate_all_W, 0UL); | ||
| 721 | eieio(); | ||
| 722 | } | ||
| 723 | } | ||
| 724 | |||
| 725 | static inline void get_kernel_slb(u64 ea, u64 slb[2]) | 691 | static inline void get_kernel_slb(u64 ea, u64 slb[2]) |
| 726 | { | 692 | { |
| 727 | u64 llp; | 693 | u64 llp; |
| @@ -765,7 +731,7 @@ static inline void setup_mfc_slbs(struct spu_state *csa, struct spu *spu) | |||
| 765 | * MFC_SR1[R]=1 (in other words, assume that | 731 | * MFC_SR1[R]=1 (in other words, assume that |
| 766 | * translation is desired by OS environment). | 732 | * translation is desired by OS environment). |
| 767 | */ | 733 | */ |
| 768 | invalidate_slbs(csa, spu); | 734 | spu_invalidate_slbs(spu); |
| 769 | get_kernel_slb((unsigned long)&spu_save_code[0], code_slb); | 735 | get_kernel_slb((unsigned long)&spu_save_code[0], code_slb); |
| 770 | get_kernel_slb((unsigned long)csa->lscsa, lscsa_slb); | 736 | get_kernel_slb((unsigned long)csa->lscsa, lscsa_slb); |
| 771 | load_mfc_slb(spu, code_slb, 0); | 737 | load_mfc_slb(spu, code_slb, 0); |
| @@ -1718,27 +1684,6 @@ static inline void check_ppuint_mb_stat(struct spu_state *csa, struct spu *spu) | |||
| 1718 | } | 1684 | } |
| 1719 | } | 1685 | } |
| 1720 | 1686 | ||
| 1721 | static inline void restore_mfc_slbs(struct spu_state *csa, struct spu *spu) | ||
| 1722 | { | ||
| 1723 | struct spu_priv2 __iomem *priv2 = spu->priv2; | ||
| 1724 | int i; | ||
| 1725 | |||
| 1726 | /* Restore, Step 68: | ||
| 1727 | * If MFC_SR1[R]='1', restore SLBs from CSA. | ||
| 1728 | */ | ||
| 1729 | if (csa->priv1.mfc_sr1_RW & MFC_STATE1_RELOCATE_MASK) { | ||
| 1730 | for (i = 0; i < 8; i++) { | ||
| 1731 | out_be64(&priv2->slb_index_W, i); | ||
| 1732 | eieio(); | ||
| 1733 | out_be64(&priv2->slb_esid_RW, csa->slb_esid_RW[i]); | ||
| 1734 | out_be64(&priv2->slb_vsid_RW, csa->slb_vsid_RW[i]); | ||
| 1735 | eieio(); | ||
| 1736 | } | ||
| 1737 | out_be64(&priv2->slb_index_W, csa->priv2.slb_index_W); | ||
| 1738 | eieio(); | ||
| 1739 | } | ||
| 1740 | } | ||
| 1741 | |||
| 1742 | static inline void restore_mfc_sr1(struct spu_state *csa, struct spu *spu) | 1687 | static inline void restore_mfc_sr1(struct spu_state *csa, struct spu *spu) |
| 1743 | { | 1688 | { |
| 1744 | /* Restore, Step 69: | 1689 | /* Restore, Step 69: |
| @@ -1875,7 +1820,6 @@ static void save_csa(struct spu_state *prev, struct spu *spu) | |||
| 1875 | set_mfc_tclass_id(prev, spu); /* Step 26. */ | 1820 | set_mfc_tclass_id(prev, spu); /* Step 26. */ |
| 1876 | purge_mfc_queue(prev, spu); /* Step 27. */ | 1821 | purge_mfc_queue(prev, spu); /* Step 27. */ |
| 1877 | wait_purge_complete(prev, spu); /* Step 28. */ | 1822 | wait_purge_complete(prev, spu); /* Step 28. */ |
| 1878 | save_mfc_slbs(prev, spu); /* Step 29. */ | ||
| 1879 | setup_mfc_sr1(prev, spu); /* Step 30. */ | 1823 | setup_mfc_sr1(prev, spu); /* Step 30. */ |
| 1880 | save_spu_npc(prev, spu); /* Step 31. */ | 1824 | save_spu_npc(prev, spu); /* Step 31. */ |
| 1881 | save_spu_privcntl(prev, spu); /* Step 32. */ | 1825 | save_spu_privcntl(prev, spu); /* Step 32. */ |
| @@ -1987,7 +1931,7 @@ static void harvest(struct spu_state *prev, struct spu *spu) | |||
| 1987 | reset_spu_privcntl(prev, spu); /* Step 16. */ | 1931 | reset_spu_privcntl(prev, spu); /* Step 16. */ |
| 1988 | reset_spu_lslr(prev, spu); /* Step 17. */ | 1932 | reset_spu_lslr(prev, spu); /* Step 17. */ |
| 1989 | setup_mfc_sr1(prev, spu); /* Step 18. */ | 1933 | setup_mfc_sr1(prev, spu); /* Step 18. */ |
| 1990 | invalidate_slbs(prev, spu); /* Step 19. */ | 1934 | spu_invalidate_slbs(spu); /* Step 19. */ |
| 1991 | reset_ch_part1(prev, spu); /* Step 20. */ | 1935 | reset_ch_part1(prev, spu); /* Step 20. */ |
| 1992 | reset_ch_part2(prev, spu); /* Step 21. */ | 1936 | reset_ch_part2(prev, spu); /* Step 21. */ |
| 1993 | enable_interrupts(prev, spu); /* Step 22. */ | 1937 | enable_interrupts(prev, spu); /* Step 22. */ |
| @@ -2055,7 +1999,7 @@ static void restore_csa(struct spu_state *next, struct spu *spu) | |||
| 2055 | restore_spu_mb(next, spu); /* Step 65. */ | 1999 | restore_spu_mb(next, spu); /* Step 65. */ |
| 2056 | check_ppu_mb_stat(next, spu); /* Step 66. */ | 2000 | check_ppu_mb_stat(next, spu); /* Step 66. */ |
| 2057 | check_ppuint_mb_stat(next, spu); /* Step 67. */ | 2001 | check_ppuint_mb_stat(next, spu); /* Step 67. */ |
| 2058 | restore_mfc_slbs(next, spu); /* Step 68. */ | 2002 | spu_invalidate_slbs(spu); /* Modified Step 68. */ |
| 2059 | restore_mfc_sr1(next, spu); /* Step 69. */ | 2003 | restore_mfc_sr1(next, spu); /* Step 69. */ |
| 2060 | restore_other_spu_access(next, spu); /* Step 70. */ | 2004 | restore_other_spu_access(next, spu); /* Step 70. */ |
| 2061 | restore_spu_runcntl(next, spu); /* Step 71. */ | 2005 | restore_spu_runcntl(next, spu); /* Step 71. */ |
diff --git a/arch/powerpc/platforms/ps3/mm.c b/arch/powerpc/platforms/ps3/mm.c index 42354de3f557..2014d2b44449 100644 --- a/arch/powerpc/platforms/ps3/mm.c +++ b/arch/powerpc/platforms/ps3/mm.c | |||
| @@ -294,7 +294,7 @@ static int __init ps3_mm_add_memory(void) | |||
| 294 | unsigned long nr_pages; | 294 | unsigned long nr_pages; |
| 295 | 295 | ||
| 296 | if (!firmware_has_feature(FW_FEATURE_PS3_LV1)) | 296 | if (!firmware_has_feature(FW_FEATURE_PS3_LV1)) |
| 297 | return 0; | 297 | return -ENODEV; |
| 298 | 298 | ||
| 299 | BUG_ON(!mem_init_done); | 299 | BUG_ON(!mem_init_done); |
| 300 | 300 | ||
diff --git a/arch/powerpc/platforms/ps3/system-bus.c b/arch/powerpc/platforms/ps3/system-bus.c index a9f7e4a39a2a..3c48cce98a5c 100644 --- a/arch/powerpc/platforms/ps3/system-bus.c +++ b/arch/powerpc/platforms/ps3/system-bus.c | |||
| @@ -172,7 +172,7 @@ int __init ps3_system_bus_init(void) | |||
| 172 | int result; | 172 | int result; |
| 173 | 173 | ||
| 174 | if (!firmware_has_feature(FW_FEATURE_PS3_LV1)) | 174 | if (!firmware_has_feature(FW_FEATURE_PS3_LV1)) |
| 175 | return 0; | 175 | return -ENODEV; |
| 176 | 176 | ||
| 177 | result = bus_register(&ps3_system_bus_type); | 177 | result = bus_register(&ps3_system_bus_type); |
| 178 | BUG_ON(result); | 178 | BUG_ON(result); |
diff --git a/drivers/ps3/ps3av.c b/drivers/ps3/ps3av.c index 1926b4d3e1f4..d21e04ccb021 100644 --- a/drivers/ps3/ps3av.c +++ b/drivers/ps3/ps3av.c | |||
| @@ -24,6 +24,8 @@ | |||
| 24 | #include <linux/reboot.h> | 24 | #include <linux/reboot.h> |
| 25 | #include <linux/kernel.h> | 25 | #include <linux/kernel.h> |
| 26 | #include <linux/ioctl.h> | 26 | #include <linux/ioctl.h> |
| 27 | |||
| 28 | #include <asm/firmware.h> | ||
| 27 | #include <asm/lv1call.h> | 29 | #include <asm/lv1call.h> |
| 28 | #include <asm/ps3av.h> | 30 | #include <asm/ps3av.h> |
| 29 | #include <asm/ps3.h> | 31 | #include <asm/ps3.h> |
| @@ -947,7 +949,12 @@ static struct ps3_vuart_port_driver ps3av_driver = { | |||
| 947 | 949 | ||
| 948 | static int ps3av_module_init(void) | 950 | static int ps3av_module_init(void) |
| 949 | { | 951 | { |
| 950 | int error = ps3_vuart_port_driver_register(&ps3av_driver); | 952 | int error; |
| 953 | |||
| 954 | if (!firmware_has_feature(FW_FEATURE_PS3_LV1)) | ||
| 955 | return -ENODEV; | ||
| 956 | |||
| 957 | error = ps3_vuart_port_driver_register(&ps3av_driver); | ||
| 951 | if (error) { | 958 | if (error) { |
| 952 | printk(KERN_ERR | 959 | printk(KERN_ERR |
| 953 | "%s: ps3_vuart_port_driver_register failed %d\n", | 960 | "%s: ps3_vuart_port_driver_register failed %d\n", |
diff --git a/drivers/ps3/sys-manager.c b/drivers/ps3/sys-manager.c index 0fc30be8b81e..3aa2b0dcc369 100644 --- a/drivers/ps3/sys-manager.c +++ b/drivers/ps3/sys-manager.c | |||
| @@ -22,7 +22,10 @@ | |||
| 22 | #include <linux/module.h> | 22 | #include <linux/module.h> |
| 23 | #include <linux/workqueue.h> | 23 | #include <linux/workqueue.h> |
| 24 | #include <linux/reboot.h> | 24 | #include <linux/reboot.h> |
| 25 | |||
| 26 | #include <asm/firmware.h> | ||
| 25 | #include <asm/ps3.h> | 27 | #include <asm/ps3.h> |
| 28 | |||
| 26 | #include "vuart.h" | 29 | #include "vuart.h" |
| 27 | 30 | ||
| 28 | MODULE_AUTHOR("Sony Corporation"); | 31 | MODULE_AUTHOR("Sony Corporation"); |
| @@ -598,6 +601,9 @@ static struct ps3_vuart_port_driver ps3_sys_manager = { | |||
| 598 | 601 | ||
| 599 | static int __init ps3_sys_manager_init(void) | 602 | static int __init ps3_sys_manager_init(void) |
| 600 | { | 603 | { |
| 604 | if (!firmware_has_feature(FW_FEATURE_PS3_LV1)) | ||
| 605 | return -ENODEV; | ||
| 606 | |||
| 601 | return ps3_vuart_port_driver_register(&ps3_sys_manager); | 607 | return ps3_vuart_port_driver_register(&ps3_sys_manager); |
| 602 | } | 608 | } |
| 603 | 609 | ||
diff --git a/drivers/ps3/vuart.c b/drivers/ps3/vuart.c index 746298107d6f..1adf186bfaf5 100644 --- a/drivers/ps3/vuart.c +++ b/drivers/ps3/vuart.c | |||
| @@ -1031,7 +1031,7 @@ int __init ps3_vuart_bus_init(void) | |||
| 1031 | pr_debug("%s:%d:\n", __func__, __LINE__); | 1031 | pr_debug("%s:%d:\n", __func__, __LINE__); |
| 1032 | 1032 | ||
| 1033 | if (!firmware_has_feature(FW_FEATURE_PS3_LV1)) | 1033 | if (!firmware_has_feature(FW_FEATURE_PS3_LV1)) |
| 1034 | return 0; | 1034 | return -ENODEV; |
| 1035 | 1035 | ||
| 1036 | init_MUTEX(&vuart_bus_priv.probe_mutex); | 1036 | init_MUTEX(&vuart_bus_priv.probe_mutex); |
| 1037 | result = bus_register(&ps3_vuart_bus); | 1037 | result = bus_register(&ps3_vuart_bus); |
diff --git a/include/asm-powerpc/spu.h b/include/asm-powerpc/spu.h index 0f9f2dd24a79..31d5054be20f 100644 --- a/include/asm-powerpc/spu.h +++ b/include/asm-powerpc/spu.h | |||
| @@ -165,6 +165,13 @@ int spu_irq_class_0_bottom(struct spu *spu); | |||
| 165 | int spu_irq_class_1_bottom(struct spu *spu); | 165 | int spu_irq_class_1_bottom(struct spu *spu); |
| 166 | void spu_irq_setaffinity(struct spu *spu, int cpu); | 166 | void spu_irq_setaffinity(struct spu *spu, int cpu); |
| 167 | 167 | ||
| 168 | extern void spu_invalidate_slbs(struct spu *spu); | ||
| 169 | extern void spu_associate_mm(struct spu *spu, struct mm_struct *mm); | ||
| 170 | |||
| 171 | /* Calls from the memory management to the SPU */ | ||
| 172 | struct mm_struct; | ||
| 173 | extern void spu_flush_all_slbs(struct mm_struct *mm); | ||
| 174 | |||
| 168 | /* system callbacks from the SPU */ | 175 | /* system callbacks from the SPU */ |
| 169 | struct spu_syscall_block { | 176 | struct spu_syscall_block { |
| 170 | u64 nr_ret; | 177 | u64 nr_ret; |
diff --git a/include/asm-powerpc/spu_csa.h b/include/asm-powerpc/spu_csa.h index bdbf906a767f..8aad0619eb8e 100644 --- a/include/asm-powerpc/spu_csa.h +++ b/include/asm-powerpc/spu_csa.h | |||
| @@ -221,8 +221,6 @@ struct spu_priv2_collapsed { | |||
| 221 | * @spu_chnlcnt_RW: Array of saved channel counts. | 221 | * @spu_chnlcnt_RW: Array of saved channel counts. |
| 222 | * @spu_chnldata_RW: Array of saved channel data. | 222 | * @spu_chnldata_RW: Array of saved channel data. |
| 223 | * @suspend_time: Time stamp when decrementer disabled. | 223 | * @suspend_time: Time stamp when decrementer disabled. |
| 224 | * @slb_esid_RW: Array of saved SLB esid entries. | ||
| 225 | * @slb_vsid_RW: Array of saved SLB vsid entries. | ||
| 226 | * | 224 | * |
| 227 | * Structure representing the whole of the SPU | 225 | * Structure representing the whole of the SPU |
| 228 | * context save area (CSA). This struct contains | 226 | * context save area (CSA). This struct contains |
| @@ -245,8 +243,6 @@ struct spu_state { | |||
| 245 | u32 spu_mailbox_data[4]; | 243 | u32 spu_mailbox_data[4]; |
| 246 | u32 pu_mailbox_data[1]; | 244 | u32 pu_mailbox_data[1]; |
| 247 | unsigned long suspend_time; | 245 | unsigned long suspend_time; |
| 248 | u64 slb_esid_RW[8]; | ||
| 249 | u64 slb_vsid_RW[8]; | ||
| 250 | spinlock_t register_lock; | 246 | spinlock_t register_lock; |
| 251 | }; | 247 | }; |
| 252 | 248 | ||
diff --git a/include/asm-powerpc/systbl.h b/include/asm-powerpc/systbl.h index 418e5c7e972c..8d853c554631 100644 --- a/include/asm-powerpc/systbl.h +++ b/include/asm-powerpc/systbl.h | |||
| @@ -304,5 +304,6 @@ SYSCALL_SPU(fchmodat) | |||
| 304 | SYSCALL_SPU(faccessat) | 304 | SYSCALL_SPU(faccessat) |
| 305 | COMPAT_SYS_SPU(get_robust_list) | 305 | COMPAT_SYS_SPU(get_robust_list) |
| 306 | COMPAT_SYS_SPU(set_robust_list) | 306 | COMPAT_SYS_SPU(set_robust_list) |
| 307 | COMPAT_SYS(move_pages) | 307 | COMPAT_SYS_SPU(move_pages) |
| 308 | SYSCALL_SPU(getcpu) | 308 | SYSCALL_SPU(getcpu) |
| 309 | COMPAT_SYS(epoll_pwait) | ||
diff --git a/include/asm-powerpc/unistd.h b/include/asm-powerpc/unistd.h index 0ae954e3d258..2baedbe54e13 100644 --- a/include/asm-powerpc/unistd.h +++ b/include/asm-powerpc/unistd.h | |||
| @@ -324,10 +324,12 @@ | |||
| 324 | #define __NR_get_robust_list 299 | 324 | #define __NR_get_robust_list 299 |
| 325 | #define __NR_set_robust_list 300 | 325 | #define __NR_set_robust_list 300 |
| 326 | #define __NR_move_pages 301 | 326 | #define __NR_move_pages 301 |
| 327 | #define __NR_getcpu 302 | ||
| 328 | #define __NR_epoll_pwait 303 | ||
| 327 | 329 | ||
| 328 | #ifdef __KERNEL__ | 330 | #ifdef __KERNEL__ |
| 329 | 331 | ||
| 330 | #define __NR_syscalls 302 | 332 | #define __NR_syscalls 304 |
| 331 | 333 | ||
| 332 | #define __NR__exit __NR_exit | 334 | #define __NR__exit __NR_exit |
| 333 | #define NR_syscalls __NR_syscalls | 335 | #define NR_syscalls __NR_syscalls |
