Module Name:    src
Committed By:   jmcneill
Date:           Thu Jun 29 10:53:59 UTC 2017

Modified Files:
        src/sys/arch/arm/sunxi: sun8i_h3_ccu.c sunxi_ccu.c sunxi_ccu.h
            sunxi_ccu_nkmp.c sunxi_ccu_nm.c

Log Message:
SD/MMC clock fixes


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/sunxi/sun8i_h3_ccu.c \
    src/sys/arch/arm/sunxi/sunxi_ccu.c src/sys/arch/arm/sunxi/sunxi_ccu.h \
    src/sys/arch/arm/sunxi/sunxi_ccu_nm.c
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/sunxi/sunxi_ccu_nkmp.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/arm/sunxi/sun8i_h3_ccu.c
diff -u src/sys/arch/arm/sunxi/sun8i_h3_ccu.c:1.2 src/sys/arch/arm/sunxi/sun8i_h3_ccu.c:1.3
--- src/sys/arch/arm/sunxi/sun8i_h3_ccu.c:1.2	Thu Jun 29 09:26:06 2017
+++ src/sys/arch/arm/sunxi/sun8i_h3_ccu.c	Thu Jun 29 10:53:59 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: sun8i_h3_ccu.c,v 1.2 2017/06/29 09:26:06 jmcneill Exp $ */
+/* $NetBSD: sun8i_h3_ccu.c,v 1.3 2017/06/29 10:53:59 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2017 Jared McNeill <jmcne...@invisible.ca>
@@ -29,7 +29,7 @@
 
 #include <sys/cdefs.h>
 
-__KERNEL_RCSID(1, "$NetBSD: sun8i_h3_ccu.c,v 1.2 2017/06/29 09:26:06 jmcneill Exp $");
+__KERNEL_RCSID(1, "$NetBSD: sun8i_h3_ccu.c,v 1.3 2017/06/29 10:53:59 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -138,8 +138,13 @@ static const char *mod_parents[] = { "ho
 
 static struct sunxi_ccu_clk sun8i_h3_ccu_clks[] = {
 	SUNXI_CCU_NKMP(H3_CLK_PLL_PERIPH0, "pll_periph0", "hosc",
-	    PLL_PERIPH0_CTRL_REG, __BITS(12,8), __BITS(5,3), 0, __BITS(17,16), __BIT(31),
-	    0),
+	    PLL_PERIPH0_CTRL_REG,	/* reg */
+	    __BITS(12,8),		/* n */
+	    __BITS(5,4), 		/* k */
+	    0,				/* m */
+	    __BITS(17,16),		/* p */
+	    __BIT(31),			/* enable */
+	    SUNXI_CCU_NKMP_DIVIDE_BY_TWO),
 
 	SUNXI_CCU_PREDIV(H3_CLK_AHB1, "ahb1", ahb1_parents,
 	    AHB1_APB1_CFG_REG,	/* reg */
Index: src/sys/arch/arm/sunxi/sunxi_ccu.c
diff -u src/sys/arch/arm/sunxi/sunxi_ccu.c:1.2 src/sys/arch/arm/sunxi/sunxi_ccu.c:1.3
--- src/sys/arch/arm/sunxi/sunxi_ccu.c:1.2	Thu Jun 29 09:26:06 2017
+++ src/sys/arch/arm/sunxi/sunxi_ccu.c	Thu Jun 29 10:53:59 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: sunxi_ccu.c,v 1.2 2017/06/29 09:26:06 jmcneill Exp $ */
+/* $NetBSD: sunxi_ccu.c,v 1.3 2017/06/29 10:53:59 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2017 Jared McNeill <jmcne...@invisible.ca>
@@ -31,7 +31,7 @@
 #include "opt_fdt_arm.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sunxi_ccu.c,v 1.2 2017/06/29 09:26:06 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sunxi_ccu.c,v 1.3 2017/06/29 10:53:59 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -327,10 +327,11 @@ sunxi_ccu_print(struct sunxi_ccu_softc *
 		case SUNXI_CCU_GATE:	type = "gate"; break;
 		case SUNXI_CCU_NM:	type = "nm"; break;
 		case SUNXI_CCU_NKMP:	type = "nkmp"; break;
+		case SUNXI_CCU_PREDIV:	type = "prediv"; break;
 		default:		type = "???"; break;
 		}
 
-        	printf("  %-12s %2s %-12s %-5s ",
+        	printf("  %-12s %2s %-12s %-7s ",
         	    clk->base.name,
         	    clkp_parent ? "<-" : "",
         	    clkp_parent ? clkp_parent->name : "",
Index: src/sys/arch/arm/sunxi/sunxi_ccu.h
diff -u src/sys/arch/arm/sunxi/sunxi_ccu.h:1.2 src/sys/arch/arm/sunxi/sunxi_ccu.h:1.3
--- src/sys/arch/arm/sunxi/sunxi_ccu.h:1.2	Thu Jun 29 09:26:06 2017
+++ src/sys/arch/arm/sunxi/sunxi_ccu.h	Thu Jun 29 10:53:59 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: sunxi_ccu.h,v 1.2 2017/06/29 09:26:06 jmcneill Exp $ */
+/* $NetBSD: sunxi_ccu.h,v 1.3 2017/06/29 10:53:59 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2017 Jared McNeill <jmcne...@invisible.ca>
@@ -94,6 +94,7 @@ struct sunxi_ccu_nkmp {
 	uint32_t	lock;
 	uint32_t	enable;
 	uint32_t	flags;
+#define	SUNXI_CCU_NKMP_DIVIDE_BY_TWO	__BIT(0)
 };
 
 int	sunxi_ccu_nkmp_enable(struct sunxi_ccu_softc *,
Index: src/sys/arch/arm/sunxi/sunxi_ccu_nm.c
diff -u src/sys/arch/arm/sunxi/sunxi_ccu_nm.c:1.2 src/sys/arch/arm/sunxi/sunxi_ccu_nm.c:1.3
--- src/sys/arch/arm/sunxi/sunxi_ccu_nm.c:1.2	Thu Jun 29 09:26:06 2017
+++ src/sys/arch/arm/sunxi/sunxi_ccu_nm.c	Thu Jun 29 10:53:59 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: sunxi_ccu_nm.c,v 1.2 2017/06/29 09:26:06 jmcneill Exp $ */
+/* $NetBSD: sunxi_ccu_nm.c,v 1.3 2017/06/29 10:53:59 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2017 Jared McNeill <jmcne...@invisible.ca>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sunxi_ccu_nm.c,v 1.2 2017/06/29 09:26:06 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sunxi_ccu_nm.c,v 1.3 2017/06/29 10:53:59 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -146,6 +146,7 @@ sunxi_ccu_nm_set_rate(struct sunxi_ccu_s
 				if (nm->flags & SUNXI_CCU_NM_ROUND_DOWN) {
 					const int diff = new_rate - rate;
 					if (diff >= 0 && rate > best_rate) {
+						best_diff = diff;
 						best_rate = rate;
 						best_n = n;
 						best_m = m;
@@ -154,6 +155,7 @@ sunxi_ccu_nm_set_rate(struct sunxi_ccu_s
 				} else {
 					const int diff = abs(new_rate - rate);
 					if (diff < best_diff) {
+						best_diff = diff;
 						best_rate = rate;
 						best_n = n;
 						best_m = m;

Index: src/sys/arch/arm/sunxi/sunxi_ccu_nkmp.c
diff -u src/sys/arch/arm/sunxi/sunxi_ccu_nkmp.c:1.1 src/sys/arch/arm/sunxi/sunxi_ccu_nkmp.c:1.2
--- src/sys/arch/arm/sunxi/sunxi_ccu_nkmp.c:1.1	Thu Jun 29 09:26:06 2017
+++ src/sys/arch/arm/sunxi/sunxi_ccu_nkmp.c	Thu Jun 29 10:53:59 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: sunxi_ccu_nkmp.c,v 1.1 2017/06/29 09:26:06 jmcneill Exp $ */
+/* $NetBSD: sunxi_ccu_nkmp.c,v 1.2 2017/06/29 10:53:59 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2017 Jared McNeill <jmcne...@invisible.ca>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sunxi_ccu_nkmp.c,v 1.1 2017/06/29 09:26:06 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sunxi_ccu_nkmp.c,v 1.2 2017/06/29 10:53:59 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -95,6 +95,9 @@ sunxi_ccu_nkmp_get_rate(struct sunxi_ccu
 	m++;
 	p++;
 
+	if (nkmp->flags & SUNXI_CCU_NKMP_DIVIDE_BY_TWO)
+		m *= 2;
+
 	return (u_int)((uint64_t)rate * n * k) / (m * p);
 }
 

Reply via email to