Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc
* 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc: [POWERPC] Fix size check for hugetlbfs [POWERPC] Fix initialization and usage of dma_mask [POWERPC] Fix more section mismatches in head_64.S [POWERPC] Revert "[POWERPC] Add 'mdio' to bus scan id list for platforms with QE UEC" [POWERPC] PS3: Update ps3_defconfig [POWERPC] PS3: Remove text saying PS3 support is incomplete [POWERPC] PS3: Fix storage probe logic [POWERPC] cell: Move SPU affinity init to spu_management_of_ops [POWERPC] Fix potential duplicate entry in SLB shadow buffer
This commit is contained in:
commit
75ecb1a4d1
16 changed files with 296 additions and 340 deletions
|
@ -1,9 +1,23 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.22-rc6
|
||||
# Tue Jun 26 14:15:19 2007
|
||||
# Linux kernel version: 2.6.23-rc2
|
||||
# Tue Aug 7 19:17:26 2007
|
||||
#
|
||||
CONFIG_PPC64=y
|
||||
|
||||
#
|
||||
# Processor support
|
||||
#
|
||||
# CONFIG_POWER4_ONLY is not set
|
||||
CONFIG_POWER3=y
|
||||
CONFIG_POWER4=y
|
||||
CONFIG_PPC_FPU=y
|
||||
CONFIG_ALTIVEC=y
|
||||
CONFIG_PPC_STD_MMU=y
|
||||
# CONFIG_PPC_MM_SLICES is not set
|
||||
CONFIG_VIRT_CPU_ACCOUNTING=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_NR_CPUS=2
|
||||
CONFIG_64BIT=y
|
||||
CONFIG_PPC_MERGE=y
|
||||
CONFIG_MMU=y
|
||||
|
@ -15,6 +29,7 @@ CONFIG_ARCH_HAS_ILOG2_U64=y
|
|||
CONFIG_GENERIC_HWEIGHT=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_GENERIC_FIND_NEXT_BIT=y
|
||||
CONFIG_ARCH_NO_VIRT_TO_BUS=y
|
||||
CONFIG_PPC=y
|
||||
CONFIG_EARLY_PRINTK=y
|
||||
CONFIG_COMPAT=y
|
||||
|
@ -22,50 +37,32 @@ CONFIG_SYSVIPC_COMPAT=y
|
|||
CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
|
||||
CONFIG_ARCH_MAY_HAVE_PC_FDC=y
|
||||
CONFIG_PPC_OF=y
|
||||
CONFIG_OF=y
|
||||
# CONFIG_PPC_UDBG_16550 is not set
|
||||
# CONFIG_GENERIC_TBSYNC is not set
|
||||
CONFIG_AUDIT_ARCH=y
|
||||
CONFIG_GENERIC_BUG=y
|
||||
# CONFIG_DEFAULT_UIMAGE is not set
|
||||
|
||||
#
|
||||
# Processor support
|
||||
#
|
||||
# CONFIG_POWER4_ONLY is not set
|
||||
CONFIG_POWER3=y
|
||||
CONFIG_POWER4=y
|
||||
CONFIG_PPC_FPU=y
|
||||
# CONFIG_PPC_DCR_NATIVE is not set
|
||||
# CONFIG_PPC_DCR_MMIO is not set
|
||||
# CONFIG_PPC_OF_PLATFORM_PCI is not set
|
||||
CONFIG_ALTIVEC=y
|
||||
CONFIG_PPC_STD_MMU=y
|
||||
# CONFIG_PPC_MM_SLICES is not set
|
||||
CONFIG_VIRT_CPU_ACCOUNTING=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_NR_CPUS=2
|
||||
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
||||
|
||||
#
|
||||
# Code maturity level options
|
||||
#
|
||||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_LOCK_KERNEL=y
|
||||
CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||
|
||||
#
|
||||
# General setup
|
||||
#
|
||||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_LOCK_KERNEL=y
|
||||
CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||
CONFIG_LOCALVERSION=""
|
||||
CONFIG_LOCALVERSION_AUTO=y
|
||||
CONFIG_SWAP=y
|
||||
CONFIG_SYSVIPC=y
|
||||
# CONFIG_IPC_NS is not set
|
||||
CONFIG_SYSVIPC_SYSCTL=y
|
||||
# CONFIG_POSIX_MQUEUE is not set
|
||||
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||
# CONFIG_TASKSTATS is not set
|
||||
# CONFIG_UTS_NS is not set
|
||||
# CONFIG_USER_NS is not set
|
||||
# CONFIG_AUDIT is not set
|
||||
# CONFIG_IKCONFIG is not set
|
||||
CONFIG_LOG_BUF_SHIFT=17
|
||||
|
@ -100,10 +97,6 @@ CONFIG_SLAB=y
|
|||
CONFIG_RT_MUTEXES=y
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
|
||||
#
|
||||
# Loadable module support
|
||||
#
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
# CONFIG_MODULE_FORCE_UNLOAD is not set
|
||||
|
@ -111,12 +104,9 @@ CONFIG_MODULE_UNLOAD=y
|
|||
# CONFIG_MODULE_SRCVERSION_ALL is not set
|
||||
CONFIG_KMOD=y
|
||||
CONFIG_STOP_MACHINE=y
|
||||
|
||||
#
|
||||
# Block layer
|
||||
#
|
||||
CONFIG_BLOCK=y
|
||||
# CONFIG_BLK_DEV_IO_TRACE is not set
|
||||
CONFIG_BLK_DEV_BSG=y
|
||||
|
||||
#
|
||||
# IO Schedulers
|
||||
|
@ -136,7 +126,9 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
|
|||
#
|
||||
CONFIG_PPC_MULTIPLATFORM=y
|
||||
# CONFIG_EMBEDDED6xx is not set
|
||||
# CONFIG_APUS is not set
|
||||
# CONFIG_PPC_82xx is not set
|
||||
# CONFIG_PPC_83xx is not set
|
||||
# CONFIG_PPC_86xx is not set
|
||||
# CONFIG_PPC_PSERIES is not set
|
||||
# CONFIG_PPC_ISERIES is not set
|
||||
# CONFIG_PPC_MPC52xx is not set
|
||||
|
@ -223,6 +215,7 @@ CONFIG_MEMORY_HOTPLUG_SPARSE=y
|
|||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||
CONFIG_RESOURCES_64BIT=y
|
||||
CONFIG_ZONE_DMA_FLAG=1
|
||||
CONFIG_BOUNCE=y
|
||||
CONFIG_ARCH_MEMORY_PROBE=y
|
||||
# CONFIG_PPC_HAS_HASH_64K is not set
|
||||
# CONFIG_PPC_64K_PAGES is not set
|
||||
|
@ -241,6 +234,7 @@ CONFIG_ZONE_DMA=y
|
|||
CONFIG_GENERIC_ISA_DMA=y
|
||||
# CONFIG_PCI is not set
|
||||
# CONFIG_PCI_DOMAINS is not set
|
||||
# CONFIG_PCI_SYSCALL is not set
|
||||
# CONFIG_ARCH_SUPPORTS_MSI is not set
|
||||
|
||||
#
|
||||
|
@ -365,6 +359,7 @@ CONFIG_WIRELESS_EXT=y
|
|||
# CONFIG_MAC80211 is not set
|
||||
# CONFIG_IEEE80211 is not set
|
||||
# CONFIG_RFKILL is not set
|
||||
# CONFIG_NET_9P is not set
|
||||
|
||||
#
|
||||
# Device Drivers
|
||||
|
@ -379,26 +374,11 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
|
|||
# CONFIG_DEBUG_DRIVER is not set
|
||||
# CONFIG_DEBUG_DEVRES is not set
|
||||
# CONFIG_SYS_HYPERVISOR is not set
|
||||
|
||||
#
|
||||
# Connector - unified userspace <-> kernelspace linker
|
||||
#
|
||||
# CONFIG_CONNECTOR is not set
|
||||
# CONFIG_MTD is not set
|
||||
|
||||
#
|
||||
# Parallel port support
|
||||
#
|
||||
CONFIG_OF_DEVICE=y
|
||||
# CONFIG_PARPORT is not set
|
||||
|
||||
#
|
||||
# Plug and Play support
|
||||
#
|
||||
# CONFIG_PNPACPI is not set
|
||||
|
||||
#
|
||||
# Block devices
|
||||
#
|
||||
CONFIG_BLK_DEV=y
|
||||
# CONFIG_BLK_DEV_FD is not set
|
||||
# CONFIG_BLK_DEV_COW_COMMON is not set
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
|
@ -411,11 +391,8 @@ CONFIG_BLK_DEV_RAM_SIZE=65535
|
|||
CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
|
||||
# CONFIG_CDROM_PKTCDVD is not set
|
||||
# CONFIG_ATA_OVER_ETH is not set
|
||||
|
||||
#
|
||||
# Misc devices
|
||||
#
|
||||
# CONFIG_BLINK is not set
|
||||
CONFIG_MISC_DEVICES=y
|
||||
# CONFIG_EEPROM_93CX6 is not set
|
||||
# CONFIG_IDE is not set
|
||||
|
||||
#
|
||||
|
@ -423,6 +400,7 @@ CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
|
|||
#
|
||||
# CONFIG_RAID_ATTRS is not set
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_SCSI_DMA=y
|
||||
# CONFIG_SCSI_TGT is not set
|
||||
# CONFIG_SCSI_NETLINK is not set
|
||||
CONFIG_SCSI_PROC_FS=y
|
||||
|
@ -455,37 +433,22 @@ CONFIG_SCSI_WAIT_SCAN=m
|
|||
# CONFIG_SCSI_ISCSI_ATTRS is not set
|
||||
# CONFIG_SCSI_SAS_ATTRS is not set
|
||||
# CONFIG_SCSI_SAS_LIBSAS is not set
|
||||
|
||||
#
|
||||
# SCSI low-level drivers
|
||||
#
|
||||
# CONFIG_ISCSI_TCP is not set
|
||||
# CONFIG_SCSI_DEBUG is not set
|
||||
# CONFIG_SCSI_LOWLEVEL is not set
|
||||
# CONFIG_ATA is not set
|
||||
|
||||
#
|
||||
# Multi-device support (RAID and LVM)
|
||||
#
|
||||
# CONFIG_MD is not set
|
||||
# CONFIG_MACINTOSH_DRIVERS is not set
|
||||
|
||||
#
|
||||
# Network device support
|
||||
#
|
||||
CONFIG_NETDEVICES=y
|
||||
# CONFIG_NETDEVICES_MULTIQUEUE is not set
|
||||
# CONFIG_DUMMY is not set
|
||||
# CONFIG_BONDING is not set
|
||||
# CONFIG_MACVLAN is not set
|
||||
# CONFIG_EQUALIZER is not set
|
||||
# CONFIG_TUN is not set
|
||||
|
||||
#
|
||||
# Ethernet (10 or 100Mbit)
|
||||
#
|
||||
# CONFIG_NET_ETHERNET is not set
|
||||
CONFIG_MII=m
|
||||
CONFIG_NETDEV_1000=y
|
||||
CONFIG_NETDEV_10000=y
|
||||
CONFIG_GELIC_NET=y
|
||||
# CONFIG_NETDEV_10000 is not set
|
||||
|
||||
#
|
||||
# Wireless LAN
|
||||
|
@ -518,15 +481,7 @@ CONFIG_USB_NET_MCS7830=m
|
|||
# CONFIG_NETCONSOLE is not set
|
||||
# CONFIG_NETPOLL is not set
|
||||
# CONFIG_NET_POLL_CONTROLLER is not set
|
||||
|
||||
#
|
||||
# ISDN subsystem
|
||||
#
|
||||
# CONFIG_ISDN is not set
|
||||
|
||||
#
|
||||
# Telephony Support
|
||||
#
|
||||
# CONFIG_PHONE is not set
|
||||
|
||||
#
|
||||
|
@ -604,10 +559,6 @@ CONFIG_VT_HW_CONSOLE_BINDING=y
|
|||
CONFIG_UNIX98_PTYS=y
|
||||
CONFIG_LEGACY_PTYS=y
|
||||
CONFIG_LEGACY_PTY_COUNT=16
|
||||
|
||||
#
|
||||
# IPMI
|
||||
#
|
||||
# CONFIG_IPMI_HANDLER is not set
|
||||
# CONFIG_WATCHDOG is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
|
@ -616,10 +567,6 @@ CONFIG_GEN_RTC=y
|
|||
# CONFIG_R3964 is not set
|
||||
# CONFIG_RAW_DRIVER is not set
|
||||
# CONFIG_HANGCHECK_TIMER is not set
|
||||
|
||||
#
|
||||
# TPM devices
|
||||
#
|
||||
# CONFIG_TCG_TPM is not set
|
||||
# CONFIG_I2C is not set
|
||||
|
||||
|
@ -628,11 +575,8 @@ CONFIG_GEN_RTC=y
|
|||
#
|
||||
# CONFIG_SPI is not set
|
||||
# CONFIG_SPI_MASTER is not set
|
||||
|
||||
#
|
||||
# Dallas's 1-wire bus
|
||||
#
|
||||
# CONFIG_W1 is not set
|
||||
# CONFIG_POWER_SUPPLY is not set
|
||||
# CONFIG_HWMON is not set
|
||||
|
||||
#
|
||||
|
@ -657,6 +601,7 @@ CONFIG_GEN_RTC=y
|
|||
#
|
||||
# CONFIG_DISPLAY_SUPPORT is not set
|
||||
# CONFIG_VGASTATE is not set
|
||||
CONFIG_VIDEO_OUTPUT_CONTROL=m
|
||||
CONFIG_FB=y
|
||||
# CONFIG_FIRMWARE_EDID is not set
|
||||
# CONFIG_FB_DDC is not set
|
||||
|
@ -691,11 +636,13 @@ CONFIG_FB_PS3_DEFAULT_SIZE_M=18
|
|||
# CONFIG_VGA_CONSOLE is not set
|
||||
CONFIG_DUMMY_CONSOLE=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
|
||||
# CONFIG_FONTS is not set
|
||||
CONFIG_FONT_8x8=y
|
||||
CONFIG_FONT_8x16=y
|
||||
CONFIG_LOGO=y
|
||||
CONFIG_FB_LOGO_EXTRA=y
|
||||
# CONFIG_LOGO_LINUX_MONO is not set
|
||||
# CONFIG_LOGO_LINUX_VGA16 is not set
|
||||
CONFIG_LOGO_LINUX_CLUT224=y
|
||||
|
@ -709,6 +656,8 @@ CONFIG_SOUND=y
|
|||
# Advanced Linux Sound Architecture
|
||||
#
|
||||
CONFIG_SND=y
|
||||
CONFIG_SND_TIMER=y
|
||||
CONFIG_SND_PCM=y
|
||||
# CONFIG_SND_SEQUENCER is not set
|
||||
# CONFIG_SND_MIXER_OSS is not set
|
||||
# CONFIG_SND_PCM_OSS is not set
|
||||
|
@ -734,6 +683,12 @@ CONFIG_SND_VERBOSE_PROCFS=y
|
|||
# ALSA PowerMac requires I2C
|
||||
#
|
||||
|
||||
#
|
||||
# ALSA PowerPC devices
|
||||
#
|
||||
CONFIG_SND_PS3=y
|
||||
CONFIG_SND_PS3_DEFAULT_START_DELAY=2000
|
||||
|
||||
#
|
||||
# USB devices
|
||||
#
|
||||
|
@ -746,14 +701,15 @@ CONFIG_SND_VERBOSE_PROCFS=y
|
|||
#
|
||||
# CONFIG_SND_SOC is not set
|
||||
|
||||
#
|
||||
# SoC Audio support for SuperH
|
||||
#
|
||||
|
||||
#
|
||||
# Open Sound System
|
||||
#
|
||||
# CONFIG_SOUND_PRIME is not set
|
||||
|
||||
#
|
||||
# HID Devices
|
||||
#
|
||||
CONFIG_HID_SUPPORT=y
|
||||
CONFIG_HID=y
|
||||
# CONFIG_HID_DEBUG is not set
|
||||
|
||||
|
@ -770,10 +726,7 @@ CONFIG_USB_HID=m
|
|||
#
|
||||
# CONFIG_USB_KBD is not set
|
||||
# CONFIG_USB_MOUSE is not set
|
||||
|
||||
#
|
||||
# USB support
|
||||
#
|
||||
CONFIG_USB_SUPPORT=y
|
||||
CONFIG_USB_ARCH_HAS_HCD=y
|
||||
CONFIG_USB_ARCH_HAS_OHCI=y
|
||||
CONFIG_USB_ARCH_HAS_EHCI=y
|
||||
|
@ -803,6 +756,7 @@ CONFIG_USB_OHCI_HCD=y
|
|||
CONFIG_USB_OHCI_BIG_ENDIAN_MMIO=y
|
||||
CONFIG_USB_OHCI_LITTLE_ENDIAN=y
|
||||
# CONFIG_USB_SL811_HCD is not set
|
||||
# CONFIG_USB_R8A66597_HCD is not set
|
||||
|
||||
#
|
||||
# USB Device Class drivers
|
||||
|
@ -879,31 +833,8 @@ CONFIG_USB_MON=y
|
|||
#
|
||||
# CONFIG_USB_GADGET is not set
|
||||
# CONFIG_MMC is not set
|
||||
|
||||
#
|
||||
# LED devices
|
||||
#
|
||||
# CONFIG_NEW_LEDS is not set
|
||||
|
||||
#
|
||||
# LED drivers
|
||||
#
|
||||
|
||||
#
|
||||
# LED Triggers
|
||||
#
|
||||
|
||||
#
|
||||
# InfiniBand support
|
||||
#
|
||||
|
||||
#
|
||||
# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
|
||||
#
|
||||
|
||||
#
|
||||
# Real Time Clock
|
||||
#
|
||||
# CONFIG_EDAC is not set
|
||||
# CONFIG_RTC_CLASS is not set
|
||||
|
||||
#
|
||||
|
@ -919,6 +850,11 @@ CONFIG_USB_MON=y
|
|||
# DMA Devices
|
||||
#
|
||||
|
||||
#
|
||||
# Userspace I/O
|
||||
#
|
||||
# CONFIG_UIO is not set
|
||||
|
||||
#
|
||||
# File systems
|
||||
#
|
||||
|
@ -948,8 +884,8 @@ CONFIG_QUOTA=y
|
|||
CONFIG_QFMT_V2=y
|
||||
CONFIG_QUOTACTL=y
|
||||
CONFIG_DNOTIFY=y
|
||||
# CONFIG_AUTOFS_FS is not set
|
||||
CONFIG_AUTOFS4_FS=y
|
||||
CONFIG_AUTOFS_FS=m
|
||||
CONFIG_AUTOFS4_FS=m
|
||||
# CONFIG_FUSE_FS is not set
|
||||
|
||||
#
|
||||
|
@ -1030,7 +966,6 @@ CONFIG_CIFS=m
|
|||
# CONFIG_NCP_FS is not set
|
||||
# CONFIG_CODA_FS is not set
|
||||
# CONFIG_AFS_FS is not set
|
||||
# CONFIG_9P_FS is not set
|
||||
|
||||
#
|
||||
# Partition Types
|
||||
|
@ -1096,6 +1031,7 @@ CONFIG_BITREVERSE=y
|
|||
# CONFIG_CRC16 is not set
|
||||
# CONFIG_CRC_ITU_T is not set
|
||||
CONFIG_CRC32=y
|
||||
# CONFIG_CRC7 is not set
|
||||
# CONFIG_LIBCRC32C is not set
|
||||
CONFIG_PLIST=y
|
||||
CONFIG_HAS_IOMEM=y
|
||||
|
@ -1120,6 +1056,7 @@ CONFIG_MAGIC_SYSRQ=y
|
|||
CONFIG_DEBUG_KERNEL=y
|
||||
# CONFIG_DEBUG_SHIRQ is not set
|
||||
CONFIG_DETECT_SOFTLOCKUP=y
|
||||
CONFIG_SCHED_DEBUG=y
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
# CONFIG_TIMER_STATS is not set
|
||||
# CONFIG_DEBUG_SLAB is not set
|
||||
|
@ -1150,10 +1087,6 @@ CONFIG_IRQSTACKS=y
|
|||
#
|
||||
# CONFIG_KEYS is not set
|
||||
# CONFIG_SECURITY is not set
|
||||
|
||||
#
|
||||
# Cryptographic options
|
||||
#
|
||||
CONFIG_CRYPTO=y
|
||||
CONFIG_CRYPTO_ALGAPI=y
|
||||
CONFIG_CRYPTO_BLKCIPHER=y
|
||||
|
@ -1191,7 +1124,4 @@ CONFIG_CRYPTO_DES=y
|
|||
# CONFIG_CRYPTO_CRC32C is not set
|
||||
# CONFIG_CRYPTO_CAMELLIA is not set
|
||||
# CONFIG_CRYPTO_TEST is not set
|
||||
|
||||
#
|
||||
# Hardware crypto devices
|
||||
#
|
||||
CONFIG_CRYPTO_HW=y
|
||||
|
|
|
@ -1672,8 +1672,9 @@ _GLOBAL(__start_initialization_multiplatform)
|
|||
* Are we booted from a PROM Of-type client-interface ?
|
||||
*/
|
||||
cmpldi cr0,r5,0
|
||||
bne .__boot_from_prom /* yes -> prom */
|
||||
|
||||
beq 1f
|
||||
b .__boot_from_prom /* yes -> prom */
|
||||
1:
|
||||
/* Save parameters */
|
||||
mr r31,r3
|
||||
mr r30,r4
|
||||
|
@ -1701,7 +1702,7 @@ _GLOBAL(__start_initialization_multiplatform)
|
|||
bl .__mmu_off
|
||||
b .__after_prom_start
|
||||
|
||||
_STATIC(__boot_from_prom)
|
||||
_INIT_STATIC(__boot_from_prom)
|
||||
/* Save parameters */
|
||||
mr r31,r3
|
||||
mr r30,r4
|
||||
|
@ -1768,9 +1769,10 @@ _STATIC(__after_prom_start)
|
|||
/* the source addr */
|
||||
|
||||
cmpdi r4,0 /* In some cases the loader may */
|
||||
beq .start_here_multiplatform /* have already put us at zero */
|
||||
bne 1f
|
||||
b .start_here_multiplatform /* have already put us at zero */
|
||||
/* so we can skip the copy. */
|
||||
LOAD_REG_IMMEDIATE(r5,copy_to_here) /* # bytes of memory to copy */
|
||||
1: LOAD_REG_IMMEDIATE(r5,copy_to_here) /* # bytes of memory to copy */
|
||||
sub r5,r5,r27
|
||||
|
||||
li r6,0x100 /* Start offset, the first 0x100 */
|
||||
|
@ -1957,7 +1959,7 @@ _GLOBAL(enable_64b_mode)
|
|||
/*
|
||||
* This is where the main kernel code starts.
|
||||
*/
|
||||
_STATIC(start_here_multiplatform)
|
||||
_INIT_STATIC(start_here_multiplatform)
|
||||
/* get a new offset, now that the kernel has moved. */
|
||||
bl .reloc_offset
|
||||
mr r26,r3
|
||||
|
@ -2019,7 +2021,7 @@ _STATIC(start_here_multiplatform)
|
|||
b . /* prevent speculative execution */
|
||||
|
||||
/* This is where all platforms converge execution */
|
||||
_STATIC(start_here_common)
|
||||
_INIT_STATIC(start_here_common)
|
||||
/* relocation is on at this point */
|
||||
|
||||
/* The following code sets up the SP and TOC now that we are */
|
||||
|
|
|
@ -313,6 +313,7 @@ struct pci_dev *of_create_pci_dev(struct device_node *node,
|
|||
|
||||
dev->current_state = 4; /* unknown power state */
|
||||
dev->error_state = pci_channel_io_normal;
|
||||
dev->dma_mask = 0xffffffff;
|
||||
|
||||
if (!strcmp(type, "pci") || !strcmp(type, "pciex")) {
|
||||
/* a PCI-PCI bridge */
|
||||
|
|
|
@ -69,20 +69,9 @@ static inline void slb_shadow_update(unsigned long ea,
|
|||
smp_wmb();
|
||||
}
|
||||
|
||||
static inline void create_shadowed_slbe(unsigned long ea, unsigned long flags,
|
||||
unsigned long entry)
|
||||
static inline void slb_shadow_clear(unsigned long entry)
|
||||
{
|
||||
/*
|
||||
* Updating the shadow buffer before writing the SLB ensures
|
||||
* we don't get a stale entry here if we get preempted by PHYP
|
||||
* between these two statements.
|
||||
*/
|
||||
slb_shadow_update(ea, flags, entry);
|
||||
|
||||
asm volatile("slbmte %0,%1" :
|
||||
: "r" (mk_vsid_data(ea, flags)),
|
||||
"r" (mk_esid_data(ea, entry))
|
||||
: "memory" );
|
||||
get_slb_shadow()->save_area[entry].esid = 0;
|
||||
}
|
||||
|
||||
void slb_flush_and_rebolt(void)
|
||||
|
@ -100,11 +89,13 @@ void slb_flush_and_rebolt(void)
|
|||
vflags = SLB_VSID_KERNEL | vmalloc_llp;
|
||||
|
||||
ksp_esid_data = mk_esid_data(get_paca()->kstack, 2);
|
||||
if ((ksp_esid_data & ESID_MASK) == PAGE_OFFSET)
|
||||
if ((ksp_esid_data & ESID_MASK) == PAGE_OFFSET) {
|
||||
ksp_esid_data &= ~SLB_ESID_V;
|
||||
|
||||
/* Only third entry (stack) may change here so only resave that */
|
||||
slb_shadow_update(get_paca()->kstack, lflags, 2);
|
||||
slb_shadow_clear(2);
|
||||
} else {
|
||||
/* Update stack entry; others don't change */
|
||||
slb_shadow_update(get_paca()->kstack, lflags, 2);
|
||||
}
|
||||
|
||||
/* We need to do this all in asm, so we're sure we don't touch
|
||||
* the stack between the slbia and rebolting it. */
|
||||
|
@ -235,16 +226,12 @@ void slb_initialize(void)
|
|||
vflags = SLB_VSID_KERNEL | vmalloc_llp;
|
||||
|
||||
/* Invalidate the entire SLB (even slot 0) & all the ERATS */
|
||||
asm volatile("isync":::"memory");
|
||||
asm volatile("slbmte %0,%0"::"r" (0) : "memory");
|
||||
asm volatile("isync; slbia; isync":::"memory");
|
||||
create_shadowed_slbe(PAGE_OFFSET, lflags, 0);
|
||||
slb_shadow_update(PAGE_OFFSET, lflags, 0);
|
||||
asm volatile("isync; slbia; sync; slbmte %0,%1; isync" ::
|
||||
"r" (get_slb_shadow()->save_area[0].vsid),
|
||||
"r" (get_slb_shadow()->save_area[0].esid) : "memory");
|
||||
|
||||
create_shadowed_slbe(VMALLOC_START, vflags, 1);
|
||||
slb_shadow_update(VMALLOC_START, vflags, 1);
|
||||
|
||||
/* We don't bolt the stack for the time being - we're in boot,
|
||||
* so the stack is in the bolted segment. By the time it goes
|
||||
* elsewhere, we'll call _switch() which will bolt in the new
|
||||
* one. */
|
||||
asm volatile("isync":::"memory");
|
||||
slb_flush_and_rebolt();
|
||||
}
|
||||
|
|
|
@ -405,6 +405,8 @@ unsigned long slice_get_unmapped_area(unsigned long addr, unsigned long len,
|
|||
|
||||
if (len > mm->task_size)
|
||||
return -ENOMEM;
|
||||
if (len & ((1ul << pshift) - 1))
|
||||
return -EINVAL;
|
||||
if (fixed && (addr & ((1ul << pshift) - 1)))
|
||||
return -EINVAL;
|
||||
if (fixed && addr > (mm->task_size - len))
|
||||
|
|
|
@ -106,7 +106,6 @@ static struct of_device_id mpc832x_ids[] = {
|
|||
{ .type = "soc", },
|
||||
{ .compatible = "soc", },
|
||||
{ .type = "qe", },
|
||||
{ .type = "mdio", },
|
||||
{},
|
||||
};
|
||||
|
||||
|
|
|
@ -70,7 +70,6 @@ static struct of_device_id mpc832x_ids[] = {
|
|||
{ .type = "soc", },
|
||||
{ .compatible = "soc", },
|
||||
{ .type = "qe", },
|
||||
{ .type = "mdio", },
|
||||
{},
|
||||
};
|
||||
|
||||
|
|
|
@ -113,7 +113,6 @@ static struct of_device_id mpc836x_ids[] = {
|
|||
{ .type = "soc", },
|
||||
{ .compatible = "soc", },
|
||||
{ .type = "qe", },
|
||||
{ .type = "mdio", },
|
||||
{},
|
||||
};
|
||||
|
||||
|
|
|
@ -142,7 +142,6 @@ static struct of_device_id mpc85xx_ids[] = {
|
|||
{ .type = "soc", },
|
||||
{ .compatible = "soc", },
|
||||
{ .type = "qe", },
|
||||
{ .type = "mdio", },
|
||||
{},
|
||||
};
|
||||
|
||||
|
|
|
@ -36,7 +36,6 @@
|
|||
#include <asm/spu_priv1.h>
|
||||
#include <asm/xmon.h>
|
||||
#include <asm/prom.h>
|
||||
#include "spu_priv1_mmio.h"
|
||||
|
||||
const struct spu_management_ops *spu_management_ops;
|
||||
EXPORT_SYMBOL_GPL(spu_management_ops);
|
||||
|
@ -636,138 +635,6 @@ static ssize_t spu_stat_show(struct sys_device *sysdev, char *buf)
|
|||
|
||||
static SYSDEV_ATTR(stat, 0644, spu_stat_show, NULL);
|
||||
|
||||
/* Hardcoded affinity idxs for QS20 */
|
||||
#define SPES_PER_BE 8
|
||||
static int QS20_reg_idxs[SPES_PER_BE] = { 0, 2, 4, 6, 7, 5, 3, 1 };
|
||||
static int QS20_reg_memory[SPES_PER_BE] = { 1, 1, 0, 0, 0, 0, 0, 0 };
|
||||
|
||||
static struct spu *spu_lookup_reg(int node, u32 reg)
|
||||
{
|
||||
struct spu *spu;
|
||||
|
||||
list_for_each_entry(spu, &cbe_spu_info[node].spus, cbe_list) {
|
||||
if (*(u32 *)get_property(spu_devnode(spu), "reg", NULL) == reg)
|
||||
return spu;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void init_aff_QS20_harcoded(void)
|
||||
{
|
||||
int node, i;
|
||||
struct spu *last_spu, *spu;
|
||||
u32 reg;
|
||||
|
||||
for (node = 0; node < MAX_NUMNODES; node++) {
|
||||
last_spu = NULL;
|
||||
for (i = 0; i < SPES_PER_BE; i++) {
|
||||
reg = QS20_reg_idxs[i];
|
||||
spu = spu_lookup_reg(node, reg);
|
||||
if (!spu)
|
||||
continue;
|
||||
spu->has_mem_affinity = QS20_reg_memory[reg];
|
||||
if (last_spu)
|
||||
list_add_tail(&spu->aff_list,
|
||||
&last_spu->aff_list);
|
||||
last_spu = spu;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int of_has_vicinity(void)
|
||||
{
|
||||
struct spu* spu;
|
||||
|
||||
spu = list_entry(cbe_spu_info[0].spus.next, struct spu, cbe_list);
|
||||
return of_find_property(spu_devnode(spu), "vicinity", NULL) != NULL;
|
||||
}
|
||||
|
||||
static struct spu *aff_devnode_spu(int cbe, struct device_node *dn)
|
||||
{
|
||||
struct spu *spu;
|
||||
|
||||
list_for_each_entry(spu, &cbe_spu_info[cbe].spus, cbe_list)
|
||||
if (spu_devnode(spu) == dn)
|
||||
return spu;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static struct spu *
|
||||
aff_node_next_to(int cbe, struct device_node *target, struct device_node *avoid)
|
||||
{
|
||||
struct spu *spu;
|
||||
const phandle *vic_handles;
|
||||
int lenp, i;
|
||||
|
||||
list_for_each_entry(spu, &cbe_spu_info[cbe].spus, cbe_list) {
|
||||
if (spu_devnode(spu) == avoid)
|
||||
continue;
|
||||
vic_handles = get_property(spu_devnode(spu), "vicinity", &lenp);
|
||||
for (i=0; i < (lenp / sizeof(phandle)); i++) {
|
||||
if (vic_handles[i] == target->linux_phandle)
|
||||
return spu;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void init_aff_fw_vicinity_node(int cbe)
|
||||
{
|
||||
struct spu *spu, *last_spu;
|
||||
struct device_node *vic_dn, *last_spu_dn;
|
||||
phandle avoid_ph;
|
||||
const phandle *vic_handles;
|
||||
const char *name;
|
||||
int lenp, i, added, mem_aff;
|
||||
|
||||
last_spu = list_entry(cbe_spu_info[cbe].spus.next, struct spu, cbe_list);
|
||||
avoid_ph = 0;
|
||||
for (added = 1; added < cbe_spu_info[cbe].n_spus; added++) {
|
||||
last_spu_dn = spu_devnode(last_spu);
|
||||
vic_handles = get_property(last_spu_dn, "vicinity", &lenp);
|
||||
|
||||
for (i = 0; i < (lenp / sizeof(phandle)); i++) {
|
||||
if (vic_handles[i] == avoid_ph)
|
||||
continue;
|
||||
|
||||
vic_dn = of_find_node_by_phandle(vic_handles[i]);
|
||||
if (!vic_dn)
|
||||
continue;
|
||||
|
||||
name = get_property(vic_dn, "name", NULL);
|
||||
if (strcmp(name, "spe") == 0) {
|
||||
spu = aff_devnode_spu(cbe, vic_dn);
|
||||
avoid_ph = last_spu_dn->linux_phandle;
|
||||
}
|
||||
else {
|
||||
mem_aff = strcmp(name, "mic-tm") == 0;
|
||||
spu = aff_node_next_to(cbe, vic_dn, last_spu_dn);
|
||||
if (!spu)
|
||||
continue;
|
||||
if (mem_aff) {
|
||||
last_spu->has_mem_affinity = 1;
|
||||
spu->has_mem_affinity = 1;
|
||||
}
|
||||
avoid_ph = vic_dn->linux_phandle;
|
||||
}
|
||||
list_add_tail(&spu->aff_list, &last_spu->aff_list);
|
||||
last_spu = spu;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void init_aff_fw_vicinity(void)
|
||||
{
|
||||
int cbe;
|
||||
|
||||
/* sets has_mem_affinity for each spu, as long as the
|
||||
* spu->aff_list list, linking each spu to its neighbors
|
||||
*/
|
||||
for (cbe = 0; cbe < MAX_NUMNODES; cbe++)
|
||||
init_aff_fw_vicinity_node(cbe);
|
||||
}
|
||||
|
||||
static int __init init_spu_base(void)
|
||||
{
|
||||
int i, ret = 0;
|
||||
|
@ -811,13 +678,7 @@ static int __init init_spu_base(void)
|
|||
mutex_unlock(&spu_full_list_mutex);
|
||||
spu_add_sysdev_attr(&attr_stat);
|
||||
|
||||
if (of_has_vicinity()) {
|
||||
init_aff_fw_vicinity();
|
||||
} else {
|
||||
long root = of_get_flat_dt_root();
|
||||
if (of_flat_dt_is_compatible(root, "IBM,CPBW-1.0"))
|
||||
init_aff_QS20_harcoded();
|
||||
}
|
||||
spu_init_affinity();
|
||||
|
||||
return 0;
|
||||
|
||||
|
|
|
@ -361,8 +361,171 @@ static int of_destroy_spu(struct spu *spu)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* Hardcoded affinity idxs for qs20 */
|
||||
#define QS20_SPES_PER_BE 8
|
||||
static int qs20_reg_idxs[QS20_SPES_PER_BE] = { 0, 2, 4, 6, 7, 5, 3, 1 };
|
||||
static int qs20_reg_memory[QS20_SPES_PER_BE] = { 1, 1, 0, 0, 0, 0, 0, 0 };
|
||||
|
||||
static struct spu *spu_lookup_reg(int node, u32 reg)
|
||||
{
|
||||
struct spu *spu;
|
||||
u32 *spu_reg;
|
||||
|
||||
list_for_each_entry(spu, &cbe_spu_info[node].spus, cbe_list) {
|
||||
spu_reg = (u32*)of_get_property(spu_devnode(spu), "reg", NULL);
|
||||
if (*spu_reg == reg)
|
||||
return spu;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void init_affinity_qs20_harcoded(void)
|
||||
{
|
||||
int node, i;
|
||||
struct spu *last_spu, *spu;
|
||||
u32 reg;
|
||||
|
||||
for (node = 0; node < MAX_NUMNODES; node++) {
|
||||
last_spu = NULL;
|
||||
for (i = 0; i < QS20_SPES_PER_BE; i++) {
|
||||
reg = qs20_reg_idxs[i];
|
||||
spu = spu_lookup_reg(node, reg);
|
||||
if (!spu)
|
||||
continue;
|
||||
spu->has_mem_affinity = qs20_reg_memory[reg];
|
||||
if (last_spu)
|
||||
list_add_tail(&spu->aff_list,
|
||||
&last_spu->aff_list);
|
||||
last_spu = spu;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int of_has_vicinity(void)
|
||||
{
|
||||
struct spu* spu;
|
||||
|
||||
spu = list_first_entry(&cbe_spu_info[0].spus, struct spu, cbe_list);
|
||||
return of_find_property(spu_devnode(spu), "vicinity", NULL) != NULL;
|
||||
}
|
||||
|
||||
static struct spu *devnode_spu(int cbe, struct device_node *dn)
|
||||
{
|
||||
struct spu *spu;
|
||||
|
||||
list_for_each_entry(spu, &cbe_spu_info[cbe].spus, cbe_list)
|
||||
if (spu_devnode(spu) == dn)
|
||||
return spu;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static struct spu *
|
||||
neighbour_spu(int cbe, struct device_node *target, struct device_node *avoid)
|
||||
{
|
||||
struct spu *spu;
|
||||
struct device_node *spu_dn;
|
||||
const phandle *vic_handles;
|
||||
int lenp, i;
|
||||
|
||||
list_for_each_entry(spu, &cbe_spu_info[cbe].spus, cbe_list) {
|
||||
spu_dn = spu_devnode(spu);
|
||||
if (spu_dn == avoid)
|
||||
continue;
|
||||
vic_handles = of_get_property(spu_dn, "vicinity", &lenp);
|
||||
for (i=0; i < (lenp / sizeof(phandle)); i++) {
|
||||
if (vic_handles[i] == target->linux_phandle)
|
||||
return spu;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void init_affinity_node(int cbe)
|
||||
{
|
||||
struct spu *spu, *last_spu;
|
||||
struct device_node *vic_dn, *last_spu_dn;
|
||||
phandle avoid_ph;
|
||||
const phandle *vic_handles;
|
||||
const char *name;
|
||||
int lenp, i, added;
|
||||
|
||||
last_spu = list_first_entry(&cbe_spu_info[cbe].spus, struct spu,
|
||||
cbe_list);
|
||||
avoid_ph = 0;
|
||||
for (added = 1; added < cbe_spu_info[cbe].n_spus; added++) {
|
||||
last_spu_dn = spu_devnode(last_spu);
|
||||
vic_handles = of_get_property(last_spu_dn, "vicinity", &lenp);
|
||||
|
||||
/*
|
||||
* Walk through each phandle in vicinity property of the spu
|
||||
* (tipically two vicinity phandles per spe node)
|
||||
*/
|
||||
for (i = 0; i < (lenp / sizeof(phandle)); i++) {
|
||||
if (vic_handles[i] == avoid_ph)
|
||||
continue;
|
||||
|
||||
vic_dn = of_find_node_by_phandle(vic_handles[i]);
|
||||
if (!vic_dn)
|
||||
continue;
|
||||
|
||||
/* a neighbour might be spe, mic-tm, or bif0 */
|
||||
name = of_get_property(vic_dn, "name", NULL);
|
||||
if (!name)
|
||||
continue;
|
||||
|
||||
if (strcmp(name, "spe") == 0) {
|
||||
spu = devnode_spu(cbe, vic_dn);
|
||||
avoid_ph = last_spu_dn->linux_phandle;
|
||||
} else {
|
||||
/*
|
||||
* "mic-tm" and "bif0" nodes do not have
|
||||
* vicinity property. So we need to find the
|
||||
* spe which has vic_dn as neighbour, but
|
||||
* skipping the one we came from (last_spu_dn)
|
||||
*/
|
||||
spu = neighbour_spu(cbe, vic_dn, last_spu_dn);
|
||||
if (!spu)
|
||||
continue;
|
||||
if (!strcmp(name, "mic-tm")) {
|
||||
last_spu->has_mem_affinity = 1;
|
||||
spu->has_mem_affinity = 1;
|
||||
}
|
||||
avoid_ph = vic_dn->linux_phandle;
|
||||
}
|
||||
|
||||
list_add_tail(&spu->aff_list, &last_spu->aff_list);
|
||||
last_spu = spu;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void init_affinity_fw(void)
|
||||
{
|
||||
int cbe;
|
||||
|
||||
for (cbe = 0; cbe < MAX_NUMNODES; cbe++)
|
||||
init_affinity_node(cbe);
|
||||
}
|
||||
|
||||
static int __init init_affinity(void)
|
||||
{
|
||||
if (of_has_vicinity()) {
|
||||
init_affinity_fw();
|
||||
} else {
|
||||
long root = of_get_flat_dt_root();
|
||||
if (of_flat_dt_is_compatible(root, "IBM,CPBW-1.0"))
|
||||
init_affinity_qs20_harcoded();
|
||||
else
|
||||
printk("No affinity configuration found");
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
const struct spu_management_ops spu_management_of_ops = {
|
||||
.enumerate_spus = of_enumerate_spus,
|
||||
.create_spu = of_create_spu,
|
||||
.destroy_spu = of_destroy_spu,
|
||||
.init_affinity = init_affinity,
|
||||
};
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
config PPC_PS3
|
||||
bool "Sony PS3 (incomplete)"
|
||||
bool "Sony PS3"
|
||||
depends on PPC_MULTIPLATFORM && PPC64
|
||||
select PPC_CELL
|
||||
select USB_ARCH_HAS_OHCI
|
||||
|
@ -10,10 +10,10 @@ config PPC_PS3
|
|||
select MEMORY_HOTPLUG
|
||||
help
|
||||
This option enables support for the Sony PS3 game console
|
||||
and other platforms using the PS3 hypervisor.
|
||||
Support for this platform is not yet complete, so
|
||||
enabling this will not result in a bootable kernel on a
|
||||
PS3 system.
|
||||
and other platforms using the PS3 hypervisor. Enabling this
|
||||
option will allow building otheros.bld, a kernel image suitable
|
||||
for programming into flash memory, and vmlinux, a kernel image
|
||||
suitable for loading via kexec.
|
||||
|
||||
menu "PS3 Platform Options"
|
||||
depends on PPC_PS3
|
||||
|
|
|
@ -273,55 +273,58 @@ static int ps3stor_wait_for_completion(u64 dev_id, u64 tag,
|
|||
|
||||
static int ps3_storage_wait_for_device(const struct ps3_repository_device *repo)
|
||||
{
|
||||
int error = -ENODEV;
|
||||
int result;
|
||||
const u64 notification_dev_id = (u64)-1LL;
|
||||
const unsigned int timeout = HZ;
|
||||
u64 lpar;
|
||||
u64 tag;
|
||||
void *buf;
|
||||
enum ps3_notify_type {
|
||||
notify_device_ready = 0,
|
||||
notify_region_probe = 1,
|
||||
notify_region_update = 2,
|
||||
};
|
||||
struct {
|
||||
u64 operation_code; /* must be zero */
|
||||
u64 event_mask; /* 1 = device ready */
|
||||
u64 event_mask; /* OR of 1UL << enum ps3_notify_type */
|
||||
} *notify_cmd;
|
||||
struct {
|
||||
u64 event_type; /* notify_device_ready */
|
||||
u64 event_type; /* enum ps3_notify_type */
|
||||
u64 bus_id;
|
||||
u64 dev_id;
|
||||
u64 dev_type;
|
||||
u64 dev_port;
|
||||
} *notify_event;
|
||||
enum {
|
||||
notify_device_ready = 1
|
||||
};
|
||||
|
||||
pr_debug(" -> %s:%u: bus_id %u, dev_id %u, dev_type %u\n", __func__,
|
||||
__LINE__, repo->bus_id, repo->dev_id, repo->dev_type);
|
||||
|
||||
notify_cmd = kzalloc(512, GFP_KERNEL);
|
||||
notify_event = (void *)notify_cmd;
|
||||
if (!notify_cmd)
|
||||
buf = kzalloc(512, GFP_KERNEL);
|
||||
if (!buf)
|
||||
return -ENOMEM;
|
||||
|
||||
lpar = ps3_mm_phys_to_lpar(__pa(notify_cmd));
|
||||
lpar = ps3_mm_phys_to_lpar(__pa(buf));
|
||||
notify_cmd = buf;
|
||||
notify_event = buf;
|
||||
|
||||
result = lv1_open_device(repo->bus_id, notification_dev_id, 0);
|
||||
if (result) {
|
||||
printk(KERN_ERR "%s:%u: lv1_open_device %s\n", __func__,
|
||||
__LINE__, ps3_result(result));
|
||||
result = -ENODEV;
|
||||
goto fail_free;
|
||||
}
|
||||
|
||||
/* Setup and write the request for device notification. */
|
||||
|
||||
notify_cmd->operation_code = 0; /* must be zero */
|
||||
notify_cmd->event_mask = 0x01; /* device ready */
|
||||
notify_cmd->operation_code = 0; /* must be zero */
|
||||
notify_cmd->event_mask = 1UL << notify_region_probe;
|
||||
|
||||
result = lv1_storage_write(notification_dev_id, 0, 0, 1, 0, lpar,
|
||||
&tag);
|
||||
if (result) {
|
||||
printk(KERN_ERR "%s:%u: write failed %s\n", __func__, __LINE__,
|
||||
ps3_result(result));
|
||||
result = -ENODEV;
|
||||
goto fail_close;
|
||||
}
|
||||
|
||||
|
@ -332,13 +335,11 @@ static int ps3_storage_wait_for_device(const struct ps3_repository_device *repo)
|
|||
if (result) {
|
||||
printk(KERN_ERR "%s:%u: write not completed %s\n", __func__,
|
||||
__LINE__, ps3_result(result));
|
||||
result = -ENODEV;
|
||||
goto fail_close;
|
||||
}
|
||||
|
||||
/* Loop here processing the requested notification events. */
|
||||
|
||||
result = -ENODEV;
|
||||
while (1) {
|
||||
memset(notify_event, 0, sizeof(*notify_event));
|
||||
|
||||
|
@ -358,7 +359,7 @@ static int ps3_storage_wait_for_device(const struct ps3_repository_device *repo)
|
|||
break;
|
||||
}
|
||||
|
||||
if (notify_event->event_type != notify_device_ready ||
|
||||
if (notify_event->event_type != notify_region_probe ||
|
||||
notify_event->bus_id != repo->bus_id) {
|
||||
pr_debug("%s:%u: bad notify_event: event %lu, "
|
||||
"dev_id %lu, dev_type %lu\n",
|
||||
|
@ -386,9 +387,9 @@ static int ps3_storage_wait_for_device(const struct ps3_repository_device *repo)
|
|||
fail_close:
|
||||
lv1_close_device(repo->bus_id, notification_dev_id);
|
||||
fail_free:
|
||||
kfree(notify_cmd);
|
||||
kfree(buf);
|
||||
pr_debug(" <- %s:%u\n", __func__, __LINE__);
|
||||
return result;
|
||||
return error;
|
||||
}
|
||||
|
||||
static int ps3_setup_storage_dev(const struct ps3_repository_device *repo,
|
||||
|
|
|
@ -414,10 +414,16 @@ static int __init ps3_enumerate_spus(int (*fn)(void *data))
|
|||
return num_resource_id;
|
||||
}
|
||||
|
||||
static int ps3_init_affinity(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
const struct spu_management_ops spu_management_ps3_ops = {
|
||||
.enumerate_spus = ps3_enumerate_spus,
|
||||
.create_spu = ps3_create_spu,
|
||||
.destroy_spu = ps3_destroy_spu,
|
||||
.init_affinity = ps3_init_affinity,
|
||||
};
|
||||
|
||||
/* spu_priv1_ops */
|
||||
|
|
|
@ -95,7 +95,7 @@ static inline int dma_set_mask(struct device *dev, u64 dma_mask)
|
|||
return -EIO;
|
||||
if (dma_ops->set_dma_mask != NULL)
|
||||
return dma_ops->set_dma_mask(dev, dma_mask);
|
||||
if (!dev->dma_mask || !dma_supported(dev, *dev->dma_mask))
|
||||
if (!dev->dma_mask || !dma_supported(dev, dma_mask))
|
||||
return -EIO;
|
||||
*dev->dma_mask = dma_mask;
|
||||
return 0;
|
||||
|
|
|
@ -178,6 +178,7 @@ struct spu_management_ops {
|
|||
int (*enumerate_spus)(int (*fn)(void *data));
|
||||
int (*create_spu)(struct spu *spu, void *data);
|
||||
int (*destroy_spu)(struct spu *spu);
|
||||
int (*init_affinity)(void);
|
||||
};
|
||||
|
||||
extern const struct spu_management_ops* spu_management_ops;
|
||||
|
@ -200,6 +201,12 @@ spu_destroy_spu (struct spu *spu)
|
|||
return spu_management_ops->destroy_spu(spu);
|
||||
}
|
||||
|
||||
static inline int
|
||||
spu_init_affinity (void)
|
||||
{
|
||||
return spu_management_ops->init_affinity();
|
||||
}
|
||||
|
||||
/*
|
||||
* The declarations folowing are put here for convenience
|
||||
* and only intended to be used by the platform setup code.
|
||||
|
|
Loading…
Reference in a new issue