--- /dev/null
+From fa0c16caf3d73ab4d2e5d6fa2ef2394dbec91791 Mon Sep 17 00:00:00 2001
+From: Artem Lapkin <art@khadas.com>
+Date: Tue, 2 Mar 2021 12:22:02 +0800
+Subject: drm: meson_drv add shutdown function
+
+From: Artem Lapkin <art@khadas.com>
+
+commit fa0c16caf3d73ab4d2e5d6fa2ef2394dbec91791 upstream.
+
+Problem: random stucks on reboot stage about 1/20 stuck/reboots
+// debug kernel log
+[ 4.496660] reboot: kernel restart prepare CMD:(null)
+[ 4.498114] meson_ee_pwrc c883c000.system-controller:power-controller: shutdown begin
+[ 4.503949] meson_ee_pwrc c883c000.system-controller:power-controller: shutdown domain 0:VPU...
+...STUCK...
+
+Solution: add shutdown function to meson_drm driver
+// debug kernel log
+[ 5.231896] reboot: kernel restart prepare CMD:(null)
+[ 5.246135] [drm:meson_drv_shutdown]
+...
+[ 5.259271] meson_ee_pwrc c883c000.system-controller:power-controller: shutdown begin
+[ 5.274688] meson_ee_pwrc c883c000.system-controller:power-controller: shutdown domain 0:VPU...
+[ 5.338331] reboot: Restarting system
+[ 5.358293] psci: PSCI_0_2_FN_SYSTEM_RESET reboot_mode:0 cmd:(null)
+bl31 reboot reason: 0xd
+bl31 reboot reason: 0x0
+system cmd 1.
+...REBOOT...
+
+Tested: on VIM1 VIM2 VIM3 VIM3L khadas sbcs - 1000+ successful reboots
+and Odroid boards, WeTek Play2 (GXBB)
+
+Fixes: bbbe775ec5b5 ("drm: Add support for Amlogic Meson Graphic Controller")
+Signed-off-by: Artem Lapkin <art@khadas.com>
+Tested-by: Christian Hewitt <christianshewitt@gmail.com>
+Acked-by: Neil Armstrong <narmstrong@baylibre.com>
+Acked-by: Kevin Hilman <khilman@baylibre.com>
+Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
+Link: https://patchwork.freedesktop.org/patch/msgid/20210302042202.3728113-1-art@khadas.com
+Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/gpu/drm/meson/meson_drv.c | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+--- a/drivers/gpu/drm/meson/meson_drv.c
++++ b/drivers/gpu/drm/meson/meson_drv.c
+@@ -420,6 +420,16 @@ static int meson_probe_remote(struct pla
+ return count;
+ }
+
++static void meson_drv_shutdown(struct platform_device *pdev)
++{
++ struct meson_drm *priv = dev_get_drvdata(&pdev->dev);
++ struct drm_device *drm = priv->drm;
++
++ DRM_DEBUG_DRIVER("\n");
++ drm_kms_helper_poll_fini(drm);
++ drm_atomic_helper_shutdown(drm);
++}
++
+ static int meson_drv_probe(struct platform_device *pdev)
+ {
+ struct component_match *match = NULL;
+@@ -469,6 +479,7 @@ MODULE_DEVICE_TABLE(of, dt_match);
+
+ static struct platform_driver meson_drm_platform_driver = {
+ .probe = meson_drv_probe,
++ .shutdown = meson_drv_shutdown,
+ .driver = {
+ .name = "meson-drm",
+ .of_match_table = dt_match,
--- /dev/null
+From 738acd49eb018feb873e0fac8f9517493f6ce2c7 Mon Sep 17 00:00:00 2001
+From: Colin Ian King <colin.king@canonical.com>
+Date: Thu, 4 Mar 2021 09:49:28 +0000
+Subject: qxl: Fix uninitialised struct field head.surface_id
+
+From: Colin Ian King <colin.king@canonical.com>
+
+commit 738acd49eb018feb873e0fac8f9517493f6ce2c7 upstream.
+
+The surface_id struct field in head is not being initialized and
+static analysis warns that this is being passed through to
+dev->monitors_config->heads[i] on an assignment. Clear up this
+warning by initializing it to zero.
+
+Addresses-Coverity: ("Uninitialized scalar variable")
+Fixes: a6d3c4d79822 ("qxl: hook monitors_config updates into crtc, not encoder.")
+Signed-off-by: Colin Ian King <colin.king@canonical.com>
+Link: http://patchwork.freedesktop.org/patch/msgid/20210304094928.2280722-1-colin.king@canonical.com
+Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
+Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/gpu/drm/qxl/qxl_display.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/gpu/drm/qxl/qxl_display.c
++++ b/drivers/gpu/drm/qxl/qxl_display.c
+@@ -325,6 +325,7 @@ static void qxl_crtc_update_monitors_con
+
+ head.id = i;
+ head.flags = 0;
++ head.surface_id = 0;
+ oldcount = qdev->monitors_config->count;
+ if (crtc->state->active) {
+ struct drm_display_mode *mode = &crtc->mode;
--- /dev/null
+From d9c48a948d29bcb22f4fe61a81b718ef6de561a0 Mon Sep 17 00:00:00 2001
+From: Eric Farman <farman@linux.ibm.com>
+Date: Mon, 1 Mar 2021 19:33:24 +0100
+Subject: s390/cio: return -EFAULT if copy_to_user() fails
+
+From: Eric Farman <farman@linux.ibm.com>
+
+commit d9c48a948d29bcb22f4fe61a81b718ef6de561a0 upstream.
+
+Fixes: 120e214e504f ("vfio: ccw: realize VFIO_DEVICE_G(S)ET_IRQ_INFO ioctls")
+Signed-off-by: Eric Farman <farman@linux.ibm.com>
+Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/s390/cio/vfio_ccw_ops.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/s390/cio/vfio_ccw_ops.c
++++ b/drivers/s390/cio/vfio_ccw_ops.c
+@@ -545,7 +545,7 @@ static ssize_t vfio_ccw_mdev_ioctl(struc
+ if (info.count == -1)
+ return -EINVAL;
+
+- return copy_to_user((void __user *)arg, &info, minsz);
++ return copy_to_user((void __user *)arg, &info, minsz) ? -EFAULT : 0;
+ }
+ case VFIO_DEVICE_SET_IRQS:
+ {
--- /dev/null
+From 942df4be7ab40195e2a839e9de81951a5862bc5b Mon Sep 17 00:00:00 2001
+From: Wang Qing <wangqing@vivo.com>
+Date: Mon, 1 Mar 2021 20:08:21 +0800
+Subject: s390/crypto: return -EFAULT if copy_to_user() fails
+
+From: Wang Qing <wangqing@vivo.com>
+
+commit 942df4be7ab40195e2a839e9de81951a5862bc5b upstream.
+
+The copy_to_user() function returns the number of bytes remaining to be
+copied, but we want to return -EFAULT if the copy doesn't complete.
+
+Fixes: e06670c5fe3b ("s390: vfio-ap: implement VFIO_DEVICE_GET_INFO ioctl")
+Signed-off-by: Wang Qing <wangqing@vivo.com>
+Reviewed-by: Tony Krowiak <akrowiak@linux.ibm.com>
+Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
+Link: https://lore.kernel.org/r/1614600502-16714-1-git-send-email-wangqing@vivo.com
+Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/s390/crypto/vfio_ap_ops.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/s390/crypto/vfio_ap_ops.c
++++ b/drivers/s390/crypto/vfio_ap_ops.c
+@@ -1279,7 +1279,7 @@ static int vfio_ap_mdev_get_device_info(
+ info.num_regions = 0;
+ info.num_irqs = 0;
+
+- return copy_to_user((void __user *)arg, &info, minsz);
++ return copy_to_user((void __user *)arg, &info, minsz) ? -EFAULT : 0;
+ }
+
+ static ssize_t vfio_ap_mdev_ioctl(struct mdev_device *mdev,
drm-compat-clear-bounce-structures.patch
drm-shmem-helper-check-for-purged-buffers-in-fault-handler.patch
drm-shmem-helper-don-t-remove-the-offset-in-vm_area_struct-pgoff.patch
+drm-meson_drv-add-shutdown-function.patch
+s390-cio-return-efault-if-copy_to_user-fails-take-2.patch
+s390-crypto-return-efault-if-copy_to_user-fails.patch
+qxl-fix-uninitialised-struct-field-head.surface_id.patch