Commit adb9c9ac authored by Linus Torvalds's avatar Linus Torvalds
parents a80614d1 fb5c594c
This diff is collapsed.
This diff is collapsed.
# #
# Automatically generated make config: don't edit # Automatically generated make config: don't edit
# Linux kernel version: 2.6.15-rc5 # Linux kernel version: 2.6.16-rc2
# Tue Dec 20 15:59:40 2005 # Fri Feb 10 17:33:32 2006
# #
CONFIG_PPC64=y CONFIG_PPC64=y
CONFIG_64BIT=y CONFIG_64BIT=y
...@@ -16,6 +16,10 @@ CONFIG_COMPAT=y ...@@ -16,6 +16,10 @@ CONFIG_COMPAT=y
CONFIG_SYSVIPC_COMPAT=y CONFIG_SYSVIPC_COMPAT=y
CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
CONFIG_ARCH_MAY_HAVE_PC_FDC=y CONFIG_ARCH_MAY_HAVE_PC_FDC=y
CONFIG_PPC_OF=y
CONFIG_PPC_UDBG_16550=y
# CONFIG_GENERIC_TBSYNC is not set
# CONFIG_DEFAULT_UIMAGE is not set
# #
# Processor support # Processor support
...@@ -33,7 +37,6 @@ CONFIG_NR_CPUS=128 ...@@ -33,7 +37,6 @@ CONFIG_NR_CPUS=128
# Code maturity level options # Code maturity level options
# #
CONFIG_EXPERIMENTAL=y CONFIG_EXPERIMENTAL=y
CONFIG_CLEAN_COMPILE=y
CONFIG_LOCK_KERNEL=y CONFIG_LOCK_KERNEL=y
CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_INIT_ENV_ARG_LIMIT=32
...@@ -49,8 +52,6 @@ CONFIG_POSIX_MQUEUE=y ...@@ -49,8 +52,6 @@ CONFIG_POSIX_MQUEUE=y
CONFIG_SYSCTL=y CONFIG_SYSCTL=y
CONFIG_AUDIT=y CONFIG_AUDIT=y
CONFIG_AUDITSYSCALL=y CONFIG_AUDITSYSCALL=y
CONFIG_HOTPLUG=y
CONFIG_KOBJECT_UEVENT=y
CONFIG_IKCONFIG=y CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y CONFIG_IKCONFIG_PROC=y
CONFIG_CPUSETS=y CONFIG_CPUSETS=y
...@@ -60,8 +61,10 @@ CONFIG_CC_OPTIMIZE_FOR_SIZE=y ...@@ -60,8 +61,10 @@ CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_KALLSYMS=y CONFIG_KALLSYMS=y
CONFIG_KALLSYMS_ALL=y CONFIG_KALLSYMS_ALL=y
# CONFIG_KALLSYMS_EXTRA_PASS is not set # CONFIG_KALLSYMS_EXTRA_PASS is not set
CONFIG_HOTPLUG=y
CONFIG_PRINTK=y CONFIG_PRINTK=y
CONFIG_BUG=y CONFIG_BUG=y
CONFIG_ELF_CORE=y
CONFIG_BASE_FULL=y CONFIG_BASE_FULL=y
CONFIG_FUTEX=y CONFIG_FUTEX=y
CONFIG_EPOLL=y CONFIG_EPOLL=y
...@@ -70,8 +73,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0 ...@@ -70,8 +73,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0
CONFIG_CC_ALIGN_LABELS=0 CONFIG_CC_ALIGN_LABELS=0
CONFIG_CC_ALIGN_LOOPS=0 CONFIG_CC_ALIGN_LOOPS=0
CONFIG_CC_ALIGN_JUMPS=0 CONFIG_CC_ALIGN_JUMPS=0
CONFIG_SLAB=y
# CONFIG_TINY_SHMEM is not set # CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0 CONFIG_BASE_SMALL=0
# CONFIG_SLOB is not set
# #
# Loadable module support # Loadable module support
...@@ -113,7 +118,6 @@ CONFIG_PPC_PSERIES=y ...@@ -113,7 +118,6 @@ CONFIG_PPC_PSERIES=y
# CONFIG_PPC_PMAC is not set # CONFIG_PPC_PMAC is not set
# CONFIG_PPC_MAPLE is not set # CONFIG_PPC_MAPLE is not set
# CONFIG_PPC_CELL is not set # CONFIG_PPC_CELL is not set
CONFIG_PPC_OF=y
CONFIG_XICS=y CONFIG_XICS=y
# CONFIG_U3_DART is not set # CONFIG_U3_DART is not set
CONFIG_MPIC=y CONFIG_MPIC=y
...@@ -123,8 +127,8 @@ CONFIG_RTAS_PROC=y ...@@ -123,8 +127,8 @@ CONFIG_RTAS_PROC=y
CONFIG_RTAS_FLASH=m CONFIG_RTAS_FLASH=m
# CONFIG_MMIO_NVRAM is not set # CONFIG_MMIO_NVRAM is not set
CONFIG_IBMVIO=y CONFIG_IBMVIO=y
# CONFIG_IBMEBUS is not set
# CONFIG_PPC_MPC106 is not set # CONFIG_PPC_MPC106 is not set
# CONFIG_GENERIC_TBSYNC is not set
# CONFIG_CPU_FREQ is not set # CONFIG_CPU_FREQ is not set
# CONFIG_WANT_EARLY_SERIAL is not set # CONFIG_WANT_EARLY_SERIAL is not set
...@@ -145,6 +149,7 @@ CONFIG_FORCE_MAX_ZONEORDER=13 ...@@ -145,6 +149,7 @@ CONFIG_FORCE_MAX_ZONEORDER=13
CONFIG_IOMMU_VMERGE=y CONFIG_IOMMU_VMERGE=y
CONFIG_HOTPLUG_CPU=y CONFIG_HOTPLUG_CPU=y
CONFIG_KEXEC=y CONFIG_KEXEC=y
# CONFIG_CRASH_DUMP is not set
CONFIG_IRQ_ALL_CPUS=y CONFIG_IRQ_ALL_CPUS=y
CONFIG_PPC_SPLPAR=y CONFIG_PPC_SPLPAR=y
CONFIG_EEH=y CONFIG_EEH=y
...@@ -165,6 +170,7 @@ CONFIG_HAVE_MEMORY_PRESENT=y ...@@ -165,6 +170,7 @@ CONFIG_HAVE_MEMORY_PRESENT=y
CONFIG_SPARSEMEM_EXTREME=y CONFIG_SPARSEMEM_EXTREME=y
# CONFIG_MEMORY_HOTPLUG is not set # CONFIG_MEMORY_HOTPLUG is not set
CONFIG_SPLIT_PTLOCK_CPUS=4 CONFIG_SPLIT_PTLOCK_CPUS=4
CONFIG_MIGRATION=y
CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y
# CONFIG_PPC_64K_PAGES is not set # CONFIG_PPC_64K_PAGES is not set
CONFIG_SCHED_SMT=y CONFIG_SCHED_SMT=y
...@@ -209,6 +215,7 @@ CONFIG_NET=y ...@@ -209,6 +215,7 @@ CONFIG_NET=y
# #
# Networking options # Networking options
# #
# CONFIG_NETDEBUG is not set
CONFIG_PACKET=y CONFIG_PACKET=y
# CONFIG_PACKET_MMAP is not set # CONFIG_PACKET_MMAP is not set
CONFIG_UNIX=y CONFIG_UNIX=y
...@@ -248,6 +255,7 @@ CONFIG_NETFILTER=y ...@@ -248,6 +255,7 @@ CONFIG_NETFILTER=y
CONFIG_NETFILTER_NETLINK=y CONFIG_NETFILTER_NETLINK=y
CONFIG_NETFILTER_NETLINK_QUEUE=m CONFIG_NETFILTER_NETLINK_QUEUE=m
CONFIG_NETFILTER_NETLINK_LOG=m CONFIG_NETFILTER_NETLINK_LOG=m
# CONFIG_NETFILTER_XTABLES is not set
# #
# IP: Netfilter Configuration # IP: Netfilter Configuration
...@@ -265,65 +273,6 @@ CONFIG_IP_NF_TFTP=m ...@@ -265,65 +273,6 @@ CONFIG_IP_NF_TFTP=m
CONFIG_IP_NF_AMANDA=m CONFIG_IP_NF_AMANDA=m
# CONFIG_IP_NF_PPTP is not set # CONFIG_IP_NF_PPTP is not set
CONFIG_IP_NF_QUEUE=m CONFIG_IP_NF_QUEUE=m
CONFIG_IP_NF_IPTABLES=m
CONFIG_IP_NF_MATCH_LIMIT=m
CONFIG_IP_NF_MATCH_IPRANGE=m
CONFIG_IP_NF_MATCH_MAC=m
CONFIG_IP_NF_MATCH_PKTTYPE=m
CONFIG_IP_NF_MATCH_MARK=m
CONFIG_IP_NF_MATCH_MULTIPORT=m
CONFIG_IP_NF_MATCH_TOS=m
CONFIG_IP_NF_MATCH_RECENT=m
CONFIG_IP_NF_MATCH_ECN=m
CONFIG_IP_NF_MATCH_DSCP=m
CONFIG_IP_NF_MATCH_AH_ESP=m
CONFIG_IP_NF_MATCH_LENGTH=m
CONFIG_IP_NF_MATCH_TTL=m
CONFIG_IP_NF_MATCH_TCPMSS=m
CONFIG_IP_NF_MATCH_HELPER=m
CONFIG_IP_NF_MATCH_STATE=m
CONFIG_IP_NF_MATCH_CONNTRACK=m
CONFIG_IP_NF_MATCH_OWNER=m
CONFIG_IP_NF_MATCH_ADDRTYPE=m
CONFIG_IP_NF_MATCH_REALM=m
CONFIG_IP_NF_MATCH_SCTP=m
# CONFIG_IP_NF_MATCH_DCCP is not set
CONFIG_IP_NF_MATCH_COMMENT=m
CONFIG_IP_NF_MATCH_CONNMARK=m
CONFIG_IP_NF_MATCH_CONNBYTES=m
CONFIG_IP_NF_MATCH_HASHLIMIT=m
CONFIG_IP_NF_MATCH_STRING=m
CONFIG_IP_NF_FILTER=m
CONFIG_IP_NF_TARGET_REJECT=m
CONFIG_IP_NF_TARGET_LOG=m
CONFIG_IP_NF_TARGET_ULOG=m
CONFIG_IP_NF_TARGET_TCPMSS=m
CONFIG_IP_NF_TARGET_NFQUEUE=m
CONFIG_IP_NF_NAT=m
CONFIG_IP_NF_NAT_NEEDED=y
CONFIG_IP_NF_TARGET_MASQUERADE=m
CONFIG_IP_NF_TARGET_REDIRECT=m
CONFIG_IP_NF_TARGET_NETMAP=m
CONFIG_IP_NF_TARGET_SAME=m
CONFIG_IP_NF_NAT_SNMP_BASIC=m
CONFIG_IP_NF_NAT_IRC=m
CONFIG_IP_NF_NAT_FTP=m
CONFIG_IP_NF_NAT_TFTP=m
CONFIG_IP_NF_NAT_AMANDA=m
CONFIG_IP_NF_MANGLE=m
CONFIG_IP_NF_TARGET_TOS=m
CONFIG_IP_NF_TARGET_ECN=m
CONFIG_IP_NF_TARGET_DSCP=m
CONFIG_IP_NF_TARGET_MARK=m
CONFIG_IP_NF_TARGET_CLASSIFY=m
CONFIG_IP_NF_TARGET_TTL=m
CONFIG_IP_NF_TARGET_CONNMARK=m
CONFIG_IP_NF_TARGET_CLUSTERIP=m
CONFIG_IP_NF_RAW=m
CONFIG_IP_NF_TARGET_NOTRACK=m
CONFIG_IP_NF_ARPTABLES=m
CONFIG_IP_NF_ARPFILTER=m
CONFIG_IP_NF_ARP_MANGLE=m
# #
# DCCP Configuration (EXPERIMENTAL) # DCCP Configuration (EXPERIMENTAL)
...@@ -334,6 +283,11 @@ CONFIG_IP_NF_ARP_MANGLE=m ...@@ -334,6 +283,11 @@ CONFIG_IP_NF_ARP_MANGLE=m
# SCTP Configuration (EXPERIMENTAL) # SCTP Configuration (EXPERIMENTAL)
# #
# CONFIG_IP_SCTP is not set # CONFIG_IP_SCTP is not set
#
# TIPC Configuration (EXPERIMENTAL)
#
# CONFIG_TIPC is not set
# CONFIG_ATM is not set # CONFIG_ATM is not set
# CONFIG_BRIDGE is not set # CONFIG_BRIDGE is not set
# CONFIG_VLAN_8021Q is not set # CONFIG_VLAN_8021Q is not set
...@@ -352,7 +306,6 @@ CONFIG_LLC=y ...@@ -352,7 +306,6 @@ CONFIG_LLC=y
# QoS and/or fair queueing # QoS and/or fair queueing
# #
# CONFIG_NET_SCHED is not set # CONFIG_NET_SCHED is not set
CONFIG_NET_CLS_ROUTE=y
# #
# Network testing # Network testing
...@@ -550,13 +503,7 @@ CONFIG_SCSI_IPR_TRACE=y ...@@ -550,13 +503,7 @@ CONFIG_SCSI_IPR_TRACE=y
CONFIG_SCSI_IPR_DUMP=y CONFIG_SCSI_IPR_DUMP=y
# CONFIG_SCSI_QLOGIC_FC is not set # CONFIG_SCSI_QLOGIC_FC is not set
# CONFIG_SCSI_QLOGIC_1280 is not set # CONFIG_SCSI_QLOGIC_1280 is not set
CONFIG_SCSI_QLA2XXX=y # CONFIG_SCSI_QLA_FC is not set
CONFIG_SCSI_QLA21XX=m
CONFIG_SCSI_QLA22XX=m
CONFIG_SCSI_QLA2300=m
CONFIG_SCSI_QLA2322=m
CONFIG_SCSI_QLA6312=m
CONFIG_SCSI_QLA24XX=m
CONFIG_SCSI_LPFC=m CONFIG_SCSI_LPFC=m
# CONFIG_SCSI_DC395x is not set # CONFIG_SCSI_DC395x is not set
# CONFIG_SCSI_DC390T is not set # CONFIG_SCSI_DC390T is not set
...@@ -678,6 +625,7 @@ CONFIG_E1000=y ...@@ -678,6 +625,7 @@ CONFIG_E1000=y
# CONFIG_R8169 is not set # CONFIG_R8169 is not set
# CONFIG_SIS190 is not set # CONFIG_SIS190 is not set
# CONFIG_SKGE is not set # CONFIG_SKGE is not set
# CONFIG_SKY2 is not set
# CONFIG_SK98LIN is not set # CONFIG_SK98LIN is not set
# CONFIG_VIA_VELOCITY is not set # CONFIG_VIA_VELOCITY is not set
CONFIG_TIGON3=y CONFIG_TIGON3=y
...@@ -803,6 +751,7 @@ CONFIG_HW_CONSOLE=y ...@@ -803,6 +751,7 @@ CONFIG_HW_CONSOLE=y
CONFIG_SERIAL_8250=y CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_SERIAL_8250_NR_UARTS=4 CONFIG_SERIAL_8250_NR_UARTS=4
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
# CONFIG_SERIAL_8250_EXTENDED is not set # CONFIG_SERIAL_8250_EXTENDED is not set
# #
...@@ -908,6 +857,12 @@ CONFIG_I2C_ALGOBIT=y ...@@ -908,6 +857,12 @@ CONFIG_I2C_ALGOBIT=y
# CONFIG_I2C_DEBUG_BUS is not set # CONFIG_I2C_DEBUG_BUS is not set
# CONFIG_I2C_DEBUG_CHIP is not set # CONFIG_I2C_DEBUG_CHIP is not set
#
# SPI support
#
# CONFIG_SPI is not set
# CONFIG_SPI_MASTER is not set
# #
# Dallas's 1-wire bus # Dallas's 1-wire bus
# #
...@@ -976,7 +931,6 @@ CONFIG_FB_RADEON_I2C=y ...@@ -976,7 +931,6 @@ CONFIG_FB_RADEON_I2C=y
# CONFIG_FB_KYRO is not set # CONFIG_FB_KYRO is not set
# CONFIG_FB_3DFX is not set # CONFIG_FB_3DFX is not set
# CONFIG_FB_VOODOO1 is not set # CONFIG_FB_VOODOO1 is not set
# CONFIG_FB_CYBLA is not set
# CONFIG_FB_TRIDENT is not set # CONFIG_FB_TRIDENT is not set
# CONFIG_FB_VIRTUAL is not set # CONFIG_FB_VIRTUAL is not set
...@@ -1061,12 +1015,15 @@ CONFIG_USB_STORAGE=y ...@@ -1061,12 +1015,15 @@ CONFIG_USB_STORAGE=y
# CONFIG_USB_STORAGE_SDDR09 is not set # CONFIG_USB_STORAGE_SDDR09 is not set
# CONFIG_USB_STORAGE_SDDR55 is not set # CONFIG_USB_STORAGE_SDDR55 is not set
# CONFIG_USB_STORAGE_JUMPSHOT is not set # CONFIG_USB_STORAGE_JUMPSHOT is not set
# CONFIG_USB_STORAGE_ALAUDA is not set
# CONFIG_USB_LIBUSUAL is not set
# #
# USB Input Devices # USB Input Devices
# #
CONFIG_USB_HID=y CONFIG_USB_HID=y
CONFIG_USB_HIDINPUT=y CONFIG_USB_HIDINPUT=y
# CONFIG_USB_HIDINPUT_POWERBOOK is not set
# CONFIG_HID_FF is not set # CONFIG_HID_FF is not set
CONFIG_USB_HIDDEV=y CONFIG_USB_HIDDEV=y
# CONFIG_USB_AIPTEK is not set # CONFIG_USB_AIPTEK is not set
...@@ -1080,6 +1037,7 @@ CONFIG_USB_HIDDEV=y ...@@ -1080,6 +1037,7 @@ CONFIG_USB_HIDDEV=y
# CONFIG_USB_YEALINK is not set # CONFIG_USB_YEALINK is not set
# CONFIG_USB_XPAD is not set # CONFIG_USB_XPAD is not set
# CONFIG_USB_ATI_REMOTE is not set # CONFIG_USB_ATI_REMOTE is not set
# CONFIG_USB_ATI_REMOTE2 is not set
# CONFIG_USB_KEYSPAN_REMOTE is not set # CONFIG_USB_KEYSPAN_REMOTE is not set
# CONFIG_USB_APPLETOUCH is not set # CONFIG_USB_APPLETOUCH is not set
...@@ -1166,6 +1124,10 @@ CONFIG_INFINIBAND_IPOIB=m ...@@ -1166,6 +1124,10 @@ CONFIG_INFINIBAND_IPOIB=m
# SN Devices # SN Devices
# #
#
# EDAC - error detection and reporting (RAS)
#
# #
# File systems # File systems
# #
...@@ -1200,6 +1162,7 @@ CONFIG_XFS_EXPORT=y ...@@ -1200,6 +1162,7 @@ CONFIG_XFS_EXPORT=y
CONFIG_XFS_SECURITY=y CONFIG_XFS_SECURITY=y
CONFIG_XFS_POSIX_ACL=y CONFIG_XFS_POSIX_ACL=y
# CONFIG_XFS_RT is not set # CONFIG_XFS_RT is not set
# CONFIG_OCFS2_FS is not set
# CONFIG_MINIX_FS is not set # CONFIG_MINIX_FS is not set
# CONFIG_ROMFS_FS is not set # CONFIG_ROMFS_FS is not set
CONFIG_INOTIFY=y CONFIG_INOTIFY=y
...@@ -1240,6 +1203,7 @@ CONFIG_HUGETLBFS=y ...@@ -1240,6 +1203,7 @@ CONFIG_HUGETLBFS=y
CONFIG_HUGETLB_PAGE=y CONFIG_HUGETLB_PAGE=y
CONFIG_RAMFS=y CONFIG_RAMFS=y
# CONFIG_RELAYFS_FS is not set # CONFIG_RELAYFS_FS is not set
# CONFIG_CONFIGFS_FS is not set
# #
# Miscellaneous filesystems # Miscellaneous filesystems
...@@ -1351,10 +1315,6 @@ CONFIG_CRC32=y ...@@ -1351,10 +1315,6 @@ CONFIG_CRC32=y
CONFIG_LIBCRC32C=m CONFIG_LIBCRC32C=m
CONFIG_ZLIB_INFLATE=y CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=m CONFIG_ZLIB_DEFLATE=m
CONFIG_TEXTSEARCH=y
CONFIG_TEXTSEARCH_KMP=m
CONFIG_TEXTSEARCH_BM=m
CONFIG_TEXTSEARCH_FSM=m
# #
# Instrumentation Support # Instrumentation Support
...@@ -1367,18 +1327,20 @@ CONFIG_OPROFILE=y ...@@ -1367,18 +1327,20 @@ CONFIG_OPROFILE=y
# Kernel hacking # Kernel hacking
# #
# CONFIG_PRINTK_TIME is not set # CONFIG_PRINTK_TIME is not set
CONFIG_DEBUG_KERNEL=y
CONFIG_MAGIC_SYSRQ=y CONFIG_MAGIC_SYSRQ=y
CONFIG_DEBUG_KERNEL=y
CONFIG_LOG_BUF_SHIFT=17 CONFIG_LOG_BUF_SHIFT=17
CONFIG_DETECT_SOFTLOCKUP=y CONFIG_DETECT_SOFTLOCKUP=y
# CONFIG_SCHEDSTATS is not set # CONFIG_SCHEDSTATS is not set
# CONFIG_DEBUG_SLAB is not set # CONFIG_DEBUG_SLAB is not set
CONFIG_DEBUG_MUTEXES=y
# CONFIG_DEBUG_SPINLOCK is not set # CONFIG_DEBUG_SPINLOCK is not set
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set # CONFIG_DEBUG_SPINLOCK_SLEEP is not set
# CONFIG_DEBUG_KOBJECT is not set # CONFIG_DEBUG_KOBJECT is not set
# CONFIG_DEBUG_INFO is not set # CONFIG_DEBUG_INFO is not set
CONFIG_DEBUG_FS=y CONFIG_DEBUG_FS=y
# CONFIG_DEBUG_VM is not set # CONFIG_DEBUG_VM is not set
CONFIG_FORCED_INLINING=y
# CONFIG_RCU_TORTURE_TEST is not set # CONFIG_RCU_TORTURE_TEST is not set
CONFIG_DEBUG_STACKOVERFLOW=y CONFIG_DEBUG_STACKOVERFLOW=y
CONFIG_DEBUG_STACK_USAGE=y CONFIG_DEBUG_STACK_USAGE=y
...@@ -1387,6 +1349,11 @@ CONFIG_XMON=y ...@@ -1387,6 +1349,11 @@ CONFIG_XMON=y
CONFIG_XMON_DEFAULT=y CONFIG_XMON_DEFAULT=y
CONFIG_IRQSTACKS=y CONFIG_IRQSTACKS=y
# CONFIG_BOOTX_TEXT is not set # CONFIG_BOOTX_TEXT is not set
# CONFIG_PPC_EARLY_DEBUG_LPAR is not set
# CONFIG_PPC_EARLY_DEBUG_G5 is not set
# CONFIG_PPC_EARLY_DEBUG_RTAS is not set
# CONFIG_PPC_EARLY_DEBUG_MAPLE is not set
# CONFIG_PPC_EARLY_DEBUG_ISERIES is not set
# #
# Security options # Security options
......
...@@ -134,8 +134,10 @@ static void crash_kexec_prepare_cpus(void) ...@@ -134,8 +134,10 @@ static void crash_kexec_prepare_cpus(void)
* the crash CPU will send an IPI and wait for other CPUs to * the crash CPU will send an IPI and wait for other CPUs to
* respond. If not, proceed the kexec boot even though we failed to * respond. If not, proceed the kexec boot even though we failed to
* capture other CPU states. * capture other CPU states.
* Delay of at least 10 seconds.
*/ */
msecs = 1000000; printk(KERN_ALERT "Sending IPI to other cpus...\n");
msecs = 10000;
while ((atomic_read(&waiting_for_crash_ipi) > 0) && (--msecs > 0)) { while ((atomic_read(&waiting_for_crash_ipi) > 0) && (--msecs > 0)) {
barrier(); barrier();
mdelay(1); mdelay(1);
......
...@@ -714,6 +714,7 @@ AltiVecUnavailable: ...@@ -714,6 +714,7 @@ AltiVecUnavailable:
#ifdef CONFIG_ALTIVEC #ifdef CONFIG_ALTIVEC
bne load_up_altivec /* if from user, just load it up */ bne load_up_altivec /* if from user, just load it up */
#endif /* CONFIG_ALTIVEC */ #endif /* CONFIG_ALTIVEC */
addi r3,r1,STACK_FRAME_OVERHEAD
EXC_XFER_EE_LITE(0xf20, altivec_unavailable_exception) EXC_XFER_EE_LITE(0xf20, altivec_unavailable_exception)
PerformanceMonitor: PerformanceMonitor:
......
...@@ -139,7 +139,7 @@ _GLOBAL(__secondary_hold) ...@@ -139,7 +139,7 @@ _GLOBAL(__secondary_hold)
ori r24,r24,MSR_RI ori r24,r24,MSR_RI
mtmsrd r24 /* RI on */ mtmsrd r24 /* RI on */
/* Grab our linux cpu number */ /* Grab our physical cpu number */
mr r24,r3 mr r24,r3
/* Tell the master cpu we're here */ /* Tell the master cpu we're here */
...@@ -153,11 +153,7 @@ _GLOBAL(__secondary_hold) ...@@ -153,11 +153,7 @@ _GLOBAL(__secondary_hold)
cmpdi 0,r4,1 cmpdi 0,r4,1
bne 100b bne 100b
#ifdef CONFIG_HMT #if defined(CONFIG_SMP) || defined(CONFIG_KEXEC)
SET_REG_IMMEDIATE(r4, .hmt_init)
mtctr r4
bctr
#elif defined(CONFIG_SMP) || defined(CONFIG_KEXEC)
LOAD_REG_IMMEDIATE(r4, .pSeries_secondary_smp_init) LOAD_REG_IMMEDIATE(r4, .pSeries_secondary_smp_init)
mtctr r4 mtctr r4
mr r3,r24 mr r3,r24
...@@ -319,7 +315,6 @@ exception_marker: ...@@ -319,7 +315,6 @@ exception_marker:
label##_pSeries: \ label##_pSeries: \
HMT_MEDIUM; \ HMT_MEDIUM; \
mtspr SPRN_SPRG1,r13; /* save r13 */ \ mtspr SPRN_SPRG1,r13; /* save r13 */ \
RUNLATCH_ON(r13); \
EXCEPTION_PROLOG_PSERIES(PACA_EXGEN, label##_common) EXCEPTION_PROLOG_PSERIES(PACA_EXGEN, label##_common)
#define STD_EXCEPTION_ISERIES(n, label, area) \ #define STD_EXCEPTION_ISERIES(n, label, area) \
...@@ -327,7 +322,6 @@ label##_pSeries: \ ...@@ -327,7 +322,6 @@ label##_pSeries: \
label##_iSeries: \ label##_iSeries: \
HMT_MEDIUM; \ HMT_MEDIUM; \
mtspr SPRN_SPRG1,r13; /* save r13 */ \ mtspr SPRN_SPRG1,r13; /* save r13 */ \
RUNLATCH_ON(r13); \
EXCEPTION_PROLOG_ISERIES_1(area); \ EXCEPTION_PROLOG_ISERIES_1(area); \
EXCEPTION_PROLOG_ISERIES_2; \ EXCEPTION_PROLOG_ISERIES_2; \
b label##_common b label##_common
...@@ -337,7 +331,6 @@ label##_iSeries: \ ...@@ -337,7 +331,6 @@ label##_iSeries: \
label##_iSeries: \ label##_iSeries: \
HMT_MEDIUM; \ HMT_MEDIUM; \
mtspr SPRN_SPRG1,r13; /* save r13 */ \ mtspr SPRN_SPRG1,r13; /* save r13 */ \
RUNLATCH_ON(r13); \
EXCEPTION_PROLOG_ISERIES_1(PACA_EXGEN); \ EXCEPTION_PROLOG_ISERIES_1(PACA_EXGEN); \
lbz r10,PACAPROCENABLED(r13); \ lbz r10,PACAPROCENABLED(r13); \
cmpwi 0,r10,0; \ cmpwi 0,r10,0; \
...@@ -390,6 +383,7 @@ label##_common: \ ...@@ -390,6 +383,7 @@ label##_common: \
label##_common: \ label##_common: \
EXCEPTION_PROLOG_COMMON(trap, PACA_EXGEN); \ EXCEPTION_PROLOG_COMMON(trap, PACA_EXGEN); \
DISABLE_INTS; \ DISABLE_INTS; \
bl .ppc64_runlatch_on; \
addi r3,r1,STACK_FRAME_OVERHEAD; \ addi r3,r1,STACK_FRAME_OVERHEAD; \
bl hdlr; \ bl hdlr; \
b .ret_from_except_lite b .ret_from_except_lite
...@@ -407,7 +401,6 @@ __start_interrupts: ...@@ -407,7 +401,6 @@ __start_interrupts:
_machine_check_pSeries: _machine_check_pSeries:
HMT_MEDIUM HMT_MEDIUM
mtspr SPRN_SPRG1,r13 /* save r13 */ mtspr SPRN_SPRG1,r13 /* save r13 */
RUNLATCH_ON(r13)
EXCEPTION_PROLOG_PSERIES(PACA_EXMC, machine_check_common) EXCEPTION_PROLOG_PSERIES(PACA_EXMC, machine_check_common)
. = 0x300 . = 0x300
...@@ -434,7 +427,6 @@ END_FTR_SECTION_IFCLR(CPU_FTR_SLB) ...@@ -434,7 +427,6 @@ END_FTR_SECTION_IFCLR(CPU_FTR_SLB)
data_access_slb_pSeries: data_access_slb_pSeries:
HMT_MEDIUM HMT_MEDIUM
mtspr SPRN_SPRG1,r13 mtspr SPRN_SPRG1,r13
RUNLATCH_ON(r13)
mfspr r13,SPRN_SPRG3 /* get paca address into r13 */ mfspr r13,SPRN_SPRG3 /* get paca address into r13 */
std r3,PACA_EXSLB+EX_R3(r13) std r3,PACA_EXSLB+EX_R3(r13)
mfspr r3,SPRN_DAR mfspr r3,SPRN_DAR
...@@ -460,7 +452,6 @@ data_access_slb_pSeries: ...@@ -460,7 +452,6 @@ data_access_slb_pSeries:
instruction_access_slb_pSeries: instruction_access_slb_pSeries:
HMT_MEDIUM HMT_MEDIUM
mtspr SPRN_SPRG1,r13 mtspr SPRN_SPRG1,r13
RUNLATCH_ON(r13)
mfspr r13,SPRN_SPRG3 /* get paca address into r13 */ mfspr r13,SPRN_SPRG3 /* get paca address into r13 */
std r3,PACA_EXSLB+EX_R3(r13) std r3,PACA_EXSLB+EX_R3(r13)
mfspr r3,SPRN_SRR0 /* SRR0 is faulting address */ mfspr r3,SPRN_SRR0 /* SRR0 is faulting address */
...@@ -491,7 +482,6 @@ instruction_access_slb_pSeries: ...@@ -491,7 +482,6 @@ instruction_access_slb_pSeries:
.globl system_call_pSeries .globl system_call_pSeries
system_call_pSeries: system_call_pSeries:
HMT_MEDIUM HMT_MEDIUM
RUNLATCH_ON(r9)
mr r9,r13 mr r9,r13
mfmsr r10 mfmsr r10
mfspr r13,SPRN_SPRG3 mfspr r13,SPRN_SPRG3
...@@ -575,7 +565,6 @@ slb_miss_user_pseries: ...@@ -575,7 +565,6 @@ slb_miss_user_pseries:
system_reset_fwnmi: system_reset_fwnmi:
HMT_MEDIUM HMT_MEDIUM
mtspr SPRN_SPRG1,r13 /* save r13 */ mtspr SPRN_SPRG1,r13 /* save r13 */
RUNLATCH_ON(r13)
EXCEPTION_PROLOG_PSERIES(PACA_EXGEN, system_reset_common) EXCEPTION_PROLOG_PSERIES(PACA_EXGEN, system_reset_common)
.globl machine_check_fwnmi .globl machine_check_fwnmi
...@@ -583,7 +572,6 @@ system_reset_fwnmi: ...@@ -583,7 +572,6 @@ system_reset_fwnmi:
machine_check_fwnmi: machine_check_fwnmi:
HMT_MEDIUM HMT_MEDIUM
mtspr SPRN_SPRG1,r13 /* save r13 */ mtspr SPRN_SPRG1,r13 /* save r13 */
RUNLATCH_ON(r13)
EXCEPTION_PROLOG_PSERIES(PACA_EXMC, machine_check_common) EXCEPTION_PROLOG_PSERIES(PACA_EXMC, machine_check_common)
#ifdef CONFIG_PPC_ISERIES #ifdef CONFIG_PPC_ISERIES
...@@ -894,7 +882,6 @@ unrecov_fer: ...@@ -894,7 +882,6 @@ unrecov_fer:
.align 7 .align 7
.globl data_access_common .globl data_access_common
data_access_common: data_access_common:
RUNLATCH_ON(r10) /* It wont fit in the 0x300 handler */
mfspr r10,SPRN_DAR mfspr r10,SPRN_DAR
std r10,PACA_EXGEN+EX_DAR(r13) std r10,PACA_EXGEN+EX_DAR(r13)
mfspr r10,SPRN_DSISR mfspr r10,SPRN_DSISR
...@@ -1042,6 +1029,7 @@ hardware_interrupt_common: ...@@ -1042,6 +1029,7 @@ hardware_interrupt_common:
EXCEPTION_PROLOG_COMMON(0x500, PACA_EXGEN) EXCEPTION_PROLOG_COMMON(0x500, PACA_EXGEN)
hardware_interrupt_entry: hardware_interrupt_entry:
DISABLE_INTS DISABLE_INTS
bl .ppc64_runlatch_on
addi r3,r1,STACK_FRAME_OVERHEAD addi r3,r1,STACK_FRAME_OVERHEAD
bl .do_IRQ bl .do_IRQ
b .ret_from_except_lite b .ret_from_except_lite
...@@ -1816,22 +1804,6 @@ _STATIC(start_here_multiplatform) ...@@ -1816,22 +1804,6 @@ _STATIC(start_here_multiplatform)
ori r6,r6,MSR_RI ori r6,r6,MSR_RI
mtmsrd r6 /* RI on */ mtmsrd r6 /* RI on */
#ifdef CONFIG_HMT
/* Start up the second thread on cpu 0 */
mfspr r3,SPRN_PVR
srwi r3,r3,16
cmpwi r3,0x34 /* Pulsar */
beq 90f
cmpwi r3,0x36 /* Icestar */
beq 90f
cmpwi r3,0x37 /* SStar */
beq 90f
b 91f /* HMT not supported */
90: li r3,0
bl .hmt_start_secondary
91:
#endif
/* The following gets the stack and TOC set up with the regs */ /* The following gets the stack and TOC set up with the regs */
/* pointing to the real addr of the kernel stack. This is */ /* pointing to the real addr of the kernel stack. This is */
/* all done to support the C function call below which sets */ /* all done to support the C function call below which sets */
...@@ -1945,77 +1917,8 @@ _STATIC(start_here_common) ...@@ -1945,77 +1917,8 @@ _STATIC(start_here_common)
bl .start_kernel bl .start_kernel
_GLOBAL(hmt_init) /* Not reached */
#ifdef CONFIG_HMT BUG_OPCODE
LOAD_REG_IMMEDIATE(r5, hmt_thread_data)
mfspr r7,SPRN_PVR
srwi r7,r7,16
cmpwi r7,0x34 /* Pulsar */
beq 90f
cmpwi r7,0x36 /* Icestar */
beq 91f
cmpwi r7,0x37 /* SStar */
beq 91f
b 101f
90: mfspr r6,SPRN_PIR
andi. r6,r6,0x1f
b 92f
91: mfspr r6,SPRN_PIR
andi. r6,r6,0x3ff
92: sldi r4,r24,3
stwx r6,r5,r4
bl .hmt_start_secondary
b 101f
__hmt_secondary_hold:
LOAD_REG_IMMEDIATE(r5, hmt_thread_data)
clrldi r5,r5,4
li r7,0
mfspr r6,SPRN_PIR
mfspr r8,SPRN_PVR
srwi r8,r8,16
cmpwi r8,0x34
bne 93f
andi. r6,r6,0x1f
b 103f
93: andi. r6,r6,0x3f
103: lwzx r8,r5,r7
cmpw r8,r6
beq 104f
addi r7,r7,8
b 103b
104: addi r7,r7,4
lwzx r9,r5,r7
mr r24,r9
101:
#endif
mr r3,r24
b .pSeries_secondary_smp_init
#ifdef CONFIG_HMT
_GLOBAL(hmt_start_secondary)
LOAD_REG_IMMEDIATE(r4,__hmt_secondary_hold)
clrldi r4,r4,4
mtspr SPRN_NIADORM, r4
mfspr r4, SPRN_MSRDORM
li r5, -65
and r4, r4, r5
mtspr SPRN_MSRDORM, r4
lis r4,0xffef
ori r4,r4,0x7403
mtspr SPRN_TSC, r4
li r4,0x1f4
mtspr SPRN_TST, r4
mfspr r4, SPRN_HID0
ori r4, r4, 0x1
mtspr SPRN_HID0, r4
mfspr r4, SPRN_CTRLF
oris r4, r4, 0x40
mtspr SPRN_CTRLT, r4
blr
#endif
/* /*
* We put a few things here that have to be page-aligned. * We put a few things here that have to be page-aligned.
......
...@@ -26,8 +26,6 @@ ...@@ -26,8 +26,6 @@
#include <asm/prom.h> #include <asm/prom.h>
#include <asm/smp.h> #include <asm/smp.h>
#define HASH_GROUP_SIZE 0x80 /* size of each hash group, asm/mmu.h */
int default_machine_kexec_prepare(struct kimage *image) int default_machine_kexec_prepare(struct kimage *image)
{ {
int i; int i;
...@@ -61,7 +59,7 @@ int default_machine_kexec_prepare(struct kimage *image) ...@@ -61,7 +59,7 @@ int default_machine_kexec_prepare(struct kimage *image)
*/ */
if (htab_address) { if (htab_address) {
low = __pa(htab_address); low = __pa(htab_address);
high = low + (htab_hash_mask + 1) * HASH_GROUP_SIZE; high = low + htab_size_bytes;
for (i = 0; i < image->nr_segments; i++) { for (i = 0; i < image->nr_segments; i++) {
begin = image->segment[i].mem; begin = image->segment[i].mem;
...@@ -294,7 +292,7 @@ void default_machine_kexec(struct kimage *image) ...@@ -294,7 +292,7 @@ void default_machine_kexec(struct kimage *image)
} }
/* Values we need to export to the second kernel via the device tree. */ /* Values we need to export to the second kernel via the device tree. */
static unsigned long htab_base, htab_size, kernel_end; static unsigned long htab_base, kernel_end;
static struct property htab_base_prop = { static struct property htab_base_prop = {
.name = "linux,htab-base", .name = "linux,htab-base",
...@@ -305,7 +303,7 @@ static struct property htab_base_prop = { ...@@ -305,7 +303,7 @@ static struct property htab_base_prop = {
static struct property htab_size_prop = { static struct property htab_size_prop = {
.name = "linux,htab-size", .name = "linux,htab-size",
.length = sizeof(unsigned long), .length = sizeof(unsigned long),
.value = (unsigned char *)&htab_size, .value = (unsigned char *)&htab_size_bytes,
}; };
static struct property kernel_end_prop = { static struct property kernel_end_prop = {
...@@ -331,8 +329,6 @@ static void __init export_htab_values(void) ...@@ -331,8 +329,6 @@ static void __init export_htab_values(void)
htab_base = __pa(htab_address); htab_base = __pa(htab_address);
prom_add_property(node, &htab_base_prop); prom_add_property(node, &htab_base_prop);
htab_size = 1UL << ppc64_pft_size;
prom_add_property(node, &htab_size_prop); prom_add_property(node, &htab_size_prop);
out: out:
......
...@@ -888,3 +888,35 @@ void dump_stack(void) ...@@ -888,3 +888,35 @@ void dump_stack(void)
show_stack(current, NULL); show_stack(current, NULL);
} }
EXPORT_SYMBOL(dump_stack); EXPORT_SYMBOL(dump_stack);
#ifdef CONFIG_PPC64
void ppc64_runlatch_on(void)
{
unsigned long ctrl;
if (cpu_has_feature(CPU_FTR_CTRL) && !test_thread_flag(TIF_RUNLATCH)) {
HMT_medium();
ctrl = mfspr(SPRN_CTRLF);
ctrl |= CTRL_RUNLATCH;
mtspr(SPRN_CTRLT, ctrl);
set_thread_flag(TIF_RUNLATCH);
}
}
void ppc64_runlatch_off(void)
{
unsigned long ctrl;
if (cpu_has_feature(CPU_FTR_CTRL) && test_thread_flag(TIF_RUNLATCH)) {
HMT_medium();
clear_thread_flag(TIF_RUNLATCH);
ctrl = mfspr(SPRN_CTRLF);
ctrl &= ~CTRL_RUNLATCH;
mtspr(SPRN_CTRLT, ctrl);
}
}
#endif
...@@ -205,14 +205,6 @@ static cell_t __initdata regbuf[1024]; ...@@ -205,14 +205,6 @@ static cell_t __initdata regbuf[1024];
#define MAX_CPU_THREADS 2 #define MAX_CPU_THREADS 2
/* TO GO */
#ifdef CONFIG_HMT
struct {
unsigned int pir;
unsigned int threadid;
} hmt_thread_data[NR_CPUS];
#endif /* CONFIG_HMT */
/* /*
* Error results ... some OF calls will return "-1" on error, some * Error results ... some OF calls will return "-1" on error, some
* will return 0, some will return either. To simplify, here are * will return 0, some will return either. To simplify, here are
...@@ -1319,10 +1311,6 @@ static void __init prom_hold_cpus(void) ...@@ -1319,10 +1311,6 @@ static void __init prom_hold_cpus(void)
*/ */
*spinloop = 0; *spinloop = 0;
#ifdef CONFIG_HMT
for (i = 0; i < NR_CPUS; i++)
RELOC(hmt_thread_data)[i].pir = 0xdeadbeef;
#endif
/* look for cpus */ /* look for cpus */
for (node = 0; prom_next_node(&node); ) { for (node = 0; prom_next_node(&node); ) {
type[0] = 0; type[0] = 0;
...@@ -1389,32 +1377,6 @@ static void __init prom_hold_cpus(void) ...@@ -1389,32 +1377,6 @@ static void __init prom_hold_cpus(void)
/* Reserve cpu #s for secondary threads. They start later. */ /* Reserve cpu #s for secondary threads. They start later. */
cpuid += cpu_threads; cpuid += cpu_threads;
} }
#ifdef CONFIG_HMT
/* Only enable HMT on processors that provide support. */
if (__is_processor(PV_PULSAR) ||
__is_processor(PV_ICESTAR) ||
__is_processor(PV_SSTAR)) {
prom_printf(" starting secondary threads\n");
for (i = 0; i < NR_CPUS; i += 2) {
if (!cpu_online(i))
continue;
if (i == 0) {
unsigned long pir = mfspr(SPRN_PIR);
if (__is_processor(PV_PULSAR)) {
RELOC(hmt_thread_data)[i].pir =
pir & 0x1f;
} else {
RELOC(hmt_thread_data)[i].pir =
pir & 0x3ff;
}
}
}
} else {
prom_printf("Processor is not HMT capable\n");
}
#endif
if (cpuid > NR_CPUS) if (cpuid > NR_CPUS)
prom_printf("WARNING: maximum CPUs (" __stringify(NR_CPUS) prom_printf("WARNING: maximum CPUs (" __stringify(NR_CPUS)
......
...@@ -403,12 +403,17 @@ static void native_hpte_clear(void) ...@@ -403,12 +403,17 @@ static void native_hpte_clear(void)
*/ */
hpte_v = hptep->v; hpte_v = hptep->v;
/*
* Call __tlbie() here rather than tlbie() since we
* already hold the native_tlbie_lock.
*/
if (hpte_v & HPTE_V_VALID) { if (hpte_v & HPTE_V_VALID) {
hptep->v = 0; hptep->v = 0;
tlbie(slot2va(hpte_v, slot), MMU_PAGE_4K, 0); __tlbie(slot2va(hpte_v, slot), MMU_PAGE_4K);
} }
} }
asm volatile("eieio; tlbsync; ptesync":::"memory");
spin_unlock(&native_tlbie_lock); spin_unlock(&native_tlbie_lock);
local_irq_restore(flags); local_irq_restore(flags);
} }
......
...@@ -88,6 +88,7 @@ static unsigned long _SDR1; ...@@ -88,6 +88,7 @@ static unsigned long _SDR1;
struct mmu_psize_def mmu_psize_defs[MMU_PAGE_COUNT]; struct mmu_psize_def mmu_psize_defs[MMU_PAGE_COUNT];
hpte_t *htab_address; hpte_t *htab_address;
unsigned long htab_size_bytes;
unsigned long htab_hash_mask; unsigned long htab_hash_mask;
int mmu_linear_psize = MMU_PAGE_4K; int mmu_linear_psize = MMU_PAGE_4K;
int mmu_virtual_psize = MMU_PAGE_4K; int mmu_virtual_psize = MMU_PAGE_4K;
...@@ -399,7 +400,7 @@ void create_section_mapping(unsigned long start, unsigned long end) ...@@ -399,7 +400,7 @@ void create_section_mapping(unsigned long start, unsigned long end)
void __init htab_initialize(void) void __init htab_initialize(void)
{ {
unsigned long table, htab_size_bytes; unsigned long table;
unsigned long pteg_count; unsigned long pteg_count;
unsigned long mode_rw; unsigned long mode_rw;
unsigned long base = 0, size = 0; unsigned long base = 0, size = 0;
......
config PROFILING config PROFILING
depends on !PPC_ISERIES
bool "Profiling support (EXPERIMENTAL)" bool "Profiling support (EXPERIMENTAL)"
help help
Say Y here to enable the extended profiling support mechanisms used Say Y here to enable the extended profiling support mechanisms used
......
...@@ -184,6 +184,8 @@ void setup_hvlpevent_queue(void) ...@@ -184,6 +184,8 @@ void setup_hvlpevent_queue(void)
{ {
void *eventStack; void *eventStack;
spin_lock_init(&hvlpevent_queue.lock);
/* Allocate a page for the Event Stack. */ /* Allocate a page for the Event Stack. */
eventStack = alloc_bootmem_pages(LpEventStackSize); eventStack = alloc_bootmem_pages(LpEventStackSize);
memset(eventStack, 0, LpEventStackSize); memset(eventStack, 0, LpEventStackSize);
......
...@@ -648,6 +648,7 @@ static void yield_shared_processor(void) ...@@ -648,6 +648,7 @@ static void yield_shared_processor(void)
* here and let the timer_interrupt code sort out the actual time. * here and let the timer_interrupt code sort out the actual time.
*/ */
get_lppaca()->int_dword.fields.decr_int = 1; get_lppaca()->int_dword.fields.decr_int = 1;
ppc64_runlatch_on();
process_iSeries_events(); process_iSeries_events();
} }
......
...@@ -435,8 +435,8 @@ void __init maple_pci_init(void) ...@@ -435,8 +435,8 @@ void __init maple_pci_init(void)
PCI_DN(np)->busno = 0xf0; PCI_DN(np)->busno = 0xf0;
} }
/* Tell pci.c to use the common resource allocation mecanism */ /* Tell pci.c to not change any resource allocations. */
pci_probe_only = 0; pci_probe_only = 1;
/* Allow all IO */ /* Allow all IO */
io_page_mask = -1; io_page_mask = -1;
......
...@@ -9,13 +9,6 @@ config PPC_SPLPAR ...@@ -9,13 +9,6 @@ config PPC_SPLPAR
processors, that is, which share physical processors between processors, that is, which share physical processors between
two or more partitions. two or more partitions.
config HMT
bool "Hardware multithreading"
depends on SMP && PPC_PSERIES && BROKEN
help
This option enables hardware multithreading on RS64 cpus.
pSeries systems p620 and p660 have such a cpu type.
config EEH config EEH
bool "PCI Extended Error Handling (EEH)" if EMBEDDED bool "PCI Extended Error Handling (EEH)" if EMBEDDED
depends on PPC_PSERIES depends on PPC_PSERIES
......
...@@ -234,7 +234,7 @@ static void mpic_shutdown_ht_interrupt(struct mpic *mpic, unsigned int source, ...@@ -234,7 +234,7 @@ static void mpic_shutdown_ht_interrupt(struct mpic *mpic, unsigned int source,
spin_lock_irqsave(&mpic->fixup_lock, flags); spin_lock_irqsave(&mpic->fixup_lock, flags);
writeb(0x10 + 2 * fixup->index, fixup->base + 2); writeb(0x10 + 2 * fixup->index, fixup->base + 2);
tmp = readl(fixup->base + 4); tmp = readl(fixup->base + 4);
tmp &= ~1U; tmp |= 1;
writel(tmp, fixup->base + 4); writel(tmp, fixup->base + 4);
spin_unlock_irqrestore(&mpic->fixup_lock, flags); spin_unlock_irqrestore(&mpic->fixup_lock, flags);
} }
...@@ -446,14 +446,15 @@ static unsigned int mpic_startup_irq(unsigned int irq) ...@@ -446,14 +446,15 @@ static unsigned int mpic_startup_irq(unsigned int irq)
#ifdef CONFIG_MPIC_BROKEN_U3 #ifdef CONFIG_MPIC_BROKEN_U3
struct mpic *mpic = mpic_from_irq(irq); struct mpic *mpic = mpic_from_irq(irq);
unsigned int src = irq - mpic->irq_offset; unsigned int src = irq - mpic->irq_offset;
#endif /* CONFIG_MPIC_BROKEN_U3 */
mpic_enable_irq(irq);
#ifdef CONFIG_MPIC_BROKEN_U3
if (mpic_is_ht_interrupt(mpic, src)) if (mpic_is_ht_interrupt(mpic, src))
mpic_startup_ht_interrupt(mpic, src, irq_desc[irq].status); mpic_startup_ht_interrupt(mpic, src, irq_desc[irq].status);
#endif /* CONFIG_MPIC_BROKEN_U3 */ #endif /* CONFIG_MPIC_BROKEN_U3 */
mpic_enable_irq(irq);
return 0; return 0;
} }
......
...@@ -751,6 +751,7 @@ AltiVecUnavailable: ...@@ -751,6 +751,7 @@ AltiVecUnavailable:
#ifdef CONFIG_ALTIVEC #ifdef CONFIG_ALTIVEC
bne load_up_altivec /* if from user, just load it up */ bne load_up_altivec /* if from user, just load it up */
#endif /* CONFIG_ALTIVEC */ #endif /* CONFIG_ALTIVEC */
addi r3,r1,STACK_FRAME_OVERHEAD
EXC_XFER_EE_LITE(0xf20, altivec_unavailable_exception) EXC_XFER_EE_LITE(0xf20, altivec_unavailable_exception)
#ifdef CONFIG_PPC64BRIDGE #ifdef CONFIG_PPC64BRIDGE
......
/*
* Copyright (C) 1996 Paul Mackerras.
*/
#include "nonstdio.h"
#include "privinst.h"
#define scanhex xmon_scanhex
#define skipbl xmon_skipbl
#define ADB_B (*(volatile unsigned char *)0xf3016000)
#define ADB_SR (*(volatile unsigned char *)0xf3017400)
#define ADB_ACR (*(volatile unsigned char *)0xf3017600)
#define ADB_IFR (*(volatile unsigned char *)0xf3017a00)
static inline void eieio(void) { asm volatile ("eieio" : :); }
#define N_ADB_LOG 1000
struct adb_log {
unsigned char b;
unsigned char ifr;
unsigned char acr;
unsigned int time;
} adb_log[N_ADB_LOG];
int n_adb_log;
void
init_adb_log(void)
{
adb_log[0].b = ADB_B;
adb_log[0].ifr = ADB_IFR;
adb_log[0].acr = ADB_ACR;
adb_log[0].time = get_dec();
n_adb_log = 0;
}
void
dump_adb_log(void)
{
unsigned t, t0;
struct adb_log *ap;
int i;
ap = adb_log;
t0 = ap->time;
for (i = 0; i <= n_adb_log; ++i, ++ap) {
t = t0 - ap->time;
printf("b=%x ifr=%x acr=%x at %d.%.7d\n", ap->b, ap->ifr, ap->acr,
t / 1000000000, (t % 1000000000) / 100);
}
}
void
adb_chklog(void)
{
struct adb_log *ap = &adb_log[n_adb_log + 1];
ap->b = ADB_B;
ap->ifr = ADB_IFR;
ap->acr = ADB_ACR;
if (ap->b != ap[-1].b || (ap->ifr & 4) != (ap[-1].ifr & 4)
|| ap->acr != ap[-1].acr) {
ap->time = get_dec();
++n_adb_log;
}
}
int
adb_bitwait(int bmask, int bval, int fmask, int fval)
{
int i;
struct adb_log *ap;
for (i = 10000; i > 0; --i) {
adb_chklog();
ap = &adb_log[n_adb_log];
if ((ap->b & bmask) == bval && (ap->ifr & fmask) == fval)
return 0;
}
return -1;
}
int
adb_wait(void)
{
if (adb_bitwait(0, 0, 4, 4) < 0) {
printf("adb: ready wait timeout\n");
return -1;
}
return 0;
}
void
adb_readin(void)
{
int i, j;
unsigned char d[64];
if (ADB_B & 8) {
printf("ADB_B: %x\n", ADB_B);
return;
}
i = 0;
adb_wait();
j = ADB_SR;
eieio();
ADB_B &= ~0x20;
eieio();
for (;;) {
if (adb_wait() < 0)
break;
d[i++] = ADB_SR;
eieio();
if (ADB_B & 8)
break;
ADB_B ^= 0x10;
eieio();
}
ADB_B |= 0x30;
if (adb_wait() == 0)
j = ADB_SR;
for (j = 0; j < i; ++j)
printf("%.2x ", d[j]);
printf("\n");
}
int
adb_write(unsigned char *d, int i)
{
int j;
unsigned x;
if ((ADB_B & 8) == 0) {
printf("r: ");
adb_readin();
}
for (;;) {
ADB_ACR = 0x1c;
eieio();
ADB_SR = d[0];
eieio();
ADB_B &= ~0x20;
eieio();
if (ADB_B & 8)
break;
ADB_ACR = 0xc;
eieio();
ADB_B |= 0x20;
eieio();
adb_readin();
}
adb_wait();
for (j = 1; j < i; ++j) {
ADB_SR = d[j];
eieio();
ADB_B ^= 0x10;
eieio();
if (adb_wait() < 0)
break;
}
ADB_ACR = 0xc;
eieio();
x = ADB_SR;
eieio();
ADB_B |= 0x30;
return j;
}
void
adbcmds(void)
{
char cmd;
unsigned rtcu, rtcl, dec, pdec, x;
int i, j;
unsigned char d[64];
cmd = skipbl();
switch (cmd) {
case 't':
for (;;) {
rtcl = get_rtcl();
rtcu = get_rtcu();
dec = get_dec();
printf("rtc u=%u l=%u dec=%x (%d = %d.%.7d)\n",
rtcu, rtcl, dec, pdec - dec, (pdec - dec) / 1000000000,
((pdec - dec) % 1000000000) / 100);
pdec = dec;
if (cmd == 'x')
break;
while (xmon_read(stdin, &cmd, 1) != 1)
;
}
break;
case 'r':
init_adb_log();
while (adb_bitwait(8, 0, 0, 0) == 0)
adb_readin();
break;
case 'w':
i = 0;
while (scanhex(&x))
d[i++] = x;
init_adb_log();
j = adb_write(d, i);
printf("sent %d bytes\n", j);
while (adb_bitwait(8, 0, 0, 0) == 0)
adb_readin();
break;
case 'l':
dump_adb_log();
break;
}
}
...@@ -6,16 +6,11 @@ ...@@ -6,16 +6,11 @@
#include <asm/machdep.h> #include <asm/machdep.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/page.h> #include <asm/page.h>
#include <linux/adb.h>
#include <linux/pmu.h>
#include <linux/cuda.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/sysrq.h> #include <linux/sysrq.h>
#include <linux/bitops.h> #include <linux/bitops.h>
#include <asm/xmon.h> #include <asm/xmon.h>
#include <asm/prom.h>
#include <asm/bootx.h>
#include <asm/machdep.h> #include <asm/machdep.h>
#include <asm/errno.h> #include <asm/errno.h>
#include <asm/processor.h> #include <asm/processor.h>
...@@ -26,9 +21,7 @@ static volatile unsigned char *sccc, *sccd; ...@@ -26,9 +21,7 @@ static volatile unsigned char *sccc, *sccd;
unsigned int TXRDY, RXRDY, DLAB; unsigned int TXRDY, RXRDY, DLAB;
static int xmon_expect(const char *str, unsigned int timeout); static int xmon_expect(const char *str, unsigned int timeout);
static int use_screen;
static int via_modem; static int via_modem;
static int xmon_use_sccb;
#define TB_SPEED 25000000 #define TB_SPEED 25000000
...@@ -46,47 +39,6 @@ void buf_access(void) ...@@ -46,47 +39,6 @@ void buf_access(void)
sccd[3] &= ~DLAB; /* reset DLAB */ sccd[3] &= ~DLAB; /* reset DLAB */
} }
extern int adb_init(void);
#ifdef CONFIG_PPC_CHRP
/*
* This looks in the "ranges" property for the primary PCI host bridge
* to find the physical address of the start of PCI/ISA I/O space.
* It is basically a cut-down version of pci_process_bridge_OF_ranges.
*/
static unsigned long chrp_find_phys_io_base(void)
{
struct device_node *node;
unsigned int *ranges;
unsigned long base = CHRP_ISA_IO_BASE;
int rlen = 0;
int np;
node = find_devices("isa");
if (node != NULL) {
node = node->parent;
if (node == NULL || node->type == NULL
|| strcmp(node->type, "pci") != 0)
node = NULL;
}
if (node == NULL)
node = find_devices("pci");
if (node == NULL)
return base;
ranges = (unsigned int *) get_property(node, "ranges", &rlen);
np = prom_n_addr_cells(node) + 5;
while ((rlen -= np * sizeof(unsigned int)) >= 0) {
if ((ranges[0] >> 24) == 1 && ranges[2] == 0) {
/* I/O space starting at 0, grab the phys base */
base = ranges[np - 3];
break;
}
ranges += np;
}
return base;
}
#endif /* CONFIG_PPC_CHRP */
#ifdef CONFIG_MAGIC_SYSRQ #ifdef CONFIG_MAGIC_SYSRQ
static void sysrq_handle_xmon(int key, struct pt_regs *regs, static void sysrq_handle_xmon(int key, struct pt_regs *regs,
...@@ -109,22 +61,6 @@ xmon_map_scc(void) ...@@ -109,22 +61,6 @@ xmon_map_scc(void)
#ifdef CONFIG_PPC_MULTIPLATFORM #ifdef CONFIG_PPC_MULTIPLATFORM
volatile unsigned char *base; volatile unsigned char *base;
#ifdef CONFIG_PPC_CHRP
base = (volatile unsigned char *) isa_io_base;
if (_machine == _MACH_chrp)
base = (volatile unsigned char *)
ioremap(chrp_find_phys_io_base(), 0x1000);
sccc = base + 0x3fd;
sccd = base + 0x3f8;
if (xmon_use_sccb) {
sccc -= 0x100;
sccd -= 0x100;
}
TXRDY = 0x20;
RXRDY = 1;
DLAB = 0x80;
#endif /* CONFIG_PPC_CHRP */
#elif defined(CONFIG_GEMINI) #elif defined(CONFIG_GEMINI)
/* should already be mapped by the kernel boot */ /* should already be mapped by the kernel boot */
sccc = (volatile unsigned char *) 0xffeffb0d; sccc = (volatile unsigned char *) 0xffeffb0d;
...@@ -143,7 +79,7 @@ xmon_map_scc(void) ...@@ -143,7 +79,7 @@ xmon_map_scc(void)
register_sysrq_key('x', &sysrq_xmon_op); register_sysrq_key('x', &sysrq_xmon_op);
} }
static int scc_initialized = 0; static int scc_initialized;
void xmon_init_scc(void); void xmon_init_scc(void);
...@@ -163,14 +99,6 @@ xmon_write(void *handle, void *ptr, int nb) ...@@ -163,14 +99,6 @@ xmon_write(void *handle, void *ptr, int nb)
break; break;
#endif #endif
#ifdef CONFIG_BOOTX_TEXT
if (use_screen) {
/* write it on the screen */
for (i = 0; i < nb; ++i)
btext_drawchar(*p++);
goto out;
}
#endif
if (!scc_initialized) if (!scc_initialized)
xmon_init_scc(); xmon_init_scc();
ct = 0; ct = 0;
...@@ -190,7 +118,6 @@ xmon_write(void *handle, void *ptr, int nb) ...@@ -190,7 +118,6 @@ xmon_write(void *handle, void *ptr, int nb)
eieio(); eieio();
} }
out:
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
if (!locked) if (!locked)
clear_bit(0, &xmon_write_lock); clear_bit(0, &xmon_write_lock);
...@@ -199,65 +126,7 @@ xmon_write(void *handle, void *ptr, int nb) ...@@ -199,65 +126,7 @@ xmon_write(void *handle, void *ptr, int nb)
} }
int xmon_wants_key; int xmon_wants_key;
int xmon_adb_keycode;
#ifdef CONFIG_BOOTX_TEXT
static int xmon_adb_shiftstate;
static unsigned char xmon_keytab[128] =
"asdfhgzxcv\000bqwer" /* 0x00 - 0x0f */
"yt123465=97-80]o" /* 0x10 - 0x1f */
"u[ip\rlj'k;\\,/nm." /* 0x20 - 0x2f */
"\t `\177\0\033\0\0\0\0\0\0\0\0\0\0" /* 0x30 - 0x3f */
"\0.\0*\0+\0\0\0\0\0/\r\0-\0" /* 0x40 - 0x4f */
"\0\0000123456789\0\0\0"; /* 0x50 - 0x5f */
static unsigned char xmon_shift_keytab[128] =
"ASDFHGZXCV\000BQWER" /* 0x00 - 0x0f */
"YT!@#$^%+(&_*)}O" /* 0x10 - 0x1f */
"U{IP\rLJ\"K:|<?NM>" /* 0x20 - 0x2f */
"\t ~\177\0\033\0\0\0\0\0\0\0\0\0\0" /* 0x30 - 0x3f */
"\0.\0*\0+\0\0\0\0\0/\r\0-\0" /* 0x40 - 0x4f */
"\0\0000123456789\0\0\0"; /* 0x50 - 0x5f */
static int
xmon_get_adb_key(void)
{
int k, t, on;
xmon_wants_key = 1;
for (;;) {
xmon_adb_keycode = -1;
t = 0;
on = 0;
do {
if (--t < 0) {
on = 1 - on;
btext_drawchar(on? 0xdb: 0x20);
btext_drawchar('\b');
t = 200000;
}
do_poll_adb();
} while (xmon_adb_keycode == -1);
k = xmon_adb_keycode;
if (on)
btext_drawstring(" \b");
/* test for shift keys */
if ((k & 0x7f) == 0x38 || (k & 0x7f) == 0x7b) {
xmon_adb_shiftstate = (k & 0x80) == 0;
continue;
}
if (k >= 0x80)
continue; /* ignore up transitions */
k = (xmon_adb_shiftstate? xmon_shift_keytab: xmon_keytab)[k];
if (k != 0)
break;
}
xmon_wants_key = 0;
return k;
}
#endif /* CONFIG_BOOTX_TEXT */
int int
xmon_read(void *handle, void *ptr, int nb) xmon_read(void *handle, void *ptr, int nb)
...@@ -265,18 +134,11 @@ xmon_read(void *handle, void *ptr, int nb) ...@@ -265,18 +134,11 @@ xmon_read(void *handle, void *ptr, int nb)
char *p = ptr; char *p = ptr;
int i; int i;
#ifdef CONFIG_BOOTX_TEXT
if (use_screen) {
for (i = 0; i < nb; ++i)
*p++ = xmon_get_adb_key();
return i;
}
#endif
if (!scc_initialized) if (!scc_initialized)
xmon_init_scc(); xmon_init_scc();
for (i = 0; i < nb; ++i) { for (i = 0; i < nb; ++i) {
while ((*sccc & RXRDY) == 0) while ((*sccc & RXRDY) == 0)
do_poll_adb(); ;
buf_access(); buf_access();
*p++ = *sccd; *p++ = *sccd;
} }
...@@ -287,7 +149,7 @@ int ...@@ -287,7 +149,7 @@ int
xmon_read_poll(void) xmon_read_poll(void)
{ {
if ((*sccc & RXRDY) == 0) { if ((*sccc & RXRDY) == 0) {
do_poll_adb(); ;
return -1; return -1;
} }
buf_access(); buf_access();
...@@ -297,15 +159,6 @@ xmon_read_poll(void) ...@@ -297,15 +159,6 @@ xmon_read_poll(void)
void void
xmon_init_scc(void) xmon_init_scc(void)
{ {
if ( _machine == _MACH_chrp )
{
sccd[3] = 0x83; eieio(); /* LCR = 8N1 + DLAB */
sccd[0] = 12; eieio(); /* DLL = 9600 baud */
sccd[1] = 0; eieio();
sccd[2] = 0; eieio(); /* FCR = 0 */
sccd[3] = 3; eieio(); /* LCR = 8N1 */
sccd[1] = 0; eieio(); /* IER = 0 */
}
scc_initialized = 1; scc_initialized = 1;
if (via_modem) { if (via_modem) {
for (;;) { for (;;) {
...@@ -321,22 +174,6 @@ xmon_init_scc(void) ...@@ -321,22 +174,6 @@ xmon_init_scc(void)
} }
} }
#if 0
extern int (*prom_entry)(void *);
int
xmon_exit(void)
{
struct prom_args {
char *service;
} args;
for (;;) {
args.service = "exit";
(*prom_entry)(&args);
}
}
#endif
void *xmon_stdin; void *xmon_stdin;
void *xmon_stdout; void *xmon_stdout;
......
...@@ -12,8 +12,6 @@ ...@@ -12,8 +12,6 @@
#include <linux/kallsyms.h> #include <linux/kallsyms.h>
#include <asm/ptrace.h> #include <asm/ptrace.h>
#include <asm/string.h> #include <asm/string.h>
#include <asm/prom.h>
#include <asm/bootx.h>
#include <asm/machdep.h> #include <asm/machdep.h>
#include <asm/xmon.h> #include <asm/xmon.h>
#include "nonstdio.h" #include "nonstdio.h"
...@@ -101,9 +99,6 @@ void cacheflush(void); ...@@ -101,9 +99,6 @@ void cacheflush(void);
static void cpu_cmd(void); static void cpu_cmd(void);
#endif /* CONFIG_SMP */ #endif /* CONFIG_SMP */
static void csum(void); static void csum(void);
#ifdef CONFIG_BOOTX_TEXT
static void vidcmds(void);
#endif
static void bootcmds(void); static void bootcmds(void);
static void proccall(void); static void proccall(void);
static void printtime(void); static void printtime(void);
...@@ -522,11 +517,6 @@ cmds(struct pt_regs *excp) ...@@ -522,11 +517,6 @@ cmds(struct pt_regs *excp)
cpu_cmd(); cpu_cmd();
break; break;
#endif /* CONFIG_SMP */ #endif /* CONFIG_SMP */
#ifdef CONFIG_BOOTX_TEXT
case 'v':
vidcmds();
break;
#endif
case 'z': case 'z':
bootcmds(); bootcmds();
break; break;
...@@ -618,43 +608,6 @@ static void cpu_cmd(void) ...@@ -618,43 +608,6 @@ static void cpu_cmd(void)
} }
#endif /* CONFIG_SMP */ #endif /* CONFIG_SMP */
#ifdef CONFIG_BOOTX_TEXT
extern boot_infos_t disp_bi;
static void vidcmds(void)
{
int c = inchar();
unsigned int val, w;
extern int boot_text_mapped;
if (!boot_text_mapped)
return;
if (c != '\n' && scanhex(&val)) {
switch (c) {
case 'd':
w = disp_bi.dispDeviceRowBytes
/ (disp_bi.dispDeviceDepth >> 3);
disp_bi.dispDeviceDepth = val;
disp_bi.dispDeviceRowBytes = w * (val >> 3);
return;
case 'p':
disp_bi.dispDeviceRowBytes = val;
return;
case 'w':
disp_bi.dispDeviceRect[2] = val;
return;
case 'h':
disp_bi.dispDeviceRect[3] = val;
return;
}
}
printf("W = %d (0x%x) H = %d (0x%x) D = %d (0x%x) P = %d (0x%x)\n",
disp_bi.dispDeviceRect[2], disp_bi.dispDeviceRect[2],
disp_bi.dispDeviceRect[3], disp_bi.dispDeviceRect[3],
disp_bi.dispDeviceDepth, disp_bi.dispDeviceDepth,
disp_bi.dispDeviceRowBytes, disp_bi.dispDeviceRowBytes);
}
#endif /* CONFIG_BOOTX_TEXT */
static unsigned short fcstab[256] = { static unsigned short fcstab[256] = {
0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf,
...@@ -1020,7 +973,6 @@ dump_hash_table(void) ...@@ -1020,7 +973,6 @@ dump_hash_table(void)
} }
#else #else
#ifndef CONFIG_PPC64BRIDGE
static void static void
dump_hash_table_seg(unsigned seg, unsigned start, unsigned end) dump_hash_table_seg(unsigned seg, unsigned start, unsigned end)
{ {
...@@ -1079,66 +1031,6 @@ dump_hash_table_seg(unsigned seg, unsigned start, unsigned end) ...@@ -1079,66 +1031,6 @@ dump_hash_table_seg(unsigned seg, unsigned start, unsigned end)
printf(" ... %x\n", last_va); printf(" ... %x\n", last_va);
} }
#else /* CONFIG_PPC64BRIDGE */
static void
dump_hash_table_seg(unsigned seg, unsigned start, unsigned end)
{
extern void *Hash;
extern unsigned long Hash_size;
unsigned *htab = Hash;
unsigned hsize = Hash_size;
unsigned v, hmask, va, last_va;
int found, last_found, i;
unsigned *hg, w1, last_w2, last_va0;
last_found = 0;
hmask = hsize / 128 - 1;
va = start;
start = (start >> 12) & 0xffff;
end = (end >> 12) & 0xffff;
for (v = start; v < end; ++v) {
found = 0;
hg = htab + (((v ^ seg) & hmask) * 32);
w1 = 1 | (seg << 12) | ((v & 0xf800) >> 4);
for (i = 0; i < 8; ++i, hg += 4) {
if (hg[1] == w1) {
found = 1;
break;
}
}
if (!found) {
w1 ^= 2;
hg = htab + ((~(v ^ seg) & hmask) * 32);
for (i = 0; i < 8; ++i, hg += 4) {
if (hg[1] == w1) {
found = 1;
break;
}
}
}
if (!(last_found && found && (hg[3] & ~0x180) == last_w2 + 4096)) {
if (last_found) {
if (last_va != last_va0)
printf(" ... %x", last_va);
printf("\n");
}
if (found) {
printf("%x to %x", va, hg[3]);
last_va0 = va;
}
last_found = found;
}
if (found) {
last_w2 = hg[3] & ~0x180;
last_va = va;
}
va += 4096;
}
if (last_found)
printf(" ... %x\n", last_va);
}
#endif /* CONFIG_PPC64BRIDGE */
static unsigned hash_ctx; static unsigned hash_ctx;
static unsigned hash_start; static unsigned hash_start;
static unsigned hash_end; static unsigned hash_end;
......
...@@ -335,6 +335,8 @@ static int hvc_open(struct tty_struct *tty, struct file * filp) ...@@ -335,6 +335,8 @@ static int hvc_open(struct tty_struct *tty, struct file * filp)
} /* else count == 0 */ } /* else count == 0 */
tty->driver_data = hp; tty->driver_data = hp;
tty->low_latency = 1; /* Makes flushes to ldisc synchronous. */
hp->tty = tty; hp->tty = tty;
/* Save for request_irq outside of spin_lock. */ /* Save for request_irq outside of spin_lock. */
irq = hp->irq; irq = hp->irq;
...@@ -633,9 +635,6 @@ static int hvc_poll(struct hvc_struct *hp) ...@@ -633,9 +635,6 @@ static int hvc_poll(struct hvc_struct *hp)
tty_insert_flip_char(tty, buf[i], 0); tty_insert_flip_char(tty, buf[i], 0);
} }
if (count)
tty_schedule_flip(tty);
/* /*
* Account for the total amount read in one loop, and if above * Account for the total amount read in one loop, and if above
* 64 bytes, we do a quick schedule loop to let the tty grok * 64 bytes, we do a quick schedule loop to let the tty grok
...@@ -656,6 +655,9 @@ static int hvc_poll(struct hvc_struct *hp) ...@@ -656,6 +655,9 @@ static int hvc_poll(struct hvc_struct *hp)
bail: bail:
spin_unlock_irqrestore(&hp->lock, flags); spin_unlock_irqrestore(&hp->lock, flags);
if (read_total)
tty_flip_buffer_push(tty);
return poll_mask; return poll_mask;
} }
......
...@@ -159,9 +159,11 @@ extern void do_cpu_ftr_fixups(unsigned long offset); ...@@ -159,9 +159,11 @@ extern void do_cpu_ftr_fixups(unsigned long offset);
#endif #endif
/* We need to mark all pages as being coherent if we're SMP or we /* We need to mark all pages as being coherent if we're SMP or we
* have a 74[45]x and an MPC107 host bridge. * have a 74[45]x and an MPC107 host bridge. Also 83xx requires
* it for PCI "streaming/prefetch" to work properly.
*/ */
#if defined(CONFIG_SMP) || defined(CONFIG_MPC10X_BRIDGE) #if defined(CONFIG_SMP) || defined(CONFIG_MPC10X_BRIDGE) \
|| defined(CONFIG_PPC_83xx)
#define CPU_FTR_COMMON CPU_FTR_NEED_COHERENT #define CPU_FTR_COMMON CPU_FTR_NEED_COHERENT
#else #else
#define CPU_FTR_COMMON 0 #define CPU_FTR_COMMON 0
...@@ -277,7 +279,8 @@ enum { ...@@ -277,7 +279,8 @@ enum {
CPU_FTRS_G2_LE = CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_MAYBE_CAN_DOZE | CPU_FTRS_G2_LE = CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_MAYBE_CAN_DOZE |
CPU_FTR_USE_TB | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_HAS_HIGH_BATS, CPU_FTR_USE_TB | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_HAS_HIGH_BATS,
CPU_FTRS_E300 = CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_MAYBE_CAN_DOZE | CPU_FTRS_E300 = CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_MAYBE_CAN_DOZE |
CPU_FTR_USE_TB | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_HAS_HIGH_BATS, CPU_FTR_USE_TB | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_HAS_HIGH_BATS |
CPU_FTR_COMMON,
CPU_FTRS_CLASSIC32 = CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | CPU_FTRS_CLASSIC32 = CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE |
CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE, CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE,
CPU_FTRS_POWER3_32 = CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | CPU_FTRS_POWER3_32 = CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE |
......
...@@ -112,6 +112,7 @@ typedef struct { ...@@ -112,6 +112,7 @@ typedef struct {
} hpte_t; } hpte_t;
extern hpte_t *htab_address; extern hpte_t *htab_address;
extern unsigned long htab_size_bytes;
extern unsigned long htab_hash_mask; extern unsigned long htab_hash_mask;
/* /*
......
...@@ -615,27 +615,9 @@ ...@@ -615,27 +615,9 @@
#define proc_trap() asm volatile("trap") #define proc_trap() asm volatile("trap")
#ifdef CONFIG_PPC64 #ifdef CONFIG_PPC64
static inline void ppc64_runlatch_on(void)
{ extern void ppc64_runlatch_on(void);
unsigned long ctrl; extern void ppc64_runlatch_off(void);
if (cpu_has_feature(CPU_FTR_CTRL)) {
ctrl = mfspr(SPRN_CTRLF);
ctrl |= CTRL_RUNLATCH;
mtspr(SPRN_CTRLT, ctrl);
}
}
static inline void ppc64_runlatch_off(void)
{
unsigned long ctrl;
if (cpu_has_feature(CPU_FTR_CTRL)) {
ctrl = mfspr(SPRN_CTRLF);
ctrl &= ~CTRL_RUNLATCH;
mtspr(SPRN_CTRLT, ctrl);
}
}
extern unsigned long scom970_read(unsigned int address); extern unsigned long scom970_read(unsigned int address);
extern void scom970_write(unsigned int address, unsigned long value); extern void scom970_write(unsigned int address, unsigned long value);
...@@ -645,15 +627,6 @@ extern void scom970_write(unsigned int address, unsigned long value); ...@@ -645,15 +627,6 @@ extern void scom970_write(unsigned int address, unsigned long value);
#define __get_SP() ({unsigned long sp; \ #define __get_SP() ({unsigned long sp; \
asm volatile("mr %0,1": "=r" (sp)); sp;}) asm volatile("mr %0,1": "=r" (sp)); sp;})
#else /* __ASSEMBLY__ */
#define RUNLATCH_ON(REG) \
BEGIN_FTR_SECTION \
mfspr (REG),SPRN_CTRLF; \
ori (REG),(REG),CTRL_RUNLATCH; \
mtspr SPRN_CTRLT,(REG); \
END_FTR_SECTION_IFSET(CPU_FTR_CTRL)
#endif /* __ASSEMBLY__ */ #endif /* __ASSEMBLY__ */
#endif /* __KERNEL__ */ #endif /* __KERNEL__ */
#endif /* _ASM_POWERPC_REG_H */ #endif /* _ASM_POWERPC_REG_H */
...@@ -113,7 +113,7 @@ static inline struct thread_info *current_thread_info(void) ...@@ -113,7 +113,7 @@ static inline struct thread_info *current_thread_info(void)
#define TIF_POLLING_NRFLAG 4 /* true if poll_idle() is polling #define TIF_POLLING_NRFLAG 4 /* true if poll_idle() is polling
TIF_NEED_RESCHED */ TIF_NEED_RESCHED */
#define TIF_32BIT 5 /* 32 bit binary */ #define TIF_32BIT 5 /* 32 bit binary */
/* #define SPARE 6 */ #define TIF_RUNLATCH 6 /* Is the runlatch enabled? */
#define TIF_ABI_PENDING 7 /* 32/64 bit switch needed */ #define TIF_ABI_PENDING 7 /* 32/64 bit switch needed */
#define TIF_SYSCALL_AUDIT 8 /* syscall auditing active */ #define TIF_SYSCALL_AUDIT 8 /* syscall auditing active */
#define TIF_SINGLESTEP 9 /* singlestepping active */ #define TIF_SINGLESTEP 9 /* singlestepping active */
...@@ -131,7 +131,7 @@ static inline struct thread_info *current_thread_info(void) ...@@ -131,7 +131,7 @@ static inline struct thread_info *current_thread_info(void)
#define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED) #define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED)
#define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG) #define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG)
#define _TIF_32BIT (1<<TIF_32BIT) #define _TIF_32BIT (1<<TIF_32BIT)
/* #define _SPARE (1<<SPARE) */ #define _TIF_RUNLATCH (1<<TIF_RUNLATCH)
#define _TIF_ABI_PENDING (1<<TIF_ABI_PENDING) #define _TIF_ABI_PENDING (1<<TIF_ABI_PENDING)
#define _TIF_SYSCALL_AUDIT (1<<TIF_SYSCALL_AUDIT) #define _TIF_SYSCALL_AUDIT (1<<TIF_SYSCALL_AUDIT)
#define _TIF_SINGLESTEP (1<<TIF_SINGLESTEP) #define _TIF_SINGLESTEP (1<<TIF_SINGLESTEP)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment