Skip to content

Commit 7d2125f

Browse files
committed
Merge tag 'v6.6.100' into 6.6-main
This is the 6.6.100 stable release # -----BEGIN PGP SIGNATURE----- # # iQIzBAABCgAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAmiB2H8ACgkQONu9yGCS # aT7YKhAAiANeK3kXZGsalQJy7QJexpsYGKtk3XE0AWFNrr55cHo2LUI4eEW5VThx # aNc+UuruPbMVvXrX0AdHeYsdw8tYDTB7MEL7IJvL6rBLUA7tQBd5LFZN7IJXKZUN # qba7iLJzhKqKgfGNgPLnIRvX3dBib8k35gwM7xNL28oJB1up4W6+NGTTBkLBgWUz # E671ValnBtvqtsq+oiAimrzjlztb+v4nYcYHKYLshmGcz3w+7Hqmq5G9cDKlxKC6 # jnBMgzRE+uUpCsqJeZ2NSN/I3NEhY1CPp70EbNm5wqhqJpx9DWcurKGlbXUeH4F7 # +99KPnuvo+kOA2BPRge2+B8p4rG5Whm9hTz1CPIx96Be1twkUT1Fq3Xrt8N4Yyo9 # axMuoP5CllDOh2/f36CTabKbkmxpVPF43eOtCTYuXagjEMTvIg4aRAau7EZciZW0 # eQJuIC/q/DLUE4mPLYYJ6dVuMP/Hfx8PzJRKVVXqRknoYkRENwfeCta549cj23P7 # qmk5sLDwxBN9Zw2MAmhKWIW+Ft7uT0eAR3hs3ZdWL94vRwema3Yb/WXFqT8p8CzU # 39a8lbIX4OUWTjPC+ldaF94agtZFg/vQAkYV42dOT2Eo8F0GU01J4/fkB/ZD5iWs # vGoFbjLkkjfJQXFzTLM23O6aZwVnx3UCI7tMnUKVjOHu3ez6Kdw= # =1SR/ # -----END PGP SIGNATURE----- # gpg: Signature made Thu Jul 24 08:53:51 2025 CEST # gpg: using RSA key 647F28654894E3BD457199BE38DBBDC86092693E # gpg: Can't check signature: No public key
2 parents b0299f6 + dbcb8d8 commit 7d2125f

108 files changed

Lines changed: 751 additions & 349 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# SPDX-License-Identifier: GPL-2.0
22
VERSION = 6
33
PATCHLEVEL = 6
4-
SUBLEVEL = 99
4+
SUBLEVEL = 100
55
EXTRAVERSION =
66
NAME = Pinguïn Aangedreven
77

arch/arm64/boot/dts/freescale/imx8mm-verdin.dtsi

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -470,6 +470,7 @@
470470
};
471471

472472
reg_nvcc_sd: LDO5 {
473+
regulator-always-on;
473474
regulator-max-microvolt = <3300000>;
474475
regulator-min-microvolt = <1800000>;
475476
regulator-name = "On-module +V3.3_1.8_SD (LDO5)";

arch/arm64/boot/dts/freescale/imx8mp-venice-gw74xx.dts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@
185185
#address-cells = <0x1>;
186186
#size-cells = <0x1>;
187187
reg = <0x0>;
188-
spi-max-frequency = <36000000>;
188+
spi-max-frequency = <25000000>;
189189
};
190190
};
191191

arch/arm64/boot/dts/rockchip/px30-ringneck.dtsi

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -344,6 +344,18 @@
344344
<0 RK_PA7 RK_FUNC_GPIO &pcfg_pull_up>;
345345
};
346346
};
347+
348+
spi1 {
349+
spi1_csn0_gpio_pin: spi1-csn0-gpio-pin {
350+
rockchip,pins =
351+
<3 RK_PB1 RK_FUNC_GPIO &pcfg_pull_up_4ma>;
352+
};
353+
354+
spi1_csn1_gpio_pin: spi1-csn1-gpio-pin {
355+
rockchip,pins =
356+
<3 RK_PB2 RK_FUNC_GPIO &pcfg_pull_up_4ma>;
357+
};
358+
};
347359
};
348360

349361
&saradc {
@@ -355,6 +367,17 @@
355367
vqmmc-supply = <&vccio_sd>;
356368
};
357369

370+
&spi1 {
371+
/*
372+
* Hardware CS has a very slow rise time of about 6us,
373+
* causing transmission errors.
374+
* With cs-gpios we have a rise time of about 20ns.
375+
*/
376+
cs-gpios = <&gpio3 RK_PB1 GPIO_ACTIVE_LOW>, <&gpio3 RK_PB2 GPIO_ACTIVE_LOW>;
377+
pinctrl-names = "default";
378+
pinctrl-0 = <&spi1_clk &spi1_csn0_gpio_pin &spi1_csn1_gpio_pin &spi1_miso &spi1_mosi>;
379+
};
380+
358381
&tsadc {
359382
status = "okay";
360383
};

arch/arm64/kernel/cpufeature.c

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2804,6 +2804,13 @@ static bool has_sve_feature(const struct arm64_cpu_capabilities *cap, int scope)
28042804
}
28052805
#endif
28062806

2807+
#ifdef CONFIG_ARM64_SME
2808+
static bool has_sme_feature(const struct arm64_cpu_capabilities *cap, int scope)
2809+
{
2810+
return system_supports_sme() && has_user_cpuid_feature(cap, scope);
2811+
}
2812+
#endif
2813+
28072814
static const struct arm64_cpu_capabilities arm64_elf_hwcaps[] = {
28082815
HWCAP_CAP(ID_AA64ISAR0_EL1, AES, PMULL, CAP_HWCAP, KERNEL_HWCAP_PMULL),
28092816
HWCAP_CAP(ID_AA64ISAR0_EL1, AES, AES, CAP_HWCAP, KERNEL_HWCAP_AES),
@@ -2875,20 +2882,20 @@ static const struct arm64_cpu_capabilities arm64_elf_hwcaps[] = {
28752882
HWCAP_CAP(ID_AA64ISAR2_EL1, MOPS, IMP, CAP_HWCAP, KERNEL_HWCAP_MOPS),
28762883
HWCAP_CAP(ID_AA64ISAR2_EL1, BC, IMP, CAP_HWCAP, KERNEL_HWCAP_HBC),
28772884
#ifdef CONFIG_ARM64_SME
2878-
HWCAP_CAP(ID_AA64PFR1_EL1, SME, IMP, CAP_HWCAP, KERNEL_HWCAP_SME),
2879-
HWCAP_CAP(ID_AA64SMFR0_EL1, FA64, IMP, CAP_HWCAP, KERNEL_HWCAP_SME_FA64),
2880-
HWCAP_CAP(ID_AA64SMFR0_EL1, SMEver, SME2p1, CAP_HWCAP, KERNEL_HWCAP_SME2P1),
2881-
HWCAP_CAP(ID_AA64SMFR0_EL1, SMEver, SME2, CAP_HWCAP, KERNEL_HWCAP_SME2),
2882-
HWCAP_CAP(ID_AA64SMFR0_EL1, I16I64, IMP, CAP_HWCAP, KERNEL_HWCAP_SME_I16I64),
2883-
HWCAP_CAP(ID_AA64SMFR0_EL1, F64F64, IMP, CAP_HWCAP, KERNEL_HWCAP_SME_F64F64),
2884-
HWCAP_CAP(ID_AA64SMFR0_EL1, I16I32, IMP, CAP_HWCAP, KERNEL_HWCAP_SME_I16I32),
2885-
HWCAP_CAP(ID_AA64SMFR0_EL1, B16B16, IMP, CAP_HWCAP, KERNEL_HWCAP_SME_B16B16),
2886-
HWCAP_CAP(ID_AA64SMFR0_EL1, F16F16, IMP, CAP_HWCAP, KERNEL_HWCAP_SME_F16F16),
2887-
HWCAP_CAP(ID_AA64SMFR0_EL1, I8I32, IMP, CAP_HWCAP, KERNEL_HWCAP_SME_I8I32),
2888-
HWCAP_CAP(ID_AA64SMFR0_EL1, F16F32, IMP, CAP_HWCAP, KERNEL_HWCAP_SME_F16F32),
2889-
HWCAP_CAP(ID_AA64SMFR0_EL1, B16F32, IMP, CAP_HWCAP, KERNEL_HWCAP_SME_B16F32),
2890-
HWCAP_CAP(ID_AA64SMFR0_EL1, BI32I32, IMP, CAP_HWCAP, KERNEL_HWCAP_SME_BI32I32),
2891-
HWCAP_CAP(ID_AA64SMFR0_EL1, F32F32, IMP, CAP_HWCAP, KERNEL_HWCAP_SME_F32F32),
2885+
HWCAP_CAP_MATCH_ID(has_sme_feature, ID_AA64PFR1_EL1, SME, IMP, CAP_HWCAP, KERNEL_HWCAP_SME),
2886+
HWCAP_CAP_MATCH_ID(has_sme_feature, ID_AA64SMFR0_EL1, FA64, IMP, CAP_HWCAP, KERNEL_HWCAP_SME_FA64),
2887+
HWCAP_CAP_MATCH_ID(has_sme_feature, ID_AA64SMFR0_EL1, SMEver, SME2p1, CAP_HWCAP, KERNEL_HWCAP_SME2P1),
2888+
HWCAP_CAP_MATCH_ID(has_sme_feature, ID_AA64SMFR0_EL1, SMEver, SME2, CAP_HWCAP, KERNEL_HWCAP_SME2),
2889+
HWCAP_CAP_MATCH_ID(has_sme_feature, ID_AA64SMFR0_EL1, I16I64, IMP, CAP_HWCAP, KERNEL_HWCAP_SME_I16I64),
2890+
HWCAP_CAP_MATCH_ID(has_sme_feature, ID_AA64SMFR0_EL1, F64F64, IMP, CAP_HWCAP, KERNEL_HWCAP_SME_F64F64),
2891+
HWCAP_CAP_MATCH_ID(has_sme_feature, ID_AA64SMFR0_EL1, I16I32, IMP, CAP_HWCAP, KERNEL_HWCAP_SME_I16I32),
2892+
HWCAP_CAP_MATCH_ID(has_sme_feature, ID_AA64SMFR0_EL1, B16B16, IMP, CAP_HWCAP, KERNEL_HWCAP_SME_B16B16),
2893+
HWCAP_CAP_MATCH_ID(has_sme_feature, ID_AA64SMFR0_EL1, F16F16, IMP, CAP_HWCAP, KERNEL_HWCAP_SME_F16F16),
2894+
HWCAP_CAP(ID_MATCH_ID(has_sme_feature, AA64SMFR0_EL1, I8I32, IMP, CAP_HWCAP, KERNEL_HWCAP_SME_I8I32),
2895+
HWCAP_CAP_MATCH_ID(has_sme_feature, ID_AA64SMFR0_EL1, F16F32, IMP, CAP_HWCAP, KERNEL_HWCAP_SME_F16F32),
2896+
HWCAP_CAP_MATCH_ID(has_sme_feature, ID_AA64SMFR0_EL1, B16F32, IMP, CAP_HWCAP, KERNEL_HWCAP_SME_B16F32),
2897+
HWCAP_CAP_MATCH_ID(has_sme_feature, ID_AA64SMFR0_EL1, BI32I32, IMP, CAP_HWCAP, KERNEL_HWCAP_SME_BI32I32),
2898+
HWCAP_CAP_MATCH_ID(has_sme_feature, ID_AA64SMFR0_EL1, F32F32, IMP, CAP_HWCAP, KERNEL_HWCAP_SME_F32F32),
28922899
#endif /* CONFIG_ARM64_SME */
28932900
{},
28942901
};

arch/s390/net/bpf_jit_comp.c

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -539,7 +539,15 @@ static void bpf_jit_plt(struct bpf_plt *plt, void *ret, void *target)
539539
{
540540
memcpy(plt, &bpf_plt, sizeof(*plt));
541541
plt->ret = ret;
542-
plt->target = target;
542+
/*
543+
* (target == NULL) implies that the branch to this PLT entry was
544+
* patched and became a no-op. However, some CPU could have jumped
545+
* to this PLT entry before patching and may be still executing it.
546+
*
547+
* Since the intention in this case is to make the PLT entry a no-op,
548+
* make the target point to the return label instead of NULL.
549+
*/
550+
plt->target = target ?: ret;
543551
}
544552

545553
/*

arch/x86/kvm/xen.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1260,7 +1260,7 @@ static bool kvm_xen_schedop_poll(struct kvm_vcpu *vcpu, bool longmode,
12601260
if (kvm_read_guest_virt(vcpu, (gva_t)sched_poll.ports, ports,
12611261
sched_poll.nr_ports * sizeof(*ports), &e)) {
12621262
*r = -EFAULT;
1263-
return true;
1263+
goto out;
12641264
}
12651265

12661266
for (i = 0; i < sched_poll.nr_ports; i++) {

block/blk-sysfs.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -909,4 +909,5 @@ void blk_unregister_queue(struct gendisk *disk)
909909
mutex_unlock(&q->sysfs_dir_lock);
910910

911911
blk_debugfs_remove(disk);
912+
kobject_put(&disk->queue_kobj);
912913
}

drivers/base/power/domain_governor.c

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#include <linux/pm_domain.h>
99
#include <linux/pm_qos.h>
1010
#include <linux/hrtimer.h>
11+
#include <linux/cpu.h>
1112
#include <linux/cpuidle.h>
1213
#include <linux/cpumask.h>
1314
#include <linux/ktime.h>
@@ -345,6 +346,8 @@ static bool cpu_power_down_ok(struct dev_pm_domain *pd)
345346
struct cpuidle_device *dev;
346347
ktime_t domain_wakeup, next_hrtimer;
347348
ktime_t now = ktime_get();
349+
struct device *cpu_dev;
350+
s64 cpu_constraint, global_constraint;
348351
s64 idle_duration_ns;
349352
int cpu, i;
350353

@@ -355,6 +358,7 @@ static bool cpu_power_down_ok(struct dev_pm_domain *pd)
355358
if (!(genpd->flags & GENPD_FLAG_CPU_DOMAIN))
356359
return true;
357360

361+
global_constraint = cpu_latency_qos_limit();
358362
/*
359363
* Find the next wakeup for any of the online CPUs within the PM domain
360364
* and its subdomains. Note, we only need the genpd->cpus, as it already
@@ -368,8 +372,16 @@ static bool cpu_power_down_ok(struct dev_pm_domain *pd)
368372
if (ktime_before(next_hrtimer, domain_wakeup))
369373
domain_wakeup = next_hrtimer;
370374
}
375+
376+
cpu_dev = get_cpu_device(cpu);
377+
if (cpu_dev) {
378+
cpu_constraint = dev_pm_qos_raw_resume_latency(cpu_dev);
379+
if (cpu_constraint < global_constraint)
380+
global_constraint = cpu_constraint;
381+
}
371382
}
372383

384+
global_constraint *= NSEC_PER_USEC;
373385
/* The minimum idle duration is from now - until the next wakeup. */
374386
idle_duration_ns = ktime_to_ns(ktime_sub(domain_wakeup, now));
375387
if (idle_duration_ns <= 0)
@@ -385,8 +397,10 @@ static bool cpu_power_down_ok(struct dev_pm_domain *pd)
385397
*/
386398
i = genpd->state_idx;
387399
do {
388-
if (idle_duration_ns >= (genpd->states[i].residency_ns +
389-
genpd->states[i].power_off_latency_ns)) {
400+
if ((idle_duration_ns >= (genpd->states[i].residency_ns +
401+
genpd->states[i].power_off_latency_ns)) &&
402+
(global_constraint >= (genpd->states[i].power_on_latency_ns +
403+
genpd->states[i].power_off_latency_ns))) {
390404
genpd->state_idx = i;
391405
return true;
392406
}

drivers/bluetooth/btusb.c

Lines changed: 44 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -3736,6 +3736,32 @@ static const struct qca_device_info qca_devices_table[] = {
37363736
{ 0x00190200, 40, 4, 16 }, /* WCN785x 2.0 */
37373737
};
37383738

3739+
static u16 qca_extract_board_id(const struct qca_version *ver)
3740+
{
3741+
u16 flag = le16_to_cpu(ver->flag);
3742+
u16 board_id = 0;
3743+
3744+
if (((flag >> 8) & 0xff) == QCA_FLAG_MULTI_NVM) {
3745+
/* The board_id should be split into two bytes
3746+
* The 1st byte is chip ID, and the 2nd byte is platform ID
3747+
* For example, board ID 0x010A, 0x01 is platform ID. 0x0A is chip ID
3748+
* we have several platforms, and platform IDs are continuously added
3749+
* Platform ID:
3750+
* 0x00 is for Mobile
3751+
* 0x01 is for X86
3752+
* 0x02 is for Automotive
3753+
* 0x03 is for Consumer electronic
3754+
*/
3755+
board_id = (ver->chip_id << 8) + ver->platform_id;
3756+
}
3757+
3758+
/* Take 0xffff as invalid board ID */
3759+
if (board_id == 0xffff)
3760+
board_id = 0;
3761+
3762+
return board_id;
3763+
}
3764+
37393765
static int btusb_qca_send_vendor_req(struct usb_device *udev, u8 request,
37403766
void *data, u16 size)
37413767
{
@@ -3892,44 +3918,28 @@ static void btusb_generate_qca_nvm_name(char *fwname, size_t max_size,
38923918
const struct qca_version *ver)
38933919
{
38943920
u32 rom_version = le32_to_cpu(ver->rom_version);
3895-
u16 flag = le16_to_cpu(ver->flag);
3921+
const char *variant;
3922+
int len;
3923+
u16 board_id;
38963924

3897-
if (((flag >> 8) & 0xff) == QCA_FLAG_MULTI_NVM) {
3898-
/* The board_id should be split into two bytes
3899-
* The 1st byte is chip ID, and the 2nd byte is platform ID
3900-
* For example, board ID 0x010A, 0x01 is platform ID. 0x0A is chip ID
3901-
* we have several platforms, and platform IDs are continuously added
3902-
* Platform ID:
3903-
* 0x00 is for Mobile
3904-
* 0x01 is for X86
3905-
* 0x02 is for Automotive
3906-
* 0x03 is for Consumer electronic
3907-
*/
3908-
u16 board_id = (ver->chip_id << 8) + ver->platform_id;
3909-
const char *variant;
3925+
board_id = qca_extract_board_id(ver);
39103926

3911-
switch (le32_to_cpu(ver->ram_version)) {
3912-
case WCN6855_2_0_RAM_VERSION_GF:
3913-
case WCN6855_2_1_RAM_VERSION_GF:
3914-
variant = "_gf";
3915-
break;
3916-
default:
3917-
variant = "";
3918-
break;
3919-
}
3920-
3921-
if (board_id == 0) {
3922-
snprintf(fwname, max_size, "qca/nvm_usb_%08x%s.bin",
3923-
rom_version, variant);
3924-
} else {
3925-
snprintf(fwname, max_size, "qca/nvm_usb_%08x%s_%04x.bin",
3926-
rom_version, variant, board_id);
3927-
}
3928-
} else {
3929-
snprintf(fwname, max_size, "qca/nvm_usb_%08x.bin",
3930-
rom_version);
3927+
switch (le32_to_cpu(ver->ram_version)) {
3928+
case WCN6855_2_0_RAM_VERSION_GF:
3929+
case WCN6855_2_1_RAM_VERSION_GF:
3930+
variant = "_gf";
3931+
break;
3932+
default:
3933+
variant = NULL;
3934+
break;
39313935
}
39323936

3937+
len = snprintf(fwname, max_size, "qca/nvm_usb_%08x", rom_version);
3938+
if (variant)
3939+
len += snprintf(fwname + len, max_size - len, "%s", variant);
3940+
if (board_id)
3941+
len += snprintf(fwname + len, max_size - len, "_%04x", board_id);
3942+
len += snprintf(fwname + len, max_size - len, ".bin");
39333943
}
39343944

39353945
static int btusb_setup_qca_load_nvm(struct hci_dev *hdev,

0 commit comments

Comments
 (0)