> Shikra integrates two Qualcomm ETHQOS controllers based on the Synopsys > GMAC IP, similar to previous platforms. Register qcom,shikra-ethqos > backed by a new shikra_data descriptor that enables the three NOC clocks > required for DMA memory access (axi-noc, pcie-tile-axi-noc, stmmaceth) > all at 120 MHz, and the 36-bit DMA address width. > > As part of the NOC clock voting logic, the qcom-ethqos glue driver takes > a second enable reference on the "stmmaceth" clock, which is already > enabled by the stmmac core. All three clocks in shikra_noc_clks[] must > run at 120 MHz for NOC access, and managing "stmmaceth" through the same > clk_bulk path keeps the rate-setting and enable/disable together. > > Signed-off-by: Mohd Ayaan Anwar > --- > .../ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c | 31 ++++++++++++++++++++++ > 1 file changed, 31 insertions(+) > > diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c > index 8871d285941162c72e2a8f79d2eef915d9283796..c474f1e5a043777a52bcbff8a488640f6dbdca30 100644 > --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c > +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c > @@ -328,6 +328,36 @@ static const struct ethqos_emac_driver_data emac_v4_0_0_data = { > }, > }; > > +static const struct ethqos_noc_clk_cfg shikra_noc_clks[] = { > + { "axi-noc", 120000000 }, > + { "pcie-tile-axi-noc", 120000000 }, > + { "stmmaceth", 120000000 }, > +}; > + > +static const struct ethqos_emac_driver_data shikra_data = { > + .dma_addr_width = 36, > + .has_emac_ge_3 = true, > + .noc_clk_cfg = shikra_noc_clks, > + .num_noc_clks = ARRAY_SIZE(shikra_noc_clks), > + .rgmii_config_loopback_en = false, > + .dwmac4_addrs = { nit: this part seems in common between emac_v3_0_0, emac_v4_0_0 and shikraemac_v3_0_0, emac_v3_0_0 and shikra. Can we add a common definition? E.g. static const struct dwmac4_addrs qcom_emac_dwmac4_addrs { ... }; Regards, Lorenzo > + .dma_chan = 0x00008100, > + .dma_chan_offset = 0x1000, > + .mtl_chan = 0x00008000, > + .mtl_chan_offset = 0x1000, > + .mtl_ets_ctrl = 0x00008010, > + .mtl_ets_ctrl_offset = 0x1000, > + .mtl_txq_weight = 0x00008018, > + .mtl_txq_weight_offset = 0x1000, > + .mtl_send_slp_cred = 0x0000801c, > + .mtl_send_slp_cred_offset = 0x1000, > + .mtl_high_cred = 0x00008020, > + .mtl_high_cred_offset = 0x1000, > + .mtl_low_cred = 0x00008024, > + .mtl_low_cred_offset = 0x1000, > + }, > +}; > + > static int ethqos_dll_configure(struct qcom_ethqos *ethqos) > { > struct device *dev = ðqos->pdev->dev; > @@ -962,6 +992,7 @@ static const struct of_device_id qcom_ethqos_match[] = { > { .compatible = "qcom,qcs404-ethqos", .data = &emac_v2_3_0_data}, > { .compatible = "qcom,sa8775p-ethqos", .data = &emac_v4_0_0_data}, > { .compatible = "qcom,sc8280xp-ethqos", .data = &emac_v3_0_0_data}, > + { .compatible = "qcom,shikra-ethqos", .data = &shikra_data}, > { .compatible = "qcom,sm8150-ethqos", .data = &emac_v2_1_0_data}, > { } > }; > > -- > 2.34.1 > >