|
|
@@ -1,227 +0,0 @@
|
|
|
-From e88f03230dc07aa3293b6aeb078bd27370bb2594 Mon Sep 17 00:00:00 2001
|
|
|
-From: Christian Marangi <[email protected]>
|
|
|
-Date: Wed, 20 Dec 2023 23:17:24 +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.
|
|
|
-
|
|
|
-Signed-off-by: Christian Marangi <[email protected]>
|
|
|
-Acked-by: Stephen Boyd <[email protected]>
|
|
|
-Link: https://lore.kernel.org/r/[email protected]
|
|
|
-Signed-off-by: Bjorn Andersson <[email protected]>
|
|
|
----
|
|
|
- drivers/clk/qcom/gcc-ipq8074.c | 120 +++++++++++++++++++++------------
|
|
|
- 1 file changed, 76 insertions(+), 44 deletions(-)
|
|
|
-
|
|
|
---- a/drivers/clk/qcom/gcc-ipq8074.c
|
|
|
-+++ b/drivers/clk/qcom/gcc-ipq8074.c
|
|
|
-@@ -1677,15 +1677,23 @@ static struct clk_regmap_div nss_port4_t
|
|
|
- },
|
|
|
- };
|
|
|
-
|
|
|
--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),
|
|
|
-- 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),
|
|
|
-- F(156250000, P_UNIPHY1_RX, 2, 0, 0),
|
|
|
-- F(312500000, P_UNIPHY1_RX, 1, 0, 0),
|
|
|
-+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_multi_tbl ftbl_nss_port5_rx_clk_src[] = {
|
|
|
-+ FMS(19200000, P_XO, 1, 0, 0),
|
|
|
-+ FM(25000000, ftbl_nss_port5_rx_clk_src_25),
|
|
|
-+ FMS(78125000, P_UNIPHY1_RX, 4, 0, 0),
|
|
|
-+ FM(125000000, ftbl_nss_port5_rx_clk_src_125),
|
|
|
-+ FMS(156250000, P_UNIPHY1_RX, 2, 0, 0),
|
|
|
-+ FMS(312500000, P_UNIPHY1_RX, 1, 0, 0),
|
|
|
- { }
|
|
|
- };
|
|
|
-
|
|
|
-@@ -1712,14 +1720,14 @@ gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32
|
|
|
-
|
|
|
- static struct clk_rcg2 nss_port5_rx_clk_src = {
|
|
|
- .cmd_rcgr = 0x68060,
|
|
|
-- .freq_tbl = ftbl_nss_port5_rx_clk_src,
|
|
|
-+ .freq_multi_tbl = ftbl_nss_port5_rx_clk_src,
|
|
|
- .hid_width = 5,
|
|
|
- .parent_map = gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias_map,
|
|
|
- .clkr.hw.init = &(struct clk_init_data){
|
|
|
- .name = "nss_port5_rx_clk_src",
|
|
|
- .parent_data = gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias,
|
|
|
- .num_parents = ARRAY_SIZE(gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias),
|
|
|
-- .ops = &clk_rcg2_ops,
|
|
|
-+ .ops = &clk_rcg2_fm_ops,
|
|
|
- },
|
|
|
- };
|
|
|
-
|
|
|
-@@ -1739,15 +1747,23 @@ static struct clk_regmap_div nss_port5_r
|
|
|
- },
|
|
|
- };
|
|
|
-
|
|
|
--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),
|
|
|
-- 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),
|
|
|
-- F(156250000, P_UNIPHY1_TX, 2, 0, 0),
|
|
|
-- F(312500000, P_UNIPHY1_TX, 1, 0, 0),
|
|
|
-+static const 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 const 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_multi_tbl ftbl_nss_port5_tx_clk_src[] = {
|
|
|
-+ FMS(19200000, P_XO, 1, 0, 0),
|
|
|
-+ FM(25000000, ftbl_nss_port5_tx_clk_src_25),
|
|
|
-+ FMS(78125000, P_UNIPHY1_TX, 4, 0, 0),
|
|
|
-+ FM(125000000, ftbl_nss_port5_tx_clk_src_125),
|
|
|
-+ FMS(156250000, P_UNIPHY1_TX, 2, 0, 0),
|
|
|
-+ FMS(312500000, P_UNIPHY1_TX, 1, 0, 0),
|
|
|
- { }
|
|
|
- };
|
|
|
-
|
|
|
-@@ -1774,14 +1790,14 @@ gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32
|
|
|
-
|
|
|
- static struct clk_rcg2 nss_port5_tx_clk_src = {
|
|
|
- .cmd_rcgr = 0x68068,
|
|
|
-- .freq_tbl = ftbl_nss_port5_tx_clk_src,
|
|
|
-+ .freq_multi_tbl = ftbl_nss_port5_tx_clk_src,
|
|
|
- .hid_width = 5,
|
|
|
- .parent_map = gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias_map,
|
|
|
- .clkr.hw.init = &(struct clk_init_data){
|
|
|
- .name = "nss_port5_tx_clk_src",
|
|
|
- .parent_data = gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias,
|
|
|
- .num_parents = ARRAY_SIZE(gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias),
|
|
|
-- .ops = &clk_rcg2_ops,
|
|
|
-+ .ops = &clk_rcg2_fm_ops,
|
|
|
- },
|
|
|
- };
|
|
|
-
|
|
|
-@@ -1801,15 +1817,23 @@ static struct clk_regmap_div nss_port5_t
|
|
|
- },
|
|
|
- };
|
|
|
-
|
|
|
--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),
|
|
|
-- 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),
|
|
|
-- F(156250000, P_UNIPHY2_RX, 2, 0, 0),
|
|
|
-- F(312500000, P_UNIPHY2_RX, 1, 0, 0),
|
|
|
-+static const 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 const 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_multi_tbl ftbl_nss_port6_rx_clk_src[] = {
|
|
|
-+ FMS(19200000, P_XO, 1, 0, 0),
|
|
|
-+ FM(25000000, ftbl_nss_port6_rx_clk_src_25),
|
|
|
-+ FMS(78125000, P_UNIPHY2_RX, 4, 0, 0),
|
|
|
-+ FM(125000000, ftbl_nss_port6_rx_clk_src_125),
|
|
|
-+ FMS(156250000, P_UNIPHY2_RX, 2, 0, 0),
|
|
|
-+ FMS(312500000, P_UNIPHY2_RX, 1, 0, 0),
|
|
|
- { }
|
|
|
- };
|
|
|
-
|
|
|
-@@ -1831,14 +1855,14 @@ static const struct parent_map gcc_xo_un
|
|
|
-
|
|
|
- static struct clk_rcg2 nss_port6_rx_clk_src = {
|
|
|
- .cmd_rcgr = 0x68070,
|
|
|
-- .freq_tbl = ftbl_nss_port6_rx_clk_src,
|
|
|
-+ .freq_multi_tbl = ftbl_nss_port6_rx_clk_src,
|
|
|
- .hid_width = 5,
|
|
|
- .parent_map = gcc_xo_uniphy2_rx_tx_ubi32_bias_map,
|
|
|
- .clkr.hw.init = &(struct clk_init_data){
|
|
|
- .name = "nss_port6_rx_clk_src",
|
|
|
- .parent_data = gcc_xo_uniphy2_rx_tx_ubi32_bias,
|
|
|
- .num_parents = ARRAY_SIZE(gcc_xo_uniphy2_rx_tx_ubi32_bias),
|
|
|
-- .ops = &clk_rcg2_ops,
|
|
|
-+ .ops = &clk_rcg2_fm_ops,
|
|
|
- },
|
|
|
- };
|
|
|
-
|
|
|
-@@ -1858,15 +1882,23 @@ static struct clk_regmap_div nss_port6_r
|
|
|
- },
|
|
|
- };
|
|
|
-
|
|
|
--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),
|
|
|
-- 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),
|
|
|
-- F(156250000, P_UNIPHY2_TX, 2, 0, 0),
|
|
|
-- F(312500000, P_UNIPHY2_TX, 1, 0, 0),
|
|
|
-+static const 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 const 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_multi_tbl ftbl_nss_port6_tx_clk_src[] = {
|
|
|
-+ FMS(19200000, P_XO, 1, 0, 0),
|
|
|
-+ FM(25000000, ftbl_nss_port6_tx_clk_src_25),
|
|
|
-+ FMS(78125000, P_UNIPHY1_RX, 4, 0, 0),
|
|
|
-+ FM(125000000, ftbl_nss_port6_tx_clk_src_125),
|
|
|
-+ FMS(156250000, P_UNIPHY1_RX, 2, 0, 0),
|
|
|
-+ FMS(312500000, P_UNIPHY1_RX, 1, 0, 0),
|
|
|
- { }
|
|
|
- };
|
|
|
-
|
|
|
-@@ -1888,14 +1920,14 @@ static const struct parent_map gcc_xo_un
|
|
|
-
|
|
|
- static struct clk_rcg2 nss_port6_tx_clk_src = {
|
|
|
- .cmd_rcgr = 0x68078,
|
|
|
-- .freq_tbl = ftbl_nss_port6_tx_clk_src,
|
|
|
-+ .freq_multi_tbl = ftbl_nss_port6_tx_clk_src,
|
|
|
- .hid_width = 5,
|
|
|
- .parent_map = gcc_xo_uniphy2_tx_rx_ubi32_bias_map,
|
|
|
- .clkr.hw.init = &(struct clk_init_data){
|
|
|
- .name = "nss_port6_tx_clk_src",
|
|
|
- .parent_data = gcc_xo_uniphy2_tx_rx_ubi32_bias,
|
|
|
- .num_parents = ARRAY_SIZE(gcc_xo_uniphy2_tx_rx_ubi32_bias),
|
|
|
-- .ops = &clk_rcg2_ops,
|
|
|
-+ .ops = &clk_rcg2_fm_ops,
|
|
|
- },
|
|
|
- };
|
|
|
-
|