Linux 5.10.23
[email protected]
maintainerFrom: Greg Kroah-Hartman <[email protected]>
I'm announcing the release of the 5.10.23 kernel.
All users of the 5.10 kernel series must upgrade.
The updated 5.10.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.10.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/arm64/Kconfig | 5 arch/parisc/Kconfig | 7 arch/x86/kvm/svm/svm.c | 1 arch/x86/kvm/x86.h | 2 drivers/acpi/acpica/acobject.h | 1 drivers/acpi/acpica/evhandler.c | 7 drivers/acpi/acpica/evregion.c | 64 ++- drivers/acpi/acpica/evxfregn.c | 2 drivers/acpi/video_detect.c | 7 drivers/bluetooth/hci_qca.c | 19 - drivers/bus/ti-sysc.c | 10 drivers/gpu/drm/msm/adreno/a5xx_gpu.c | 2 drivers/hid/hid-ids.h | 3 drivers/hid/hid-mf.c | 2 drivers/hid/hid-quirks.c | 2 drivers/hid/i2c-hid/i2c-hid-core.c | 2 drivers/iommu/amd/iommu.c | 10 drivers/media/pci/cx23885/cx23885-core.c | 4 drivers/misc/eeprom/eeprom_93xx46.c | 15 drivers/mmc/host/sdhci-of-dwcmshc.c | 1 drivers/net/wireless/marvell/mwifiex/pcie.c | 18 - drivers/net/wireless/marvell/mwifiex/pcie.h | 2 drivers/nvme/host/pci.c | 8 drivers/pci/controller/cadence/pci-j721e.c | 3 drivers/pci/controller/cadence/pcie-cadence-host.c | 81 +++- drivers/pci/controller/cadence/pcie-cadence.h | 11 drivers/pci/quirks.c | 3 drivers/platform/x86/acer-wmi.c | 169 ++++++++- drivers/scsi/ufs/ufs-exynos.c | 9 drivers/scsi/ufs/ufs-mediatek.c | 1 drivers/scsi/ufs/ufshcd.c | 42 +- drivers/scsi/ufs/ufshcd.h | 10 drivers/usb/cdns3/core.c | 3 drivers/usb/cdns3/core.h | 4 drivers/usb/cdns3/host-export.h | 6 drivers/usb/cdns3/host.c | 60 +++ fs/btrfs/delayed-inode.c | 3 fs/btrfs/inode.c | 2 fs/btrfs/qgroup.c | 8 fs/btrfs/qgroup.h | 2 include/linux/eeprom_93xx46.h | 2 include/linux/platform_data/ti-sysc.h | 1 sound/soc/intel/boards/bytcr_rt5640.c | 12 sound/soc/intel/boards/sof_sdw.c | 78 +++- sound/soc/sof/intel/Kconfig | 2 sound/usb/mixer_quirks.c | 367 ++++++++++++++------- 47 files changed, 819 insertions(+), 256 deletions(-)
Abhishek Pandit-Subedi (1):
Bluetooth: btqca: Add valid le states quirk
Andrey Ryabinin (1):
iommu/amd: Fix sleeping in atomic in increase_address_space()
AngeloGioacchino Del Regno (1):
drm/msm/a5xx: Remove overwriting A5XX_PC_DBG_ECO_CNTL register
Aswath Govindraju (1):
misc: eeprom_93xx46: Add quirk to support Microchip 93LC46B eeprom
Avri Altman (1):
scsi: ufs: Fix a duplicate dev quirk number
Babu Moger (1):
KVM: SVM: Clear the CR4 register on reset
Bjorn Helgaas (1):
PCI: Add function 1 DMA alias quirk for Marvell 9215 SATA controller
Chris Chiu (1):
ASoC: Intel: bytcr_rt5640: Add quirk for ARCHOS Cesium 140
Daniel Lee Kruse (1):
media: cx23885: add more quirks for reset DMA on some AMD IOMMU
Ethan Warth (1):
HID: mf: add support for 0079:1846 Mayflash/Dragonrise USB Gamecube Adapter
Fabian Lesniak (1):
ALSA: usb-audio: add mixer quirks for Pioneer DJM-900NXS2
Greg Kroah-Hartman (1):
Linux 5.10.23
Hans de Goede (8):
ACPICA: Fix race in generic_serial_bus (I2C) and GPIO op_region parameter handling platform/x86: acer-wmi: Cleanup ACER_CAP_FOO defines
platform/x86: acer-wmi: Cleanup accelerometer device handling platform/x86: acer-wmi: Add new force_caps module parameter platform/x86: acer-wmi: Add ACER_CAP_SET_FUNCTION_MODE capability flag platform/x86: acer-wmi: Add support for SW_TABLET_MODE on Switch devices platform/x86: acer-wmi: Add ACER_CAP_KBD_DOCK quirk for the Aspire Switch 10E SW3-016
HID: i2c-hid: Add I2C_HID_QUIRK_NO_IRQ_AFTER_RESET for ITE8568 EC on Voyo Winpad A15
Helge Deller (1):
parisc: Enable -mlong-calls gcc option with CONFIG_COMPILE_TEST
Jasper St. Pierre (1):
ACPI: video: Add DMI quirk for GIGABYTE GB-BXBT-2807
Jisheng Zhang (1):
mmc: sdhci-of-dwcmshc: set SDHCI_QUIRK2_PRESET_VALUE_BROKEN
Julian Einwag (1):
nvme-pci: mark Seagate Nytro XM1440 as QUIRK_NO_NS_DESC_LIST.
Kiwoong Kim (4):
scsi: ufs: Add a quirk to permit overriding UniPro defaults
scsi: ufs: Introduce a quirk to allow only page-aligned sg entries
scsi: ufs: ufs-exynos: Apply vendor-specific values for three timeouts
scsi: ufs: ufs-exynos: Use UFSHCD_QUIRK_ALIGN_SG_WITH_PAGE_SIZE
Nadeem Athani (1):
PCI: cadence: Retrain Link to work around Gen2 training defect
Nathan Chancellor (1):
arm64: Make CPU_BIG_ENDIAN depend on ld.bfd or ld.lld 13.0.0+
Nikolay Borisov (2):
btrfs: export and rename qgroup_reserve_meta
btrfs: don't flush from btrfs_delayed_inode_reserve_metadata
Olivia Mackintosh (1):
ALSA: usb-audio: Add DJM750 to Pioneer mixer quirk
Pascal Terjan (1):
nvme-pci: add quirks for Lexar 256GB SSD
Peter Chen (3):
usb: cdns3: host: add .suspend_quirk for xhci-plat.c
usb: cdns3: host: add xhci_plat_priv quirk XHCI_SKIP_PHY_INIT
usb: cdns3: add quirk for enable runtime pm by default
Pierre-Louis Bossart (5):
ASoC: SOF: Intel: broadwell: fix mutual exclusion with catpt driver
ASoC: Intel: sof_sdw: add quirk for new TigerLake-SDCA device
ASoC: Intel: sof_sdw: add missing TGL_HDMI quirk for Dell SKU 0A32
ASoC: Intel: sof_sdw: reorganize quirks by generation
ASoC: Intel: sof_sdw: add quirk for HP Spectre x360 convertible
Roger Quadros (1):
usb: cdns3: fix NULL pointer dereference on no platform data
Stanley Chu (1):
scsi: ufs-mediatek: Enable UFSHCI_QUIRK_SKIP_MANUAL_WB_FLUSH_CTRL
Tony Lindgren (1):
bus: ti-sysc: Implement GPMC debug quirk to drop platform data
Tsuchiya Yuto (1):
mwifiex: pcie: skip cancel_work_sync() on reset failure path
Vitaly Kuznetsov (1):
KVM: x86: Supplement __cr4_reserved_bits() with X86_FEATURE_PCID check
Zoltán Böszörményi (1):
nvme-pci: mark Kingston SKC2000 as not supporting the deepest power state
[email protected]
maintainerFrom: Greg Kroah-Hartman <[email protected]>
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 10 -SUBLEVEL = 22 +SUBLEVEL = 23 EXTRAVERSION = NAME = Dare mighty things
arch/arm64/Kconfig +3 -2
@@ -950,8 +950,9 @@ choice that is selected here. config CPU_BIG_ENDIAN - bool "Build big-endian kernel" - help + bool "Build big-endian kernel" + depends on !LD_IS_LLD || LLD_VERSION >= 130000 + help Say Y if you plan on running a kernel with a big-endian userspace. config CPU_LITTLE_ENDIAN
arch/parisc/Kconfig +5 -2
@@ -201,9 +201,12 @@ config PREFETCH def_bool y depends on PA8X00 || PA7200 +config PARISC_HUGE_KERNEL + def_bool y if !MODULES || UBSAN || FTRACE || COMPILE_TEST + config MLONGCALLS - def_bool y if !MODULES || UBSAN || FTRACE - bool "Enable the -mlong-calls compiler option for big kernels" if MODULES && !UBSAN && !FTRACE + def_bool y if PARISC_HUGE_KERNEL + bool "Enable the -mlong-calls compiler option for big kernels" if !PARISC_HUGE_KERNEL depends on PA8X00 help If you configure the kernel to include many drivers built-in instead
arch/x86/kvm/svm/svm.c +1 -0
@@ -1192,6 +1192,7 @@ static void init_vmcb(struct vcpu_svm *svm)init_sys_seg (&save->ldtr,SEG_TYPE_LDT );init_sys_seg (&save->tr,SEG_TYPE_BUSY_TSS16 ); +svm_set_cr4 (&svm->vcpu,0 );svm_set_efer (&svm->vcpu,0 ); save->dr6 =0xffff0ff0 ;kvm_set_rflags (&svm->vcpu,2 );
arch/x86/kvm/x86.h +2 -0
@@ -404,6 +404,8 @@ bool kvm_msr_allowed(struct kvm_vcpu *vcpu, u32 index, u32 type); __reserved_bits |=X86_CR4_UMIP ; \if (!__cpu_has (__c,X86_FEATURE_VMX )) \ __reserved_bits |=X86_CR4_VMXE ; \ +if (!__cpu_has (__c,X86_FEATURE_PCID )) \ + __reserved_bits |=X86_CR4_PCIDE ; \ __reserved_bits; \ })
drivers/acpi/acpica/acobject.h +1 -0
@@ -284,6 +284,7 @@ struct acpi_object_addr_handler {acpi_adr_space_handler handler;struct acpi_namespace_node *node;/* Parent device */ void *context; +acpi_mutex context_mutex;acpi_adr_space_setup setup;union acpi_operand_object *region_list;/* Regions using this handler */ union acpi_operand_object *next;
drivers/acpi/acpica/evhandler.c +7 -0
@@ -489,6 +489,13 @@ acpi_ev_install_space_handler(struct acpi_namespace_node *node,/* Init handler obj */ + status = +acpi_os_create_mutex (&handler_obj->address_space.context_mutex); +if (ACPI_FAILURE (status)) { +acpi_ut_remove_reference (handler_obj); + goto unlock_and_exit; + } + handler_obj->address_space.space_id = (u8 )space_id; handler_obj->address_space.handler_flags = flags; handler_obj->address_space.region_list =NULL ;
drivers/acpi/acpica/evregion.c +47 -17
117 lines not on this page · raw message
drivers/acpi/acpica/evxfregn.c +2 -0
@@ -201,6 +201,8 @@ acpi_remove_address_space_handler(acpi_handle device,/* Now we can delete the handler object */ +acpi_os_release_mutex (handler_obj->address_space. + context_mutex);acpi_ut_remove_reference (handler_obj); goto unlock_and_exit; }
drivers/acpi/video_detect.c +7 -0
@@ -140,6 +140,13 @@ static const struct dmi_system_id video_detect_dmi_table[] = { }, { .callback = video_detect_force_vendor, + .ident = "GIGABYTE GB-BXBT-2807", + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"GIGABYTE" ), + DMI_MATCH(DMI_PRODUCT_NAME, "GB-BXBT-2807"), + }, + }, + { .ident ="Sony VPCEH3U1E" , .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
drivers/bluetooth/hci_qca.c +13 -6
@@ -78,6 +78,7 @@ enum qca_flags {enum qca_capabilities {QCA_CAP_WIDEBAND_SPEECH =BIT (0 ), +QCA_CAP_VALID_LE_STATES =BIT (1 ), };/* HCI_IBS transmit side sleep protocol states */
@@ -1782,7 +1783,7 @@ static const struct qca_device_data qca_soc_data_wcn3991 = { { "vddch0", 450000 }, }, .num_vregs = 4, - .capabilities = QCA_CAP_WIDEBAND_SPEECH, + .capabilities = QCA_CAP_WIDEBAND_SPEECH | QCA_CAP_VALID_LE_STATES, }; static const struct qca_device_data qca_soc_data_wcn3998 = {
@@ -2019,11 +2020,17 @@ static int qca_serdev_probe(struct serdev_device *serdev) hdev->shutdown = qca_power_off; } -/* Wideband speech support must be set per driver since it can't be -* queried via hci. -*/ -if (data && (data->capabilities &QCA_CAP_WIDEBAND_SPEECH )) -set_bit (HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED , &hdev->quirks); +if (data) { +/* Wideband speech support must be set per driver since it can't +* be queried via hci. Same with the valid le states quirk. +*/ +if (data->capabilities &QCA_CAP_WIDEBAND_SPEECH ) +set_bit (HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED , + &hdev->quirks); + +if (data->capabilities &QCA_CAP_VALID_LE_STATES ) +set_bit (HCI_QUIRK_VALID_LE_STATES , &hdev->quirks); + }return 0 ; }
drivers/bus/ti-sysc.c +10 -0
@@ -1379,6 +1379,8 @@ static const struct sysc_revision_quirk sysc_revision_quirks[] = { SYSC_QUIRK_CLKDM_NOAUTO),SYSC_QUIRK ("dwc3" ,0x488c0000 ,0 ,0x10 , -ENODEV ,0x500a0200 ,0xffffffff ,SYSC_QUIRK_CLKDM_NOAUTO ), +SYSC_QUIRK ("gpmc" ,0 ,0 ,0x10 ,0x14 ,0x00000060 ,0xffffffff , +SYSC_QUIRK_GPMC_DEBUG ),SYSC_QUIRK ("hdmi" ,0 ,0 ,0x10 , -ENODEV ,0x50030200 ,0xffffffff ,SYSC_QUIRK_OPT_CLKS_NEEDED ), SYSC_QUIRK("hdq1w", 0, 0, 0x14, 0x18, 0x00000006, 0xffffffff,
@@ -1814,6 +1816,14 @@ static void sysc_init_module_quirks(struct sysc *ddata)return ; } +#ifdef CONFIG_OMAP_GPMC_DEBUG +if (ddata->cfg.quirks &SYSC_QUIRK_GPMC_DEBUG ) { + ddata->cfg.quirks |=SYSC_QUIRK_NO_RESET_ON_INIT ; + +return ; + } +#endif +if (ddata->cfg.quirks &SYSC_MODULE_QUIRK_I2C ) { ddata->pre_reset_quirk = sysc_pre_reset_quirk_i2c; ddata->post_reset_quirk = sysc_post_reset_quirk_i2c;
drivers/gpu/drm/msm/adreno/a5xx_gpu.c +0 -2
@@ -626,8 +626,6 @@ static int a5xx_hw_init(struct msm_gpu *gpu)if (adreno_gpu->info->quirks &ADRENO_QUIRK_TWO_PASS_USE_WFI )gpu_rmw (gpu,REG_A5XX_PC_DBG_ECO_CNTL ,0 , (1 <<8 )); -gpu_write (gpu,REG_A5XX_PC_DBG_ECO_CNTL ,0xc0200100 ); -/* Enable USE_RETENTION_FLOPS */ gpu_write (gpu,REG_A5XX_CP_CHICKEN_DBG ,0x02000000 );
drivers/hid/hid-ids.h +3 -0
@@ -359,6 +359,7 @@#define USB_DEVICE_ID_DRAGONRISE_DOLPHINBAR 0x1803#define USB_DEVICE_ID_DRAGONRISE_GAMECUBE1 0x1843#define USB_DEVICE_ID_DRAGONRISE_GAMECUBE2 0x1844 +#define USB_DEVICE_ID_DRAGONRISE_GAMECUBE3 0x1846#define USB_VENDOR_ID_DWAV 0x0eef#define USB_DEVICE_ID_EGALAX_TOUCHCONTROLLER 0x0001
@@ -638,6 +639,8 @@#define USB_DEVICE_ID_INNEX_GENESIS_ATARI 0x4745#define USB_VENDOR_ID_ITE 0x048d +#define I2C_VENDOR_ID_ITE 0x103c +#define I2C_DEVICE_ID_ITE_VOYO_WINPAD_A15 0x184f#define USB_DEVICE_ID_ITE_LENOVO_YOGA 0x8386#define USB_DEVICE_ID_ITE_LENOVO_YOGA2 0x8350#define I2C_DEVICE_ID_ITE_LENOVO_LEGION_Y720 0x837a
drivers/hid/hid-mf.c +2 -0
@@ -153,6 +153,8 @@ static const struct hid_device_id mf_devices[] = { .driver_data = HID_QUIRK_MULTI_INPUT }, { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_GAMECUBE2), .driver_data = 0 }, /* No quirk required */ + { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_GAMECUBE3), + .driver_data = HID_QUIRK_MULTI_INPUT }, { } };MODULE_DEVICE_TABLE (hid, mf_devices);
drivers/hid/hid-quirks.c +2 -0
@@ -72,6 +72,7 @@ static const struct hid_device_id hid_quirks[] = { { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_REDRAGON_SEYMUR2), HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE }, { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_DOLPHINBAR), HID_QUIRK_MULTI_INPUT }, { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_GAMECUBE1), HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_GAMECUBE3), HID_QUIRK_MULTI_INPUT }, { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_PS3), HID_QUIRK_MULTI_INPUT }, { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_WIIU), HID_QUIRK_MULTI_INPUT }, { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_EGALAX_TOUCHCONTROLLER), HID_QUIRK_MULTI_INPUT | HID_QUIRK_NOGET },
@@ -484,6 +485,7 @@ static const struct hid_device_id hid_have_special_driver[] = { { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_DOLPHINBAR) }, { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_GAMECUBE1) }, { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_GAMECUBE2) }, + { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_GAMECUBE3) }, #endif #if IS_ENABLED(CONFIG_HID_MICROSOFT) { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_COMFORT_MOUSE_4500) },
drivers/hid/i2c-hid/i2c-hid-core.c +2 -0
@@ -171,6 +171,8 @@ static const struct i2c_hid_quirks { I2C_HID_QUIRK_SET_PWR_WAKEUP_DEV }, {I2C_VENDOR_ID_HANTICK ,I2C_PRODUCT_ID_HANTICK_5288 , I2C_HID_QUIRK_NO_IRQ_AFTER_RESET }, + { I2C_VENDOR_ID_ITE, I2C_DEVICE_ID_ITE_VOYO_WINPAD_A15, + I2C_HID_QUIRK_NO_IRQ_AFTER_RESET }, { I2C_VENDOR_ID_RAYDIUM, I2C_PRODUCT_ID_RAYDIUM_3118, I2C_HID_QUIRK_NO_IRQ_AFTER_RESET }, { USB_VENDOR_ID_ELAN, HID_ANY_ID,
drivers/iommu/amd/iommu.c +6 -4
@@ -1503,6 +1503,10 @@ static bool increase_address_space(struct protection_domain *domain,bool ret = true;u64 *pte; + pte = (void *)get_zeroed_page (gfp); +if (!pte) +return false; +spin_lock_irqsave (&domain->lock, flags);amd_iommu_domain_get_pgtable (domain, &pgtable);
@@ -1514,10 +1518,6 @@ static bool increase_address_space(struct protection_domain *domain,if (WARN_ON_ONCE (pgtable.mode ==PAGE_MODE_6_LEVEL )) goto out; - pte = (void *)get_zeroed_page (gfp); -if (!pte) - goto out; - *pte =PM_LEVEL_PDE (pgtable.mode,iommu_virt_to_phys (pgtable.root)); pgtable.root = pte;
@@ -1531,10 +1531,12 @@ static bool increase_address_space(struct protection_domain *domain,*/ amd_iommu_domain_set_pgtable (domain, pte, pgtable.mode); + pte =NULL ; ret = true; out:spin_unlock_irqrestore (&domain->lock, flags); +free_page ((unsigned long )pte);return ret; }
drivers/media/pci/cx23885/cx23885-core.c +4 -0
@@ -2074,6 +2074,10 @@ static struct {* 0x1451 is PCI ID for the IOMMU found on Ryzen */ { PCI_VENDOR_ID_AMD, 0x1451 }, +/* According to sudo lspci -nn, +* 0x1423 is the PCI ID for the IOMMU found on Kaveri +*/ + { PCI_VENDOR_ID_AMD, 0x1423 }, };static bool cx23885_does_need_dma_reset (void )
drivers/misc/eeprom/eeprom_93xx46.c +15 -0
@@ -35,6 +35,10 @@ static const struct eeprom_93xx46_devtype_data atmel_at93c46d_data = { EEPROM_93XX46_QUIRK_INSTRUCTION_LENGTH, }; +static const struct eeprom_93xx46_devtype_data microchip_93lc46b_data = { + .quirks =EEPROM_93XX46_QUIRK_EXTRA_READ_CYCLE , +}; +struct eeprom_93xx46_dev {struct spi_device *spi;struct eeprom_93xx46_platform_data *pdata;
@@ -55,6 +59,11 @@ static inline bool has_quirk_instruction_length(struct eeprom_93xx46_dev *edev)return edev->pdata->quirks &EEPROM_93XX46_QUIRK_INSTRUCTION_LENGTH ; } +static inline bool has_quirk_extra_read_cycle (struct eeprom_93xx46_dev *edev) +{ +return edev->pdata->quirks &EEPROM_93XX46_QUIRK_EXTRA_READ_CYCLE ; +} +static int eeprom_93xx46_read (void *priv,unsigned int off,void *val,size_t count) {
@@ -96,6 +105,11 @@ static int eeprom_93xx46_read(void *priv, unsigned int off,dev_dbg (&edev->spi->dev,"read cmd 0x%x, %d Hz\n" , cmd_addr, edev->spi->max_speed_hz); +if (has_quirk_extra_read_cycle (edev)) { + cmd_addr <<=1 ; + bits +=1 ; + } +spi_message_init (&m); t[0 ].tx_buf = (char *)&cmd_addr;
@@ -363,6 +377,7 @@ static void select_deassert(void *context)static const struct of_device_id eeprom_93xx46_of_table[] = { { .compatible ="eeprom-93xx46" , }, { .compatible ="atmel,at93c46d" , .data = &atmel_at93c46d_data, }, + { .compatible ="microchip,93lc46b" , .data = µchip_93lc46b_data, }, {} };MODULE_DEVICE_TABLE (of, eeprom_93xx46_of_table);
drivers/mmc/host/sdhci-of-dwcmshc.c +1 -0
@@ -112,6 +112,7 @@ static const struct sdhci_ops sdhci_dwcmshc_ops = {static const struct sdhci_pltfm_data sdhci_dwcmshc_pdata = { .ops = &sdhci_dwcmshc_ops, .quirks =SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN , + .quirks2 =SDHCI_QUIRK2_PRESET_VALUE_BROKEN , };static int dwcmshc_probe (struct platform_device *pdev)
drivers/net/wireless/marvell/mwifiex/pcie.c +17 -1
@@ -526,6 +526,8 @@ static void mwifiex_pcie_reset_prepare(struct pci_dev *pdev)clear_bit (MWIFIEX_IFACE_WORK_DEVICE_DUMP , &card->work_flags);clear_bit (MWIFIEX_IFACE_WORK_CARD_RESET , &card->work_flags);mwifiex_dbg (adapter,INFO ,"%s, successful\n" , __func__); + + card->pci_reset_ongoing = true; }/*
@@ -554,6 +556,8 @@ static void mwifiex_pcie_reset_done(struct pci_dev *pdev)dev_err (&pdev->dev,"reinit failed: %d\n" , ret); else mwifiex_dbg(adapter, INFO, "%s, successful\n", __func__); + + card->pci_reset_ongoing = false; }static const struct pci_error_handlers mwifiex_pcie_err_handler = {
@@ -3142,7 +3146,19 @@ static void mwifiex_cleanup_pcie(struct mwifiex_adapter *adapter)int ret;u32 fw_status; -cancel_work_sync (&card->work); +/* Perform the cancel_work_sync() only when we're not resetting +* the card. It's because that function never returns if we're +* in reset path. If we're here when resetting the card, it means +* that we failed to reset the card (reset failure path). +*/ +if (!card->pci_reset_ongoing) { +mwifiex_dbg (adapter,MSG ,"performing cancel_work_sync()...\n" ); +cancel_work_sync (&card->work); +mwifiex_dbg (adapter,MSG ,"cancel_work_sync() done\n" ); + }else { +mwifiex_dbg (adapter,MSG , +"skipped cancel_work_sync() because we're in card reset failure path\n" ); + } ret =mwifiex_read_reg (adapter, reg->fw_status, &fw_status);if (fw_status ==FIRMWARE_READY_PCIE ) {
drivers/net/wireless/marvell/mwifiex/pcie.h +2 -0
@@ -242,6 +242,8 @@ struct pcie_service_card {struct mwifiex_msix_context share_irq_ctx;struct work_struct work;unsigned long work_flags; + +bool pci_reset_ongoing; }; static inline int
drivers/nvme/host/pci.c +7 -1
@@ -3235,7 +3235,8 @@ static const struct pci_device_id nvme_id_table[] = { { PCI_DEVICE(0x126f, 0x2263), /* Silicon Motion unidentified */ .driver_data = NVME_QUIRK_NO_NS_DESC_LIST, }, { PCI_DEVICE(0x1bb1, 0x0100), /* Seagate Nytro Flash Storage */ - .driver_data = NVME_QUIRK_DELAY_BEFORE_CHK_RDY, }, + .driver_data = NVME_QUIRK_DELAY_BEFORE_CHK_RDY | + NVME_QUIRK_NO_NS_DESC_LIST, }, { PCI_DEVICE(0x1c58, 0x0003), /* HGST adapter */ .driver_data = NVME_QUIRK_DELAY_BEFORE_CHK_RDY, }, { PCI_DEVICE(0x1c58, 0x0023), /* WDC SN200 adapter */
@@ -3249,6 +3250,9 @@ static const struct pci_device_id nvme_id_table[] = { NVME_QUIRK_IGNORE_DEV_SUBNQN, }, { PCI_DEVICE(0x1987, 0x5016), /* Phison E16 */ .driver_data = NVME_QUIRK_IGNORE_DEV_SUBNQN, }, + { PCI_DEVICE(0x1b4b, 0x1092), /* Lexar 256 GB SSD */ + .driver_data = NVME_QUIRK_NO_NS_DESC_LIST | + NVME_QUIRK_IGNORE_DEV_SUBNQN, }, { PCI_DEVICE(0x1d1d, 0x1f1f), /* LighNVM qemu device */ .driver_data = NVME_QUIRK_LIGHTNVM, }, { PCI_DEVICE(0x1d1d, 0x2807), /* CNEX WL */
@@ -3264,6 +3268,8 @@ static const struct pci_device_id nvme_id_table[] = { .driver_data = NVME_QUIRK_DISABLE_WRITE_ZEROES, }, { PCI_DEVICE(0x15b7, 0x2001), /* Sandisk Skyhawk */ .driver_data = NVME_QUIRK_DISABLE_WRITE_ZEROES, }, + { PCI_DEVICE(0x2646, 0x2262), /* KINGSTON SKC2000 NVMe SSD */ + .driver_data = NVME_QUIRK_NO_DEEPEST_PS, }, { PCI_DEVICE(0x2646, 0x2263), /* KINGSTON A2000 NVMe SSD */ .driver_data = NVME_QUIRK_NO_DEEPEST_PS, }, { PCI_DEVICE(PCI_VENDOR_ID_APPLE, 0x2001),
drivers/pci/controller/cadence/pci-j721e.c +3 -0
@@ -63,6 +63,7 @@ enum j721e_pcie_mode {struct j721e_pcie_data {enum j721e_pcie_mode mode; +bool quirk_retrain_flag; };static inline u32 j721e_pcie_user_readl (struct j721e_pcie *pcie,u32 offset)
@@ -270,6 +271,7 @@ static struct pci_ops cdns_ti_pcie_host_ops = {static const struct j721e_pcie_data j721e_pcie_rc_data = { .mode =PCI_MODE_RC , + .quirk_retrain_flag = true, };static const struct j721e_pcie_data j721e_pcie_ep_data = {
@@ -378,6 +380,7 @@ static int j721e_pcie_probe(struct platform_device *pdev) bridge->ops = &cdns_ti_pcie_host_ops; rc =pci_host_bridge_priv (bridge); + rc->quirk_retrain_flag = data->quirk_retrain_flag; cdns_pcie = &rc->pcie; cdns_pcie->dev = dev;
drivers/pci/controller/cadence/pcie-cadence-host.c +63 -18
99 lines not on this page · raw message
drivers/pci/controller/cadence/pcie-cadence.h +10 -1
@@ -119,7 +119,7 @@* Root Port Registers (PCI configuration space for the root port function) */ #define CDNS_PCIE_RP_BASE 0x00200000 - +#define CDNS_PCIE_RP_CAP_OFFSET 0xc0/* * Address Translation Registers
@@ -290,6 +290,7 @@ struct cdns_pcie {* @device_id: PCI device ID * @avail_ib_bar: Satus of RP_BAR0, RP_BAR1 and RP_NO_BAR if it's free or * available +* @quirk_retrain_flag: Retrain link as quirk for PCIe Gen2 */ struct cdns_pcie_rc {struct cdns_pcie pcie;
@@ -298,6 +299,7 @@ struct cdns_pcie_rc {u32 vendor_id;u32 device_id;bool avail_ib_bar[CDNS_PCIE_RP_MAX_IB ]; +bool quirk_retrain_flag; };/**
@@ -413,6 +415,13 @@ static inline void cdns_pcie_rp_writew(struct cdns_pcie *pcie,cdns_pcie_write_sz (addr,0x2 , value); } +static inline u16 cdns_pcie_rp_readw (struct cdns_pcie *pcie,u32 reg) +{ +void __iomem *addr = pcie->reg_base +CDNS_PCIE_RP_BASE + reg; + +return cdns_pcie_read_sz (addr,0x2 ); +} +/* Endpoint Function register access */ static inline void cdns_pcie_ep_fn_writeb (struct cdns_pcie *pcie,u8 fn,u32 reg,u8 value)
drivers/pci/quirks.c +3 -0
@@ -3998,6 +3998,9 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_MARVELL_EXT, 0x9183,/* https://bugzilla.kernel.org/show_bug.cgi?id=42679#c46 */ DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_MARVELL_EXT ,0x91a0 , quirk_dma_func1_alias); +/* https://bugzilla.kernel.org/show_bug.cgi?id=42679#c135 */ +DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_MARVELL_EXT ,0x9215 , + quirk_dma_func1_alias);/* https://bugzilla.kernel.org/show_bug.cgi?id=42679#c127 */ DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_MARVELL_EXT ,0x9220 , quirk_dma_func1_alias);
drivers/platform/x86/acer-wmi.c +140 -29
302 lines not on this page · raw message
drivers/scsi/ufs/ufs-exynos.c +8 -1
@@ -653,6 +653,11 @@ static int exynos_ufs_pre_pwr_mode(struct ufs_hba *hba, } } +/* setting for three timeout values for traffic class #0 */ +ufshcd_dme_set (hba,UIC_ARG_MIB (PA_PWRMODEUSERDATA0 ),8064 ); +ufshcd_dme_set (hba,UIC_ARG_MIB (PA_PWRMODEUSERDATA1 ),28224 ); +ufshcd_dme_set (hba,UIC_ARG_MIB (PA_PWRMODEUSERDATA2 ),20160 ); +return 0 ; out:return ret;
@@ -1249,7 +1254,9 @@ struct exynos_ufs_drv_data exynos_ufs_drvs = {UFSHCI_QUIRK_BROKEN_HCE |UFSHCI_QUIRK_SKIP_RESET_INTR_AGGR |UFSHCD_QUIRK_BROKEN_OCS_FATAL_ERROR | - UFSHCI_QUIRK_SKIP_MANUAL_WB_FLUSH_CTRL, +UFSHCI_QUIRK_SKIP_MANUAL_WB_FLUSH_CTRL | +UFSHCD_QUIRK_SKIP_DEF_UNIPRO_TIMEOUT_SETTING | + UFSHCD_QUIRK_ALIGN_SG_WITH_PAGE_SIZE, .opts =EXYNOS_UFS_OPT_HAS_APB_CLK_CTRL |EXYNOS_UFS_OPT_BROKEN_AUTO_CLK_CTRL | EXYNOS_UFS_OPT_BROKEN_RX_SEL_IDX |
drivers/scsi/ufs/ufs-mediatek.c +1 -0
@@ -566,6 +566,7 @@ static int ufs_mtk_init(struct ufs_hba *hba)/* Enable WriteBooster */ hba->caps |=UFSHCD_CAP_WB_EN ; + hba->quirks |=UFSHCI_QUIRK_SKIP_MANUAL_WB_FLUSH_CTRL ; hba->vps->wb_flush_threshold =UFS_WB_BUF_REMAIN_PERCENT (80 );/*
drivers/scsi/ufs/ufshcd.c +23 -19
54 lines not on this page · raw message
drivers/scsi/ufs/ufshcd.h +10 -0
@@ -544,6 +544,16 @@ enum ufshcd_quirks {*/ UFSHCI_QUIRK_SKIP_MANUAL_WB_FLUSH_CTRL =1 <<12 , +/* +* This quirk needs to disable unipro timeout values +* before power mode change +*/ +UFSHCD_QUIRK_SKIP_DEF_UNIPRO_TIMEOUT_SETTING =1 <<13 , + +/* +* This quirk allows only sg entries aligned with page size. +*/ + UFSHCD_QUIRK_ALIGN_SG_WITH_PAGE_SIZE = 1 << 14, }; enum ufshcd_caps {
drivers/usb/cdns3/core.c +2 -1
@@ -569,7 +569,8 @@ static int cdns3_probe(struct platform_device *pdev)device_set_wakeup_capable (dev, true);pm_runtime_set_active (dev);pm_runtime_enable (dev); -pm_runtime_forbid (dev); +if (!(cdns->pdata && (cdns->pdata->quirks &CDNS3_DEFAULT_PM_RUNTIME_ALLOW ))) +pm_runtime_forbid (dev);/* * The controller needs less time between bus and controller suspend,
drivers/usb/cdns3/core.h +4 -0
@@ -42,6 +42,8 @@ struct cdns3_role_driver {struct cdns3_platform_data {int (*platform_suspend)(struct device *dev,bool suspend,bool wakeup); +unsigned long quirks; +#define CDNS3_DEFAULT_PM_RUNTIME_ALLOW BIT(0) };/**
@@ -73,6 +75,7 @@ struct cdns3_platform_data {* @wakeup_pending: wakeup interrupt pending * @pdata: platform data from glue layer * @lock: spinlock structure +* @xhci_plat_data: xhci private data structure pointer */ struct cdns3 {struct device *dev;
@@ -106,6 +109,7 @@ struct cdns3 {bool wakeup_pending;struct cdns3_platform_data *pdata;spinlock_t lock; +struct xhci_plat_priv *xhci_plat_data; };int cdns3_hw_role_switch (struct cdns3 *cdns);
drivers/usb/cdns3/host-export.h +6 -0
@@ -9,9 +9,11 @@#ifndef __LINUX_CDNS3_HOST_EXPORT#define __LINUX_CDNS3_HOST_EXPORT +struct usb_hcd ;#ifdef CONFIG_USB_CDNS3_HOST int cdns3_host_init (struct cdns3 *cdns); +int xhci_cdns3_suspend_quirk (struct usb_hcd *hcd);#else
@@ -21,6 +23,10 @@ static inline int cdns3_host_init(struct cdns3 *cdns) }static inline void cdns3_host_exit (struct cdns3 *cdns) { } +static inline int xhci_cdns3_suspend_quirk (struct usb_hcd *hcd) +{ +return 0 ; +}#endif /* CONFIG_USB_CDNS3_HOST */
drivers/usb/cdns3/host.c +59 -1
88 lines not on this page · raw message
fs/btrfs/delayed-inode.c +2 -1
@@ -627,7 +627,8 @@ static int btrfs_delayed_inode_reserve_metadata(*/ if (!src_rsv || (!trans->bytes_reserved && src_rsv->type !=BTRFS_BLOCK_RSV_DELALLOC )) { - ret =btrfs_qgroup_reserve_meta_prealloc (root, num_bytes, true); + ret =btrfs_qgroup_reserve_meta (root, num_bytes, +BTRFS_QGROUP_RSV_META_PREALLOC , true);if (ret <0 )return ret; ret = btrfs_block_rsv_add(root, dst_rsv, num_bytes,
fs/btrfs/inode.c +1 -1
@@ -5798,7 +5798,7 @@ static int btrfs_dirty_inode(struct inode *inode)return PTR_ERR (trans); ret =btrfs_update_inode (trans, root, inode); -if (ret && ret == -ENOSPC ) { +if (ret && (ret == -ENOSPC || ret == -EDQUOT )) {/* whoops, lets try again with the full transaction */ btrfs_end_transaction (trans); trans =btrfs_start_transaction (root,1 );
fs/btrfs/qgroup.c +4 -4
@@ -3875,8 +3875,8 @@ static int sub_root_meta_rsv(struct btrfs_root *root, int num_bytes,return num_bytes; } -static int qgroup_reserve_meta (struct btrfs_root *root,int num_bytes, -enum btrfs_qgroup_rsv_type type,bool enforce) +int btrfs_qgroup_reserve_meta (struct btrfs_root *root,int num_bytes, +enum btrfs_qgroup_rsv_type type,bool enforce) {struct btrfs_fs_info *fs_info = root->fs_info;int ret;
@@ -3907,14 +3907,14 @@ int __btrfs_qgroup_reserve_meta(struct btrfs_root *root, int num_bytes, {int ret; - ret =qgroup_reserve_meta (root, num_bytes, type, enforce); + ret =btrfs_qgroup_reserve_meta (root, num_bytes, type, enforce);if (ret <=0 && ret != -EDQUOT )return ret; ret =try_flush_qgroup (root);if (ret <0 )return ret; -return qgroup_reserve_meta (root, num_bytes, type, enforce); +return btrfs_qgroup_reserve_meta (root, num_bytes, type, enforce); }void btrfs_qgroup_free_meta_all_pertrans (struct btrfs_root *root)
fs/btrfs/qgroup.h +2 -0
@@ -361,6 +361,8 @@ int btrfs_qgroup_release_data(struct btrfs_inode *inode, u64 start, u64 len);int btrfs_qgroup_free_data (struct btrfs_inode *inode,struct extent_changeset *reserved,u64 start,u64 len); +int btrfs_qgroup_reserve_meta (struct btrfs_root *root,int num_bytes, +enum btrfs_qgroup_rsv_type type,bool enforce);int __btrfs_qgroup_reserve_meta (struct btrfs_root *root,int num_bytes,enum btrfs_qgroup_rsv_type type,bool enforce);/* Reserve metadata space for pertrans and prealloc type */
include/linux/eeprom_93xx46.h +2 -0
@@ -16,6 +16,8 @@ struct eeprom_93xx46_platform_data {#define EEPROM_93XX46_QUIRK_SINGLE_WORD_READ (1 << 0)/* Instructions such as EWEN are (addrlen + 2) in length. */ #define EEPROM_93XX46_QUIRK_INSTRUCTION_LENGTH (1 << 1) +/* Add extra cycle after address during a read */ +#define EEPROM_93XX46_QUIRK_EXTRA_READ_CYCLE BIT(2)/* * optional hooks to control additional logic
include/linux/platform_data/ti-sysc.h +1 -0
@@ -50,6 +50,7 @@ struct sysc_regbits {s8 emufree_shift; }; +#define SYSC_QUIRK_GPMC_DEBUG BIT(26)#define SYSC_MODULE_QUIRK_ENA_RESETDONE BIT(25)#define SYSC_MODULE_QUIRK_PRUSS BIT(24)#define SYSC_MODULE_QUIRK_DSS_RESET BIT(23)
sound/soc/intel/boards/bytcr_rt5640.c +12 -0
@@ -437,6 +437,18 @@ static const struct dmi_system_id byt_rt5640_quirk_table[] = {BYT_RT5640_SSP0_AIF1 | BYT_RT5640_MCLK_EN), }, + { + .matches = { +DMI_EXACT_MATCH (DMI_SYS_VENDOR ,"ARCHOS" ), + DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "ARCHOS 140 CESIUM"), + }, + .driver_data = (void *)(BYT_RT5640_IN1_MAP | +BYT_RT5640_JD_SRC_JD2_IN4N | +BYT_RT5640_OVCD_TH_2000UA | +BYT_RT5640_OVCD_SF_0P75 | +BYT_RT5640_SSP0_AIF1 | + BYT_RT5640_MCLK_EN), + }, { .matches = { DMI_EXACT_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
sound/soc/intel/boards/sof_sdw.c +54 -24
118 lines not on this page · raw message
sound/soc/sof/intel/Kconfig +1 -1
@@ -84,7 +84,7 @@ config SND_SOC_SOF_BAYTRAIL config SND_SOC_SOF_BROADWELL_SUPPORT bool "SOF support for Broadwell" - depends on SND_SOC_INTEL_HASWELL=n + depends on SND_SOC_INTEL_CATPT=n help This adds support for Sound Open Firmware for Intel(R) platforms using the Broadwell processors.
sound/usb/mixer_quirks.c +248 -119
459 lines not on this page · raw message