2023-05-22 21:13:08 +00:00
|
|
|
From f778553f296792f4d1e8b3552603ad6116ea3eb3 Mon Sep 17 00:00:00 2001
|
|
|
|
From: Christian Marangi <ansuelsmth@gmail.com>
|
|
|
|
Date: Thu, 3 Nov 2022 14:49:44 +0100
|
|
|
|
Subject: [PATCH] clk: qcom: gcc-ipq8074: rework nss_port5/6 clock to multiple
|
|
|
|
conf
|
|
|
|
|
|
|
|
Rework nss_port5/6 to use the new multiple configuration implementation
|
|
|
|
and correctly fix the clocks for these port under some corner case.
|
|
|
|
|
|
|
|
This is particularly relevant for device that have 2.5G or 10G port
|
|
|
|
connected to port5 or port 6 on ipq8074. As the parent are shared
|
|
|
|
across multiple port it may be required to select the correct
|
|
|
|
configuration to accomplish the desired clock. Without this patch such
|
|
|
|
port doesn't work in some specific ethernet speed as the clock will be
|
|
|
|
set to the wrong frequency as we just select the first configuration for
|
|
|
|
the related frequency instead of selecting the best one.
|
|
|
|
|
|
|
|
Tested-by: Robert Marko <robimarko@gmail.com> # ipq8074 Qnap QHora-301W
|
|
|
|
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
|
|
|
---
|
|
|
|
drivers/clk/qcom/gcc-ipq8074.c | 64 +++++++++++++++++++++++++---------
|
|
|
|
1 file changed, 48 insertions(+), 16 deletions(-)
|
|
|
|
|
|
|
|
--- a/drivers/clk/qcom/gcc-ipq8074.c
|
|
|
|
+++ b/drivers/clk/qcom/gcc-ipq8074.c
|
2024-04-03 19:06:44 +00:00
|
|
|
@@ -1677,13 +1677,21 @@ static struct clk_regmap_div nss_port4_t
|
2023-05-22 21:13:08 +00:00
|
|
|
},
|
|
|
|
};
|
|
|
|
|
|
|
|
+static const struct freq_conf ftbl_nss_port5_rx_clk_src_25[] = {
|
|
|
|
+ C(P_UNIPHY1_RX, 12.5, 0, 0),
|
|
|
|
+ C(P_UNIPHY0_RX, 5, 0, 0),
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static const struct freq_conf ftbl_nss_port5_rx_clk_src_125[] = {
|
|
|
|
+ C(P_UNIPHY1_RX, 2.5, 0, 0),
|
|
|
|
+ C(P_UNIPHY0_RX, 1, 0, 0),
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
static const struct freq_tbl ftbl_nss_port5_rx_clk_src[] = {
|
|
|
|
F(19200000, P_XO, 1, 0, 0),
|
|
|
|
- F(25000000, P_UNIPHY1_RX, 12.5, 0, 0),
|
|
|
|
- F(25000000, P_UNIPHY0_RX, 5, 0, 0),
|
|
|
|
+ FM(25000000, ftbl_nss_port5_rx_clk_src_25),
|
|
|
|
F(78125000, P_UNIPHY1_RX, 4, 0, 0),
|
|
|
|
- F(125000000, P_UNIPHY1_RX, 2.5, 0, 0),
|
|
|
|
- F(125000000, P_UNIPHY0_RX, 1, 0, 0),
|
|
|
|
+ FM(125000000, ftbl_nss_port5_rx_clk_src_125),
|
|
|
|
F(156250000, P_UNIPHY1_RX, 2, 0, 0),
|
|
|
|
F(312500000, P_UNIPHY1_RX, 1, 0, 0),
|
|
|
|
{ }
|
2024-04-03 19:06:44 +00:00
|
|
|
@@ -1739,13 +1747,21 @@ static struct clk_regmap_div nss_port5_r
|
2023-05-22 21:13:08 +00:00
|
|
|
},
|
|
|
|
};
|
|
|
|
|
|
|
|
+static struct freq_conf ftbl_nss_port5_tx_clk_src_25[] = {
|
|
|
|
+ C(P_UNIPHY1_TX, 12.5, 0, 0),
|
|
|
|
+ C(P_UNIPHY0_TX, 5, 0, 0),
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct freq_conf ftbl_nss_port5_tx_clk_src_125[] = {
|
|
|
|
+ C(P_UNIPHY1_TX, 2.5, 0, 0),
|
|
|
|
+ C(P_UNIPHY0_TX, 1, 0, 0),
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
static const struct freq_tbl ftbl_nss_port5_tx_clk_src[] = {
|
|
|
|
F(19200000, P_XO, 1, 0, 0),
|
|
|
|
- F(25000000, P_UNIPHY1_TX, 12.5, 0, 0),
|
|
|
|
- F(25000000, P_UNIPHY0_TX, 5, 0, 0),
|
|
|
|
+ FM(25000000, ftbl_nss_port5_tx_clk_src_25),
|
|
|
|
F(78125000, P_UNIPHY1_TX, 4, 0, 0),
|
|
|
|
- F(125000000, P_UNIPHY1_TX, 2.5, 0, 0),
|
|
|
|
- F(125000000, P_UNIPHY0_TX, 1, 0, 0),
|
|
|
|
+ FM(125000000, ftbl_nss_port5_tx_clk_src_125),
|
|
|
|
F(156250000, P_UNIPHY1_TX, 2, 0, 0),
|
|
|
|
F(312500000, P_UNIPHY1_TX, 1, 0, 0),
|
|
|
|
{ }
|
2024-04-03 19:06:44 +00:00
|
|
|
@@ -1801,13 +1817,21 @@ static struct clk_regmap_div nss_port5_t
|
2023-05-22 21:13:08 +00:00
|
|
|
},
|
|
|
|
};
|
|
|
|
|
|
|
|
+static struct freq_conf ftbl_nss_port6_rx_clk_src_25[] = {
|
|
|
|
+ C(P_UNIPHY2_RX, 5, 0, 0),
|
|
|
|
+ C(P_UNIPHY2_RX, 12.5, 0, 0),
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct freq_conf ftbl_nss_port6_rx_clk_src_125[] = {
|
|
|
|
+ C(P_UNIPHY2_RX, 1, 0, 0),
|
|
|
|
+ C(P_UNIPHY2_RX, 2.5, 0, 0),
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
static const struct freq_tbl ftbl_nss_port6_rx_clk_src[] = {
|
|
|
|
F(19200000, P_XO, 1, 0, 0),
|
|
|
|
- F(25000000, P_UNIPHY2_RX, 5, 0, 0),
|
|
|
|
- F(25000000, P_UNIPHY2_RX, 12.5, 0, 0),
|
|
|
|
+ FM(25000000, ftbl_nss_port6_rx_clk_src_25),
|
|
|
|
F(78125000, P_UNIPHY2_RX, 4, 0, 0),
|
|
|
|
- F(125000000, P_UNIPHY2_RX, 1, 0, 0),
|
|
|
|
- F(125000000, P_UNIPHY2_RX, 2.5, 0, 0),
|
|
|
|
+ FM(125000000, ftbl_nss_port6_rx_clk_src_125),
|
|
|
|
F(156250000, P_UNIPHY2_RX, 2, 0, 0),
|
|
|
|
F(312500000, P_UNIPHY2_RX, 1, 0, 0),
|
|
|
|
{ }
|
2024-04-03 19:06:44 +00:00
|
|
|
@@ -1858,13 +1882,21 @@ static struct clk_regmap_div nss_port6_r
|
2023-05-22 21:13:08 +00:00
|
|
|
},
|
|
|
|
};
|
|
|
|
|
|
|
|
+static struct freq_conf ftbl_nss_port6_tx_clk_src_25[] = {
|
|
|
|
+ C(P_UNIPHY2_TX, 5, 0, 0),
|
|
|
|
+ C(P_UNIPHY2_TX, 12.5, 0, 0),
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct freq_conf ftbl_nss_port6_tx_clk_src_125[] = {
|
|
|
|
+ C(P_UNIPHY2_TX, 1, 0, 0),
|
|
|
|
+ C(P_UNIPHY2_TX, 2.5, 0, 0),
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
static const struct freq_tbl ftbl_nss_port6_tx_clk_src[] = {
|
|
|
|
F(19200000, P_XO, 1, 0, 0),
|
|
|
|
- F(25000000, P_UNIPHY2_TX, 5, 0, 0),
|
|
|
|
- F(25000000, P_UNIPHY2_TX, 12.5, 0, 0),
|
|
|
|
+ FM(25000000, ftbl_nss_port6_tx_clk_src_25),
|
|
|
|
F(78125000, P_UNIPHY2_TX, 4, 0, 0),
|
|
|
|
- F(125000000, P_UNIPHY2_TX, 1, 0, 0),
|
|
|
|
- F(125000000, P_UNIPHY2_TX, 2.5, 0, 0),
|
|
|
|
+ FM(125000000, ftbl_nss_port6_tx_clk_src_125),
|
|
|
|
F(156250000, P_UNIPHY2_TX, 2, 0, 0),
|
|
|
|
F(312500000, P_UNIPHY2_TX, 1, 0, 0),
|
|
|
|
{ }
|