diff options
author | Joel Stanley <joel@jms.id.au> | 2016-01-22 16:13:06 +1030 |
---|---|---|
committer | Joel Stanley <joel@jms.id.au> | 2016-01-28 21:47:47 +1030 |
commit | d9669fe85dca8da2ebd49f8d87921019ec42806c (patch) | |
tree | a2e7b3bfdbf55ae0a0745de749a45a472adfdc1f /openpower/linux | |
parent | da2732d9bde6351c4668f50a63c9a02aeaec30d6 (diff) | |
download | talos-op-build-d9669fe85dca8da2ebd49f8d87921019ec42806c.tar.gz talos-op-build-d9669fe85dca8da2ebd49f8d87921019ec42806c.zip |
Release 4.4-openpower2 kernel
- Updated defconfig for 4.4
- Adds EEH PE patch
- Restores xhci driver workarounds for USB bugs
- aacraid driver is now usptream
- Powerpc kexec patches are upstream
Tested on palmetto and habanero systems.
Signed-off-by: Joel Stanley <joel@jms.id.au>
Diffstat (limited to 'openpower/linux')
18 files changed, 192 insertions, 1701 deletions
diff --git a/openpower/linux/linux-0001-powerpc-Add-openpower_defconfig.patch b/openpower/linux/linux-0001-powerpc-Add-openpower_defconfig.patch deleted file mode 100644 index 5724b603..00000000 --- a/openpower/linux/linux-0001-powerpc-Add-openpower_defconfig.patch +++ /dev/null @@ -1,241 +0,0 @@ -From bbf8dfe1ddb782c0ed75a14c3dcbb473c8563987 Mon Sep 17 00:00:00 2001 -From: Jeremy Kerr <jk@ozlabs.org> -Date: Fri, 12 Dec 2014 08:03:11 +0800 -Subject: [PATCH 01/15] powerpc: Add openpower_defconfig - -Simplifies building an openpower kernel a little. It is based on the -configuration used by the op-build openpower buildroot overlay. - -Signed-off-by: Jeremy Kerr <jk@ozlabs.org> -Signed-off-by: Joel Stanley <joel@jms.id.au> ---- - arch/powerpc/configs/openpower_defconfig | 217 +++++++++++++++++++++++++++++++ - 1 file changed, 217 insertions(+) - create mode 100644 arch/powerpc/configs/openpower_defconfig - -diff --git a/arch/powerpc/configs/openpower_defconfig b/arch/powerpc/configs/openpower_defconfig -new file mode 100644 -index 000000000000..4d6779a3c753 ---- /dev/null -+++ b/arch/powerpc/configs/openpower_defconfig -@@ -0,0 +1,217 @@ -+CONFIG_PPC64=y -+CONFIG_ALTIVEC=y -+CONFIG_VSX=y -+CONFIG_SMP=y -+CONFIG_NR_CPUS=2048 -+CONFIG_CPU_LITTLE_ENDIAN=y -+# CONFIG_SWAP is not set -+CONFIG_SYSVIPC=y -+CONFIG_POSIX_MQUEUE=y -+# CONFIG_CROSS_MEMORY_ATTACH is not set -+CONFIG_IRQ_DOMAIN_DEBUG=y -+CONFIG_NO_HZ=y -+CONFIG_HIGH_RES_TIMERS=y -+CONFIG_TASKSTATS=y -+CONFIG_TASK_DELAY_ACCT=y -+CONFIG_TASK_XACCT=y -+CONFIG_TASK_IO_ACCOUNTING=y -+CONFIG_IKCONFIG=y -+CONFIG_IKCONFIG_PROC=y -+CONFIG_LOG_BUF_SHIFT=20 -+CONFIG_RELAY=y -+CONFIG_BLK_DEV_INITRD=y -+# CONFIG_RD_GZIP is not set -+# CONFIG_RD_BZIP2 is not set -+# CONFIG_RD_LZMA is not set -+# CONFIG_RD_LZO is not set -+# CONFIG_RD_LZ4 is not set -+CONFIG_KALLSYMS_ALL=y -+CONFIG_PERF_EVENTS=y -+# CONFIG_COMPAT_BRK is not set -+CONFIG_JUMP_LABEL=y -+CONFIG_MODULES=y -+CONFIG_MODULE_UNLOAD=y -+CONFIG_PARTITION_ADVANCED=y -+# CONFIG_IOSCHED_DEADLINE is not set -+# CONFIG_PPC_PMAC is not set -+CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y -+CONFIG_HZ_100=y -+CONFIG_KEXEC=y -+CONFIG_IRQ_ALL_CPUS=y -+# CONFIG_COMPACTION is not set -+# CONFIG_MIGRATION is not set -+# CONFIG_BOUNCE is not set -+CONFIG_PPC_64K_PAGES=y -+CONFIG_SCHED_SMT=y -+# CONFIG_SUSPEND is not set -+# CONFIG_SECCOMP is not set -+CONFIG_NET=y -+CONFIG_PACKET=y -+CONFIG_UNIX=y -+CONFIG_INET=y -+CONFIG_IP_MULTICAST=y -+CONFIG_NET_IPIP=y -+CONFIG_SYN_COOKIES=y -+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set -+# CONFIG_INET_XFRM_MODE_TUNNEL is not set -+# CONFIG_INET_XFRM_MODE_BEET is not set -+# CONFIG_IPV6 is not set -+# CONFIG_WIRELESS is not set -+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" -+CONFIG_DEVTMPFS=y -+CONFIG_DEVTMPFS_MOUNT=y -+CONFIG_BLK_DEV_LOOP=y -+CONFIG_BLK_DEV_RAM=y -+CONFIG_BLK_DEV_RAM_SIZE=65536 -+CONFIG_ATA_OVER_ETH=y -+CONFIG_VIRTIO_BLK=y -+CONFIG_EEPROM_AT24=y -+CONFIG_CXL=y -+CONFIG_BLK_DEV_SD=y -+CONFIG_CHR_DEV_ST=y -+CONFIG_BLK_DEV_SR=y -+CONFIG_BLK_DEV_SR_VENDOR=y -+CONFIG_CHR_DEV_SG=y -+CONFIG_SCSI_CONSTANTS=y -+CONFIG_SCSI_SCAN_ASYNC=y -+CONFIG_SCSI_FC_ATTRS=y -+CONFIG_SCSI_CXGB3_ISCSI=y -+CONFIG_SCSI_CXGB4_ISCSI=y -+CONFIG_SCSI_BNX2_ISCSI=y -+CONFIG_BE2ISCSI=y -+CONFIG_SCSI_AACRAID=y -+CONFIG_SCSI_MPT2SAS=y -+CONFIG_SCSI_IBMVSCSI=y -+CONFIG_SCSI_SYM53C8XX_2=y -+CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=0 -+CONFIG_SCSI_IPR=y -+# CONFIG_SCSI_IPR_TRACE is not set -+# CONFIG_SCSI_IPR_DUMP is not set -+CONFIG_SCSI_QLA_FC=y -+CONFIG_SCSI_QLA_ISCSI=y -+CONFIG_SCSI_LPFC=y -+CONFIG_SCSI_VIRTIO=y -+CONFIG_SCSI_DH=y -+CONFIG_SCSI_DH_ALUA=y -+CONFIG_ATA=y -+CONFIG_SATA_AHCI=y -+# CONFIG_ATA_SFF is not set -+CONFIG_MD=y -+CONFIG_BLK_DEV_MD=y -+CONFIG_MD_LINEAR=y -+CONFIG_MD_RAID0=y -+CONFIG_MD_RAID1=y -+CONFIG_MD_RAID10=y -+CONFIG_MD_RAID456=y -+CONFIG_MD_MULTIPATH=y -+CONFIG_MD_FAULTY=y -+CONFIG_BLK_DEV_DM=y -+CONFIG_DM_CRYPT=y -+CONFIG_DM_SNAPSHOT=y -+CONFIG_DM_MIRROR=y -+CONFIG_DM_ZERO=y -+CONFIG_DM_MULTIPATH=y -+CONFIG_NETCONSOLE=y -+CONFIG_TUN=y -+CONFIG_VIRTIO_NET=y -+CONFIG_VORTEX=y -+CONFIG_ACENIC=y -+CONFIG_ACENIC_OMIT_TIGON_I=y -+CONFIG_PCNET32=y -+CONFIG_TIGON3=y -+CONFIG_BNX2X=y -+CONFIG_CHELSIO_T1=y -+CONFIG_BE2NET=y -+CONFIG_S2IO=y -+CONFIG_IBMVETH=y -+CONFIG_E100=y -+CONFIG_E1000=y -+CONFIG_E1000E=y -+CONFIG_IXGB=y -+CONFIG_IXGBE=y -+CONFIG_MLX4_EN=y -+CONFIG_MYRI10GE=y -+CONFIG_QLGE=y -+CONFIG_NETXEN_NIC=y -+CONFIG_SFC=y -+# CONFIG_WLAN is not set -+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set -+CONFIG_INPUT_EVDEV=y -+CONFIG_INPUT_MISC=y -+# CONFIG_SERIO_SERPORT is not set -+CONFIG_SERIAL_8250=y -+CONFIG_SERIAL_8250_CONSOLE=y -+CONFIG_HVC_CONSOLE=y -+CONFIG_IPMI_HANDLER=y -+CONFIG_IPMI_DEVICE_INTERFACE=y -+CONFIG_IPMI_POWERNV=y -+CONFIG_HW_RANDOM=y -+CONFIG_GEN_RTC=y -+CONFIG_RAW_DRIVER=y -+CONFIG_MAX_RAW_DEVS=1024 -+# CONFIG_I2C_COMPAT is not set -+CONFIG_I2C_CHARDEV=y -+# CONFIG_I2C_HELPER_AUTO is not set -+CONFIG_DRM=y -+CONFIG_DRM_RADEON=y -+CONFIG_DRM_AST=y -+CONFIG_FIRMWARE_EDID=y -+CONFIG_FB_MODE_HELPERS=y -+CONFIG_FB_OF=y -+CONFIG_FB_MATROX=y -+CONFIG_FB_MATROX_MILLENIUM=y -+CONFIG_FB_MATROX_MYSTIQUE=y -+CONFIG_FB_MATROX_G=y -+CONFIG_BACKLIGHT_LCD_SUPPORT=y -+# CONFIG_LCD_CLASS_DEVICE is not set -+# CONFIG_BACKLIGHT_GENERIC is not set -+# CONFIG_VGA_CONSOLE is not set -+CONFIG_LOGO=y -+CONFIG_USB_HIDDEV=y -+CONFIG_USB=y -+CONFIG_USB_MON=y -+CONFIG_USB_XHCI_HCD=y -+CONFIG_USB_EHCI_HCD=y -+# CONFIG_USB_EHCI_HCD_PPC_OF is not set -+CONFIG_USB_OHCI_HCD=y -+CONFIG_USB_STORAGE=y -+CONFIG_VIRT_DRIVERS=y -+CONFIG_VIRTIO_PCI=y -+# CONFIG_IOMMU_SUPPORT is not set -+CONFIG_EXT4_FS=y -+CONFIG_EXT4_FS_POSIX_ACL=y -+CONFIG_EXT4_FS_SECURITY=y -+CONFIG_XFS_FS=y -+CONFIG_XFS_POSIX_ACL=y -+CONFIG_BTRFS_FS=y -+CONFIG_BTRFS_FS_POSIX_ACL=y -+CONFIG_AUTOFS4_FS=y -+CONFIG_ISO9660_FS=y -+CONFIG_UDF_FS=y -+CONFIG_MSDOS_FS=y -+CONFIG_VFAT_FS=y -+CONFIG_PROC_KCORE=y -+CONFIG_TMPFS=y -+CONFIG_TMPFS_POSIX_ACL=y -+CONFIG_NFS_FS=y -+CONFIG_NFS_V3_ACL=y -+CONFIG_NFS_V4=y -+CONFIG_CIFS=y -+# CONFIG_CIFS_DEBUG is not set -+CONFIG_NLS_DEFAULT="utf8" -+CONFIG_NLS_CODEPAGE_437=y -+CONFIG_NLS_ASCII=y -+CONFIG_NLS_ISO8859_1=y -+CONFIG_NLS_UTF8=y -+CONFIG_PRINTK_TIME=y -+CONFIG_DEBUG_FS=y -+CONFIG_MAGIC_SYSRQ=y -+CONFIG_DEBUG_KERNEL=y -+CONFIG_DEBUG_STACKOVERFLOW=y -+CONFIG_LOCKUP_DETECTOR=y -+CONFIG_SCHEDSTATS=y -+# CONFIG_FTRACE is not set -+CONFIG_XMON=y -+CONFIG_XMON_DEFAULT=y -+CONFIG_CRYPTO_ECHAINIV=y -+# CONFIG_CRYPTO_HW is not set --- -2.6.2 - diff --git a/openpower/linux/linux-0002-xhci-Use-xhci_pci_remove-for-xhci-device-shutdown.patch b/openpower/linux/linux-0001-xhci-Use-xhci_pci_remove-for-xhci-device-shutdown.patch index edfa9d28..98a6a9e8 100644 --- a/openpower/linux/linux-0002-xhci-Use-xhci_pci_remove-for-xhci-device-shutdown.patch +++ b/openpower/linux/linux-0001-xhci-Use-xhci_pci_remove-for-xhci-device-shutdown.patch @@ -1,7 +1,7 @@ -From fedf5abf0669ce6e812d4dd095e74ef65eec9058 Mon Sep 17 00:00:00 2001 +From 78b652c3a955cb9700abebff725a041cb805e193 Mon Sep 17 00:00:00 2001 From: Thadeu Lima De Souza Cascardo <thadeul@br.ibm.com> Date: Tue, 25 Mar 2014 10:45:16 -0400 -Subject: [PATCH 02/15] xhci: Use xhci_pci_remove for xhci device shutdown +Subject: [PATCH 1/5] xhci: Use xhci_pci_remove for xhci device shutdown Signed-off-by: Jeremy Kerr <jk@ozlabs.org> Signed-off-by: Joel Stanley <joel@jms.id.au> @@ -10,10 +10,10 @@ Signed-off-by: Joel Stanley <joel@jms.id.au> 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c -index c47d3e480586..a7447462b663 100644 +index c62109091d12..6d5b32c298bc 100644 --- a/drivers/usb/host/xhci-pci.c +++ b/drivers/usb/host/xhci-pci.c -@@ -420,7 +420,7 @@ static struct pci_driver xhci_pci_driver = { +@@ -426,7 +426,7 @@ static struct pci_driver xhci_pci_driver = { .remove = xhci_pci_remove, /* suspend and resume implemented later */ @@ -23,5 +23,5 @@ index c47d3e480586..a7447462b663 100644 .driver = { .pm = &usb_hcd_pci_pm_ops -- -2.6.2 +2.7.0.rc3 diff --git a/openpower/linux/linux-0002-Revert-usb-xhci-stop-everything-on-the-first-call-to.patch b/openpower/linux/linux-0002-Revert-usb-xhci-stop-everything-on-the-first-call-to.patch new file mode 100644 index 00000000..63ac2969 --- /dev/null +++ b/openpower/linux/linux-0002-Revert-usb-xhci-stop-everything-on-the-first-call-to.patch @@ -0,0 +1,62 @@ +From 8afabdc0db0f80e45c9bfdeb3faadaa89d4dd775 Mon Sep 17 00:00:00 2001 +From: Joel Stanley <joel@jms.id.au> +Date: Thu, 28 Jan 2016 13:07:06 +1030 +Subject: [PATCH 2/5] Revert "usb: xhci: stop everything on the first call to + xhci_stop" + +This reverts commit 8c24d6d7b09deee3036ddc4f2b81b53b28c8f877. + +With this patch, the driver stops everything at the first call to +xhci_stop, which is always for the secondary HCD when executing the +.remove handler. We instead want to only stop when the primray HCD is +shutting down. + +Signed-off-by: Joel Stanley <joel@jms.id.au> +--- + drivers/usb/host/xhci.c | 20 +++++++++++++++----- + 1 file changed, 15 insertions(+), 5 deletions(-) + +diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c +index 3f912705dcef..2cc689a3b549 100644 +--- a/drivers/usb/host/xhci.c ++++ b/drivers/usb/host/xhci.c +@@ -665,6 +665,15 @@ int xhci_run(struct usb_hcd *hcd) + } + EXPORT_SYMBOL_GPL(xhci_run); + ++static void xhci_only_stop_hcd(struct usb_hcd *hcd) ++{ ++ struct xhci_hcd *xhci = hcd_to_xhci(hcd); ++ ++ spin_lock_irq(&xhci->lock); ++ xhci_halt(xhci); ++ spin_unlock_irq(&xhci->lock); ++} ++ + /* + * Stop xHCI driver. + * +@@ -679,14 +688,15 @@ void xhci_stop(struct usb_hcd *hcd) + u32 temp; + struct xhci_hcd *xhci = hcd_to_xhci(hcd); + +- if (xhci->xhc_state & XHCI_STATE_HALTED) ++ mutex_lock(&xhci->mutex); ++ ++ if (!usb_hcd_is_primary_hcd(hcd)) { ++ xhci_only_stop_hcd(xhci->shared_hcd); ++ mutex_unlock(&xhci->mutex); + return; ++ } + +- mutex_lock(&xhci->mutex); + spin_lock_irq(&xhci->lock); +- xhci->xhc_state |= XHCI_STATE_HALTED; +- xhci->cmd_ring_state = CMD_RING_STATE_STOPPED; +- + /* Make sure the xHC is halted for a USB3 roothub + * (xhci_stop() could be called as part of failed init). + */ +-- +2.7.0.rc3 + diff --git a/openpower/linux/linux-0003-powerpc-kexec-Reset-secondary-cpu-endianess-before-k.patch b/openpower/linux/linux-0003-powerpc-kexec-Reset-secondary-cpu-endianess-before-k.patch deleted file mode 100644 index 78d6a8b6..00000000 --- a/openpower/linux/linux-0003-powerpc-kexec-Reset-secondary-cpu-endianess-before-k.patch +++ /dev/null @@ -1,48 +0,0 @@ -From a0fa3be3772983f7b96cc4133542a0eac25f6ed9 Mon Sep 17 00:00:00 2001 -From: Samuel Mendoza-Jonas <sam.mj@au1.ibm.com> -Date: Mon, 29 Jun 2015 13:43:51 +1000 -Subject: [PATCH 03/15] powerpc/kexec: Reset secondary cpu endianess before - kexec - -If the target kernel does not inlcude the FIXUP_ENDIAN check, coming -from a different-endian kernel will cause the target kernel to panic. -All ppc64 kernels can handle starting in big-endian mode, so return to -big-endian before branching into the target kernel. - -This mainly affects pseries as secondaries on powernv are returned to -OPAL. - -Signed-off-by: Samuel Mendoza-Jonas <sam.mj@au1.ibm.com> -Signed-off-by: Joel Stanley <joel@jms.id.au> ---- - arch/powerpc/kernel/misc_64.S | 13 +++++++++++-- - 1 file changed, 11 insertions(+), 2 deletions(-) - -diff --git a/arch/powerpc/kernel/misc_64.S b/arch/powerpc/kernel/misc_64.S -index 4e314b90c75d..6e4168cf4698 100644 ---- a/arch/powerpc/kernel/misc_64.S -+++ b/arch/powerpc/kernel/misc_64.S -@@ -475,9 +475,18 @@ _GLOBAL(kexec_wait) - #ifdef CONFIG_KEXEC /* use no memory without kexec */ - lwz r4,0(r5) - cmpwi 0,r4,0 -- bnea 0x60 -+ beq 99b -+#ifdef CONFIG_PPC_BOOK3S_64 -+ li r10,0x60 -+ mfmsr r11 -+ clrrdi r11,r11,1 /* Clear MSR_LE */ -+ mtsrr0 r10 -+ mtsrr1 r11 -+ rfid -+#else -+ ba 0x60 -+#endif - #endif -- b 99b - - /* this can be in text because we won't change it until we are - * running in real anyways --- -2.6.2 - diff --git a/openpower/linux/linux-0003-xhci-do-not-halt-the-secondary-HCD.patch b/openpower/linux/linux-0003-xhci-do-not-halt-the-secondary-HCD.patch new file mode 100644 index 00000000..3ad61578 --- /dev/null +++ b/openpower/linux/linux-0003-xhci-do-not-halt-the-secondary-HCD.patch @@ -0,0 +1,42 @@ +From 82addbe4d27c12454572e1200f962cd5ee25523f Mon Sep 17 00:00:00 2001 +From: Thadeu Lima de Souza Cascardo <cascardo@linux.vnet.ibm.com> +Date: Mon, 10 Mar 2014 13:02:13 -0300 +Subject: [PATCH 3/5] xhci: do not halt the secondary HCD + +We can't halt the secondary HCD, because it's also the primary HCD, +which will cause problems if we have devices attached to the primary +HCD, like a keyboard. + +Signed-off-by: Jeremy Kerr <jk@ozlabs.org> +Signed-off-by: Joel Stanley <joel@jms.id.au> +--- + drivers/usb/host/xhci.c | 13 ++++++++++++- + 1 file changed, 12 insertions(+), 1 deletion(-) + +diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c +index 2cc689a3b549..aa6d1e0b4bea 100644 +--- a/drivers/usb/host/xhci.c ++++ b/drivers/usb/host/xhci.c +@@ -670,7 +670,18 @@ static void xhci_only_stop_hcd(struct usb_hcd *hcd) + struct xhci_hcd *xhci = hcd_to_xhci(hcd); + + spin_lock_irq(&xhci->lock); +- xhci_halt(xhci); ++ /* ++ * We can't halt the secondary HCD, because it's also the ++ * primary HCD, which will cause problems if we have devices ++ * attached to the primary HCD, like a keyboard. ++ */ ++ /*xhci_halt(xhci);*/ ++ ++ /* The shared_hcd is going to be deallocated shortly (the USB core only ++ * calls this function when allocation fails in usb_add_hcd(), or ++ * usb_remove_hcd() is called). So we need to unset xHCI's pointer. ++ */ ++ xhci->shared_hcd = NULL; + spin_unlock_irq(&xhci->lock); + } + +-- +2.7.0.rc3 + diff --git a/openpower/linux/linux-0004-powerpc-eeh-Fix-PE-location-code.patch b/openpower/linux/linux-0004-powerpc-eeh-Fix-PE-location-code.patch new file mode 100644 index 00000000..155133c5 --- /dev/null +++ b/openpower/linux/linux-0004-powerpc-eeh-Fix-PE-location-code.patch @@ -0,0 +1,75 @@ +From 3cbe4777b9d0640df25fa4eb41b15199f78f9e99 Mon Sep 17 00:00:00 2001 +From: Gavin Shan <gwshan@linux.vnet.ibm.com> +Date: Thu, 28 Jan 2016 16:18:37 +1100 +Subject: [PATCH 4/5] powerpc/eeh: Fix PE location code + +In eeh_pe_loc_get(), the PE location code is retrieved from the +"ibm,loc-code" property of the device node for the bridge of the +PE's primary bus. It's not correct because the property indicates +the parent PE's location code. + +This reads the correct PE location code from "ibm,io-base-loc-code" +or "ibm,slot-location-code" property of PE parent bus's device node. + +Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com> +Signed-off-by: Sam Mendoza-Jonas <sam@mendozajonas.com> +Signed-off-by: Joel Stanley <joel@jms.id.au> +--- + arch/powerpc/kernel/eeh_pe.c | 33 +++++++++++++++------------------ + 1 file changed, 15 insertions(+), 18 deletions(-) + +diff --git a/arch/powerpc/kernel/eeh_pe.c b/arch/powerpc/kernel/eeh_pe.c +index 8654cb166c19..ca9e5371930e 100644 +--- a/arch/powerpc/kernel/eeh_pe.c ++++ b/arch/powerpc/kernel/eeh_pe.c +@@ -883,32 +883,29 @@ void eeh_pe_restore_bars(struct eeh_pe *pe) + const char *eeh_pe_loc_get(struct eeh_pe *pe) + { + struct pci_bus *bus = eeh_pe_bus_get(pe); +- struct device_node *dn = pci_bus_to_OF_node(bus); ++ struct device_node *dn; + const char *loc = NULL; + +- if (!dn) +- goto out; ++ while (bus) { ++ dn = pci_bus_to_OF_node(bus); ++ if (!dn) { ++ bus = bus->parent; ++ continue; ++ } + +- /* PHB PE or root PE ? */ +- if (pci_is_root_bus(bus)) { +- loc = of_get_property(dn, "ibm,loc-code", NULL); +- if (!loc) ++ if (pci_is_root_bus(bus)) + loc = of_get_property(dn, "ibm,io-base-loc-code", NULL); ++ else ++ loc = of_get_property(dn, "ibm,slot-location-code", ++ NULL); ++ + if (loc) +- goto out; ++ return loc; + +- /* Check the root port */ +- dn = dn->child; +- if (!dn) +- goto out; ++ bus = bus->parent; + } + +- loc = of_get_property(dn, "ibm,loc-code", NULL); +- if (!loc) +- loc = of_get_property(dn, "ibm,slot-location-code", NULL); +- +-out: +- return loc ? loc : "N/A"; ++ return "N/A"; + } + + /** +-- +2.7.0.rc3 + diff --git a/openpower/linux/linux-0004-powerpc-kexec-Reset-HILE-before-kexec_sequence.patch b/openpower/linux/linux-0004-powerpc-kexec-Reset-HILE-before-kexec_sequence.patch deleted file mode 100644 index 89e25f20..00000000 --- a/openpower/linux/linux-0004-powerpc-kexec-Reset-HILE-before-kexec_sequence.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 3ac7b2ce48a25617a838b58dce149244c5f216ef Mon Sep 17 00:00:00 2001 -From: Samuel Mendoza-Jonas <sam.mj@au1.ibm.com> -Date: Wed, 22 Jul 2015 11:09:15 +1000 -Subject: [PATCH 04/15] powerpc/kexec: Reset HILE before kexec_sequence - -On powernv secondary cpus are returned to OPAL, and will then enter -the target kernel in big-endian. However if it is set the HILE bit -will persist, causing the first exception in the target kernel to be -delivered in litte-endian regardless of the current endianess. - -If running on top of OPAL make sure the HILE bit is reset once we've -finished waiting for all of the secondaries to be returned to OPAL. - -Signed-off-by: Samuel Mendoza-Jonas <sam.mj@au1.ibm.com> -Signed-off-by: Joel Stanley <joel@jms.id.au> ---- - arch/powerpc/platforms/powernv/setup.c | 7 +++++++ - 1 file changed, 7 insertions(+) - -diff --git a/arch/powerpc/platforms/powernv/setup.c b/arch/powerpc/platforms/powernv/setup.c -index 53737e019ae3..59076db194c0 100644 ---- a/arch/powerpc/platforms/powernv/setup.c -+++ b/arch/powerpc/platforms/powernv/setup.c -@@ -243,6 +243,13 @@ static void pnv_kexec_cpu_down(int crash_shutdown, int secondary) - } else { - /* Primary waits for the secondaries to have reached OPAL */ - pnv_kexec_wait_secondaries_down(); -+ -+ /* -+ * We might be running as little-endian - now that interrupts -+ * are disabled, reset the HILE bit to big-endian so we don't -+ * take interrupts in the wrong endian later -+ */ -+ opal_reinit_cpus(OPAL_REINIT_CPUS_HILE_BE); - } - } - #endif /* CONFIG_KEXEC */ --- -2.6.2 - diff --git a/openpower/linux/linux-0015-Release-4.2.6-openpower1.patch b/openpower/linux/linux-0005-Release-4.4.0-openpower2.patch index dcbb6cb3..7e3759a7 100644 --- a/openpower/linux/linux-0015-Release-4.2.6-openpower1.patch +++ b/openpower/linux/linux-0005-Release-4.4.0-openpower2.patch @@ -1,7 +1,7 @@ -From 56015eb38198431a6fe83f8d0d516242ce05e3df Mon Sep 17 00:00:00 2001 +From dd90dddefe4b9fc7996ce37c18bd88210ebbe898 Mon Sep 17 00:00:00 2001 From: Joel Stanley <joel@jms.id.au> Date: Tue, 20 Oct 2015 15:01:06 +1030 -Subject: [PATCH 15/15] Release 4.2.6-openpower1 +Subject: [PATCH 5/5] Release 4.4.0-openpower2 Signed-off-by: Joel Stanley <joel@jms.id.au> --- @@ -9,18 +9,18 @@ Signed-off-by: Joel Stanley <joel@jms.id.au> 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile -index 9ef37399b4e8..028e6976b210 100644 +index 70dea02f1346..93c4379da8ed 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ VERSION = 4 - PATCHLEVEL = 2 - SUBLEVEL = 6 + PATCHLEVEL = 4 + SUBLEVEL = 0 -EXTRAVERSION = -+EXTRAVERSION = -openpower1 - NAME = Hurr durr I'ma sheep ++EXTRAVERSION = -openpower2 + NAME = Blurry Fish Butt # *DOCUMENTATION* -- -2.6.2 +2.7.0.rc3 diff --git a/openpower/linux/linux-0005-Revert-powerpc-Reject-binutils-2.24-when-building-li.patch b/openpower/linux/linux-0005-Revert-powerpc-Reject-binutils-2.24-when-building-li.patch deleted file mode 100644 index c0d298b9..00000000 --- a/openpower/linux/linux-0005-Revert-powerpc-Reject-binutils-2.24-when-building-li.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 8ff76b10e7d83cb4ac2ec13e792644493613a2c2 Mon Sep 17 00:00:00 2001 -From: Joel Stanley <joel@jms.id.au> -Date: Fri, 11 Sep 2015 14:43:18 +0930 -Subject: [PATCH 05/15] Revert "powerpc: Reject binutils 2.24 when building - little endian" - -This reverts commit 60e065f70bdb0b0e916389024922ad40f3270c96. - -We know better than Michael does; we carry a patch that fixes our -binutils. - -Signed-off-by: Joel Stanley <joel@jms.id.au> ---- - arch/powerpc/Makefile | 8 -------- - 1 file changed, 8 deletions(-) - -diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile -index 05f464eb6952..b2ae85dca1f7 100644 ---- a/arch/powerpc/Makefile -+++ b/arch/powerpc/Makefile -@@ -358,14 +358,6 @@ checkbin: - echo 'disable kernel modules' ; \ - false ; \ - fi -- @if test "x${CONFIG_CPU_LITTLE_ENDIAN}" = "xy" \ -- && $(LD) --version | head -1 | grep ' 2\.24$$' >/dev/null ; then \ -- echo -n '*** binutils 2.24 miscompiles weak symbols ' ; \ -- echo 'in some circumstances.' ; \ -- echo -n '*** Please use a different binutils version.' ; \ -- false ; \ -- fi -- - - CLEAN_FILES += $(TOUT) - --- -2.6.2 - diff --git a/openpower/linux/linux-0006-aacraid-Fix-for-LD-name-and-UID-not-exposed-to-OS.patch b/openpower/linux/linux-0006-aacraid-Fix-for-LD-name-and-UID-not-exposed-to-OS.patch deleted file mode 100644 index 712e090e..00000000 --- a/openpower/linux/linux-0006-aacraid-Fix-for-LD-name-and-UID-not-exposed-to-OS.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 5c0ce63abf423b06ad4a9dd0340dc691cf6af7ea Mon Sep 17 00:00:00 2001 -From: Mahesh Rajashekhara <Mahesh.Rajashekhara@pmcs.com> -Date: Fri, 28 Aug 2015 06:38:33 -0400 -Subject: [PATCH 06/15] aacraid: Fix for LD name and UID not exposed to OS - -Driver sends the right size of the response buffer. - -Reviewed-by: Tomas Henzl <thenzl@redhat.com> -Reviewed-by: Murthy Bhat <Murthy.Bhat@pmcs.com> -Reviewed-by: Karthikeya Sunkesula <Karthikeya.Sunkesula@pmcs.com> -Signed-off-by: Mahesh Rajashekhara <Mahesh.Rajashekhara@pmcs.com> -Signed-off-by: Joel Stanley <joel@jms.id.au> ---- - drivers/scsi/aacraid/aachba.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/drivers/scsi/aacraid/aachba.c b/drivers/scsi/aacraid/aachba.c -index 9b3dd6ef6a0b..fe59b0084575 100644 ---- a/drivers/scsi/aacraid/aachba.c -+++ b/drivers/scsi/aacraid/aachba.c -@@ -570,7 +570,7 @@ static int aac_get_container_name(struct scsi_cmnd * scsicmd) - - status = aac_fib_send(ContainerCommand, - cmd_fibcontext, -- sizeof (struct aac_get_name), -+ sizeof(struct aac_get_name_resp), - FsaNormal, - 0, 1, - (fib_callback)get_container_name_callback, -@@ -1052,7 +1052,7 @@ static int aac_get_container_serial(struct scsi_cmnd * scsicmd) - - status = aac_fib_send(ContainerCommand, - cmd_fibcontext, -- sizeof (struct aac_get_serial), -+ sizeof(struct aac_get_serial_resp), - FsaNormal, - 0, 1, - (fib_callback) get_container_serial_callback, --- -2.6.2 - diff --git a/openpower/linux/linux-0007-aacraid-Add-Power-Management-support.patch b/openpower/linux/linux-0007-aacraid-Add-Power-Management-support.patch deleted file mode 100644 index c26a5baf..00000000 --- a/openpower/linux/linux-0007-aacraid-Add-Power-Management-support.patch +++ /dev/null @@ -1,441 +0,0 @@ -From fd4cc1e0ec6ca370ece67af9e6a3cde5cb9becb6 Mon Sep 17 00:00:00 2001 -From: Mahesh Rajashekhara <Mahesh.Rajashekhara@pmcs.com> -Date: Fri, 28 Aug 2015 06:38:34 -0400 -Subject: [PATCH 07/15] aacraid: Add Power Management support - -* .suspend() and .resume() routines implemented in the driver -* aac_release_resources() initiates firmware shutdown -* aac_acquire_resources re-initializes the host interface - -Reviewed-by: Tomas Henzl <thenzl@redhat.com> -Reviewed-by: Murthy Bhat <Murthy.Bhat@pmcs.com> -Reviewed-by: Karthikeya Sunkesula <Karthikeya.Sunkesula@pmcs.com> -Signed-off-by: Mahesh Rajashekhara <Mahesh.Rajashekhara@pmcs.com> -Signed-off-by: Joel Stanley <joel@jms.id.au> ---- - drivers/scsi/aacraid/aacraid.h | 5 ++ - drivers/scsi/aacraid/comminit.c | 154 ++++++++++++++++++++-------------------- - drivers/scsi/aacraid/linit.c | 147 ++++++++++++++++++++++++++++++++++++++ - drivers/scsi/aacraid/rx.c | 1 + - drivers/scsi/aacraid/sa.c | 1 + - drivers/scsi/aacraid/src.c | 2 + - 6 files changed, 232 insertions(+), 78 deletions(-) - -diff --git a/drivers/scsi/aacraid/aacraid.h b/drivers/scsi/aacraid/aacraid.h -index 40fe65c91b41..62b099940345 100644 ---- a/drivers/scsi/aacraid/aacraid.h -+++ b/drivers/scsi/aacraid/aacraid.h -@@ -547,6 +547,7 @@ struct adapter_ops - int (*adapter_sync_cmd)(struct aac_dev *dev, u32 command, u32 p1, u32 p2, u32 p3, u32 p4, u32 p5, u32 p6, u32 *status, u32 *r1, u32 *r2, u32 *r3, u32 *r4); - int (*adapter_check_health)(struct aac_dev *dev); - int (*adapter_restart)(struct aac_dev *dev, int bled); -+ void (*adapter_start)(struct aac_dev *dev); - /* Transport operations */ - int (*adapter_ioremap)(struct aac_dev * dev, u32 size); - irq_handler_t adapter_intr; -@@ -1247,6 +1248,9 @@ struct aac_dev - #define aac_adapter_restart(dev,bled) \ - (dev)->a_ops.adapter_restart(dev,bled) - -+#define aac_adapter_start(dev) \ -+ ((dev)->a_ops.adapter_start(dev)) -+ - #define aac_adapter_ioremap(dev, size) \ - (dev)->a_ops.adapter_ioremap(dev, size) - -@@ -2127,6 +2131,7 @@ int aac_sa_init(struct aac_dev *dev); - int aac_src_init(struct aac_dev *dev); - int aac_srcv_init(struct aac_dev *dev); - int aac_queue_get(struct aac_dev * dev, u32 * index, u32 qid, struct hw_fib * hw_fib, int wait, struct fib * fibptr, unsigned long *nonotify); -+void aac_define_int_mode(struct aac_dev *dev); - unsigned int aac_response_normal(struct aac_queue * q); - unsigned int aac_command_normal(struct aac_queue * q); - unsigned int aac_intr_normal(struct aac_dev *dev, u32 Index, -diff --git a/drivers/scsi/aacraid/comminit.c b/drivers/scsi/aacraid/comminit.c -index 45db84ad322f..45a0a044dfdb 100644 ---- a/drivers/scsi/aacraid/comminit.c -+++ b/drivers/scsi/aacraid/comminit.c -@@ -43,8 +43,6 @@ - - #include "aacraid.h" - --static void aac_define_int_mode(struct aac_dev *dev); -- - struct aac_common aac_config = { - .irq_mod = 1 - }; -@@ -338,6 +336,82 @@ static int aac_comm_init(struct aac_dev * dev) - return 0; - } - -+void aac_define_int_mode(struct aac_dev *dev) -+{ -+ int i, msi_count; -+ -+ msi_count = i = 0; -+ /* max. vectors from GET_COMM_PREFERRED_SETTINGS */ -+ if (dev->max_msix == 0 || -+ dev->pdev->device == PMC_DEVICE_S6 || -+ dev->sync_mode) { -+ dev->max_msix = 1; -+ dev->vector_cap = -+ dev->scsi_host_ptr->can_queue + -+ AAC_NUM_MGT_FIB; -+ return; -+ } -+ -+ /* Don't bother allocating more MSI-X vectors than cpus */ -+ msi_count = min(dev->max_msix, -+ (unsigned int)num_online_cpus()); -+ -+ dev->max_msix = msi_count; -+ -+ if (msi_count > AAC_MAX_MSIX) -+ msi_count = AAC_MAX_MSIX; -+ -+ for (i = 0; i < msi_count; i++) -+ dev->msixentry[i].entry = i; -+ -+ if (msi_count > 1 && -+ pci_find_capability(dev->pdev, PCI_CAP_ID_MSIX)) { -+ i = pci_enable_msix(dev->pdev, -+ dev->msixentry, -+ msi_count); -+ /* Check how many MSIX vectors are allocated */ -+ if (i >= 0) { -+ dev->msi_enabled = 1; -+ if (i) { -+ msi_count = i; -+ if (pci_enable_msix(dev->pdev, -+ dev->msixentry, -+ msi_count)) { -+ dev->msi_enabled = 0; -+ printk(KERN_ERR "%s%d: MSIX not supported!! Will try MSI 0x%x.\n", -+ dev->name, dev->id, i); -+ } -+ } -+ } else { -+ dev->msi_enabled = 0; -+ printk(KERN_ERR "%s%d: MSIX not supported!! Will try MSI 0x%x.\n", -+ dev->name, dev->id, i); -+ } -+ } -+ -+ if (!dev->msi_enabled) { -+ msi_count = 1; -+ i = pci_enable_msi(dev->pdev); -+ -+ if (!i) { -+ dev->msi_enabled = 1; -+ dev->msi = 1; -+ } else { -+ printk(KERN_ERR "%s%d: MSI not supported!! Will try INTx 0x%x.\n", -+ dev->name, dev->id, i); -+ } -+ } -+ -+ if (!dev->msi_enabled) -+ dev->max_msix = msi_count = 1; -+ else { -+ if (dev->max_msix > msi_count) -+ dev->max_msix = msi_count; -+ } -+ dev->vector_cap = -+ (dev->scsi_host_ptr->can_queue + AAC_NUM_MGT_FIB) / -+ msi_count; -+} - struct aac_dev *aac_init_adapter(struct aac_dev *dev) - { - u32 status[5]; -@@ -508,79 +582,3 @@ struct aac_dev *aac_init_adapter(struct aac_dev *dev) - return dev; - } - --static void aac_define_int_mode(struct aac_dev *dev) --{ -- -- int i, msi_count; -- -- msi_count = i = 0; -- /* max. vectors from GET_COMM_PREFERRED_SETTINGS */ -- if (dev->max_msix == 0 || -- dev->pdev->device == PMC_DEVICE_S6 || -- dev->sync_mode) { -- dev->max_msix = 1; -- dev->vector_cap = -- dev->scsi_host_ptr->can_queue + -- AAC_NUM_MGT_FIB; -- return; -- } -- -- msi_count = min(dev->max_msix, -- (unsigned int)num_online_cpus()); -- -- dev->max_msix = msi_count; -- -- if (msi_count > AAC_MAX_MSIX) -- msi_count = AAC_MAX_MSIX; -- -- for (i = 0; i < msi_count; i++) -- dev->msixentry[i].entry = i; -- -- if (msi_count > 1 && -- pci_find_capability(dev->pdev, PCI_CAP_ID_MSIX)) { -- i = pci_enable_msix(dev->pdev, -- dev->msixentry, -- msi_count); -- /* Check how many MSIX vectors are allocated */ -- if (i >= 0) { -- dev->msi_enabled = 1; -- if (i) { -- msi_count = i; -- if (pci_enable_msix(dev->pdev, -- dev->msixentry, -- msi_count)) { -- dev->msi_enabled = 0; -- printk(KERN_ERR "%s%d: MSIX not supported!! Will try MSI 0x%x.\n", -- dev->name, dev->id, i); -- } -- } -- } else { -- dev->msi_enabled = 0; -- printk(KERN_ERR "%s%d: MSIX not supported!! Will try MSI 0x%x.\n", -- dev->name, dev->id, i); -- } -- } -- -- if (!dev->msi_enabled) { -- msi_count = 1; -- i = pci_enable_msi(dev->pdev); -- -- if (!i) { -- dev->msi_enabled = 1; -- dev->msi = 1; -- } else { -- printk(KERN_ERR "%s%d: MSI not supported!! Will try INTx 0x%x.\n", -- dev->name, dev->id, i); -- } -- } -- -- if (!dev->msi_enabled) -- dev->max_msix = msi_count = 1; -- else { -- if (dev->max_msix > msi_count) -- dev->max_msix = msi_count; -- } -- dev->vector_cap = -- (dev->scsi_host_ptr->can_queue + AAC_NUM_MGT_FIB) / -- msi_count; --} -diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c -index 9eec02733c86..37375cf7d126 100644 ---- a/drivers/scsi/aacraid/linit.c -+++ b/drivers/scsi/aacraid/linit.c -@@ -1317,6 +1317,149 @@ static int aac_probe_one(struct pci_dev *pdev, const struct pci_device_id *id) - return error; - } - -+#if (defined(CONFIG_PM)) -+void aac_release_resources(struct aac_dev *aac) -+{ -+ int i; -+ -+ aac_adapter_disable_int(aac); -+ if (aac->pdev->device == PMC_DEVICE_S6 || -+ aac->pdev->device == PMC_DEVICE_S7 || -+ aac->pdev->device == PMC_DEVICE_S8 || -+ aac->pdev->device == PMC_DEVICE_S9) { -+ if (aac->max_msix > 1) { -+ for (i = 0; i < aac->max_msix; i++) -+ free_irq(aac->msixentry[i].vector, -+ &(aac->aac_msix[i])); -+ } else { -+ free_irq(aac->pdev->irq, &(aac->aac_msix[0])); -+ } -+ } else { -+ free_irq(aac->pdev->irq, aac); -+ } -+ if (aac->msi) -+ pci_disable_msi(aac->pdev); -+ else if (aac->max_msix > 1) -+ pci_disable_msix(aac->pdev); -+ -+} -+ -+static int aac_acquire_resources(struct aac_dev *dev) -+{ -+ int i, j; -+ int instance = dev->id; -+ const char *name = dev->name; -+ unsigned long status; -+ /* -+ * First clear out all interrupts. Then enable the one's that we -+ * can handle. -+ */ -+ while (!((status = src_readl(dev, MUnit.OMR)) & KERNEL_UP_AND_RUNNING) -+ || status == 0xffffffff) -+ msleep(20); -+ -+ aac_adapter_disable_int(dev); -+ aac_adapter_enable_int(dev); -+ -+ -+ if ((dev->pdev->device == PMC_DEVICE_S7 || -+ dev->pdev->device == PMC_DEVICE_S8 || -+ dev->pdev->device == PMC_DEVICE_S9)) -+ aac_define_int_mode(dev); -+ -+ if (dev->msi_enabled) -+ aac_src_access_devreg(dev, AAC_ENABLE_MSIX); -+ -+ if (!dev->sync_mode && dev->msi_enabled && dev->max_msix > 1) { -+ for (i = 0; i < dev->max_msix; i++) { -+ dev->aac_msix[i].vector_no = i; -+ dev->aac_msix[i].dev = dev; -+ -+ if (request_irq(dev->msixentry[i].vector, -+ dev->a_ops.adapter_intr, -+ 0, "aacraid", &(dev->aac_msix[i]))) { -+ printk(KERN_ERR "%s%d: Failed to register IRQ for vector %d.\n", -+ name, instance, i); -+ for (j = 0 ; j < i ; j++) -+ free_irq(dev->msixentry[j].vector, -+ &(dev->aac_msix[j])); -+ pci_disable_msix(dev->pdev); -+ goto error_iounmap; -+ } -+ } -+ } else { -+ dev->aac_msix[0].vector_no = 0; -+ dev->aac_msix[0].dev = dev; -+ -+ if (request_irq(dev->pdev->irq, dev->a_ops.adapter_intr, -+ IRQF_SHARED, "aacraid", -+ &(dev->aac_msix[0])) < 0) { -+ if (dev->msi) -+ pci_disable_msi(dev->pdev); -+ printk(KERN_ERR "%s%d: Interrupt unavailable.\n", -+ name, instance); -+ goto error_iounmap; -+ } -+ } -+ -+ aac_adapter_enable_int(dev); -+ -+ if (!dev->sync_mode) -+ aac_adapter_start(dev); -+ return 0; -+ -+error_iounmap: -+ return -1; -+ -+} -+static int aac_suspend(struct pci_dev *pdev, pm_message_t state) -+{ -+ -+ struct Scsi_Host *shost = pci_get_drvdata(pdev); -+ struct aac_dev *aac = (struct aac_dev *)shost->hostdata; -+ -+ scsi_block_requests(shost); -+ aac_send_shutdown(aac); -+ -+ aac_release_resources(aac); -+ -+ pci_set_drvdata(pdev, shost); -+ pci_save_state(pdev); -+ pci_disable_device(pdev); -+ pci_set_power_state(pdev, pci_choose_state(pdev, state)); -+ -+ return 0; -+} -+ -+static int aac_resume(struct pci_dev *pdev) -+{ -+ struct Scsi_Host *shost = pci_get_drvdata(pdev); -+ struct aac_dev *aac = (struct aac_dev *)shost->hostdata; -+ int r; -+ -+ pci_set_power_state(pdev, PCI_D0); -+ pci_enable_wake(pdev, PCI_D0, 0); -+ pci_restore_state(pdev); -+ r = pci_enable_device(pdev); -+ -+ if (r) -+ goto fail_device; -+ -+ pci_set_master(pdev); -+ if (aac_acquire_resources(aac)) -+ goto fail_device; -+ scsi_unblock_requests(shost); -+ -+ return 0; -+ -+fail_device: -+ printk(KERN_INFO "%s%d: resume failed.\n", aac->name, aac->id); -+ scsi_host_put(shost); -+ pci_disable_device(pdev); -+ return -ENODEV; -+} -+#endif -+ - static void aac_shutdown(struct pci_dev *dev) - { - struct Scsi_Host *shost = pci_get_drvdata(dev); -@@ -1356,6 +1499,10 @@ static struct pci_driver aac_pci_driver = { - .id_table = aac_pci_tbl, - .probe = aac_probe_one, - .remove = aac_remove_one, -+#if (defined(CONFIG_PM)) -+ .suspend = aac_suspend, -+ .resume = aac_resume, -+#endif - .shutdown = aac_shutdown, - }; - -diff --git a/drivers/scsi/aacraid/rx.c b/drivers/scsi/aacraid/rx.c -index 9570612b80ce..ac1638069335 100644 ---- a/drivers/scsi/aacraid/rx.c -+++ b/drivers/scsi/aacraid/rx.c -@@ -623,6 +623,7 @@ int _aac_rx_init(struct aac_dev *dev) - dev->a_ops.adapter_sync_cmd = rx_sync_cmd; - dev->a_ops.adapter_check_health = aac_rx_check_health; - dev->a_ops.adapter_restart = aac_rx_restart_adapter; -+ dev->a_ops.adapter_start = aac_rx_start_adapter; - - /* - * First clear out all interrupts. Then enable the one's that we -diff --git a/drivers/scsi/aacraid/sa.c b/drivers/scsi/aacraid/sa.c -index e66477c98240..869aea23c041 100644 ---- a/drivers/scsi/aacraid/sa.c -+++ b/drivers/scsi/aacraid/sa.c -@@ -372,6 +372,7 @@ int aac_sa_init(struct aac_dev *dev) - dev->a_ops.adapter_sync_cmd = sa_sync_cmd; - dev->a_ops.adapter_check_health = aac_sa_check_health; - dev->a_ops.adapter_restart = aac_sa_restart_adapter; -+ dev->a_ops.adapter_start = aac_sa_start_adapter; - dev->a_ops.adapter_intr = aac_sa_intr; - dev->a_ops.adapter_deliver = aac_rx_deliver_producer; - dev->a_ops.adapter_ioremap = aac_sa_ioremap; -diff --git a/drivers/scsi/aacraid/src.c b/drivers/scsi/aacraid/src.c -index e63cf9f22f36..b147341ac24d 100644 ---- a/drivers/scsi/aacraid/src.c -+++ b/drivers/scsi/aacraid/src.c -@@ -726,6 +726,7 @@ int aac_src_init(struct aac_dev *dev) - dev->a_ops.adapter_sync_cmd = src_sync_cmd; - dev->a_ops.adapter_check_health = aac_src_check_health; - dev->a_ops.adapter_restart = aac_src_restart_adapter; -+ dev->a_ops.adapter_start = aac_src_start_adapter; - - /* - * First clear out all interrupts. Then enable the one's that we -@@ -892,6 +893,7 @@ int aac_srcv_init(struct aac_dev *dev) - dev->a_ops.adapter_sync_cmd = src_sync_cmd; - dev->a_ops.adapter_check_health = aac_src_check_health; - dev->a_ops.adapter_restart = aac_src_restart_adapter; -+ dev->a_ops.adapter_start = aac_src_start_adapter; - - /* - * First clear out all interrupts. Then enable the one's that we --- -2.6.2 - diff --git a/openpower/linux/linux-0008-aacraid-Change-interrupt-mode-to-MSI-for-Series-6.patch b/openpower/linux/linux-0008-aacraid-Change-interrupt-mode-to-MSI-for-Series-6.patch deleted file mode 100644 index 872fdc75..00000000 --- a/openpower/linux/linux-0008-aacraid-Change-interrupt-mode-to-MSI-for-Series-6.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 3b9ff8cca5a7d0745311e06c71286090ffd17392 Mon Sep 17 00:00:00 2001 -From: Mahesh Rajashekhara <Mahesh.Rajashekhara@pmcs.com> -Date: Fri, 28 Aug 2015 06:38:35 -0400 -Subject: [PATCH 08/15] aacraid: Change interrupt mode to MSI for Series 6 - -This change always sets MSI interrupt mode for series-6 controller. - -Reviewed-by: Tomas Henzl <thenzl@redhat.com> -Reviewed-by: Murthy Bhat <Murthy.Bhat@pmcs.com> -Reviewed-by: Karthikeya Sunkesula <Karthikeya.Sunkesula@pmcs.com> -Signed-off-by: Mahesh Rajashekhara <Mahesh.Rajashekhara@pmcs.com> -Signed-off-by: Joel Stanley <joel@jms.id.au> ---- - drivers/scsi/aacraid/aachba.c | 2 +- - drivers/scsi/aacraid/src.c | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/drivers/scsi/aacraid/aachba.c b/drivers/scsi/aacraid/aachba.c -index fe59b0084575..05f2a0295f4d 100644 ---- a/drivers/scsi/aacraid/aachba.c -+++ b/drivers/scsi/aacraid/aachba.c -@@ -259,7 +259,7 @@ MODULE_PARM_DESC(commit, "Control whether a COMMIT_CONFIG is issued to the" - " 0=off, 1=on"); - module_param_named(msi, aac_msi, int, S_IRUGO|S_IWUSR); - MODULE_PARM_DESC(msi, "IRQ handling." -- " 0=PIC(default), 1=MSI, 2=MSI-X(unsupported, uses MSI)"); -+ " 0=PIC(default), 1=MSI, 2=MSI-X)"); - module_param(startup_timeout, int, S_IRUGO|S_IWUSR); - MODULE_PARM_DESC(startup_timeout, "The duration of time in seconds to wait for" - " adapter to have it's kernel up and\n" -diff --git a/drivers/scsi/aacraid/src.c b/drivers/scsi/aacraid/src.c -index b147341ac24d..eb07b3d4ed38 100644 ---- a/drivers/scsi/aacraid/src.c -+++ b/drivers/scsi/aacraid/src.c -@@ -742,7 +742,7 @@ int aac_src_init(struct aac_dev *dev) - if (dev->comm_interface != AAC_COMM_MESSAGE_TYPE1) - goto error_iounmap; - -- dev->msi = aac_msi && !pci_enable_msi(dev->pdev); -+ dev->msi = !pci_enable_msi(dev->pdev); - - dev->aac_msix[0].vector_no = 0; - dev->aac_msix[0].dev = dev; --- -2.6.2 - diff --git a/openpower/linux/linux-0009-aacraid-Tune-response-path-if-IsFastPath-bit-set.patch b/openpower/linux/linux-0009-aacraid-Tune-response-path-if-IsFastPath-bit-set.patch deleted file mode 100644 index 81d0dcf3..00000000 --- a/openpower/linux/linux-0009-aacraid-Tune-response-path-if-IsFastPath-bit-set.patch +++ /dev/null @@ -1,319 +0,0 @@ -From abcbb5d7d8e9e6144487bfcc22d14efe3f76de40 Mon Sep 17 00:00:00 2001 -From: Mahesh Rajashekhara <Mahesh.Rajashekhara@pmcs.com> -Date: Fri, 28 Aug 2015 06:38:37 -0400 -Subject: [PATCH 09/15] aacraid: Tune response path if IsFastPath bit set - -If 'IsFastPath' bit is set, then response path assumes no error and skips error check. - -Reviewed-by: Murthy Bhat <Murthy.Bhat@pmcs.com> -Reviewed-by: Karthikeya Sunkesula <Karthikeya.Sunkesula@pmcs.com> -Signed-off-by: Mahesh Rajashekhara <Mahesh.Rajashekhara@pmcs.com> -Signed-off-by: Joel Stanley <joel@jms.id.au> ---- - drivers/scsi/aacraid/aachba.c | 259 ++++++++++++++++++++++-------------------- - 1 file changed, 137 insertions(+), 122 deletions(-) - -diff --git a/drivers/scsi/aacraid/aachba.c b/drivers/scsi/aacraid/aachba.c -index 05f2a0295f4d..e4c243748a97 100644 ---- a/drivers/scsi/aacraid/aachba.c -+++ b/drivers/scsi/aacraid/aachba.c -@@ -2977,11 +2977,16 @@ static void aac_srb_callback(void *context, struct fib * fibptr) - return; - - BUG_ON(fibptr == NULL); -- - dev = fibptr->dev; - -- srbreply = (struct aac_srb_reply *) fib_data(fibptr); -+ scsi_dma_unmap(scsicmd); - -+ /* expose physical device if expose_physicald flag is on */ -+ if (scsicmd->cmnd[0] == INQUIRY && !(scsicmd->cmnd[1] & 0x01) -+ && expose_physicals > 0) -+ aac_expose_phy_device(scsicmd); -+ -+ srbreply = (struct aac_srb_reply *) fib_data(fibptr); - scsicmd->sense_buffer[0] = '\0'; /* Initialize sense valid flag to false */ - - if (fibptr->flags & FIB_CONTEXT_FLAG_FASTRESP) { -@@ -2994,147 +2999,157 @@ static void aac_srb_callback(void *context, struct fib * fibptr) - */ - scsi_set_resid(scsicmd, scsi_bufflen(scsicmd) - - le32_to_cpu(srbreply->data_xfer_length)); -- } -- -- scsi_dma_unmap(scsicmd); -- -- /* expose physical device if expose_physicald flag is on */ -- if (scsicmd->cmnd[0] == INQUIRY && !(scsicmd->cmnd[1] & 0x01) -- && expose_physicals > 0) -- aac_expose_phy_device(scsicmd); -+ /* -+ * First check the fib status -+ */ - -- /* -- * First check the fib status -- */ -+ if (le32_to_cpu(srbreply->status) != ST_OK) { -+ int len; - -- if (le32_to_cpu(srbreply->status) != ST_OK){ -- int len; -- printk(KERN_WARNING "aac_srb_callback: srb failed, status = %d\n", le32_to_cpu(srbreply->status)); -- len = min_t(u32, le32_to_cpu(srbreply->sense_data_size), -- SCSI_SENSE_BUFFERSIZE); -- scsicmd->result = DID_ERROR << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_CHECK_CONDITION; -- memcpy(scsicmd->sense_buffer, srbreply->sense_data, len); -- } -+ printk(KERN_WARNING "aac_srb_callback: srb failed, status = %d\n", le32_to_cpu(srbreply->status)); -+ len = min_t(u32, le32_to_cpu(srbreply->sense_data_size), -+ SCSI_SENSE_BUFFERSIZE); -+ scsicmd->result = DID_ERROR << 16 -+ | COMMAND_COMPLETE << 8 -+ | SAM_STAT_CHECK_CONDITION; -+ memcpy(scsicmd->sense_buffer, -+ srbreply->sense_data, len); -+ } - -- /* -- * Next check the srb status -- */ -- switch( (le32_to_cpu(srbreply->srb_status))&0x3f){ -- case SRB_STATUS_ERROR_RECOVERY: -- case SRB_STATUS_PENDING: -- case SRB_STATUS_SUCCESS: -- scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8; -- break; -- case SRB_STATUS_DATA_OVERRUN: -- switch(scsicmd->cmnd[0]){ -- case READ_6: -- case WRITE_6: -- case READ_10: -- case WRITE_10: -- case READ_12: -- case WRITE_12: -- case READ_16: -- case WRITE_16: -- if (le32_to_cpu(srbreply->data_xfer_length) < scsicmd->underflow) { -- printk(KERN_WARNING"aacraid: SCSI CMD underflow\n"); -- } else { -- printk(KERN_WARNING"aacraid: SCSI CMD Data Overrun\n"); -+ /* -+ * Next check the srb status -+ */ -+ switch ((le32_to_cpu(srbreply->srb_status))&0x3f) { -+ case SRB_STATUS_ERROR_RECOVERY: -+ case SRB_STATUS_PENDING: -+ case SRB_STATUS_SUCCESS: -+ scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8; -+ break; -+ case SRB_STATUS_DATA_OVERRUN: -+ switch (scsicmd->cmnd[0]) { -+ case READ_6: -+ case WRITE_6: -+ case READ_10: -+ case WRITE_10: -+ case READ_12: -+ case WRITE_12: -+ case READ_16: -+ case WRITE_16: -+ if (le32_to_cpu(srbreply->data_xfer_length) -+ < scsicmd->underflow) -+ printk(KERN_WARNING"aacraid: SCSI CMD underflow\n"); -+ else -+ printk(KERN_WARNING"aacraid: SCSI CMD Data Overrun\n"); -+ scsicmd->result = DID_ERROR << 16 -+ | COMMAND_COMPLETE << 8; -+ break; -+ case INQUIRY: { -+ scsicmd->result = DID_OK << 16 -+ | COMMAND_COMPLETE << 8; -+ break; -+ } -+ default: -+ scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8; -+ break; - } -- scsicmd->result = DID_ERROR << 16 | COMMAND_COMPLETE << 8; - break; -- case INQUIRY: { -- scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8; -+ case SRB_STATUS_ABORTED: -+ scsicmd->result = DID_ABORT << 16 | ABORT << 8; - break; -- } -- default: -- scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8; -+ case SRB_STATUS_ABORT_FAILED: -+ /* -+ * Not sure about this one - but assuming the -+ * hba was trying to abort for some reason -+ */ -+ scsicmd->result = DID_ERROR << 16 | ABORT << 8; -+ break; -+ case SRB_STATUS_PARITY_ERROR: -+ scsicmd->result = DID_PARITY << 16 -+ | MSG_PARITY_ERROR << 8; -+ break; -+ case SRB_STATUS_NO_DEVICE: -+ case SRB_STATUS_INVALID_PATH_ID: -+ case SRB_STATUS_INVALID_TARGET_ID: -+ case SRB_STATUS_INVALID_LUN: -+ case SRB_STATUS_SELECTION_TIMEOUT: -+ scsicmd->result = DID_NO_CONNECT << 16 -+ | COMMAND_COMPLETE << 8; - break; -- } -- break; -- case SRB_STATUS_ABORTED: -- scsicmd->result = DID_ABORT << 16 | ABORT << 8; -- break; -- case SRB_STATUS_ABORT_FAILED: -- // Not sure about this one - but assuming the hba was trying to abort for some reason -- scsicmd->result = DID_ERROR << 16 | ABORT << 8; -- break; -- case SRB_STATUS_PARITY_ERROR: -- scsicmd->result = DID_PARITY << 16 | MSG_PARITY_ERROR << 8; -- break; -- case SRB_STATUS_NO_DEVICE: -- case SRB_STATUS_INVALID_PATH_ID: -- case SRB_STATUS_INVALID_TARGET_ID: -- case SRB_STATUS_INVALID_LUN: -- case SRB_STATUS_SELECTION_TIMEOUT: -- scsicmd->result = DID_NO_CONNECT << 16 | COMMAND_COMPLETE << 8; -- break; - -- case SRB_STATUS_COMMAND_TIMEOUT: -- case SRB_STATUS_TIMEOUT: -- scsicmd->result = DID_TIME_OUT << 16 | COMMAND_COMPLETE << 8; -- break; -+ case SRB_STATUS_COMMAND_TIMEOUT: -+ case SRB_STATUS_TIMEOUT: -+ scsicmd->result = DID_TIME_OUT << 16 -+ | COMMAND_COMPLETE << 8; -+ break; - -- case SRB_STATUS_BUSY: -- scsicmd->result = DID_BUS_BUSY << 16 | COMMAND_COMPLETE << 8; -- break; -+ case SRB_STATUS_BUSY: -+ scsicmd->result = DID_BUS_BUSY << 16 -+ | COMMAND_COMPLETE << 8; -+ break; - -- case SRB_STATUS_BUS_RESET: -- scsicmd->result = DID_RESET << 16 | COMMAND_COMPLETE << 8; -- break; -+ case SRB_STATUS_BUS_RESET: -+ scsicmd->result = DID_RESET << 16 -+ | COMMAND_COMPLETE << 8; -+ break; - -- case SRB_STATUS_MESSAGE_REJECTED: -- scsicmd->result = DID_ERROR << 16 | MESSAGE_REJECT << 8; -- break; -- case SRB_STATUS_REQUEST_FLUSHED: -- case SRB_STATUS_ERROR: -- case SRB_STATUS_INVALID_REQUEST: -- case SRB_STATUS_REQUEST_SENSE_FAILED: -- case SRB_STATUS_NO_HBA: -- case SRB_STATUS_UNEXPECTED_BUS_FREE: -- case SRB_STATUS_PHASE_SEQUENCE_FAILURE: -- case SRB_STATUS_BAD_SRB_BLOCK_LENGTH: -- case SRB_STATUS_DELAYED_RETRY: -- case SRB_STATUS_BAD_FUNCTION: -- case SRB_STATUS_NOT_STARTED: -- case SRB_STATUS_NOT_IN_USE: -- case SRB_STATUS_FORCE_ABORT: -- case SRB_STATUS_DOMAIN_VALIDATION_FAIL: -- default: -+ case SRB_STATUS_MESSAGE_REJECTED: -+ scsicmd->result = DID_ERROR << 16 -+ | MESSAGE_REJECT << 8; -+ break; -+ case SRB_STATUS_REQUEST_FLUSHED: -+ case SRB_STATUS_ERROR: -+ case SRB_STATUS_INVALID_REQUEST: -+ case SRB_STATUS_REQUEST_SENSE_FAILED: -+ case SRB_STATUS_NO_HBA: -+ case SRB_STATUS_UNEXPECTED_BUS_FREE: -+ case SRB_STATUS_PHASE_SEQUENCE_FAILURE: -+ case SRB_STATUS_BAD_SRB_BLOCK_LENGTH: -+ case SRB_STATUS_DELAYED_RETRY: -+ case SRB_STATUS_BAD_FUNCTION: -+ case SRB_STATUS_NOT_STARTED: -+ case SRB_STATUS_NOT_IN_USE: -+ case SRB_STATUS_FORCE_ABORT: -+ case SRB_STATUS_DOMAIN_VALIDATION_FAIL: -+ default: - #ifdef AAC_DETAILED_STATUS_INFO -- printk("aacraid: SRB ERROR(%u) %s scsi cmd 0x%x - scsi status 0x%x\n", -- le32_to_cpu(srbreply->srb_status) & 0x3F, -- aac_get_status_string( -- le32_to_cpu(srbreply->srb_status) & 0x3F), -- scsicmd->cmnd[0], -- le32_to_cpu(srbreply->scsi_status)); -+ printk(KERN_INFO "aacraid: SRB ERROR(%u) %s scsi cmd 0x%x - scsi status 0x%x\n", -+ le32_to_cpu(srbreply->srb_status) & 0x3F, -+ aac_get_status_string( -+ le32_to_cpu(srbreply->srb_status) & 0x3F), -+ scsicmd->cmnd[0], -+ le32_to_cpu(srbreply->scsi_status)); - #endif -- if ((scsicmd->cmnd[0] == ATA_12) -- || (scsicmd->cmnd[0] == ATA_16)) { -- if (scsicmd->cmnd[2] & (0x01 << 5)) { -- scsicmd->result = DID_OK << 16 -- | COMMAND_COMPLETE << 8; -+ if ((scsicmd->cmnd[0] == ATA_12) -+ || (scsicmd->cmnd[0] == ATA_16)) { -+ if (scsicmd->cmnd[2] & (0x01 << 5)) { -+ scsicmd->result = DID_OK << 16 -+ | COMMAND_COMPLETE << 8; - break; -+ } else { -+ scsicmd->result = DID_ERROR << 16 -+ | COMMAND_COMPLETE << 8; -+ break; -+ } - } else { - scsicmd->result = DID_ERROR << 16 -- | COMMAND_COMPLETE << 8; -+ | COMMAND_COMPLETE << 8; - break; - } -- } else { -- scsicmd->result = DID_ERROR << 16 -- | COMMAND_COMPLETE << 8; -- break; - } -- } -- if (le32_to_cpu(srbreply->scsi_status) == SAM_STAT_CHECK_CONDITION) { -- int len; -- scsicmd->result |= SAM_STAT_CHECK_CONDITION; -- len = min_t(u32, le32_to_cpu(srbreply->sense_data_size), -- SCSI_SENSE_BUFFERSIZE); -+ if (le32_to_cpu(srbreply->scsi_status) -+ == SAM_STAT_CHECK_CONDITION) { -+ int len; -+ -+ scsicmd->result |= SAM_STAT_CHECK_CONDITION; -+ len = min_t(u32, le32_to_cpu(srbreply->sense_data_size), -+ SCSI_SENSE_BUFFERSIZE); - #ifdef AAC_DETAILED_STATUS_INFO -- printk(KERN_WARNING "aac_srb_callback: check condition, status = %d len=%d\n", -- le32_to_cpu(srbreply->status), len); -+ printk(KERN_WARNING "aac_srb_callback: check condition, status = %d len=%d\n", -+ le32_to_cpu(srbreply->status), len); - #endif -- memcpy(scsicmd->sense_buffer, srbreply->sense_data, len); -+ memcpy(scsicmd->sense_buffer, -+ srbreply->sense_data, len); -+ } - } - /* - * OR in the scsi status (already shifted up a bit) --- -2.6.2 - diff --git a/openpower/linux/linux-0010-aacraid-Enable-64bit-write-to-controller-register.patch b/openpower/linux/linux-0010-aacraid-Enable-64bit-write-to-controller-register.patch deleted file mode 100644 index ec349ff3..00000000 --- a/openpower/linux/linux-0010-aacraid-Enable-64bit-write-to-controller-register.patch +++ /dev/null @@ -1,92 +0,0 @@ -From 2eed91e90f6fa1bfdc21c5c84eeff9d656cfb2f6 Mon Sep 17 00:00:00 2001 -From: Mahesh Rajashekhara <Mahesh.Rajashekhara@pmcs.com> -Date: Fri, 28 Aug 2015 06:38:36 -0400 -Subject: [PATCH 10/15] aacraid: Enable 64bit write to controller register - -If writeq() not supported, then do atomic two 32bit write - -Reviewed-by: Tomas Henzl <thenzl@redhat.com> -Reviewed-by: Murthy Bhat <Murthy.Bhat@pmcs.com> -Reviewed-by: Karthikeya Sunkesula <Karthikeya.Sunkesula@pmcs.com> -Signed-off-by: Mahesh Rajashekhara <Mahesh.Rajashekhara@pmcs.com> -Signed-off-by: Joel Stanley <joel@jms.id.au> ---- - drivers/scsi/aacraid/aacraid.h | 9 +++++++++ - drivers/scsi/aacraid/comminit.c | 1 + - drivers/scsi/aacraid/src.c | 12 ++++++++++-- - 3 files changed, 20 insertions(+), 2 deletions(-) - -diff --git a/drivers/scsi/aacraid/aacraid.h b/drivers/scsi/aacraid/aacraid.h -index 62b099940345..e54f597a058d 100644 ---- a/drivers/scsi/aacraid/aacraid.h -+++ b/drivers/scsi/aacraid/aacraid.h -@@ -844,6 +844,10 @@ struct src_registers { - &((AEP)->regs.src.bar0->CSR)) - #define src_writel(AEP, CSR, value) writel(value, \ - &((AEP)->regs.src.bar0->CSR)) -+#if defined(writeq) -+#define src_writeq(AEP, CSR, value) writeq(value, \ -+ &((AEP)->regs.src.bar0->CSR)) -+#endif - - #define SRC_ODR_SHIFT 12 - #define SRC_IDR_SHIFT 9 -@@ -1163,6 +1167,11 @@ struct aac_dev - struct fsa_dev_info *fsa_dev; - struct task_struct *thread; - int cardtype; -+ /* -+ *This lock will protect the two 32-bit -+ *writes to the Inbound Queue -+ */ -+ spinlock_t iq_lock; - - /* - * The following is the device specific extension. -diff --git a/drivers/scsi/aacraid/comminit.c b/drivers/scsi/aacraid/comminit.c -index 45a0a044dfdb..b4b6088fcb33 100644 ---- a/drivers/scsi/aacraid/comminit.c -+++ b/drivers/scsi/aacraid/comminit.c -@@ -424,6 +424,7 @@ struct aac_dev *aac_init_adapter(struct aac_dev *dev) - dev->management_fib_count = 0; - spin_lock_init(&dev->manage_lock); - spin_lock_init(&dev->sync_lock); -+ spin_lock_init(&dev->iq_lock); - dev->max_fib_size = sizeof(struct hw_fib); - dev->sg_tablesize = host->sg_tablesize = (dev->max_fib_size - - sizeof(struct aac_fibhdr) -diff --git a/drivers/scsi/aacraid/src.c b/drivers/scsi/aacraid/src.c -index eb07b3d4ed38..1409a0b945ea 100644 ---- a/drivers/scsi/aacraid/src.c -+++ b/drivers/scsi/aacraid/src.c -@@ -447,6 +447,10 @@ static int aac_src_deliver_message(struct fib *fib) - u32 fibsize; - dma_addr_t address; - struct aac_fib_xporthdr *pFibX; -+#if !defined(writeq) -+ unsigned long flags; -+#endif -+ - u16 hdr_size = le16_to_cpu(fib->hw_fib_va->header.Size); - - atomic_inc(&q->numpending); -@@ -511,10 +515,14 @@ static int aac_src_deliver_message(struct fib *fib) - return -EINVAL; - address |= fibsize; - } -- -+#if defined(writeq) -+ src_writeq(dev, MUnit.IQ_L, (u64)address); -+#else -+ spin_lock_irqsave(&fib->dev->iq_lock, flags); - src_writel(dev, MUnit.IQ_H, upper_32_bits(address) & 0xffffffff); - src_writel(dev, MUnit.IQ_L, address & 0xffffffff); -- -+ spin_unlock_irqrestore(&fib->dev->iq_lock, flags); -+#endif - return 0; - } - --- -2.6.2 - diff --git a/openpower/linux/linux-0011-aacraid-IOCTL-fix.patch b/openpower/linux/linux-0011-aacraid-IOCTL-fix.patch deleted file mode 100644 index a06e4858..00000000 --- a/openpower/linux/linux-0011-aacraid-IOCTL-fix.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 21b4be79f2475bc5acd600400c47110695675ac0 Mon Sep 17 00:00:00 2001 -From: Mahesh Rajashekhara <Mahesh.Rajashekhara@pmcs.com> -Date: Fri, 28 Aug 2015 06:38:39 -0400 -Subject: [PATCH 11/15] aacraid: IOCTL fix - -Driver blocks ioctls once it received shutdown/suspend request during -suspend/hybernation. This patch unblocks ioctls on resume path. - -Reviewed-by: Tomas Henzl <thenzl@redhat.com> -Reviewed-by: Murthy Bhat <Murthy.Bhat@pmcs.com> -Reviewed-by: Karthikeya Sunkesula <Karthikeya.Sunkesula@pmcs.com> -Signed-off-by: Mahesh Rajashekhara <Mahesh.Rajashekhara@pmcs.com> -Signed-off-by: Joel Stanley <joel@jms.id.au> ---- - drivers/scsi/aacraid/linit.c | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c -index 37375cf7d126..3b6e5c67e853 100644 ---- a/drivers/scsi/aacraid/linit.c -+++ b/drivers/scsi/aacraid/linit.c -@@ -1448,6 +1448,11 @@ static int aac_resume(struct pci_dev *pdev) - pci_set_master(pdev); - if (aac_acquire_resources(aac)) - goto fail_device; -+ /* -+ * reset this flag to unblock ioctl() as it was set at -+ * aac_send_shutdown() to block ioctls from upperlayer -+ */ -+ aac->adapter_shutdown = 0; - scsi_unblock_requests(shost); - - return 0; --- -2.6.2 - diff --git a/openpower/linux/linux-0012-aacraid-Reset-irq-affinity-hints.patch b/openpower/linux/linux-0012-aacraid-Reset-irq-affinity-hints.patch deleted file mode 100644 index 3434b4bf..00000000 --- a/openpower/linux/linux-0012-aacraid-Reset-irq-affinity-hints.patch +++ /dev/null @@ -1,242 +0,0 @@ -From 691bc6c6570ffbd9e1c4733dd12cd513ff6e19ec Mon Sep 17 00:00:00 2001 -From: Mahesh Rajashekhara <Mahesh.Rajashekhara@pmcs.com> -Date: Fri, 28 Aug 2015 06:38:38 -0400 -Subject: [PATCH 12/15] aacraid: Reset irq affinity hints - -Reset irq affinity hints before releasing IRQ. -Removed duplicate code of IRQ acquire/release. - -Reviewed-by: Tomas Henzl <thenzl@redhat.com> -Reviewed-by: Murthy Bhat <Murthy.Bhat@pmcs.com> -Reviewed-by: Karthikeya Sunkesula <Karthikeya.Sunkesula@pmcs.com> -Signed-off-by: Mahesh Rajashekhara <Mahesh.Rajashekhara@pmcs.com> -Signed-off-by: Joel Stanley <joel@jms.id.au> ---- - drivers/scsi/aacraid/aacraid.h | 2 + - drivers/scsi/aacraid/commsup.c | 113 ++++++++++++++++++++++++++++++----------- - drivers/scsi/aacraid/src.c | 48 ++--------------- - 3 files changed, 88 insertions(+), 75 deletions(-) - -diff --git a/drivers/scsi/aacraid/aacraid.h b/drivers/scsi/aacraid/aacraid.h -index e54f597a058d..7b95227af478 100644 ---- a/drivers/scsi/aacraid/aacraid.h -+++ b/drivers/scsi/aacraid/aacraid.h -@@ -2110,6 +2110,8 @@ static inline unsigned int cap_to_cyls(sector_t capacity, unsigned divisor) - #define AAC_OWNER_ERROR_HANDLER 0x103 - #define AAC_OWNER_FIRMWARE 0x106 - -+int aac_acquire_irq(struct aac_dev *dev); -+void aac_free_irq(struct aac_dev *dev); - const char *aac_driverinfo(struct Scsi_Host *); - struct fib *aac_fib_alloc(struct aac_dev *dev); - int aac_fib_setup(struct aac_dev *dev); -diff --git a/drivers/scsi/aacraid/commsup.c b/drivers/scsi/aacraid/commsup.c -index 4da574925284..a1f90fe849c9 100644 ---- a/drivers/scsi/aacraid/commsup.c -+++ b/drivers/scsi/aacraid/commsup.c -@@ -1270,13 +1270,12 @@ retry_next: - static int _aac_reset_adapter(struct aac_dev *aac, int forced) - { - int index, quirks; -- int retval, i; -+ int retval; - struct Scsi_Host *host; - struct scsi_device *dev; - struct scsi_cmnd *command; - struct scsi_cmnd *command_list; - int jafo = 0; -- int cpu; - - /* - * Assumptions: -@@ -1339,35 +1338,7 @@ static int _aac_reset_adapter(struct aac_dev *aac, int forced) - aac->comm_phys = 0; - kfree(aac->queues); - aac->queues = NULL; -- cpu = cpumask_first(cpu_online_mask); -- if (aac->pdev->device == PMC_DEVICE_S6 || -- aac->pdev->device == PMC_DEVICE_S7 || -- aac->pdev->device == PMC_DEVICE_S8 || -- aac->pdev->device == PMC_DEVICE_S9) { -- if (aac->max_msix > 1) { -- for (i = 0; i < aac->max_msix; i++) { -- if (irq_set_affinity_hint( -- aac->msixentry[i].vector, -- NULL)) { -- printk(KERN_ERR "%s%d: Failed to reset IRQ affinity for cpu %d\n", -- aac->name, -- aac->id, -- cpu); -- } -- cpu = cpumask_next(cpu, -- cpu_online_mask); -- free_irq(aac->msixentry[i].vector, -- &(aac->aac_msix[i])); -- } -- pci_disable_msix(aac->pdev); -- } else { -- free_irq(aac->pdev->irq, &(aac->aac_msix[0])); -- } -- } else { -- free_irq(aac->pdev->irq, aac); -- } -- if (aac->msi) -- pci_disable_msi(aac->pdev); -+ aac_free_irq(aac); - kfree(aac->fsa_dev); - aac->fsa_dev = NULL; - quirks = aac_get_driver_ident(index)->quirks; -@@ -1978,3 +1949,83 @@ int aac_command_thread(void *data) - dev->aif_thread = 0; - return 0; - } -+ -+int aac_acquire_irq(struct aac_dev *dev) -+{ -+ int i; -+ int j; -+ int ret = 0; -+ int cpu; -+ -+ cpu = cpumask_first(cpu_online_mask); -+ if (!dev->sync_mode && dev->msi_enabled && dev->max_msix > 1) { -+ for (i = 0; i < dev->max_msix; i++) { -+ dev->aac_msix[i].vector_no = i; -+ dev->aac_msix[i].dev = dev; -+ if (request_irq(dev->msixentry[i].vector, -+ dev->a_ops.adapter_intr, -+ 0, "aacraid", &(dev->aac_msix[i]))) { -+ printk(KERN_ERR "%s%d: Failed to register IRQ for vector %d.\n", -+ dev->name, dev->id, i); -+ for (j = 0 ; j < i ; j++) -+ free_irq(dev->msixentry[j].vector, -+ &(dev->aac_msix[j])); -+ pci_disable_msix(dev->pdev); -+ ret = -1; -+ } -+ if (irq_set_affinity_hint(dev->msixentry[i].vector, -+ get_cpu_mask(cpu))) { -+ printk(KERN_ERR "%s%d: Failed to set IRQ affinity for cpu %d\n", -+ dev->name, dev->id, cpu); -+ } -+ cpu = cpumask_next(cpu, cpu_online_mask); -+ } -+ } else { -+ dev->aac_msix[0].vector_no = 0; -+ dev->aac_msix[0].dev = dev; -+ -+ if (request_irq(dev->pdev->irq, dev->a_ops.adapter_intr, -+ IRQF_SHARED, "aacraid", -+ &(dev->aac_msix[0])) < 0) { -+ if (dev->msi) -+ pci_disable_msi(dev->pdev); -+ printk(KERN_ERR "%s%d: Interrupt unavailable.\n", -+ dev->name, dev->id); -+ ret = -1; -+ } -+ } -+ return ret; -+} -+ -+void aac_free_irq(struct aac_dev *dev) -+{ -+ int i; -+ int cpu; -+ -+ cpu = cpumask_first(cpu_online_mask); -+ if (dev->pdev->device == PMC_DEVICE_S6 || -+ dev->pdev->device == PMC_DEVICE_S7 || -+ dev->pdev->device == PMC_DEVICE_S8 || -+ dev->pdev->device == PMC_DEVICE_S9) { -+ if (dev->max_msix > 1) { -+ for (i = 0; i < dev->max_msix; i++) { -+ if (irq_set_affinity_hint( -+ dev->msixentry[i].vector, NULL)) { -+ printk(KERN_ERR "%s%d: Failed to reset IRQ affinity for cpu %d\n", -+ dev->name, dev->id, cpu); -+ } -+ cpu = cpumask_next(cpu, cpu_online_mask); -+ free_irq(dev->msixentry[i].vector, -+ &(dev->aac_msix[i])); -+ } -+ } else { -+ free_irq(dev->pdev->irq, &(dev->aac_msix[0])); -+ } -+ } else { -+ free_irq(dev->pdev->irq, dev); -+ } -+ if (dev->msi) -+ pci_disable_msi(dev->pdev); -+ else if (dev->max_msix > 1) -+ pci_disable_msix(dev->pdev); -+} -diff --git a/drivers/scsi/aacraid/src.c b/drivers/scsi/aacraid/src.c -index 1409a0b945ea..2aa34ea8ceb1 100644 ---- a/drivers/scsi/aacraid/src.c -+++ b/drivers/scsi/aacraid/src.c -@@ -798,9 +798,7 @@ int aac_srcv_init(struct aac_dev *dev) - unsigned long status; - int restart = 0; - int instance = dev->id; -- int i, j; - const char *name = dev->name; -- int cpu; - - dev->a_ops.adapter_ioremap = aac_srcv_ioremap; - dev->a_ops.adapter_comm = aac_src_select_comm; -@@ -918,48 +916,10 @@ int aac_srcv_init(struct aac_dev *dev) - goto error_iounmap; - if (dev->msi_enabled) - aac_src_access_devreg(dev, AAC_ENABLE_MSIX); -- if (!dev->sync_mode && dev->msi_enabled && dev->max_msix > 1) { -- cpu = cpumask_first(cpu_online_mask); -- for (i = 0; i < dev->max_msix; i++) { -- dev->aac_msix[i].vector_no = i; -- dev->aac_msix[i].dev = dev; -- -- if (request_irq(dev->msixentry[i].vector, -- dev->a_ops.adapter_intr, -- 0, -- "aacraid", -- &(dev->aac_msix[i]))) { -- printk(KERN_ERR "%s%d: Failed to register IRQ for vector %d.\n", -- name, instance, i); -- for (j = 0 ; j < i ; j++) -- free_irq(dev->msixentry[j].vector, -- &(dev->aac_msix[j])); -- pci_disable_msix(dev->pdev); -- goto error_iounmap; -- } -- if (irq_set_affinity_hint( -- dev->msixentry[i].vector, -- get_cpu_mask(cpu))) { -- printk(KERN_ERR "%s%d: Failed to set IRQ affinity for cpu %d\n", -- name, instance, cpu); -- } -- cpu = cpumask_next(cpu, cpu_online_mask); -- } -- } else { -- dev->aac_msix[0].vector_no = 0; -- dev->aac_msix[0].dev = dev; -- -- if (request_irq(dev->pdev->irq, dev->a_ops.adapter_intr, -- IRQF_SHARED, -- "aacraid", -- &(dev->aac_msix[0])) < 0) { -- if (dev->msi) -- pci_disable_msi(dev->pdev); -- printk(KERN_ERR "%s%d: Interrupt unavailable.\n", -- name, instance); -- goto error_iounmap; -- } -- } -+ -+ if (aac_acquire_irq(dev)) -+ goto error_iounmap; -+ - dev->dbg_base = dev->base_start; - dev->dbg_base_mapped = dev->base; - dev->dbg_size = dev->base_size; --- -2.6.2 - diff --git a/openpower/linux/linux-0013-aacraid-Use-pci_enable_msix_range.patch b/openpower/linux/linux-0013-aacraid-Use-pci_enable_msix_range.patch deleted file mode 100644 index 69621fa4..00000000 --- a/openpower/linux/linux-0013-aacraid-Use-pci_enable_msix_range.patch +++ /dev/null @@ -1,74 +0,0 @@ -From 9db12f2808069bb0d284cf3745d3aad2727d8efa Mon Sep 17 00:00:00 2001 -From: Mahesh Rajashekhara <Mahesh.Rajashekhara@pmcs.com> -Date: Fri, 28 Aug 2015 06:38:40 -0400 -Subject: [PATCH 13/15] aacraid: Use pci_enable_msix_range() - -As pci_enable_msix() deprecated, replaced with pci_enable_msix_range() - -Reviewed-by: Tomas Henzl <thenzl@redhat.com> -Reviewed-by: Murthy Bhat <Murthy.Bhat@pmcs.com> -Reviewed-by: Karthikeya Sunkesula <Karthikeya.Sunkesula@pmcs.com> -Signed-off-by: Mahesh Rajashekhara <Mahesh.Rajashekhara@pmcs.com> -Signed-off-by: Joel Stanley <joel@jms.id.au> ---- - drivers/scsi/aacraid/aacraid.h | 2 +- - drivers/scsi/aacraid/comminit.c | 20 ++++++-------------- - 2 files changed, 7 insertions(+), 15 deletions(-) - -diff --git a/drivers/scsi/aacraid/aacraid.h b/drivers/scsi/aacraid/aacraid.h -index 7b95227af478..2de5ebcce138 100644 ---- a/drivers/scsi/aacraid/aacraid.h -+++ b/drivers/scsi/aacraid/aacraid.h -@@ -12,7 +12,7 @@ - * D E F I N E S - *----------------------------------------------------------------------------*/ - --#define AAC_MAX_MSIX 8 /* vectors */ -+#define AAC_MAX_MSIX 32 /* vectors */ - #define AAC_PCI_MSI_ENABLE 0x8000 - - enum { -diff --git a/drivers/scsi/aacraid/comminit.c b/drivers/scsi/aacraid/comminit.c -index b4b6088fcb33..0e954e37f0b5 100644 ---- a/drivers/scsi/aacraid/comminit.c -+++ b/drivers/scsi/aacraid/comminit.c -@@ -338,7 +338,7 @@ static int aac_comm_init(struct aac_dev * dev) - - void aac_define_int_mode(struct aac_dev *dev) - { -- int i, msi_count; -+ int i, msi_count, min_msix; - - msi_count = i = 0; - /* max. vectors from GET_COMM_PREFERRED_SETTINGS */ -@@ -366,22 +366,14 @@ void aac_define_int_mode(struct aac_dev *dev) - - if (msi_count > 1 && - pci_find_capability(dev->pdev, PCI_CAP_ID_MSIX)) { -- i = pci_enable_msix(dev->pdev, -+ min_msix = 2; -+ i = pci_enable_msix_range(dev->pdev, - dev->msixentry, -+ min_msix, - msi_count); -- /* Check how many MSIX vectors are allocated */ -- if (i >= 0) { -+ if (i > 0) { - dev->msi_enabled = 1; -- if (i) { -- msi_count = i; -- if (pci_enable_msix(dev->pdev, -- dev->msixentry, -- msi_count)) { -- dev->msi_enabled = 0; -- printk(KERN_ERR "%s%d: MSIX not supported!! Will try MSI 0x%x.\n", -- dev->name, dev->id, i); -- } -- } -+ msi_count = i; - } else { - dev->msi_enabled = 0; - printk(KERN_ERR "%s%d: MSIX not supported!! Will try MSI 0x%x.\n", --- -2.6.2 - diff --git a/openpower/linux/linux-0014-aacraid-Update-driver-version.patch b/openpower/linux/linux-0014-aacraid-Update-driver-version.patch deleted file mode 100644 index 5eeed92b..00000000 --- a/openpower/linux/linux-0014-aacraid-Update-driver-version.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 4ce229595057fb71ff775bd9b84a9f72848275b3 Mon Sep 17 00:00:00 2001 -From: Mahesh Rajashekhara <Mahesh.Rajashekhara@pmcs.com> -Date: Fri, 28 Aug 2015 06:38:41 -0400 -Subject: [PATCH 14/15] aacraid: Update driver version - -Reviewed-by: Tomas Henzl <thenzl@redhat.com> -Reviewed-by: Murthy Bhat <Murthy.Bhat@pmcs.com> -Reviewed-by: Karthikeya Sunkesula <Karthikeya.Sunkesula@pmcs.com> -Signed-off-by: Mahesh Rajashekhara <Mahesh.Rajashekhara@pmcs.com> -Signed-off-by: Joel Stanley <joel@jms.id.au> ---- - drivers/scsi/aacraid/aacraid.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/scsi/aacraid/aacraid.h b/drivers/scsi/aacraid/aacraid.h -index 2de5ebcce138..074878b55a0b 100644 ---- a/drivers/scsi/aacraid/aacraid.h -+++ b/drivers/scsi/aacraid/aacraid.h -@@ -62,7 +62,7 @@ enum { - #define PMC_GLOBAL_INT_BIT0 0x00000001 - - #ifndef AAC_DRIVER_BUILD --# define AAC_DRIVER_BUILD 40709 -+# define AAC_DRIVER_BUILD 41010 - # define AAC_DRIVER_BRANCH "-ms" - #endif - #define MAXIMUM_NUM_CONTAINERS 32 --- -2.6.2 - |