Module Name: src Committed By: jmcneill Date: Sun Oct 12 14:06:18 UTC 2014
Modified Files: src/sys/arch/arm/allwinner: awin_intr.h awin_io.c awin_reg.h awin_twi.c Log Message: different twi pinsets and irqs for A31 To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/allwinner/awin_intr.h cvs rdiff -u -r1.17 -r1.18 src/sys/arch/arm/allwinner/awin_io.c cvs rdiff -u -r1.30 -r1.31 src/sys/arch/arm/allwinner/awin_reg.h cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/allwinner/awin_twi.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/allwinner/awin_intr.h diff -u src/sys/arch/arm/allwinner/awin_intr.h:1.5 src/sys/arch/arm/allwinner/awin_intr.h:1.6 --- src/sys/arch/arm/allwinner/awin_intr.h:1.5 Fri Oct 10 07:36:11 2014 +++ src/sys/arch/arm/allwinner/awin_intr.h Sun Oct 12 14:06:18 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: awin_intr.h,v 1.5 2014/10/10 07:36:11 jmcneill Exp $ */ +/* $NetBSD: awin_intr.h,v 1.6 2014/10/12 14:06:18 jmcneill Exp $ */ /*- * Copyright (c) 2013 The NetBSD Foundation, Inc. * All rights reserved. @@ -138,6 +138,15 @@ * A31 */ #define AWIN_A31_IRQ_UART0 32 +#define AWIN_A31_IRQ_UART1 33 +#define AWIN_A31_IRQ_UART2 34 +#define AWIN_A31_IRQ_UART3 35 +#define AWIN_A31_IRQ_UART4 36 +#define AWIN_A31_IRQ_UART5 37 +#define AWIN_A31_IRQ_TWI0 38 +#define AWIN_A31_IRQ_TWI1 39 +#define AWIN_A31_IRQ_TWI2 40 +#define AWIN_A31_IRQ_TWI3 41 #define AWIN_A31_IRQ_AC 61 #define AWIN_A31_IRQ_DMA 82 #define AWIN_A31_IRQ_SDMMC0 92 Index: src/sys/arch/arm/allwinner/awin_io.c diff -u src/sys/arch/arm/allwinner/awin_io.c:1.17 src/sys/arch/arm/allwinner/awin_io.c:1.18 --- src/sys/arch/arm/allwinner/awin_io.c:1.17 Sat Oct 11 10:31:13 2014 +++ src/sys/arch/arm/allwinner/awin_io.c Sun Oct 12 14:06:18 2014 @@ -31,7 +31,7 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(1, "$NetBSD: awin_io.c,v 1.17 2014/10/11 10:31:13 jmcneill Exp $"); +__KERNEL_RCSID(1, "$NetBSD: awin_io.c,v 1.18 2014/10/12 14:06:18 jmcneill Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -122,16 +122,20 @@ static const struct awin_locators awin_l { "awinmmc", OFFANDSIZE(SDMMC1), 4, AWIN_IRQ_SDMMC1, A10|A20 }, { "awinmmc", OFFANDSIZE(SDMMC0), 0, AWIN_A31_IRQ_SDMMC0, A31 }, { "ahcisata", OFFANDSIZE(SATA), NOPORT, AWIN_IRQ_SATA, A10|A20 }, - { "awiniic", OFFANDSIZE(TWI0), 0, AWIN_IRQ_TWI0, AANY }, - { "awiniic", OFFANDSIZE(TWI1), 1, AWIN_IRQ_TWI1, AANY }, - { "awiniic", OFFANDSIZE(TWI2), 2, AWIN_IRQ_TWI2, AANY }, - { "awiniic", OFFANDSIZE(TWI3), 3, AWIN_IRQ_TWI3, AANY }, - { "awiniic", OFFANDSIZE(TWI4), 4, AWIN_IRQ_TWI4, AANY }, + { "awiniic", OFFANDSIZE(TWI0), 0, AWIN_IRQ_TWI0, A10|A20 }, + { "awiniic", OFFANDSIZE(TWI1), 1, AWIN_IRQ_TWI1, A10|A20 }, + { "awiniic", OFFANDSIZE(TWI2), 2, AWIN_IRQ_TWI2, A10|A20 }, + { "awiniic", OFFANDSIZE(TWI3), 3, AWIN_IRQ_TWI3, A10|A20 }, + { "awiniic", OFFANDSIZE(TWI4), 4, AWIN_IRQ_TWI4, A10|A20 }, + { "awiniic", OFFANDSIZE(TWI0), 0, AWIN_A31_IRQ_TWI0, A31 }, + { "awiniic", OFFANDSIZE(TWI1), 1, AWIN_A31_IRQ_TWI1, A31 }, + { "awiniic", OFFANDSIZE(TWI2), 2, AWIN_A31_IRQ_TWI2, A31 }, + { "awiniic", OFFANDSIZE(TWI3), 3, AWIN_A31_IRQ_TWI3, A31 }, { "spi", OFFANDSIZE(SPI0), 0, AWIN_IRQ_SPI0, AANY }, { "spi", OFFANDSIZE(SPI1), 1, AWIN_IRQ_SPI1, AANY }, { "spi", OFFANDSIZE(SPI2), 1, AWIN_IRQ_SPI2, AANY }, { "spi", OFFANDSIZE(SPI3), 3, AWIN_IRQ_SPI3, AANY }, - { "awe", OFFANDSIZE(EMAC), NOPORT, AWIN_IRQ_EMAC, AANY }, + { "awe", OFFANDSIZE(EMAC), NOPORT, AWIN_IRQ_EMAC, A10|A20 }, { "awge", OFFANDSIZE(GMAC), NOPORT, AWIN_IRQ_GMAC, A20 }, { "awge", OFFANDSIZE(GMAC), NOPORT, AWIN_A31_IRQ_GMAC, A31 }, { "awincrypto", OFFANDSIZE(SS), NOPORT, AWIN_IRQ_SS, AANY }, Index: src/sys/arch/arm/allwinner/awin_reg.h diff -u src/sys/arch/arm/allwinner/awin_reg.h:1.30 src/sys/arch/arm/allwinner/awin_reg.h:1.31 --- src/sys/arch/arm/allwinner/awin_reg.h:1.30 Sun Oct 12 13:07:45 2014 +++ src/sys/arch/arm/allwinner/awin_reg.h Sun Oct 12 14:06:18 2014 @@ -1780,4 +1780,14 @@ struct awin_mmc_idma_descriptor { #define AWIN_A31_MMC_FIFO 0x0200 +#define AWIN_A31_PIO_PB_TWI3_FUNC 2 +#define AWIN_A31_PIO_PB_TWI3_PINS 0x00000060 /* PB pins 6-5 */ + +#define AWIN_A31_PIO_PH_TWI0_FUNC 2 +#define AWIN_A31_PIO_PH_TWI0_PINS 0x0000c000 /* PH pins 15-14 */ +#define AWIN_A31_PIO_PH_TWI1_FUNC 2 +#define AWIN_A31_PIO_PH_TWI1_PINS 0x00030000 /* PH pins 17-16 */ +#define AWIN_A31_PIO_PH_TWI2_FUNC 2 +#define AWIN_A31_PIO_PH_TWI2_PINS 0x000c0000 /* PH pins 19-18 */ + #endif /* _ARM_ALLWINNER_AWIN_REG_H_ */ Index: src/sys/arch/arm/allwinner/awin_twi.c diff -u src/sys/arch/arm/allwinner/awin_twi.c:1.3 src/sys/arch/arm/allwinner/awin_twi.c:1.4 --- src/sys/arch/arm/allwinner/awin_twi.c:1.3 Thu Feb 20 21:48:38 2014 +++ src/sys/arch/arm/allwinner/awin_twi.c Sun Oct 12 14:06:18 2014 @@ -31,7 +31,7 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(1, "$NetBSD: awin_twi.c,v 1.3 2014/02/20 21:48:38 matt Exp $"); +__KERNEL_RCSID(1, "$NetBSD: awin_twi.c,v 1.4 2014/10/12 14:06:18 jmcneill Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -63,6 +63,13 @@ static const struct awin_gpio_pinset awi [4] = { 'I', AWIN_PIO_PI_TWI4_FUNC, AWIN_PIO_PI_TWI4_PINS }, }; +static const struct awin_gpio_pinset awin_twi_pinsets_a31[] = { + [0] = { 'H', AWIN_A31_PIO_PH_TWI0_FUNC, AWIN_A31_PIO_PH_TWI0_PINS }, + [1] = { 'H', AWIN_A31_PIO_PH_TWI1_FUNC, AWIN_A31_PIO_PH_TWI1_PINS }, + [2] = { 'H', AWIN_A31_PIO_PH_TWI2_FUNC, AWIN_A31_PIO_PH_TWI2_PINS }, + [3] = { 'B', AWIN_A31_PIO_PB_TWI3_FUNC, AWIN_A31_PIO_PB_TWI3_PINS }, +}; + CFATTACH_DECL_NEW(awin_twi, sizeof(struct awin_twi_softc), awin_twi_match, awin_twi_attach, NULL, NULL); @@ -71,6 +78,7 @@ awin_twi_match(device_t parent, cfdata_t { struct awinio_attach_args * const aio = aux; const struct awin_locators * const loc = &aio->aio_loc; + unsigned int port = loc->loc_port; KASSERT(!strcmp(cf->cf_name, loc->loc_name)); KASSERT(cf->cf_loc[AWINIOCF_PORT] == AWINIOCF_PORT_DEFAULT @@ -84,8 +92,13 @@ awin_twi_match(device_t parent, cfdata_t if (cf->cf_flags & 1) return 0; - if (!awin_gpio_pinset_available(&awin_twi_pinsets[loc->loc_port])) - return 0; + if (awin_chip_id() == AWIN_CHIP_ID_A31) { + if (!awin_gpio_pinset_available(&awin_twi_pinsets_a31[port])) + return 0; + } else { + if (!awin_gpio_pinset_available(&awin_twi_pinsets[port])) + return 0; + } return 1; } @@ -103,7 +116,11 @@ awin_twi_attach(device_t parent, device_ /* * Acquite the PIO pins needed for the TWI port. */ - awin_gpio_pinset_acquire(&awin_twi_pinsets[loc->loc_port]); + if (awin_chip_id() == AWIN_CHIP_ID_A31) { + awin_gpio_pinset_acquire(&awin_twi_pinsets_a31[loc->loc_port]); + } else { + awin_gpio_pinset_acquire(&awin_twi_pinsets[loc->loc_port]); + } /* * Get a bus space handle for this TWI port.