linux: Release 4.4.15-openpower1

New patches:
 - powerpc/boot: Add OPAL console to epapr wrappers
 - net/mlx5: Add pci shutdown callback, for kexec support
 - tty/hvc: Use IRQF_SHARED for OPAL hvc consoles
 - tty/hvc: Use opal irqchip interface if available

Reworked due to upstream fixes:
 - xhci: do not halt the secondary HCD

Superseded by upstream fixes:
 - Revert "usb: xhci: stop everything on the first call to xhci_stop"
 - xhci: do not halt the secondary HCD

Signed-off-by: Joel Stanley <joel@jms.id.au>
diff --git a/openpower/configs/barreleye_defconfig b/openpower/configs/barreleye_defconfig
index 57a98c8..580545e 100644
--- a/openpower/configs/barreleye_defconfig
+++ b/openpower/configs/barreleye_defconfig
@@ -42,7 +42,7 @@
 BR2_ROOTFS_POST_BUILD_SCRIPT="../openpower/scripts/fixup-target-var"
 BR2_LINUX_KERNEL=y
 BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.4.14"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.4.15"
 BR2_KERNEL_HEADERS_4_4=y
 BR2_BINUTILS_VERSION_2_26_X=y
 BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL)/linux"
diff --git a/openpower/configs/firestone_defconfig b/openpower/configs/firestone_defconfig
index 001000d..8f9bf97 100644
--- a/openpower/configs/firestone_defconfig
+++ b/openpower/configs/firestone_defconfig
@@ -42,7 +42,7 @@
 BR2_ROOTFS_POST_BUILD_SCRIPT="../openpower/scripts/fixup-target-var"
 BR2_LINUX_KERNEL=y
 BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.4.14"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.4.15"
 BR2_KERNEL_HEADERS_4_4=y
 BR2_BINUTILS_VERSION_2_26_X=y
 BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL)/linux"
diff --git a/openpower/configs/garrison_defconfig b/openpower/configs/garrison_defconfig
index 25980f7..4a9f46a 100644
--- a/openpower/configs/garrison_defconfig
+++ b/openpower/configs/garrison_defconfig
@@ -46,7 +46,7 @@
 BR2_ROOTFS_POST_BUILD_SCRIPT="../openpower/scripts/fixup-target-var"
 BR2_LINUX_KERNEL=y
 BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.4.14"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.4.15"
 BR2_KERNEL_HEADERS_4_4=y
 BR2_BINUTILS_VERSION_2_26_X=y
 BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL)/linux"
diff --git a/openpower/configs/habanero_defconfig b/openpower/configs/habanero_defconfig
index 7c302f0..17dbed1 100644
--- a/openpower/configs/habanero_defconfig
+++ b/openpower/configs/habanero_defconfig
@@ -42,7 +42,7 @@
 BR2_ROOTFS_POST_BUILD_SCRIPT="../openpower/scripts/fixup-target-var"
 BR2_LINUX_KERNEL=y
 BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.4.14"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.4.15"
 BR2_KERNEL_HEADERS_4_4=y
 BR2_BINUTILS_VERSION_2_26_X=y
 BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL)/linux"
diff --git a/openpower/configs/openpower_mambo_defconfig b/openpower/configs/openpower_mambo_defconfig
index 96b88de..76cce6a 100644
--- a/openpower/configs/openpower_mambo_defconfig
+++ b/openpower/configs/openpower_mambo_defconfig
@@ -31,7 +31,7 @@
 BR2_ROOTFS_POST_BUILD_SCRIPT="../openpower/scripts/fixup-target-var"
 BR2_LINUX_KERNEL=y
 BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.4.14"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.4.15"
 BR2_KERNEL_HEADERS_4_4=y
 BR2_BINUTILS_VERSION_2_26_X=y
 BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL)/linux"
diff --git a/openpower/configs/palmetto_defconfig b/openpower/configs/palmetto_defconfig
index 546c378..693439b 100644
--- a/openpower/configs/palmetto_defconfig
+++ b/openpower/configs/palmetto_defconfig
@@ -40,7 +40,7 @@
 BR2_ROOTFS_POST_BUILD_SCRIPT="../openpower/scripts/fixup-target-var"
 BR2_LINUX_KERNEL=y
 BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.4.14"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.4.15"
 BR2_KERNEL_HEADERS_4_4=y
 BR2_BINUTILS_VERSION_2_26_X=y
 BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL)/linux"
diff --git a/openpower/linux/linux-0001-xhci-Use-xhci_pci_remove-for-xhci-device-shutdown.patch b/openpower/linux/0001-xhci-Use-xhci_pci_remove-for-xhci-device-shutdown.patch
similarity index 72%
rename from openpower/linux/linux-0001-xhci-Use-xhci_pci_remove-for-xhci-device-shutdown.patch
rename to openpower/linux/0001-xhci-Use-xhci_pci_remove-for-xhci-device-shutdown.patch
index df50449..cda2606 100644
--- a/openpower/linux/linux-0001-xhci-Use-xhci_pci_remove-for-xhci-device-shutdown.patch
+++ b/openpower/linux/0001-xhci-Use-xhci_pci_remove-for-xhci-device-shutdown.patch
@@ -1,7 +1,7 @@
-From 54a36cc9957899eb7ac261c783e80ce93f7bfd64 Mon Sep 17 00:00:00 2001
+From c4c563c6614ddc53c320d1b7e4abbb8d88e65dea 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 1/7] xhci: Use xhci_pci_remove for xhci device shutdown
+Subject: [PATCH 01/10] 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 @@
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
-index ea4fb4b0cd44..186a544e1d1f 100644
+index de644e56aa3b..f398ed390ff8 100644
 --- a/drivers/usb/host/xhci-pci.c
 +++ b/drivers/usb/host/xhci-pci.c
-@@ -441,7 +441,7 @@ static struct pci_driver xhci_pci_driver = {
+@@ -446,7 +446,7 @@ static struct pci_driver xhci_pci_driver = {
  	.remove =	xhci_pci_remove,
  	/* suspend and resume implemented later */
  
diff --git a/openpower/linux/linux-0004-drivers-drm-ast-Switch-SCU-to-VGA-output-on-POST.patch b/openpower/linux/0002-drivers-drm-ast-Switch-SCU-to-VGA-output-on-POST.patch
similarity index 92%
rename from openpower/linux/linux-0004-drivers-drm-ast-Switch-SCU-to-VGA-output-on-POST.patch
rename to openpower/linux/0002-drivers-drm-ast-Switch-SCU-to-VGA-output-on-POST.patch
index df69843..6008ffe 100644
--- a/openpower/linux/linux-0004-drivers-drm-ast-Switch-SCU-to-VGA-output-on-POST.patch
+++ b/openpower/linux/0002-drivers-drm-ast-Switch-SCU-to-VGA-output-on-POST.patch
@@ -1,7 +1,7 @@
-From 96be60fe30d5971486126da3e7b8dfc84f25b8ae Mon Sep 17 00:00:00 2001
+From 634b76812d457f154bc6cba7f58c0f4936f130f9 Mon Sep 17 00:00:00 2001
 From: Jeremy Kerr <jk@ozlabs.org>
 Date: Wed, 2 Mar 2016 11:25:47 +0800
-Subject: [PATCH 4/7] drivers/drm/ast: Switch SCU to VGA output on POST
+Subject: [PATCH 02/10] drivers/drm/ast: Switch SCU to VGA output on POST
 
 On AST BMC platforms, the BMC may be using the VGA device for UART
 mirroring. In this case, we need to switch the DAC output to
diff --git a/openpower/linux/linux-0005-scsi-ignore-errors-from-scsi_dh_add_device.patch b/openpower/linux/0003-scsi-ignore-errors-from-scsi_dh_add_device.patch
similarity index 90%
rename from openpower/linux/linux-0005-scsi-ignore-errors-from-scsi_dh_add_device.patch
rename to openpower/linux/0003-scsi-ignore-errors-from-scsi_dh_add_device.patch
index 0bff5f7..9828241 100644
--- a/openpower/linux/linux-0005-scsi-ignore-errors-from-scsi_dh_add_device.patch
+++ b/openpower/linux/0003-scsi-ignore-errors-from-scsi_dh_add_device.patch
@@ -1,7 +1,7 @@
-From 2ed71195852b81ad37938dfc4e3d7750d7046561 Mon Sep 17 00:00:00 2001
+From b8daa0f11a65954d918cbbd9af96a03e29202bc9 Mon Sep 17 00:00:00 2001
 From: Hannes Reinecke <hare@suse.de>
 Date: Tue, 1 Mar 2016 13:57:59 +1100
-Subject: [PATCH 5/7] scsi: ignore errors from scsi_dh_add_device()
+Subject: [PATCH 03/10] scsi: ignore errors from scsi_dh_add_device()
 
 device handler initialisation might fail due to a number of
 reasons. But as device_handlers are optional this shouldn't
diff --git a/openpower/linux/linux-0006-net-mlx4_core-Set-UAR-page-size-to-4KB-regardless-of.patch b/openpower/linux/0004-net-mlx4_core-Set-UAR-page-size-to-4KB-regardless-of.patch
similarity index 98%
rename from openpower/linux/linux-0006-net-mlx4_core-Set-UAR-page-size-to-4KB-regardless-of.patch
rename to openpower/linux/0004-net-mlx4_core-Set-UAR-page-size-to-4KB-regardless-of.patch
index 3e55a7c..838637b 100644
--- a/openpower/linux/linux-0006-net-mlx4_core-Set-UAR-page-size-to-4KB-regardless-of.patch
+++ b/openpower/linux/0004-net-mlx4_core-Set-UAR-page-size-to-4KB-regardless-of.patch
@@ -1,7 +1,7 @@
-From 41418e470987141e3ee03d0cf862284a25ba8217 Mon Sep 17 00:00:00 2001
+From 3b638a338635a0d073c53f84e10a900798e88079 Mon Sep 17 00:00:00 2001
 From: Huy Nguyen <huyn@mellanox.com>
 Date: Wed, 17 Feb 2016 17:24:26 +0200
-Subject: [PATCH 6/7] net/mlx4_core: Set UAR page size to 4KB regardless of
+Subject: [PATCH 04/10] net/mlx4_core: Set UAR page size to 4KB regardless of
  system page size
 
 problem description:
diff --git a/openpower/linux/0005-xhci-do-not-halt-the-secondary-HCD.patch b/openpower/linux/0005-xhci-do-not-halt-the-secondary-HCD.patch
new file mode 100644
index 0000000..10c74f2
--- /dev/null
+++ b/openpower/linux/0005-xhci-do-not-halt-the-secondary-HCD.patch
@@ -0,0 +1,56 @@
+From 2216c4ebe95d9ee82536b0b758478dec59ffb702 Mon Sep 17 00:00:00 2001
+From: Joel Stanley <joel@jms.id.au>
+Date: Tue, 19 Jul 2016 22:43:26 +0930
+Subject: [PATCH 05/10] 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.
+
+Sined-off-by: Joel Stanley <joel@jms.id.au>
+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 6fe0174da226..8f48dd84ddd2 100644
+--- a/drivers/usb/host/xhci.c
++++ b/drivers/usb/host/xhci.c
+@@ -682,6 +682,21 @@ void xhci_stop(struct usb_hcd *hcd)
+ 
+ 	mutex_lock(&xhci->mutex);
+ 
++	/*
++	 * 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.
++	 */
++	if (!usb_hcd_is_primary_hcd(hcd)) {
++		/* 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;
++		mutex_unlock(&xhci->mutex);
++		return;
++	}
++
+ 	if (!(xhci->xhc_state & XHCI_STATE_HALTED)) {
+ 		spin_lock_irq(&xhci->lock);
+ 
+@@ -693,11 +708,6 @@ void xhci_stop(struct usb_hcd *hcd)
+ 		spin_unlock_irq(&xhci->lock);
+ 	}
+ 
+-	if (!usb_hcd_is_primary_hcd(hcd)) {
+-		mutex_unlock(&xhci->mutex);
+-		return;
+-	}
+-
+ 	xhci_cleanup_msix(xhci);
+ 
+ 	/* Deleting Compliance Mode Recovery Timer */
+-- 
+2.8.1
+
diff --git a/openpower/linux/0006-net-mlx5-Add-pci-shutdown-callback.patch b/openpower/linux/0006-net-mlx5-Add-pci-shutdown-callback.patch
new file mode 100644
index 0000000..9fc3fb2
--- /dev/null
+++ b/openpower/linux/0006-net-mlx5-Add-pci-shutdown-callback.patch
@@ -0,0 +1,161 @@
+From 89d994ee9504a2a7abbfe3b57022b5e2a2ed4c85 Mon Sep 17 00:00:00 2001
+From: Carol L Soto <clsoto@linux.vnet.ibm.com>
+Date: Tue, 12 Jul 2016 17:04:07 -0500
+Subject: [PATCH 06/10] net/mlx5: Add pci shutdown callback
+
+Backport of commit 5fc7197d3a256 ("net/mlx5: Add pci shutdown callback")
+so we can use for the OpenPower kernel.
+
+This patch introduces kexec support for mlx5.
+When switching kernels, kexec() calls shutdown, which unloads
+the driver and cleans its resources.
+
+In addition, remove unregister netdev from shutdown flow. This will
+allow a clean shutdown, even if some netdev clients did not release their
+reference from this netdev. Releasing The HW resources only is enough as
+the kernel is shutting down
+
+Signed-off-by: Majd Dibbiny <majd@mellanox.com>
+Signed-off-by: Tariq Toukan <tariqt@mellanox.com>
+Signed-off-by: Haggai Abramovsky <hagaya@mellanox.com>
+Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Carol L Soto <clsoto@linux.vnet.ibm.com>
+(cherry picked from commit 5fc7197d3a256d9c5de3134870304b24892a4908)
+Signed-off-by: Joel Stanley <joel@jms.id.au>
+---
+ drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 15 +++++++++++++--
+ drivers/net/ethernet/mellanox/mlx5/core/main.c    | 23 +++++++++++++++++++----
+ include/linux/mlx5/driver.h                       |  7 ++++---
+ 3 files changed, 36 insertions(+), 9 deletions(-)
+
+diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
+index cbd17e25beeb..887a54c8e98b 100644
+--- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
++++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
+@@ -2241,7 +2241,16 @@ static void mlx5e_destroy_netdev(struct mlx5_core_dev *mdev, void *vpriv)
+ 	schedule_work(&priv->set_rx_mode_work);
+ 	mlx5e_disable_async_events(priv);
+ 	flush_scheduled_work();
+-	unregister_netdev(netdev);
++	if (test_bit(MLX5_INTERFACE_STATE_SHUTDOWN, &mdev->intf_state)) {
++		netif_device_detach(netdev);
++		mutex_lock(&priv->state_lock);
++		if (test_bit(MLX5E_STATE_OPENED, &priv->state))
++			mlx5e_close_locked(netdev);
++		mutex_unlock(&priv->state_lock);
++	} else {
++		unregister_netdev(netdev);
++	}
++
+ 	mlx5e_destroy_flow_tables(priv);
+ 	mlx5e_destroy_tirs(priv);
+ 	mlx5e_destroy_rqt(priv, MLX5E_SINGLE_RQ_RQT);
+@@ -2252,7 +2261,9 @@ static void mlx5e_destroy_netdev(struct mlx5_core_dev *mdev, void *vpriv)
+ 	mlx5_dealloc_transport_domain(priv->mdev, priv->tdn);
+ 	mlx5_core_dealloc_pd(priv->mdev, priv->pdn);
+ 	mlx5_unmap_free_uar(priv->mdev, &priv->cq_uar);
+-	free_netdev(netdev);
++
++	if (!test_bit(MLX5_INTERFACE_STATE_SHUTDOWN, &mdev->intf_state))
++		free_netdev(netdev);
+ }
+ 
+ static void *mlx5e_get_netdev(void *vpriv)
+diff --git a/drivers/net/ethernet/mellanox/mlx5/core/main.c b/drivers/net/ethernet/mellanox/mlx5/core/main.c
+index 6cf6d93d8831..8a371bdb823e 100644
+--- a/drivers/net/ethernet/mellanox/mlx5/core/main.c
++++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c
+@@ -914,7 +914,7 @@ static int mlx5_load_one(struct mlx5_core_dev *dev, struct mlx5_priv *priv)
+ 	int err;
+ 
+ 	mutex_lock(&dev->intf_state_mutex);
+-	if (dev->interface_state == MLX5_INTERFACE_STATE_UP) {
++	if (test_bit(MLX5_INTERFACE_STATE_UP, &dev->intf_state)) {
+ 		dev_warn(&dev->pdev->dev, "%s: interface is up, NOP\n",
+ 			 __func__);
+ 		goto out;
+@@ -1063,7 +1063,8 @@ static int mlx5_load_one(struct mlx5_core_dev *dev, struct mlx5_priv *priv)
+ 	if (err)
+ 		pr_info("failed request module on %s\n", MLX5_IB_MOD);
+ 
+-	dev->interface_state = MLX5_INTERFACE_STATE_UP;
++	clear_bit(MLX5_INTERFACE_STATE_DOWN, &dev->intf_state);
++	set_bit(MLX5_INTERFACE_STATE_UP, &dev->intf_state);
+ out:
+ 	mutex_unlock(&dev->intf_state_mutex);
+ 
+@@ -1125,7 +1126,7 @@ static int mlx5_unload_one(struct mlx5_core_dev *dev, struct mlx5_priv *priv)
+ 	int err = 0;
+ 
+ 	mutex_lock(&dev->intf_state_mutex);
+-	if (dev->interface_state == MLX5_INTERFACE_STATE_DOWN) {
++	if (test_bit(MLX5_INTERFACE_STATE_DOWN, &dev->intf_state)) {
+ 		dev_warn(&dev->pdev->dev, "%s: interface is down, NOP\n",
+ 			 __func__);
+ 		goto out;
+@@ -1155,7 +1156,8 @@ static int mlx5_unload_one(struct mlx5_core_dev *dev, struct mlx5_priv *priv)
+ 	mlx5_cmd_cleanup(dev);
+ 
+ out:
+-	dev->interface_state = MLX5_INTERFACE_STATE_DOWN;
++	clear_bit(MLX5_INTERFACE_STATE_UP, &dev->intf_state);
++	set_bit(MLX5_INTERFACE_STATE_DOWN, &dev->intf_state);
+ 	mutex_unlock(&dev->intf_state_mutex);
+ 	return err;
+ }
+@@ -1365,6 +1367,18 @@ static const struct pci_error_handlers mlx5_err_handler = {
+ 	.resume		= mlx5_pci_resume
+ };
+ 
++static void shutdown(struct pci_dev *pdev)
++{
++	struct mlx5_core_dev *dev  = pci_get_drvdata(pdev);
++	struct mlx5_priv *priv = &dev->priv;
++
++	dev_info(&pdev->dev, "Shutdown was called\n");
++	/* Notify mlx5 clients that the kernel is being shut down */
++	set_bit(MLX5_INTERFACE_STATE_SHUTDOWN, &dev->intf_state);
++	mlx5_unload_one(dev, priv);
++	mlx5_pci_disable_device(dev);
++}
++
+ static const struct pci_device_id mlx5_core_pci_table[] = {
+ 	{ PCI_VDEVICE(MELLANOX, 0x1011) }, /* Connect-IB */
+ 	{ PCI_VDEVICE(MELLANOX, 0x1012) }, /* Connect-IB VF */
+@@ -1382,6 +1396,7 @@ static struct pci_driver mlx5_core_driver = {
+ 	.id_table       = mlx5_core_pci_table,
+ 	.probe          = init_one,
+ 	.remove         = remove_one,
++	.shutdown       = shutdown,
+ 	.err_handler	= &mlx5_err_handler
+ };
+ 
+diff --git a/include/linux/mlx5/driver.h b/include/linux/mlx5/driver.h
+index 412aa988c6ad..dc26d9942120 100644
+--- a/include/linux/mlx5/driver.h
++++ b/include/linux/mlx5/driver.h
+@@ -493,8 +493,9 @@ enum mlx5_device_state {
+ };
+ 
+ enum mlx5_interface_state {
+-	MLX5_INTERFACE_STATE_DOWN,
+-	MLX5_INTERFACE_STATE_UP,
++	MLX5_INTERFACE_STATE_DOWN = BIT(0),
++	MLX5_INTERFACE_STATE_UP = BIT(1),
++	MLX5_INTERFACE_STATE_SHUTDOWN = BIT(2),
+ };
+ 
+ enum mlx5_pci_status {
+@@ -518,7 +519,7 @@ struct mlx5_core_dev {
+ 	enum mlx5_device_state	state;
+ 	/* sync interface state */
+ 	struct mutex		intf_state_mutex;
+-	enum mlx5_interface_state interface_state;
++	unsigned long		intf_state;
+ 	void			(*event) (struct mlx5_core_dev *dev,
+ 					  enum mlx5_dev_event event,
+ 					  unsigned long param);
+-- 
+2.8.1
+
diff --git a/openpower/linux/0007-powerpc-boot-Add-OPAL-console-to-epapr-wrappers.patch b/openpower/linux/0007-powerpc-boot-Add-OPAL-console-to-epapr-wrappers.patch
new file mode 100644
index 0000000..d13a84b
--- /dev/null
+++ b/openpower/linux/0007-powerpc-boot-Add-OPAL-console-to-epapr-wrappers.patch
@@ -0,0 +1,286 @@
+From 8bd7120ec00b9f7bcf233a92972e50b4c312fe7a Mon Sep 17 00:00:00 2001
+From: Oliver O'Halloran <oohall@gmail.com>
+Date: Fri, 24 Jun 2016 17:28:43 +1000
+Subject: [PATCH 07/10] powerpc/boot: Add OPAL console to epapr wrappers
+
+This patch adds an OPAL console backend to the powerpc boot wrapper so
+that decompression failures inside the wrapper can be reported to the
+user. This is important since it typically indicates data corruption in
+the firmware and other nasty things.
+
+Currently this only works when building a little endian kernel. When
+compiling a 64 bit BE kernel the wrapper is always build 32 bit to be
+compatible with some 32 bit firmwares. BE support will be added at a
+later date. Another limitation of this is that only the "raw" type of
+OPAL console is supported, however machines that provide a hvsi console
+also provide a raw console so this is not an issue in practice.
+
+Actually-written-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
+Signed-off-by: Oliver O'Halloran <oohall@gmail.com>
+Cc: Stewart Smith <stewart@linux.vnet.ibm.com>
+Signed-off-by: Joel Stanley <joel@jms.id.au>
+---
+ arch/powerpc/boot/Makefile     |  4 +-
+ arch/powerpc/boot/opal-calls.S | 58 +++++++++++++++++++++++++
+ arch/powerpc/boot/opal.c       | 97 ++++++++++++++++++++++++++++++++++++++++++
+ arch/powerpc/boot/ops.h        |  1 +
+ arch/powerpc/boot/ppc_asm.h    |  4 ++
+ arch/powerpc/boot/serial.c     |  2 +
+ arch/powerpc/boot/types.h      | 10 +++++
+ 7 files changed, 174 insertions(+), 2 deletions(-)
+ create mode 100644 arch/powerpc/boot/opal-calls.S
+ create mode 100644 arch/powerpc/boot/opal.c
+
+diff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile
+index 99e4487248ff..321a603f6ae3 100644
+--- a/arch/powerpc/boot/Makefile
++++ b/arch/powerpc/boot/Makefile
+@@ -70,7 +70,7 @@ $(addprefix $(obj)/,$(zlib) cuboot-c2k.o gunzip_util.o main.o): \
+ libfdt       := fdt.c fdt_ro.c fdt_wip.c fdt_sw.c fdt_rw.c fdt_strerror.c
+ libfdtheader := fdt.h libfdt.h libfdt_internal.h
+ 
+-$(addprefix $(obj)/,$(libfdt) libfdt-wrapper.o simpleboot.o epapr.o): \
++$(addprefix $(obj)/,$(libfdt) libfdt-wrapper.o simpleboot.o epapr.o opal.o): \
+ 	$(addprefix $(obj)/,$(libfdtheader))
+ 
+ src-wlib-y := string.S crt0.S crtsavres.S stdio.c main.c \
+@@ -78,7 +78,7 @@ src-wlib-y := string.S crt0.S crtsavres.S stdio.c main.c \
+ 		ns16550.c serial.c simple_alloc.c div64.S util.S \
+ 		gunzip_util.c elf_util.c $(zlib) devtree.c stdlib.c \
+ 		oflib.c ofconsole.c cuboot.c mpsc.c cpm-serial.c \
+-		uartlite.c mpc52xx-psc.c
++		uartlite.c mpc52xx-psc.c opal.c opal-calls.S
+ src-wlib-$(CONFIG_40x) += 4xx.c planetcore.c
+ src-wlib-$(CONFIG_44x) += 4xx.c ebony.c bamboo.c
+ src-wlib-$(CONFIG_8xx) += mpc8xx.c planetcore.c fsl-soc.c
+diff --git a/arch/powerpc/boot/opal-calls.S b/arch/powerpc/boot/opal-calls.S
+new file mode 100644
+index 000000000000..ff2f1b97bc53
+--- /dev/null
++++ b/arch/powerpc/boot/opal-calls.S
+@@ -0,0 +1,58 @@
++/*
++ * Copyright (c) 2016 IBM Corporation.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version
++ * 2 of the License, or (at your option) any later version.
++ */
++
++#include "ppc_asm.h"
++#include "../include/asm/opal-api.h"
++
++	.text
++
++#define OPAL_CALL(name, token)				\
++	.globl name;					\
++name:							\
++	li	r0, token;				\
++	b	opal_call;
++
++opal_call:
++	mflr	r11
++	std	r11,16(r1)
++	mfcr	r12
++	stw	r12,8(r1)
++	mr	r13,r2
++
++	/* Set opal return address */
++	ld	r11,opal_return@got(r2)
++	mtlr	r11
++	mfmsr	r12
++
++	/* switch to BE when we enter OPAL */
++	li	r11,MSR_LE
++	andc	r12,r12,r11
++	mtspr	SPRN_HSRR1,r12
++
++	/* load the opal call entry point and base */
++	ld	r11,opal@got(r2)
++	ld	r12,8(r11)
++	ld	r2,0(r11)
++	mtspr	SPRN_HSRR0,r12
++	hrfid
++
++opal_return:
++	FIXUP_ENDIAN
++	mr	r2,r13;
++	lwz	r11,8(r1);
++	ld	r12,16(r1)
++	mtcr	r11;
++	mtlr	r12
++	blr
++
++OPAL_CALL(opal_console_write,			OPAL_CONSOLE_WRITE);
++OPAL_CALL(opal_console_read,			OPAL_CONSOLE_READ);
++OPAL_CALL(opal_console_write_buffer_space,	OPAL_CONSOLE_WRITE_BUFFER_SPACE);
++OPAL_CALL(opal_poll_events,			OPAL_POLL_EVENTS);
++OPAL_CALL(opal_console_flush,			OPAL_CONSOLE_FLUSH);
+diff --git a/arch/powerpc/boot/opal.c b/arch/powerpc/boot/opal.c
+new file mode 100644
+index 000000000000..3a2ce1e1f048
+--- /dev/null
++++ b/arch/powerpc/boot/opal.c
+@@ -0,0 +1,97 @@
++/*
++ * Copyright (c) 2016 IBM Corporation.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version
++ * 2 of the License, or (at your option) any later version.
++ */
++
++#include "ops.h"
++#include "stdio.h"
++#include "io.h"
++#include <libfdt.h>
++#include "../include/asm/opal-api.h"
++
++/* Global OPAL struct used by opal-call.S */
++struct opal {
++	u64 base;
++	u64 entry;
++} opal;
++
++static u32 opal_con_id;
++
++int64_t opal_console_write(int64_t term_number, u64 *length, const u8 *buffer);
++int64_t opal_console_read(int64_t term_number, uint64_t *length, u8 *buffer);
++int64_t opal_console_write_buffer_space(uint64_t term_number, uint64_t *length);
++int64_t opal_console_flush(uint64_t term_number);
++int64_t opal_poll_events(uint64_t *outstanding_event_mask);
++
++static int opal_con_open(void)
++{
++	return 0;
++}
++
++static void opal_con_putc(unsigned char c)
++{
++	int64_t rc;
++	uint64_t olen, len;
++
++	do {
++		rc = opal_console_write_buffer_space(opal_con_id, &olen);
++		len = be64_to_cpu(olen);
++		if (rc)
++			return;
++		opal_poll_events(NULL);
++	} while (len < 1);
++
++
++	olen = cpu_to_be64(1);
++	opal_console_write(opal_con_id, &olen, &c);
++}
++
++static void opal_con_close(void)
++{
++	opal_console_flush(opal_con_id);
++}
++
++static void opal_init(void)
++{
++	void *opal_node;
++
++	opal_node = finddevice("/ibm,opal");
++	if (!opal_node)
++		return;
++	if (getprop(opal_node, "opal-base-address", &opal.base, sizeof(u64)) < 0)
++		return;
++	opal.base = be64_to_cpu(opal.base);
++	if (getprop(opal_node, "opal-entry-address", &opal.entry, sizeof(u64)) < 0)
++		return;
++	opal.entry = be64_to_cpu(opal.entry);
++}
++
++#ifdef __powerpc64__
++int opal_console_init(void *devp, struct serial_console_data *scdp)
++{
++	opal_init();
++
++	if (devp) {
++		int n = getprop(devp, "reg", &opal_con_id, sizeof(u32));
++		if (n != sizeof(u32))
++			return -1;
++		opal_con_id = be32_to_cpu(opal_con_id);
++	} else
++		opal_con_id = 0;
++
++	scdp->open = opal_con_open;
++	scdp->putc = opal_con_putc;
++	scdp->close = opal_con_close;
++
++	return 0;
++}
++#else
++int opal_console_init(void *devp, struct serial_console_data *scdp)
++{
++	return -1;
++}
++#endif
+diff --git a/arch/powerpc/boot/ops.h b/arch/powerpc/boot/ops.h
+index 5e75e1c5518e..e19b64ef977a 100644
+--- a/arch/powerpc/boot/ops.h
++++ b/arch/powerpc/boot/ops.h
+@@ -89,6 +89,7 @@ int mpsc_console_init(void *devp, struct serial_console_data *scdp);
+ int cpm_console_init(void *devp, struct serial_console_data *scdp);
+ int mpc5200_psc_console_init(void *devp, struct serial_console_data *scdp);
+ int uartlite_console_init(void *devp, struct serial_console_data *scdp);
++int opal_console_init(void *devp, struct serial_console_data *scdp);
+ void *simple_alloc_init(char *base, unsigned long heap_size,
+ 			unsigned long granularity, unsigned long max_allocs);
+ extern void flush_cache(void *, unsigned long);
+diff --git a/arch/powerpc/boot/ppc_asm.h b/arch/powerpc/boot/ppc_asm.h
+index 35ea60c1f070..b03373d8b386 100644
+--- a/arch/powerpc/boot/ppc_asm.h
++++ b/arch/powerpc/boot/ppc_asm.h
+@@ -61,6 +61,10 @@
+ 
+ #define SPRN_TBRL	268
+ #define SPRN_TBRU	269
++#define SPRN_HSRR0	0x13A	/* Hypervisor Save/Restore 0 */
++#define SPRN_HSRR1	0x13B	/* Hypervisor Save/Restore 1 */
++
++#define MSR_LE		0x0000000000000001
+ 
+ #define FIXUP_ENDIAN						   \
+ 	tdi   0, 0, 0x48; /* Reverse endian of b . + 8		*/ \
+diff --git a/arch/powerpc/boot/serial.c b/arch/powerpc/boot/serial.c
+index 167ee9433de6..e04c1e4063ae 100644
+--- a/arch/powerpc/boot/serial.c
++++ b/arch/powerpc/boot/serial.c
+@@ -132,6 +132,8 @@ int serial_console_init(void)
+ 	else if (dt_is_compatible(devp, "xlnx,opb-uartlite-1.00.b") ||
+ 		 dt_is_compatible(devp, "xlnx,xps-uartlite-1.00.a"))
+ 		rc = uartlite_console_init(devp, &serial_cd);
++	else if (dt_is_compatible(devp, "ibm,opal-console-raw"))
++		rc = opal_console_init(devp, &serial_cd);
+ 
+ 	/* Add other serial console driver calls here */
+ 
+diff --git a/arch/powerpc/boot/types.h b/arch/powerpc/boot/types.h
+index 31393d17a9c1..85565a89bcc2 100644
+--- a/arch/powerpc/boot/types.h
++++ b/arch/powerpc/boot/types.h
+@@ -12,6 +12,16 @@ typedef short			s16;
+ typedef int			s32;
+ typedef long long		s64;
+ 
++/* required for opal-api.h */
++typedef u8  uint8_t;
++typedef u16 uint16_t;
++typedef u32 uint32_t;
++typedef u64 uint64_t;
++typedef s8  int8_t;
++typedef s16 int16_t;
++typedef s32 int32_t;
++typedef s64 int64_t;
++
+ #define min(x,y) ({ \
+ 	typeof(x) _x = (x);	\
+ 	typeof(y) _y = (y);	\
+-- 
+2.8.1
+
diff --git a/openpower/linux/0008-tty-hvc-Use-opal-irqchip-interface-if-available.patch b/openpower/linux/0008-tty-hvc-Use-opal-irqchip-interface-if-available.patch
new file mode 100644
index 0000000..dde125d
--- /dev/null
+++ b/openpower/linux/0008-tty-hvc-Use-opal-irqchip-interface-if-available.patch
@@ -0,0 +1,38 @@
+From b2126431287488f416104f1b97926ec2e0d8fae6 Mon Sep 17 00:00:00 2001
+From: Samuel Mendoza-Jonas <sam@mendozajonas.com>
+Date: Wed, 13 Jul 2016 11:15:42 +1000
+Subject: [PATCH 08/10] tty/hvc: Use opal irqchip interface if available
+
+Update the hvc driver to use the OPAL irqchip if made available by the
+running firmware. If it is not present, the driver falls back to the
+existing OPAL event number.
+
+Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
+Cc: <stable@vger.kernel.org> # 4.1.x-
+Signed-off-by: Joel Stanley <joel@jms.id.au>
+---
+ drivers/tty/hvc/hvc_opal.c | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/tty/hvc/hvc_opal.c b/drivers/tty/hvc/hvc_opal.c
+index 47b54c6aefd2..276b796b24e4 100644
+--- a/drivers/tty/hvc/hvc_opal.c
++++ b/drivers/tty/hvc/hvc_opal.c
+@@ -214,7 +214,13 @@ static int hvc_opal_probe(struct platform_device *dev)
+ 		dev->dev.of_node->full_name,
+ 		boot ? " (boot console)" : "");
+ 
+-	irq = opal_event_request(ilog2(OPAL_EVENT_CONSOLE_INPUT));
++	irq = irq_of_parse_and_map(dev->dev.of_node, 0);
++	if (!irq) {
++		pr_info("hvc%d: No interrupts property, using OPAL event\n",
++				termno);
++		irq = opal_event_request(ilog2(OPAL_EVENT_CONSOLE_INPUT));
++	}
++
+ 	if (!irq) {
+ 		pr_err("hvc_opal: Unable to map interrupt for device %s\n",
+ 			dev->dev.of_node->full_name);
+-- 
+2.8.1
+
diff --git a/openpower/linux/0009-tty-hvc-Use-IRQF_SHARED-for-OPAL-hvc-consoles.patch b/openpower/linux/0009-tty-hvc-Use-IRQF_SHARED-for-OPAL-hvc-consoles.patch
new file mode 100644
index 0000000..82fabee
--- /dev/null
+++ b/openpower/linux/0009-tty-hvc-Use-IRQF_SHARED-for-OPAL-hvc-consoles.patch
@@ -0,0 +1,88 @@
+From e51e878aac1ea5018c7accac28afa4db8c620489 Mon Sep 17 00:00:00 2001
+From: Samuel Mendoza-Jonas <sam@mendozajonas.com>
+Date: Wed, 13 Jul 2016 11:15:41 +1000
+Subject: [PATCH 09/10] tty/hvc: Use IRQF_SHARED for OPAL hvc consoles
+
+Commit 2def86a7200c
+("hvc: Convert to using interrupts instead of opal events")
+enabled the use of interrupts in the hvc_driver for OPAL platforms.
+However on machines with more than one hvc console, any console after
+the first will fail to register an interrupt handler in
+notifier_add_irq() since all consoles share the same IRQ number but do
+not set the IRQF_SHARED flag:
+
+[   51.179907] genirq: Flags mismatch irq 31. 00000000 (hvc_console) vs.
+00000000 (hvc_console)
+[   51.180010] hvc_open: request_irq failed with rc -16.
+
+This error propagates up to hvc_open() and the console is closed, but
+OPAL will still generate interrupts that are not handled, leading to
+rcu_sched stall warnings.
+
+Set IRQF_SHARED when calling request_irq, allowing additional consoles
+to start properly. This is only set for consoles handled by
+hvc_opal_probe(), leaving other types unaffected.
+
+Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
+Cc: <stable@vger.kernel.org> # 4.1.x-
+Signed-off-by: Joel Stanley <joel@jms.id.au>
+---
+ drivers/tty/hvc/hvc_console.h | 1 +
+ drivers/tty/hvc/hvc_irq.c     | 7 +++++--
+ drivers/tty/hvc/hvc_opal.c    | 3 +++
+ 3 files changed, 9 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/tty/hvc/hvc_console.h b/drivers/tty/hvc/hvc_console.h
+index 913101980827..798c48d0d32c 100644
+--- a/drivers/tty/hvc/hvc_console.h
++++ b/drivers/tty/hvc/hvc_console.h
+@@ -60,6 +60,7 @@ struct hvc_struct {
+ 	struct winsize ws;
+ 	struct work_struct tty_resize;
+ 	struct list_head next;
++	unsigned long flags;
+ };
+ 
+ /* implemented by a low level driver */
+diff --git a/drivers/tty/hvc/hvc_irq.c b/drivers/tty/hvc/hvc_irq.c
+index c9adb0559f61..57d9df7ee1c9 100644
+--- a/drivers/tty/hvc/hvc_irq.c
++++ b/drivers/tty/hvc/hvc_irq.c
+@@ -14,6 +14,9 @@ static irqreturn_t hvc_handle_interrupt(int irq, void *dev_instance)
+ 	/* if hvc_poll request a repoll, then kick the hvcd thread */
+ 	if (hvc_poll(dev_instance))
+ 		hvc_kick();
++	/* We're safe to always return IRQ_HANDLED as the hvcd thread will
++	 * iterate through each hvc_struct
++	 */
+ 	return IRQ_HANDLED;
+ }
+ 
+@@ -28,8 +31,8 @@ int notifier_add_irq(struct hvc_struct *hp, int irq)
+ 		hp->irq_requested = 0;
+ 		return 0;
+ 	}
+-	rc = request_irq(irq, hvc_handle_interrupt, 0,
+-			   "hvc_console", hp);
++	rc = request_irq(irq, hvc_handle_interrupt, hp->flags,
++			"hvc_console", hp);
+ 	if (!rc)
+ 		hp->irq_requested = 1;
+ 	return rc;
+diff --git a/drivers/tty/hvc/hvc_opal.c b/drivers/tty/hvc/hvc_opal.c
+index 276b796b24e4..510799311099 100644
+--- a/drivers/tty/hvc/hvc_opal.c
++++ b/drivers/tty/hvc/hvc_opal.c
+@@ -230,6 +230,9 @@ static int hvc_opal_probe(struct platform_device *dev)
+ 	hp = hvc_alloc(termno, irq, ops, MAX_VIO_PUT_CHARS);
+ 	if (IS_ERR(hp))
+ 		return PTR_ERR(hp);
++
++	/* hvc consoles on powernv may need to share a single irq */
++	hp->flags = IRQF_SHARED;
+ 	dev_set_drvdata(&dev->dev, hp);
+ 
+ 	return 0;
+-- 
+2.8.1
+
diff --git a/openpower/linux/linux-0007-Release-4.4.14-openpower1.patch b/openpower/linux/0010-Release-4.4.15-openpower1.patch
similarity index 70%
rename from openpower/linux/linux-0007-Release-4.4.14-openpower1.patch
rename to openpower/linux/0010-Release-4.4.15-openpower1.patch
index 7656f4b..812f58a 100644
--- a/openpower/linux/linux-0007-Release-4.4.14-openpower1.patch
+++ b/openpower/linux/0010-Release-4.4.15-openpower1.patch
@@ -1,7 +1,7 @@
-From 916185a5a9dab937e0d2e4cea3f7a8f000f9e021 Mon Sep 17 00:00:00 2001
+From 7404d19736cc4c31ab104b3f4755a929dc3da5f1 Mon Sep 17 00:00:00 2001
 From: Joel Stanley <joel@jms.id.au>
 Date: Thu, 14 Apr 2016 21:40:26 +0930
-Subject: [PATCH 7/7] Release 4.4.14-openpower1
+Subject: [PATCH 10/10] Release 4.4.15-openpower1
 
 Signed-off-by: Joel Stanley <joel@jms.id.au>
 ---
@@ -9,13 +9,13 @@
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/Makefile b/Makefile
-index fadbb9d73c6d..33c5654b1805 100644
+index 979088079338..8b282dddf291 100644
 --- a/Makefile
 +++ b/Makefile
 @@ -1,7 +1,7 @@
  VERSION = 4
  PATCHLEVEL = 4
- SUBLEVEL = 14
+ SUBLEVEL = 15
 -EXTRAVERSION =
 +EXTRAVERSION = -openpower1
  NAME = Blurry Fish Butt
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
deleted file mode 100644
index 5c10436..0000000
--- a/openpower/linux/linux-0002-Revert-usb-xhci-stop-everything-on-the-first-call-to.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-From 2481d9f7a822f3e5273c9bd4e273685eeb939b26 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/7] 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 ec9e758d5fcd..0e66476d4866 100644
---- a/drivers/usb/host/xhci.c
-+++ b/drivers/usb/host/xhci.c
-@@ -666,6 +666,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.
-  *
-@@ -680,14 +689,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.8.1
-
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
deleted file mode 100644
index 6e1430e..0000000
--- a/openpower/linux/linux-0003-xhci-do-not-halt-the-secondary-HCD.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From 855a1108e1dc8f18121e16fce490c590c4a51bf8 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/7] 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 0e66476d4866..ce7b10506bac 100644
---- a/drivers/usb/host/xhci.c
-+++ b/drivers/usb/host/xhci.c
-@@ -671,7 +671,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.8.1
-