diff --git a/drivers/sh/clk.c b/drivers/sh/clk.c
index c76f972db69a017a243ad959ed98c9ebb88435cf..dae64ee9ecc56620f1acb73a83d867b7ffbb36bb 100644
--- a/drivers/sh/clk.c
+++ b/drivers/sh/clk.c
@@ -82,7 +82,7 @@ struct clk_rate_round_data {
 
 #define for_each_frequency(pos, r, freq)			\
 	for (pos = r->min, freq = r->func(pos, r);		\
-	     pos < r->max; pos++, freq = r->func(pos, r))	\
+	     pos <= r->max; pos++, freq = r->func(pos, r))	\
 		if (unlikely(freq == 0))			\
 			;					\
 		else
@@ -139,12 +139,15 @@ long clk_rate_table_round(struct clk *clk,
 {
 	struct clk_rate_round_data table_round = {
 		.min	= 0,
-		.max	= clk->nr_freqs,
+		.max	= clk->nr_freqs - 1,
 		.func	= clk_rate_table_iter,
 		.arg	= freq_table,
 		.rate	= rate,
 	};
 
+	if (clk->nr_freqs < 1)
+		return 0;
+
 	return clk_rate_round_helper(&table_round);
 }