Commit 4bba626e authored by Linus Torvalds's avatar Linus Torvalds

Merge http://lia64.bkbits.net/to-linus-2.5

into ppc970.osdl.org:/home/torvalds/v2.6/linux
parents 523cc485 f9f0080e
...@@ -388,7 +388,7 @@ config IA64_GRANULE_16MB ...@@ -388,7 +388,7 @@ config IA64_GRANULE_16MB
config IA64_GRANULE_64MB config IA64_GRANULE_64MB
bool "64MB" bool "64MB"
depends on !(IA64_GENERIC || IA64_HP_ZX1) depends on !(IA64_GENERIC || IA64_HP_ZX1 || IA64_SGI_SN2)
endchoice endchoice
......
...@@ -43,7 +43,8 @@ endif ...@@ -43,7 +43,8 @@ endif
ifeq ($(GCC_VERSION),3) ifeq ($(GCC_VERSION),3)
ifeq ($(GCC_MINOR_VERSION),4) ifeq ($(GCC_MINOR_VERSION),4)
cflags-$(CONFIG_ITANIUM) += -mtune=merced # Workaround Itanium 1 bugs in gcc 3.4.
# cflags-$(CONFIG_ITANIUM) += -mtune=merced
cflags-$(CONFIG_MCKINLEY) += -mtune=mckinley cflags-$(CONFIG_MCKINLEY) += -mtune=mckinley
endif endif
endif endif
......
...@@ -140,6 +140,7 @@ CONFIG_HOTPLUG_PCI_SGI=y ...@@ -140,6 +140,7 @@ CONFIG_HOTPLUG_PCI_SGI=y
# #
# Generic Driver Options # Generic Driver Options
# #
CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_FW_LOADER=m CONFIG_FW_LOADER=m
# CONFIG_DEBUG_DRIVER is not set # CONFIG_DEBUG_DRIVER is not set
...@@ -162,12 +163,12 @@ CONFIG_FW_LOADER=m ...@@ -162,12 +163,12 @@ CONFIG_FW_LOADER=m
# #
# CONFIG_BLK_CPQ_DA is not set # CONFIG_BLK_CPQ_DA is not set
# CONFIG_BLK_CPQ_CISS_DA is not set # CONFIG_BLK_CPQ_CISS_DA is not set
CONFIG_BLK_DEV_DAC960=m # CONFIG_BLK_DEV_DAC960 is not set
CONFIG_BLK_DEV_UMEM=m # CONFIG_BLK_DEV_UMEM is not set
CONFIG_BLK_DEV_LOOP=y CONFIG_BLK_DEV_LOOP=y
CONFIG_BLK_DEV_CRYPTOLOOP=m CONFIG_BLK_DEV_CRYPTOLOOP=m
CONFIG_BLK_DEV_NBD=m CONFIG_BLK_DEV_NBD=m
# CONFIG_BLK_DEV_CARMEL is not set # CONFIG_BLK_DEV_SX8 is not set
CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_SIZE=4096 CONFIG_BLK_DEV_RAM_SIZE=4096
CONFIG_BLK_DEV_INITRD=y CONFIG_BLK_DEV_INITRD=y
...@@ -181,12 +182,12 @@ CONFIG_BLK_DEV_IDE=y ...@@ -181,12 +182,12 @@ CONFIG_BLK_DEV_IDE=y
# #
# Please see Documentation/ide.txt for help/info on IDE drives # Please see Documentation/ide.txt for help/info on IDE drives
# #
CONFIG_BLK_DEV_IDEDISK=y # CONFIG_BLK_DEV_IDE_SATA is not set
# CONFIG_IDEDISK_MULTI_MODE is not set # CONFIG_BLK_DEV_IDEDISK is not set
CONFIG_BLK_DEV_IDECD=m CONFIG_BLK_DEV_IDECD=y
CONFIG_BLK_DEV_IDETAPE=m # CONFIG_BLK_DEV_IDETAPE is not set
CONFIG_BLK_DEV_IDEFLOPPY=y # CONFIG_BLK_DEV_IDEFLOPPY is not set
CONFIG_BLK_DEV_IDESCSI=m # CONFIG_BLK_DEV_IDESCSI is not set
# CONFIG_IDE_TASK_IOCTL is not set # CONFIG_IDE_TASK_IOCTL is not set
# CONFIG_IDE_TASKFILE_IO is not set # CONFIG_IDE_TASKFILE_IO is not set
...@@ -195,9 +196,9 @@ CONFIG_BLK_DEV_IDESCSI=m ...@@ -195,9 +196,9 @@ CONFIG_BLK_DEV_IDESCSI=m
# #
CONFIG_IDE_GENERIC=y CONFIG_IDE_GENERIC=y
CONFIG_BLK_DEV_IDEPCI=y CONFIG_BLK_DEV_IDEPCI=y
CONFIG_IDEPCI_SHARE_IRQ=y # CONFIG_IDEPCI_SHARE_IRQ is not set
# CONFIG_BLK_DEV_OFFBOARD is not set # CONFIG_BLK_DEV_OFFBOARD is not set
CONFIG_BLK_DEV_GENERIC=y # CONFIG_BLK_DEV_GENERIC is not set
# CONFIG_BLK_DEV_OPTI621 is not set # CONFIG_BLK_DEV_OPTI621 is not set
CONFIG_BLK_DEV_IDEDMA_PCI=y CONFIG_BLK_DEV_IDEDMA_PCI=y
# CONFIG_BLK_DEV_IDEDMA_FORCED is not set # CONFIG_BLK_DEV_IDEDMA_FORCED is not set
...@@ -207,20 +208,19 @@ CONFIG_BLK_DEV_ADMA=y ...@@ -207,20 +208,19 @@ CONFIG_BLK_DEV_ADMA=y
# CONFIG_BLK_DEV_AEC62XX is not set # CONFIG_BLK_DEV_AEC62XX is not set
# CONFIG_BLK_DEV_ALI15X3 is not set # CONFIG_BLK_DEV_ALI15X3 is not set
# CONFIG_BLK_DEV_AMD74XX is not set # CONFIG_BLK_DEV_AMD74XX is not set
CONFIG_BLK_DEV_CMD64X=m # CONFIG_BLK_DEV_CMD64X is not set
# CONFIG_BLK_DEV_TRIFLEX is not set # CONFIG_BLK_DEV_TRIFLEX is not set
# CONFIG_BLK_DEV_CY82C693 is not set # CONFIG_BLK_DEV_CY82C693 is not set
# CONFIG_BLK_DEV_CS5520 is not set # CONFIG_BLK_DEV_CS5520 is not set
# CONFIG_BLK_DEV_CS5530 is not set # CONFIG_BLK_DEV_CS5530 is not set
CONFIG_BLK_DEV_HPT34X=m # CONFIG_BLK_DEV_HPT34X is not set
CONFIG_HPT34X_AUTODMA=y # CONFIG_BLK_DEV_HPT366 is not set
CONFIG_BLK_DEV_HPT366=m
# CONFIG_BLK_DEV_SC1200 is not set # CONFIG_BLK_DEV_SC1200 is not set
# CONFIG_BLK_DEV_PIIX is not set # CONFIG_BLK_DEV_PIIX is not set
# CONFIG_BLK_DEV_NS87415 is not set # CONFIG_BLK_DEV_NS87415 is not set
# CONFIG_BLK_DEV_PDC202XX_OLD is not set # CONFIG_BLK_DEV_PDC202XX_OLD is not set
# CONFIG_BLK_DEV_PDC202XX_NEW is not set # CONFIG_BLK_DEV_PDC202XX_NEW is not set
CONFIG_BLK_DEV_SVWKS=m # CONFIG_BLK_DEV_SVWKS is not set
CONFIG_BLK_DEV_SGIIOC4=y CONFIG_BLK_DEV_SGIIOC4=y
# CONFIG_BLK_DEV_SIIMAGE is not set # CONFIG_BLK_DEV_SIIMAGE is not set
# CONFIG_BLK_DEV_SLC90E66 is not set # CONFIG_BLK_DEV_SLC90E66 is not set
...@@ -243,8 +243,8 @@ CONFIG_SCSI_PROC_FS=y ...@@ -243,8 +243,8 @@ CONFIG_SCSI_PROC_FS=y
# #
CONFIG_BLK_DEV_SD=y CONFIG_BLK_DEV_SD=y
CONFIG_CHR_DEV_ST=m CONFIG_CHR_DEV_ST=m
CONFIG_CHR_DEV_OSST=m # CONFIG_CHR_DEV_OSST is not set
CONFIG_BLK_DEV_SR=y CONFIG_BLK_DEV_SR=m
# CONFIG_BLK_DEV_SR_VENDOR is not set # CONFIG_BLK_DEV_SR_VENDOR is not set
CONFIG_CHR_DEV_SG=m CONFIG_CHR_DEV_SG=m
...@@ -265,37 +265,25 @@ CONFIG_SCSI_FC_ATTRS=y ...@@ -265,37 +265,25 @@ CONFIG_SCSI_FC_ATTRS=y
# SCSI low-level drivers # SCSI low-level drivers
# #
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set # CONFIG_BLK_DEV_3W_XXXX_RAID is not set
# CONFIG_SCSI_3W_9XXX is not set
# CONFIG_SCSI_ACARD is not set # CONFIG_SCSI_ACARD is not set
# CONFIG_SCSI_AACRAID is not set # CONFIG_SCSI_AACRAID is not set
CONFIG_SCSI_AIC7XXX=m # CONFIG_SCSI_AIC7XXX is not set
CONFIG_AIC7XXX_CMDS_PER_DEVICE=32 # CONFIG_SCSI_AIC7XXX_OLD is not set
CONFIG_AIC7XXX_RESET_DELAY_MS=15000 # CONFIG_SCSI_AIC79XX is not set
# CONFIG_AIC7XXX_BUILD_FIRMWARE is not set
CONFIG_AIC7XXX_DEBUG_ENABLE=y
CONFIG_AIC7XXX_DEBUG_MASK=0
CONFIG_AIC7XXX_REG_PRETTY_PRINT=y
CONFIG_SCSI_AIC7XXX_OLD=m
CONFIG_SCSI_AIC79XX=m
CONFIG_AIC79XX_CMDS_PER_DEVICE=32
CONFIG_AIC79XX_RESET_DELAY_MS=15000
# CONFIG_AIC79XX_BUILD_FIRMWARE is not set
# CONFIG_AIC79XX_ENABLE_RD_STRM is not set
CONFIG_AIC79XX_DEBUG_ENABLE=y
CONFIG_AIC79XX_DEBUG_MASK=0
CONFIG_AIC79XX_REG_PRETTY_PRINT=y
# CONFIG_SCSI_ADVANSYS is not set # CONFIG_SCSI_ADVANSYS is not set
CONFIG_SCSI_MEGARAID=m # CONFIG_SCSI_MEGARAID is not set
CONFIG_SCSI_SATA=y CONFIG_SCSI_SATA=y
CONFIG_SCSI_SATA_SVW=m # CONFIG_SCSI_SATA_SVW is not set
CONFIG_SCSI_ATA_PIIX=m # CONFIG_SCSI_ATA_PIIX is not set
CONFIG_SCSI_SATA_PROMISE=m # CONFIG_SCSI_SATA_NV is not set
# CONFIG_SCSI_SATA_PROMISE is not set
# CONFIG_SCSI_SATA_SX4 is not set # CONFIG_SCSI_SATA_SX4 is not set
# CONFIG_SCSI_SATA_SIL is not set # CONFIG_SCSI_SATA_SIL is not set
# CONFIG_SCSI_SATA_SIS is not set # CONFIG_SCSI_SATA_SIS is not set
CONFIG_SCSI_SATA_VIA=m # CONFIG_SCSI_SATA_VIA is not set
CONFIG_SCSI_SATA_VITESSE=y CONFIG_SCSI_SATA_VITESSE=y
# CONFIG_SCSI_BUSLOGIC is not set # CONFIG_SCSI_BUSLOGIC is not set
# CONFIG_SCSI_CPQFCTS is not set
# CONFIG_SCSI_DMX3191D is not set # CONFIG_SCSI_DMX3191D is not set
# CONFIG_SCSI_EATA is not set # CONFIG_SCSI_EATA is not set
# CONFIG_SCSI_EATA_PIO is not set # CONFIG_SCSI_EATA_PIO is not set
...@@ -303,11 +291,7 @@ CONFIG_SCSI_SATA_VITESSE=y ...@@ -303,11 +291,7 @@ CONFIG_SCSI_SATA_VITESSE=y
# CONFIG_SCSI_GDTH is not set # CONFIG_SCSI_GDTH is not set
# CONFIG_SCSI_IPS is not set # CONFIG_SCSI_IPS is not set
# CONFIG_SCSI_INIA100 is not set # CONFIG_SCSI_INIA100 is not set
CONFIG_SCSI_SYM53C8XX_2=m # CONFIG_SCSI_SYM53C8XX_2 is not set
CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
# CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set
# CONFIG_SCSI_IPR is not set # CONFIG_SCSI_IPR is not set
# CONFIG_SCSI_QLOGIC_ISP is not set # CONFIG_SCSI_QLOGIC_ISP is not set
# CONFIG_SCSI_QLOGIC_FC is not set # CONFIG_SCSI_QLOGIC_FC is not set
...@@ -317,8 +301,8 @@ CONFIG_SCSI_QLA2XXX=y ...@@ -317,8 +301,8 @@ CONFIG_SCSI_QLA2XXX=y
CONFIG_SCSI_QLA22XX=y CONFIG_SCSI_QLA22XX=y
CONFIG_SCSI_QLA2300=y CONFIG_SCSI_QLA2300=y
CONFIG_SCSI_QLA2322=y CONFIG_SCSI_QLA2322=y
CONFIG_SCSI_QLA6312=y # CONFIG_SCSI_QLA6312 is not set
CONFIG_SCSI_QLA6322=y # CONFIG_SCSI_QLA6322 is not set
# CONFIG_SCSI_DC395x is not set # CONFIG_SCSI_DC395x is not set
# CONFIG_SCSI_DC390T is not set # CONFIG_SCSI_DC390T is not set
# CONFIG_SCSI_DEBUG is not set # CONFIG_SCSI_DEBUG is not set
...@@ -336,6 +320,9 @@ CONFIG_MD_RAID5=y ...@@ -336,6 +320,9 @@ CONFIG_MD_RAID5=y
CONFIG_MD_MULTIPATH=y CONFIG_MD_MULTIPATH=y
CONFIG_BLK_DEV_DM=y CONFIG_BLK_DEV_DM=y
CONFIG_DM_CRYPT=m CONFIG_DM_CRYPT=m
CONFIG_DM_SNAPSHOT=m
CONFIG_DM_MIRROR=m
CONFIG_DM_ZERO=m
# #
# Fusion MPT device support # Fusion MPT device support
...@@ -344,7 +331,6 @@ CONFIG_FUSION=y ...@@ -344,7 +331,6 @@ CONFIG_FUSION=y
CONFIG_FUSION_MAX_SGE=40 CONFIG_FUSION_MAX_SGE=40
CONFIG_FUSION_ISENSE=m CONFIG_FUSION_ISENSE=m
CONFIG_FUSION_CTL=m CONFIG_FUSION_CTL=m
# CONFIG_FUSION_LAN is not set
# #
# IEEE 1394 (FireWire) support # IEEE 1394 (FireWire) support
...@@ -371,126 +357,38 @@ CONFIG_UNIX=y ...@@ -371,126 +357,38 @@ CONFIG_UNIX=y
# CONFIG_NET_KEY is not set # CONFIG_NET_KEY is not set
CONFIG_INET=y CONFIG_INET=y
CONFIG_IP_MULTICAST=y CONFIG_IP_MULTICAST=y
CONFIG_IP_ADVANCED_ROUTER=y # CONFIG_IP_ADVANCED_ROUTER is not set
CONFIG_IP_MULTIPLE_TABLES=y
# CONFIG_IP_ROUTE_FWMARK is not set
CONFIG_IP_ROUTE_NAT=y
CONFIG_IP_ROUTE_MULTIPATH=y
CONFIG_IP_ROUTE_TOS=y
CONFIG_IP_ROUTE_VERBOSE=y
# CONFIG_IP_PNP is not set # CONFIG_IP_PNP is not set
CONFIG_NET_IPIP=m # CONFIG_NET_IPIP is not set
CONFIG_NET_IPGRE=m # CONFIG_NET_IPGRE is not set
# CONFIG_NET_IPGRE_BROADCAST is not set # CONFIG_IP_MROUTE is not set
CONFIG_IP_MROUTE=y # CONFIG_ARPD is not set
CONFIG_IP_PIMSM_V1=y
CONFIG_IP_PIMSM_V2=y
CONFIG_ARPD=y
CONFIG_SYN_COOKIES=y CONFIG_SYN_COOKIES=y
CONFIG_INET_AH=m # CONFIG_INET_AH is not set
CONFIG_INET_ESP=m # CONFIG_INET_ESP is not set
CONFIG_INET_IPCOMP=m # CONFIG_INET_IPCOMP is not set
#
# IP: Virtual Server Configuration
#
# CONFIG_IP_VS is not set
CONFIG_IPV6=m CONFIG_IPV6=m
CONFIG_IPV6_PRIVACY=y # CONFIG_IPV6_PRIVACY is not set
CONFIG_INET6_AH=m # CONFIG_INET6_AH is not set
CONFIG_INET6_ESP=m # CONFIG_INET6_ESP is not set
CONFIG_INET6_IPCOMP=m # CONFIG_INET6_IPCOMP is not set
CONFIG_IPV6_TUNNEL=m # CONFIG_IPV6_TUNNEL is not set
CONFIG_NETFILTER=y # CONFIG_NETFILTER is not set
# CONFIG_NETFILTER_DEBUG is not set
CONFIG_BRIDGE_NETFILTER=y
#
# IP: Netfilter Configuration
#
CONFIG_IP_NF_CONNTRACK=m
CONFIG_IP_NF_FTP=m
CONFIG_IP_NF_IRC=m
CONFIG_IP_NF_TFTP=m
CONFIG_IP_NF_AMANDA=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_PHYSDEV=m
CONFIG_IP_NF_FILTER=m
CONFIG_IP_NF_TARGET_REJECT=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_LOCAL is not set
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_LOG=m
CONFIG_IP_NF_TARGET_ULOG=m
CONFIG_IP_NF_TARGET_TCPMSS=m
CONFIG_IP_NF_ARPTABLES=m
CONFIG_IP_NF_ARPFILTER=m
CONFIG_IP_NF_ARP_MANGLE=m
# CONFIG_IP_NF_COMPAT_IPCHAINS is not set
# CONFIG_IP_NF_COMPAT_IPFWADM is not set
# CONFIG_IP_NF_RAW is not set
#
# IPv6: Netfilter Configuration
#
# CONFIG_IP6_NF_QUEUE is not set
# CONFIG_IP6_NF_IPTABLES is not set
#
# Bridge: Netfilter Configuration
#
# CONFIG_BRIDGE_NF_EBTABLES is not set
CONFIG_XFRM=y
CONFIG_XFRM_USER=m
# #
# SCTP Configuration (EXPERIMENTAL) # SCTP Configuration (EXPERIMENTAL)
# #
# CONFIG_IP_SCTP is not set # CONFIG_IP_SCTP is not set
# CONFIG_ATM is not set # CONFIG_ATM is not set
CONFIG_BRIDGE=m # CONFIG_BRIDGE is not set
CONFIG_VLAN_8021Q=m # CONFIG_VLAN_8021Q is not set
# CONFIG_DECNET is not set # CONFIG_DECNET is not set
# CONFIG_LLC2 is not set # CONFIG_LLC2 is not set
# CONFIG_IPX is not set # CONFIG_IPX is not set
# CONFIG_ATALK is not set # CONFIG_ATALK is not set
# CONFIG_X25 is not set # CONFIG_X25 is not set
# CONFIG_LAPB is not set # CONFIG_LAPB is not set
CONFIG_NET_DIVERT=y # CONFIG_NET_DIVERT is not set
# CONFIG_ECONET is not set # CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set # CONFIG_WAN_ROUTER is not set
# CONFIG_NET_FASTROUTE is not set # CONFIG_NET_FASTROUTE is not set
...@@ -499,31 +397,8 @@ CONFIG_NET_DIVERT=y ...@@ -499,31 +397,8 @@ CONFIG_NET_DIVERT=y
# #
# QoS and/or fair queueing # QoS and/or fair queueing
# #
CONFIG_NET_SCHED=y # CONFIG_NET_SCHED is not set
CONFIG_NET_SCH_CBQ=m # CONFIG_NET_CLS_ROUTE is not set
CONFIG_NET_SCH_HTB=m
CONFIG_NET_SCH_HFSC=m
CONFIG_NET_SCH_CSZ=m
CONFIG_NET_SCH_PRIO=m
CONFIG_NET_SCH_RED=m
CONFIG_NET_SCH_SFQ=m
CONFIG_NET_SCH_TEQL=m
CONFIG_NET_SCH_TBF=m
CONFIG_NET_SCH_GRED=m
CONFIG_NET_SCH_DSMARK=m
# CONFIG_NET_SCH_DELAY is not set
# CONFIG_NET_SCH_INGRESS is not set
CONFIG_NET_QOS=y
CONFIG_NET_ESTIMATOR=y
CONFIG_NET_CLS=y
CONFIG_NET_CLS_TCINDEX=m
CONFIG_NET_CLS_ROUTE4=m
CONFIG_NET_CLS_ROUTE=y
CONFIG_NET_CLS_FW=m
CONFIG_NET_CLS_U32=m
CONFIG_NET_CLS_RSVP=m
CONFIG_NET_CLS_RSVP6=m
CONFIG_NET_CLS_POLICE=y
# #
# Network testing # Network testing
...@@ -537,10 +412,10 @@ CONFIG_NET_POLL_CONTROLLER=y ...@@ -537,10 +412,10 @@ CONFIG_NET_POLL_CONTROLLER=y
# CONFIG_IRDA is not set # CONFIG_IRDA is not set
# CONFIG_BT is not set # CONFIG_BT is not set
CONFIG_NETDEVICES=y CONFIG_NETDEVICES=y
CONFIG_DUMMY=m # CONFIG_DUMMY is not set
CONFIG_BONDING=m # CONFIG_BONDING is not set
CONFIG_EQUALIZER=m # CONFIG_EQUALIZER is not set
CONFIG_TUN=m # CONFIG_TUN is not set
# CONFIG_ETHERTAP is not set # CONFIG_ETHERTAP is not set
# #
...@@ -551,66 +426,27 @@ CONFIG_TUN=m ...@@ -551,66 +426,27 @@ CONFIG_TUN=m
# #
# Ethernet (10 or 100Mbit) # Ethernet (10 or 100Mbit)
# #
CONFIG_NET_ETHERNET=y # CONFIG_NET_ETHERNET is not set
CONFIG_MII=m
# CONFIG_HAPPYMEAL is not set
# CONFIG_SUNGEM is not set
# CONFIG_NET_VENDOR_3COM is not set
#
# Tulip family network device support
#
CONFIG_NET_TULIP=y
# CONFIG_DE2104X is not set
CONFIG_TULIP=m
# CONFIG_TULIP_MWI is not set
# CONFIG_TULIP_MMIO is not set
# CONFIG_TULIP_NAPI is not set
# CONFIG_DE4X5 is not set
# CONFIG_WINBOND_840 is not set
# CONFIG_DM9102 is not set
# CONFIG_HP100 is not set
CONFIG_NET_PCI=y
# CONFIG_PCNET32 is not set
# CONFIG_AMD8111_ETH is not set
# CONFIG_ADAPTEC_STARFIRE is not set
# CONFIG_B44 is not set
# CONFIG_FORCEDETH is not set
# CONFIG_DGRS is not set
CONFIG_EEPRO100=m
# CONFIG_EEPRO100_PIO is not set
# CONFIG_E100 is not set
# CONFIG_FEALNX is not set
# CONFIG_NATSEMI is not set
# CONFIG_NE2K_PCI is not set
# CONFIG_8139CP is not set
# CONFIG_8139TOO is not set
# CONFIG_SIS900 is not set
# CONFIG_EPIC100 is not set
# CONFIG_SUNDANCE is not set
# CONFIG_VIA_RHINE is not set
# #
# Ethernet (1000 Mbit) # Ethernet (1000 Mbit)
# #
CONFIG_ACENIC=m # CONFIG_ACENIC is not set
# CONFIG_ACENIC_OMIT_TIGON_I is not set # CONFIG_DL2K is not set
CONFIG_DL2K=m # CONFIG_E1000 is not set
CONFIG_E1000=y # CONFIG_NS83820 is not set
# CONFIG_E1000_NAPI is not set # CONFIG_HAMACHI is not set
CONFIG_NS83820=m # CONFIG_YELLOWFIN is not set
CONFIG_HAMACHI=m # CONFIG_R8169 is not set
CONFIG_YELLOWFIN=m # CONFIG_SK98LIN is not set
CONFIG_R8169=m
CONFIG_SK98LIN=m
CONFIG_TIGON3=y CONFIG_TIGON3=y
# #
# Ethernet (10000 Mbit) # Ethernet (10000 Mbit)
# #
CONFIG_IXGB=m # CONFIG_IXGB is not set
# CONFIG_IXGB_NAPI is not set CONFIG_S2IO=m
# CONFIG_S2IO is not set # CONFIG_S2IO_NAPI is not set
# #
# Token Ring devices # Token Ring devices
...@@ -628,16 +464,9 @@ CONFIG_IXGB=m ...@@ -628,16 +464,9 @@ CONFIG_IXGB=m
# CONFIG_WAN is not set # CONFIG_WAN is not set
# CONFIG_FDDI is not set # CONFIG_FDDI is not set
# CONFIG_HIPPI is not set # CONFIG_HIPPI is not set
CONFIG_PPP=m # CONFIG_PPP is not set
CONFIG_PPP_MULTILINK=y
CONFIG_PPP_FILTER=y
CONFIG_PPP_ASYNC=m
CONFIG_PPP_SYNC_TTY=m
CONFIG_PPP_DEFLATE=m
# CONFIG_PPP_BSDCOMP is not set
# CONFIG_PPPOE is not set
# CONFIG_SLIP is not set # CONFIG_SLIP is not set
CONFIG_NET_FC=y # CONFIG_NET_FC is not set
# CONFIG_SHAPER is not set # CONFIG_SHAPER is not set
CONFIG_NETCONSOLE=y CONFIG_NETCONSOLE=y
...@@ -660,7 +489,7 @@ CONFIG_INPUT=y ...@@ -660,7 +489,7 @@ CONFIG_INPUT=y
# Userland interfaces # Userland interfaces
# #
CONFIG_INPUT_MOUSEDEV=y CONFIG_INPUT_MOUSEDEV=y
CONFIG_INPUT_MOUSEDEV_PSAUX=y # CONFIG_INPUT_MOUSEDEV_PSAUX is not set
CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
# CONFIG_INPUT_JOYDEV is not set # CONFIG_INPUT_JOYDEV is not set
...@@ -673,25 +502,14 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 ...@@ -673,25 +502,14 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
# #
# CONFIG_GAMEPORT is not set # CONFIG_GAMEPORT is not set
CONFIG_SOUND_GAMEPORT=y CONFIG_SOUND_GAMEPORT=y
CONFIG_SERIO=y # CONFIG_SERIO is not set
CONFIG_SERIO_I8042=y # CONFIG_SERIO_I8042 is not set
# CONFIG_SERIO_SERPORT is not set
# CONFIG_SERIO_CT82C710 is not set
# CONFIG_SERIO_PCIPS2 is not set
# #
# Input Device Drivers # Input Device Drivers
# #
CONFIG_INPUT_KEYBOARD=y # CONFIG_INPUT_KEYBOARD is not set
CONFIG_KEYBOARD_ATKBD=y # CONFIG_INPUT_MOUSE is not set
# CONFIG_KEYBOARD_SUNKBD is not set
# CONFIG_KEYBOARD_LKKBD is not set
# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_NEWTON is not set
CONFIG_INPUT_MOUSE=y
CONFIG_MOUSE_PS2=y
# CONFIG_MOUSE_SERIAL is not set
# CONFIG_MOUSE_VSXXXAA is not set
# CONFIG_INPUT_JOYSTICK is not set # CONFIG_INPUT_JOYSTICK is not set
# CONFIG_INPUT_TOUCHSCREEN is not set # CONFIG_INPUT_TOUCHSCREEN is not set
# CONFIG_INPUT_MISC is not set # CONFIG_INPUT_MISC is not set
...@@ -746,6 +564,7 @@ CONFIG_EFI_RTC=y ...@@ -746,6 +564,7 @@ CONFIG_EFI_RTC=y
# CONFIG_AGP is not set # CONFIG_AGP is not set
# CONFIG_DRM is not set # CONFIG_DRM is not set
CONFIG_RAW_DRIVER=m CONFIG_RAW_DRIVER=m
# CONFIG_HPET is not set
CONFIG_MAX_RAW_DEVS=256 CONFIG_MAX_RAW_DEVS=256
# #
...@@ -787,7 +606,102 @@ CONFIG_DUMMY_CONSOLE=y ...@@ -787,7 +606,102 @@ CONFIG_DUMMY_CONSOLE=y
# #
# USB support # USB support
# #
# CONFIG_USB is not set CONFIG_USB=m
# CONFIG_USB_DEBUG is not set
#
# Miscellaneous USB options
#
# CONFIG_USB_DEVICEFS is not set
# CONFIG_USB_BANDWIDTH is not set
# CONFIG_USB_DYNAMIC_MINORS is not set
#
# USB Host Controller Drivers
#
CONFIG_USB_EHCI_HCD=m
# CONFIG_USB_EHCI_SPLIT_ISO is not set
# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
CONFIG_USB_OHCI_HCD=m
CONFIG_USB_UHCI_HCD=m
#
# USB Device Class drivers
#
# CONFIG_USB_BLUETOOTH_TTY is not set
# CONFIG_USB_ACM is not set
# CONFIG_USB_PRINTER is not set
# CONFIG_USB_STORAGE is not set
#
# USB Human Interface Devices (HID)
#
CONFIG_USB_HID=m
CONFIG_USB_HIDINPUT=y
# CONFIG_HID_FF is not set
# CONFIG_USB_HIDDEV is not set
#
# USB HID Boot Protocol drivers
#
# CONFIG_USB_KBD is not set
# CONFIG_USB_MOUSE is not set
# CONFIG_USB_AIPTEK is not set
# CONFIG_USB_WACOM is not set
# CONFIG_USB_KBTAB is not set
# CONFIG_USB_POWERMATE is not set
# CONFIG_USB_MTOUCH is not set
# CONFIG_USB_EGALAX is not set
# CONFIG_USB_XPAD is not set
# CONFIG_USB_ATI_REMOTE is not set
#
# USB Imaging devices
#
# CONFIG_USB_MDC800 is not set
# CONFIG_USB_MICROTEK is not set
# CONFIG_USB_HPUSBSCSI is not set
#
# USB Multimedia devices
#
# CONFIG_USB_DABUSB is not set
#
# Video4Linux support is needed for USB Multimedia device support
#
#
# USB Network adaptors
#
# CONFIG_USB_CATC is not set
# CONFIG_USB_KAWETH is not set
# CONFIG_USB_PEGASUS is not set
# CONFIG_USB_RTL8150 is not set
# CONFIG_USB_USBNET is not set
#
# USB port drivers
#
#
# USB Serial Converter support
#
# CONFIG_USB_SERIAL is not set
#
# USB Miscellaneous drivers
#
# CONFIG_USB_EMI62 is not set
# CONFIG_USB_EMI26 is not set
# CONFIG_USB_TIGL is not set
# CONFIG_USB_AUERSWALD is not set
# CONFIG_USB_RIO500 is not set
# CONFIG_USB_LEGOTOWER is not set
# CONFIG_USB_LCD is not set
# CONFIG_USB_LED is not set
# CONFIG_USB_CYTHERM is not set
# CONFIG_USB_PHIDGETSERVO is not set
# #
# USB Gadget Support # USB Gadget Support
...@@ -797,18 +711,23 @@ CONFIG_DUMMY_CONSOLE=y ...@@ -797,18 +711,23 @@ CONFIG_DUMMY_CONSOLE=y
# #
# File systems # File systems
# #
CONFIG_EXT2_FS=y CONFIG_EXT2_FS=m
CONFIG_EXT2_FS_XATTR=y CONFIG_EXT2_FS_XATTR=y
CONFIG_EXT2_FS_POSIX_ACL=y CONFIG_EXT2_FS_POSIX_ACL=y
# CONFIG_EXT2_FS_SECURITY is not set CONFIG_EXT2_FS_SECURITY=y
CONFIG_EXT3_FS=y CONFIG_EXT3_FS=y
CONFIG_EXT3_FS_XATTR=y CONFIG_EXT3_FS_XATTR=y
CONFIG_EXT3_FS_POSIX_ACL=y CONFIG_EXT3_FS_POSIX_ACL=y
# CONFIG_EXT3_FS_SECURITY is not set CONFIG_EXT3_FS_SECURITY=y
CONFIG_JBD=y CONFIG_JBD=y
# CONFIG_JBD_DEBUG is not set # CONFIG_JBD_DEBUG is not set
CONFIG_FS_MBCACHE=y CONFIG_FS_MBCACHE=y
# CONFIG_REISERFS_FS is not set CONFIG_REISERFS_FS=y
# CONFIG_REISERFS_CHECK is not set
# CONFIG_REISERFS_PROC_INFO is not set
CONFIG_REISERFS_FS_XATTR=y
CONFIG_REISERFS_FS_POSIX_ACL=y
CONFIG_REISERFS_FS_SECURITY=y
# CONFIG_JFS_FS is not set # CONFIG_JFS_FS is not set
CONFIG_FS_POSIX_ACL=y CONFIG_FS_POSIX_ACL=y
CONFIG_XFS_FS=y CONFIG_XFS_FS=y
...@@ -822,8 +741,8 @@ CONFIG_QUOTA=y ...@@ -822,8 +741,8 @@ CONFIG_QUOTA=y
# CONFIG_QFMT_V1 is not set # CONFIG_QFMT_V1 is not set
# CONFIG_QFMT_V2 is not set # CONFIG_QFMT_V2 is not set
CONFIG_QUOTACTL=y CONFIG_QUOTACTL=y
CONFIG_AUTOFS_FS=y CONFIG_AUTOFS_FS=m
CONFIG_AUTOFS4_FS=y CONFIG_AUTOFS4_FS=m
# #
# CD-ROM/DVD Filesystems # CD-ROM/DVD Filesystems
...@@ -839,6 +758,8 @@ CONFIG_UDF_FS=m ...@@ -839,6 +758,8 @@ CONFIG_UDF_FS=m
CONFIG_FAT_FS=y CONFIG_FAT_FS=y
# CONFIG_MSDOS_FS is not set # CONFIG_MSDOS_FS is not set
CONFIG_VFAT_FS=y CONFIG_VFAT_FS=y
CONFIG_FAT_DEFAULT_CODEPAGE=437
CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
# CONFIG_NTFS_FS is not set # CONFIG_NTFS_FS is not set
# #
...@@ -874,22 +795,25 @@ CONFIG_RAMFS=y ...@@ -874,22 +795,25 @@ CONFIG_RAMFS=y
# #
# Network File Systems # Network File Systems
# #
CONFIG_NFS_FS=y CONFIG_NFS_FS=m
CONFIG_NFS_V3=y CONFIG_NFS_V3=y
# CONFIG_NFS_V4 is not set CONFIG_NFS_V4=y
# CONFIG_NFS_DIRECTIO is not set CONFIG_NFS_DIRECTIO=y
CONFIG_NFSD=y CONFIG_NFSD=m
CONFIG_NFSD_V3=y CONFIG_NFSD_V3=y
# CONFIG_NFSD_V4 is not set CONFIG_NFSD_V4=y
# CONFIG_NFSD_TCP is not set CONFIG_NFSD_TCP=y
CONFIG_LOCKD=y CONFIG_LOCKD=m
CONFIG_LOCKD_V4=y CONFIG_LOCKD_V4=y
CONFIG_EXPORTFS=y CONFIG_EXPORTFS=m
CONFIG_SUNRPC=y CONFIG_SUNRPC=m
# CONFIG_RPCSEC_GSS_KRB5 is not set CONFIG_SUNRPC_GSS=m
CONFIG_RPCSEC_GSS_KRB5=m
CONFIG_SMB_FS=m CONFIG_SMB_FS=m
# CONFIG_SMB_NLS_DEFAULT is not set # CONFIG_SMB_NLS_DEFAULT is not set
# CONFIG_CIFS is not set CONFIG_CIFS=m
# CONFIG_CIFS_STATS is not set
# CONFIG_CIFS_POSIX is not set
# CONFIG_NCP_FS is not set # CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set # CONFIG_CODA_FS is not set
# CONFIG_AFS_FS is not set # CONFIG_AFS_FS is not set
...@@ -909,7 +833,6 @@ CONFIG_MSDOS_PARTITION=y ...@@ -909,7 +833,6 @@ CONFIG_MSDOS_PARTITION=y
# CONFIG_SOLARIS_X86_PARTITION is not set # CONFIG_SOLARIS_X86_PARTITION is not set
# CONFIG_UNIXWARE_DISKLABEL is not set # CONFIG_UNIXWARE_DISKLABEL is not set
# CONFIG_LDM_PARTITION is not set # CONFIG_LDM_PARTITION is not set
# CONFIG_NEC98_PARTITION is not set
CONFIG_SGI_PARTITION=y CONFIG_SGI_PARTITION=y
# CONFIG_ULTRIX_PARTITION is not set # CONFIG_ULTRIX_PARTITION is not set
# CONFIG_SUN_PARTITION is not set # CONFIG_SUN_PARTITION is not set
...@@ -920,7 +843,7 @@ CONFIG_EFI_PARTITION=y ...@@ -920,7 +843,7 @@ CONFIG_EFI_PARTITION=y
# #
CONFIG_NLS=y CONFIG_NLS=y
CONFIG_NLS_DEFAULT="iso8859-1" CONFIG_NLS_DEFAULT="iso8859-1"
# CONFIG_NLS_CODEPAGE_437 is not set CONFIG_NLS_CODEPAGE_437=y
# CONFIG_NLS_CODEPAGE_737 is not set # CONFIG_NLS_CODEPAGE_737 is not set
# CONFIG_NLS_CODEPAGE_775 is not set # CONFIG_NLS_CODEPAGE_775 is not set
# CONFIG_NLS_CODEPAGE_850 is not set # CONFIG_NLS_CODEPAGE_850 is not set
...@@ -943,7 +866,8 @@ CONFIG_NLS_DEFAULT="iso8859-1" ...@@ -943,7 +866,8 @@ CONFIG_NLS_DEFAULT="iso8859-1"
# CONFIG_NLS_ISO8859_8 is not set # CONFIG_NLS_ISO8859_8 is not set
# CONFIG_NLS_CODEPAGE_1250 is not set # CONFIG_NLS_CODEPAGE_1250 is not set
# CONFIG_NLS_CODEPAGE_1251 is not set # CONFIG_NLS_CODEPAGE_1251 is not set
# CONFIG_NLS_ISO8859_1 is not set # CONFIG_NLS_ASCII is not set
CONFIG_NLS_ISO8859_1=y
# CONFIG_NLS_ISO8859_2 is not set # CONFIG_NLS_ISO8859_2 is not set
# CONFIG_NLS_ISO8859_3 is not set # CONFIG_NLS_ISO8859_3 is not set
# CONFIG_NLS_ISO8859_4 is not set # CONFIG_NLS_ISO8859_4 is not set
...@@ -956,7 +880,7 @@ CONFIG_NLS_DEFAULT="iso8859-1" ...@@ -956,7 +880,7 @@ CONFIG_NLS_DEFAULT="iso8859-1"
# CONFIG_NLS_ISO8859_15 is not set # CONFIG_NLS_ISO8859_15 is not set
# CONFIG_NLS_KOI8_R is not set # CONFIG_NLS_KOI8_R is not set
# CONFIG_NLS_KOI8_U is not set # CONFIG_NLS_KOI8_U is not set
# CONFIG_NLS_UTF8 is not set CONFIG_NLS_UTF8=y
# #
# Library routines # Library routines
...@@ -985,7 +909,7 @@ CONFIG_MAGIC_SYSRQ=y ...@@ -985,7 +909,7 @@ CONFIG_MAGIC_SYSRQ=y
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set # CONFIG_DEBUG_SPINLOCK_SLEEP is not set
# CONFIG_IA64_DEBUG_CMPXCHG is not set # CONFIG_IA64_DEBUG_CMPXCHG is not set
# CONFIG_IA64_DEBUG_IRQ is not set # CONFIG_IA64_DEBUG_IRQ is not set
# CONFIG_DEBUG_INFO is not set CONFIG_DEBUG_INFO=y
CONFIG_SYSVIPC_COMPAT=y CONFIG_SYSVIPC_COMPAT=y
# #
......
...@@ -44,7 +44,7 @@ ...@@ -44,7 +44,7 @@
GLOBAL_ENTRY(efi_call_phys) GLOBAL_ENTRY(efi_call_phys)
.prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(8) .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(8)
alloc loc1=ar.pfs,8,5,7,0 alloc loc1=ar.pfs,8,7,7,0
ld8 r2=[in0],8 // load EFI function's entry point ld8 r2=[in0],8 // load EFI function's entry point
mov loc0=rp mov loc0=rp
.body .body
...@@ -70,9 +70,13 @@ GLOBAL_ENTRY(efi_call_phys) ...@@ -70,9 +70,13 @@ GLOBAL_ENTRY(efi_call_phys)
mov out3=in4 mov out3=in4
mov out5=in6 mov out5=in6
mov out6=in7 mov out6=in7
mov loc5=r19
mov loc6=r20
br.call.sptk.many rp=b6 // call the EFI function br.call.sptk.many rp=b6 // call the EFI function
.ret1: mov ar.rsc=0 // put RSE in enforced lazy, LE mode .ret1: mov ar.rsc=0 // put RSE in enforced lazy, LE mode
mov r16=loc3 mov r16=loc3
mov r19=loc5
mov r20=loc6
br.call.sptk.many rp=ia64_switch_mode_virt // return to virtual mode br.call.sptk.many rp=ia64_switch_mode_virt // return to virtual mode
.ret2: mov ar.rsc=loc4 // restore RSE configuration .ret2: mov ar.rsc=loc4 // restore RSE configuration
mov ar.pfs=loc1 mov ar.pfs=loc1
......
...@@ -182,7 +182,7 @@ GLOBAL_ENTRY(ia64_switch_to) ...@@ -182,7 +182,7 @@ GLOBAL_ENTRY(ia64_switch_to)
movl r25=init_task movl r25=init_task
mov r27=IA64_KR(CURRENT_STACK) mov r27=IA64_KR(CURRENT_STACK)
adds r21=IA64_TASK_THREAD_KSP_OFFSET,in0 adds r21=IA64_TASK_THREAD_KSP_OFFSET,in0
dep r20=0,in0,61,3 // physical address of "current" dep r20=0,in0,61,3 // physical address of "next"
;; ;;
st8 [r22]=sp // save kernel stack pointer of old task st8 [r22]=sp // save kernel stack pointer of old task
shr.u r26=r20,IA64_GRANULE_SHIFT shr.u r26=r20,IA64_GRANULE_SHIFT
...@@ -195,7 +195,7 @@ GLOBAL_ENTRY(ia64_switch_to) ...@@ -195,7 +195,7 @@ GLOBAL_ENTRY(ia64_switch_to)
(p6) br.cond.dpnt .map (p6) br.cond.dpnt .map
;; ;;
.done: .done:
(p6) ssm psr.ic // if we we had to map, renable the psr.ic bit FIRST!!! (p6) ssm psr.ic // if we had to map, reenable the psr.ic bit FIRST!!!
;; ;;
(p6) srlz.d (p6) srlz.d
ld8 sp=[r21] // load kernel stack pointer of new task ld8 sp=[r21] // load kernel stack pointer of new task
......
...@@ -67,7 +67,7 @@ start_ap: ...@@ -67,7 +67,7 @@ start_ap:
* Initialize kernel region registers: * Initialize kernel region registers:
* rr[5]: VHPT enabled, page size = PAGE_SHIFT * rr[5]: VHPT enabled, page size = PAGE_SHIFT
* rr[6]: VHPT disabled, page size = IA64_GRANULE_SHIFT * rr[6]: VHPT disabled, page size = IA64_GRANULE_SHIFT
* rr[5]: VHPT disabled, page size = IA64_GRANULE_SHIFT * rr[7]: VHPT disabled, page size = IA64_GRANULE_SHIFT
*/ */
mov r16=((ia64_rid(IA64_REGION_ID_KERNEL, (5<<61)) << 8) | (PAGE_SHIFT << 2) | 1) mov r16=((ia64_rid(IA64_REGION_ID_KERNEL, (5<<61)) << 8) | (PAGE_SHIFT << 2) | 1)
movl r17=(5<<61) movl r17=(5<<61)
...@@ -154,8 +154,7 @@ start_ap: ...@@ -154,8 +154,7 @@ start_ap:
#endif #endif
;; ;;
tpa r3=r2 // r3 == phys addr of task struct tpa r3=r2 // r3 == phys addr of task struct
;; mov r16=-1
shr.u r16=r3,IA64_GRANULE_SHIFT
(isBP) br.cond.dpnt .load_current // BP stack is on region 5 --- no need to map it (isBP) br.cond.dpnt .load_current // BP stack is on region 5 --- no need to map it
// load mapping for stack (virtaddr in r2, physaddr in r3) // load mapping for stack (virtaddr in r2, physaddr in r3)
...@@ -169,6 +168,7 @@ start_ap: ...@@ -169,6 +168,7 @@ start_ap:
dep r2=-1,r3,61,3 // IMVA of task dep r2=-1,r3,61,3 // IMVA of task
;; ;;
mov r17=rr[r2] mov r17=rr[r2]
shr.u r16=r3,IA64_GRANULE_SHIFT
;; ;;
dep r17=0,r17,8,24 dep r17=0,r17,8,24
;; ;;
...@@ -706,6 +706,9 @@ END(__ia64_init_fpu) ...@@ -706,6 +706,9 @@ END(__ia64_init_fpu)
* *
* Inputs: * Inputs:
* r16 = new psr to establish * r16 = new psr to establish
* Output:
* r19 = old virtual address of ar.bsp
* r20 = old virtual address of sp
* *
* Note: RSE must already be in enforced lazy mode * Note: RSE must already be in enforced lazy mode
*/ */
...@@ -724,12 +727,13 @@ GLOBAL_ENTRY(ia64_switch_mode_phys) ...@@ -724,12 +727,13 @@ GLOBAL_ENTRY(ia64_switch_mode_phys)
mov cr.ipsr=r16 // set new PSR mov cr.ipsr=r16 // set new PSR
add r3=1f-ia64_switch_mode_phys,r15 add r3=1f-ia64_switch_mode_phys,r15
mov r17=ar.bsp mov r19=ar.bsp
mov r20=sp
mov r14=rp // get return address into a general register mov r14=rp // get return address into a general register
;; ;;
// going to physical mode, use tpa to translate virt->phys // going to physical mode, use tpa to translate virt->phys
tpa r17=r17 tpa r17=r19
tpa r3=r3 tpa r3=r3
tpa sp=sp tpa sp=sp
tpa r14=r14 tpa r14=r14
...@@ -752,6 +756,8 @@ END(ia64_switch_mode_phys) ...@@ -752,6 +756,8 @@ END(ia64_switch_mode_phys)
* *
* Inputs: * Inputs:
* r16 = new psr to establish * r16 = new psr to establish
* r19 = new bspstore to establish
* r20 = new sp to establish
* *
* Note: RSE must already be in enforced lazy mode * Note: RSE must already be in enforced lazy mode
*/ */
...@@ -770,7 +776,6 @@ GLOBAL_ENTRY(ia64_switch_mode_virt) ...@@ -770,7 +776,6 @@ GLOBAL_ENTRY(ia64_switch_mode_virt)
mov cr.ipsr=r16 // set new PSR mov cr.ipsr=r16 // set new PSR
add r3=1f-ia64_switch_mode_virt,r15 add r3=1f-ia64_switch_mode_virt,r15
mov r17=ar.bsp
mov r14=rp // get return address into a general register mov r14=rp // get return address into a general register
;; ;;
...@@ -781,15 +786,14 @@ GLOBAL_ENTRY(ia64_switch_mode_virt) ...@@ -781,15 +786,14 @@ GLOBAL_ENTRY(ia64_switch_mode_virt)
movl r18=KERNEL_START movl r18=KERNEL_START
dep r3=0,r3,KERNEL_TR_PAGE_SHIFT,64-KERNEL_TR_PAGE_SHIFT dep r3=0,r3,KERNEL_TR_PAGE_SHIFT,64-KERNEL_TR_PAGE_SHIFT
dep r14=0,r14,KERNEL_TR_PAGE_SHIFT,64-KERNEL_TR_PAGE_SHIFT dep r14=0,r14,KERNEL_TR_PAGE_SHIFT,64-KERNEL_TR_PAGE_SHIFT
dep r17=-1,r17,61,3 mov sp=r20
dep sp=-1,sp,61,3
;; ;;
or r3=r3,r18 or r3=r3,r18
or r14=r14,r18 or r14=r14,r18
;; ;;
mov r18=ar.rnat // save ar.rnat mov r18=ar.rnat // save ar.rnat
mov ar.bspstore=r17 // this steps on ar.rnat mov ar.bspstore=r19 // this steps on ar.rnat
mov cr.iip=r3 mov cr.iip=r3
mov cr.ifs=r0 mov cr.ifs=r0
;; ;;
......
...@@ -217,10 +217,8 @@ set_rte (unsigned int vector, unsigned int dest, int mask) ...@@ -217,10 +217,8 @@ set_rte (unsigned int vector, unsigned int dest, int mask)
spin_lock_irqsave(&iosapic_lock, flags); spin_lock_irqsave(&iosapic_lock, flags);
{ {
writel(IOSAPIC_RTE_HIGH(rte_index), addr + IOSAPIC_REG_SELECT); iosapic_write(addr, IOSAPIC_RTE_HIGH(rte_index), high32);
writel(high32, addr + IOSAPIC_WINDOW); iosapic_write(addr, IOSAPIC_RTE_LOW(rte_index), low32);
writel(IOSAPIC_RTE_LOW(rte_index), addr + IOSAPIC_REG_SELECT);
writel(low32, addr + IOSAPIC_WINDOW);
iosapic_intr_info[vector].low32 = low32; iosapic_intr_info[vector].low32 = low32;
} }
spin_unlock_irqrestore(&iosapic_lock, flags); spin_unlock_irqrestore(&iosapic_lock, flags);
...@@ -249,12 +247,9 @@ mask_irq (unsigned int irq) ...@@ -249,12 +247,9 @@ mask_irq (unsigned int irq)
spin_lock_irqsave(&iosapic_lock, flags); spin_lock_irqsave(&iosapic_lock, flags);
{ {
writel(IOSAPIC_RTE_LOW(rte_index), addr + IOSAPIC_REG_SELECT);
/* set only the mask bit */ /* set only the mask bit */
low32 = iosapic_intr_info[vec].low32 |= IOSAPIC_MASK; low32 = iosapic_intr_info[vec].low32 |= IOSAPIC_MASK;
iosapic_write(addr, IOSAPIC_RTE_LOW(rte_index), low32);
writel(low32, addr + IOSAPIC_WINDOW);
} }
spin_unlock_irqrestore(&iosapic_lock, flags); spin_unlock_irqrestore(&iosapic_lock, flags);
} }
...@@ -275,9 +270,8 @@ unmask_irq (unsigned int irq) ...@@ -275,9 +270,8 @@ unmask_irq (unsigned int irq)
spin_lock_irqsave(&iosapic_lock, flags); spin_lock_irqsave(&iosapic_lock, flags);
{ {
writel(IOSAPIC_RTE_LOW(rte_index), addr + IOSAPIC_REG_SELECT);
low32 = iosapic_intr_info[vec].low32 &= ~IOSAPIC_MASK; low32 = iosapic_intr_info[vec].low32 &= ~IOSAPIC_MASK;
writel(low32, addr + IOSAPIC_WINDOW); iosapic_write(addr, IOSAPIC_RTE_LOW(rte_index), low32);
} }
spin_unlock_irqrestore(&iosapic_lock, flags); spin_unlock_irqrestore(&iosapic_lock, flags);
} }
...@@ -325,10 +319,8 @@ iosapic_set_affinity (unsigned int irq, cpumask_t mask) ...@@ -325,10 +319,8 @@ iosapic_set_affinity (unsigned int irq, cpumask_t mask)
low32 |= (IOSAPIC_FIXED << IOSAPIC_DELIVERY_SHIFT); low32 |= (IOSAPIC_FIXED << IOSAPIC_DELIVERY_SHIFT);
iosapic_intr_info[vec].low32 = low32; iosapic_intr_info[vec].low32 = low32;
writel(IOSAPIC_RTE_HIGH(rte_index), addr + IOSAPIC_REG_SELECT); iosapic_write(addr, IOSAPIC_RTE_HIGH(rte_index), high32);
writel(high32, addr + IOSAPIC_WINDOW); iosapic_write(addr, IOSAPIC_RTE_LOW(rte_index), low32);
writel(IOSAPIC_RTE_LOW(rte_index), addr + IOSAPIC_REG_SELECT);
writel(low32, addr + IOSAPIC_WINDOW);
} }
spin_unlock_irqrestore(&iosapic_lock, flags); spin_unlock_irqrestore(&iosapic_lock, flags);
#endif #endif
...@@ -351,7 +343,7 @@ iosapic_end_level_irq (unsigned int irq) ...@@ -351,7 +343,7 @@ iosapic_end_level_irq (unsigned int irq)
ia64_vector vec = irq_to_vector(irq); ia64_vector vec = irq_to_vector(irq);
move_irq(irq); move_irq(irq);
writel(vec, iosapic_intr_info[vec].addr + IOSAPIC_EOI); iosapic_eoi(iosapic_intr_info[vec].addr, vec);
} }
#define iosapic_shutdown_level_irq mask_irq #define iosapic_shutdown_level_irq mask_irq
...@@ -428,8 +420,7 @@ iosapic_version (char *addr) ...@@ -428,8 +420,7 @@ iosapic_version (char *addr)
* unsigned int reserved2 : 8; * unsigned int reserved2 : 8;
* } * }
*/ */
writel(IOSAPIC_VERSION, addr + IOSAPIC_REG_SELECT); return iosapic_read(addr, IOSAPIC_VERSION);
return readl(IOSAPIC_WINDOW + addr);
} }
/* /*
......
...@@ -256,7 +256,7 @@ ia64_mca_log_sal_error_record(int sal_info_type) ...@@ -256,7 +256,7 @@ ia64_mca_log_sal_error_record(int sal_info_type)
salinfo_log_wakeup(sal_info_type, buffer, size, irq_safe); salinfo_log_wakeup(sal_info_type, buffer, size, irq_safe);
if (irq_safe) if (irq_safe)
printk(KERN_INFO "CPU %d: SAL log contains %s error record\n", IA64_MCA_DEBUG("CPU %d: SAL log contains %s error record\n",
smp_processor_id(), smp_processor_id(),
sal_info_type < ARRAY_SIZE(rec_name) ? rec_name[sal_info_type] : "UNKNOWN"); sal_info_type < ARRAY_SIZE(rec_name) ? rec_name[sal_info_type] : "UNKNOWN");
......
...@@ -656,8 +656,26 @@ do_reloc (struct module *mod, uint8_t r_type, Elf64_Sym *sym, uint64_t addend, ...@@ -656,8 +656,26 @@ do_reloc (struct module *mod, uint8_t r_type, Elf64_Sym *sym, uint64_t addend,
case RV_PCREL: case RV_PCREL:
switch (r_type) { switch (r_type) {
case R_IA64_PCREL21B: case R_IA64_PCREL21B:
/* special because it can cross into other module/kernel-core. */ if (in_init(mod, val)) {
if (!is_internal(mod, val)) /* Calls to init code from core are bad news */
if (in_core(mod, (uint64_t)location)) {
printk(KERN_ERR "%s: init symbol 0x%lx used in module code at %p\n",
mod->name, val, location);
return -ENOEXEC;
}
} else if (in_core(mod, val)) {
/*
* Init section may have been allocated far away from core,
* if the branch won't reach, then allocate a plt for it.
*/
if (in_init(mod, (uint64_t)location)) {
uint64_t delta = ((int64_t)val - (int64_t)location) / 16;
if (delta + (1 << 20) >= (1 << 21)) {
val = get_fdesc(mod, val, &ok);
val = get_plt(mod, location, val, &ok);
}
}
} else
val = get_plt(mod, location, val, &ok); val = get_plt(mod, location, val, &ok);
/* FALL THROUGH */ /* FALL THROUGH */
default: default:
......
...@@ -55,7 +55,7 @@ END(ia64_pal_default_handler) ...@@ -55,7 +55,7 @@ END(ia64_pal_default_handler)
*/ */
GLOBAL_ENTRY(ia64_pal_call_static) GLOBAL_ENTRY(ia64_pal_call_static)
.prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(6) .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(6)
alloc loc1 = ar.pfs,6,90,0,0 alloc loc1 = ar.pfs,5,5,0,0
movl loc2 = pal_entry_point movl loc2 = pal_entry_point
1: { 1: {
mov r28 = in0 mov r28 = in0
...@@ -66,7 +66,9 @@ GLOBAL_ENTRY(ia64_pal_call_static) ...@@ -66,7 +66,9 @@ GLOBAL_ENTRY(ia64_pal_call_static)
ld8 loc2 = [loc2] // loc2 <- entry point ld8 loc2 = [loc2] // loc2 <- entry point
tbit.nz p6,p7 = in4, 0 tbit.nz p6,p7 = in4, 0
adds r8 = 1f-1b,r8 adds r8 = 1f-1b,r8
mov loc4=ar.rsc // save RSE configuration
;; ;;
mov ar.rsc=0 // put RSE in enforced lazy, LE mode
mov loc3 = psr mov loc3 = psr
mov loc0 = rp mov loc0 = rp
.body .body
...@@ -82,6 +84,7 @@ GLOBAL_ENTRY(ia64_pal_call_static) ...@@ -82,6 +84,7 @@ GLOBAL_ENTRY(ia64_pal_call_static)
mov rp = r8 mov rp = r8
br.cond.sptk.many b7 br.cond.sptk.many b7
1: mov psr.l = loc3 1: mov psr.l = loc3
mov ar.rsc = loc4 // restore RSE configuration
mov ar.pfs = loc1 mov ar.pfs = loc1
mov rp = loc0 mov rp = loc0
;; ;;
...@@ -98,7 +101,7 @@ END(ia64_pal_call_static) ...@@ -98,7 +101,7 @@ END(ia64_pal_call_static)
*/ */
GLOBAL_ENTRY(ia64_pal_call_stacked) GLOBAL_ENTRY(ia64_pal_call_stacked)
.prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(5) .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(5)
alloc loc1 = ar.pfs,5,4,87,0 alloc loc1 = ar.pfs,4,4,4,0
movl loc2 = pal_entry_point movl loc2 = pal_entry_point
mov r28 = in0 // Index MUST be copied to r28 mov r28 = in0 // Index MUST be copied to r28
...@@ -145,7 +148,7 @@ END(ia64_pal_call_stacked) ...@@ -145,7 +148,7 @@ END(ia64_pal_call_stacked)
GLOBAL_ENTRY(ia64_pal_call_phys_static) GLOBAL_ENTRY(ia64_pal_call_phys_static)
.prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(6) .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(6)
alloc loc1 = ar.pfs,6,90,0,0 alloc loc1 = ar.pfs,4,7,0,0
movl loc2 = pal_entry_point movl loc2 = pal_entry_point
1: { 1: {
mov r28 = in0 // copy procedure index mov r28 = in0 // copy procedure index
...@@ -176,10 +179,14 @@ GLOBAL_ENTRY(ia64_pal_call_phys_static) ...@@ -176,10 +179,14 @@ GLOBAL_ENTRY(ia64_pal_call_phys_static)
andcm r16=loc3,r16 // removes bits to clear from psr andcm r16=loc3,r16 // removes bits to clear from psr
br.call.sptk.many rp=ia64_switch_mode_phys br.call.sptk.many rp=ia64_switch_mode_phys
.ret1: mov rp = r8 // install return address (physical) .ret1: mov rp = r8 // install return address (physical)
mov loc5 = r19
mov loc6 = r20
br.cond.sptk.many b7 br.cond.sptk.many b7
1: 1:
mov ar.rsc=0 // put RSE in enforced lazy, LE mode mov ar.rsc=0 // put RSE in enforced lazy, LE mode
mov r16=loc3 // r16= original psr mov r16=loc3 // r16= original psr
mov r19=loc5
mov r20=loc6
br.call.sptk.many rp=ia64_switch_mode_virt // return to virtual mode br.call.sptk.many rp=ia64_switch_mode_virt // return to virtual mode
.ret2: .ret2:
mov psr.l = loc3 // restore init PSR mov psr.l = loc3 // restore init PSR
...@@ -201,7 +208,7 @@ END(ia64_pal_call_phys_static) ...@@ -201,7 +208,7 @@ END(ia64_pal_call_phys_static)
*/ */
GLOBAL_ENTRY(ia64_pal_call_phys_stacked) GLOBAL_ENTRY(ia64_pal_call_phys_stacked)
.prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(5) .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(5)
alloc loc1 = ar.pfs,5,5,86,0 alloc loc1 = ar.pfs,5,7,4,0
movl loc2 = pal_entry_point movl loc2 = pal_entry_point
1: { 1: {
mov r28 = in0 // copy procedure index mov r28 = in0 // copy procedure index
...@@ -230,10 +237,14 @@ GLOBAL_ENTRY(ia64_pal_call_phys_stacked) ...@@ -230,10 +237,14 @@ GLOBAL_ENTRY(ia64_pal_call_phys_stacked)
andcm r16=loc3,r16 // removes bits to clear from psr andcm r16=loc3,r16 // removes bits to clear from psr
br.call.sptk.many rp=ia64_switch_mode_phys br.call.sptk.many rp=ia64_switch_mode_phys
.ret6: .ret6:
mov loc5 = r19
mov loc6 = r20
br.call.sptk.many rp=b7 // now make the call br.call.sptk.many rp=b7 // now make the call
.ret7: .ret7:
mov ar.rsc=0 // put RSE in enforced lazy, LE mode mov ar.rsc=0 // put RSE in enforced lazy, LE mode
mov r16=loc3 // r16= original psr mov r16=loc3 // r16= original psr
mov r19=loc5
mov r20=loc6
br.call.sptk.many rp=ia64_switch_mode_virt // return to virtual mode br.call.sptk.many rp=ia64_switch_mode_virt // return to virtual mode
.ret8: mov psr.l = loc3 // restore init PSR .ret8: mov psr.l = loc3 // restore init PSR
......
...@@ -277,6 +277,29 @@ setup_serial_legacy (void) ...@@ -277,6 +277,29 @@ setup_serial_legacy (void)
} }
#endif #endif
/**
* early_console_setup - setup debugging console
*
* Consoles started here require little enough setup that we can start using
* them very early in the boot process, either right after the machine
* vector initialization, or even before if the drivers can detect their hw.
*
* Returns non-zero if a console couldn't be setup.
*/
static inline int __init
early_console_setup (void)
{
#ifdef CONFIG_SERIAL_SGI_L1_CONSOLE
{
extern int sn_serial_console_early_setup(void);
if(!sn_serial_console_early_setup())
return 0;
}
#endif
return -1;
}
void __init void __init
setup_arch (char **cmdline_p) setup_arch (char **cmdline_p)
{ {
...@@ -294,6 +317,12 @@ setup_arch (char **cmdline_p) ...@@ -294,6 +317,12 @@ setup_arch (char **cmdline_p)
machvec_init(acpi_get_sysname()); machvec_init(acpi_get_sysname());
#endif #endif
#ifdef CONFIG_SMP
/* If we register an early console, allow CPU 0 to printk */
if (!early_console_setup())
cpu_set(smp_processor_id(), cpu_online_map);
#endif
#ifdef CONFIG_ACPI_BOOT #ifdef CONFIG_ACPI_BOOT
/* Initialize the ACPI boot-time table parser */ /* Initialize the ACPI boot-time table parser */
acpi_table_init(); acpi_table_init();
......
...@@ -549,7 +549,7 @@ void call_pernode_memory(unsigned long start, unsigned long len, void *arg) ...@@ -549,7 +549,7 @@ void call_pernode_memory(unsigned long start, unsigned long len, void *arg)
if (!num_node_memblks) { if (!num_node_memblks) {
/* No SRAT table, so assume one node (node 0) */ /* No SRAT table, so assume one node (node 0) */
if (start < end) if (start < end)
(*func)(start, len, 0); (*func)(start, end - start, 0);
return; return;
} }
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* License. See the file "COPYING" in the main directory of this archive * License. See the file "COPYING" in the main directory of this archive
* for more details. * for more details.
* *
* Copyright (c) 2000-2003 Silicon Graphics, Inc. All Rights Reserved. * Copyright (c) 2000-2004 Silicon Graphics, Inc. All Rights Reserved.
*/ */
...@@ -199,7 +199,7 @@ bte_error_handler(unsigned long _nodepda) ...@@ -199,7 +199,7 @@ bte_error_handler(unsigned long _nodepda)
err_nodepda->bte_if[i].cleanup_active = 0; err_nodepda->bte_if[i].cleanup_active = 0;
BTE_PRINTK(("eh:%p:%d Unlocked %d\n", err_nodepda, BTE_PRINTK(("eh:%p:%d Unlocked %d\n", err_nodepda,
smp_processor_id(), i)); smp_processor_id(), i));
spin_unlock(&pda->cpu_bte_if[i]->spinlock); spin_unlock(&err_nodepda->bte_if[i].spinlock);
} }
del_timer(recovery_timer); del_timer(recovery_timer);
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
*/ */
#include <linux/config.h> #include <linux/config.h>
#include <linux/module.h>
#include <asm/sn/sgi.h> #include <asm/sn/sgi.h>
#include <asm/sn/nodepda.h> #include <asm/sn/nodepda.h>
#include <asm/sn/addrs.h> #include <asm/sn/addrs.h>
...@@ -27,10 +28,18 @@ ...@@ -27,10 +28,18 @@
#define L1_CACHE_MASK (L1_CACHE_BYTES - 1) #define L1_CACHE_MASK (L1_CACHE_BYTES - 1)
#endif #endif
/* /* two interfaces on two btes */
* The base address of for each set of bte registers. #define MAX_INTERFACES_TO_TRY 4
*/
static int bte_offsets[] = { IIO_IBLS0, IIO_IBLS1 }; static struct bteinfo_s *
bte_if_on_node(nasid_t nasid, int interface)
{
nodepda_t *tmp_nodepda;
tmp_nodepda = NODEPDA(nasid_to_cnodeid(nasid));
return &tmp_nodepda->bte_if[interface];
}
/************************************************************************ /************************************************************************
...@@ -61,11 +70,12 @@ static int bte_offsets[] = { IIO_IBLS0, IIO_IBLS1 }; ...@@ -61,11 +70,12 @@ static int bte_offsets[] = { IIO_IBLS0, IIO_IBLS1 };
bte_result_t bte_result_t
bte_copy(u64 src, u64 dest, u64 len, u64 mode, void *notification) bte_copy(u64 src, u64 dest, u64 len, u64 mode, void *notification)
{ {
int bte_to_use;
u64 transfer_size; u64 transfer_size;
struct bteinfo_s *bte; struct bteinfo_s *bte;
bte_result_t bte_status; bte_result_t bte_status;
unsigned long irq_flags; unsigned long irq_flags;
struct bteinfo_s *btes_to_try[MAX_INTERFACES_TO_TRY];
int bte_if_index;
BTE_PRINTK(("bte_copy(0x%lx, 0x%lx, 0x%lx, 0x%lx, 0x%p)\n", BTE_PRINTK(("bte_copy(0x%lx, 0x%lx, 0x%lx, 0x%lx, 0x%p)\n",
...@@ -79,17 +89,57 @@ bte_copy(u64 src, u64 dest, u64 len, u64 mode, void *notification) ...@@ -79,17 +89,57 @@ bte_copy(u64 src, u64 dest, u64 len, u64 mode, void *notification)
(src & L1_CACHE_MASK) || (dest & L1_CACHE_MASK))); (src & L1_CACHE_MASK) || (dest & L1_CACHE_MASK)));
ASSERT(len < ((BTE_LEN_MASK + 1) << L1_CACHE_SHIFT)); ASSERT(len < ((BTE_LEN_MASK + 1) << L1_CACHE_SHIFT));
if (mode & BTE_USE_DEST) {
/* try remote then local */
btes_to_try[0] = bte_if_on_node(NASID_GET(dest), 0);
btes_to_try[1] = bte_if_on_node(NASID_GET(dest), 1);
if (mode & BTE_USE_ANY) {
btes_to_try[2] = bte_if_on_node(get_nasid(), 0);
btes_to_try[3] = bte_if_on_node(get_nasid(), 1);
} else {
btes_to_try[2] = NULL;
btes_to_try[3] = NULL;
}
} else {
/* try local then remote */
btes_to_try[0] = bte_if_on_node(get_nasid(), 0);
btes_to_try[1] = bte_if_on_node(get_nasid(), 1);
if (mode & BTE_USE_ANY) {
btes_to_try[2] = bte_if_on_node(NASID_GET(dest), 0);
btes_to_try[3] = bte_if_on_node(NASID_GET(dest), 1);
} else {
btes_to_try[2] = NULL;
btes_to_try[3] = NULL;
}
}
do { do {
local_irq_save(irq_flags); local_irq_save(irq_flags);
bte_to_use = 0; bte_if_index = 0;
/* Attempt to lock one of the BTE interfaces. */ /* Attempt to lock one of the BTE interfaces. */
while ((bte_to_use < BTES_PER_NODE) && while (bte_if_index < MAX_INTERFACES_TO_TRY) {
BTE_LOCK_IF_AVAIL(bte_to_use)) { bte = btes_to_try[bte_if_index++];
bte_to_use++;
if (bte == NULL) {
continue;
} }
if (bte_to_use < BTES_PER_NODE) { if (spin_trylock(&bte->spinlock)) {
if ((*bte->most_rcnt_na & BTE_ACTIVE) ||
(BTE_LNSTAT_LOAD(bte) & BTE_ACTIVE)) {
/* Got the lock but BTE still busy */
spin_unlock(&bte->spinlock);
bte = NULL;
} else {
/* we got the lock and it's not busy */
break;
}
}
}
if (bte != NULL) {
break; break;
} }
...@@ -100,12 +150,9 @@ bte_copy(u64 src, u64 dest, u64 len, u64 mode, void *notification) ...@@ -100,12 +150,9 @@ bte_copy(u64 src, u64 dest, u64 len, u64 mode, void *notification)
} }
/* Wait until a bte is available. */ /* Wait until a bte is available. */
udelay(10); udelay(1);
} while (1); } while (1);
bte = pda->cpu_bte_if[bte_to_use];
BTE_PRINTKV(("Got a lock on bte %d\n", bte_to_use));
if (notification == NULL) { if (notification == NULL) {
/* User does not want to be notified. */ /* User does not want to be notified. */
...@@ -121,28 +168,24 @@ bte_copy(u64 src, u64 dest, u64 len, u64 mode, void *notification) ...@@ -121,28 +168,24 @@ bte_copy(u64 src, u64 dest, u64 len, u64 mode, void *notification)
*bte->most_rcnt_na = -1L; *bte->most_rcnt_na = -1L;
/* Set the status reg busy bit and transfer length */ /* Set the status reg busy bit and transfer length */
BTE_PRINTKV(("IBLS - HUB_S(0x%p, 0x%lx)\n", BTE_PRINTKV(("IBLS = 0x%lx\n", IBLS_BUSY | transfer_size));
BTEREG_LNSTAT_ADDR, IBLS_BUSY | transfer_size)); BTE_LNSTAT_STORE(bte, IBLS_BUSY | transfer_size);
HUB_S(BTEREG_LNSTAT_ADDR, (IBLS_BUSY | transfer_size));
/* Set the source and destination registers */ /* Set the source and destination registers */
BTE_PRINTKV(("IBSA - HUB_S(0x%p, 0x%lx)\n", BTEREG_SRC_ADDR, BTE_PRINTKV(("IBSA = 0x%lx)\n", (TO_PHYS(src))));
(TO_PHYS(src)))); BTE_SRC_STORE(bte, TO_PHYS(src));
HUB_S(BTEREG_SRC_ADDR, (TO_PHYS(src))); BTE_PRINTKV(("IBDA = 0x%lx)\n", (TO_PHYS(dest))));
BTE_PRINTKV(("IBDA - HUB_S(0x%p, 0x%lx)\n", BTEREG_DEST_ADDR, BTE_DEST_STORE(bte, TO_PHYS(dest));
(TO_PHYS(dest))));
HUB_S(BTEREG_DEST_ADDR, (TO_PHYS(dest)));
/* Set the notification register */ /* Set the notification register */
BTE_PRINTKV(("IBNA - HUB_S(0x%p, 0x%lx)\n", BTEREG_NOTIF_ADDR, BTE_PRINTKV(("IBNA = 0x%lx)\n",
(TO_PHYS(ia64_tpa((unsigned long)bte->most_rcnt_na))))); TO_PHYS(ia64_tpa((unsigned long)bte->most_rcnt_na))));
HUB_S(BTEREG_NOTIF_ADDR, (TO_PHYS(ia64_tpa((unsigned long)bte->most_rcnt_na)))); BTE_NOTIF_STORE(bte, TO_PHYS(ia64_tpa((unsigned long)bte->most_rcnt_na)));
/* Initiate the transfer */ /* Initiate the transfer */
BTE_PRINTK(("IBCT - HUB_S(0x%p, 0x%lx)\n", BTEREG_CTRL_ADDR, BTE_PRINTK(("IBCT = 0x%lx)\n", BTE_VALID_MODE(mode)));
BTE_VALID_MODE(mode))); BTE_CTRL_STORE(bte, BTE_VALID_MODE(mode));
HUB_S(BTEREG_CTRL_ADDR, BTE_VALID_MODE(mode));
spin_unlock_irqrestore(&bte->spinlock, irq_flags); spin_unlock_irqrestore(&bte->spinlock, irq_flags);
...@@ -156,7 +199,7 @@ bte_copy(u64 src, u64 dest, u64 len, u64 mode, void *notification) ...@@ -156,7 +199,7 @@ bte_copy(u64 src, u64 dest, u64 len, u64 mode, void *notification)
BTE_PRINTKV((" Delay Done. IBLS = 0x%lx, most_rcnt_na = 0x%lx\n", BTE_PRINTKV((" Delay Done. IBLS = 0x%lx, most_rcnt_na = 0x%lx\n",
HUB_L(BTEREG_LNSTAT_ADDR), *bte->most_rcnt_na)); BTE_LNSTAT_LOAD(bte), *bte->most_rcnt_na));
if (*bte->most_rcnt_na & IBLS_ERROR) { if (*bte->most_rcnt_na & IBLS_ERROR) {
bte_status = *bte->most_rcnt_na & ~IBLS_ERROR; bte_status = *bte->most_rcnt_na & ~IBLS_ERROR;
...@@ -165,10 +208,11 @@ bte_copy(u64 src, u64 dest, u64 len, u64 mode, void *notification) ...@@ -165,10 +208,11 @@ bte_copy(u64 src, u64 dest, u64 len, u64 mode, void *notification)
bte_status = BTE_SUCCESS; bte_status = BTE_SUCCESS;
} }
BTE_PRINTK(("Returning status is 0x%lx and most_rcnt_na is 0x%lx\n", BTE_PRINTK(("Returning status is 0x%lx and most_rcnt_na is 0x%lx\n",
HUB_L(BTEREG_LNSTAT_ADDR), *bte->most_rcnt_na)); BTE_LNSTAT_LOAD(bte), *bte->most_rcnt_na));
return bte_status; return bte_status;
} }
EXPORT_SYMBOL(bte_copy);
/* /*
...@@ -201,14 +245,19 @@ bte_unaligned_copy(u64 src, u64 dest, u64 len, u64 mode) ...@@ -201,14 +245,19 @@ bte_unaligned_copy(u64 src, u64 dest, u64 len, u64 mode)
u64 footBcopyDest; u64 footBcopyDest;
u64 footBcopyLen; u64 footBcopyLen;
bte_result_t rv; bte_result_t rv;
char *bteBlock; char *bteBlock, *bteBlock_unaligned;
if (len == 0) { if (len == 0) {
return BTE_SUCCESS; return BTE_SUCCESS;
} }
/* temporary buffer used during unaligned transfers */ /* temporary buffer used during unaligned transfers */
bteBlock = pda->cpu_bte_if[0]->scratch_buf; bteBlock_unaligned = kmalloc(len + 3 * L1_CACHE_BYTES,
GFP_KERNEL | GFP_DMA);
if (bteBlock_unaligned == NULL) {
return BTEFAIL_NOTAVAIL;
}
bteBlock = (char *) L1_CACHE_ALIGN((u64) bteBlock_unaligned);
headBcopySrcOffset = src & L1_CACHE_MASK; headBcopySrcOffset = src & L1_CACHE_MASK;
destFirstCacheOffset = dest & L1_CACHE_MASK; destFirstCacheOffset = dest & L1_CACHE_MASK;
...@@ -276,6 +325,7 @@ bte_unaligned_copy(u64 src, u64 dest, u64 len, u64 mode) ...@@ -276,6 +325,7 @@ bte_unaligned_copy(u64 src, u64 dest, u64 len, u64 mode)
ia64_tpa((unsigned long)bteBlock), ia64_tpa((unsigned long)bteBlock),
footBteLen, mode, NULL); footBteLen, mode, NULL);
if (rv != BTE_SUCCESS) { if (rv != BTE_SUCCESS) {
kfree(bteBlock_unaligned);
return rv; return rv;
} }
...@@ -296,6 +346,7 @@ bte_unaligned_copy(u64 src, u64 dest, u64 len, u64 mode) ...@@ -296,6 +346,7 @@ bte_unaligned_copy(u64 src, u64 dest, u64 len, u64 mode)
(len - headBcopyLen - (len - headBcopyLen -
footBcopyLen), mode, NULL); footBcopyLen), mode, NULL);
if (rv != BTE_SUCCESS) { if (rv != BTE_SUCCESS) {
kfree(bteBlock_unaligned);
return rv; return rv;
} }
...@@ -325,6 +376,7 @@ bte_unaligned_copy(u64 src, u64 dest, u64 len, u64 mode) ...@@ -325,6 +376,7 @@ bte_unaligned_copy(u64 src, u64 dest, u64 len, u64 mode)
rv = bte_copy(headBteSource, rv = bte_copy(headBteSource,
ia64_tpa((unsigned long)bteBlock), headBteLen, mode, NULL); ia64_tpa((unsigned long)bteBlock), headBteLen, mode, NULL);
if (rv != BTE_SUCCESS) { if (rv != BTE_SUCCESS) {
kfree(bteBlock_unaligned);
return rv; return rv;
} }
...@@ -332,8 +384,10 @@ bte_unaligned_copy(u64 src, u64 dest, u64 len, u64 mode) ...@@ -332,8 +384,10 @@ bte_unaligned_copy(u64 src, u64 dest, u64 len, u64 mode)
headBcopySrcOffset), headBcopySrcOffset),
headBcopyLen); headBcopyLen);
} }
kfree(bteBlock_unaligned);
return BTE_SUCCESS; return BTE_SUCCESS;
} }
EXPORT_SYMBOL(bte_unaligned_copy);
/************************************************************************ /************************************************************************
...@@ -370,9 +424,9 @@ bte_init_node(nodepda_t * mynodepda, cnodeid_t cnode) ...@@ -370,9 +424,9 @@ bte_init_node(nodepda_t * mynodepda, cnodeid_t cnode)
mynodepda->bte_recovery_timer.data = (unsigned long) mynodepda; mynodepda->bte_recovery_timer.data = (unsigned long) mynodepda;
for (i = 0; i < BTES_PER_NODE; i++) { for (i = 0; i < BTES_PER_NODE; i++) {
/* >>> Don't know why the 0x1800000L is here. Robin */ (u64) mynodepda->bte_if[i].bte_base_addr =
mynodepda->bte_if[i].bte_base_addr = REMOTE_HUB_ADDR(cnodeid_to_nasid(cnode),
(char *) LOCAL_MMR_ADDR(bte_offsets[i] | 0x1800000L); (i == 0 ? IIO_IBLS0 : IIO_IBLS1));
/* /*
* Initialize the notification and spinlock * Initialize the notification and spinlock
...@@ -383,8 +437,6 @@ bte_init_node(nodepda_t * mynodepda, cnodeid_t cnode) ...@@ -383,8 +437,6 @@ bte_init_node(nodepda_t * mynodepda, cnodeid_t cnode)
mynodepda->bte_if[i].notify = 0L; mynodepda->bte_if[i].notify = 0L;
spin_lock_init(&mynodepda->bte_if[i].spinlock); spin_lock_init(&mynodepda->bte_if[i].spinlock);
mynodepda->bte_if[i].scratch_buf =
alloc_bootmem_node(NODE_DATA(cnode), BTE_MAX_XFER);
mynodepda->bte_if[i].bte_cnode = cnode; mynodepda->bte_if[i].bte_cnode = cnode;
mynodepda->bte_if[i].bte_error_count = 0; mynodepda->bte_if[i].bte_error_count = 0;
mynodepda->bte_if[i].bte_num = i; mynodepda->bte_if[i].bte_num = i;
...@@ -393,23 +445,3 @@ bte_init_node(nodepda_t * mynodepda, cnodeid_t cnode) ...@@ -393,23 +445,3 @@ bte_init_node(nodepda_t * mynodepda, cnodeid_t cnode)
} }
} }
/*
* bte_init_cpu()
*
* Initialize the cpupda structure with pointers to the
* nodepda bte blocks.
*
*/
void
bte_init_cpu(void)
{
/* Called by setup.c as each cpu is being added to the nodepda */
if (local_node_data->active_cpu_count & 0x1) {
pda->cpu_bte_if[0] = &(nodepda->bte_if[0]);
pda->cpu_bte_if[1] = &(nodepda->bte_if[1]);
} else {
pda->cpu_bte_if[0] = &(nodepda->bte_if[1]);
pda->cpu_bte_if[1] = &(nodepda->bte_if[0]);
}
}
...@@ -54,7 +54,6 @@ DEFINE_PER_CPU(struct pda_s, pda_percpu); ...@@ -54,7 +54,6 @@ DEFINE_PER_CPU(struct pda_s, pda_percpu);
#define MAX_PHYS_MEMORY (1UL << 49) /* 1 TB */ #define MAX_PHYS_MEMORY (1UL << 49) /* 1 TB */
extern void bte_init_node (nodepda_t *, cnodeid_t); extern void bte_init_node (nodepda_t *, cnodeid_t);
extern void bte_init_cpu (void);
extern void sn_timer_init(void); extern void sn_timer_init(void);
extern unsigned long last_time_offset; extern unsigned long last_time_offset;
extern void init_platform_hubinfo(nodepda_t **nodepdaindr); extern void init_platform_hubinfo(nodepda_t **nodepdaindr);
...@@ -496,8 +495,6 @@ sn_cpu_init(void) ...@@ -496,8 +495,6 @@ sn_cpu_init(void)
buddy_nasid = cnodeid_to_nasid(numa_node_id() == numnodes-1 ? 0 : numa_node_id()+ 1); buddy_nasid = cnodeid_to_nasid(numa_node_id() == numnodes-1 ? 0 : numa_node_id()+ 1);
pda->pio_shub_war_cam_addr = (volatile unsigned long*)GLOBAL_MMR_ADDR(nasid, SH_PI_CAM_CONTROL); pda->pio_shub_war_cam_addr = (volatile unsigned long*)GLOBAL_MMR_ADDR(nasid, SH_PI_CAM_CONTROL);
} }
bte_init_cpu();
} }
/* /*
......
#ifndef __ASM_IA64_IOSAPIC_H #ifndef __ASM_IA64_IOSAPIC_H
#define __ASM_IA64_IOSAPIC_H #define __ASM_IA64_IOSAPIC_H
#define IOSAPIC_DEFAULT_ADDR 0xFEC00000
#define IOSAPIC_REG_SELECT 0x0 #define IOSAPIC_REG_SELECT 0x0
#define IOSAPIC_WINDOW 0x10 #define IOSAPIC_WINDOW 0x10
#define IOSAPIC_EOI 0x40 #define IOSAPIC_EOI 0x40
...@@ -55,6 +53,23 @@ ...@@ -55,6 +53,23 @@
#define NR_IOSAPICS 256 #define NR_IOSAPICS 256
static inline unsigned int iosapic_read(char *iosapic, unsigned int reg)
{
writel(reg, iosapic + IOSAPIC_REG_SELECT);
return readl(iosapic + IOSAPIC_WINDOW);
}
static inline void iosapic_write(char *iosapic, unsigned int reg, u32 val)
{
writel(reg, iosapic + IOSAPIC_REG_SELECT);
writel(val, iosapic + IOSAPIC_WINDOW);
}
static inline void iosapic_eoi(char *iosapic, u32 vector)
{
writel(vector, iosapic + IOSAPIC_EOI);
}
extern void __init iosapic_system_init (int pcat_compat); extern void __init iosapic_system_init (int pcat_compat);
extern void __init iosapic_init (unsigned long address, extern void __init iosapic_init (unsigned long address,
unsigned int gsi_base); unsigned int gsi_base);
......
...@@ -123,5 +123,9 @@ extern void smp_send_reschedule (int cpu); ...@@ -123,5 +123,9 @@ extern void smp_send_reschedule (int cpu);
extern void lock_ipi_calllock(void); extern void lock_ipi_calllock(void);
extern void unlock_ipi_calllock(void); extern void unlock_ipi_calllock(void);
#else
#define cpu_logical_id(cpuid) 0
#endif /* CONFIG_SMP */ #endif /* CONFIG_SMP */
#endif /* _ASM_IA64_SMP_H */ #endif /* _ASM_IA64_SMP_H */
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* License. See the file "COPYING" in the main directory of this archive * License. See the file "COPYING" in the main directory of this archive
* for more details. * for more details.
* *
* Copyright (c) 2000-2003 Silicon Graphics, Inc. All Rights Reserved. * Copyright (c) 2000-2004 Silicon Graphics, Inc. All Rights Reserved.
*/ */
...@@ -48,35 +48,31 @@ ...@@ -48,35 +48,31 @@
#define BTE_ZERO_FILL (BTE_NOTIFY | IBCT_ZFIL_MODE) #define BTE_ZERO_FILL (BTE_NOTIFY | IBCT_ZFIL_MODE)
/* Use a reserved bit to let the caller specify a wait for any BTE */ /* Use a reserved bit to let the caller specify a wait for any BTE */
#define BTE_WACQUIRE (0x4000) #define BTE_WACQUIRE (0x4000)
/* Use the BTE on the node with the destination memory */
#define BTE_USE_DEST (BTE_WACQUIRE << 1)
/* Use any available BTE interface on any node for the transfer */
#define BTE_USE_ANY (BTE_USE_DEST << 1)
/* macro to force the IBCT0 value valid */ /* macro to force the IBCT0 value valid */
#define BTE_VALID_MODE(x) ((x) & (IBCT_NOTIFY | IBCT_ZFIL_MODE)) #define BTE_VALID_MODE(x) ((x) & (IBCT_NOTIFY | IBCT_ZFIL_MODE))
#define BTE_ACTIVE (IBLS_BUSY | IBLS_ERROR)
/*
* Handle locking of the bte interfaces.
*
* All transfers spinlock the interface before setting up the SHUB
* registers. Sync transfers hold the lock until all processing is
* complete. Async transfers release the lock as soon as the transfer
* is initiated.
*
* To determine if an interface is available, we must check both the
* busy bit and the spinlock for that interface.
*/
#define BTE_LOCK_IF_AVAIL(_x) (\
(*pda->cpu_bte_if[_x]->most_rcnt_na & (IBLS_BUSY | IBLS_ERROR)) && \
(!(spin_trylock(&(pda->cpu_bte_if[_x]->spinlock)))) \
)
/* /*
* Some macros to simplify reading. * Some macros to simplify reading.
* Start with macros to locate the BTE control registers. * Start with macros to locate the BTE control registers.
*/ */
#define BTEREG_LNSTAT_ADDR ((u64 *)(bte->bte_base_addr)) #define BTE_LNSTAT_LOAD(_bte) \
#define BTEREG_SRC_ADDR ((u64 *)(bte->bte_base_addr + BTEOFF_SRC)) HUB_L(_bte->bte_base_addr)
#define BTEREG_DEST_ADDR ((u64 *)(bte->bte_base_addr + BTEOFF_DEST)) #define BTE_LNSTAT_STORE(_bte, _x) \
#define BTEREG_CTRL_ADDR ((u64 *)(bte->bte_base_addr + BTEOFF_CTRL)) HUB_S(_bte->bte_base_addr, (_x))
#define BTEREG_NOTIF_ADDR ((u64 *)(bte->bte_base_addr + BTEOFF_NOTIFY)) #define BTE_SRC_STORE(_bte, _x) \
HUB_S(_bte->bte_base_addr + (BTEOFF_SRC/8), (_x))
#define BTE_DEST_STORE(_bte, _x) \
HUB_S(_bte->bte_base_addr + (BTEOFF_DEST/8), (_x))
#define BTE_CTRL_STORE(_bte, _x) \
HUB_S(_bte->bte_base_addr + (BTEOFF_CTRL/8), (_x))
#define BTE_NOTIF_STORE(_bte, _x) \
HUB_S(_bte->bte_base_addr + (BTEOFF_NOTIFY/8), (_x))
/* Possible results from bte_copy and bte_unaligned_copy */ /* Possible results from bte_copy and bte_unaligned_copy */
...@@ -110,16 +106,15 @@ typedef enum { ...@@ -110,16 +106,15 @@ typedef enum {
* to work with a BTE. * to work with a BTE.
*/ */
struct bteinfo_s { struct bteinfo_s {
u64 volatile notify ____cacheline_aligned; volatile u64 notify ____cacheline_aligned;
char *bte_base_addr ____cacheline_aligned; u64 *bte_base_addr ____cacheline_aligned;
spinlock_t spinlock; spinlock_t spinlock;
cnodeid_t bte_cnode; /* cnode */ cnodeid_t bte_cnode; /* cnode */
int bte_error_count; /* Number of errors encountered */ int bte_error_count; /* Number of errors encountered */
int bte_num; /* 0 --> BTE0, 1 --> BTE1 */ int bte_num; /* 0 --> BTE0, 1 --> BTE1 */
int cleanup_active; /* Interface is locked for cleanup */ int cleanup_active; /* Interface is locked for cleanup */
volatile bte_result_t bh_error; /* error while processing */ volatile bte_result_t bh_error; /* error while processing */
u64 volatile *most_rcnt_na; volatile u64 *most_rcnt_na;
void *scratch_buf; /* Node local scratch buffer */
}; };
...@@ -130,6 +125,8 @@ extern bte_result_t bte_copy(u64, u64, u64, u64, void *); ...@@ -130,6 +125,8 @@ extern bte_result_t bte_copy(u64, u64, u64, u64, void *);
extern bte_result_t bte_unaligned_copy(u64, u64, u64, u64); extern bte_result_t bte_unaligned_copy(u64, u64, u64, u64);
extern void bte_error_handler(unsigned long); extern void bte_error_handler(unsigned long);
#define bte_zero(dest, len, mode, notification) \
bte_copy(0, dest, len, ((mode) | BTE_ZERO_FILL), notification)
/* /*
* The following is the prefered way of calling bte_unaligned_copy * The following is the prefered way of calling bte_unaligned_copy
......
...@@ -49,8 +49,6 @@ typedef struct pda_s { ...@@ -49,8 +49,6 @@ typedef struct pda_s {
volatile unsigned long *pio_shub_war_cam_addr; volatile unsigned long *pio_shub_war_cam_addr;
volatile unsigned long *mem_write_status_addr; volatile unsigned long *mem_write_status_addr;
struct bteinfo_s *cpu_bte_if[BTES_PER_NODE]; /* cpu interface order */
unsigned long sn_soft_irr[4]; unsigned long sn_soft_irr[4];
unsigned long sn_in_service_ivecs[4]; unsigned long sn_in_service_ivecs[4];
short cnodeid_to_nasid_table[MAX_NUMNODES]; short cnodeid_to_nasid_table[MAX_NUMNODES];
......
...@@ -84,7 +84,6 @@ ...@@ -84,7 +84,6 @@
*/ */
#ifndef CONFIG_SMP #ifndef CONFIG_SMP
#define cpu_logical_id(cpu) 0
#define cpu_physical_id(cpuid) ((ia64_getreg(_IA64_REG_CR_LID) >> 16) & 0xffff) #define cpu_physical_id(cpuid) ((ia64_getreg(_IA64_REG_CR_LID) >> 16) & 0xffff)
#endif #endif
......
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