From d51353db26f1e625fa95b36bc554902083dc72d3 Mon Sep 17 00:00:00 2001 From: Rosen Penev Date: Fri, 4 Oct 2024 13:24:29 -0700 Subject: [PATCH 1/4] ath79: gpio-latch-mikrotik: use devm_mutex_init Avoids needing to call mutex_destroy in error paths, which is missing anyway. Signed-off-by: Rosen Penev Link: https://github.com/openwrt/openwrt/pull/16620 Signed-off-by: Robert Marko --- .../ath79/files/drivers/gpio/gpio-latch-mikrotik.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/target/linux/ath79/files/drivers/gpio/gpio-latch-mikrotik.c b/target/linux/ath79/files/drivers/gpio/gpio-latch-mikrotik.c index 70f091b79f..6e3f0f9690 100644 --- a/target/linux/ath79/files/drivers/gpio/gpio-latch-mikrotik.c +++ b/target/linux/ath79/files/drivers/gpio/gpio-latch-mikrotik.c @@ -110,14 +110,19 @@ static int gpio_latch_probe(struct platform_device *pdev) struct gpio_latch_chip *glc; struct gpio_chip *gc; struct device *dev = &pdev->dev; - int i, n; + int err, i, n; glc = devm_kzalloc(dev, sizeof(*glc), GFP_KERNEL); if (!glc) return -ENOMEM; - mutex_init(&glc->mutex); - mutex_init(&glc->latch_mutex); + err = devm_mutex_init(&pdev->dev, &glc->mutex); + if (err) + return err; + + err = devm_mutex_init(&pdev->dev, &glc->latch_mutex); + if (err) + return err; n = gpiod_count(dev, NULL); if (n <= 0) From 06791742a0f269014d1724bedac73ed9935e3260 Mon Sep 17 00:00:00 2001 From: Lech Perczak Date: Mon, 7 Oct 2024 00:08:23 +0200 Subject: [PATCH 2/4] ipq40xx: fix MAC address on Meraki MR33 and MR74 after nvmem-layout ...conversion. Commit 20736013e910 ("kernel: backport nvmem v6.6 fixes and v6.7 changes") has causedt he device to no longer correctly read MAC address from its onboard 24c64 EEPROM, because "at24" driver doesn't support legacy nvmem-cell bindings [1] - and there was an explicit config option added to mandate that behaviour in the following patch: 820-v6.7-0002-nvmem-add-explicit-config-option-to-read-old-syntax-.patch But some of the devices, MR33 and MR74 included, weren't converted with that as well. Convert the definition to use proper fixed-layout binding to fix it. The offending change was introduced between v23.05.0 and v23.05.1, and found by bisection: git bisect start # status: waiting for both good and bad commits # good: [bd4f415efacfc03bbe5b79ae1d39c1451f5f7385] OpenWrt v23.05.0: adjust config defaults git bisect good bd4f415efacfc03bbe5b79ae1d39c1451f5f7385 # status: waiting for bad commit, 1 good commit known # bad: [a58a86693f8593974ff7c26bb42e280b62a8724c] OpenWrt v23.05.1: adjust config defaults git bisect bad a58a86693f8593974ff7c26bb42e280b62a8724c # good: [3d0a78add22754aa891529b6702b5e4c7b837446] qualcommax: only build initramfs if CONFIG_TARGET_ROOTFS_INITRAMFS is set git bisect good 3d0a78add22754aa891529b6702b5e4c7b837446 # bad: [21e5db97c410f4008c8fe8515fb79a7cde368dbf] build: add CycloneDX SBOM JSON support git bisect bad 21e5db97c410f4008c8fe8515fb79a7cde368dbf # good: [89184b15cfce4aaffac8cda87c2fa74f829ace42] mediatek: add build for MT7981 RFB git bisect good 89184b15cfce4aaffac8cda87c2fa74f829ace42 # bad: [41f27bbb6d0af2f37098b97cd28d5f514a6fc417] bcm53xx: add the latest fix version of brcm_nvram git bisect bad 41f27bbb6d0af2f37098b97cd28d5f514a6fc417 # good: [b649b0bf7100bdc6adb7e857c74738cab7c47b4c] kernel: nvmem: fix "fixed-layout" & support "mac-base" git bisect good b649b0bf7100bdc6adb7e857c74738cab7c47b4c # bad: [20736013e91030005353b401bc4b757ba5e5fa98] kernel: backport nvmem v6.6 fixes and v6.7 changes git bisect bad 20736013e91030005353b401bc4b757ba5e5fa98 # good: [066971615ff66512bc542b09a90be34c2afe98bb] kernel: backport v6.6 nvmem changes git bisect good 066971615ff66512bc542b09a90be34c2afe98bb # first bad commit: [20736013e91030005353b401bc4b757ba5e5fa98] kernel: backport nvmem v6.6 fixes and v6.7 changes Link: [1] https://github.com/openwrt/openwrt/issues/15393#issuecomment-2212300849 Fixes: 20736013e910 ("kernel: backport nvmem v6.6 fixes and v6.7 changes") Fixes: https://github.com/openwrt/openwrt/issues/15393 Signed-off-by: Lech Perczak Link: https://github.com/openwrt/openwrt/pull/16623 Signed-off-by: Robert Marko --- .../dts/qcom/qcom-ipq4029-insect-common.dtsi | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/target/linux/ipq40xx/files-6.6/arch/arm/boot/dts/qcom/qcom-ipq4029-insect-common.dtsi b/target/linux/ipq40xx/files-6.6/arch/arm/boot/dts/qcom/qcom-ipq4029-insect-common.dtsi index 3637b96d24..8286e1899f 100644 --- a/target/linux/ipq40xx/files-6.6/arch/arm/boot/dts/qcom/qcom-ipq4029-insect-common.dtsi +++ b/target/linux/ipq40xx/files-6.6/arch/arm/boot/dts/qcom/qcom-ipq4029-insect-common.dtsi @@ -128,13 +128,17 @@ pagesize = <32>; reg = <0x50>; read-only; /* This holds our MAC & Meraki board-data */ - #address-cells = <1>; - #size-cells = <1>; - mac_address: mac-address@66 { - compatible = "mac-base"; - reg = <0x66 0x6>; - #nvmem-cell-cells = <1>; + nvmem-layout { + compatible = "fixed-layout"; + #address-cells = <1>; + #size-cells = <1>; + + mac_address: mac-address@66 { + compatible = "mac-base"; + reg = <0x66 0x6>; + #nvmem-cell-cells = <1>; + }; }; }; }; From 78d1689757f40bbf0674da7052706e15302c4e88 Mon Sep 17 00:00:00 2001 From: Rosen Penev Date: Wed, 11 Sep 2024 12:46:28 -0700 Subject: [PATCH 3/4] ath79: ar7200 usb phy: simplify probe Even though optional is used, there's are still pointless NULL assignments. Use dev_err_probe to avoid manually handling EPROBE_DEFER. Use devm_platform_iomap_resource. No struct resource needed. Signed-off-by: Rosen Penev Tested-by: Shiji Yang on NETGEAR R6100. Link: https://github.com/openwrt/openwrt/pull/16519 Signed-off-by: Hauke Mehrtens --- .../700-phy-add-ath79-usb-phys.patch | 75 ++++++------------- 1 file changed, 23 insertions(+), 52 deletions(-) diff --git a/target/linux/ath79/patches-6.6/700-phy-add-ath79-usb-phys.patch b/target/linux/ath79/patches-6.6/700-phy-add-ath79-usb-phys.patch index 0a9de68a39..98c399c9e0 100644 --- a/target/linux/ath79/patches-6.6/700-phy-add-ath79-usb-phys.patch +++ b/target/linux/ath79/patches-6.6/700-phy-add-ath79-usb-phys.patch @@ -51,7 +51,7 @@ Signed-off-by: John Crispin obj-$(CONFIG_PHY_LPC18XX_USB_OTG) += phy-lpc18xx-usb-otg.o --- /dev/null +++ b/drivers/phy/phy-ar7100-usb.c -@@ -0,0 +1,140 @@ +@@ -0,0 +1,127 @@ +/* + * Copyright (C) 2018 John Crispin + * @@ -118,50 +118,38 @@ Signed-off-by: John Crispin +static int ar7100_usb_phy_probe(struct platform_device *pdev) +{ + struct phy_provider *phy_provider; -+ struct resource *res; + struct ar7100_usb_phy *priv; + + priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); + if (!priv) + return -ENOMEM; + -+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0); -+ priv->io_base = devm_ioremap_resource(&pdev->dev, res); ++ priv->io_base = devm_platform_ioremap_resource(pdev, 0); + if (IS_ERR(priv->io_base)) + return PTR_ERR(priv->io_base); + + priv->rst_phy = devm_reset_control_get(&pdev->dev, "usb-phy"); -+ if (IS_ERR(priv->rst_phy)) { -+ dev_err(&pdev->dev, "phy reset is missing\n"); -+ return PTR_ERR(priv->rst_phy); -+ } ++ if (IS_ERR(priv->rst_phy)) ++ return dev_err_probe(&pdev->dev, PTR_ERR(priv->rst_phy), "phy reset is missing"); + + priv->rst_host = devm_reset_control_get(&pdev->dev, "usb-host"); -+ if (IS_ERR(priv->rst_host)) { -+ dev_err(&pdev->dev, "host reset is missing\n"); -+ return PTR_ERR(priv->rst_host); -+ } ++ if (IS_ERR(priv->rst_host)) ++ return dev_err_probe(&pdev->dev, PTR_ERR(priv->rst_host), "host reset is missing"); + + priv->rst_ohci_dll = devm_reset_control_get(&pdev->dev, "usb-ohci-dll"); -+ if (IS_ERR(priv->rst_ohci_dll)) { -+ dev_err(&pdev->dev, "ohci-dll reset is missing\n"); -+ return PTR_ERR(priv->rst_host); -+ } ++ if (IS_ERR(priv->rst_ohci_dll)) ++ return dev_err_probe(&pdev->dev, PTR_ERR(priv->rst_host), "ohci-dll reset is missing"); + + priv->phy = devm_phy_create(&pdev->dev, NULL, &ar7100_usb_phy_ops); -+ if (IS_ERR(priv->phy)) { -+ dev_err(&pdev->dev, "failed to create PHY\n"); -+ return PTR_ERR(priv->phy); -+ } ++ if (IS_ERR(priv->phy)) ++ return dev_err_probe(&pdev->dev, PTR_ERR(priv->phy), "failed to create PHY"); + + priv->gpio = of_get_named_gpio(pdev->dev.of_node, "gpios", 0); + if (gpio_is_valid(priv->gpio)) { + int ret = devm_gpio_request(&pdev->dev, priv->gpio, dev_name(&pdev->dev)); ++ if (ret) ++ return dev_err_probe(&pdev->dev, ret, "failed to request gpio"); + -+ if (ret) { -+ dev_err(&pdev->dev, "failed to request gpio\n"); -+ return ret; -+ } + gpio_export_with_name(gpio_to_desc(priv->gpio), 0, dev_name(&pdev->dev)); + gpio_set_value(priv->gpio, 1); + } @@ -170,7 +158,6 @@ Signed-off-by: John Crispin + + phy_provider = devm_of_phy_provider_register(&pdev->dev, of_phy_simple_xlate); + -+ + return PTR_ERR_OR_ZERO(phy_provider); +} + @@ -194,7 +181,7 @@ Signed-off-by: John Crispin +MODULE_LICENSE("GPL"); --- /dev/null +++ b/drivers/phy/phy-ar7200-usb.c -@@ -0,0 +1,136 @@ +@@ -0,0 +1,120 @@ +/* + * Copyright (C) 2015 Alban Bedel + * @@ -264,44 +251,28 @@ Signed-off-by: John Crispin + return -ENOMEM; + + priv->rst_phy = devm_reset_control_get(&pdev->dev, "usb-phy"); -+ if (IS_ERR(priv->rst_phy)) { -+ if (PTR_ERR(priv->rst_phy) != -EPROBE_DEFER) -+ dev_err(&pdev->dev, "phy reset is missing\n"); -+ return PTR_ERR(priv->rst_phy); -+ } ++ if (IS_ERR(priv->rst_phy)) ++ return dev_err_probe(&pdev->dev, PTR_ERR(priv->rst_phy), "phy reset is missing"); + + priv->rst_phy_analog = devm_reset_control_get_optional( + &pdev->dev, "usb-phy-analog"); -+ if (IS_ERR(priv->rst_phy_analog)) { -+ if (PTR_ERR(priv->rst_phy_analog) == -ENOENT) -+ priv->rst_phy_analog = NULL; -+ else -+ return PTR_ERR(priv->rst_phy_analog); -+ } ++ if (IS_ERR(priv->rst_phy_analog)) ++ return PTR_ERR(priv->rst_phy_analog); + + priv->suspend_override = devm_reset_control_get_optional( + &pdev->dev, "usb-suspend-override"); -+ if (IS_ERR(priv->suspend_override)) { -+ if (PTR_ERR(priv->suspend_override) == -ENOENT) -+ priv->suspend_override = NULL; -+ else -+ return PTR_ERR(priv->suspend_override); -+ } ++ if (IS_ERR(priv->suspend_override)) ++ return PTR_ERR(priv->suspend_override); + + priv->phy = devm_phy_create(&pdev->dev, NULL, &ar7200_usb_phy_ops); -+ if (IS_ERR(priv->phy)) { -+ dev_err(&pdev->dev, "failed to create PHY\n"); -+ return PTR_ERR(priv->phy); -+ } ++ if (IS_ERR(priv->phy)) ++ return dev_err_probe(&pdev->dev, PTR_ERR(priv->phy), "failed to create PHY"); + + priv->gpio = of_get_named_gpio(pdev->dev.of_node, "gpios", 0); + if (gpio_is_valid(priv->gpio)) { + int ret = devm_gpio_request(&pdev->dev, priv->gpio, dev_name(&pdev->dev)); -+ -+ if (ret) { -+ dev_err(&pdev->dev, "failed to request gpio\n"); -+ return ret; -+ } ++ if (ret) ++ return dev_err_probe(&pdev->dev, ret, "failed to request gpio"); + gpio_export_with_name(gpio_to_desc(priv->gpio), 0, dev_name(&pdev->dev)); + gpio_set_value(priv->gpio, 1); + } From 170ecbecfc73a9c8f6be9cb9ee67d6e5dbe3f402 Mon Sep 17 00:00:00 2001 From: Hauke Mehrtens Date: Sun, 6 Oct 2024 22:33:09 +0200 Subject: [PATCH 4/4] linux-firmware: Update Intel AX101/AX210 firmware Use most recent version of the Intel AX101 and AX210 firmware provided by linux-firmware and supported the driver used in OpenWrt. Link: https://github.com/openwrt/openwrt/pull/16621 Signed-off-by: Hauke Mehrtens --- package/firmware/linux-firmware/intel.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package/firmware/linux-firmware/intel.mk b/package/firmware/linux-firmware/intel.mk index cc9bab53f8..225b2aa862 100644 --- a/package/firmware/linux-firmware/intel.mk +++ b/package/firmware/linux-firmware/intel.mk @@ -173,7 +173,7 @@ $(eval $(call BuildPackage,iwlwifi-firmware-iwl9260)) Package/iwlwifi-firmware-ax101 = $(call Package/firmware-default,Intel AX101 firmware) define Package/iwlwifi-firmware-ax101/install $(INSTALL_DIR) $(1)/lib/firmware - $(INSTALL_DATA) $(PKG_BUILD_DIR)/iwlwifi-so-a0-hr-b0-83.ucode $(1)/lib/firmware + $(INSTALL_DATA) $(PKG_BUILD_DIR)/iwlwifi-so-a0-hr-b0-89.ucode $(1)/lib/firmware endef $(eval $(call BuildPackage,iwlwifi-firmware-ax101)) @@ -194,7 +194,7 @@ $(eval $(call BuildPackage,iwlwifi-firmware-ax201)) Package/iwlwifi-firmware-ax210 = $(call Package/firmware-default,Intel AX210 firmware) define Package/iwlwifi-firmware-ax210/install $(INSTALL_DIR) $(1)/lib/firmware - $(INSTALL_DATA) $(PKG_BUILD_DIR)/iwlwifi-ty-a0-gf-a0-83.ucode $(1)/lib/firmware + $(INSTALL_DATA) $(PKG_BUILD_DIR)/iwlwifi-ty-a0-gf-a0-89.ucode $(1)/lib/firmware $(INSTALL_DATA) $(PKG_BUILD_DIR)/iwlwifi-ty-a0-gf-a0.pnvm $(1)/lib/firmware endef $(eval $(call BuildPackage,iwlwifi-firmware-ax210))