static u_long _get_sclk(u_long *cache) { u_long div, ssel; if (pll_is_bypassed()) return CONFIG_CLKIN_HZ; div = bfin_read_PLL_DIV(); if (div == cached_sclk_pll_div) return *cache; else cached_sclk_pll_div = div; ssel = (div & SYSSEL) >> SYSSEL_P; cached_sclk = get_vco() / ssel; ssel = (div & S0SEL) >> S0SEL_P; cached_sclk0 = cached_sclk / ssel; ssel = (div & S1SEL) >> S1SEL_P; cached_sclk1 = cached_sclk / ssel; ssel = (div & DSEL) >> DSEL_P; cached_dclk = get_vco() / ssel; return *cache; }
/* Get the Core clock */ u_long get_cclk(void) { static u_long cached_cclk_pll_div, cached_cclk; u_long div, csel, ssel; if (pll_is_bypassed()) return CONFIG_CLKIN_HZ; div = bfin_read_PLL_DIV(); if (div == cached_cclk_pll_div) return cached_cclk; else cached_cclk_pll_div = div; csel = (div & CSEL) >> CSEL_P; #ifndef CGU_DIV ssel = (div & SSEL) >> SSEL_P; if (ssel && ssel < (1 << csel)) /* SCLK > CCLK */ cached_cclk = get_vco() / ssel; else cached_cclk = get_vco() >> csel; #else cached_cclk = get_vco() / csel; #endif return cached_cclk; }
u_long get_sclk(void) { static u_long cached_sclk_pll_div, cached_sclk; u_long div, ssel; if (pll_is_bypassed()) return CONFIG_CLKIN_HZ; div = bfin_read_PLL_DIV(); if (div == cached_sclk_pll_div) return cached_sclk; else cached_sclk_pll_div = div; ssel = (div & SSEL) >> SSEL_P; cached_sclk = get_vco() / ssel; return cached_sclk; }
static int global_board_data_init(void) { #ifndef CONFIG_SYS_GBL_DATA_ADDR # define CONFIG_SYS_GBL_DATA_ADDR 0 #endif #ifndef CONFIG_SYS_BD_INFO_ADDR # define CONFIG_SYS_BD_INFO_ADDR 0 #endif bd_t *bd; if (CONFIG_SYS_GBL_DATA_ADDR) { gd = (gd_t *)(CONFIG_SYS_GBL_DATA_ADDR); memset((void *)gd, 0, GENERATED_GBL_DATA_SIZE); } else { static gd_t _bfin_gd; gd = &_bfin_gd; } if (CONFIG_SYS_BD_INFO_ADDR) { bd = (bd_t *)(CONFIG_SYS_BD_INFO_ADDR); memset(bd, 0, GENERATED_BD_INFO_SIZE); } else { static bd_t _bfin_bd; bd = &_bfin_bd; } gd->bd = bd; bd->bi_r_version = version_string; bd->bi_cpu = __stringify(CONFIG_BFIN_CPU); bd->bi_board_name = CONFIG_SYS_BOARD; bd->bi_vco = get_vco(); bd->bi_cclk = get_cclk(); bd->bi_sclk = get_sclk(); bd->bi_memstart = CONFIG_SYS_SDRAM_BASE; bd->bi_memsize = CONFIG_SYS_MAX_RAM_SIZE; gd->ram_size = CONFIG_SYS_MAX_RAM_SIZE; return 0; }