Lines Matching +full:clk +full:- +full:source
2 * (C) Copyright 2010-2015
5 * SPDX-License-Identifier: GPL-2.0+
15 #include <asm/arch-tegra/clk_rst.h>
16 #include <asm/arch-tegra/timer.h>
21 * Clock types that we can use as a source. The Tegra114 has muxes for the
23 * source. This gives us a clock 'type' and exploits what commonality exists
48 CLOCK_TYPE_NONE = -1, /* invalid clock type */
52 CLOCK_MAX_MUX = 8 /* number of source options for each clock */
56 * Clock source mux for each clock type. This just converts our enum into
60 * The extra column in each clock source array is used to store the mask
61 * bits in its register for the source.
63 #define CLK(x) CLOCK_ID_ ## x macro
65 { CLK(AUDIO), CLK(XCPU), CLK(PERIPH), CLK(OSC),
66 CLK(NONE), CLK(NONE), CLK(NONE), CLK(NONE),
68 { CLK(MEMORY), CLK(CGENERAL), CLK(PERIPH), CLK(AUDIO),
69 CLK(NONE), CLK(NONE), CLK(NONE), CLK(NONE),
71 { CLK(MEMORY), CLK(CGENERAL), CLK(PERIPH), CLK(OSC),
72 CLK(NONE), CLK(NONE), CLK(NONE), CLK(NONE),
74 { CLK(PERIPH), CLK(CGENERAL), CLK(MEMORY), CLK(NONE),
75 CLK(NONE), CLK(NONE), CLK(NONE), CLK(NONE),
77 { CLK(PERIPH), CLK(CGENERAL), CLK(MEMORY), CLK(OSC),
78 CLK(NONE), CLK(NONE), CLK(NONE), CLK(NONE),
80 { CLK(PERIPH), CLK(CGENERAL), CLK(MEMORY), CLK(OSC),
81 CLK(NONE), CLK(NONE), CLK(NONE), CLK(NONE),
83 { CLK(PERIPH), CLK(DISPLAY), CLK(CGENERAL), CLK(OSC),
84 CLK(NONE), CLK(NONE), CLK(NONE), CLK(NONE),
86 { CLK(AUDIO), CLK(CGENERAL), CLK(PERIPH), CLK(OSC),
87 CLK(NONE), CLK(NONE), CLK(NONE), CLK(NONE),
89 { CLK(AUDIO), CLK(SFROM32KHZ), CLK(PERIPH), CLK(OSC),
90 CLK(EPCI), CLK(NONE), CLK(NONE), CLK(NONE),
92 { CLK(PERIPH), CLK(MEMORY), CLK(DISPLAY), CLK(AUDIO),
93 CLK(CGENERAL), CLK(DISPLAY2), CLK(OSC), CLK(NONE),
95 { CLK(PERIPH), CLK(CGENERAL), CLK(SFROM32KHZ), CLK(OSC),
96 CLK(NONE), CLK(NONE), CLK(NONE), CLK(NONE),
101 * Clock type for each peripheral clock source. We put the name in each
142 TYPE(PERIPHC_MIPI, CLOCK_TYPE_PCMT), /* MIPI base-band HSI */
221 * SPDIF - which is both 0x08 and 0x0c
224 #define NONE(name) (-1)
469 reg = readl(&clkrst->crc_osc_ctrl); in clock_get_osc_freq()
478 /* Returns a pointer to the clock source register for a peripheral */
487 return &clkrst->crc_clk_src[PERIPH_ID_CSI+1]; in get_periph_source_reg()
491 assert(internal_id != -1); in get_periph_source_reg()
493 internal_id -= PERIPHC_VW_FIRST; in get_periph_source_reg()
494 return &clkrst->crc_clk_src_vw[internal_id]; in get_periph_source_reg()
496 return &clkrst->crc_clk_src[internal_id]; in get_periph_source_reg()
505 return -1; in get_periph_clock_info()
509 return -1; in get_periph_clock_info()
513 return -1; in get_periph_clock_info()
525 enum clock_id get_periph_clock_id(enum periph_id periph_id, int source) in get_periph_clock_id() argument
541 return clock_source[type][source]; in get_periph_clock_id()
545 * Given a peripheral ID and the required source clock, this returns which
546 * value should be programmed into the source mux for that peripheral.
548 * There is special code here to handle the one source type with 5 sources.
551 * @param source PLL id of required parent clock
554 * @return mux value (0-4, or -1 if not found)
572 return -1; in get_periph_clock_source()
579 u32 *clk; in clock_set_enable() local
585 clk = &clkrst->crc_clk_out_enb[PERIPH_REG(periph_id)]; in clock_set_enable()
587 clk = &clkrst->crc_clk_out_enb_vw[PERIPH_REG(periph_id)]; in clock_set_enable()
588 reg = readl(clk); in clock_set_enable()
593 writel(reg, clk); in clock_set_enable()
606 reset = &clkrst->crc_rst_dev[PERIPH_REG(periph_id)]; in reset_set_enable()
608 reset = &clkrst->crc_rst_dev_vw[PERIPH_REG(periph_id)]; in reset_set_enable()
666 clrbits_le32(&clkrst->crc_pll[CLOCK_ID_CGENERAL].pll_misc, PLLC_IDDQ); in clock_early_init()
699 writel(0x00561600, &clkrst->crc_pll[CLOCK_ID_CGENERAL].pll_out[1]); in clock_early_init()
703 setbits_le32(&clkrst->crc_pll[CLOCK_ID_CGENERAL].pll_misc, (1 << pllinfo->lock_ena)); in clock_early_init()
708 data = (12 << pllinfo->kcp_shift) | (1 << pllinfo->kvco_shift); in clock_early_init()
709 data |= (1 << PLLD_CLKENABLE) | (1 << pllinfo->lock_ena); in clock_early_init()
710 writel(data, &clkrst->crc_pll[CLOCK_ID_DISPLAY].pll_misc); in clock_early_init()
727 writel(freq, &sysctr->cntfid0); in arch_timer_init()
729 val = readl(&sysctr->cntcr); in arch_timer_init()
731 writel(val, &sysctr->cntcr); in arch_timer_init()
755 { -1, },