Loading Makefile +1 −1 Original line number Diff line number Diff line # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 SUBLEVEL = 266 SUBLEVEL = 267 EXTRAVERSION = NAME = Kleptomaniac Octopus Loading arch/arm/mach-sunxi/mc_smp.c +2 −2 Original line number Diff line number Diff line Loading @@ -808,12 +808,12 @@ static int __init sunxi_mc_smp_init(void) break; } is_a83t = sunxi_mc_smp_data[i].is_a83t; of_node_put(node); if (ret) return -ENODEV; is_a83t = sunxi_mc_smp_data[i].is_a83t; if (!sunxi_mc_smp_cpu_table_init()) return -EINVAL; Loading drivers/firewire/ohci.c +51 −0 Original line number Diff line number Diff line Loading @@ -279,6 +279,51 @@ static char ohci_driver_name[] = KBUILD_MODNAME; #define QUIRK_TI_SLLZ059 0x20 #define QUIRK_IR_WAKE 0x40 // On PCI Express Root Complex in any type of AMD Ryzen machine, VIA VT6306/6307/6308 with Asmedia // ASM1083/1085 brings an inconvenience that the read accesses to 'Isochronous Cycle Timer' register // (at offset 0xf0 in PCI I/O space) often causes unexpected system reboot. The mechanism is not // clear, since the read access to the other registers is enough safe; e.g. 'Node ID' register, // while it is probable due to detection of any type of PCIe error. #define QUIRK_REBOOT_BY_CYCLE_TIMER_READ 0x80000000 #if IS_ENABLED(CONFIG_X86) static bool has_reboot_by_cycle_timer_read_quirk(const struct fw_ohci *ohci) { return !!(ohci->quirks & QUIRK_REBOOT_BY_CYCLE_TIMER_READ); } #define PCI_DEVICE_ID_ASMEDIA_ASM108X 0x1080 static bool detect_vt630x_with_asm1083_on_amd_ryzen_machine(const struct pci_dev *pdev) { const struct pci_dev *pcie_to_pci_bridge; // Detect any type of AMD Ryzen machine. if (!static_cpu_has(X86_FEATURE_ZEN)) return false; // Detect VIA VT6306/6307/6308. if (pdev->vendor != PCI_VENDOR_ID_VIA) return false; if (pdev->device != PCI_DEVICE_ID_VIA_VT630X) return false; // Detect Asmedia ASM1083/1085. pcie_to_pci_bridge = pdev->bus->self; if (pcie_to_pci_bridge->vendor != PCI_VENDOR_ID_ASMEDIA) return false; if (pcie_to_pci_bridge->device != PCI_DEVICE_ID_ASMEDIA_ASM108X) return false; return true; } #else #define has_reboot_by_cycle_timer_read_quirk(ohci) false #define detect_vt630x_with_asm1083_on_amd_ryzen_machine(pdev) false #endif /* In case of multiple matches in ohci_quirks[], only the first one is used. */ static const struct { unsigned short vendor, device, revision, flags; Loading Loading @@ -1717,6 +1762,9 @@ static u32 get_cycle_time(struct fw_ohci *ohci) s32 diff01, diff12; int i; if (has_reboot_by_cycle_timer_read_quirk(ohci)) return 0; c2 = reg_read(ohci, OHCI1394_IsochronousCycleTimer); if (ohci->quirks & QUIRK_CYCLE_TIMER) { Loading Loading @@ -3619,6 +3667,9 @@ static int pci_probe(struct pci_dev *dev, if (param_quirks) ohci->quirks = param_quirks; if (detect_vt630x_with_asm1083_on_amd_ryzen_machine(dev)) ohci->quirks |= QUIRK_REBOOT_BY_CYCLE_TIMER_READ; /* * Because dma_alloc_coherent() allocates at least one page, * we save space by using a common buffer for the AR request/ Loading drivers/i2c/i2c-core.h +3 −1 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ * i2c-core.h - interfaces internal to the I2C framework */ #include <linux/kconfig.h> #include <linux/rwsem.h> struct i2c_devinfo { Loading @@ -29,7 +30,8 @@ int i2c_dev_irq_from_resources(const struct resource *resources, */ static inline bool i2c_in_atomic_xfer_mode(void) { return system_state > SYSTEM_RUNNING && !preemptible(); return system_state > SYSTEM_RUNNING && (IS_ENABLED(CONFIG_PREEMPT_COUNT) ? !preemptible() : irqs_disabled()); } static inline int __i2c_lock_bus_helper(struct i2c_adapter *adap) Loading drivers/mmc/core/block.c +4 −3 Original line number Diff line number Diff line Loading @@ -856,9 +856,10 @@ static const struct block_device_operations mmc_bdops = { static int mmc_blk_part_switch_pre(struct mmc_card *card, unsigned int part_type) { const unsigned int mask = EXT_CSD_PART_CONFIG_ACC_RPMB; int ret = 0; if (part_type == EXT_CSD_PART_CONFIG_ACC_RPMB) { if ((part_type & mask) == mask) { if (card->ext_csd.cmdq_en) { ret = mmc_cmdq_disable(card); if (ret) Loading @@ -873,9 +874,10 @@ static int mmc_blk_part_switch_pre(struct mmc_card *card, static int mmc_blk_part_switch_post(struct mmc_card *card, unsigned int part_type) { const unsigned int mask = EXT_CSD_PART_CONFIG_ACC_RPMB; int ret = 0; if (part_type == EXT_CSD_PART_CONFIG_ACC_RPMB) { if ((part_type & mask) == mask) { mmc_retune_unpause(card->host); if (card->reenable_cmdq && !card->ext_csd.cmdq_en) ret = mmc_cmdq_enable(card); Loading Loading @@ -3151,4 +3153,3 @@ module_exit(mmc_blk_exit); MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("Multimedia Card (MMC) block device driver"); Loading
Makefile +1 −1 Original line number Diff line number Diff line # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 SUBLEVEL = 266 SUBLEVEL = 267 EXTRAVERSION = NAME = Kleptomaniac Octopus Loading
arch/arm/mach-sunxi/mc_smp.c +2 −2 Original line number Diff line number Diff line Loading @@ -808,12 +808,12 @@ static int __init sunxi_mc_smp_init(void) break; } is_a83t = sunxi_mc_smp_data[i].is_a83t; of_node_put(node); if (ret) return -ENODEV; is_a83t = sunxi_mc_smp_data[i].is_a83t; if (!sunxi_mc_smp_cpu_table_init()) return -EINVAL; Loading
drivers/firewire/ohci.c +51 −0 Original line number Diff line number Diff line Loading @@ -279,6 +279,51 @@ static char ohci_driver_name[] = KBUILD_MODNAME; #define QUIRK_TI_SLLZ059 0x20 #define QUIRK_IR_WAKE 0x40 // On PCI Express Root Complex in any type of AMD Ryzen machine, VIA VT6306/6307/6308 with Asmedia // ASM1083/1085 brings an inconvenience that the read accesses to 'Isochronous Cycle Timer' register // (at offset 0xf0 in PCI I/O space) often causes unexpected system reboot. The mechanism is not // clear, since the read access to the other registers is enough safe; e.g. 'Node ID' register, // while it is probable due to detection of any type of PCIe error. #define QUIRK_REBOOT_BY_CYCLE_TIMER_READ 0x80000000 #if IS_ENABLED(CONFIG_X86) static bool has_reboot_by_cycle_timer_read_quirk(const struct fw_ohci *ohci) { return !!(ohci->quirks & QUIRK_REBOOT_BY_CYCLE_TIMER_READ); } #define PCI_DEVICE_ID_ASMEDIA_ASM108X 0x1080 static bool detect_vt630x_with_asm1083_on_amd_ryzen_machine(const struct pci_dev *pdev) { const struct pci_dev *pcie_to_pci_bridge; // Detect any type of AMD Ryzen machine. if (!static_cpu_has(X86_FEATURE_ZEN)) return false; // Detect VIA VT6306/6307/6308. if (pdev->vendor != PCI_VENDOR_ID_VIA) return false; if (pdev->device != PCI_DEVICE_ID_VIA_VT630X) return false; // Detect Asmedia ASM1083/1085. pcie_to_pci_bridge = pdev->bus->self; if (pcie_to_pci_bridge->vendor != PCI_VENDOR_ID_ASMEDIA) return false; if (pcie_to_pci_bridge->device != PCI_DEVICE_ID_ASMEDIA_ASM108X) return false; return true; } #else #define has_reboot_by_cycle_timer_read_quirk(ohci) false #define detect_vt630x_with_asm1083_on_amd_ryzen_machine(pdev) false #endif /* In case of multiple matches in ohci_quirks[], only the first one is used. */ static const struct { unsigned short vendor, device, revision, flags; Loading Loading @@ -1717,6 +1762,9 @@ static u32 get_cycle_time(struct fw_ohci *ohci) s32 diff01, diff12; int i; if (has_reboot_by_cycle_timer_read_quirk(ohci)) return 0; c2 = reg_read(ohci, OHCI1394_IsochronousCycleTimer); if (ohci->quirks & QUIRK_CYCLE_TIMER) { Loading Loading @@ -3619,6 +3667,9 @@ static int pci_probe(struct pci_dev *dev, if (param_quirks) ohci->quirks = param_quirks; if (detect_vt630x_with_asm1083_on_amd_ryzen_machine(dev)) ohci->quirks |= QUIRK_REBOOT_BY_CYCLE_TIMER_READ; /* * Because dma_alloc_coherent() allocates at least one page, * we save space by using a common buffer for the AR request/ Loading
drivers/i2c/i2c-core.h +3 −1 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ * i2c-core.h - interfaces internal to the I2C framework */ #include <linux/kconfig.h> #include <linux/rwsem.h> struct i2c_devinfo { Loading @@ -29,7 +30,8 @@ int i2c_dev_irq_from_resources(const struct resource *resources, */ static inline bool i2c_in_atomic_xfer_mode(void) { return system_state > SYSTEM_RUNNING && !preemptible(); return system_state > SYSTEM_RUNNING && (IS_ENABLED(CONFIG_PREEMPT_COUNT) ? !preemptible() : irqs_disabled()); } static inline int __i2c_lock_bus_helper(struct i2c_adapter *adap) Loading
drivers/mmc/core/block.c +4 −3 Original line number Diff line number Diff line Loading @@ -856,9 +856,10 @@ static const struct block_device_operations mmc_bdops = { static int mmc_blk_part_switch_pre(struct mmc_card *card, unsigned int part_type) { const unsigned int mask = EXT_CSD_PART_CONFIG_ACC_RPMB; int ret = 0; if (part_type == EXT_CSD_PART_CONFIG_ACC_RPMB) { if ((part_type & mask) == mask) { if (card->ext_csd.cmdq_en) { ret = mmc_cmdq_disable(card); if (ret) Loading @@ -873,9 +874,10 @@ static int mmc_blk_part_switch_pre(struct mmc_card *card, static int mmc_blk_part_switch_post(struct mmc_card *card, unsigned int part_type) { const unsigned int mask = EXT_CSD_PART_CONFIG_ACC_RPMB; int ret = 0; if (part_type == EXT_CSD_PART_CONFIG_ACC_RPMB) { if ((part_type & mask) == mask) { mmc_retune_unpause(card->host); if (card->reenable_cmdq && !card->ext_csd.cmdq_en) ret = mmc_cmdq_enable(card); Loading Loading @@ -3151,4 +3153,3 @@ module_exit(mmc_blk_exit); MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("Multimedia Card (MMC) block device driver");