From: Rosen Penev Date: Mon, 7 Oct 2024 21:45:50 +0000 (-0700) Subject: mac80211: remove ath9k_platform_data X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=fdc2c6ab9901ad3e64ec1f93d5ccdc38990243b4;p=openwrt%2Fopenwrt.git mac80211: remove ath9k_platform_data This goes away in kernel 6.12 upstream. Get ahead of the curve by fixing all the local patches as well. Get rid of CONFIG_OF. It's needed now. Refreshed all patches. Signed-off-by: Rosen Penev Link: https://github.com/openwrt/openwrt/pull/16635 Signed-off-by: Robert Marko --- diff --git a/package/kernel/mac80211/Makefile b/package/kernel/mac80211/Makefile index b0de3950b9..c3ffb8dc06 100644 --- a/package/kernel/mac80211/Makefile +++ b/package/kernel/mac80211/Makefile @@ -11,7 +11,7 @@ include $(INCLUDE_DIR)/kernel.mk PKG_NAME:=mac80211 PKG_VERSION:=6.12.6 -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_LICENSE:=GPL-2.0-only PKG_LICENSE_FILES:=COPYING diff --git a/package/kernel/mac80211/patches/ath9k/100-gpio-of.patch b/package/kernel/mac80211/patches/ath9k/100-gpio-of.patch new file mode 100644 index 0000000000..2cddb59fc5 --- /dev/null +++ b/package/kernel/mac80211/patches/ath9k/100-gpio-of.patch @@ -0,0 +1,16 @@ +--- a/drivers/net/wireless/ath/ath9k/hw.h ++++ b/drivers/net/wireless/ath/ath9k/hw.h +@@ -976,6 +976,13 @@ struct ath_hw { + bool disable_2ghz; + bool disable_5ghz; + ++ int num_leds; ++ const struct gpio_led *leds; ++ ++ unsigned num_btns; ++ const struct gpio_keys_button *btns; ++ unsigned btn_poll_interval; ++ + const struct firmware *eeprom_blob; + u16 *nvmem_blob; /* devres managed */ + size_t nvmem_blob_len; diff --git a/package/kernel/mac80211/patches/ath9k/531-ath9k_extra_platform_leds.patch b/package/kernel/mac80211/patches/ath9k/531-ath9k_extra_platform_leds.patch index 1055bd335c..4f41cd9139 100644 --- a/package/kernel/mac80211/patches/ath9k/531-ath9k_extra_platform_leds.patch +++ b/package/kernel/mac80211/patches/ath9k/531-ath9k_extra_platform_leds.patch @@ -1,14 +1,6 @@ --- a/drivers/net/wireless/ath/ath9k/gpio.c +++ b/drivers/net/wireless/ath/ath9k/gpio.c -@@ -15,6 +15,7 @@ - */ - - #include "ath9k.h" -+#include - - /********************************/ - /* LED functions */ -@@ -108,6 +109,24 @@ int ath_create_gpio_led(struct ath_softc +@@ -108,6 +108,24 @@ int ath_create_gpio_led(struct ath_softc return ret; } @@ -33,30 +25,30 @@ void ath_deinit_leds(struct ath_softc *sc) { struct ath_led *led; -@@ -124,8 +143,10 @@ void ath_deinit_leds(struct ath_softc *s +@@ -124,8 +142,10 @@ void ath_deinit_leds(struct ath_softc *s void ath_init_leds(struct ath_softc *sc) { -+ struct ath9k_platform_data *pdata = sc->dev->platform_data; ++ struct ath_hw *ah = sc->sc_ah; char led_name[32]; const char *trigger; + int i; INIT_LIST_HEAD(&sc->leds); -@@ -134,6 +155,17 @@ void ath_init_leds(struct ath_softc *sc) +@@ -134,6 +154,17 @@ void ath_init_leds(struct ath_softc *sc) ath_fill_led_pin(sc); -+ if (pdata && pdata->leds && pdata->num_leds) -+ for (i = 0; i < pdata->num_leds; i++) { -+ if (pdata->leds[i].gpio == sc->sc_ah->led_pin) -+ sc->sc_ah->led_pin = -1; ++ if (ah->leds && ah->num_leds) ++ for (i = 0; i < ah->num_leds; i++) { ++ if (ah->leds[i].gpio == ah->led_pin) ++ ah->led_pin = -1; + -+ ath_create_platform_led(sc, &pdata->leds[i]); ++ ath_create_platform_led(sc, &ah->leds[i]); + } + -+ if (sc->sc_ah->led_pin < 0) ++ if (ah->led_pin < 0) + return; + snprintf(led_name, sizeof(led_name), "ath9k-%s", diff --git a/package/kernel/mac80211/patches/ath9k/542-ath9k_debugfs_diag.patch b/package/kernel/mac80211/patches/ath9k/542-ath9k_debugfs_diag.patch index f08301c7f4..9821716c6a 100644 --- a/package/kernel/mac80211/patches/ath9k/542-ath9k_debugfs_diag.patch +++ b/package/kernel/mac80211/patches/ath9k/542-ath9k_debugfs_diag.patch @@ -84,7 +84,7 @@ bool reset_power_on; bool htc_reset_init; -@@ -1079,6 +1087,7 @@ void ath9k_hw_check_nav(struct ath_hw *a +@@ -1086,6 +1094,7 @@ void ath9k_hw_check_nav(struct ath_hw *a bool ath9k_hw_check_alive(struct ath_hw *ah); bool ath9k_hw_setpower(struct ath_hw *ah, enum ath9k_power_mode mode); diff --git a/package/kernel/mac80211/patches/ath9k/547-ath9k_led_defstate_fix.patch b/package/kernel/mac80211/patches/ath9k/547-ath9k_led_defstate_fix.patch index 5d84cf0c42..d633c051b0 100644 --- a/package/kernel/mac80211/patches/ath9k/547-ath9k_led_defstate_fix.patch +++ b/package/kernel/mac80211/patches/ath9k/547-ath9k_led_defstate_fix.patch @@ -13,7 +13,7 @@ Signed-off-by: Michal Cieslakiewicz --- a/drivers/net/wireless/ath/ath9k/gpio.c +++ b/drivers/net/wireless/ath/ath9k/gpio.c -@@ -74,8 +74,11 @@ static int ath_add_led(struct ath_softc +@@ -73,8 +73,11 @@ static int ath_add_led(struct ath_softc ath9k_hw_gpio_request_out(sc->sc_ah, gpio->gpio, gpio->name, AR_GPIO_OUTPUT_MUX_AS_OUTPUT); diff --git a/package/kernel/mac80211/patches/ath9k/548-ath9k_enable_gpio_chip.patch b/package/kernel/mac80211/patches/ath9k/548-ath9k_enable_gpio_chip.patch index 9fb549cc19..1c071c4621 100644 --- a/package/kernel/mac80211/patches/ath9k/548-ath9k_enable_gpio_chip.patch +++ b/package/kernel/mac80211/patches/ath9k/548-ath9k_enable_gpio_chip.patch @@ -45,10 +45,10 @@ Signed-off-by: Felix Fietkau #ifdef CPTCFG_ATH9K_DEBUGFS --- a/drivers/net/wireless/ath/ath9k/gpio.c +++ b/drivers/net/wireless/ath/ath9k/gpio.c -@@ -16,13 +16,135 @@ +@@ -15,13 +15,131 @@ + */ #include "ath9k.h" - #include +#include + +#ifdef CPTCFG_MAC80211_LEDS @@ -126,9 +126,7 @@ Signed-off-by: Felix Fietkau + gc->sc = sc; + snprintf(gc->label, sizeof(gc->label), "ath9k-%s", + wiphy_name(sc->hw->wiphy)); -+#ifdef CONFIG_OF + gc->gchip.parent = sc->dev; -+#endif + gc->gchip.label = gc->label; + gc->gchip.base = -1; /* determine base automatically */ + gc->gchip.ngpio = ah->caps.num_gpio_pins; @@ -143,9 +141,7 @@ Signed-off-by: Felix Fietkau + return; + } + -+#ifdef CONFIG_OF + gc->gchip.owner = NULL; -+#endif + sc->gpiochip = gc; +} + @@ -183,7 +179,7 @@ Signed-off-by: Felix Fietkau static void ath_fill_led_pin(struct ath_softc *sc) { struct ath_hw *ah = sc->sc_ah; -@@ -80,6 +202,12 @@ static int ath_add_led(struct ath_softc +@@ -79,6 +197,12 @@ static int ath_add_led(struct ath_softc else ath9k_hw_set_gpio(sc->sc_ah, gpio->gpio, gpio->active_low); @@ -196,7 +192,7 @@ Signed-off-by: Felix Fietkau return 0; } -@@ -136,17 +264,24 @@ void ath_deinit_leds(struct ath_softc *s +@@ -135,17 +259,24 @@ void ath_deinit_leds(struct ath_softc *s while (!list_empty(&sc->leds)) { led = list_first_entry(&sc->leds, struct ath_led, list); @@ -216,18 +212,15 @@ Signed-off-by: Felix Fietkau void ath_init_leds(struct ath_softc *sc) { - struct ath9k_platform_data *pdata = sc->dev->platform_data; + struct ath_hw *ah = sc->sc_ah; + struct device_node *np = sc->dev->of_node; char led_name[32]; const char *trigger; int i; -@@ -156,6 +291,15 @@ void ath_init_leds(struct ath_softc *sc) +@@ -155,6 +286,12 @@ void ath_init_leds(struct ath_softc *sc) if (AR_SREV_9100(sc->sc_ah)) return; -+ if (!np) -+ ath9k_register_gpio_chip(sc); -+ + /* setup gpio controller only if requested and skip the led_pin setup */ + if (of_property_read_bool(np, "gpio-controller")) { + ath9k_register_gpio_chip(sc); @@ -236,8 +229,8 @@ Signed-off-by: Felix Fietkau + ath_fill_led_pin(sc); - if (pdata && pdata->leds && pdata->num_leds) -@@ -180,6 +324,7 @@ void ath_init_leds(struct ath_softc *sc) + if (ah->leds && ah->num_leds) +@@ -179,6 +316,7 @@ void ath_init_leds(struct ath_softc *sc) ath_create_gpio_led(sc, sc->sc_ah->led_pin, led_name, trigger, !sc->sc_ah->config.led_active_high); } diff --git a/package/kernel/mac80211/patches/ath9k/549-ath9k_enable_gpio_buttons.patch b/package/kernel/mac80211/patches/ath9k/549-ath9k_enable_gpio_buttons.patch index d164d89031..92f110b95c 100644 --- a/package/kernel/mac80211/patches/ath9k/549-ath9k_enable_gpio_buttons.patch +++ b/package/kernel/mac80211/patches/ath9k/549-ath9k_enable_gpio_buttons.patch @@ -20,16 +20,16 @@ Signed-off-by: Felix Fietkau --- a/drivers/net/wireless/ath/ath9k/gpio.c +++ b/drivers/net/wireless/ath/ath9k/gpio.c -@@ -17,6 +17,8 @@ +@@ -16,6 +16,8 @@ + #include "ath9k.h" - #include #include +#include +#include #ifdef CPTCFG_MAC80211_LEDS -@@ -129,6 +131,67 @@ static void ath9k_unregister_gpio_chip(s +@@ -124,6 +126,67 @@ static void ath9k_unregister_gpio_chip(s sc->gpiochip = NULL; } @@ -40,7 +40,7 @@ Signed-off-by: Felix Fietkau +/* add GPIO buttons */ +static void ath9k_init_buttons(struct ath_softc *sc) +{ -+ struct ath9k_platform_data *pdata = sc->dev->platform_data; ++ struct ath_hw *ah = sc->sc_ah; + struct platform_device *pdev; + struct gpio_keys_platform_data gkpdata; + struct gpio_keys_button *bt; @@ -49,28 +49,28 @@ Signed-off-by: Felix Fietkau + if (!sc->gpiochip) + return; + -+ if (!pdata || !pdata->btns || !pdata->num_btns) ++ if (!ah->btns || !ah->num_btns) + return; + -+ bt = devm_kmemdup(sc->dev, pdata->btns, -+ pdata->num_btns * sizeof(struct gpio_keys_button), ++ bt = devm_kmemdup(sc->dev, ah->btns, ++ ah->num_btns * sizeof(struct gpio_keys_button), + GFP_KERNEL); + if (!bt) + return; + -+ for (i = 0; i < pdata->num_btns; i++) { -+ if (pdata->btns[i].gpio == sc->sc_ah->led_pin) ++ for (i = 0; i < ah->num_btns; i++) { ++ if (ah->btns[i].gpio == sc->sc_ah->led_pin) + sc->sc_ah->led_pin = -1; + -+ ath9k_hw_gpio_request_in(sc->sc_ah, pdata->btns[i].gpio, ++ ath9k_hw_gpio_request_in(sc->sc_ah, ah->btns[i].gpio, + "ath9k-gpio"); -+ bt[i].gpio = sc->gpiochip->gchip.base + pdata->btns[i].gpio; ++ bt[i].gpio = sc->gpiochip->gchip.base + ah->btns[i].gpio; + } + + memset(&gkpdata, 0, sizeof(struct gpio_keys_platform_data)); + gkpdata.buttons = bt; -+ gkpdata.nbuttons = pdata->num_btns; -+ gkpdata.poll_interval = pdata->btn_poll_interval; ++ gkpdata.nbuttons = ah->num_btns; ++ gkpdata.poll_interval = ah->btn_poll_interval; + + pdev = platform_device_register_data(sc->dev, "gpio-keys-polled", + PLATFORM_DEVID_AUTO, &gkpdata, @@ -97,7 +97,7 @@ Signed-off-by: Felix Fietkau #else /* CONFIG_GPIOLIB */ static inline void ath9k_register_gpio_chip(struct ath_softc *sc) -@@ -139,6 +202,14 @@ static inline void ath9k_unregister_gpio +@@ -134,6 +197,14 @@ static inline void ath9k_unregister_gpio { } @@ -112,7 +112,7 @@ Signed-off-by: Felix Fietkau #endif /* CONFIG_GPIOLIB */ /********************************/ -@@ -262,6 +333,7 @@ void ath_deinit_leds(struct ath_softc *s +@@ -257,6 +328,7 @@ void ath_deinit_leds(struct ath_softc *s { struct ath_led *led; @@ -120,11 +120,11 @@ Signed-off-by: Felix Fietkau while (!list_empty(&sc->leds)) { led = list_first_entry(&sc->leds, struct ath_led, list); #ifdef CONFIG_GPIOLIB -@@ -301,6 +373,7 @@ void ath_init_leds(struct ath_softc *sc) +@@ -293,6 +365,7 @@ void ath_init_leds(struct ath_softc *sc) } ath_fill_led_pin(sc); + ath9k_init_buttons(sc); - if (pdata && pdata->leds && pdata->num_leds) - for (i = 0; i < pdata->num_leds; i++) { + if (ah->leds && ah->num_leds) + for (i = 0; i < ah->num_leds; i++) { diff --git a/package/kernel/mac80211/patches/ath9k/552-ath9k-ahb_of.patch b/package/kernel/mac80211/patches/ath9k/552-ath9k-ahb_of.patch index 3adc8bb8d6..a5ad2bcffb 100644 --- a/package/kernel/mac80211/patches/ath9k/552-ath9k-ahb_of.patch +++ b/package/kernel/mac80211/patches/ath9k/552-ath9k-ahb_of.patch @@ -1,27 +1,22 @@ --- a/drivers/net/wireless/ath/ath9k/ahb.c +++ b/drivers/net/wireless/ath/ath9k/ahb.c -@@ -20,7 +20,15 @@ +@@ -20,8 +20,12 @@ #include #include #include +#include #include "ath9k.h" -+#include -+ -+#ifdef CONFIG_OF + +#include +#include -+#include -+#endif - ++ static const struct platform_device_id ath9k_platform_id_table[] = { { -@@ -69,6 +77,192 @@ static const struct ath_bus_ops ath_ahb_ + .name = "ath9k", +@@ -69,22 +73,198 @@ static const struct ath_bus_ops ath_ahb_ .eeprom_read = ath_ahb_eeprom_read, }; -+#ifdef CONFIG_OF -+ +#define QCA955X_DDR_CTL_CONFIG 0x108 +#define QCA955X_DDR_CTL_CONFIG_ACT_WMAC BIT(23) + @@ -162,7 +157,7 @@ + +static int of_ath_ahb_probe(struct platform_device *pdev) +{ -+ struct ath9k_platform_data *pdata; ++ struct ath_hw *ah = platform_get_drvdata(pdev); + const struct of_device_id *match; + const struct of_ath_ahb_data *data; + u8 led_pin; @@ -170,19 +165,17 @@ + match = of_match_device(of_ath_ahb_match, &pdev->dev); + data = (const struct of_ath_ahb_data *)match->data; + -+ pdata = dev_get_platdata(&pdev->dev); -+ + if (!of_property_read_u8(pdev->dev.of_node, "qca,led-pin", &led_pin)) -+ pdata->led_pin = led_pin; ++ ah->led_pin = led_pin; + else -+ pdata->led_pin = -1; ++ ah->led_pin = -1; + + if (of_property_read_bool(pdev->dev.of_node, "qca,tx-gain-buffalo")) -+ pdata->tx_gain_buffalo = true; ++ ah->config.tx_gain_buffalo = true; + + if (data->wmac_reset) { + data->wmac_reset(); -+ pdata->external_reset = data->wmac_reset; ++ ah->external_reset = data->wmac_reset; + } + + if (data->dev_id == AR9300_DEVID_AR953X) { @@ -191,94 +184,55 @@ + * Some vendors have an invalid bootstrap option + * set, which would break the WMAC here. + */ -+ pdata->is_clk_25mhz = true; ++ ah->is_clk_25mhz = true; + } else if (data->bootstrap_reg && data->bootstrap_ref) { + u32 t = ath79_reset_rr(data->bootstrap_reg); + if (t & data->bootstrap_ref) -+ pdata->is_clk_25mhz = false; ++ ah->is_clk_25mhz = false; + else -+ pdata->is_clk_25mhz = true; ++ ah->is_clk_25mhz = true; + } + -+ pdata->get_mac_revision = data->soc_revision; ++ ah->get_mac_revision = data->soc_revision; + + return data->dev_id; +} -+#endif + static int ath_ahb_probe(struct platform_device *pdev) { void __iomem *mem; -@@ -80,6 +274,17 @@ static int ath_ahb_probe(struct platform + struct ath_softc *sc; + struct ieee80211_hw *hw; + struct resource *res; +- const struct platform_device_id *id = platform_get_device_id(pdev); + int irq; int ret = 0; struct ath_hw *ah; char hw_name[64]; -+ u16 dev_id; -+ -+ if (id) -+ dev_id = id->driver_data; -+ -+#ifdef CONFIG_OF -+ if (pdev->dev.of_node) -+ pdev->dev.platform_data = devm_kzalloc(&pdev->dev, -+ sizeof(struct ath9k_platform_data), -+ GFP_KERNEL); -+#endif +- +- if (!dev_get_platdata(&pdev->dev)) { +- dev_err(&pdev->dev, "no platform data specified\n"); +- return -EINVAL; +- } ++ u32 dev_id; - if (!dev_get_platdata(&pdev->dev)) { - dev_err(&pdev->dev, "no platform data specified\n"); -@@ -118,17 +323,23 @@ static int ath_ahb_probe(struct platform - sc->mem = mem; - sc->irq = irq; - -+#ifdef CONFIG_OF -+ dev_id = of_ath_ahb_probe(pdev); -+#endif - ret = request_irq(irq, ath_isr, IRQF_SHARED, "ath9k", sc); - if (ret) { - dev_err(&pdev->dev, "request_irq failed\n"); + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + if (res == NULL) { +@@ -124,7 +304,8 @@ static int ath_ahb_probe(struct platform goto err_free_hw; } - ret = ath9k_init_device(id->driver_data, sc, &ath_ahb_bus_ops); ++ dev_id = of_ath_ahb_probe(pdev); + ret = ath9k_init_device(dev_id, sc, &ath_ahb_bus_ops); if (ret) { dev_err(&pdev->dev, "failed to initialize device\n"); goto err_irq; - } -+#ifdef CONFIG_OF -+ pdev->dev.platform_data = NULL; -+#endif - - ah = sc->sc_ah; - ath9k_hw_name(ah, hw_name, sizeof(hw_name)); -@@ -162,6 +373,9 @@ static struct platform_driver ath_ahb_dr +@@ -162,6 +343,7 @@ static struct platform_driver ath_ahb_dr .remove_new = ath_ahb_remove, .driver = { .name = "ath9k", -+#ifdef CONFIG_OF + .of_match_table = of_ath_ahb_match, -+#endif }, .id_table = ath9k_platform_id_table, }; ---- a/drivers/net/wireless/ath/ath9k/ath9k.h -+++ b/drivers/net/wireless/ath/ath9k/ath9k.h -@@ -26,6 +26,7 @@ - #include - #include - #include -+#include - - #include "common.h" - #include "debug.h" -@@ -1013,6 +1014,9 @@ struct ath_softc { - struct ath_hw *sc_ah; - void __iomem *mem; - int irq; -+#ifdef CONFIG_OF -+ struct reset_control *reset; -+#endif - spinlock_t sc_serial_rw; - spinlock_t sc_pm_lock; - spinlock_t sc_pcu_lock;