cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

clk.c (879B)


      1/*
      2 * Copyright (C) 2012 ST Microelectronics
      3 * Viresh Kumar <vireshk@kernel.org>
      4 *
      5 * This file is licensed under the terms of the GNU General Public
      6 * License version 2. This program is licensed "as is" without any
      7 * warranty of any kind, whether express or implied.
      8 *
      9 * SPEAr clk - Common routines
     10 */
     11
     12#include <linux/clk-provider.h>
     13#include <linux/types.h>
     14#include "clk.h"
     15
     16long clk_round_rate_index(struct clk_hw *hw, unsigned long drate,
     17		unsigned long parent_rate, clk_calc_rate calc_rate, u8 rtbl_cnt,
     18		int *index)
     19{
     20	unsigned long prev_rate, rate = 0;
     21
     22	for (*index = 0; *index < rtbl_cnt; (*index)++) {
     23		prev_rate = rate;
     24		rate = calc_rate(hw, parent_rate, *index);
     25		if (drate < rate) {
     26			/* previous clock was best */
     27			if (*index) {
     28				rate = prev_rate;
     29				(*index)--;
     30			}
     31			break;
     32		}
     33	}
     34
     35	if ((*index) == rtbl_cnt)
     36		(*index)--;
     37
     38	return rate;
     39}