5.8.10-rc1 review
Subsystems (3)
Greg Kroah-Hartman
maintainerPATCH 153/177 fbcon: remove now unusued softback_lines cursor() argument
In reply to Greg Kroah-HartmanFrom: Linus Torvalds <[email protected]>
commit 06a0df4d1b8b13b551668e47b11fd7629033b7df upstream.
Since the softscroll code got removed, this argument is always zero and makes no sense any more.
--- drivers/video/fbdev/core/bitblit.c | 11 +---------- drivers/video/fbdev/core/fbcon.c | 4 ++-- drivers/video/fbdev/core/fbcon.h | 2 +- drivers/video/fbdev/core/fbcon_ccw.c | 11 +---------- drivers/video/fbdev/core/fbcon_cw.c | 11 +---------- drivers/video/fbdev/core/fbcon_ud.c | 11 +---------- drivers/video/fbdev/core/tileblit.c | 2 +- 7 files changed, 8 insertions(+), 44 deletions(-)
drivers/video/fbdev/core/bitblit.c +1 -10
@@ -234,7 +234,7 @@ static void bit_clear_margins(struct vc_ }static void bit_cursor (struct vc_data *vc,struct fb_info *info,int mode, -int softback_lines,int fg,int bg) +int fg,int bg) {struct fb_cursor cursor;struct fbcon_ops *ops = info->fbcon_par;
@@ -247,15 +247,6 @@ static void bit_cursor(struct vc_data *v cursor.set =0 ; -if (softback_lines) { -if (y + softback_lines >= vc->vc_rows) { - mode =CM_ERASE ; - ops->cursor_flash =0 ; -return ; - }else - y += softback_lines; - } - c =scr_readw ((u16 *) vc->vc_pos); attribute =get_attribute (info, c); src = vc->vc_font.data + ((c & charmask) * (w * vc->vc_font.height));
drivers/video/fbdev/core/fbcon.c +2 -2
@@ -394,7 +394,7 @@ static void fb_flashcursor(struct work_s c =scr_readw ((u16 *) vc->vc_pos); mode = (!ops->cursor_flash || ops->cursor_state.enable) ?CM_ERASE :CM_DRAW ; - ops->cursor (vc, info, mode,0 ,get_color (vc, info, c,1 ), + ops->cursor (vc, info, mode,get_color (vc, info, c,1 ),get_color (vc, info, c,0 ));console_unlock (); }
@@ -1345,7 +1345,7 @@ static void fbcon_cursor(struct vc_data ops->cursor_flash = (mode ==CM_ERASE ) ?0 :1 ; - ops->cursor (vc, info, mode,0 ,get_color (vc, info, c,1 ), + ops->cursor (vc, info, mode,get_color (vc, info, c,1 ),get_color (vc, info, c,0 )); }
drivers/video/fbdev/core/fbcon.h +1 -1
@@ -62,7 +62,7 @@ struct fbcon_ops {void (*clear_margins)(struct vc_data *vc,struct fb_info *info,int color,int bottom_only);void (*cursor)(struct vc_data *vc,struct fb_info *info,int mode, -int softback_lines,int fg,int bg); +int fg,int bg);int (*update_start)(struct fb_info *info);int (*rotate_font)(struct fb_info *info,struct vc_data *vc);struct fb_var_screeninfo var;/* copy of the current fb_var_screeninfo */
drivers/video/fbdev/core/fbcon_ccw.c +1 -10
@@ -219,7 +219,7 @@ static void ccw_clear_margins(struct vc_ }static void ccw_cursor (struct vc_data *vc,struct fb_info *info,int mode, -int softback_lines,int fg,int bg) +int fg,int bg) {struct fb_cursor cursor;struct fbcon_ops *ops = info->fbcon_par;
@@ -236,15 +236,6 @@ static void ccw_cursor(struct vc_data *v cursor.set =0 ; -if (softback_lines) { -if (y + softback_lines >= vc->vc_rows) { - mode =CM_ERASE ; - ops->cursor_flash =0 ; -return ; - }else - y += softback_lines; - } - c =scr_readw ((u16 *) vc->vc_pos); attribute =get_attribute (info, c); src = ops->fontbuffer + ((c & charmask) * (w * vc->vc_font.width));
drivers/video/fbdev/core/fbcon_cw.c +1 -10
@@ -202,7 +202,7 @@ static void cw_clear_margins(struct vc_d }static void cw_cursor (struct vc_data *vc,struct fb_info *info,int mode, -int softback_lines,int fg,int bg) +int fg,int bg) {struct fb_cursor cursor;struct fbcon_ops *ops = info->fbcon_par;
@@ -219,15 +219,6 @@ static void cw_cursor(struct vc_data *vc cursor.set =0 ; -if (softback_lines) { -if (y + softback_lines >= vc->vc_rows) { - mode =CM_ERASE ; - ops->cursor_flash =0 ; -return ; - }else - y += softback_lines; - } - c =scr_readw ((u16 *) vc->vc_pos); attribute =get_attribute (info, c); src = ops->fontbuffer + ((c & charmask) * (w * vc->vc_font.width));
drivers/video/fbdev/core/fbcon_ud.c +1 -10
@@ -249,7 +249,7 @@ static void ud_clear_margins(struct vc_d }static void ud_cursor (struct vc_data *vc,struct fb_info *info,int mode, -int softback_lines,int fg,int bg) +int fg,int bg) {struct fb_cursor cursor;struct fbcon_ops *ops = info->fbcon_par;
@@ -267,15 +267,6 @@ static void ud_cursor(struct vc_data *vc cursor.set =0 ; -if (softback_lines) { -if (y + softback_lines >= vc->vc_rows) { - mode =CM_ERASE ; - ops->cursor_flash =0 ; -return ; - }else - y += softback_lines; - } - c =scr_readw ((u16 *) vc->vc_pos); attribute =get_attribute (info, c); src = ops->fontbuffer + ((c & charmask) * (w * vc->vc_font.height));
drivers/video/fbdev/core/tileblit.c +1 -1
@@ -80,7 +80,7 @@ static void tile_clear_margins(struct vc }static void tile_cursor (struct vc_data *vc,struct fb_info *info,int mode, -int softback_lines,int fg,int bg) +int fg,int bg) {struct fb_tilecursor cursor;int use_sw = (vc->vc_cursor_type &0x10 );
Greg Kroah-Hartman
maintainerPATCH 154/177 vgacon: remove software scrollback support
In reply to Greg Kroah-HartmanFrom: Linus Torvalds <[email protected]>
commit 973c096f6a85e5b5f2a295126ba6928d9a6afd45 upstream.
Yunhai Zhang recently fixed a VGA software scrollback bug in commit ebfdfeeae8c0 ("vgacon: Fix for missing check in scrollback handling"), but that then made people look more closely at some of this code, and there were more problems on the vgacon side, but also the fbcon software scrollback.
We don't really have anybody who maintains this code - probably because nobody actually _uses_ it any more. Sure, people still use both VGA and the framebuffer consoles, but they are no longer the main user interfaces to the kernel, and haven't been for decades, so these kinds of extra features end up bitrotting and not really being used.
So rather than try to maintain a likely unused set of code, I'll just aggressively remove it, and see if anybody even notices. Maybe there are people who haven't jumped on the whole GUI badnwagon yet, and think it's just a fad. And maybe those people use the scrollback code.
If that turns out to be the case, we can resurrect this again, once we've found the sucker^Wmaintainer for it who actually uses it.
--- arch/powerpc/configs/pasemi_defconfig | 1 arch/powerpc/configs/ppc6xx_defconfig | 1 arch/x86/configs/i386_defconfig | 1 arch/x86/configs/x86_64_defconfig | 1 drivers/video/console/Kconfig | 46 ------- drivers/video/console/vgacon.c | 221 ---------------------------------- 6 files changed, 1 insertion(+), 270 deletions(-)
arch/powerpc/configs/pasemi_defconfig +0 -1
@@ -109,7 +109,6 @@ CONFIG_FB_NVIDIA=y CONFIG_FB_NVIDIA_I2C=y CONFIG_FB_RADEON=y # CONFIG_LCD_CLASS_DEVICE is not set -CONFIG_VGACON_SOFT_SCROLLBACK=y CONFIG_LOGO=y CONFIG_SOUND=y CONFIG_SND=y
arch/powerpc/configs/ppc6xx_defconfig +0 -1
@@ -772,7 +772,6 @@ CONFIG_FB_TRIDENT=m CONFIG_FB_SM501=m CONFIG_FB_IBM_GXT4500=y CONFIG_LCD_PLATFORM=m -CONFIG_VGACON_SOFT_SCROLLBACK=y CONFIG_FRAMEBUFFER_CONSOLE=y CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y CONFIG_LOGO=y
arch/x86/configs/i386_defconfig +0 -1
@@ -202,7 +202,6 @@ CONFIG_FB_MODE_HELPERS=y CONFIG_FB_TILEBLITTING=y CONFIG_FB_EFI=y # CONFIG_LCD_CLASS_DEVICE is not set -CONFIG_VGACON_SOFT_SCROLLBACK=y CONFIG_LOGO=y # CONFIG_LOGO_LINUX_MONO is not set # CONFIG_LOGO_LINUX_VGA16 is not set
arch/x86/configs/x86_64_defconfig +0 -1
@@ -197,7 +197,6 @@ CONFIG_FB_MODE_HELPERS=y CONFIG_FB_TILEBLITTING=y CONFIG_FB_EFI=y # CONFIG_LCD_CLASS_DEVICE is not set -CONFIG_VGACON_SOFT_SCROLLBACK=y CONFIG_LOGO=y # CONFIG_LOGO_LINUX_MONO is not set # CONFIG_LOGO_LINUX_VGA16 is not set
drivers/video/console/Kconfig +0 -46
52 lines not on this page · raw message
drivers/video/console/vgacon.c +1 -220
257 lines not on this page · raw message
Greg Kroah-Hartman
maintainerPATCH 155/177 KVM: VMX: Dont freeze guest when event delivery causes an APIC-access exit
In reply to Greg Kroah-HartmanFrom: Wanpeng Li <[email protected]>
commit 99b82a1437cb31340dbb2c437a2923b9814a7b15 upstream.
According to SDM 27.2.4, Event delivery causes an APIC-access VM exit. Don't report internal error and freeze guest when event delivery causes an APIC-access exit, it is handleable and the event will be re-injected during the next vmentry.
Message-Id: <[email protected]>
--- arch/x86/kvm/vmx/vmx.c | 1 + 1 file changed, 1 insertion(+)
arch/x86/kvm/vmx/vmx.c +1 -0
@@ -6028,6 +6028,7 @@ static int vmx_handle_exit(struct kvm_vc (exit_reason !=EXIT_REASON_EXCEPTION_NMI && exit_reason !=EXIT_REASON_EPT_VIOLATION && exit_reason !=EXIT_REASON_PML_FULL && + exit_reason !=EXIT_REASON_APIC_ACCESS && exit_reason != EXIT_REASON_TASK_SWITCH)) { vcpu->run->exit_reason = KVM_EXIT_INTERNAL_ERROR; vcpu->run->internal.suberror =KVM_INTERNAL_ERROR_DELIVERY_EV ;
Greg Kroah-Hartman
maintainerPATCH 156/177 KVM: arm64: Do not try to map PUDs when they are folded into PMD
In reply to Greg Kroah-HartmanFrom: Marc Zyngier <[email protected]>
commit 3fb884ffe921c99483a84b0175f3c03f048e9069 upstream.
For the obscure cases where PMD and PUD are the same size (64kB pages with 42bit VA, for example, which results in only two levels of page tables), we can't map anything as a PUD, because there is... erm... no PUD to speak of. Everything is either a PMD or a PTE.
So let's only try and map a PUD when its size is different from that of a PMD.
--- arch/arm64/kvm/mmu.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
arch/arm64/kvm/mmu.c +6 -1
@@ -1968,7 +1968,12 @@ static int user_mem_abort(struct kvm_vcp (fault_status ==FSC_PERM &&stage2_is_exec (kvm, fault_ipa, vma_pagesize)); -if (vma_pagesize ==PUD_SIZE ) { +/* +* If PUD_SIZE == PMD_SIZE, there is no real PUD level, and +* all we have is a 2-level page table. Trying to map a PUD in +* this case would be fatally wrong. +*/ +if (PUD_SIZE !=PMD_SIZE && vma_pagesize ==PUD_SIZE ) {pud_t new_pud =kvm_pfn_pud (pfn, mem_type); new_pud =kvm_pud_mkhuge (new_pud);
Greg Kroah-Hartman
maintainerPATCH 157/177 kvm x86/mmu: use KVM_REQ_MMU_SYNC to sync when needed
In reply to Greg Kroah-HartmanFrom: Lai Jiangshan <[email protected]>
commit f6f6195b888c28a0b59ceb0562daff92a2be86c3 upstream.
When kvm_mmu_get_page() gets a page with unsynced children, the spt pagetable is unsynchronized with the guest pagetable. But the guest might not issue a "flush" operation on it when the pagetable entry is changed from zero or other cases. The hypervisor has the responsibility to synchronize the pagetables.
KVM behaved as above for many years, But commit 8c8560b83390 ("KVM: x86/mmu: Use KVM_REQ_TLB_FLUSH_CURRENT for MMU specific flushes") inadvertently included a line of code to change it without giving any reason in the changelog. It is clear that the commit's intention was to change KVM_REQ_TLB_FLUSH -> KVM_REQ_TLB_FLUSH_CURRENT, so we don't needlessly flush other contexts; however, one of the hunks changed a nearby KVM_REQ_MMU_SYNC instead. This patch changes it back.
Message-Id: <[email protected]>
--- arch/x86/kvm/mmu/mmu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/x86/kvm/mmu/mmu.c +1 -1
@@ -2521,7 +2521,7 @@ static struct kvm_mmu_page *kvm_mmu_get_ }if (sp->unsync_children) -kvm_make_request (KVM_REQ_TLB_FLUSH_CURRENT , vcpu); +kvm_make_request (KVM_REQ_MMU_SYNC , vcpu);__clear_sp_write_flooding_count (sp);trace_kvm_mmu_get_page (sp, false);
Greg Kroah-Hartman
maintainerPATCH 158/177 KVM: fix memory leak in kvm_io_bus_unregister_dev()
In reply to Greg Kroah-HartmanFrom: Rustam Kovhaev <[email protected]>
commit f65886606c2d3b562716de030706dfe1bea4ed5e upstream.
when kmalloc() fails in kvm_io_bus_unregister_dev(), before removing the bus, we should iterate over all other devices linked to it and call kvm_iodevice_destructor() for them
Message-Id: <[email protected]>
--- virt/kvm/kvm_main.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-)
virt/kvm/kvm_main.c +12 -9
@@ -4269,7 +4269,7 @@ int kvm_io_bus_register_dev(struct kvm *void kvm_io_bus_unregister_dev (struct kvm *kvm,enum kvm_bus bus_idx,struct kvm_io_device *dev) { -int i; +int i, j;struct kvm_io_bus *new_bus, *bus; bus =kvm_get_bus (kvm, bus_idx);
@@ -4286,17 +4286,20 @@ void kvm_io_bus_unregister_dev(struct kv new_bus =kmalloc (struct_size (bus, range, bus->dev_count -1 ),GFP_KERNEL_ACCOUNT ); -if (!new_bus) { +if (new_bus) { +memcpy (new_bus, bus,sizeof (*bus) + i *sizeof (struct kvm_io_range )); + new_bus->dev_count--; +memcpy (new_bus->range + i, bus->range + i +1 , + (new_bus->dev_count - i) *sizeof (struct kvm_io_range )); + }else {pr_err ("kvm: failed to shrink bus, removing it completely\n" ); - goto broken; +for (j =0 ; j < bus->dev_count; j++) { +if (j == i) +continue ; +kvm_iodevice_destructor (bus->range[j].dev); + } } -memcpy (new_bus, bus,sizeof (*bus) + i *sizeof (struct kvm_io_range )); - new_bus->dev_count--; -memcpy (new_bus->range + i, bus->range + i +1 , - (new_bus->dev_count - i) *sizeof (struct kvm_io_range )); - -broken:rcu_assign_pointer (kvm->buses[bus_idx], new_bus);synchronize_srcu_expedited (&kvm->srcu);kfree (bus);
Greg Kroah-Hartman
maintainerPATCH 159/177 Revert "usb: dwc3: meson-g12a: fix shared reset control use"
In reply to Greg Kroah-HartmanFrom: Amjad Ouled-Ameur <[email protected]>
commit a6498d51821edf9615b42b968fb419a40197a982 upstream.
This reverts commit 7a410953d1fb4dbe91ffcfdee9cbbf889d19b0d7.
This commit breaks USB on meson-gxl-s905x-libretech-cc. Reverting the change solves the issue.
In fact, according to the reset framework code, consumers must not use reset_control_(de)assert() on shared reset lines when reset_control_reset has been used, and vice-versa.
Moreover, with this commit, usb is not guaranted to be reset since the reset is likely to be initially deasserted.
Reverting the commit will bring back the suspend warning mentioned in the commit description. Nevertheless, a warning is much less critical than breaking dwc3-meson-g12a USB completely. We will address the warning issue in another way as a 2nd step.
--- drivers/usb/dwc3/dwc3-meson-g12a.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-)
drivers/usb/dwc3/dwc3-meson-g12a.c +6 -9
@@ -737,13 +737,13 @@ static int dwc3_meson_g12a_probe(struct goto err_disable_clks; } - ret =reset_control_deassert (priv->reset); + ret =reset_control_reset (priv->reset);if (ret) - goto err_assert_reset; + goto err_disable_clks; ret =dwc3_meson_g12a_get_phys (priv);if (ret) - goto err_assert_reset; + goto err_disable_clks; ret = priv->drvdata->setup_regmaps (priv, base);if (ret)
@@ -752,7 +752,7 @@ static int dwc3_meson_g12a_probe(structif (priv->vbus) { ret =regulator_enable (priv->vbus);if (ret) - goto err_assert_reset; + goto err_disable_clks; }/* Get dr_mode */
@@ -765,13 +765,13 @@ static int dwc3_meson_g12a_probe(struct ret = priv->drvdata->usb_init (priv);if (ret) - goto err_assert_reset; + goto err_disable_clks;/* Init PHYs */ for (i =0 ; i <PHY_COUNT ; ++i) { ret =phy_init (priv->phys[i]);if (ret) - goto err_assert_reset; + goto err_disable_clks; }/* Set PHY Power */
@@ -809,9 +809,6 @@ err_phys_exit:for (i =0 ; i <PHY_COUNT ; ++i)phy_exit (priv->phys[i]); -err_assert_reset: -reset_control_assert (priv->reset); - err_disable_clks:clk_bulk_disable_unprepare (priv->drvdata->num_clks, priv->drvdata->clks);
Greg Kroah-Hartman
maintainerPATCH 160/177 debugfs: Fix module state check condition
In reply to Greg Kroah-HartmanFrom: Vladis Dronov <[email protected]>
commit e3b9fc7eec55e6fdc8beeed18f2ed207086341e2 upstream.
The '#ifdef MODULE' check in the original commit does not work as intended. The code under the check is not built at all if CONFIG_DEBUG_FS=y. Fix this by using a correct check.
--- fs/debugfs/file.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
fs/debugfs/file.c +2 -2
@@ -177,7 +177,7 @@ static int open_proxy_open(struct inode goto out;if (!fops_get (real_fops)) { -#ifdef MODULE +#ifdef CONFIG_MODULES if (real_fops->owner && real_fops->owner->state ==MODULE_STATE_GOING ) goto out;
@@ -312,7 +312,7 @@ static int full_proxy_open(struct inode goto out;if (!fops_get (real_fops)) { -#ifdef MODULE +#ifdef CONFIG_MODULES if (real_fops->owner && real_fops->owner->state ==MODULE_STATE_GOING ) goto out;
Greg Kroah-Hartman
maintainerPATCH 161/177 test_firmware: Test platform fw loading on non-EFI systems
In reply to Greg Kroah-HartmanFrom: Kees Cook <[email protected]>
commit baaabecfc80fad255f866563b53b8c7a3eec176e upstream.
On non-EFI systems, it wasn't possible to test the platform firmware loader because it will have never set "checked_fw" during __init. Instead, allow the test code to override this check. Additionally split the declarations into a private symbol namespace so there is greater enforcement of the symbol visibility.
--- drivers/firmware/efi/embedded-firmware.c | 10 +++++----- include/linux/efi_embedded_fw.h | 6 ++---- lib/test_firmware.c | 9 +++++++++ 3 files changed, 16 insertions(+), 9 deletions(-)
drivers/firmware/efi/embedded-firmware.c +5 -5
@@ -16,9 +16,9 @@/* Exported for use by lib/test_firmware.c only */ LIST_HEAD (efi_embedded_fw_list); -EXPORT_SYMBOL_GPL (efi_embedded_fw_list); - -static bool checked_for_fw; +EXPORT_SYMBOL_NS_GPL (efi_embedded_fw_list,TEST_FIRMWARE ); +bool efi_embedded_fw_checked; +EXPORT_SYMBOL_NS_GPL (efi_embedded_fw_checked,TEST_FIRMWARE );static const struct dmi_system_id *const embedded_fw_table[] = { #ifdef CONFIG_TOUCHSCREEN_DMI
@@ -119,14 +119,14 @@ void __init efi_check_for_embedded_firmw } } - checked_for_fw = true; + efi_embedded_fw_checked = true; }int efi_get_embedded_fw (const char *name,const u8 **data,size_t *size) {struct efi_embedded_fw *iter, *fw =NULL ; -if (!checked_for_fw) { +if (!efi_embedded_fw_checked) {pr_warn ("Warning %s called while we did not check for embedded fw\n" , __func__);return -ENOENT ;
include/linux/efi_embedded_fw.h +2 -4
@@ -8,8 +8,8 @@#define EFI_EMBEDDED_FW_PREFIX_LEN 8/* -* This struct and efi_embedded_fw_list are private to the efi-embedded fw -* implementation they are in this header for use by lib/test_firmware.c only! +* This struct is private to the efi-embedded fw implementation. +* They are in this header for use by lib/test_firmware.c only! */ struct efi_embedded_fw {struct list_head list;
@@ -18,8 +18,6 @@ struct efi_embedded_fw {size_t length; }; -extern struct list_head efi_embedded_fw_list; -/** * struct efi_embedded_fw_desc - This struct is used by the EFI embedded-fw * code to search for embedded firmwares.
lib/test_firmware.c +9 -0
@@ -26,6 +26,8 @@#include <linux/vmalloc.h> #include <linux/efi_embedded_fw.h> +MODULE_IMPORT_NS (TEST_FIRMWARE ); +#define TEST_FIRMWARE_NAME "test-firmware.bin"#define TEST_FIRMWARE_NUM_REQS 4#define TEST_FIRMWARE_BUF_SIZE SZ_1K
@@ -489,6 +491,9 @@ out:static DEVICE_ATTR_WO (trigger_request);#ifdef CONFIG_EFI_EMBEDDED_FIRMWARE +extern struct list_head efi_embedded_fw_list; +extern bool efi_embedded_fw_checked; +static ssize_t trigger_request_platform_store (struct device *dev,struct device_attribute *attr,const char *buf,size_t count)
@@ -501,6 +506,7 @@ static ssize_t trigger_request_platform_ };struct efi_embedded_fw efi_embedded_fw;const struct firmware *firmware =NULL ; +bool saved_efi_embedded_fw_checked;char *name;int rc;
@@ -513,6 +519,8 @@ static ssize_t trigger_request_platform_ efi_embedded_fw.data = (void *)test_data; efi_embedded_fw.length =sizeof (test_data);list_add (&efi_embedded_fw.list, &efi_embedded_fw_list); + saved_efi_embedded_fw_checked = efi_embedded_fw_checked; + efi_embedded_fw_checked = true;pr_info ("loading '%s'\n" , name); rc =firmware_request_platform (&firmware, name, dev);
@@ -530,6 +538,7 @@ static ssize_t trigger_request_platform_ rc = count; out: + efi_embedded_fw_checked = saved_efi_embedded_fw_checked;release_firmware (firmware);list_del (&efi_embedded_fw.list);kfree (name);
Greg Kroah-Hartman
maintainerPATCH 162/177 arm64: dts: imx8mp: correct sdma1 clk setting
In reply to Greg Kroah-HartmanFrom: Robin Gong <[email protected]>
commit 66138621f2473e29625dfa6bb229872203b71b90 upstream.
Correct sdma1 ahb clk, otherwise wrong 1:1 clk ratio will be chosed so that sdma1 function broken. sdma1 should use 1:2 clk, while sdma2/3 use 1:1.
--- arch/arm64/boot/dts/freescale/imx8mp.dtsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm64/boot/dts/freescale/imx8mp.dtsi +1 -1
@@ -688,7 +688,7 @@ reg = <0x30bd0000 0x10000>; interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>; clocks = <&clk IMX8MP_CLK_SDMA1_ROOT>, - <&clk IMX8MP_CLK_SDMA1_ROOT>; + <&clk IMX8MP_CLK_AHB>; clock-names = "ipg", "ahb"; #dma-cells = <3>; fsl,sdma-ram-script-name = "imx/sdma/sdma-imx7d.bin";
Greg Kroah-Hartman
maintainerPATCH 163/177 ARM: dts: vfxxx: Add syscon compatible with OCOTP
In reply to Greg Kroah-HartmanFrom: Chris Healy <[email protected]>
commit 2a6838d54128952ace6f0ca166dd8706abe46649 upstream.
Add syscon compatibility with Vybrid OCOTP node. This is required to access the UID.
--- arch/arm/boot/dts/vfxxx.dtsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm/boot/dts/vfxxx.dtsi +1 -1
@@ -495,7 +495,7 @@ }; ocotp: ocotp@400a5000 { - compatible = "fsl,vf610-ocotp"; + compatible = "fsl,vf610-ocotp", "syscon"; reg = <0x400a5000 0x1000>; clocks = <&clks VF610_CLK_OCOTP>; };
Greg Kroah-Hartman
maintainerPATCH 164/177 video: fbdev: fix OOB read in vga_8planes_imageblit()
In reply to Greg Kroah-HartmanFrom: Tetsuo Handa <[email protected]>
commit bd018a6a75cebb511bb55a0e7690024be975fe93 upstream.
syzbot is reporting OOB read at vga_8planes_imageblit() [1], for "cdat[y] >> 4" can become a negative value due to "const char *cdat".
[1] https://syzkaller.appspot.com/bug?id=0d7a0da1557dcd1989e00cb3692b26d4173b4132
--- drivers/video/fbdev/vga16fb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/video/fbdev/vga16fb.c +1 -1
@@ -1121,7 +1121,7 @@ static void vga_8planes_imageblit(structchar oldop =setop (0 );char oldsr =setsr (0 );char oldmask =selectmask (); -const char *cdat = image->data; +const unsigned char *cdat = image->data;u32 dx = image->dx;char __iomem *where;int y;
Greg Kroah-Hartman
maintainerPATCH 165/177 staging: greybus: audio: fix uninitialized value issue
In reply to Greg Kroah-HartmanFrom: Vaibhav Agarwal <[email protected]>
commit 1dffeb8b8b4c261c45416d53c75ea51e6ece1770 upstream.
The current implementation for gbcodec_mixer_dapm_ctl_put() uses uninitialized gbvalue for comparison with updated value. This was found using static analysis with coverity.
Uninitialized scalar variable (UNINIT)
11. uninit_use: Using uninitialized value
gbvalue.value.integer_value[0].
460 if (gbvalue.value.integer_value[0] != val) {
This patch fixes the issue with fetching the gbvalue before using it for
comparision.
--- drivers/staging/greybus/audio_topology.c | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-)
drivers/staging/greybus/audio_topology.c +15 -14
@@ -460,6 +460,15 @@ static int gbcodec_mixer_dapm_ctl_put(st val = ucontrol->value.integer.value[0 ] & mask; connect = !!val; + ret =gb_pm_runtime_get_sync (bundle); +if (ret) +return ret; + + ret =gb_audio_gb_get_control (module->mgmt_connection, data->ctl_id, +GB_AUDIO_INVALID_INDEX , &gbvalue); +if (ret) + goto exit; +/* update ucontrol */ if (gbvalue.value.integer_value[0 ] != val) {for (wi =0 ; wi < wlist->num_widgets; wi++) {
@@ -473,25 +482,17 @@ static int gbcodec_mixer_dapm_ctl_put(st gbvalue.value.integer_value[0 ] =cpu_to_le32 (ucontrol->value.integer.value[0 ]); - ret =gb_pm_runtime_get_sync (bundle); -if (ret) -return ret; - ret =gb_audio_gb_set_control (module->mgmt_connection, data->ctl_id,GB_AUDIO_INVALID_INDEX , &gbvalue); - -gb_pm_runtime_put_autosuspend (bundle); - -if (ret) { -dev_err_ratelimited (codec->dev, -"%d:Error in %s for %s\n" , ret, - __func__, kcontrol->id.name); -return ret; - } } -return 0 ; +exit: +gb_pm_runtime_put_autosuspend (bundle); +if (ret) +dev_err_ratelimited (codec_dev,"%d:Error in %s for %s\n" , ret, + __func__, kcontrol->id.name); +return ret; }#define SOC_DAPM_MIXER_GB (xname, kcount, data) \
Greg Kroah-Hartman
maintainerPATCH 166/177 phy: qcom-qmp: Use correct values for ipq8074 PCIe Gen2 PHY init
In reply to Greg Kroah-HartmanFrom: Sivaprakash Murugesan <[email protected]>
commit afd55e6d1bd35b4b36847869011447a83a81c8e0 upstream.
There were some problem in ipq8074 Gen2 PCIe phy init sequence.
1. Few register values were wrongly updated in the phy init sequence.
2. The register QSERDES_RX_SIGDET_CNTRL is a RX tuning parameter register which is added in serdes table causing the wrong register was getting updated.
3. Clocks and resets were not added in the phy init.
Fix these to make Gen2 PCIe port on ipq8074 devices to work.
--- drivers/phy/qualcomm/phy-qcom-qmp.c | 16 +++++++++------- drivers/phy/qualcomm/phy-qcom-qmp.h | 2 ++ 2 files changed, 11 insertions(+), 7 deletions(-)
drivers/phy/qualcomm/phy-qcom-qmp.c +9 -7
@@ -504,8 +504,8 @@ static const struct qmp_phy_init_tbl ipqQMP_PHY_INIT_CFG (QSERDES_COM_BG_TRIM ,0xf ),QMP_PHY_INIT_CFG (QSERDES_COM_LOCK_CMP_EN ,0x1 ),QMP_PHY_INIT_CFG (QSERDES_COM_VCO_TUNE_MAP ,0x0 ), -QMP_PHY_INIT_CFG (QSERDES_COM_VCO_TUNE_TIMER1 ,0x1f ), -QMP_PHY_INIT_CFG (QSERDES_COM_VCO_TUNE_TIMER2 ,0x3f ), +QMP_PHY_INIT_CFG (QSERDES_COM_VCO_TUNE_TIMER1 ,0xff ), +QMP_PHY_INIT_CFG (QSERDES_COM_VCO_TUNE_TIMER2 ,0x1f ),QMP_PHY_INIT_CFG (QSERDES_COM_CMN_CONFIG ,0x6 ),QMP_PHY_INIT_CFG (QSERDES_COM_PLL_IVCO ,0xf ), QMP_PHY_INIT_CFG(QSERDES_COM_HSCLK_SEL, 0x0),
@@ -531,7 +531,6 @@ static const struct qmp_phy_init_tbl ipqQMP_PHY_INIT_CFG (QSERDES_COM_INTEGLOOP_GAIN1_MODE0 ,0x0 ),QMP_PHY_INIT_CFG (QSERDES_COM_INTEGLOOP_GAIN0_MODE0 ,0x80 ),QMP_PHY_INIT_CFG (QSERDES_COM_BIAS_EN_CTRL_BY_PSM ,0x1 ), -QMP_PHY_INIT_CFG (QSERDES_COM_VCO_TUNE_CTRL ,0xa ),QMP_PHY_INIT_CFG (QSERDES_COM_SSC_EN_CENTER ,0x1 ),QMP_PHY_INIT_CFG (QSERDES_COM_SSC_PER1 ,0x31 ), QMP_PHY_INIT_CFG(QSERDES_COM_SSC_PER2, 0x1),
@@ -540,7 +539,6 @@ static const struct qmp_phy_init_tbl ipqQMP_PHY_INIT_CFG (QSERDES_COM_SSC_STEP_SIZE1 ,0x2f ),QMP_PHY_INIT_CFG (QSERDES_COM_SSC_STEP_SIZE2 ,0x19 ), QMP_PHY_INIT_CFG(QSERDES_COM_CLK_EP_DIV, 0x19), - QMP_PHY_INIT_CFG(QSERDES_RX_SIGDET_CNTRL, 0x7), }; static const struct qmp_phy_init_tbl ipq8074_pcie_tx_tbl[] = {
@@ -548,6 +546,8 @@ static const struct qmp_phy_init_tbl ipqQMP_PHY_INIT_CFG (QSERDES_TX_LANE_MODE ,0x6 ),QMP_PHY_INIT_CFG (QSERDES_TX_RES_CODE_LANE_OFFSET ,0x2 ),QMP_PHY_INIT_CFG (QSERDES_TX_RCV_DETECT_LVL_2 ,0x12 ), +QMP_PHY_INIT_CFG (QSERDES_TX_EMP_POST1_LVL ,0x36 ), + QMP_PHY_INIT_CFG(QSERDES_TX_SLEW_CNTL, 0x0a), }; static const struct qmp_phy_init_tbl ipq8074_pcie_rx_tbl[] = {
@@ -558,7 +558,6 @@ static const struct qmp_phy_init_tbl ipqQMP_PHY_INIT_CFG (QSERDES_RX_RX_EQU_ADAPTOR_CNTRL4 ,0xdb ),QMP_PHY_INIT_CFG (QSERDES_RX_UCDR_SO_SATURATION_AND_ENABLE ,0x4b ), QMP_PHY_INIT_CFG(QSERDES_RX_UCDR_SO_GAIN, 0x4), - QMP_PHY_INIT_CFG(QSERDES_RX_UCDR_SO_GAIN_HALF, 0x4), }; static const struct qmp_phy_init_tbl ipq8074_pcie_pcs_tbl[] = {
@@ -1673,6 +1672,9 @@ static const struct qmp_phy_cfg msm8996_ .pwrdn_ctrl = SW_PWRDN, }; +static const char *const ipq8074_pciephy_clk_l[] = { +"aux" ,"cfg_ahb" , +};/* list of resets */ static const char *const ipq8074_pciephy_reset_l[] = {"phy" ,"common" ,
@@ -1690,8 +1692,8 @@ static const struct qmp_phy_cfg ipq8074_ .rx_tbl_num = ARRAY_SIZE(ipq8074_pcie_rx_tbl), .pcs_tbl = ipq8074_pcie_pcs_tbl, .pcs_tbl_num = ARRAY_SIZE(ipq8074_pcie_pcs_tbl), - .clk_list = NULL, - .num_clks = 0, + .clk_list = ipq8074_pciephy_clk_l, + .num_clks = ARRAY_SIZE(ipq8074_pciephy_clk_l), .reset_list = ipq8074_pciephy_reset_l, .num_resets = ARRAY_SIZE(ipq8074_pciephy_reset_l), .vreg_list = NULL,
drivers/phy/qualcomm/phy-qcom-qmp.h +2 -0
@@ -77,6 +77,8 @@#define QSERDES_COM_CORECLK_DIV_MODE1 0x1bc/* Only for QMP V2 PHY - TX registers */ +#define QSERDES_TX_EMP_POST1_LVL 0x018 +#define QSERDES_TX_SLEW_CNTL 0x040#define QSERDES_TX_RES_CODE_LANE_OFFSET 0x054#define QSERDES_TX_DEBUG_BUS_SEL 0x064#define QSERDES_TX_HIGHZ_TRANSCEIVEREN_BIAS_DRVR_EN 0x068
Greg Kroah-Hartman
maintainerPATCH 167/177 usb: core: fix slab-out-of-bounds Read in read_descriptors
In reply to Greg Kroah-HartmanFrom: Zeng Tao <[email protected]>
commit a18cd6c9b6bc73dc17e8b7e9bd07decaa8833c97 upstream.
The USB device descriptor may get changed between two consecutive enumerations on the same device for some reason, such as DFU or malicius device.
In that case, we may access the changing descriptor if we don't take the device lock here.
The issue is reported:
https://syzkaller.appspot.com/bug?id=901a0d9e6519ef8dc7acab25344bd287dd3c7be9
--- drivers/usb/core/sysfs.c | 5 +++++ 1 file changed, 5 insertions(+)
drivers/usb/core/sysfs.c +5 -0
@@ -889,7 +889,11 @@ read_descriptors(struct file *filp, strusize_t srclen, n;int cfgno;void *src; +int retval; + retval =usb_lock_device_interruptible (udev); +if (retval <0 ) +return -EINTR ;/* The binary attribute begins with the device descriptor. * Following that are the raw descriptor entries for all the * configurations (config plus subsidiary descriptors).
@@ -914,6 +918,7 @@ read_descriptors(struct file *filp, stru off -= srclen; } } +usb_unlock_device (udev);return count - nleft; }
Greg Kroah-Hartman
maintainerPATCH 168/177 USB: serial: ftdi_sio: add IDs for Xsens Mti USB converter
In reply to Greg Kroah-HartmanFrom: Patrick Riphagen <[email protected]>
commit 6ccc48e0eb2f3a5f3bd39954a21317e5f8874726 upstream.
The device added has an FTDI chip inside.
The device is used to connect Xsens USB Motion Trackers.
--- drivers/usb/serial/ftdi_sio.c | 1 + drivers/usb/serial/ftdi_sio_ids.h | 1 + 2 files changed, 2 insertions(+)
drivers/usb/serial/ftdi_sio.c +1 -0
@@ -713,6 +713,7 @@ static const struct usb_device_id id_tab { USB_DEVICE(XSENS_VID, XSENS_AWINDA_STATION_PID) }, { USB_DEVICE(XSENS_VID, XSENS_CONVERTER_PID) }, { USB_DEVICE(XSENS_VID, XSENS_MTDEVBOARD_PID) }, + { USB_DEVICE(XSENS_VID, XSENS_MTIUSBCONVERTER_PID) }, { USB_DEVICE(XSENS_VID, XSENS_MTW_PID) }, { USB_DEVICE(FTDI_VID, FTDI_OMNI1509) }, { USB_DEVICE(MOBILITY_VID, MOBILITY_USB_SERIAL_PID) },
drivers/usb/serial/ftdi_sio_ids.h +1 -0
@@ -160,6 +160,7 @@#define XSENS_AWINDA_DONGLE_PID 0x0102#define XSENS_MTW_PID 0x0200/* Xsens MTw */ #define XSENS_MTDEVBOARD_PID 0x0300/* Motion Tracker Development Board */ +#define XSENS_MTIUSBCONVERTER_PID 0x0301/* MTi USB converter */ #define XSENS_CONVERTER_PID 0xD00D/* Xsens USB-serial converter */ /* Xsens devices using FTDI VID */
Greg Kroah-Hartman
maintainerPATCH 169/177 USB: serial: option: support dynamic Quectel USB compositions
In reply to Greg Kroah-HartmanFrom: Bjørn Mork <[email protected]>
commit 2bb70f0a4b238323e4e2f392fc3ddeb5b7208c9e upstream.
The USB composition, defining the set of exported functions, is dynamic in newer Quectel modems. Default functions can be disabled and alternative functions can be enabled instead. The alternatives includes class functions using interface pairs, which should be handled by the respective class drivers.
Active interfaces are numbered consecutively, so static blacklisting based on interface numbers will fail when the composition changes. An example of such an error, where the option driver has bound to the CDC ECM data interface, preventing cdc_ether from handling this function:
T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=480 MxCh= 0
D: Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs= 1
P: Vendor=2c7c ProdID=0125 Rev= 3.18
S: Manufacturer=Quectel
S: Product=EC25-AF
C:* #Ifs= 6 Cfg#= 1 Atr=a0 MxPwr=500mA
A: FirstIf#= 4 IfCount= 2 Cls=02(comm.) Sub=06 Prot=00 I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I:* If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
E: Ad=83(I) Atr=03(Int.) MxPS= 10 Ivl=32ms
E: Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I:* If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
E: Ad=85(I) Atr=03(Int.) MxPS= 10 Ivl=32ms
E: Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I:* If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
E: Ad=87(I) Atr=03(Int.) MxPS= 10 Ivl=32ms
E: Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I:* If#= 4 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=06 Prot=00 Driver=(none)
E: Ad=89(I) Atr=03(Int.) MxPS= 16 Ivl=32ms
I:* If#= 5 Alt= 0 #EPs= 0 Cls=0a(data ) Sub=00 Prot=00 Driver=option
I: If#= 5 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=option
E: Ad=88(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
Another device with the same id gets correct drivers, since the interface of the network function happens to be blacklisted by option:
T: Bus=01 Lev=02 Prnt=02 Port=01 Cnt=01 Dev#= 3 Spd=480 MxCh= 0
D: Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs= 1
P: Vendor=2c7c ProdID=0125 Rev= 3.18
S: Manufacturer=Android
S: Product=Android
C:* #Ifs= 5 Cfg#= 1 Atr=a0 MxPwr=500mA
I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I:* If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
E: Ad=83(I) Atr=03(Int.) MxPS= 10 Ivl=32ms
E: Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I:* If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
E: Ad=85(I) Atr=03(Int.) MxPS= 10 Ivl=32ms
E: Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I:* If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
E: Ad=87(I) Atr=03(Int.) MxPS= 10 Ivl=32ms
E: Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I:* If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=qmi_wwan
E: Ad=89(I) Atr=03(Int.) MxPS= 8 Ivl=32ms
E: Ad=88(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
Change rules for EC21, EC25, BG96 and EG95 to match vendor specific serial functions only, to prevent binding to class functions. Require 2 endpoints on ff/ff/ff functions, avoiding the 3 endpoint QMI/RMNET network functions.
--- drivers/usb/serial/option.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-)
drivers/usb/serial/option.c +12 -8
@@ -1094,14 +1094,18 @@ static const struct usb_device_id option { USB_DEVICE(QUALCOMM_VENDOR_ID, UBLOX_PRODUCT_R410M), .driver_info = RSVD(1) | RSVD(3) }, /* Quectel products using Quectel vendor ID */ - { USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC21), - .driver_info = RSVD(4) }, - { USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC25), - .driver_info = RSVD(4) }, - { USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EG95), - .driver_info = RSVD(4) }, - { USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_BG96), - .driver_info = RSVD(4) }, + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC21, 0xff, 0xff, 0xff), + .driver_info = NUMEP2 }, + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC21, 0xff, 0, 0) }, + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC25, 0xff, 0xff, 0xff), + .driver_info = NUMEP2 }, + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC25, 0xff, 0, 0) }, + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EG95, 0xff, 0xff, 0xff), + .driver_info = NUMEP2 }, + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EG95, 0xff, 0, 0) }, + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_BG96, 0xff, 0xff, 0xff), + .driver_info = NUMEP2 }, + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_BG96, 0xff, 0, 0) }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EP06, 0xff, 0xff, 0xff), .driver_info = RSVD(1) | RSVD(2) | RSVD(3) | RSVD(4) | NUMEP2 }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EP06, 0xff, 0, 0) },
Greg Kroah-Hartman
maintainerPATCH 170/177 USB: serial: option: add support for SIM7070/SIM7080/SIM7090 modules
In reply to Greg Kroah-HartmanFrom: Aleksander Morgado <[email protected]>
commit 1ac698790819b83f39fd7ea4f6cdabee9bdd7b38 upstream.
These modules have 2 different USB layouts:
The default layout with PID 0x9205 (AT+CUSBSELNV=1) exposes 4 TTYs and an ECM interface:
T: Bus=02 Lev=01 Prnt=01 Port=02 Cnt=01 Dev#= 6 Spd=480 MxCh= 0 D: Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs= 1 P: Vendor=1e0e ProdID=9205 Rev=00.00 S: Manufacturer=SimTech, Incorporated S: Product=SimTech SIM7080 S: SerialNumber=1234567890ABCDEF C: #Ifs= 6 Cfg#= 1 Atr=e0 MxPwr=500mA I: If#=0x0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option I: If#=0x1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option I: If#=0x2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option I: If#=0x3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=option I: If#=0x4 Alt= 0 #EPs= 1 Cls=02(commc) Sub=06 Prot=00 Driver=cdc_ether I: If#=0x5 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_ether
The purpose of each TTY is as follows:
* ttyUSB0: DIAG/QCDM port.
* ttyUSB1: GNSS data.
* ttyUSB2: AT-capable port (control).
* ttyUSB3: AT-capable port (data).
In the secondary layout with PID=0x9206 (AT+CUSBSELNV=86) the module exposes 6 TTY ports:
T: Bus=02 Lev=01 Prnt=01 Port=02 Cnt=01 Dev#= 8 Spd=480 MxCh= 0 D: Ver= 2.00 Cls=02(commc) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 P: Vendor=1e0e ProdID=9206 Rev=00.00 S: Manufacturer=SimTech, Incorporated S: Product=SimTech SIM7080 S: SerialNumber=1234567890ABCDEF C: #Ifs= 6 Cfg#= 1 Atr=e0 MxPwr=500mA I: If#=0x0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option I: If#=0x1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option I: If#=0x2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option I: If#=0x3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option I: If#=0x4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option I: If#=0x5 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
The purpose of each TTY is as follows:
* ttyUSB0: DIAG/QCDM port.
* ttyUSB1: GNSS data.
* ttyUSB2: AT-capable port (control).
* ttyUSB3: QFLOG interface.
* ttyUSB4: DAM interface.
* ttyUSB5: AT-capable port (data).
--- drivers/usb/serial/option.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/usb/serial/option.c +2 -0
@@ -1823,6 +1823,8 @@ static const struct usb_device_id option { USB_DEVICE_INTERFACE_CLASS(0x1e0e, 0x9003, 0xff) }, /* Simcom SIM7500/SIM7600 MBIM mode */ { USB_DEVICE_INTERFACE_CLASS(0x1e0e, 0x9011, 0xff), /* Simcom SIM7500/SIM7600 RNDIS mode */ .driver_info = RSVD(7) }, + { USB_DEVICE_INTERFACE_CLASS(0x1e0e, 0x9205, 0xff) }, /* Simcom SIM7070/SIM7080/SIM7090 AT+ECM mode */ + { USB_DEVICE_INTERFACE_CLASS(0x1e0e, 0x9206, 0xff) }, /* Simcom SIM7070/SIM7080/SIM7090 AT-only mode */ { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X060S_X200), .driver_info = NCTRL(0) | NCTRL(1) | RSVD(4) }, { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X220_X500D),
Greg Kroah-Hartman
maintainerPATCH 171/177 usb: Fix out of sync data toggle if a configured device is reconfigured
In reply to Greg Kroah-HartmanFrom: Mathias Nyman <[email protected]>
commit cfd54fa83a5068b61b7eb28d3c117d8354c74c7a upstream.
Userspace drivers that use a SetConfiguration() request to "lightweight" reset an already configured usb device might cause data toggles to get out of sync between the device and host, and the device becomes unusable.
The xHCI host requires endpoints to be dropped and added back to reset the toggle. If USB core notices the new configuration is the same as the current active configuration it will avoid these extra steps by calling usb_reset_configuration() instead of usb_set_configuration().
A SetConfiguration() request will reset the device side data toggles. Make sure usb_reset_configuration() function also drops and adds back the endpoints to ensure data toggles are in sync.
To avoid code duplication split the current usb_disable_device() function and reuse the endpoint specific part.
--- drivers/usb/core/message.c | 93 ++++++++++++++++++++------------------------- 1 file changed, 43 insertions(+), 50 deletions(-)
drivers/usb/core/message.c +43 -50
@@ -1205,6 +1205,34 @@ void usb_disable_interface(struct usb_de } } +/* +* usb_disable_device_endpoints -- Disable all endpoints for a device +* @dev: the device whose endpoints are being disabled +* @skip_ep0: 0 to disable endpoint 0, 1 to skip it. +*/ +static void usb_disable_device_endpoints (struct usb_device *dev,int skip_ep0) +{ +struct usb_hcd *hcd =bus_to_hcd (dev->bus); +int i; + +if (hcd->driver->check_bandwidth) { +/* First pass: Cancel URBs, leave endpoint pointers intact. */ +for (i = skip_ep0; i <16 ; ++i) { +usb_disable_endpoint (dev, i, false); +usb_disable_endpoint (dev, i +USB_DIR_IN , false); + } +/* Remove endpoints from the host controller internal state */ +mutex_lock (hcd->bandwidth_mutex); +usb_hcd_alloc_bandwidth (dev,NULL ,NULL ,NULL ); +mutex_unlock (hcd->bandwidth_mutex); + } +/* Second pass: remove endpoint pointers */ +for (i = skip_ep0; i <16 ; ++i) { +usb_disable_endpoint (dev, i, true); +usb_disable_endpoint (dev, i +USB_DIR_IN , true); + } +} +/** * usb_disable_device - Disable all the endpoints for a USB device * @dev: the device whose endpoints are being disabled
@@ -1218,7 +1246,6 @@ void usb_disable_interface(struct usb_devoid usb_disable_device (struct usb_device *dev,int skip_ep0) {int i; -struct usb_hcd *hcd =bus_to_hcd (dev->bus);/* getting rid of interfaces will disconnect * any drivers bound to them (a key side effect)
@@ -1264,22 +1291,8 @@ void usb_disable_device(struct usb_devicdev_dbg (&dev->dev,"%s nuking %s URBs\n" , __func__, skip_ep0 ?"non-ep0" :"all" ); -if (hcd->driver->check_bandwidth) { -/* First pass: Cancel URBs, leave endpoint pointers intact. */ -for (i = skip_ep0; i <16 ; ++i) { -usb_disable_endpoint (dev, i, false); -usb_disable_endpoint (dev, i +USB_DIR_IN , false); - } -/* Remove endpoints from the host controller internal state */ -mutex_lock (hcd->bandwidth_mutex); -usb_hcd_alloc_bandwidth (dev,NULL ,NULL ,NULL ); -mutex_unlock (hcd->bandwidth_mutex); -/* Second pass: remove endpoint pointers */ - } -for (i = skip_ep0; i <16 ; ++i) { -usb_disable_endpoint (dev, i, true); -usb_disable_endpoint (dev, i +USB_DIR_IN , true); - } + +usb_disable_device_endpoints (dev, skip_ep0); }/**
@@ -1522,6 +1535,9 @@ EXPORT_SYMBOL_GPL(usb_set_interface);* The caller must own the device lock. * * Return: Zero on success, else a negative error code. +* +* If this routine fails the device will probably be in an unusable state +* with endpoints disabled, and interfaces only partially enabled. */ int usb_reset_configuration (struct usb_device *dev) {
@@ -1537,10 +1553,7 @@ int usb_reset_configuration(struct usb_d* calls during probe() are fine */ -for (i =1 ; i <16 ; ++i) { -usb_disable_endpoint (dev, i, true); -usb_disable_endpoint (dev, i +USB_DIR_IN , true); - } +usb_disable_device_endpoints (dev,1 );/* skip ep0*/ config = dev->actconfig; retval =0 ;
@@ -1553,34 +1566,10 @@ int usb_reset_configuration(struct usb_dmutex_unlock (hcd->bandwidth_mutex);return -ENOMEM ; } -/* Make sure we have enough bandwidth for each alternate setting 0 */ -for (i =0 ; i < config->desc.bNumInterfaces; i++) { -struct usb_interface *intf = config->interface[i]; -struct usb_host_interface *alt; - - alt =usb_altnum_to_altsetting (intf,0 ); -if (!alt) - alt = &intf->altsetting[0 ]; -if (alt != intf->cur_altsetting) - retval =usb_hcd_alloc_bandwidth (dev,NULL , - intf->cur_altsetting, alt); -if (retval <0 ) -break ; - } -/* If not, reinstate the old alternate settings */ + +/* xHCI adds all endpoints in usb_hcd_alloc_bandwidth */ + retval =usb_hcd_alloc_bandwidth (dev, config,NULL ,NULL );if (retval <0 ) { -reset_old_alts: -for (i--; i >=0 ; i--) { -struct usb_interface *intf = config->interface[i]; -struct usb_host_interface *alt; - - alt =usb_altnum_to_altsetting (intf,0 ); -if (!alt) - alt = &intf->altsetting[0 ]; -if (alt != intf->cur_altsetting) -usb_hcd_alloc_bandwidth (dev,NULL , - alt, intf->cur_altsetting); - }usb_enable_lpm (dev);mutex_unlock (hcd->bandwidth_mutex);return retval;
@@ -1589,8 +1578,12 @@ reset_old_alts:USB_REQ_SET_CONFIGURATION ,0 , config->desc.bConfigurationValue,0 , NULL, 0, USB_CTRL_SET_TIMEOUT); -if (retval <0 ) - goto reset_old_alts; +if (retval <0 ) { +usb_hcd_alloc_bandwidth (dev,NULL ,NULL ,NULL ); +usb_enable_lpm (dev); +mutex_unlock (hcd->bandwidth_mutex); +return retval; + }mutex_unlock (hcd->bandwidth_mutex);/* re-init hc/hcd interface/endpoint state */
Greg Kroah-Hartman
maintainerPATCH 172/177 usb: typec: ucsi: acpi: Check the _DEP dependencies
In reply to Greg Kroah-HartmanFrom: Heikki Krogerus <[email protected]>
commit 1f3546ff3f0a1000971daef58406954bad3f7061 upstream.
Failing probe with -EPROBE_DEFER until all dependencies listed in the _DEP (Operation Region Dependencies) object have been met.
This will fix an issue where on some platforms UCSI ACPI driver fails to probe because the address space handler for the operation region that the UCSI ACPI interface uses has not been loaded yet.
--- drivers/usb/typec/ucsi/ucsi_acpi.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/usb/typec/ucsi/ucsi_acpi.c +4 -0
@@ -112,11 +112,15 @@ static void ucsi_acpi_notify(acpi_handlestatic int ucsi_acpi_probe (struct platform_device *pdev) { +struct acpi_device *adev =ACPI_COMPANION (&pdev->dev);struct ucsi_acpi *ua;struct resource *res;acpi_status status;int ret; +if (adev->dep_unmet) +return -EPROBE_DEFER ; + ua =devm_kzalloc (&pdev->dev,sizeof (*ua),GFP_KERNEL );if (!ua)return -ENOMEM ;
Greg Kroah-Hartman
maintainerPATCH 173/177 usb: typec: intel_pmc_mux: Un-register the USB role switch
In reply to Greg Kroah-HartmanFrom: Madhusudanarao Amara <[email protected]>
commit 290a405ce318d036666c4155d5899eb8cd6e0d97 upstream.
Added missing code for un-register USB role switch in the remove and error path.
--- drivers/usb/typec/mux/intel_pmc_mux.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/usb/typec/mux/intel_pmc_mux.c +2 -0
@@ -441,6 +441,7 @@ err_remove_ports:for (i =0 ; i < pmc->num_ports; i++) {typec_switch_unregister (pmc->port[i].typec_sw);typec_mux_unregister (pmc->port[i].typec_mux); +usb_role_switch_unregister (pmc->port[i].usb_sw); }return ret;
@@ -454,6 +455,7 @@ static int pmc_usb_remove(struct platforfor (i =0 ; i < pmc->num_ports; i++) {typec_switch_unregister (pmc->port[i].typec_sw);typec_mux_unregister (pmc->port[i].typec_mux); +usb_role_switch_unregister (pmc->port[i].usb_sw); }return 0 ;
Greg Kroah-Hartman
maintainerPATCH 174/177 usb: typec: intel_pmc_mux: Do not configure Altmode HPD High
In reply to Greg Kroah-HartmanFrom: Utkarsh Patel <[email protected]>
commit 294955fd43dbf1e8f3a84cffa4797c6f22badc31 upstream.
According to the PMC Type C Subsystem (TCSS) Mux programming guide rev 0.7, bit 14 is reserved in Alternate mode.
In DP Alternate Mode state, if the HPD_STATE (bit 7) field in the status update command VDO is set to HPD_HIGH, HPD is configured via separate HPD mode request after configuring DP Alternate mode request. Configuring reserved bit may show unexpected behaviour.
So do not configure them while issuing the Alternate Mode request.
--- drivers/usb/typec/mux/intel_pmc_mux.c | 4 ---- 1 file changed, 4 deletions(-)
drivers/usb/typec/mux/intel_pmc_mux.c +0 -4
@@ -63,7 +63,6 @@ enum {#define PMC_USB_ALTMODE_DP_MODE_SHIFT 8/* TBT specific Mode Data bits */ -#define PMC_USB_ALTMODE_HPD_HIGH BIT(14)#define PMC_USB_ALTMODE_TBT_TYPE BIT(17)#define PMC_USB_ALTMODE_CABLE_TYPE BIT(18)#define PMC_USB_ALTMODE_ACTIVE_LINK BIT(20)
@@ -180,9 +179,6 @@ pmc_usb_mux_dp(struct pmc_usb_port *port req.mode_data |= (state->mode -TYPEC_STATE_MODAL ) <<PMC_USB_ALTMODE_DP_MODE_SHIFT ; -if (data->status &DP_STATUS_HPD_STATE ) - req.mode_data |=PMC_USB_ALTMODE_HPD_HIGH ; - ret =pmc_usb_command (port, (void *)&req,sizeof (req));if (ret)return ret;
Greg Kroah-Hartman
maintainerPATCH 175/177 usb: typec: intel_pmc_mux: Do not configure SBU and HSL Orientation in Alternate modes
In reply to Greg Kroah-HartmanFrom: Utkarsh Patel <[email protected]>
commit 7c6bbdf086ac7f1374bcf1ef0994b15109ecaf48 upstream.
According to the PMC Type C Subsystem (TCSS) Mux programming guide rev 0.7, bits 4 and 5 are reserved in Alternate modes.
SBU Orientation and HSL Orientation needs to be configured only during initial cable detection in USB connect flow based on device property of "sbu-orientation" and "hsl-orientation".
Configuring these reserved bits in the Alternate modes may result in delay in display link training or some unexpected behaviour.
So do not configure them while issuing Alternate Mode requests.
--- drivers/usb/typec/mux/intel_pmc_mux.c | 8 -------- 1 file changed, 8 deletions(-)
drivers/usb/typec/mux/intel_pmc_mux.c +0 -8
@@ -56,8 +56,6 @@ enum {#define PMC_USB_ALTMODE_ORI_SHIFT 1#define PMC_USB_ALTMODE_UFP_SHIFT 3 -#define PMC_USB_ALTMODE_ORI_AUX_SHIFT 4 -#define PMC_USB_ALTMODE_ORI_HSL_SHIFT 5/* DP specific Mode Data bits */ #define PMC_USB_ALTMODE_DP_MODE_SHIFT 8
@@ -173,9 +171,6 @@ pmc_usb_mux_dp(struct pmc_usb_port *port req.mode_data = (port->orientation -1 ) <<PMC_USB_ALTMODE_ORI_SHIFT ; req.mode_data |= (port->role -1 ) <<PMC_USB_ALTMODE_UFP_SHIFT ; - req.mode_data |=sbu_orientation (port) <<PMC_USB_ALTMODE_ORI_AUX_SHIFT ; - req.mode_data |=hsl_orientation (port) <<PMC_USB_ALTMODE_ORI_HSL_SHIFT ; - req.mode_data |= (state->mode -TYPEC_STATE_MODAL ) <<PMC_USB_ALTMODE_DP_MODE_SHIFT ;
@@ -203,9 +198,6 @@ pmc_usb_mux_tbt(struct pmc_usb_port *por req.mode_data = (port->orientation -1 ) <<PMC_USB_ALTMODE_ORI_SHIFT ; req.mode_data |= (port->role -1 ) <<PMC_USB_ALTMODE_UFP_SHIFT ; - req.mode_data |=sbu_orientation (port) <<PMC_USB_ALTMODE_ORI_AUX_SHIFT ; - req.mode_data |=hsl_orientation (port) <<PMC_USB_ALTMODE_ORI_HSL_SHIFT ; -if (TBT_ADAPTER (data->device_mode) ==TBT_ADAPTER_TBT3 ) req.mode_data |=PMC_USB_ALTMODE_TBT_TYPE ;
Greg Kroah-Hartman
maintainerPATCH 176/177 drm/msm/gpu: make ringbuffer readonly
In reply to Greg Kroah-HartmanFrom: Rob Clark <[email protected]>
[ Upstream commit 352c83fb39cae3eff95a8e1ed23006291abb6196 ]
The GPU has no business writing into the ringbuffer, let's make it readonly to the GPU.
--- drivers/gpu/drm/msm/msm_ringbuffer.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/gpu/drm/msm/msm_ringbuffer.c +2 -1
@@ -27,7 +27,8 @@ struct msm_ringbuffer *msm_ringbuffer_new(struct msm_gpu *gpu, int id, ring->id = id; ring->start =msm_gem_kernel_new (gpu->dev,MSM_GPU_RINGBUFFER_SZ , -MSM_BO_WC , gpu->aspace, &ring->bo, &ring->iova); +MSM_BO_WC |MSM_BO_GPU_READONLY , gpu->aspace, &ring->bo, + &ring->iova);if (IS_ERR (ring->start)) { ret =PTR_ERR (ring->start);
Signature · 1 line
2.25.1
Greg Kroah-Hartman
maintainerPATCH 177/177 drm/msm: Enable expanded apriv support for a650
In reply to Greg Kroah-HartmanFrom: Jordan Crouse <[email protected]>
[ Upstream commit 604234f33658cdd72f686be405a99646b397d0b3 ]
a650 supports expanded apriv support that allows us to map critical buffers (ringbuffer and memstore) as as privileged to protect them from corruption.
--- drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 6 +++++- drivers/gpu/drm/msm/msm_gpu.c | 2 +- drivers/gpu/drm/msm/msm_gpu.h | 11 +++++++++++ drivers/gpu/drm/msm/msm_ringbuffer.c | 4 ++-- 4 files changed, 19 insertions(+), 4 deletions(-)
drivers/gpu/drm/msm/adreno/a6xx_gpu.c +5 -1
@@ -541,7 +541,8 @@ static int a6xx_hw_init(struct msm_gpu *gpu) A6XX_PROTECT_RDONLY(0x980, 0x4));gpu_write (gpu,REG_A6XX_CP_PROTECT (25 ),A6XX_PROTECT_RW (0xa630 ,0x0 )); -if (adreno_is_a650 (adreno_gpu)) { +/* Enable expanded apriv for targets that support it */ +if (gpu->hw_apriv) {gpu_write (gpu,REG_A6XX_CP_APRIV_CNTL , (1 <<6 ) | (1 <<5 ) | (1 <<3 ) | (1 <<2 ) | (1 <<1 )); }
@@ -926,6 +927,9 @@ struct msm_gpu *a6xx_gpu_init(struct drm_device *dev) adreno_gpu->registers =NULL ; adreno_gpu->reg_offsets = a6xx_register_offsets; +if (adreno_is_a650 (adreno_gpu)) + adreno_gpu->base.hw_apriv = true; + ret =adreno_gpu_init (dev, pdev, adreno_gpu, &funcs,1 );if (ret) {a6xx_destroy (&(a6xx_gpu->base.base));
drivers/gpu/drm/msm/msm_gpu.c +1 -1
@@ -905,7 +905,7 @@ int msm_gpu_init(struct drm_device *drm, struct platform_device *pdev, memptrs =msm_gem_kernel_new (drm,sizeof (struct msm_rbmemptrs ) * nr_rings, -MSM_BO_UNCACHED , gpu->aspace, &gpu->memptrs_bo, +check_apriv (gpu,MSM_BO_UNCACHED ), gpu->aspace, &gpu->memptrs_bo, &memptrs_iova);if (IS_ERR (memptrs)) {
drivers/gpu/drm/msm/msm_gpu.h +11 -0
@@ -14,6 +14,7 @@#include "msm_drv.h" #include "msm_fence.h" #include "msm_ringbuffer.h" +#include "msm_gem.h" struct msm_gem_submit ;struct msm_gpu_perfcntr ;
@@ -138,6 +139,8 @@ struct msm_gpu { } devfreq;struct msm_gpu_state *crashstate; +/* True if the hardware supports expanded apriv (a650 and newer) */ +bool hw_apriv; };/* It turns out that all targets use the same ringbuffer size */
@@ -326,4 +329,12 @@ static inline void msm_gpu_crashstate_put(struct msm_gpu *gpu) mutex_unlock(&gpu->dev->struct_mutex); } +/* +* Simple macro to semi-cleanly add the MAP_PRIV flag for targets that can +* support expanded privileges +*/ +#define check_apriv (gpu, flags) \ + (((gpu)->hw_apriv ? MSM_BO_MAP_PRIV : 0) | (flags)) + +#endif /* __MSM_GPU_H__ */
drivers/gpu/drm/msm/msm_ringbuffer.c +2 -2
@@ -27,8 +27,8 @@ struct msm_ringbuffer *msm_ringbuffer_new(struct msm_gpu *gpu, int id, ring->id = id; ring->start =msm_gem_kernel_new (gpu->dev,MSM_GPU_RINGBUFFER_SZ , -MSM_BO_WC |MSM_BO_GPU_READONLY , gpu->aspace, &ring->bo, - &ring->iova); +check_apriv (gpu,MSM_BO_WC |MSM_BO_GPU_READONLY ), + gpu->aspace, &ring->bo, &ring->iova);if (IS_ERR (ring->start)) { ret =PTR_ERR (ring->start);
Signature · 1 line
2.25.1
Re: [PATCH 5.8 177/177] drm/msm: Enable expanded apriv support for a650
Quoted 11 lines · Greg Kroah-Hartman
From: Jordan Crouse <[email protected]>
[ Upstream commit
604234f33658cdd72f686be405a99646b397d0b3]a650 supports expanded apriv support that allows us to map critical buffers (ringbuffer and memstore) as as privileged to protect them from corruption.
Signed-off-by Jordan Crouse <[email protected]>Signed-off-by Rob Clark <[email protected]>Signed-off-by Sasha Levin <[email protected]>
Hi. A bug was reported in this patch with a fix just posted to the list [1]. Since the RPTR shadow is being disabled universally by f6828e0c4045 ("drm/msm:
Disable the RPTR shadow") that will address the security concern and we won't need the extra protection from this patch. I suggest that you drop it for the stable trees and we can merge the fix into 5.9 to re-enable APRIV for newer kernels.
[1] https://lists.freedesktop.org/archives/freedreno/2020-September/008376.html
Jordan
Quoted 98 lines
--- drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 6 +++++- drivers/gpu/drm/msm/msm_gpu.c | 2 +- drivers/gpu/drm/msm/msm_gpu.h | 11 +++++++++++ drivers/gpu/drm/msm/msm_ringbuffer.c | 4 ++-- 4 files changed, 19 insertions(+), 4 deletions(-)drivers/gpu/drm/msm/adreno/a6xx_gpu.c +5
-1@@ -541,7 +541,8 @@ static int a6xx_hw_init(struct msm_gpu *gpu) A6XX_PROTECT_RDONLY(0x980, 0x4));gpu_write (gpu,REG_A6XX_CP_PROTECT (25 ),A6XX_PROTECT_RW (0xa630 ,0x0 )); -if (adreno_is_a650 (adreno_gpu)) { +/* Enable expanded apriv for targets that support it */ +if (gpu->hw_apriv) {gpu_write (gpu,REG_A6XX_CP_APRIV_CNTL , (1 <<6 ) | (1 <<5 ) | (1 <<3 ) | (1 <<2 ) | (1 <<1 )); }@@ -926,6 +927,9 @@ struct msm_gpu *a6xx_gpu_init(struct drm_device *dev) adreno_gpu->registers =NULL ; adreno_gpu->reg_offsets = a6xx_register_offsets; +if (adreno_is_a650 (adreno_gpu)) + adreno_gpu->base.hw_apriv = true; + ret =adreno_gpu_init (dev, pdev, adreno_gpu, &funcs,1 );if (ret) {a6xx_destroy (&(a6xx_gpu->base.base));drivers/gpu/drm/msm/msm_gpu.c +1
-1@@ -905,7 +905,7 @@ int msm_gpu_init(struct drm_device *drm, struct platform_device *pdev, memptrs =msm_gem_kernel_new (drm,sizeof (struct msm_rbmemptrs ) * nr_rings, -MSM_BO_UNCACHED , gpu->aspace, &gpu->memptrs_bo, +check_apriv (gpu,MSM_BO_UNCACHED ), gpu->aspace, &gpu->memptrs_bo, &memptrs_iova);if (IS_ERR (memptrs)) {drivers/gpu/drm/msm/msm_gpu.h +11
-0@@ -14,6 +14,7 @@#include "msm_drv.h" #include "msm_fence.h" #include "msm_ringbuffer.h" +#include "msm_gem.h" struct msm_gem_submit ;struct msm_gpu_perfcntr ;@@ -138,6 +139,8 @@ struct msm_gpu { } devfreq;struct msm_gpu_state *crashstate; +/* True if the hardware supports expanded apriv (a650 and newer) */ +bool hw_apriv; };/* It turns out that all targets use the same ringbuffer size */ @@ -326,4 +329,12 @@ static inline void msm_gpu_crashstate_put(struct msm_gpu *gpu) mutex_unlock(&gpu->dev->struct_mutex); } +/* +* Simple macro to semi-cleanly add the MAP_PRIV flag for targets that can +* support expanded privileges +*/ +#define check_apriv (gpu, flags) \ + (((gpu)->hw_apriv ? MSM_BO_MAP_PRIV : 0) | (flags)) + +#endif /* __MSM_GPU_H__ */ drivers/gpu/drm/msm/msm_ringbuffer.c +2
-2@@ -27,8 +27,8 @@ struct msm_ringbuffer *msm_ringbuffer_new(struct msm_gpu *gpu, int id, ring->id = id; ring->start =msm_gem_kernel_new (gpu->dev,MSM_GPU_RINGBUFFER_SZ , -MSM_BO_WC |MSM_BO_GPU_READONLY , gpu->aspace, &ring->bo, - &ring->iova); +check_apriv (gpu,MSM_BO_WC |MSM_BO_GPU_READONLY ), + gpu->aspace, &ring->bo, &ring->iova);if (IS_ERR (ring->start)) { ret =PTR_ERR (ring->start);Signature · 1 line
2.25.1
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.8.10 release. There are 177 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Thu, 17 Sep 2020 14:06:12 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.8.10-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.8.y
and the diffstat can be found below.thanks,
greg k-h
All tests passing for Tegra ...
Test results for stable-v5.8:
14 builds: 14 pass, 0 fail
26 boots: 26 pass, 0 fail
60 tests: 60 pass, 0 failLinux version: 5.8.10-rc1-g337aafeeb4cd
Boards tested: tegra124-jetson-tk1, tegra186-p2771-0000,
tegra194-p2972-0000, tegra20-ventana,
tegra210-p2371-2180, tegra210-p3450-0000,
tegra30-cardhu-a04Jon
Greg Kroah-Hartman
maintainerQuoted 26 lines · Jon Hunter
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.8.10 release. There are 177 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Thu, 17 Sep 2020 14:06:12 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.8.10-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.8.y
and the diffstat can be found below.thanks,
greg k-h
All tests passing for Tegra ...
Test results for stable-v5.8:
14 builds: 14 pass, 0 fail 26 boots: 26 pass, 0 fail 60 tests: 60 pass, 0 fail
Quoted 7 lines
Linux version: 5.8.10-rc1-g337aafeeb4cd
Boards tested: tegra124-jetson-tk1, tegra186-p2771-0000,tegra194-p2972-0000, tegra20-ventana, tegra210-p2371-2180, tegra210-p3450-0000, tegra30-cardhu-a04Tested-by Jon Hunter <[email protected]>
Thanks for testing all of these and letting me know.
greg k-h
Quoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.8.10 release. There are 177 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Thu, 17 Sep 2020 14:06:12 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 9 lines
https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.8.10-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.8.y
and the diffstat can be found below.thanks,
greg k-h
Results from Linaro’s test farm.
No regressions on arm64, arm, x86_64, and i386.
Summary
------------------------------------------------------------------------
kernel: 5.8.10-rc1
git repo: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
git branch: linux-5.8.y
git commit: 337aafeeb4cdb1868fff6b6689b715ff376249a2
git describe: v5.8.9-178-g337aafeeb4cd
Test details: https://qa-reports.linaro.org/lkft/linux-stable-rc-linux-5.8.y/build/v5.8.9-178-g337aafeeb4cd
No regressions (compared to build v5.8.9)
No fixes (compared to build v5.8.9)
Ran 37876 total tests in the following environments and test suites.
Environments
--------------
- dragonboard-410c
- hi6220-hikey
- i386
- juno-r2
- juno-r2-compat
- juno-r2-kasan
- nxp-ls2088
- qemu_arm
- qemu_arm64
- qemu_i386
- qemu_x86_64
- x15
- x86
- x86-kasan
Test Suites
-----------
* build
* install-android-platform-tools-r2600
* kselftest
* kselftest/drivers
* kselftest/filesystems
* kselftest/net
* libhugetlbfs
* linux-log-parser
* ltp-cap_bounds-tests
* ltp-commands-tests
* ltp-containers-tests
* ltp-controllers-tests
* ltp-cpuhotplug-tests
* ltp-crypto-tests
* ltp-dio-tests
* ltp-fcntl-locktests-tests
* ltp-filecaps-tests
* ltp-fs-tests
* ltp-fs_bind-tests
* ltp-fs_perms_simple-tests
* ltp-fsx-tests
* ltp-hugetlb-tests
* ltp-io-tests
* ltp-math-tests
* ltp-mm-tests
* ltp-tracing-tests
* perf
* v4l2-compliance
* ltp-ipc-tests
* ltp-nptl-tests
* ltp-pty-tests
* ltp-sched-tests
* ltp-securebits-tests
* network-basic-tests
* ltp-cve-tests
* ltp-open-posix-tests
* ltp-syscalls-tests
* kselftest-vsyscall-mode-native
* kselftest-vsyscall-mode-native/drivers
* kselftest-vsyscall-mode-native/filesystems
* kselftest-vsyscall-mode-native/net
* kselftest-vsyscall-mode-none
* kselftest-vsyscall-mode-none/drivers
* kselftest-vsyscall-mode-none/filesystems
* kselftest-vsyscall-mode-none/net
* ssuite
Signature · 2 lines
Linaro LKFT https://lkft.linaro.org
Greg Kroah-Hartman
maintainerQuoted 19 lines · Naresh Kamboju
Quoted 17 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.8.10 release. There are 177 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Thu, 17 Sep 2020 14:06:12 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.8.10-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.8.y
and the diffstat can be found below.thanks,
Quoted 7 lines
Quoted 2 lines
greg k-h
Results from Linaro’s test farm.
No regressions on arm64, arm,x86_64, and i386.
Thanks for testing all of these and letting me know.
greg k-h
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.8.10 release. There are 177 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Thu, 17 Sep 2020 14:06:12 +0000. Anything received after that time might be too late.
Build results:
total: 154 pass: 154 fail: 0 Qemu test results: total: 430 pass: 430 fail: 0
Guenter
Greg Kroah-Hartman
maintainerQuoted 10 lines · Guenter Roeck
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.8.10 release. There are 177 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Thu, 17 Sep 2020 14:06:12 +0000. Anything received after that time might be too late.
Quoted 6 lines
Build results:
total: 154 pass: 154 fail: 0 Qemu test results: total: 430 pass: 430 fail: 0Tested-by Guenter Roeck <[email protected]>
Thanks for testing them all and letting me know.
greg k-h