123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- From f778553f296792f4d1e8b3552603ad6116ea3eb3 Mon Sep 17 00:00:00 2001
- From: Christian Marangi <[email protected]>
- 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 <[email protected]> # ipq8074 Qnap QHora-301W
- Signed-off-by: Christian Marangi <[email protected]>
- ---
- 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
- @@ -1677,13 +1677,21 @@ static struct clk_regmap_div nss_port4_t
- },
- };
-
- +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),
- { }
- @@ -1739,13 +1747,21 @@ static struct clk_regmap_div nss_port5_r
- },
- };
-
- +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),
- { }
- @@ -1801,13 +1817,21 @@ static struct clk_regmap_div nss_port5_t
- },
- };
-
- +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),
- { }
- @@ -1858,13 +1882,21 @@ static struct clk_regmap_div nss_port6_r
- },
- };
-
- +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),
- { }
|