07.12.2019 18:47, Dmitry Osipenko пишет: > 07.12.2019 17:28, Dmitry Osipenko пишет: >> 06.12.2019 05:48, Sowjanya Komatineni пишет: >>> Tegra210 and prior Tegra PMC has clk_out_1, clk_out_2, clk_out_3 with >>> mux and gate for each of these clocks. >>> >>> Currently these PMC clocks are registered by Tegra clock driver using >>> clk_register_mux and clk_register_gate by passing PMC base address >>> and register offsets and PMC programming for these clocks happens >>> through direct PMC access by the clock driver. >>> >>> With this, when PMC is in secure mode any direct PMC access from the >>> non-secure world does not go through and these clocks will not be >>> functional. >>> >>> This patch adds these clocks registration with PMC as a clock provider >>> for these clocks. clk_ops callback implementations for these clocks >>> uses tegra_pmc_readl and tegra_pmc_writel which supports PMC programming >>> in secure mode and non-secure mode. >>> >>> Signed-off-by: Sowjanya Komatineni <skomatineni@xxxxxxxxxx> >>> --- > > [snip] > >>> + >>> +static const struct clk_ops pmc_clk_gate_ops = { >>> + .is_enabled = pmc_clk_is_enabled, >>> + .enable = pmc_clk_enable, >>> + .disable = pmc_clk_disable, >>> +}; >> >> What's the benefit of separating GATE from the MUX? >> >> I think it could be a single clock. > > According to TRM: > > 1. GATE and MUX are separate entities. > > 2. GATE is the parent of MUX (see PMC's CLK_OUT paths diagram in TRM). > > 3. PMC doesn't gate EXTPERIPH clock but could "force-enable" it, correct? 4. clk_m_div2/4 are internal PMC OSC dividers and thus these clocks should belong to PMC.