diff -druNp --no-dereference linux-libre-5.3.1-gnu/arch/powerpc/include/asm/opal.h linux-libre-5.3.2-gnu/arch/powerpc/include/asm/opal.h
--- linux-libre-5.3.1-gnu/arch/powerpc/include/asm/opal.h	2019-09-21 01:19:47.000000000 -0400
+++ linux-libre-5.3.2-gnu/arch/powerpc/include/asm/opal.h	2019-10-01 02:24:50.000000000 -0400
@@ -272,7 +272,7 @@ int64_t opal_xive_get_vp_info(uint64_t v
 int64_t opal_xive_set_vp_info(uint64_t vp,
 			      uint64_t flags,
 			      uint64_t report_cl_pair);
-int64_t opal_xive_allocate_irq(uint32_t chip_id);
+int64_t opal_xive_allocate_irq_raw(uint32_t chip_id);
 int64_t opal_xive_free_irq(uint32_t girq);
 int64_t opal_xive_sync(uint32_t type, uint32_t id);
 int64_t opal_xive_dump(uint32_t type, uint32_t id);
diff -druNp --no-dereference linux-libre-5.3.1-gnu/arch/powerpc/platforms/powernv/opal-call.c linux-libre-5.3.2-gnu/arch/powerpc/platforms/powernv/opal-call.c
--- linux-libre-5.3.1-gnu/arch/powerpc/platforms/powernv/opal-call.c	2019-09-21 01:19:47.000000000 -0400
+++ linux-libre-5.3.2-gnu/arch/powerpc/platforms/powernv/opal-call.c	2019-10-01 02:24:50.000000000 -0400
@@ -257,7 +257,7 @@ OPAL_CALL(opal_xive_set_queue_info,		OPA
 OPAL_CALL(opal_xive_donate_page,		OPAL_XIVE_DONATE_PAGE);
 OPAL_CALL(opal_xive_alloc_vp_block,		OPAL_XIVE_ALLOCATE_VP_BLOCK);
 OPAL_CALL(opal_xive_free_vp_block,		OPAL_XIVE_FREE_VP_BLOCK);
-OPAL_CALL(opal_xive_allocate_irq,		OPAL_XIVE_ALLOCATE_IRQ);
+OPAL_CALL(opal_xive_allocate_irq_raw,		OPAL_XIVE_ALLOCATE_IRQ);
 OPAL_CALL(opal_xive_free_irq,			OPAL_XIVE_FREE_IRQ);
 OPAL_CALL(opal_xive_get_vp_info,		OPAL_XIVE_GET_VP_INFO);
 OPAL_CALL(opal_xive_set_vp_info,		OPAL_XIVE_SET_VP_INFO);
diff -druNp --no-dereference linux-libre-5.3.1-gnu/arch/powerpc/sysdev/xive/native.c linux-libre-5.3.2-gnu/arch/powerpc/sysdev/xive/native.c
--- linux-libre-5.3.1-gnu/arch/powerpc/sysdev/xive/native.c	2019-09-21 01:19:47.000000000 -0400
+++ linux-libre-5.3.2-gnu/arch/powerpc/sysdev/xive/native.c	2019-10-01 02:24:50.000000000 -0400
@@ -231,6 +231,17 @@ static bool xive_native_match(struct dev
 	return of_device_is_compatible(node, "ibm,opal-xive-vc");
 }
 
+static s64 opal_xive_allocate_irq(u32 chip_id)
+{
+	s64 irq = opal_xive_allocate_irq_raw(chip_id);
+
+	/*
+	 * Old versions of skiboot can incorrectly return 0xffffffff to
+	 * indicate no space, fix it up here.
+	 */
+	return irq == 0xffffffff ? OPAL_RESOURCE : irq;
+}
+
 #ifdef CONFIG_SMP
 static int xive_native_get_ipi(unsigned int cpu, struct xive_cpu *xc)
 {
diff -druNp --no-dereference linux-libre-5.3.1-gnu/drivers/clk/imx/clk-imx8mm.c linux-libre-5.3.2-gnu/drivers/clk/imx/clk-imx8mm.c
--- linux-libre-5.3.1-gnu/drivers/clk/imx/clk-imx8mm.c	2019-09-21 01:19:47.000000000 -0400
+++ linux-libre-5.3.2-gnu/drivers/clk/imx/clk-imx8mm.c	2019-10-01 02:24:50.000000000 -0400
@@ -55,8 +55,8 @@ static const struct imx_pll14xx_rate_tab
 };
 
 static const struct imx_pll14xx_rate_table imx8mm_audiopll_tbl[] = {
-	PLL_1443X_RATE(786432000U, 655, 5, 2, 23593),
-	PLL_1443X_RATE(722534400U, 301, 5, 1, 3670),
+	PLL_1443X_RATE(393216000U, 262, 2, 3, 9437),
+	PLL_1443X_RATE(361267200U, 361, 3, 3, 17511),
 };
 
 static const struct imx_pll14xx_rate_table imx8mm_videopll_tbl[] = {
diff -druNp --no-dereference linux-libre-5.3.1-gnu/drivers/clocksource/timer-of.c linux-libre-5.3.2-gnu/drivers/clocksource/timer-of.c
--- linux-libre-5.3.1-gnu/drivers/clocksource/timer-of.c	2019-09-21 01:19:47.000000000 -0400
+++ linux-libre-5.3.2-gnu/drivers/clocksource/timer-of.c	2019-10-01 02:24:50.000000000 -0400
@@ -113,8 +113,10 @@ static __init int timer_of_clk_init(stru
 	of_clk->clk = of_clk->name ? of_clk_get_by_name(np, of_clk->name) :
 		of_clk_get(np, of_clk->index);
 	if (IS_ERR(of_clk->clk)) {
-		pr_err("Failed to get clock for %pOF\n", np);
-		return PTR_ERR(of_clk->clk);
+		ret = PTR_ERR(of_clk->clk);
+		if (ret != -EPROBE_DEFER)
+			pr_err("Failed to get clock for %pOF\n", np);
+		goto out;
 	}
 
 	ret = clk_prepare_enable(of_clk->clk);
diff -druNp --no-dereference linux-libre-5.3.1-gnu/drivers/clocksource/timer-probe.c linux-libre-5.3.2-gnu/drivers/clocksource/timer-probe.c
--- linux-libre-5.3.1-gnu/drivers/clocksource/timer-probe.c	2019-09-21 01:19:47.000000000 -0400
+++ linux-libre-5.3.2-gnu/drivers/clocksource/timer-probe.c	2019-10-01 02:24:50.000000000 -0400
@@ -29,7 +29,9 @@ void __init timer_probe(void)
 
 		ret = init_func_ret(np);
 		if (ret) {
-			pr_err("Failed to initialize '%pOF': %d\n", np, ret);
+			if (ret != -EPROBE_DEFER)
+				pr_err("Failed to initialize '%pOF': %d\n", np,
+				       ret);
 			continue;
 		}
 
diff -druNp --no-dereference linux-libre-5.3.1-gnu/drivers/crypto/talitos.c linux-libre-5.3.2-gnu/drivers/crypto/talitos.c
--- linux-libre-5.3.1-gnu/drivers/crypto/talitos.c	2019-09-21 01:19:47.000000000 -0400
+++ linux-libre-5.3.2-gnu/drivers/crypto/talitos.c	2019-10-01 02:24:50.000000000 -0400
@@ -3140,6 +3140,7 @@ static int talitos_remove(struct platfor
 			break;
 		case CRYPTO_ALG_TYPE_AEAD:
 			crypto_unregister_aead(&t_alg->algt.alg.aead);
+			break;
 		case CRYPTO_ALG_TYPE_AHASH:
 			crypto_unregister_ahash(&t_alg->algt.alg.hash);
 			break;
diff -druNp --no-dereference linux-libre-5.3.1-gnu/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c linux-libre-5.3.2-gnu/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
--- linux-libre-5.3.1-gnu/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c	2019-09-21 02:38:42.000000000 -0400
+++ linux-libre-5.3.2-gnu/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c	2019-10-01 04:42:24.000000000 -0400
@@ -4548,20 +4548,10 @@ static int dm_plane_atomic_check(struct
 static int dm_plane_atomic_async_check(struct drm_plane *plane,
 				       struct drm_plane_state *new_plane_state)
 {
-	struct drm_plane_state *old_plane_state =
-		drm_atomic_get_old_plane_state(new_plane_state->state, plane);
-
 	/* Only support async updates on cursor planes. */
 	if (plane->type != DRM_PLANE_TYPE_CURSOR)
 		return -EINVAL;
 
-	/*
-	 * DRM calls prepare_fb and cleanup_fb on new_plane_state for
-	 * async commits so don't allow fb changes.
-	 */
-	if (old_plane_state->fb != new_plane_state->fb)
-		return -EINVAL;
-
 	return 0;
 }
 
@@ -7284,6 +7274,26 @@ static int amdgpu_dm_atomic_check(struct
 	if (ret)
 		goto fail;
 
+	if (state->legacy_cursor_update) {
+		/*
+		 * This is a fast cursor update coming from the plane update
+		 * helper, check if it can be done asynchronously for better
+		 * performance.
+		 */
+		state->async_update =
+			!drm_atomic_helper_async_check(dev, state);
+
+		/*
+		 * Skip the remaining global validation if this is an async
+		 * update. Cursor updates can be done without affecting
+		 * state or bandwidth calcs and this avoids the performance
+		 * penalty of locking the private state object and
+		 * allocating a new dc_state.
+		 */
+		if (state->async_update)
+			return 0;
+	}
+
 	/* Check scaling and underscan changes*/
 	/* TODO Removed scaling changes validation due to inability to commit
 	 * new stream into context w\o causing full reset. Need to
@@ -7336,13 +7346,29 @@ static int amdgpu_dm_atomic_check(struct
 			ret = -EINVAL;
 			goto fail;
 		}
-	} else if (state->legacy_cursor_update) {
+	} else {
 		/*
-		 * This is a fast cursor update coming from the plane update
-		 * helper, check if it can be done asynchronously for better
-		 * performance.
+		 * The commit is a fast update. Fast updates shouldn't change
+		 * the DC context, affect global validation, and can have their
+		 * commit work done in parallel with other commits not touching
+		 * the same resource. If we have a new DC context as part of
+		 * the DM atomic state from validation we need to free it and
+		 * retain the existing one instead.
 		 */
-		state->async_update = !drm_atomic_helper_async_check(dev, state);
+		struct dm_atomic_state *new_dm_state, *old_dm_state;
+
+		new_dm_state = dm_atomic_get_new_state(state);
+		old_dm_state = dm_atomic_get_old_state(state);
+
+		if (new_dm_state && old_dm_state) {
+			if (new_dm_state->context)
+				dc_release_state(new_dm_state->context);
+
+			new_dm_state->context = old_dm_state->context;
+
+			if (old_dm_state->context)
+				dc_retain_state(old_dm_state->context);
+		}
 	}
 
 	/* Must be success */
diff -druNp --no-dereference linux-libre-5.3.1-gnu/drivers/gpu/drm/amd/display/dc/calcs/Makefile linux-libre-5.3.2-gnu/drivers/gpu/drm/amd/display/dc/calcs/Makefile
--- linux-libre-5.3.1-gnu/drivers/gpu/drm/amd/display/dc/calcs/Makefile	2019-09-21 01:19:47.000000000 -0400
+++ linux-libre-5.3.2-gnu/drivers/gpu/drm/amd/display/dc/calcs/Makefile	2019-10-01 02:24:50.000000000 -0400
@@ -32,6 +32,10 @@ endif
 
 calcs_ccflags := -mhard-float -msse $(cc_stack_align)
 
+ifdef CONFIG_CC_IS_CLANG
+calcs_ccflags += -msse2
+endif
+
 CFLAGS_dcn_calcs.o := $(calcs_ccflags)
 CFLAGS_dcn_calc_auto.o := $(calcs_ccflags)
 CFLAGS_dcn_calc_math.o := $(calcs_ccflags) -Wno-tautological-compare
diff -druNp --no-dereference linux-libre-5.3.1-gnu/drivers/gpu/drm/amd/display/dc/dcn20/Makefile linux-libre-5.3.2-gnu/drivers/gpu/drm/amd/display/dc/dcn20/Makefile
--- linux-libre-5.3.1-gnu/drivers/gpu/drm/amd/display/dc/dcn20/Makefile	2019-09-21 01:19:47.000000000 -0400
+++ linux-libre-5.3.2-gnu/drivers/gpu/drm/amd/display/dc/dcn20/Makefile	2019-10-01 02:24:50.000000000 -0400
@@ -18,6 +18,10 @@ endif
 
 CFLAGS_dcn20_resource.o := -mhard-float -msse $(cc_stack_align)
 
+ifdef CONFIG_CC_IS_CLANG
+CFLAGS_dcn20_resource.o += -msse2
+endif
+
 AMD_DAL_DCN20 = $(addprefix $(AMDDALPATH)/dc/dcn20/,$(DCN20))
 
 AMD_DISPLAY_FILES += $(AMD_DAL_DCN20)
diff -druNp --no-dereference linux-libre-5.3.1-gnu/drivers/gpu/drm/amd/display/dc/dml/Makefile linux-libre-5.3.2-gnu/drivers/gpu/drm/amd/display/dc/dml/Makefile
--- linux-libre-5.3.1-gnu/drivers/gpu/drm/amd/display/dc/dml/Makefile	2019-09-21 01:19:47.000000000 -0400
+++ linux-libre-5.3.2-gnu/drivers/gpu/drm/amd/display/dc/dml/Makefile	2019-10-01 02:24:50.000000000 -0400
@@ -32,6 +32,10 @@ endif
 
 dml_ccflags := -mhard-float -msse $(cc_stack_align)
 
+ifdef CONFIG_CC_IS_CLANG
+dml_ccflags += -msse2
+endif
+
 CFLAGS_display_mode_lib.o := $(dml_ccflags)
 
 ifdef CONFIG_DRM_AMD_DC_DCN2_0
diff -druNp --no-dereference linux-libre-5.3.1-gnu/drivers/gpu/drm/amd/display/dc/dsc/Makefile linux-libre-5.3.2-gnu/drivers/gpu/drm/amd/display/dc/dsc/Makefile
--- linux-libre-5.3.1-gnu/drivers/gpu/drm/amd/display/dc/dsc/Makefile	2019-09-21 01:19:47.000000000 -0400
+++ linux-libre-5.3.2-gnu/drivers/gpu/drm/amd/display/dc/dsc/Makefile	2019-10-01 02:24:50.000000000 -0400
@@ -9,6 +9,10 @@ endif
 
 dsc_ccflags := -mhard-float -msse $(cc_stack_align)
 
+ifdef CONFIG_CC_IS_CLANG
+dsc_ccflags += -msse2
+endif
+
 CFLAGS_rc_calc.o := $(dsc_ccflags)
 CFLAGS_rc_calc_dpi.o := $(dsc_ccflags)
 CFLAGS_codec_main_amd.o := $(dsc_ccflags)
diff -druNp --no-dereference linux-libre-5.3.1-gnu/drivers/hid/hid-ids.h linux-libre-5.3.2-gnu/drivers/hid/hid-ids.h
--- linux-libre-5.3.1-gnu/drivers/hid/hid-ids.h	2019-09-21 01:19:47.000000000 -0400
+++ linux-libre-5.3.2-gnu/drivers/hid/hid-ids.h	2019-10-01 02:24:50.000000000 -0400
@@ -568,6 +568,7 @@
 #define USB_PRODUCT_ID_HP_LOGITECH_OEM_USB_OPTICAL_MOUSE_0B4A	0x0b4a
 #define USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE		0x134a
 #define USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE_094A	0x094a
+#define USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE_0941	0x0941
 #define USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE_0641	0x0641
 
 #define USB_VENDOR_ID_HUION		0x256c
diff -druNp --no-dereference linux-libre-5.3.1-gnu/drivers/hid/hid-lg4ff.c linux-libre-5.3.2-gnu/drivers/hid/hid-lg4ff.c
--- linux-libre-5.3.1-gnu/drivers/hid/hid-lg4ff.c	2019-09-21 01:19:47.000000000 -0400
+++ linux-libre-5.3.2-gnu/drivers/hid/hid-lg4ff.c	2019-10-01 02:24:50.000000000 -0400
@@ -1477,7 +1477,6 @@ int lg4ff_deinit(struct hid_device *hid)
 		}
 	}
 #endif
-	hid_hw_stop(hid);
 	drv_data->device_props = NULL;
 
 	kfree(entry);
diff -druNp --no-dereference linux-libre-5.3.1-gnu/drivers/hid/hid-lg.c linux-libre-5.3.2-gnu/drivers/hid/hid-lg.c
--- linux-libre-5.3.1-gnu/drivers/hid/hid-lg.c	2019-09-21 01:19:47.000000000 -0400
+++ linux-libre-5.3.2-gnu/drivers/hid/hid-lg.c	2019-10-01 02:24:50.000000000 -0400
@@ -818,7 +818,7 @@ static int lg_probe(struct hid_device *h
 
 		if (!buf) {
 			ret = -ENOMEM;
-			goto err_free;
+			goto err_stop;
 		}
 
 		ret = hid_hw_raw_request(hdev, buf[0], buf, sizeof(cbuf),
@@ -850,9 +850,12 @@ static int lg_probe(struct hid_device *h
 		ret = lg4ff_init(hdev);
 
 	if (ret)
-		goto err_free;
+		goto err_stop;
 
 	return 0;
+
+err_stop:
+	hid_hw_stop(hdev);
 err_free:
 	kfree(drv_data);
 	return ret;
@@ -863,8 +866,7 @@ static void lg_remove(struct hid_device
 	struct lg_drv_data *drv_data = hid_get_drvdata(hdev);
 	if (drv_data->quirks & LG_FF4)
 		lg4ff_deinit(hdev);
-	else
-		hid_hw_stop(hdev);
+	hid_hw_stop(hdev);
 	kfree(drv_data);
 }
 
diff -druNp --no-dereference linux-libre-5.3.1-gnu/drivers/hid/hid-logitech-dj.c linux-libre-5.3.2-gnu/drivers/hid/hid-logitech-dj.c
--- linux-libre-5.3.1-gnu/drivers/hid/hid-logitech-dj.c	2019-09-21 01:19:47.000000000 -0400
+++ linux-libre-5.3.2-gnu/drivers/hid/hid-logitech-dj.c	2019-10-01 02:24:50.000000000 -0400
@@ -1734,14 +1734,14 @@ static int logi_dj_probe(struct hid_devi
 		if (retval < 0) {
 			hid_err(hdev, "%s: logi_dj_recv_query_paired_devices error:%d\n",
 				__func__, retval);
-			goto logi_dj_recv_query_paired_devices_failed;
+			/*
+			 * This can happen with a KVM, let the probe succeed,
+			 * logi_dj_recv_queue_unknown_work will retry later.
+			 */
 		}
 	}
 
-	return retval;
-
-logi_dj_recv_query_paired_devices_failed:
-	hid_hw_close(hdev);
+	return 0;
 
 llopen_failed:
 switch_to_dj_mode_fail:
diff -druNp --no-dereference linux-libre-5.3.1-gnu/drivers/hid/hid-prodikeys.c linux-libre-5.3.2-gnu/drivers/hid/hid-prodikeys.c
--- linux-libre-5.3.1-gnu/drivers/hid/hid-prodikeys.c	2019-09-21 01:19:47.000000000 -0400
+++ linux-libre-5.3.2-gnu/drivers/hid/hid-prodikeys.c	2019-10-01 02:24:50.000000000 -0400
@@ -551,10 +551,14 @@ static void pcmidi_setup_extra_keys(
 
 static int pcmidi_set_operational(struct pcmidi_snd *pm)
 {
+	int rc;
+
 	if (pm->ifnum != 1)
 		return 0; /* only set up ONCE for interace 1 */
 
-	pcmidi_get_output_report(pm);
+	rc = pcmidi_get_output_report(pm);
+	if (rc < 0)
+		return rc;
 	pcmidi_submit_output_report(pm, 0xc1);
 	return 0;
 }
@@ -683,7 +687,11 @@ static int pcmidi_snd_initialise(struct
 	spin_lock_init(&pm->rawmidi_in_lock);
 
 	init_sustain_timers(pm);
-	pcmidi_set_operational(pm);
+	err = pcmidi_set_operational(pm);
+	if (err < 0) {
+		pk_error("failed to find output report\n");
+		goto fail_register;
+	}
 
 	/* register it */
 	err = snd_card_register(card);
diff -druNp --no-dereference linux-libre-5.3.1-gnu/drivers/hid/hid-quirks.c linux-libre-5.3.2-gnu/drivers/hid/hid-quirks.c
--- linux-libre-5.3.1-gnu/drivers/hid/hid-quirks.c	2019-09-21 01:19:47.000000000 -0400
+++ linux-libre-5.3.2-gnu/drivers/hid/hid-quirks.c	2019-10-01 02:24:50.000000000 -0400
@@ -92,6 +92,7 @@ static const struct hid_device_id hid_qu
 	{ HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_LOGITECH_OEM_USB_OPTICAL_MOUSE_0B4A), HID_QUIRK_ALWAYS_POLL },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE), HID_QUIRK_ALWAYS_POLL },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE_094A), HID_QUIRK_ALWAYS_POLL },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE_0941), HID_QUIRK_ALWAYS_POLL },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE_0641), HID_QUIRK_ALWAYS_POLL },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_IDEACOM, USB_DEVICE_ID_IDEACOM_IDC6680), HID_QUIRK_MULTI_INPUT },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_INNOMEDIA, USB_DEVICE_ID_INNEX_GENESIS_ATARI), HID_QUIRK_MULTI_INPUT },
diff -druNp --no-dereference linux-libre-5.3.1-gnu/drivers/hid/hidraw.c linux-libre-5.3.2-gnu/drivers/hid/hidraw.c
--- linux-libre-5.3.1-gnu/drivers/hid/hidraw.c	2019-09-21 01:19:47.000000000 -0400
+++ linux-libre-5.3.2-gnu/drivers/hid/hidraw.c	2019-10-01 02:24:50.000000000 -0400
@@ -370,7 +370,7 @@ static long hidraw_ioctl(struct file *fi
 
 	mutex_lock(&minors_lock);
 	dev = hidraw_table[minor];
-	if (!dev) {
+	if (!dev || !dev->exist) {
 		ret = -ENODEV;
 		goto out;
 	}
diff -druNp --no-dereference linux-libre-5.3.1-gnu/drivers/hid/hid-sony.c linux-libre-5.3.2-gnu/drivers/hid/hid-sony.c
--- linux-libre-5.3.1-gnu/drivers/hid/hid-sony.c	2019-09-21 01:19:47.000000000 -0400
+++ linux-libre-5.3.2-gnu/drivers/hid/hid-sony.c	2019-10-01 02:24:50.000000000 -0400
@@ -2811,7 +2811,6 @@ err_stop:
 	sony_cancel_work_sync(sc);
 	sony_remove_dev_list(sc);
 	sony_release_device_id(sc);
-	hid_hw_stop(hdev);
 	return ret;
 }
 
@@ -2876,6 +2875,7 @@ static int sony_probe(struct hid_device
 	 */
 	if (!(hdev->claimed & HID_CLAIMED_INPUT)) {
 		hid_err(hdev, "failed to claim input\n");
+		hid_hw_stop(hdev);
 		return -ENODEV;
 	}
 
diff -druNp --no-dereference linux-libre-5.3.1-gnu/drivers/mtd/chips/cfi_cmdset_0002.c linux-libre-5.3.2-gnu/drivers/mtd/chips/cfi_cmdset_0002.c
--- linux-libre-5.3.1-gnu/drivers/mtd/chips/cfi_cmdset_0002.c	2019-09-21 01:19:47.000000000 -0400
+++ linux-libre-5.3.2-gnu/drivers/mtd/chips/cfi_cmdset_0002.c	2019-10-01 02:24:50.000000000 -0400
@@ -1717,31 +1717,37 @@ static int __xipram do_write_oneword(str
 			continue;
 		}
 
+		/*
+		 * We check "time_after" and "!chip_good" before checking
+		 * "chip_good" to avoid the failure due to scheduling.
+		 */
 		if (time_after(jiffies, timeo) &&
-		    !chip_ready(map, chip, adr)) {
+		    !chip_good(map, chip, adr, datum)) {
 			xip_enable(map, chip, adr);
 			printk(KERN_WARNING "MTD %s(): software timeout\n", __func__);
 			xip_disable(map, chip, adr);
+			ret = -EIO;
 			break;
 		}
 
-		if (chip_ready(map, chip, adr))
+		if (chip_good(map, chip, adr, datum))
 			break;
 
 		/* Latency issues. Drop the lock, wait a while and retry */
 		UDELAY(map, chip, adr, 1);
 	}
+
 	/* Did we succeed? */
-	if (!chip_good(map, chip, adr, datum)) {
+	if (ret) {
 		/* reset on all failures. */
 		cfi_check_err_status(map, chip, adr);
 		map_write(map, CMD(0xF0), chip->start);
 		/* FIXME - should have reset delay before continuing */
 
-		if (++retry_cnt <= MAX_RETRIES)
+		if (++retry_cnt <= MAX_RETRIES) {
+			ret = 0;
 			goto retry;
-
-		ret = -EIO;
+		}
 	}
 	xip_enable(map, chip, adr);
  op_done:
diff -druNp --no-dereference linux-libre-5.3.1-gnu/drivers/platform/x86/i2c-multi-instantiate.c linux-libre-5.3.2-gnu/drivers/platform/x86/i2c-multi-instantiate.c
--- linux-libre-5.3.1-gnu/drivers/platform/x86/i2c-multi-instantiate.c	2019-09-21 01:19:47.000000000 -0400
+++ linux-libre-5.3.2-gnu/drivers/platform/x86/i2c-multi-instantiate.c	2019-10-01 02:24:50.000000000 -0400
@@ -92,7 +92,7 @@ static int i2c_multi_inst_probe(struct p
 	for (i = 0; i < multi->num_clients && inst_data[i].type; i++) {
 		memset(&board_info, 0, sizeof(board_info));
 		strlcpy(board_info.type, inst_data[i].type, I2C_NAME_SIZE);
-		snprintf(name, sizeof(name), "%s-%s.%d", match->id,
+		snprintf(name, sizeof(name), "%s-%s.%d", dev_name(dev),
 			 inst_data[i].type, i);
 		board_info.dev_name = name;
 		switch (inst_data[i].flags & IRQ_RESOURCE_TYPE) {
diff -druNp --no-dereference linux-libre-5.3.1-gnu/include/net/netfilter/nf_tables.h linux-libre-5.3.2-gnu/include/net/netfilter/nf_tables.h
--- linux-libre-5.3.1-gnu/include/net/netfilter/nf_tables.h	2019-09-21 01:19:47.000000000 -0400
+++ linux-libre-5.3.2-gnu/include/net/netfilter/nf_tables.h	2019-10-01 02:24:50.000000000 -0400
@@ -1206,6 +1206,8 @@ void nft_trace_notify(struct nft_tracein
 #define MODULE_ALIAS_NFT_OBJ(type) \
 	MODULE_ALIAS("nft-obj-" __stringify(type))
 
+#if IS_ENABLED(CONFIG_NF_TABLES)
+
 /*
  * The gencursor defines two generations, the currently active and the
  * next one. Objects contain a bitmask of 2 bits specifying the generations
@@ -1279,6 +1281,8 @@ static inline void nft_set_elem_change_a
 	ext->genmask ^= nft_genmask_next(net);
 }
 
+#endif /* IS_ENABLED(CONFIG_NF_TABLES) */
+
 /*
  * We use a free bit in the genmask field to indicate the element
  * is busy, meaning it is currently being processed either by
diff -druNp --no-dereference linux-libre-5.3.1-gnu/Makefile linux-libre-5.3.2-gnu/Makefile
--- linux-libre-5.3.1-gnu/Makefile	2019-09-21 02:35:15.000000000 -0400
+++ linux-libre-5.3.2-gnu/Makefile	2019-10-01 04:38:43.000000000 -0400
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: GPL-2.0
 VERSION = 5
 PATCHLEVEL = 3
-SUBLEVEL = 1
+SUBLEVEL = 2
 EXTRAVERSION = -gnu
 NAME = Bobtail Squid
 
diff -druNp --no-dereference linux-libre-5.3.1-gnu/mm/z3fold.c linux-libre-5.3.2-gnu/mm/z3fold.c
--- linux-libre-5.3.1-gnu/mm/z3fold.c	2019-09-21 01:19:47.000000000 -0400
+++ linux-libre-5.3.2-gnu/mm/z3fold.c	2019-10-01 02:24:50.000000000 -0400
@@ -41,7 +41,6 @@
 #include <linux/workqueue.h>
 #include <linux/slab.h>
 #include <linux/spinlock.h>
-#include <linux/wait.h>
 #include <linux/zpool.h>
 #include <linux/magic.h>
 
@@ -146,8 +145,6 @@ struct z3fold_header {
  * @release_wq:	workqueue for safe page release
  * @work:	work_struct for safe page release
  * @inode:	inode for z3fold pseudo filesystem
- * @destroying: bool to stop migration once we start destruction
- * @isolated: int to count the number of pages currently in isolation
  *
  * This structure is allocated at pool creation time and maintains metadata
  * pertaining to a particular z3fold pool.
@@ -166,11 +163,8 @@ struct z3fold_pool {
 	const struct zpool_ops *zpool_ops;
 	struct workqueue_struct *compact_wq;
 	struct workqueue_struct *release_wq;
-	struct wait_queue_head isolate_wait;
 	struct work_struct work;
 	struct inode *inode;
-	bool destroying;
-	int isolated;
 };
 
 /*
@@ -775,7 +769,6 @@ static struct z3fold_pool *z3fold_create
 		goto out_c;
 	spin_lock_init(&pool->lock);
 	spin_lock_init(&pool->stale_lock);
-	init_waitqueue_head(&pool->isolate_wait);
 	pool->unbuddied = __alloc_percpu(sizeof(struct list_head)*NCHUNKS, 2);
 	if (!pool->unbuddied)
 		goto out_pool;
@@ -815,15 +808,6 @@ out:
 	return NULL;
 }
 
-static bool pool_isolated_are_drained(struct z3fold_pool *pool)
-{
-	bool ret;
-
-	spin_lock(&pool->lock);
-	ret = pool->isolated == 0;
-	spin_unlock(&pool->lock);
-	return ret;
-}
 /**
  * z3fold_destroy_pool() - destroys an existing z3fold pool
  * @pool:	the z3fold pool to be destroyed
@@ -833,22 +817,6 @@ static bool pool_isolated_are_drained(st
 static void z3fold_destroy_pool(struct z3fold_pool *pool)
 {
 	kmem_cache_destroy(pool->c_handle);
-	/*
-	 * We set pool-> destroying under lock to ensure that
-	 * z3fold_page_isolate() sees any changes to destroying. This way we
-	 * avoid the need for any memory barriers.
-	 */
-
-	spin_lock(&pool->lock);
-	pool->destroying = true;
-	spin_unlock(&pool->lock);
-
-	/*
-	 * We need to ensure that no pages are being migrated while we destroy
-	 * these workqueues, as migration can queue work on either of the
-	 * workqueues.
-	 */
-	wait_event(pool->isolate_wait, !pool_isolated_are_drained(pool));
 
 	/*
 	 * We need to destroy pool->compact_wq before pool->release_wq,
@@ -1339,28 +1307,6 @@ static u64 z3fold_get_pool_size(struct z
 	return atomic64_read(&pool->pages_nr);
 }
 
-/*
- * z3fold_dec_isolated() expects to be called while pool->lock is held.
- */
-static void z3fold_dec_isolated(struct z3fold_pool *pool)
-{
-	assert_spin_locked(&pool->lock);
-	VM_BUG_ON(pool->isolated <= 0);
-	pool->isolated--;
-
-	/*
-	 * If we have no more isolated pages, we have to see if
-	 * z3fold_destroy_pool() is waiting for a signal.
-	 */
-	if (pool->isolated == 0 && waitqueue_active(&pool->isolate_wait))
-		wake_up_all(&pool->isolate_wait);
-}
-
-static void z3fold_inc_isolated(struct z3fold_pool *pool)
-{
-	pool->isolated++;
-}
-
 static bool z3fold_page_isolate(struct page *page, isolate_mode_t mode)
 {
 	struct z3fold_header *zhdr;
@@ -1387,34 +1333,6 @@ static bool z3fold_page_isolate(struct p
 		spin_lock(&pool->lock);
 		if (!list_empty(&page->lru))
 			list_del(&page->lru);
-		/*
-		 * We need to check for destruction while holding pool->lock, as
-		 * otherwise destruction could see 0 isolated pages, and
-		 * proceed.
-		 */
-		if (unlikely(pool->destroying)) {
-			spin_unlock(&pool->lock);
-			/*
-			 * If this page isn't stale, somebody else holds a
-			 * reference to it. Let't drop our refcount so that they
-			 * can call the release logic.
-			 */
-			if (unlikely(kref_put(&zhdr->refcount,
-					      release_z3fold_page_locked))) {
-				/*
-				 * If we get here we have kref problems, so we
-				 * should freak out.
-				 */
-				WARN(1, "Z3fold is experiencing kref problems\n");
-				z3fold_page_unlock(zhdr);
-				return false;
-			}
-			z3fold_page_unlock(zhdr);
-			return false;
-		}
-
-
-		z3fold_inc_isolated(pool);
 		spin_unlock(&pool->lock);
 		z3fold_page_unlock(zhdr);
 		return true;
@@ -1483,10 +1401,6 @@ static int z3fold_page_migrate(struct ad
 
 	queue_work_on(new_zhdr->cpu, pool->compact_wq, &new_zhdr->work);
 
-	spin_lock(&pool->lock);
-	z3fold_dec_isolated(pool);
-	spin_unlock(&pool->lock);
-
 	page_mapcount_reset(page);
 	put_page(page);
 	return 0;
@@ -1506,14 +1420,10 @@ static void z3fold_page_putback(struct p
 	INIT_LIST_HEAD(&page->lru);
 	if (kref_put(&zhdr->refcount, release_z3fold_page_locked)) {
 		atomic64_dec(&pool->pages_nr);
-		spin_lock(&pool->lock);
-		z3fold_dec_isolated(pool);
-		spin_unlock(&pool->lock);
 		return;
 	}
 	spin_lock(&pool->lock);
 	list_add(&page->lru, &pool->lru);
-	z3fold_dec_isolated(pool);
 	spin_unlock(&pool->lock);
 	z3fold_page_unlock(zhdr);
 }
diff -druNp --no-dereference linux-libre-5.3.1-gnu/sound/firewire/dice/dice-alesis.c linux-libre-5.3.2-gnu/sound/firewire/dice/dice-alesis.c
--- linux-libre-5.3.1-gnu/sound/firewire/dice/dice-alesis.c	2019-09-21 01:19:47.000000000 -0400
+++ linux-libre-5.3.2-gnu/sound/firewire/dice/dice-alesis.c	2019-10-01 02:24:50.000000000 -0400
@@ -15,7 +15,7 @@ alesis_io14_tx_pcm_chs[MAX_STREAMS][SND_
 
 static const unsigned int
 alesis_io26_tx_pcm_chs[MAX_STREAMS][SND_DICE_RATE_MODE_COUNT] = {
-	{10, 10, 8},	/* Tx0 = Analog + S/PDIF. */
+	{10, 10, 4},	/* Tx0 = Analog + S/PDIF. */
 	{16, 8, 0},	/* Tx1 = ADAT1 + ADAT2. */
 };
 
diff -druNp --no-dereference linux-libre-5.3.1-gnu/sound/pci/hda/hda_intel.c linux-libre-5.3.2-gnu/sound/pci/hda/hda_intel.c
--- linux-libre-5.3.1-gnu/sound/pci/hda/hda_intel.c	2019-09-21 01:19:47.000000000 -0400
+++ linux-libre-5.3.2-gnu/sound/pci/hda/hda_intel.c	2019-10-01 02:24:50.000000000 -0400
@@ -2517,8 +2517,7 @@ static const struct pci_device_id azx_id
 			 AZX_DCAPS_PM_RUNTIME },
 	/* AMD Raven */
 	{ PCI_DEVICE(0x1022, 0x15e3),
-	  .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_SB |
-			 AZX_DCAPS_PM_RUNTIME },
+	  .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_AMD_SB },
 	/* ATI HDMI */
 	{ PCI_DEVICE(0x1002, 0x0002),
 	  .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS },
diff -druNp --no-dereference linux-libre-5.3.1-gnu/sound/pci/hda/patch_analog.c linux-libre-5.3.2-gnu/sound/pci/hda/patch_analog.c
--- linux-libre-5.3.1-gnu/sound/pci/hda/patch_analog.c	2019-09-21 01:19:47.000000000 -0400
+++ linux-libre-5.3.2-gnu/sound/pci/hda/patch_analog.c	2019-10-01 02:24:50.000000000 -0400
@@ -357,6 +357,7 @@ static const struct hda_fixup ad1986a_fi
 
 static const struct snd_pci_quirk ad1986a_fixup_tbl[] = {
 	SND_PCI_QUIRK(0x103c, 0x30af, "HP B2800", AD1986A_FIXUP_LAPTOP_IMIC),
+	SND_PCI_QUIRK(0x1043, 0x1153, "ASUS M9V", AD1986A_FIXUP_LAPTOP_IMIC),
 	SND_PCI_QUIRK(0x1043, 0x1443, "ASUS Z99He", AD1986A_FIXUP_EAPD),
 	SND_PCI_QUIRK(0x1043, 0x1447, "ASUS A8JN", AD1986A_FIXUP_EAPD),
 	SND_PCI_QUIRK_MASK(0x1043, 0xff00, 0x8100, "ASUS P5", AD1986A_FIXUP_3STACK),
diff -druNp --no-dereference linux-libre-5.3.1-gnu/sound/usb/quirks.c linux-libre-5.3.2-gnu/sound/usb/quirks.c
--- linux-libre-5.3.1-gnu/sound/usb/quirks.c	2019-09-21 01:19:47.000000000 -0400
+++ linux-libre-5.3.2-gnu/sound/usb/quirks.c	2019-10-01 02:24:50.000000000 -0400
@@ -1655,6 +1655,8 @@ u64 snd_usb_interface_dsd_format_quirks(
 	case 0x152a:  /* Thesycon devices */
 	case 0x25ce:  /* Mytek devices */
 	case 0x2ab6:  /* T+A devices */
+	case 0x3842:  /* EVGA */
+	case 0xc502:  /* HiBy devices */
 		if (fp->dsd_raw)
 			return SNDRV_PCM_FMTBIT_DSD_U32_BE;
 		break;
diff -druNp --no-dereference linux-libre-5.3.1-gnu/tools/objtool/Makefile linux-libre-5.3.2-gnu/tools/objtool/Makefile
--- linux-libre-5.3.1-gnu/tools/objtool/Makefile	2019-09-21 01:19:47.000000000 -0400
+++ linux-libre-5.3.2-gnu/tools/objtool/Makefile	2019-10-01 02:24:50.000000000 -0400
@@ -35,7 +35,7 @@ INCLUDES := -I$(srctree)/tools/include \
 	    -I$(srctree)/tools/arch/$(HOSTARCH)/include/uapi \
 	    -I$(srctree)/tools/objtool/arch/$(ARCH)/include
 WARNINGS := $(EXTRA_WARNINGS) -Wno-switch-default -Wno-switch-enum -Wno-packed
-CFLAGS   += -Werror $(WARNINGS) $(KBUILD_HOSTCFLAGS) -g $(INCLUDES) $(LIBELF_FLAGS)
+CFLAGS   := -Werror $(WARNINGS) $(KBUILD_HOSTCFLAGS) -g $(INCLUDES) $(LIBELF_FLAGS)
 LDFLAGS  += $(LIBELF_LIBS) $(LIBSUBCMD) $(KBUILD_HOSTLDFLAGS)
 
 # Allow old libelf to be used:
