Module Name: src Committed By: jmcneill Date: Sun Sep 7 22:21:36 UTC 2014
Modified Files: src/sys/arch/arm/allwinner: awin_board.c awin_var.h Log Message: add chip id functions To generate a diff of this commit: cvs rdiff -u -r1.16 -r1.17 src/sys/arch/arm/allwinner/awin_board.c cvs rdiff -u -r1.13 -r1.14 src/sys/arch/arm/allwinner/awin_var.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/allwinner/awin_board.c diff -u src/sys/arch/arm/allwinner/awin_board.c:1.16 src/sys/arch/arm/allwinner/awin_board.c:1.17 --- src/sys/arch/arm/allwinner/awin_board.c:1.16 Thu Sep 4 02:36:08 2014 +++ src/sys/arch/arm/allwinner/awin_board.c Sun Sep 7 22:21:36 2014 @@ -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 @@ awin_memprobe(void) 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) { Index: src/sys/arch/arm/allwinner/awin_var.h diff -u src/sys/arch/arm/allwinner/awin_var.h:1.13 src/sys/arch/arm/allwinner/awin_var.h:1.14 --- src/sys/arch/arm/allwinner/awin_var.h:1.13 Sat Sep 6 17:10:17 2014 +++ src/sys/arch/arm/allwinner/awin_var.h Sun Sep 7 22:21:36 2014 @@ -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_pll2_enable(void); 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 *);