[openwrt/openwrt] ath79: fix GPIO numbering with ath9k
LEDE Commits
lede-commits at lists.infradead.org
Wed Apr 9 03:43:38 PDT 2025
robimarko pushed a commit to openwrt/openwrt.git, branch main:
https://git.openwrt.org/0ac79009dd3433d5e92a8311beae1041f39c3b79
commit 0ac79009dd3433d5e92a8311beae1041f39c3b79
Author: Rosen Penev <rosenp at gmail.com>
AuthorDate: Wed Jan 1 11:21:49 2025 -0800
ath79: fix GPIO numbering with ath9k
ath9k base starts at 512. This is a problem as it uses gpio_request_one
to request the GPIO, which is legacy API.
This upstream pending patch needs to also be ported to mac80211.
Signed-off-by: Rosen Penev <rosenp at gmail.com>
Link: https://github.com/openwrt/openwrt/pull/17445
Signed-off-by: Robert Marko <robimarko at gmail.com>
---
.../341-wifi-ath9k-obtain-system-gpios.patch | 233 +++++++++++++++++++++
1 file changed, 233 insertions(+)
diff --git a/target/linux/ath79/patches-6.6/341-wifi-ath9k-obtain-system-gpios.patch b/target/linux/ath79/patches-6.6/341-wifi-ath9k-obtain-system-gpios.patch
new file mode 100644
index 0000000000..a43e3537e6
--- /dev/null
+++ b/target/linux/ath79/patches-6.6/341-wifi-ath9k-obtain-system-gpios.patch
@@ -0,0 +1,233 @@
+From patchwork Tue Apr 23 12:12:33 2024
+Content-Type: text/plain; charset="utf-8"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+X-Patchwork-Submitter: Linus Walleij <linus.walleij at linaro.org>
+X-Patchwork-Id: 1926515
+Return-Path:
+ <linux-gpio+bounces-5755-incoming=patchwork.ozlabs.org at vger.kernel.org>
+X-Original-To: incoming at patchwork.ozlabs.org
+Delivered-To: patchwork-incoming at legolas.ozlabs.org
+Authentication-Results: legolas.ozlabs.org;
+ dkim=pass (2048-bit key;
+ unprotected) header.d=linaro.org header.i=@linaro.org header.a=rsa-sha256
+ header.s=google header.b=qX99TQMM;
+ dkim-atps=neutral
+Authentication-Results: legolas.ozlabs.org;
+ spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org
+ (client-ip=2604:1380:45e3:2400::1; helo=sv.mirrors.kernel.org;
+ envelope-from=linux-gpio+bounces-5755-incoming=patchwork.ozlabs.org at vger.kernel.org;
+ receiver=patchwork.ozlabs.org)
+Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org
+ [IPv6:2604:1380:45e3:2400::1])
+ (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
+ key-exchange X25519 server-signature ECDSA (secp384r1))
+ (No client certificate requested)
+ by legolas.ozlabs.org (Postfix) with ESMTPS id 4VP1Gc6RZKz1yZP
+ for <incoming at patchwork.ozlabs.org>; Tue, 23 Apr 2024 22:12:56 +1000 (AEST)
+Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org
+ [52.25.139.140])
+ (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
+ (No client certificate requested)
+ by sv.mirrors.kernel.org (Postfix) with ESMTPS id 5BB9C28522A
+ for <incoming at patchwork.ozlabs.org>; Tue, 23 Apr 2024 12:12:55 +0000 (UTC)
+Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
+ by smtp.subspace.kernel.org (Postfix) with ESMTP id 2F83B8563D;
+ Tue, 23 Apr 2024 12:12:41 +0000 (UTC)
+Authentication-Results: smtp.subspace.kernel.org;
+ dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org
+ header.b="qX99TQMM"
+X-Original-To: linux-gpio at vger.kernel.org
+Received: from mail-lj1-f179.google.com (mail-lj1-f179.google.com
+ [209.85.208.179])
+ (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
+ (No client certificate requested)
+ by smtp.subspace.kernel.org (Postfix) with ESMTPS id A8F3C82865
+ for <linux-gpio at vger.kernel.org>; Tue, 23 Apr 2024 12:12:37 +0000 (UTC)
+Authentication-Results: smtp.subspace.kernel.org;
+ arc=none smtp.client-ip=209.85.208.179
+ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
+ t=1713874361; cv=none;
+ b=d6RcvcAu8hBYAK8Io489ZHQpJVXPwuokP6iMcAkbvElCerbXD6jAdqdi+RjDlo5C49GHGO4FQ19UwQn/VE//qSwiK1ulTSBp3OkvAmyb7yYAFnDs9AVNWRw+5/NxeFNn3fj5PyvqVymIbaJKabfrOVNwkz/5JMHxEIJtr6Crmog=
+ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org;
+ s=arc-20240116; t=1713874361; c=relaxed/simple;
+ bh=0eXJ5AIjzz1TBGZ8SlshIPrEHZaZwZfYEdof+dSpu4Y=;
+ h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:Cc;
+ b=EfFtruUxRIGy+jylEiJ2rPEyPCjGCc8ptT9FVxe6s0O/kW38Y6196xVQeiSV2tSKVCEOIO+9HoqmpgdKsJE7gU9++EcrasP96MYpsklYpc2zsWW3b8QEhfxfZ9Ai/idyYihE2u9dQ7a143P/Ij/twDrZTt24wO/mtHDrE5XcCFI=
+ARC-Authentication-Results: i=1; smtp.subspace.kernel.org;
+ dmarc=pass (p=none dis=none) header.from=linaro.org;
+ spf=pass smtp.mailfrom=linaro.org;
+ dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org
+ header.b=qX99TQMM; arc=none smtp.client-ip=209.85.208.179
+Authentication-Results: smtp.subspace.kernel.org;
+ dmarc=pass (p=none dis=none) header.from=linaro.org
+Authentication-Results: smtp.subspace.kernel.org;
+ spf=pass smtp.mailfrom=linaro.org
+Received: by mail-lj1-f179.google.com with SMTP id
+ 38308e7fff4ca-2dd041acff1so40839131fa.1
+ for <linux-gpio at vger.kernel.org>;
+ Tue, 23 Apr 2024 05:12:37 -0700 (PDT)
+DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
+ d=linaro.org; s=google; t=1713874356; x=1714479156;
+ darn=vger.kernel.org;
+ h=cc:to:message-id:content-transfer-encoding:mime-version:subject
+ :date:from:from:to:cc:subject:date:message-id:reply-to;
+ bh=vysJsMiH5IVqdTs4yMwZxZ7nUmt2aG7eBhkn8qm8hvI=;
+ b=qX99TQMMdHbskFYUaw8c93sIJsUhKmj/WPdyahHcupUhwn5wol4aVoPczkOKYwJZhE
+ eoInxzjAHIl3UNKyvPPrD4MrbLcSoFT6mTFMsgRQYUghsLattmGcqIebu9XT556dBhsf
+ DydmpqGgnTOIa+IEknFxg24mo8Xn2LVmDC7LSGEYykUy1xLHd1NSq56YEaYXC7641xeZ
+ 9TOL0rZszeGld5cCS3013EmEeXQGCC3lAP83Eb48vbFXjPojkN0s40rZ2s8YpVsGT0iP
+ LeLVtP/E8XJqi4YipKryKSgbgOvQ1Bclle5+s+2qcJQNnSEjekMwR59BIRs3OZH2SRfN
+ gQdQ==
+X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
+ d=1e100.net; s=20230601; t=1713874356; x=1714479156;
+ h=cc:to:message-id:content-transfer-encoding:mime-version:subject
+ :date:from:x-gm-message-state:from:to:cc:subject:date:message-id
+ :reply-to;
+ bh=vysJsMiH5IVqdTs4yMwZxZ7nUmt2aG7eBhkn8qm8hvI=;
+ b=jEBH4NQ7SzFi2tnb1lgL06IchnBJoscNgKesjlorvou6X/9wDE/VbgxNFKR0zWwdTk
+ BEjG/ifFJxLmM9jdaCKu5cJc4yiDNXp7yZd48D71V34zJ4aINAGAx4hcOKqf95neFknx
+ nsFPpBFnTYFEpCLF0TebVoL6h6ehPzSojmkArzsrMppNvW2cwJ5gDlkqy2y4SezLanmM
+ 6iU0ksnwE0bb2iLkahhgo00Ejt33yqxwa+3xBfhOe9oYKSSZYnY7qVq055SSwt9IAq+H
+ REGyJN+GrvupTHagiioYe3LPXDPdOui9ZixXXDllw1t1yGUy+TkJu8xSqtvHEfg81FHP
+ AxtA==
+X-Forwarded-Encrypted: i=1;
+ AJvYcCUbxzPklfPYrLgyY1I0ycuj7Dh04dcGVonYocA2mzxzlAEV107o0ELlFqr3O9Td+tV/t0eV9ly9YAbTY6n1XPnFXS5dsYYAZw6RHw==
+X-Gm-Message-State: AOJu0YxsC7zdakTzntbiRFnN2A7yTrR0x+IpR6ce6eGn5kHeqIBi1km+
+ zTVpRulbch3JsmzVDbCbbAAYoBkNgEA568YL6zdjVARnvFwNz1cqatOrR1AXUm0=
+X-Google-Smtp-Source:
+ AGHT+IHBRMGvaJM98f86Z6m/RfVhK2XejjNGF3EvcRq/4x3oGM0DKpd2PbeCJdgmzHjLPVVbdsNzJg==
+X-Received: by 2002:a2e:9852:0:b0:2d8:a98d:18e with SMTP id
+ e18-20020a2e9852000000b002d8a98d018emr7955886ljj.8.1713874355700;
+ Tue, 23 Apr 2024 05:12:35 -0700 (PDT)
+Received: from [192.168.1.140] ([85.235.12.238])
+ by smtp.gmail.com with ESMTPSA id
+ x6-20020a2e7c06000000b002da179d8d25sm1628982ljc.64.2024.04.23.05.12.33
+ (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
+ Tue, 23 Apr 2024 05:12:35 -0700 (PDT)
+From: Linus Walleij <linus.walleij at linaro.org>
+Date: Tue, 23 Apr 2024 14:12:33 +0200
+Subject: [PATCH v2] wifi: ath9k: Obtain system GPIOS from descriptors
+Precedence: bulk
+X-Mailing-List: linux-gpio at vger.kernel.org
+List-Id: <linux-gpio.vger.kernel.org>
+List-Subscribe: <mailto:linux-gpio+subscribe at vger.kernel.org>
+List-Unsubscribe: <mailto:linux-gpio+unsubscribe at vger.kernel.org>
+MIME-Version: 1.0
+Message-Id: <20240423-descriptors-wireless-v2-1-6d1d03b30bfa at linaro.org>
+X-B4-Tracking: v=1; b=H4sIALClJ2YC/22Nyw6CMBBFf4XM2hpanrLyPwyL0o4wCaFkxqCG9
+ N+txKXLc5Nz7g6CTCjQZTswbiQUlgTmlIGb7DKiIp8YTG7KXBujPIpjWh+BRT2JcUYRNbTeXir
+ v7FBUkNSV8U6vI3vrE08kSXgfL5v+rr9gof8HN61yhdo1rvJ125T1dabFcjgHHqGPMX4Ao4iiN
+ LkAAAA=
+To: Kalle Valo <kvalo at kernel.org>,
+ Andy Shevchenko <andriy.shevchenko at linux.intel.com>,
+ Arnd Bergmann <arnd at arndb.de>, Alban Bedel <albeu at free.fr>,
+ Bartosz Golaszewski <brgl at bgdev.pl>, =?utf-8?q?Toke_H=C3=B8iland-J=C3=B8rg?=
+ =?utf-8?q?ensen?= <toke at toke.dk>
+Cc: linux-wireless at vger.kernel.org, brcm80211-dev-list.pdl at broadcom.com,
+ linux-gpio at vger.kernel.org, Linus Walleij <linus.walleij at linaro.org>
+X-Mailer: b4 0.13.0
+
+The ath9k has an odd use of system-wide GPIOs: if the chip
+does not have internal GPIO capability, it will try to obtain a
+GPIO line from the system GPIO controller:
+
+ if (BIT(gpio) & ah->caps.gpio_mask)
+ ath9k_hw_gpio_cfg_wmac(...);
+ else if (AR_SREV_SOC(ah))
+ ath9k_hw_gpio_cfg_soc(ah, gpio, out, label);
+
+Where ath9k_hw_gpio_cfg_soc() will attempt to issue
+gpio_request_one() passing the local GPIO number of the controller
+(0..31) to gpio_request_one().
+
+This is somewhat peculiar and possibly even dangerous: there is
+nowadays no guarantee of the numbering of these system-wide
+GPIOs, and assuming that GPIO 0..31 as used by ath9k would
+correspond to GPIOs 0..31 on the system as a whole seems a bit
+wild.
+
+Register all 32 GPIOs at index 0..31 directly in the ATH79K
+GPIO driver and associate with WIFI if and only if we are probing
+ATH79K wifi from the AHB bus (used for SoCs).
+
+Signed-off-by: Linus Walleij <linus.walleij at linaro.org>
+---
+Changes in v2:
+- Define all the descriptors directly in the ATH79K
+ GPIO driver in case the driver want to request them directly.
+- Link to v1: https://lore.kernel.org/r/20240131-descriptors-wireless-v1-0-e1c7c5d68746@linaro.org
+---
+ drivers/gpio/gpio-ath79.c | 47 ++++++++++++++++++++++++++++++++++++-
+ drivers/net/wireless/ath/ath9k/hw.c | 29 ++++++++++++-----------
+ drivers/net/wireless/ath/ath9k/hw.h | 3 ++-
+ 3 files changed, 63 insertions(+), 16 deletions(-)
+
+
+---
+base-commit: 4cece764965020c22cff7665b18a012006359095
+change-id: 20240122-descriptors-wireless-b8da95dcab35
+
+Best regards,
+
+--- a/drivers/gpio/gpio-ath79.c
++++ b/drivers/gpio/gpio-ath79.c
+@@ -9,6 +9,7 @@
+ */
+
+ #include <linux/gpio/driver.h>
++#include <linux/gpio/machine.h> /* For WLAN GPIOs */
+ #include <linux/platform_device.h>
+ #include <linux/platform_data/gpio-ath79.h>
+ #include <linux/of.h>
+@@ -222,6 +223,37 @@ static const struct of_device_id ath79_g
+ };
+ MODULE_DEVICE_TABLE(of, ath79_gpio_of_match);
+
++/*
++ * This registers all of the ath79k GPIOs as descriptors to be picked
++ * directly from the ATH79K wifi driver if the two are jitted together
++ * in the same SoC.
++ */
++#define ATH79K_WIFI_DESCS 32
++static int ath79_gpio_register_wifi_descriptors(struct device *dev,
++ const char *label)
++{
++ struct gpiod_lookup_table *lookup;
++ int i;
++
++ /* Create a gpiod lookup using gpiochip-local offsets + 1 for NULL */
++ lookup = devm_kzalloc(dev,
++ struct_size(lookup, table, ATH79K_WIFI_DESCS + 1),
++ GFP_KERNEL);
++
++ if (!lookup)
++ return -ENOMEM;
++
++ for (i = 0; i < ATH79K_WIFI_DESCS; i++) {
++ lookup->table[i] = (struct gpiod_lookup)
++ GPIO_LOOKUP_IDX(label, i, "ath9k", i,
++ GPIO_ACTIVE_HIGH);
++ }
++
++ gpiod_add_lookup_table(lookup);
++
++ return 0;
++}
++
+ static int ath79_gpio_probe(struct platform_device *pdev)
+ {
+ struct ath79_gpio_platform_data *pdata = dev_get_platdata(&pdev->dev);
+@@ -289,7 +321,11 @@ static int ath79_gpio_probe(struct platf
+ girq->handler = handle_simple_irq;
+ }
+
+- return devm_gpiochip_add_data(dev, &ctrl->gc, ctrl);
++ err = devm_gpiochip_add_data(dev, &ctrl->gc, ctrl);
++ if (err)
++ return err;
++
++ return ath79_gpio_register_wifi_descriptors(dev, ctrl->gc.label);
+ }
+
+ static struct platform_driver ath79_gpio_driver = {
More information about the lede-commits
mailing list