aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/qca-ssdk/patches/0006-qca8081-convert-to-5.11-IRQ-model.patch
diff options
context:
space:
mode:
authorRobert Marko <robimarko@gmail.com>2022-08-20 12:30:50 +0200
committerRobert Marko <robimarko@gmail.com>2023-01-16 12:42:23 +0100
commitc608f7032576296943f6d0914f226ebcfa1cbe4f (patch)
treef0c047d6ab1233d3515c14e8b88accd548bd701e /package/kernel/qca-ssdk/patches/0006-qca8081-convert-to-5.11-IRQ-model.patch
parentd092dee9edf2b0703a12258c88d2e3dbc09c9f2a (diff)
downloadupstream-c608f7032576296943f6d0914f226ebcfa1cbe4f.tar.gz
upstream-c608f7032576296943f6d0914f226ebcfa1cbe4f.tar.bz2
upstream-c608f7032576296943f6d0914f226ebcfa1cbe4f.zip
kernel: add Qualcomm SSDK driver
Qualcomm SSDK is driver for Qualcomm Atheros switches and PHY-s. It is quite complicated and used by rest of the Qualcomm SDK stack for anything switch or PHY related. It is required for IPQ807x support as currently, there is no better driver for the built-in switch or UNIPHY. So, lets add the fixed-up version that supports kernel 5.15 for use on ipq807x target until a better driver is available. Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com> Signed-off-by: Robert Marko <robimarko@gmail.com>
Diffstat (limited to 'package/kernel/qca-ssdk/patches/0006-qca8081-convert-to-5.11-IRQ-model.patch')
-rw-r--r--package/kernel/qca-ssdk/patches/0006-qca8081-convert-to-5.11-IRQ-model.patch83
1 files changed, 83 insertions, 0 deletions
diff --git a/package/kernel/qca-ssdk/patches/0006-qca8081-convert-to-5.11-IRQ-model.patch b/package/kernel/qca-ssdk/patches/0006-qca8081-convert-to-5.11-IRQ-model.patch
new file mode 100644
index 0000000000..4eb7483d2b
--- /dev/null
+++ b/package/kernel/qca-ssdk/patches/0006-qca8081-convert-to-5.11-IRQ-model.patch
@@ -0,0 +1,83 @@
+From 9278b2794d984f5a8ec2350b9607a35aea2cc106 Mon Sep 17 00:00:00 2001
+From: Robert Marko <robimarko@gmail.com>
+Date: Fri, 24 Dec 2021 20:02:32 +0100
+Subject: [PATCH 06/11] qca8081: convert to 5.11 IRQ model
+
+Kernel 5.11 introduced new IRQ handling model for PHY-s,
+so provide those if 5.11 or later is used.
+
+Signed-off-by: Robert Marko <robimarko@gmail.com>
+---
+ src/hsl/phy/qca808x.c | 46 +++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 46 insertions(+)
+
+--- a/src/hsl/phy/qca808x.c
++++ b/src/hsl/phy/qca808x.c
+@@ -247,6 +247,7 @@ static int qca808x_config_intr(struct ph
+ return err;
+ }
+
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 11, 0))
+ static int qca808x_ack_interrupt(struct phy_device *phydev)
+ {
+ int err;
+@@ -266,6 +267,47 @@ static int qca808x_ack_interrupt(struct
+
+ return (err < 0) ? err : 0;
+ }
++#endif
++
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(5, 11, 0))
++static irqreturn_t qca808x_handle_interrupt(struct phy_device *phydev)
++{
++ a_uint16_t irq_status, int_enabled;
++ a_uint32_t dev_id = 0, phy_id = 0;
++ qca808x_priv *priv = phydev->priv;
++ const struct qca808x_phy_info *pdata = priv->phy_info;
++
++ if (!pdata) {
++ return SW_FAIL;
++ }
++
++ dev_id = pdata->dev_id;
++ phy_id = pdata->phy_addr;
++
++ irq_status = qca808x_phy_reg_read(dev_id, phy_id,
++ QCA808X_PHY_INTR_STATUS);
++ if (irq_status < 0) {
++ phy_error(phydev);
++ return IRQ_NONE;
++ }
++
++ /* Read the current enabled interrupts */
++ int_enabled = qca808x_phy_reg_read(dev_id, phy_id,
++ QCA808X_PHY_INTR_MASK);
++ if (int_enabled < 0) {
++ phy_error(phydev);
++ return IRQ_NONE;
++ }
++
++ /* See if this was one of our enabled interrupts */
++ if (!(irq_status & int_enabled))
++ return IRQ_NONE;
++
++ phy_trigger_machine(phydev);
++
++ return IRQ_HANDLED;
++}
++#endif
+
+ /* switch linux negtiation capability to fal avariable */
+ #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 0, 0))
+@@ -638,7 +680,11 @@ struct phy_driver qca808x_phy_driver = {
+ .config_intr = qca808x_config_intr,
+ .config_aneg = qca808x_config_aneg,
+ .aneg_done = qca808x_aneg_done,
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 11, 0))
+ .ack_interrupt = qca808x_ack_interrupt,
++#else
++ .handle_interrupt = qca808x_handle_interrupt,
++#endif
+ .read_status = qca808x_read_status,
+ .suspend = qca808x_suspend,
+ .resume = qca808x_resume,