Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/Documentation/devicetree/bindings/clock/amlogic,meson8b-clkc.txt b/Documentation/devicetree/bindings/clock/amlogic,meson8b-clkc.txt
- index cc51e4746b3b..a2602b5d5378 100644
- --- a/Documentation/devicetree/bindings/clock/amlogic,meson8b-clkc.txt
- +++ b/Documentation/devicetree/bindings/clock/amlogic,meson8b-clkc.txt
- @@ -16,6 +16,8 @@ Required Properties:
- * "xtal": the 24MHz system oscillator
- * "ddr_pll": the DDR PLL clock
- * "clk_32k": (if present) the 32kHz clock signal from GPIOAO_6 (CLK_32K_IN)
- + * "rmii_clk": (if present) the 50MHz RMII reference clock (from the PHY or
- + an external oscillator
- Parent node should have the following properties :
- - compatible: "amlogic,meson-hhi-sysctrl", "simple-mfd", "syscon"
- diff --git a/arch/arm/boot/dts/meson8.dtsi b/arch/arm/boot/dts/meson8.dtsi
- index 7d41cf291f40..93d4150ee3e3 100644
- --- a/arch/arm/boot/dts/meson8.dtsi
- +++ b/arch/arm/boot/dts/meson8.dtsi
- @@ -823,8 +823,8 @@ cvbs_trimming: calib@1f8 {
- };
- ðmac {
- - clocks = <&clkc CLKID_ETH>;
- - clock-names = "stmmaceth";
- + clocks = <&clkc CLKID_ETH>, <&clkc CLKID_ETH_CLK>;
- + clock-names = "stmmaceth", "clkin0";
- power-domains = <&pwrc PWRC_MESON8_ETHERNET_MEM_ID>;
- };
- diff --git a/drivers/clk/meson/meson8b.c b/drivers/clk/meson/meson8b.c
- index 0f7993a1b515..f664f6fd25cc 100644
- --- a/drivers/clk/meson/meson8b.c
- +++ b/drivers/clk/meson/meson8b.c
- @@ -2639,6 +2639,101 @@ static struct clk_regmap meson8b_cts_i958 = {
- },
- };
- +static u32 meson8_eth_clk_mux_table[] = { 7 };
- +
- +static struct clk_regmap meson8_eth_clk_sel = {
- + .data = &(struct clk_regmap_mux_data){
- + .offset = HHI_ETH_CLK_CNTL,
- + .mask = 0x7,
- + .shift = 9,
- + .table = meson8_eth_clk_mux_table,
- + },
- + .hw.init = &(struct clk_init_data) {
- + .name = "eth_clk_sel",
- + .ops = &clk_regmap_mux_ops,
- + .parent_data = &(const struct clk_parent_data) {
- + /* TODO: all other parents are unknown */
- + .fw_name = "rmii_clk",
- + },
- + .num_parents = 1,
- + },
- +};
- +
- +static struct clk_regmap meson8_eth_clk_div = {
- + .data = &(struct clk_regmap_div_data){
- + .offset = HHI_ETH_CLK_CNTL,
- + .shift = 0,
- + .width = 8,
- + },
- + .hw.init = &(struct clk_init_data) {
- + .name = "eth_clk_div",
- + .ops = &clk_regmap_divider_ops,
- + .parent_hws = (const struct clk_hw *[]) {
- + &meson8_eth_clk_sel.hw
- + },
- + .num_parents = 1,
- + .flags = CLK_SET_RATE_PARENT,
- + },
- +};
- +
- +static int meson8_eth_clk_get_phase(struct clk_hw *hw)
- +{
- + struct clk_regmap *clk = to_clk_regmap(hw);
- + unsigned int val;
- +
- + regmap_read(clk->map, HHI_ETH_CLK_CNTL, &val);
- +
- + return (val & BIT(14)) ? 180 : 0;
- +}
- +
- +static int meson8_eth_clk_set_phase(struct clk_hw *hw, int degrees)
- +{
- + struct clk_regmap *clk = to_clk_regmap(hw);
- + u32 set;
- +
- + if (degrees == 180)
- + set = BIT(14);
- + else if (degrees == 0)
- + set = 0;
- + else
- + return -EINVAL;
- +
- + return regmap_update_bits(clk->map, HHI_ETH_CLK_CNTL, BIT(14), set);
- +}
- +
- +const struct clk_ops meson8_eth_clk_phase_ops = {
- + .get_phase = meson8_eth_clk_get_phase,
- + .set_phase = meson8_eth_clk_set_phase,
- +};
- +
- +static struct clk_regmap meson8_eth_clk_phase = {
- + .hw.init = &(struct clk_init_data){
- + .name = "eth_clk_inverted",
- + .ops = &meson8_eth_clk_phase_ops,
- + .parent_hws = (const struct clk_hw *[]) {
- + &meson8_eth_clk_div.hw
- + },
- + .num_parents = 1,
- + .flags = CLK_SET_RATE_PARENT,
- + },
- +};
- +
- +static struct clk_regmap meson8_eth_clk_gate = {
- + .data = &(struct clk_regmap_gate_data){
- + .offset = HHI_ETH_CLK_CNTL,
- + .bit_idx = 8,
- + },
- + .hw.init = &(struct clk_init_data){
- + .name = "eth_clk_en",
- + .ops = &clk_regmap_gate_ops,
- + .parent_hws = (const struct clk_hw *[]) {
- + &meson8_eth_clk_phase.hw
- + },
- + .num_parents = 1,
- + .flags = CLK_SET_RATE_PARENT,
- + },
- +};
- +
- #define MESON_GATE(_name, _reg, _bit) \
- MESON_PCLK(_name, _reg, _bit, &meson8b_clk81.hw)
- @@ -2933,6 +3028,10 @@ static struct clk_hw_onecell_data meson8_hw_onecell_data = {
- [CLKID_CTS_MCLK_I958_DIV] = &meson8b_cts_mclk_i958_div.hw,
- [CLKID_CTS_MCLK_I958] = &meson8b_cts_mclk_i958.hw,
- [CLKID_CTS_I958] = &meson8b_cts_i958.hw,
- + [CLKID_ETH_CLK_SEL] = &meson8_eth_clk_sel.hw,
- + [CLKID_ETH_CLK_DIV] = &meson8_eth_clk_div.hw,
- + [CLKID_ETH_CLK_PHASE] = &meson8_eth_clk_phase.hw,
- + [CLKID_ETH_CLK] = &meson8_eth_clk_gate.hw,
- [CLK_NR_CLKS] = NULL,
- },
- .num = CLK_NR_CLKS,
- @@ -3563,6 +3662,10 @@ static struct clk_regmap *const meson8b_clk_regmaps[] = {
- &meson8b_cts_mclk_i958_div,
- &meson8b_cts_mclk_i958,
- &meson8b_cts_i958,
- + &meson8_eth_clk_sel,
- + &meson8_eth_clk_div,
- + &meson8_eth_clk_phase,
- + &meson8_eth_clk_gate,
- };
- static const struct meson8b_clk_reset_line {
- diff --git a/drivers/clk/meson/meson8b.h b/drivers/clk/meson/meson8b.h
- index 2569f3431fbe..25cf987284fb 100644
- --- a/drivers/clk/meson/meson8b.h
- +++ b/drivers/clk/meson/meson8b.h
- @@ -43,6 +43,7 @@
- #define HHI_MALI_CLK_CNTL 0x1b0 /* 0x6c offset in data sheet */
- #define HHI_VPU_CLK_CNTL 0x1bc /* 0x6f offset in data sheet */
- #define HHI_HDMI_CLK_CNTL 0x1cc /* 0x73 offset in data sheet */
- +#define HHI_ETH_CLK_CNTL 0x1d8 /* 0x76 offset in data sheet */
- #define HHI_VDEC_CLK_CNTL 0x1e0 /* 0x78 offset in data sheet */
- #define HHI_VDEC2_CLK_CNTL 0x1e4 /* 0x79 offset in data sheet */
- #define HHI_VDEC3_CLK_CNTL 0x1e8 /* 0x7a offset in data sheet */
- @@ -180,8 +181,11 @@
- #define CLKID_CTS_AMCLK_DIV 208
- #define CLKID_CTS_MCLK_I958_SEL 210
- #define CLKID_CTS_MCLK_I958_DIV 211
- +#define CLKID_ETH_CLK_SEL 214
- +#define CLKID_ETH_CLK_DIV 215
- +#define CLKID_ETH_CLK_PHASE 216
- -#define CLK_NR_CLKS 214
- +#define CLK_NR_CLKS 218
- /*
- * include the CLKID and RESETID that have
- diff --git a/include/dt-bindings/clock/meson8b-clkc.h b/include/dt-bindings/clock/meson8b-clkc.h
- index bba4c4bdc166..e6750ee4a091 100644
- --- a/include/dt-bindings/clock/meson8b-clkc.h
- +++ b/include/dt-bindings/clock/meson8b-clkc.h
- @@ -126,5 +126,6 @@
- #define CLKID_CTS_AMCLK 209
- #define CLKID_CTS_MCLK_I958 212
- #define CLKID_CTS_I958 213
- +#define CLKID_ETH_CLK 217
- #endif /* __MESON8B_CLKC_H */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement