Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch/arm/allwinner add chip id functions



details:   https://anonhg.NetBSD.org/src/rev/46d671d84de4
branches:  trunk
changeset: 802266:46d671d84de4
user:      jmcneill <jmcneill%NetBSD.org@localhost>
date:      Sun Sep 07 22:21:36 2014 +0000

description:
add chip id functions

diffstat:

 sys/arch/arm/allwinner/awin_board.c |  40 +++++++++++++++++++++++++++++++++++-
 sys/arch/arm/allwinner/awin_var.h   |  10 ++++++++-
 2 files changed, 47 insertions(+), 3 deletions(-)

diffs (85 lines):

diff -r c902908ed264 -r 46d671d84de4 sys/arch/arm/allwinner/awin_board.c
--- a/sys/arch/arm/allwinner/awin_board.c       Sun Sep 07 22:06:36 2014 +0000
+++ b/sys/arch/arm/allwinner/awin_board.c       Sun Sep 07 22:21:36 2014 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: awin_board.c,v 1.16 2014/09/04 02:36:08 jmcneill Exp $ */
+/*     $NetBSD: awin_board.c,v 1.17 2014/09/07 22:21:36 jmcneill Exp $ */
 /*-
  * Copyright (c) 2012 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -35,7 +35,7 @@
 
 #include <sys/cdefs.h>
 
-__KERNEL_RCSID(1, "$NetBSD: awin_board.c,v 1.16 2014/09/04 02:36:08 jmcneill Exp $");
+__KERNEL_RCSID(1, "$NetBSD: awin_board.c,v 1.17 2014/09/07 22:21:36 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -240,6 +240,42 @@
        return memsize;
 }
 
+uint16_t
+awin_chip_id(void)
+{
+       static uint16_t chip_id = 0;
+       uint32_t ver;
+
+       if (!chip_id) {
+               ver = bus_space_read_4(&awin_bs_tag, awin_core_bsh,
+                   AWIN_SRAM_OFFSET + AWIN_SRAM_VER_REG);
+               ver |= AWIN_SRAM_VER_R_EN;
+               bus_space_write_4(&awin_bs_tag, awin_core_bsh,
+                   AWIN_SRAM_OFFSET + AWIN_SRAM_VER_REG, ver);
+               ver = bus_space_read_4(&awin_bs_tag, awin_core_bsh,
+                   AWIN_SRAM_OFFSET + AWIN_SRAM_VER_REG);
+
+               chip_id = __SHIFTOUT(ver, AWIN_SRAM_VER_KEY_FIELD);
+       }
+
+       return chip_id;
+}
+
+const char *
+awin_chip_name(void)
+{
+       uint16_t chip_id = awin_chip_id();
+
+       switch (chip_id) {
+       case AWIN_CHIP_ID_A10: return "A10";
+       case AWIN_CHIP_ID_A13: return "A13";
+       case AWIN_CHIP_ID_A20: return "A20";
+       case AWIN_CHIP_ID_A23: return "A23";
+       case AWIN_CHIP_ID_A31: return "A31";
+       default: return "unknown chip";
+       }
+}
+
 void
 awin_pll6_enable(void)
 {
diff -r c902908ed264 -r 46d671d84de4 sys/arch/arm/allwinner/awin_var.h
--- a/sys/arch/arm/allwinner/awin_var.h Sun Sep 07 22:06:36 2014 +0000
+++ b/sys/arch/arm/allwinner/awin_var.h Sun Sep 07 22:21:36 2014 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: awin_var.h,v 1.13 2014/09/06 17:10:17 jmcneill Exp $ */
+/* $NetBSD: awin_var.h,v 1.14 2014/09/07 22:21:36 jmcneill Exp $ */
 /*-
  * Copyright (c) 2013 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -92,6 +92,14 @@
 void   awin_pll6_enable(void);
 void   awin_cpu_hatch(struct cpu_info *);
 
+#define AWIN_CHIP_ID_A10       0x1623
+#define AWIN_CHIP_ID_A13       0x1625
+#define AWIN_CHIP_ID_A31       0x1633
+#define AWIN_CHIP_ID_A23       0x1650
+#define AWIN_CHIP_ID_A20       0x1651
+uint16_t awin_chip_id(void);
+const char *awin_chip_name(void);
+
 void   awin_gpio_init(void);
 bool   awin_gpio_pinset_available(const struct awin_gpio_pinset *);
 void   awin_gpio_pinset_acquire(const struct awin_gpio_pinset *);



Home | Main Index | Thread Index | Old Index