From: Sasha Levin Date: Sat, 17 Jun 2023 00:33:42 +0000 (-0400) Subject: Fixes for 4.19 X-Git-Tag: v4.14.319~57 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9f31b9303f8f284d0ac488be4950e9af7d381bfd;p=thirdparty%2Fkernel%2Fstable-queue.git Fixes for 4.19 Signed-off-by: Sasha Levin --- diff --git a/queue-4.19/arm-dts-vexpress-add-missing-cache-properties.patch b/queue-4.19/arm-dts-vexpress-add-missing-cache-properties.patch new file mode 100644 index 00000000000..017d2836697 --- /dev/null +++ b/queue-4.19/arm-dts-vexpress-add-missing-cache-properties.patch @@ -0,0 +1,37 @@ +From 37284a9658884e537626966981291ce5cdd48da5 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sun, 23 Apr 2023 17:08:37 +0200 +Subject: ARM: dts: vexpress: add missing cache properties + +From: Krzysztof Kozlowski + +[ Upstream commit 328acc5657c6197753238d7ce0a6924ead829347 ] + +As all level 2 and level 3 caches are unified, add required +cache-unified property to fix warnings like: + + vexpress-v2p-ca5s.dtb: cache-controller@2c0f0000: 'cache-unified' is a required property + +Signed-off-by: Krzysztof Kozlowski +Link: https://lore.kernel.org/r/20230423150837.118466-1-krzysztof.kozlowski@linaro.org +Signed-off-by: Sudeep Holla +Signed-off-by: Sasha Levin +--- + arch/arm/boot/dts/vexpress-v2p-ca5s.dts | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/arch/arm/boot/dts/vexpress-v2p-ca5s.dts b/arch/arm/boot/dts/vexpress-v2p-ca5s.dts +index e5b4a7570a010..13a75a87d571b 100644 +--- a/arch/arm/boot/dts/vexpress-v2p-ca5s.dts ++++ b/arch/arm/boot/dts/vexpress-v2p-ca5s.dts +@@ -118,6 +118,7 @@ L2: cache-controller@2c0f0000 { + reg = <0x2c0f0000 0x1000>; + interrupts = <0 84 4>; + cache-level = <2>; ++ cache-unified; + }; + + pmu { +-- +2.39.2 + diff --git a/queue-4.19/irqchip-meson-gpio-mark-of-related-data-as-maybe-unu.patch b/queue-4.19/irqchip-meson-gpio-mark-of-related-data-as-maybe-unu.patch new file mode 100644 index 00000000000..4b7acd25472 --- /dev/null +++ b/queue-4.19/irqchip-meson-gpio-mark-of-related-data-as-maybe-unu.patch @@ -0,0 +1,42 @@ +From 093ba7ccae9a72fcf3de91738d743bda54fdd835 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 12 May 2023 18:45:06 +0200 +Subject: irqchip/meson-gpio: Mark OF related data as maybe unused +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Krzysztof Kozlowski + +[ Upstream commit 14130211be5366a91ec07c3284c183b75d8fba17 ] + +The driver can be compile tested with !CONFIG_OF making certain data +unused: + + drivers/irqchip/irq-meson-gpio.c:153:34: error: ‘meson_irq_gpio_matches’ defined but not used [-Werror=unused-const-variable=] + +Acked-by: Martin Blumenstingl +Signed-off-by: Krzysztof Kozlowski +Signed-off-by: Marc Zyngier +Link: https://lore.kernel.org/r/20230512164506.212267-1-krzysztof.kozlowski@linaro.org +Signed-off-by: Sasha Levin +--- + drivers/irqchip/irq-meson-gpio.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/irqchip/irq-meson-gpio.c b/drivers/irqchip/irq-meson-gpio.c +index 7599b10ecf09d..dcb22f2539eff 100644 +--- a/drivers/irqchip/irq-meson-gpio.c ++++ b/drivers/irqchip/irq-meson-gpio.c +@@ -67,7 +67,7 @@ static const struct meson_gpio_irq_params axg_params = { + .nr_hwirq = 100, + }; + +-static const struct of_device_id meson_irq_gpio_matches[] = { ++static const struct of_device_id meson_irq_gpio_matches[] __maybe_unused = { + { .compatible = "amlogic,meson8-gpio-intc", .data = &meson8_params }, + { .compatible = "amlogic,meson8b-gpio-intc", .data = &meson8b_params }, + { .compatible = "amlogic,meson-gxbb-gpio-intc", .data = &gxbb_params }, +-- +2.39.2 + diff --git a/queue-4.19/mips-alchemy-fix-dbdma2.patch b/queue-4.19/mips-alchemy-fix-dbdma2.patch new file mode 100644 index 00000000000..88224290f3e --- /dev/null +++ b/queue-4.19/mips-alchemy-fix-dbdma2.patch @@ -0,0 +1,87 @@ +From 70a9bf54a4aa2800676222a4379ae9b5b6440c22 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 11 May 2023 17:30:10 +0200 +Subject: MIPS: Alchemy: fix dbdma2 + +From: Manuel Lauss + +[ Upstream commit 2d645604f69f3a772d58ead702f9a8e84ab2b342 ] + +Various fixes for the Au1200/Au1550/Au1300 DBDMA2 code: + +- skip cache invalidation if chip has working coherency circuitry. +- invalidate KSEG0-portion of the (physical) data address. +- force the dma channel doorbell write out to bus immediately with + a sync. + +Signed-off-by: Thomas Bogendoerfer +Signed-off-by: Sasha Levin +--- + arch/mips/alchemy/common/dbdma.c | 27 +++++++++++++++------------ + 1 file changed, 15 insertions(+), 12 deletions(-) + +diff --git a/arch/mips/alchemy/common/dbdma.c b/arch/mips/alchemy/common/dbdma.c +index 4ca2c28878e0f..e9ee9ab90a0c6 100644 +--- a/arch/mips/alchemy/common/dbdma.c ++++ b/arch/mips/alchemy/common/dbdma.c +@@ -30,6 +30,7 @@ + * + */ + ++#include /* for dma_default_coherent */ + #include + #include + #include +@@ -623,17 +624,18 @@ u32 au1xxx_dbdma_put_source(u32 chanid, dma_addr_t buf, int nbytes, u32 flags) + dp->dscr_cmd0 &= ~DSCR_CMD0_IE; + + /* +- * There is an errata on the Au1200/Au1550 parts that could result +- * in "stale" data being DMA'ed. It has to do with the snoop logic on +- * the cache eviction buffer. DMA_NONCOHERENT is on by default for +- * these parts. If it is fixed in the future, these dma_cache_inv will +- * just be nothing more than empty macros. See io.h. ++ * There is an erratum on certain Au1200/Au1550 revisions that could ++ * result in "stale" data being DMA'ed. It has to do with the snoop ++ * logic on the cache eviction buffer. dma_default_coherent is set ++ * to false on these parts. + */ +- dma_cache_wback_inv((unsigned long)buf, nbytes); ++ if (!dma_default_coherent) ++ dma_cache_wback_inv(KSEG0ADDR(buf), nbytes); + dp->dscr_cmd0 |= DSCR_CMD0_V; /* Let it rip */ + wmb(); /* drain writebuffer */ + dma_cache_wback_inv((unsigned long)dp, sizeof(*dp)); + ctp->chan_ptr->ddma_dbell = 0; ++ wmb(); /* force doorbell write out to dma engine */ + + /* Get next descriptor pointer. */ + ctp->put_ptr = phys_to_virt(DSCR_GET_NXTPTR(dp->dscr_nxtptr)); +@@ -685,17 +687,18 @@ u32 au1xxx_dbdma_put_dest(u32 chanid, dma_addr_t buf, int nbytes, u32 flags) + dp->dscr_source1, dp->dscr_dest0, dp->dscr_dest1); + #endif + /* +- * There is an errata on the Au1200/Au1550 parts that could result in +- * "stale" data being DMA'ed. It has to do with the snoop logic on the +- * cache eviction buffer. DMA_NONCOHERENT is on by default for these +- * parts. If it is fixed in the future, these dma_cache_inv will just +- * be nothing more than empty macros. See io.h. ++ * There is an erratum on certain Au1200/Au1550 revisions that could ++ * result in "stale" data being DMA'ed. It has to do with the snoop ++ * logic on the cache eviction buffer. dma_default_coherent is set ++ * to false on these parts. + */ +- dma_cache_inv((unsigned long)buf, nbytes); ++ if (!dma_default_coherent) ++ dma_cache_inv(KSEG0ADDR(buf), nbytes); + dp->dscr_cmd0 |= DSCR_CMD0_V; /* Let it rip */ + wmb(); /* drain writebuffer */ + dma_cache_wback_inv((unsigned long)dp, sizeof(*dp)); + ctp->chan_ptr->ddma_dbell = 0; ++ wmb(); /* force doorbell write out to dma engine */ + + /* Get next descriptor pointer. */ + ctp->put_ptr = phys_to_virt(DSCR_GET_NXTPTR(dp->dscr_nxtptr)); +-- +2.39.2 + diff --git a/queue-4.19/mips-move-initrd_start-check-after-initrd-address-sa.patch b/queue-4.19/mips-move-initrd_start-check-after-initrd-address-sa.patch new file mode 100644 index 00000000000..1ad937954e2 --- /dev/null +++ b/queue-4.19/mips-move-initrd_start-check-after-initrd-address-sa.patch @@ -0,0 +1,52 @@ +From 8623a224862514fa30fcb17946a9e0bad6902757 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 9 May 2023 18:29:21 +0100 +Subject: mips: Move initrd_start check after initrd address sanitisation. + +From: Liviu Dudau + +[ Upstream commit 4897a898a216058dec55e5e5902534e6e224fcdf ] + +PAGE_OFFSET is technically a virtual address so when checking the value of +initrd_start against it we should make sure that it has been sanitised from +the values passed by the bootloader. Without this change, even with a bootloader +that passes correct addresses for an initrd, we are failing to load it on MT7621 +boards, for example. + +Signed-off-by: Liviu Dudau +Signed-off-by: Thomas Bogendoerfer +Signed-off-by: Sasha Levin +--- + arch/mips/kernel/setup.c | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +diff --git a/arch/mips/kernel/setup.c b/arch/mips/kernel/setup.c +index 2c2480be3f365..124bc842306d6 100644 +--- a/arch/mips/kernel/setup.c ++++ b/arch/mips/kernel/setup.c +@@ -265,10 +265,6 @@ static unsigned long __init init_initrd(void) + pr_err("initrd start must be page aligned\n"); + goto disable; + } +- if (initrd_start < PAGE_OFFSET) { +- pr_err("initrd start < PAGE_OFFSET\n"); +- goto disable; +- } + + /* + * Sanitize initrd addresses. For example firmware +@@ -281,6 +277,11 @@ static unsigned long __init init_initrd(void) + initrd_end = (unsigned long)__va(end); + initrd_start = (unsigned long)__va(__pa(initrd_start)); + ++ if (initrd_start < PAGE_OFFSET) { ++ pr_err("initrd start < PAGE_OFFSET\n"); ++ goto disable; ++ } ++ + ROOT_DEV = Root_RAM0; + return PFN_UP(end); + disable: +-- +2.39.2 + diff --git a/queue-4.19/mips-restore-au1300-support.patch b/queue-4.19/mips-restore-au1300-support.patch new file mode 100644 index 00000000000..86873f64968 --- /dev/null +++ b/queue-4.19/mips-restore-au1300-support.patch @@ -0,0 +1,48 @@ +From 7523393915d0b3b430e984460c36bf3e1b18602f Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 10 May 2023 12:33:23 +0200 +Subject: MIPS: Restore Au1300 support + +From: Manuel Lauss + +[ Upstream commit f2041708dee30a3425f680265c337acd28293782 ] + +The Au1300, at least the one I have to test, uses the NetLogic vendor +ID, but commit 95b8a5e0111a ("MIPS: Remove NETLOGIC support") also +dropped Au1300 detection. Restore Au1300 detection. + +Tested on DB1300 with Au1380 chip. + +Signed-off-by: Manuel Lauss +Signed-off-by: Thomas Bogendoerfer +Signed-off-by: Sasha Levin +--- + arch/mips/kernel/cpu-probe.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c +index 581defb369c36..ef95f488de6b0 100644 +--- a/arch/mips/kernel/cpu-probe.c ++++ b/arch/mips/kernel/cpu-probe.c +@@ -1705,6 +1705,10 @@ static inline void cpu_probe_alchemy(struct cpuinfo_mips *c, unsigned int cpu) + break; + } + break; ++ case PRID_IMP_NETLOGIC_AU13XX: ++ c->cputype = CPU_ALCHEMY; ++ __cpu_name[cpu] = "Au1300"; ++ break; + } + } + +@@ -2017,6 +2021,7 @@ void cpu_probe(void) + cpu_probe_mips(c, cpu); + break; + case PRID_COMP_ALCHEMY: ++ case PRID_COMP_NETLOGIC: + cpu_probe_alchemy(c, cpu); + break; + case PRID_COMP_SIBYTE: +-- +2.39.2 + diff --git a/queue-4.19/parisc-flush-gatt-writes-and-adjust-gatt-mask-in-par.patch b/queue-4.19/parisc-flush-gatt-writes-and-adjust-gatt-mask-in-par.patch new file mode 100644 index 00000000000..2db87dd0d04 --- /dev/null +++ b/queue-4.19/parisc-flush-gatt-writes-and-adjust-gatt-mask-in-par.patch @@ -0,0 +1,62 @@ +From 6fb76b0af8332d3398b1c3fd1cfa1bad161175da Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 17 May 2023 15:54:40 +0200 +Subject: parisc: Flush gatt writes and adjust gatt mask in + parisc_agp_mask_memory() + +From: Helge Deller + +[ Upstream commit d703797380c540bbeac03f104ebcfc364eaf47cc ] + +Flush caches after changing gatt entries and calculate entry according +to SBA requirements. + +Signed-off-by: Helge Deller +Signed-off-by: Sasha Levin +--- + drivers/char/agp/parisc-agp.c | 15 ++++++++++++++- + 1 file changed, 14 insertions(+), 1 deletion(-) + +diff --git a/drivers/char/agp/parisc-agp.c b/drivers/char/agp/parisc-agp.c +index 1d5510cb6db4e..f6d5a9b52cfe9 100644 +--- a/drivers/char/agp/parisc-agp.c ++++ b/drivers/char/agp/parisc-agp.c +@@ -94,6 +94,9 @@ parisc_agp_tlbflush(struct agp_memory *mem) + { + struct _parisc_agp_info *info = &parisc_agp_info; + ++ /* force fdc ops to be visible to IOMMU */ ++ asm_io_sync(); ++ + writeq(info->gart_base | ilog2(info->gart_size), info->ioc_regs+IOC_PCOM); + readq(info->ioc_regs+IOC_PCOM); /* flush */ + } +@@ -162,6 +165,7 @@ parisc_agp_insert_memory(struct agp_memory *mem, off_t pg_start, int type) + info->gatt[j] = + parisc_agp_mask_memory(agp_bridge, + paddr, type); ++ asm_io_fdc(&info->gatt[j]); + } + } + +@@ -195,7 +199,16 @@ static unsigned long + parisc_agp_mask_memory(struct agp_bridge_data *bridge, dma_addr_t addr, + int type) + { +- return SBA_PDIR_VALID_BIT | addr; ++ unsigned ci; /* coherent index */ ++ dma_addr_t pa; ++ ++ pa = addr & IOVP_MASK; ++ asm("lci 0(%1), %0" : "=r" (ci) : "r" (phys_to_virt(pa))); ++ ++ pa |= (ci >> PAGE_SHIFT) & 0xff;/* move CI (8 bits) into lowest byte */ ++ pa |= SBA_PDIR_VALID_BIT; /* set "valid" bit */ ++ ++ return cpu_to_le64(pa); + } + + static void +-- +2.39.2 + diff --git a/queue-4.19/parisc-improve-cache-flushing-for-pcxl-in-arch_sync_.patch b/queue-4.19/parisc-improve-cache-flushing-for-pcxl-in-arch_sync_.patch new file mode 100644 index 00000000000..0cd987285b1 --- /dev/null +++ b/queue-4.19/parisc-improve-cache-flushing-for-pcxl-in-arch_sync_.patch @@ -0,0 +1,59 @@ +From 91c17aa42dcf2929ab1dc1c4f0361324f1de2bc9 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 17 May 2023 15:52:30 +0200 +Subject: parisc: Improve cache flushing for PCXL in arch_sync_dma_for_cpu() + +From: Helge Deller + +[ Upstream commit 59fa12646d9f56c842b4d5b6418ed77af625c588 ] + +Add comment in arch_sync_dma_for_device() and handle the direction flag in +arch_sync_dma_for_cpu(). + +When receiving data from the device (DMA_FROM_DEVICE) unconditionally +purge the data cache in arch_sync_dma_for_cpu(). + +Signed-off-by: Helge Deller +Signed-off-by: Sasha Levin +--- + arch/parisc/kernel/pci-dma.c | 18 +++++++++++++++++- + 1 file changed, 17 insertions(+), 1 deletion(-) + +diff --git a/arch/parisc/kernel/pci-dma.c b/arch/parisc/kernel/pci-dma.c +index 04c48f1ef3fbd..20084336704fc 100644 +--- a/arch/parisc/kernel/pci-dma.c ++++ b/arch/parisc/kernel/pci-dma.c +@@ -464,13 +464,29 @@ void arch_dma_free(struct device *dev, size_t size, void *vaddr, + void arch_sync_dma_for_device(struct device *dev, phys_addr_t paddr, + size_t size, enum dma_data_direction dir) + { ++ /* ++ * fdc: The data cache line is written back to memory, if and only if ++ * it is dirty, and then invalidated from the data cache. ++ */ + flush_kernel_dcache_range((unsigned long)phys_to_virt(paddr), size); + } + + void arch_sync_dma_for_cpu(struct device *dev, phys_addr_t paddr, + size_t size, enum dma_data_direction dir) + { +- flush_kernel_dcache_range((unsigned long)phys_to_virt(paddr), size); ++ unsigned long addr = (unsigned long) phys_to_virt(paddr); ++ ++ switch (dir) { ++ case DMA_TO_DEVICE: ++ case DMA_BIDIRECTIONAL: ++ flush_kernel_dcache_range(addr, size); ++ return; ++ case DMA_FROM_DEVICE: ++ purge_kernel_dcache_range_asm(addr, addr + size); ++ return; ++ default: ++ BUG(); ++ } + } + + void arch_dma_cache_sync(struct device *dev, void *vaddr, size_t size, +-- +2.39.2 + diff --git a/queue-4.19/power-supply-ab8500-fix-external_power_changed-race.patch b/queue-4.19/power-supply-ab8500-fix-external_power_changed-race.patch new file mode 100644 index 00000000000..0b5278dd584 --- /dev/null +++ b/queue-4.19/power-supply-ab8500-fix-external_power_changed-race.patch @@ -0,0 +1,73 @@ +From 3b6a28dcd58f92cf4ad3903346b55f4cfb36c1d9 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sat, 15 Apr 2023 18:07:29 +0200 +Subject: power: supply: ab8500: Fix external_power_changed race + +From: Hans de Goede + +[ Upstream commit a5299ce4e96f3e8930e9c051b28d8093ada87b08 ] + +ab8500_btemp_external_power_changed() dereferences di->btemp_psy, +which gets sets in ab8500_btemp_probe() like this: + + di->btemp_psy = devm_power_supply_register(dev, &ab8500_btemp_desc, + &psy_cfg); + +As soon as devm_power_supply_register() has called device_add() +the external_power_changed callback can get called. So there is a window +where ab8500_btemp_external_power_changed() may get called while +di->btemp_psy has not been set yet leading to a NULL pointer dereference. + +Fixing this is easy. The external_power_changed callback gets passed +the power_supply which will eventually get stored in di->btemp_psy, +so ab8500_btemp_external_power_changed() can simply directly use +the passed in psy argument which is always valid. + +And the same applies to ab8500_fg_external_power_changed(). + +Signed-off-by: Hans de Goede +Reviewed-by: Linus Walleij +Signed-off-by: Sebastian Reichel +Signed-off-by: Sasha Levin +--- + drivers/power/supply/ab8500_btemp.c | 6 ++---- + drivers/power/supply/ab8500_fg.c | 6 ++---- + 2 files changed, 4 insertions(+), 8 deletions(-) + +diff --git a/drivers/power/supply/ab8500_btemp.c b/drivers/power/supply/ab8500_btemp.c +index 0fd24577112eb..0bec8b90667c8 100644 +--- a/drivers/power/supply/ab8500_btemp.c ++++ b/drivers/power/supply/ab8500_btemp.c +@@ -919,10 +919,8 @@ static int ab8500_btemp_get_ext_psy_data(struct device *dev, void *data) + */ + static void ab8500_btemp_external_power_changed(struct power_supply *psy) + { +- struct ab8500_btemp *di = power_supply_get_drvdata(psy); +- +- class_for_each_device(power_supply_class, NULL, +- di->btemp_psy, ab8500_btemp_get_ext_psy_data); ++ class_for_each_device(power_supply_class, NULL, psy, ++ ab8500_btemp_get_ext_psy_data); + } + + /* ab8500 btemp driver interrupts and their respective isr */ +diff --git a/drivers/power/supply/ab8500_fg.c b/drivers/power/supply/ab8500_fg.c +index 675f9d0e8471e..d0cbd7189a622 100644 +--- a/drivers/power/supply/ab8500_fg.c ++++ b/drivers/power/supply/ab8500_fg.c +@@ -2380,10 +2380,8 @@ static int ab8500_fg_init_hw_registers(struct ab8500_fg *di) + */ + static void ab8500_fg_external_power_changed(struct power_supply *psy) + { +- struct ab8500_fg *di = power_supply_get_drvdata(psy); +- +- class_for_each_device(power_supply_class, NULL, +- di->fg_psy, ab8500_fg_get_ext_psy_data); ++ class_for_each_device(power_supply_class, NULL, psy, ++ ab8500_fg_get_ext_psy_data); + } + + /** +-- +2.39.2 + diff --git a/queue-4.19/power-supply-bq27xxx-use-mod_delayed_work-instead-of.patch b/queue-4.19/power-supply-bq27xxx-use-mod_delayed_work-instead-of.patch new file mode 100644 index 00000000000..8b3bef3ea0c --- /dev/null +++ b/queue-4.19/power-supply-bq27xxx-use-mod_delayed_work-instead-of.patch @@ -0,0 +1,40 @@ +From a9c781caf4676f5775a3c54771d8e8fc7efcaa81 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sat, 15 Apr 2023 20:23:39 +0200 +Subject: power: supply: bq27xxx: Use mod_delayed_work() instead of cancel() + + schedule() + +From: Hans de Goede + +[ Upstream commit 59dddea9879713423c7b2ade43c423bb71e0d216 ] + +Use mod_delayed_work() instead of separate cancel_delayed_work_sync() + +schedule_delayed_work() calls. + +Signed-off-by: Hans de Goede +Signed-off-by: Sebastian Reichel +Signed-off-by: Sasha Levin +--- + drivers/power/supply/bq27xxx_battery.c | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +diff --git a/drivers/power/supply/bq27xxx_battery.c b/drivers/power/supply/bq27xxx_battery.c +index 725851ca0e757..f665553b26a2d 100644 +--- a/drivers/power/supply/bq27xxx_battery.c ++++ b/drivers/power/supply/bq27xxx_battery.c +@@ -877,10 +877,8 @@ static int poll_interval_param_set(const char *val, const struct kernel_param *k + return ret; + + mutex_lock(&bq27xxx_list_lock); +- list_for_each_entry(di, &bq27xxx_battery_devices, list) { +- cancel_delayed_work_sync(&di->work); +- schedule_delayed_work(&di->work, 0); +- } ++ list_for_each_entry(di, &bq27xxx_battery_devices, list) ++ mod_delayed_work(system_wq, &di->work, 0); + mutex_unlock(&bq27xxx_list_lock); + + return ret; +-- +2.39.2 + diff --git a/queue-4.19/power-supply-fix-logic-checking-if-system-is-running.patch b/queue-4.19/power-supply-fix-logic-checking-if-system-is-running.patch new file mode 100644 index 00000000000..0d76954bf44 --- /dev/null +++ b/queue-4.19/power-supply-fix-logic-checking-if-system-is-running.patch @@ -0,0 +1,66 @@ +From a43b082304ad48c15906deb3f08357b11017adf2 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 16 May 2023 13:25:40 -0500 +Subject: power: supply: Fix logic checking if system is running from battery + +From: Mario Limonciello + +[ Upstream commit 95339f40a8b652b5b1773def31e63fc53c26378a ] + +The logic used for power_supply_is_system_supplied() counts all power +supplies and assumes that the system is running from AC if there is +either a non-battery power-supply reporting to be online or if no +power-supplies exist at all. + +The second rule is for desktop systems, that don't have any +battery/charger devices. These systems will incorrectly report to be +powered from battery once a device scope power-supply is registered +(e.g. a HID device), since these power-supplies increase the counter. + +Apart from HID devices, recent dGPUs provide UCSI power supplies on a +desktop systems. The dGPU by default doesn't have anything plugged in so +it's 'offline'. This makes power_supply_is_system_supplied() return 0 +with a count of 1 meaning all drivers that use this get a wrong judgement. + +To fix this case adjust the logic to also examine the scope of the power +supply. If the power supply is deemed a device power supply, then don't +count it. + +Cc: Evan Quan +Suggested-by: Lijo Lazar +Signed-off-by: Mario Limonciello +Signed-off-by: Sebastian Reichel +Signed-off-by: Sasha Levin +--- + drivers/power/supply/power_supply_core.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/drivers/power/supply/power_supply_core.c b/drivers/power/supply/power_supply_core.c +index 6a2d157c24759..3715a6c2955b2 100644 +--- a/drivers/power/supply/power_supply_core.c ++++ b/drivers/power/supply/power_supply_core.c +@@ -350,6 +350,10 @@ static int __power_supply_is_system_supplied(struct device *dev, void *data) + struct power_supply *psy = dev_get_drvdata(dev); + unsigned int *count = data; + ++ if (!psy->desc->get_property(psy, POWER_SUPPLY_PROP_SCOPE, &ret)) ++ if (ret.intval == POWER_SUPPLY_SCOPE_DEVICE) ++ return 0; ++ + (*count)++; + if (psy->desc->type != POWER_SUPPLY_TYPE_BATTERY) + if (!psy->desc->get_property(psy, POWER_SUPPLY_PROP_ONLINE, +@@ -368,8 +372,8 @@ int power_supply_is_system_supplied(void) + __power_supply_is_system_supplied); + + /* +- * If no power class device was found at all, most probably we are +- * running on a desktop system, so assume we are on mains power. ++ * If no system scope power class device was found at all, most probably we ++ * are running on a desktop system, so assume we are on mains power. + */ + if (count == 0) + return 1; +-- +2.39.2 + diff --git a/queue-4.19/power-supply-ratelimit-no-data-debug-output.patch b/queue-4.19/power-supply-ratelimit-no-data-debug-output.patch new file mode 100644 index 00000000000..37227f580c4 --- /dev/null +++ b/queue-4.19/power-supply-ratelimit-no-data-debug-output.patch @@ -0,0 +1,43 @@ +From 5279f5af1833d63cbe34aabb85bc71fe066bef60 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sun, 5 Mar 2023 21:52:26 +0100 +Subject: power: supply: Ratelimit no data debug output + +From: Marek Vasut + +[ Upstream commit 155c45a25679f571c2ae57d10db843a9dfc63430 ] + +Reduce the amount of output this dev_dbg() statement emits into logs, +otherwise if system software polls the sysfs entry for data and keeps +getting -ENODATA, it could end up filling the logs up. + +This does in fact make systemd journald choke, since during boot the +sysfs power supply entries are polled and if journald starts at the +same time, the journal is just being repeatedly filled up, and the +system stops on trying to start journald without booting any further. + +Signed-off-by: Marek Vasut +Reviewed-by: Hans de Goede +Signed-off-by: Sebastian Reichel +Signed-off-by: Sasha Levin +--- + drivers/power/supply/power_supply_sysfs.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/drivers/power/supply/power_supply_sysfs.c b/drivers/power/supply/power_supply_sysfs.c +index 5358a80d854f9..7b293a50452eb 100644 +--- a/drivers/power/supply/power_supply_sysfs.c ++++ b/drivers/power/supply/power_supply_sysfs.c +@@ -128,7 +128,8 @@ static ssize_t power_supply_show_property(struct device *dev, + + if (ret < 0) { + if (ret == -ENODATA) +- dev_dbg(dev, "driver has no data for `%s' property\n", ++ dev_dbg_ratelimited(dev, ++ "driver has no data for `%s' property\n", + attr->attr.name); + else if (ret != -ENODEV && ret != -EAGAIN) + dev_err_ratelimited(dev, +-- +2.39.2 + diff --git a/queue-4.19/regulator-fix-error-checking-for-debugfs_create_dir.patch b/queue-4.19/regulator-fix-error-checking-for-debugfs_create_dir.patch new file mode 100644 index 00000000000..2ef6b7eb102 --- /dev/null +++ b/queue-4.19/regulator-fix-error-checking-for-debugfs_create_dir.patch @@ -0,0 +1,46 @@ +From 3d042d1f0c924de70125917de263e9e40988c759 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 15 May 2023 22:29:38 +0500 +Subject: regulator: Fix error checking for debugfs_create_dir + +From: Osama Muhammad + +[ Upstream commit 2bf1c45be3b8f3a3f898d0756c1282f09719debd ] + +This patch fixes the error checking in core.c in debugfs_create_dir. +The correct way to check if an error occurred is 'IS_ERR' inline function. + +Signed-off-by: Osama Muhammad +--- + drivers/regulator/core.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c +index 11656b3836748..14f9977f1ec08 100644 +--- a/drivers/regulator/core.c ++++ b/drivers/regulator/core.c +@@ -4181,7 +4181,7 @@ static void rdev_init_debugfs(struct regulator_dev *rdev) + } + + rdev->debugfs = debugfs_create_dir(rname, debugfs_root); +- if (!rdev->debugfs) { ++ if (IS_ERR(rdev->debugfs)) { + rdev_warn(rdev, "Failed to create debugfs directory\n"); + return; + } +@@ -4843,7 +4843,7 @@ static int __init regulator_init(void) + ret = class_register(®ulator_class); + + debugfs_root = debugfs_create_dir("regulator", NULL); +- if (!debugfs_root) ++ if (IS_ERR(debugfs_root)) + pr_warn("regulator: Failed to create debugfs directory\n"); + + debugfs_create_file("supply_map", 0444, debugfs_root, NULL, +-- +2.39.2 + diff --git a/queue-4.19/series b/queue-4.19/series new file mode 100644 index 00000000000..f959eb113ab --- /dev/null +++ b/queue-4.19/series @@ -0,0 +1,13 @@ +power-supply-ab8500-fix-external_power_changed-race.patch +power-supply-bq27xxx-use-mod_delayed_work-instead-of.patch +arm-dts-vexpress-add-missing-cache-properties.patch +power-supply-ratelimit-no-data-debug-output.patch +regulator-fix-error-checking-for-debugfs_create_dir.patch +irqchip-meson-gpio-mark-of-related-data-as-maybe-unu.patch +power-supply-fix-logic-checking-if-system-is-running.patch +parisc-improve-cache-flushing-for-pcxl-in-arch_sync_.patch +parisc-flush-gatt-writes-and-adjust-gatt-mask-in-par.patch +mips-restore-au1300-support.patch +mips-alchemy-fix-dbdma2.patch +mips-move-initrd_start-check-after-initrd-address-sa.patch +xen-blkfront-only-check-req_fua-for-writes.patch diff --git a/queue-4.19/xen-blkfront-only-check-req_fua-for-writes.patch b/queue-4.19/xen-blkfront-only-check-req_fua-for-writes.patch new file mode 100644 index 00000000000..f59c3f56709 --- /dev/null +++ b/queue-4.19/xen-blkfront-only-check-req_fua-for-writes.patch @@ -0,0 +1,45 @@ +From d969b605df27a19888f0636abf36e07d40618310 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 26 Apr 2023 17:40:05 +0100 +Subject: xen/blkfront: Only check REQ_FUA for writes + +From: Ross Lagerwall + +[ Upstream commit b6ebaa8100090092aa602530d7e8316816d0c98d ] + +The existing code silently converts read operations with the +REQ_FUA bit set into write-barrier operations. This results in data +loss as the backend scribbles zeroes over the data instead of returning +it. + +While the REQ_FUA bit doesn't make sense on a read operation, at least +one well-known out-of-tree kernel module does set it and since it +results in data loss, let's be safe here and only look at REQ_FUA for +writes. + +Signed-off-by: Ross Lagerwall +Acked-by: Juergen Gross +Link: https://lore.kernel.org/r/20230426164005.2213139-1-ross.lagerwall@citrix.com +Signed-off-by: Juergen Gross +Signed-off-by: Sasha Levin +--- + drivers/block/xen-blkfront.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c +index 7ee618ab1567b..b4807d12ef29c 100644 +--- a/drivers/block/xen-blkfront.c ++++ b/drivers/block/xen-blkfront.c +@@ -779,7 +779,8 @@ static int blkif_queue_rw_req(struct request *req, struct blkfront_ring_info *ri + ring_req->u.rw.handle = info->handle; + ring_req->operation = rq_data_dir(req) ? + BLKIF_OP_WRITE : BLKIF_OP_READ; +- if (req_op(req) == REQ_OP_FLUSH || req->cmd_flags & REQ_FUA) { ++ if (req_op(req) == REQ_OP_FLUSH || ++ (req_op(req) == REQ_OP_WRITE && (req->cmd_flags & REQ_FUA))) { + /* + * Ideally we can do an unordered flush-to-disk. + * In case the backend onlysupports barriers, use that. +-- +2.39.2 +