Module Name:    src
Committed By:   kiyohara
Date:           Sat Mar 15 10:54:40 UTC 2014

Modified Files:
        src/sys/arch/arm/marvell: armadaxp.c mvsocvar.h

Log Message:
Add armada370_getclks().
Remove some white spaces.


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/arm/marvell/armadaxp.c
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/arm/marvell/mvsocvar.h

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/marvell/armadaxp.c
diff -u src/sys/arch/arm/marvell/armadaxp.c:1.6 src/sys/arch/arm/marvell/armadaxp.c:1.7
--- src/sys/arch/arm/marvell/armadaxp.c:1.6	Mon Dec 23 04:12:09 2013
+++ src/sys/arch/arm/marvell/armadaxp.c	Sat Mar 15 10:54:40 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: armadaxp.c,v 1.6 2013/12/23 04:12:09 kiyohara Exp $	*/
+/*	$NetBSD: armadaxp.c,v 1.7 2014/03/15 10:54:40 kiyohara Exp $	*/
 /*******************************************************************************
 Copyright (C) Marvell International Ltd. and its affiliates
 
@@ -37,7 +37,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBI
 *******************************************************************************/
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: armadaxp.c,v 1.6 2013/12/23 04:12:09 kiyohara Exp $");
+__KERNEL_RCSID(0, "$NetBSD: armadaxp.c,v 1.7 2014/03/15 10:54:40 kiyohara Exp $");
 
 #define _INTR_PRIVATE
 
@@ -61,10 +61,12 @@ __KERNEL_RCSID(0, "$NetBSD: armadaxp.c,v
 
 #include <dev/marvell/marvellreg.h>
 
-#define EXTRACT_CPU_FREQ_FIELD(sar)	(((0x01 & (sar >> 52)) << 3) | \
+#define EXTRACT_XP_CPU_FREQ_FIELD(sar)	(((0x01 & (sar >> 52)) << 3) | \
 					    (0x07 & (sar >> 21)))
-#define EXTRACT_FAB_FREQ_FIELD(sar)	(((0x01 & (sar >> 51)) << 4) | \
+#define EXTRACT_XP_FAB_FREQ_FIELD(sar)	(((0x01 & (sar >> 51)) << 4) | \
 					    (0x0F & (sar >> 24)))
+#define EXTRACT_370_CPU_FREQ_FIELD(sar)	((sar >> 11) & 0xf)
+#define EXTRACT_370_FAB_FREQ_FIELD(sar)	((sar >> 15) & 0x1f)
 
 #define	MPIC_WRITE(reg, val)		(bus_space_write_4(&mvsoc_bs_tag, \
 					    mpic_handle, reg, val))
@@ -133,9 +135,15 @@ static struct vco_freq_ratio freq_conf_t
 /*22*/	{ 2, 5,	10,  5 }
 };
 
-static uint16_t	cpu_clock_table[] = {
-    1000, 1066, 1200, 1333, 1500, 1666, 1800, 2000, 600,  667,  800,  1600,
-    2133, 2200, 2400 };
+static uint16_t clock_table_xp[] = {
+	1000, 1066, 1200, 1333, 1500, 1666, 1800, 2000,
+	 600,  667,  800, 1600, 2133, 2200, 2400
+};
+static uint16_t clock_table_370[] = {
+	 400,  533,  667,  800, 1000, 1067, 1200, 1333,
+	1500, 1600, 1667, 1800, 2000,  333,  600,  900,
+	   0
+};
 
 static struct pic_ops armadaxp_picops = {
 	.pic_unblock_irqs = armadaxp_pic_unblock_irqs,
@@ -324,7 +332,7 @@ void
 armadaxp_getclks(void)
 {
 	uint64_t sar_reg;
-	uint8_t  sar_cpu_freq, sar_fab_freq, array_size;
+	uint8_t  sar_cpu_freq, sar_fab_freq;
 
 	if (cputype == CPU_ID_MV88SV584X_V7)
 		mvTclk = 250000000; /* 250 MHz */
@@ -334,23 +342,21 @@ armadaxp_getclks(void)
 	sar_reg = (read_miscreg(ARMADAXP_MISC_SAR_HI) << 31) |
 	    read_miscreg(ARMADAXP_MISC_SAR_LO);
 
-	sar_cpu_freq = EXTRACT_CPU_FREQ_FIELD(sar_reg);
-	sar_fab_freq = EXTRACT_FAB_FREQ_FIELD(sar_reg);
+	sar_cpu_freq = EXTRACT_XP_CPU_FREQ_FIELD(sar_reg);
+	sar_fab_freq = EXTRACT_XP_FAB_FREQ_FIELD(sar_reg);
 
 	/* Check if CPU frequency field has correct value */
-	array_size = sizeof(cpu_clock_table) / sizeof(cpu_clock_table[0]);
-	if (sar_cpu_freq >= array_size)
+	if (sar_cpu_freq >= __arraycount(clock_table_xp))
 		panic("Reserved value in cpu frequency configuration field: "
 		    "%d", sar_cpu_freq);
 
 	/* Check if fabric frequency field has correct value */
-	array_size = sizeof(freq_conf_table) / sizeof(freq_conf_table[0]);
-	if (sar_fab_freq >= array_size)
+	if (sar_fab_freq >= __arraycount(freq_conf_table))
 		panic("Reserved value in fabric frequency configuration field: "
 		    "%d", sar_fab_freq);
 
 	/* Get CPU clock frequency */
-	mvPclk = cpu_clock_table[sar_cpu_freq] *
+	mvPclk = clock_table_xp[sar_cpu_freq] *
 	    freq_conf_table[sar_fab_freq].vco_cpu;
 
 	/* Get L2CLK clock frequency and use as system clock (mvSysclk) */
@@ -361,8 +367,49 @@ armadaxp_getclks(void)
 	    freq_conf_table[sar_fab_freq].vco_l2c) >= 5)
 		mvSysclk++;
 
-	mvPclk = mvPclk * 1000000;
-	mvSysclk = mvSysclk * 1000000;
+	mvPclk *= 1000000;
+	mvSysclk *= 1000000;
+}
+
+void
+armada370_getclks(void)
+{
+	uint32_t sar;
+	uint8_t  cpu_freq, fab_freq;
+
+	sar = read_miscreg(ARMADAXP_MISC_SAR_LO);
+	if (sar & 0x00100000)
+		mvTclk = 200000000; /* 200 MHz */
+	else
+		mvTclk = 166666667; /* 166 MHz */
+
+	cpu_freq = EXTRACT_370_CPU_FREQ_FIELD(sar);
+	fab_freq = EXTRACT_370_FAB_FREQ_FIELD(sar);
+
+	/* Check if CPU frequency field has correct value */
+	if (cpu_freq >= __arraycount(clock_table_370))
+		panic("Reserved value in cpu frequency configuration field: "
+		    "%d", cpu_freq);
+
+	/* Check if fabric frequency field has correct value */
+	if (fab_freq >= __arraycount(freq_conf_table))
+		panic("Reserved value in fabric frequency configuration field: "
+		    "%d", fab_freq);
+
+	/* Get CPU clock frequency */
+	mvPclk = clock_table_370[cpu_freq] *
+	    freq_conf_table[fab_freq].vco_cpu;
+
+	/* Get L2CLK clock frequency and use as system clock (mvSysclk) */
+	mvSysclk = mvPclk / freq_conf_table[fab_freq].vco_l2c;
+
+	/* Round mvSysclk value to integer MHz */
+	if (((mvPclk % freq_conf_table[fab_freq].vco_l2c) * 10 /
+	    freq_conf_table[fab_freq].vco_l2c) >= 5)
+		mvSysclk++;
+
+	mvPclk *= 1000000;
+	mvSysclk *= 1000000;
 }
 
 /*
@@ -452,7 +499,7 @@ armadaxp_io_coherency_init(void)
 	iocc_state = 1;
 }
 
-int     
+int
 armadaxp_clkgating(struct marvell_attach_args *mva)
 {
 	uint32_t val;
@@ -463,10 +510,10 @@ armadaxp_clkgating(struct marvell_attach
 			val = read_miscreg(ARMADAXP_MISC_PMCGC);
 			if ((val & clkgatings[i].bits) == clkgatings[i].bits)
 				/* Clock enabled */
-				return 0; 
+				return 0;
 			return 1;
 		}
-	} 
+	}
 	/* Clock Gating not support */
 	return 0;
 }

Index: src/sys/arch/arm/marvell/mvsocvar.h
diff -u src/sys/arch/arm/marvell/mvsocvar.h:1.7 src/sys/arch/arm/marvell/mvsocvar.h:1.8
--- src/sys/arch/arm/marvell/mvsocvar.h:1.7	Mon Dec 23 04:12:09 2013
+++ src/sys/arch/arm/marvell/mvsocvar.h	Sat Mar 15 10:54:40 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: mvsocvar.h,v 1.7 2013/12/23 04:12:09 kiyohara Exp $	*/
+/*	$NetBSD: mvsocvar.h,v 1.8 2014/03/15 10:54:40 kiyohara Exp $	*/
 /*
  * Copyright (c) 2007, 2010 KIYOHARA Takashi
  * All rights reserved.
@@ -136,6 +136,7 @@ void mv78xx0_getclks(bus_addr_t);
 
 void armadaxp_intr_bootstrap(bus_addr_t);
 void armadaxp_getclks(void);
+void armada370_getclks(void);
 int armadaxp_clkgating(struct marvell_attach_args *);
 
 #endif	/* _MVSOCVAR_H_ */

Reply via email to