mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2026-09-22 09:34:56 +02:00
mmc: litex_mmc: Use DIV_ROUND_UP for more accurate clock calculation
commitb837e38c25upstream. The previous clock uses roundup_pow_of_two() to calculate the core clock frequency. It does not meet the actual hardware meaning. The actual frequency is calculated by "ref_clk / ((div >> 1) << 1)". Fix the clock divider calculation. Fixes:92e0991047("mmc: Add driver for LiteX's LiteSDCard interface") Signed-off-by: Inochi Amaoto <inochiama@gmail.com> Reviewed-by: Gabriel Somlo <gsomlo@gmail.com> Cc: stable@vger.kernel.org Signed-off-by: Ulf Hansson <ulfh@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
a0a4600b39
commit
8bcbedce9b
@@ -16,6 +16,7 @@
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/iopoll.h>
|
||||
#include <linux/litex.h>
|
||||
#include <linux/math.h>
|
||||
#include <linux/mod_devicetable.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/platform_device.h>
|
||||
@@ -436,11 +437,10 @@ static void litex_mmc_setclk(struct litex_mmc_host *host, unsigned int freq)
|
||||
struct device *dev = mmc_dev(host->mmc);
|
||||
u32 div;
|
||||
|
||||
div = freq ? host->ref_clk / freq : 256U;
|
||||
div = roundup_pow_of_two(div);
|
||||
div = freq ? DIV_ROUND_UP(host->ref_clk, freq) : 256U;
|
||||
div = clamp(div, 2U, 256U);
|
||||
dev_dbg(dev, "sd_clk_freq=%d: set to %d via div=%d\n",
|
||||
freq, host->ref_clk / div, div);
|
||||
freq, host->ref_clk / ((div + 1) & ~1U), div);
|
||||
litex_write16(host->sdphy + LITEX_PHY_CLOCKERDIV, div);
|
||||
host->sd_clk = freq;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user