Skip to content
Snippets Groups Projects
Select Git revision
  • 5512d5b034d3f199f16f7c18171cae7732bb05eb
  • master default
  • more_bootm_len
  • mainscreen-turn-on
  • variant-emmc-nvme-boot
  • v3
  • variant-emmc-nvme-boot
  • 2020-06-01
8 results

snapshot.commit

Blame
  • Forked from Reform / reform-boundary-uboot
    Source project has a limited visibility.
    clock.c 6.05 KiB
    /*
     * Keystone2: pll initialization
     *
     * (C) Copyright 2012-2014
     *     Texas Instruments Incorporated, <www.ti.com>
     *
     * SPDX-License-Identifier:     GPL-2.0+
     */
    
    #include <common.h>
    #include <asm/arch/clock.h>
    #include <asm/arch/clock_defs.h>
    
    /* DEV and ARM speed definitions as specified in DEVSPEED register */
    int __weak speeds[DEVSPEED_NUMSPDS] = {
    	SPD1000,
    	SPD1200,
    	SPD1350,
    	SPD1400,
    	SPD1500,
    	SPD1400,
    	SPD1350,
    	SPD1200,
    	SPD1000,
    	SPD800,
    };
    
    static void wait_for_completion(const struct pll_init_data *data)
    {
    	int i;
    	for (i = 0; i < 100; i++) {
    		sdelay(450);
    		if (!(pllctl_reg_read(data->pll, stat) & PLLSTAT_GOSTAT_MASK))
    			break;
    	}
    }
    
    static inline void bypass_main_pll(const struct pll_init_data *data)
    {
    	pllctl_reg_clrbits(data->pll, ctl, PLLCTL_PLLENSRC_MASK |
    			   PLLCTL_PLLEN_MASK);
    
    	/* 4 cycles of reference clock CLKIN*/
    	sdelay(340);
    }
    
    static void configure_mult_div(const struct pll_init_data *data)
    {
    	u32 pllm, plld, bwadj;
    
    	pllm = data->pll_m - 1;
    	plld = (data->pll_d - 1) & CFG_PLLCTL0_PLLD_MASK;
    
    	/* Program Multiplier */
    	if (data->pll == MAIN_PLL)
    		pllctl_reg_write(data->pll, mult, pllm & PLLM_MULT_LO_MASK);
    
    	clrsetbits_le32(keystone_pll_regs[data->pll].reg0,
    			CFG_PLLCTL0_PLLM_MASK,
    			pllm << CFG_PLLCTL0_PLLM_SHIFT);
    
    	/* Program BWADJ */
    	bwadj = (data->pll_m - 1) >> 1; /* Divide pllm by 2 */
    	clrsetbits_le32(keystone_pll_regs[data->pll].reg0,
    			CFG_PLLCTL0_BWADJ_MASK,
    			(bwadj << CFG_PLLCTL0_BWADJ_SHIFT) &
    			CFG_PLLCTL0_BWADJ_MASK);
    	bwadj = bwadj >> CFG_PLLCTL0_BWADJ_BITS;
    	clrsetbits_le32(keystone_pll_regs[data->pll].reg1,
    			CFG_PLLCTL1_BWADJ_MASK, bwadj);