diff --git a/patch/kernel/meson64-dev/0015-drm-meson-Call-drm_crtc_vblank_on-drm_crtc_vblank_of.patch b/patch/kernel/meson64-dev/0015-drm-meson-Call-drm_crtc_vblank_on-drm_crtc_vblank_of.patch deleted file mode 100644 index 7dc23b5b4..000000000 --- a/patch/kernel/meson64-dev/0015-drm-meson-Call-drm_crtc_vblank_on-drm_crtc_vblank_of.patch +++ /dev/null @@ -1,61 +0,0 @@ -From 40bfd476f6bb44f9bf88bbbc0bd4cfd9591bedc9 Mon Sep 17 00:00:00 2001 -From: Neil Armstrong -Date: Wed, 28 Feb 2018 16:07:18 +0100 -Subject: [PATCH] drm/meson: Call drm_crtc_vblank_on / drm_crtc_vblank_off - -Make sure that the CRTC code will call the enable/disable_vblank hooks. - -Signed-off-by: Neil Armstrong - ---- - drivers/gpu/drm/meson/meson_crtc.c | 4 ++++ - drivers/gpu/drm/meson/meson_venc.c | 3 +++ - 2 files changed, 7 insertions(+) - -diff --git a/drivers/gpu/drm/meson/meson_crtc.c b/drivers/gpu/drm/meson/meson_crtc.c -index 0552020..7c0bdc8 100644 ---- a/drivers/gpu/drm/meson/meson_crtc.c -+++ b/drivers/gpu/drm/meson/meson_crtc.c -@@ -102,6 +102,8 @@ static void meson_crtc_atomic_enable(struct drm_crtc *crtc, - priv->io_base + _REG(VPP_MISC)); - - priv->viu.osd1_enabled = true; -+ -+ drm_crtc_vblank_on(crtc); - } - - static void meson_crtc_atomic_disable(struct drm_crtc *crtc, -@@ -110,6 +112,8 @@ static void meson_crtc_atomic_disable(struct drm_crtc *crtc, - struct meson_crtc *meson_crtc = to_meson_crtc(crtc); - struct meson_drm *priv = meson_crtc->priv; - -+ drm_crtc_vblank_off(crtc); -+ - priv->viu.osd1_enabled = false; - priv->viu.osd1_commit = false; - -diff --git a/drivers/gpu/drm/meson/meson_venc.c b/drivers/gpu/drm/meson/meson_venc.c -index 514245e..14aac66 100644 ---- a/drivers/gpu/drm/meson/meson_venc.c -+++ b/drivers/gpu/drm/meson/meson_venc.c -@@ -71,6 +71,7 @@ - */ - - /* HHI Registers */ -+#define HHI_GCLK_MPEG2 0x148 /* 0x52 offset in data sheet */ - #define HHI_VDAC_CNTL0 0x2F4 /* 0xbd offset in data sheet */ - #define HHI_VDAC_CNTL1 0x2F8 /* 0xbe offset in data sheet */ - #define HHI_HDMI_PHY_CNTL0 0x3a0 /* 0xe8 offset in data sheet */ -@@ -1529,10 +1530,12 @@ unsigned int meson_venci_get_field(struct meson_drm *priv) - void meson_venc_enable_vsync(struct meson_drm *priv) - { - writel_relaxed(2, priv->io_base + _REG(VENC_INTCTRL)); -+ regmap_update_bits(priv->hhi, HHI_GCLK_MPEG2, BIT(25), BIT(25)); - } - - void meson_venc_disable_vsync(struct meson_drm *priv) - { -+ regmap_update_bits(priv->hhi, HHI_GCLK_MPEG2, BIT(25), 0); - writel_relaxed(0, priv->io_base + _REG(VENC_INTCTRL)); - } - diff --git a/patch/kernel/meson64-dev/1022-drm-meson-Fixes-for-drm_crtc_vblank_on-off-support.patch b/patch/kernel/meson64-dev/1022-drm-meson-Fixes-for-drm_crtc_vblank_on-off-support.patch deleted file mode 100644 index a17be6bc3..000000000 --- a/patch/kernel/meson64-dev/1022-drm-meson-Fixes-for-drm_crtc_vblank_on-off-support.patch +++ /dev/null @@ -1,130 +0,0 @@ -From 5a258bd31dab2dad8afcced8a7a85fa92e04edab Mon Sep 17 00:00:00 2001 -From: Neil Armstrong -Date: Wed, 28 Feb 2018 16:07:18 +0100 -Subject: [PATCH] drm/meson: Fixes for drm_crtc_vblank_on/off support - -Since Linux 4.17, calls to drm_crtc_vblank_on/off are mandatory, and we get -a warning when ctrc is disabled : - driver forgot to call drm_crtc_vblank_off() - -But, the vsync IRQ was not totally disabled due the transient hardware -state, thus adding proper IRQ masking from the HHI system control registers. - -The last change fixes a race condition introduced by calling the added -drm_crtc_vblank_on/off when an HPD event occurs from the HDMI connector, -triggering a WARN_ON() in the _atomic_bebin() callback when the CRTC -is disabled, thus also triggering a WARN_ON() in drm_vblank_put() : - -WARNING: CPU: 0 PID: 1185 at drivers/gpu/drm/meson/meson_crtc.c:157 meson_crtc_atomic_begin+0x78/0x80 -[...] -Call trace: - meson_crtc_atomic_begin+0x78/0x80 - drm_atomic_helper_commit_planes+0x140/0x218 - drm_atomic_helper_commit_tail+0x38/0x80 - commit_tail+0x7c/0x80 - drm_atomic_helper_commit+0xdc/0x150 - drm_atomic_commit+0x54/0x60 - restore_fbdev_mode_atomic+0x198/0x238 - restore_fbdev_mode+0x6c/0x1c0 - drm_fb_helper_restore_fbdev_mode_unlocked+0x7c/0xf0 - drm_fb_helper_set_par+0x34/0x60 - drm_fb_helper_hotplug_event.part.28+0xb8/0xc8 - drm_fbdev_client_hotplug+0xa4/0xe0 - drm_client_dev_hotplug+0x90/0xe0 - drm_kms_helper_hotplug_event+0x3c/0x48 - drm_helper_hpd_irq_event+0x134/0x168 - dw_hdmi_top_thread_irq+0x3c/0x50 -[...] -WARNING: CPU: 0 PID: 1185 at drivers/gpu/drm/drm_vblank.c:1026 drm_vblank_put+0xb4/0xc8 -[...] - Call trace: - drm_vblank_put+0xb4/0xc8 - drm_crtc_vblank_put+0x24/0x30 - drm_atomic_helper_wait_for_vblanks.part.9+0x130/0x2b8 - drm_atomic_helper_commit_tail+0x68/0x80 -[...] - -The issue is the vblank need to be enabled in any occurence of : -- atomic_enable() -- atomic_begin() and state->enable == true, which was not the case - -Moving the CRTC enable code to a common function and calling in one -of these occurence solves this race condition and makes sure vblank -is enabled in each call to _atomic_begin() from the HPD event leading -to drm_atomic_helper_commit_planes(). - -To Summarize : -- Make sure that the CRTC code will calls the drm_crtc_vblank_on/off -- *Really* mask the Vsync IRQ -- Initialize and enable vblank at the first _atomic_begin()/_atomic_enable() - -Signed-off-by: Neil Armstrong - ---- - drivers/gpu/drm/meson/meson_crtc.c | 25 +++++++++++++++++++++++-- - 1 file changed, 23 insertions(+), 2 deletions(-) - -diff --git a/drivers/gpu/drm/meson/meson_crtc.c b/drivers/gpu/drm/meson/meson_crtc.c -index 6099997..f8e260b 100644 ---- a/drivers/gpu/drm/meson/meson_crtc.c -+++ b/drivers/gpu/drm/meson/meson_crtc.c -@@ -46,6 +46,7 @@ struct meson_crtc { - struct drm_crtc base; - struct drm_pending_vblank_event *event; - struct meson_drm *priv; -+ bool enabled; - }; - #define to_meson_crtc(x) container_of(x, struct meson_crtc, base) - -@@ -81,8 +82,7 @@ static const struct drm_crtc_funcs meson_crtc_funcs = { - - }; - --static void meson_crtc_atomic_enable(struct drm_crtc *crtc, -- struct drm_crtc_state *old_state) -+static void meson_crtc_enable(struct drm_crtc *crtc) - { - struct meson_crtc *meson_crtc = to_meson_crtc(crtc); - struct drm_crtc_state *crtc_state = crtc->state; -@@ -106,6 +106,22 @@ static void meson_crtc_atomic_enable(struct drm_crtc *crtc, - writel_bits_relaxed(VPP_POSTBLEND_ENABLE, VPP_POSTBLEND_ENABLE, - priv->io_base + _REG(VPP_MISC)); - -+ drm_crtc_vblank_on(crtc); -+ -+ meson_crtc->enabled = true; -+} -+ -+static void meson_crtc_atomic_enable(struct drm_crtc *crtc, -+ struct drm_crtc_state *old_state) -+{ -+ struct meson_crtc *meson_crtc = to_meson_crtc(crtc); -+ struct meson_drm *priv = meson_crtc->priv; -+ -+ DRM_DEBUG_DRIVER("\n"); -+ -+ if (!meson_crtc->enabled) -+ meson_crtc_enable(crtc); -+ - priv->viu.osd1_enabled = true; - - drm_crtc_vblank_on(crtc); -@@ -139,6 +155,8 @@ static void meson_crtc_atomic_disable(struct drm_crtc *crtc, - - crtc->state->event = NULL; - } -+ -+ meson_crtc->enabled = false; - } - - static void meson_crtc_atomic_begin(struct drm_crtc *crtc, -@@ -147,6 +165,9 @@ static void meson_crtc_atomic_begin(struct drm_crtc *crtc, - struct meson_crtc *meson_crtc = to_meson_crtc(crtc); - unsigned long flags; - -+ if (crtc->state->enable && !meson_crtc->enabled) -+ meson_crtc_enable(crtc); -+ - if (crtc->state->event) { - WARN_ON(drm_crtc_vblank_get(crtc) != 0); - diff --git a/patch/kernel/meson64-dev/2002-meson-drm-enable-fast_io.patch b/patch/kernel/meson64-dev/2002-meson-drm-enable-fast_io.patch deleted file mode 100644 index 35142c2fa..000000000 --- a/patch/kernel/meson64-dev/2002-meson-drm-enable-fast_io.patch +++ /dev/null @@ -1,163 +0,0 @@ -From 995b278e4723b26f8ebf0e7c119286d16c712747 Mon Sep 17 00:00:00 2001 -From: Lyude Paul -Date: Sat, 24 Nov 2018 14:12:38 -0500 -Subject: [PATCH] drm/meson: Enable fast_io in meson_dw_hdmi_regmap_config - -Seeing as we use this registermap in the context of our IRQ handlers, we -need to be using spinlocks for reading/writing registers so that we can -still read them from IRQ handlers without having to grab any mutexes and -accidentally sleep. We don't currently do this, as pointed out by -lockdep: - -[ 18.403770] BUG: sleeping function called from invalid context at kernel/locking/mutex.c:908 -[ 18.406744] in_atomic(): 1, irqs_disabled(): 128, pid: 68, name: kworker/u17:0 -[ 18.413864] INFO: lockdep is turned off. -[ 18.417675] irq event stamp: 12 -[ 18.420778] hardirqs last enabled at (11): [] _raw_spin_unlock_irq+0x2c/0x60 -[ 18.429510] hardirqs last disabled at (12): [] __schedule+0xc4/0xa60 -[ 18.437345] softirqs last enabled at (0): [] copy_process.isra.4.part.5+0x4d8/0x1c50 -[ 18.446684] softirqs last disabled at (0): [<0000000000000000>] (null) -[ 18.453979] CPU: 0 PID: 68 Comm: kworker/u17:0 Tainted: G W O 4.20.0-rc3Lyude-Test+ #9 -[ 18.469839] Hardware name: amlogic khadas-vim2/khadas-vim2, BIOS 2018.07-rc2-armbian 09/11/2018 -[ 18.480037] Workqueue: hci0 hci_power_on [bluetooth] -[ 18.487138] Call trace: -[ 18.494192] dump_backtrace+0x0/0x1b8 -[ 18.501280] show_stack+0x14/0x20 -[ 18.508361] dump_stack+0xbc/0xf4 -[ 18.515427] ___might_sleep+0x140/0x1d8 -[ 18.522515] __might_sleep+0x50/0x88 -[ 18.529582] __mutex_lock+0x60/0x870 -[ 18.536621] mutex_lock_nested+0x1c/0x28 -[ 18.543660] regmap_lock_mutex+0x10/0x18 -[ 18.550696] regmap_read+0x38/0x70 -[ 18.557727] dw_hdmi_hardirq+0x58/0x138 [dw_hdmi] -[ 18.564804] __handle_irq_event_percpu+0xac/0x410 -[ 18.571891] handle_irq_event_percpu+0x34/0x88 -[ 18.578982] handle_irq_event+0x48/0x78 -[ 18.586051] handle_fasteoi_irq+0xac/0x160 -[ 18.593061] generic_handle_irq+0x24/0x38 -[ 18.599989] __handle_domain_irq+0x60/0xb8 -[ 18.606857] gic_handle_irq+0x50/0xa0 -[ 18.613659] el1_irq+0xb4/0x130 -[ 18.620394] debug_lockdep_rcu_enabled+0x2c/0x30 -[ 18.627111] schedule+0x38/0xa0 -[ 18.633781] schedule_timeout+0x3a8/0x510 -[ 18.640389] wait_for_common+0x15c/0x180 -[ 18.646905] wait_for_completion+0x14/0x20 -[ 18.653319] mmc_wait_for_req_done+0x28/0x168 -[ 18.659693] mmc_wait_for_req+0xa8/0xe8 -[ 18.665978] mmc_wait_for_cmd+0x64/0x98 -[ 18.672180] mmc_io_rw_direct_host+0x94/0x130 -[ 18.678385] mmc_io_rw_direct+0x10/0x18 -[ 18.684516] sdio_enable_func+0xe8/0x1d0 -[ 18.690627] btsdio_open+0x24/0xc0 [btsdio] -[ 18.696821] hci_dev_do_open+0x64/0x598 [bluetooth] -[ 18.703025] hci_power_on+0x50/0x270 [bluetooth] -[ 18.709163] process_one_work+0x2a0/0x6e0 -[ 18.715252] worker_thread+0x40/0x448 -[ 18.721310] kthread+0x12c/0x130 -[ 18.727326] ret_from_fork+0x10/0x1c -[ 18.735555] ------------[ cut here ]------------ -[ 18.741430] do not call blocking ops when !TASK_RUNNING; state=2 set at [<000000006265ec59>] wait_for_common+0x140/0x180 -[ 18.752417] WARNING: CPU: 0 PID: 68 at kernel/sched/core.c:6096 __might_sleep+0x7c/0x88 -[ 18.760553] Modules linked in: dm_mirror dm_region_hash dm_log dm_mod -btsdio bluetooth snd_soc_hdmi_codec dw_hdmi_i2s_audio ecdh_generic -brcmfmac brcmutil cfg80211 rfkill ir_nec_decoder meson_dw_hdmi(O) -dw_hdmi rc_geekbox meson_rng meson_ir ao_cec rng_core rc_core cec -leds_pwm efivars nfsd ip_tables x_tables crc32_generic f2fs uas -meson_gxbb_wdt pwm_meson efivarfs ipv6 -[ 18.799469] CPU: 0 PID: 68 Comm: kworker/u17:0 Tainted: G W O 4.20.0-rc3Lyude-Test+ #9 -[ 18.808858] Hardware name: amlogic khadas-vim2/khadas-vim2, BIOS 2018.07-rc2-armbian 09/11/2018 -[ 18.818045] Workqueue: hci0 hci_power_on [bluetooth] -[ 18.824088] pstate: 80000085 (Nzcv daIf -PAN -UAO) -[ 18.829891] pc : __might_sleep+0x7c/0x88 -[ 18.835722] lr : __might_sleep+0x7c/0x88 -[ 18.841256] sp : ffff000008003cb0 -[ 18.846751] x29: ffff000008003cb0 x28: 0000000000000000 -[ 18.852269] x27: ffff00000938e000 x26: ffff800010283000 -[ 18.857726] x25: ffff800010353280 x24: ffff00000868ef50 -[ 18.863166] x23: 0000000000000000 x22: 0000000000000000 -[ 18.868551] x21: 0000000000000000 x20: 000000000000038c -[ 18.873850] x19: ffff000008cd08c0 x18: 0000000000000010 -[ 18.879081] x17: ffff000008a68cb0 x16: 0000000000000000 -[ 18.884197] x15: 0000000000aaaaaa x14: 0e200e200e200e20 -[ 18.889239] x13: 0000000000000001 x12: 00000000ffffffff -[ 18.894261] x11: ffff000008adfa48 x10: 0000000000000001 -[ 18.899517] x9 : ffff0000092a0158 x8 : 0000000000000000 -[ 18.904674] x7 : ffff00000812136c x6 : 0000000000000000 -[ 18.909895] x5 : 0000000000000000 x4 : 0000000000000001 -[ 18.915080] x3 : 0000000000000007 x2 : 0000000000000007 -[ 18.920269] x1 : 99ab8e9ebb6c8500 x0 : 0000000000000000 -[ 18.925443] Call trace: -[ 18.929904] __might_sleep+0x7c/0x88 -[ 18.934311] __mutex_lock+0x60/0x870 -[ 18.938687] mutex_lock_nested+0x1c/0x28 -[ 18.943076] regmap_lock_mutex+0x10/0x18 -[ 18.947453] regmap_read+0x38/0x70 -[ 18.951842] dw_hdmi_hardirq+0x58/0x138 [dw_hdmi] -[ 18.956269] __handle_irq_event_percpu+0xac/0x410 -[ 18.960712] handle_irq_event_percpu+0x34/0x88 -[ 18.965176] handle_irq_event+0x48/0x78 -[ 18.969612] handle_fasteoi_irq+0xac/0x160 -[ 18.974058] generic_handle_irq+0x24/0x38 -[ 18.978501] __handle_domain_irq+0x60/0xb8 -[ 18.982938] gic_handle_irq+0x50/0xa0 -[ 18.987351] el1_irq+0xb4/0x130 -[ 18.991734] debug_lockdep_rcu_enabled+0x2c/0x30 -[ 18.996180] schedule+0x38/0xa0 -[ 19.000609] schedule_timeout+0x3a8/0x510 -[ 19.005064] wait_for_common+0x15c/0x180 -[ 19.009513] wait_for_completion+0x14/0x20 -[ 19.013951] mmc_wait_for_req_done+0x28/0x168 -[ 19.018402] mmc_wait_for_req+0xa8/0xe8 -[ 19.022809] mmc_wait_for_cmd+0x64/0x98 -[ 19.027177] mmc_io_rw_direct_host+0x94/0x130 -[ 19.031563] mmc_io_rw_direct+0x10/0x18 -[ 19.035922] sdio_enable_func+0xe8/0x1d0 -[ 19.040294] btsdio_open+0x24/0xc0 [btsdio] -[ 19.044742] hci_dev_do_open+0x64/0x598 [bluetooth] -[ 19.049228] hci_power_on+0x50/0x270 [bluetooth] -[ 19.053687] process_one_work+0x2a0/0x6e0 -[ 19.058143] worker_thread+0x40/0x448 -[ 19.062608] kthread+0x12c/0x130 -[ 19.067064] ret_from_fork+0x10/0x1c -[ 19.071513] irq event stamp: 12 -[ 19.075937] hardirqs last enabled at (11): [] _raw_spin_unlock_irq+0x2c/0x60 -[ 19.083560] hardirqs last disabled at (12): [] __schedule+0xc4/0xa60 -[ 19.091401] softirqs last enabled at (0): [] copy_process.isra.4.part.5+0x4d8/0x1c50 -[ 19.100801] softirqs last disabled at (0): [<0000000000000000>] (null) -[ 19.108135] ---[ end trace 38c4920787b88c75 ]--- - -So, fix this by enabling the fast_io option in our regmap config so that -regmap uses spinlocks for locking instead of mutexes. - -Signed-off-by: Lyude Paul -Fixes: 3f68be7d8e96 ("drm/meson: Add support for HDMI encoder and DW-HDMI bridge + PHY") -Cc: Daniel Vetter -Cc: Neil Armstrong -Cc: Carlo Caione -Cc: Kevin Hilman -Cc: dri-devel@lists.freedesktop.org -Cc: linux-amlogic@lists.infradead.org -Cc: linux-arm-kernel@lists.infradead.org -Cc: # v4.12+ -Acked-by: Neil Armstrong -Signed-off-by: Neil Armstrong -Link: https://patchwork.freedesktop.org/patch/msgid/20181124191238.28276-1-lyude@redhat.com -Signed-off-by: Sean Paul ---- - drivers/gpu/drm/meson/meson_dw_hdmi.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/drivers/gpu/drm/meson/meson_dw_hdmi.c b/drivers/gpu/drm/meson/meson_dw_hdmi.c -index df7247cd93f9..2cb2ad26d716 100644 ---- a/drivers/gpu/drm/meson/meson_dw_hdmi.c -+++ b/drivers/gpu/drm/meson/meson_dw_hdmi.c -@@ -706,6 +706,7 @@ static const struct regmap_config meson_dw_hdmi_regmap_config = { - .reg_read = meson_dw_hdmi_reg_read, - .reg_write = meson_dw_hdmi_reg_write, - .max_register = 0x10000, -+ .fast_io = true, - }; - - static bool meson_hdmi_connector_is_available(struct device *dev) diff --git a/patch/kernel/meson64-dev/general-dwc2-partial-powerdown-fix.patch b/patch/kernel/meson64-dev/general-dwc2-partial-powerdown-fix.patch new file mode 100644 index 000000000..ed57a28ac --- /dev/null +++ b/patch/kernel/meson64-dev/general-dwc2-partial-powerdown-fix.patch @@ -0,0 +1,12 @@ +diff --git a/drivers/usb/dwc2/params.c b/drivers/usb/dwc2/params.c +index bf7052e03..93561a2df 100644 +--- a/drivers/usb/dwc2/params.c ++++ b/drivers/usb/dwc2/params.c +@@ -110,6 +110,7 @@ static void dwc2_set_amlogic_params(struct dwc2_hsotg *hsotg) + p->phy_type = DWC2_PHY_TYPE_PARAM_UTMI; + p->ahbcfg = GAHBCFG_HBSTLEN_INCR8 << + GAHBCFG_HBSTLEN_SHIFT; ++ p->power_down = false; + } + + static void dwc2_set_amcc_params(struct dwc2_hsotg *hsotg) diff --git a/patch/kernel/rockchip-dev/usb-dwc2-disable-power_down-on-rockchip-devices.patch.disabled b/patch/kernel/rockchip-dev/usb-dwc2-disable-power_down-on-rockchip-devices.patch.disabled deleted file mode 100644 index 294ecb6c5..000000000 --- a/patch/kernel/rockchip-dev/usb-dwc2-disable-power_down-on-rockchip-devices.patch.disabled +++ /dev/null @@ -1,21 +0,0 @@ -Disables the power down feature to make USB host and OTG ports work -again on rockchip device due to some rework done in kernel >= 4.18. -This patch is based upon the one from Hal Emmerich available at -, but the original patch -had some minor issues: - -- whitespaces instead of tabs triggers an error when patch is used -- power_down attribute is set to 0 and not *false* like sorrounding code - -diff --git a/drivers/usb/dwc2/params.c b/drivers/usb/dwc2/params.c -index f03e41879224..492607adc506 100644 ---- a/drivers/usb/dwc2/params.c -+++ b/drivers/usb/dwc2/params.c -@@ -82,6 +82,7 @@ static void dwc2_set_rk_params(struct dwc2_hsotg *hsotg) - p->host_perio_tx_fifo_size = 256; - p->ahbcfg = GAHBCFG_HBSTLEN_INCR16 << - GAHBCFG_HBSTLEN_SHIFT; -+ p->power_down = false; - } - - static void dwc2_set_ltq_params(struct dwc2_hsotg *hsotg)