Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

clk: actions: Add NIC and ETHERNET clock support for Actions S500 SoC

Add support for the missing NIC and ETHERNET clocks in the Actions Semi
Owl S500 SoC clock driver.

Additionally, change APB clock parent from AHB to the newly added NIC.

Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@gmail.com>
Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Link: https://lore.kernel.org/r/d62e4f1f85c5cef05be14d9e8143e88bbddd2e0f.1623354574.git.cristian.ciocaltea@gmail.com
Signed-off-by: Stephen Boyd <sboyd@kernel.org>

authored by

Cristian Ciocaltea and committed by
Stephen Boyd
db01868f a4acefd8

+16 -1
+16 -1
drivers/clk/actions/owl-s500.c
··· 113 113 static const char * const sd_clk_mux_p[] = { "dev_clk", "nand_pll_clk" }; 114 114 static const char * const pwm_clk_mux_p[] = { "losc", "hosc" }; 115 115 static const char * const ahbprediv_clk_mux_p[] = { "dev_clk", "display_pll_clk", "nand_pll_clk", "ddr_pll_clk" }; 116 + static const char * const nic_clk_mux_p[] = { "dev_clk", "display_pll_clk", "nand_pll_clk", "ddr_pll_clk" }; 116 117 static const char * const uart_clk_mux_p[] = { "hosc", "dev_pll_clk" }; 117 118 static const char * const de_clk_mux_p[] = { "display_pll_clk", "dev_clk" }; 118 119 static const char * const i2s_clk_mux_p[] = { "audio_pll_clk" }; ··· 195 194 196 195 /* divider clocks */ 197 196 static OWL_DIVIDER(h_clk, "h_clk", "ahbprediv_clk", CMU_BUSCLK1, 2, 2, NULL, 0, 0); 198 - static OWL_DIVIDER(apb_clk, "apb_clk", "ahb_clk", CMU_BUSCLK1, 14, 2, NULL, 0, 0); 197 + static OWL_DIVIDER(apb_clk, "apb_clk", "nic_clk", CMU_BUSCLK1, 14, 2, NULL, 0, 0); 199 198 static OWL_DIVIDER(rmii_ref_clk, "rmii_ref_clk", "ethernet_pll_clk", CMU_ETHERNETPLL, 1, 1, rmii_ref_div_table, 0, 0); 200 199 201 200 /* factor clocks */ ··· 203 202 static OWL_FACTOR(de2_clk, "de_clk2", "de_clk", CMU_DECLK, 4, 4, de_factor_table, 0, 0); 204 203 205 204 /* composite clocks */ 205 + static OWL_COMP_DIV(nic_clk, "nic_clk", nic_clk_mux_p, 206 + OWL_MUX_HW(CMU_BUSCLK1, 4, 3), 207 + { 0 }, 208 + OWL_DIVIDER_HW(CMU_BUSCLK1, 16, 2, 0, NULL), 209 + 0); 210 + 206 211 static OWL_COMP_DIV(ahbprediv_clk, "ahbprediv_clk", ahbprediv_clk_mux_p, 207 212 OWL_MUX_HW(CMU_BUSCLK1, 8, 3), 208 213 { 0 }, ··· 323 316 static OWL_COMP_FIXED_FACTOR(i2c3_clk, "i2c3_clk", "ethernet_pll_clk", 324 317 OWL_GATE_HW(CMU_DEVCLKEN1, 31, 0), 325 318 1, 5, 0); 319 + 320 + static OWL_COMP_FIXED_FACTOR(ethernet_clk, "ethernet_clk", "ethernet_pll_clk", 321 + OWL_GATE_HW(CMU_DEVCLKEN1, 22, 0), 322 + 1, 20, 0); 326 323 327 324 static OWL_COMP_DIV(uart0_clk, "uart0_clk", uart_clk_mux_p, 328 325 OWL_MUX_HW(CMU_UART0CLK, 16, 1), ··· 462 451 &apb_clk.common, 463 452 &dmac_clk.common, 464 453 &gpio_clk.common, 454 + &nic_clk.common, 455 + &ethernet_clk.common, 465 456 }; 466 457 467 458 static struct clk_hw_onecell_data s500_hw_clks = { ··· 523 510 [CLK_APB] = &apb_clk.common.hw, 524 511 [CLK_DMAC] = &dmac_clk.common.hw, 525 512 [CLK_GPIO] = &gpio_clk.common.hw, 513 + [CLK_NIC] = &nic_clk.common.hw, 514 + [CLK_ETHERNET] = &ethernet_clk.common.hw, 526 515 }, 527 516 .num = CLK_NR_CLKS, 528 517 };