--- /dev/null
+From be4a2a81b6b90d1a47eaeaace4cc8e2cb57b96c7 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Sun, 14 Apr 2024 13:06:39 -0400
+Subject: drm/amdkfd: don't allow mapping the MMIO HDP page with large pages
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit be4a2a81b6b90d1a47eaeaace4cc8e2cb57b96c7 upstream.
+
+We don't get the right offset in that case. The GPU has
+an unused 4K area of the register BAR space into which you can
+remap registers. We remap the HDP flush registers into this
+space to allow userspace (CPU or GPU) to flush the HDP when it
+updates VRAM. However, on systems with >4K pages, we end up
+exposing PAGE_SIZE of MMIO space.
+
+Fixes: d8e408a82704 ("drm/amdkfd: Expose HDP registers to user space")
+Reviewed-by: Felix Kuehling <felix.kuehling@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Cc: stable@vger.kernel.org
+Signed-off-by: Felix Kuehling <felix.kuehling@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
+@@ -1290,7 +1290,7 @@ static int kfd_ioctl_alloc_memory_of_gpu
+ goto err_unlock;
+ }
+ offset = amdgpu_amdkfd_get_mmio_remap_phys_addr(dev->kgd);
+- if (!offset) {
++ if (!offset || (PAGE_SIZE > 4096)) {
+ err = -ENOMEM;
+ goto err_unlock;
+ }
+@@ -2029,6 +2029,9 @@ static int kfd_mmio_mmap(struct kfd_dev
+ if (vma->vm_end - vma->vm_start != PAGE_SIZE)
+ return -EINVAL;
+
++ if (PAGE_SIZE > 4096)
++ return -EINVAL;
++
+ address = amdgpu_amdkfd_get_mmio_remap_phys_addr(dev->kgd);
+
+ vma->vm_flags |= VM_IO | VM_DONTCOPY | VM_DONTEXPAND | VM_NORESERVE |
--- /dev/null
+From 3ad155c8ce3a09338368e424316282d552eedbad Mon Sep 17 00:00:00 2001
+From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Date: Fri, 30 Aug 2024 13:02:51 +0200
+Subject: Revert "MIPS: Loongson64: reset: Prioritise firmware service"
+
+From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+This reverts commit 77011a1d7a1a973d1657d06b658ce20f94172827 which is
+commit 4e7ca0b57f3bc09ba3e4ab86bf6b7c35134bfd04 upstream.
+
+Turns out to break the 5.15.y build, it should not have been backported
+that far.
+
+Reported-by: Guenter Roeck <linux@roeck-us.net>
+Cc: Jiaxun Yang <jiaxun.yang@flygoat.com>
+Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
+Link: https://lore.kernel.org/r/135ef4fd-4fc9-40b4-b188-8e64946f47c4@roeck-us.net
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/mips/loongson64/reset.c | 38 ++++++++++++++++++++++----------------
+ 1 file changed, 22 insertions(+), 16 deletions(-)
+
+--- a/arch/mips/loongson64/reset.c
++++ b/arch/mips/loongson64/reset.c
+@@ -11,7 +11,6 @@
+ #include <linux/init.h>
+ #include <linux/kexec.h>
+ #include <linux/pm.h>
+-#include <linux/reboot.h>
+ #include <linux/slab.h>
+
+ #include <asm/bootinfo.h>
+@@ -22,21 +21,36 @@
+ #include <loongson.h>
+ #include <boot_param.h>
+
+-static int firmware_restart(struct sys_off_data *unusedd)
++static void loongson_restart(char *command)
+ {
+
+ void (*fw_restart)(void) = (void *)loongson_sysconf.restart_addr;
+
+ fw_restart();
+- return NOTIFY_DONE;
++ while (1) {
++ if (cpu_wait)
++ cpu_wait();
++ }
+ }
+
+-static int firmware_poweroff(struct sys_off_data *unused)
++static void loongson_poweroff(void)
+ {
+ void (*fw_poweroff)(void) = (void *)loongson_sysconf.poweroff_addr;
+
+ fw_poweroff();
+- return NOTIFY_DONE;
++ while (1) {
++ if (cpu_wait)
++ cpu_wait();
++ }
++}
++
++static void loongson_halt(void)
++{
++ pr_notice("\n\n** You can safely turn off the power now **\n\n");
++ while (1) {
++ if (cpu_wait)
++ cpu_wait();
++ }
+ }
+
+ #ifdef CONFIG_KEXEC
+@@ -140,17 +154,9 @@ static void loongson_crash_shutdown(stru
+
+ static int __init mips_reboot_setup(void)
+ {
+- if (loongson_sysconf.restart_addr) {
+- register_sys_off_handler(SYS_OFF_MODE_RESTART,
+- SYS_OFF_PRIO_FIRMWARE,
+- firmware_restart, NULL);
+- }
+-
+- if (loongson_sysconf.poweroff_addr) {
+- register_sys_off_handler(SYS_OFF_MODE_POWER_OFF,
+- SYS_OFF_PRIO_FIRMWARE,
+- firmware_poweroff, NULL);
+- }
++ _machine_restart = loongson_restart;
++ _machine_halt = loongson_halt;
++ pm_power_off = loongson_poweroff;
+
+ #ifdef CONFIG_KEXEC
+ kexec_argv = kmalloc(KEXEC_ARGV_SIZE, GFP_KERNEL);