CVS commit: [netbsd-7] src/sys/arch/arm/broadcom

2018-01-03 Thread Soren Jacobsen
Module Name:src
Committed By:   snj
Date:   Wed Jan  3 20:23:43 UTC 2018

Modified Files:
src/sys/arch/arm/broadcom [netbsd-7]: bcm2835_space.c

Log Message:
Pull up following revision(s) (requested by skrll in ticket #1532):
sys/arch/arm/broadcom/bcm2835_space.c: 1.12-1.13
KNF
--
Sync with armv7_generic_space.c
- BE support (probably not needed)
- a4x subreagion/mmap support
- fix some a4x stream methods
- add UVM_KMF_COLORMATCH in bs_map when allocating KVA
- support BUS_SPACE_MAP_PREFETCHABLE


To generate a diff of this commit:
cvs rdiff -u -r1.6.10.3 -r1.6.10.4 src/sys/arch/arm/broadcom/bcm2835_space.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/broadcom/bcm2835_space.c
diff -u src/sys/arch/arm/broadcom/bcm2835_space.c:1.6.10.3 src/sys/arch/arm/broadcom/bcm2835_space.c:1.6.10.4
--- src/sys/arch/arm/broadcom/bcm2835_space.c:1.6.10.3	Fri Feb 26 22:52:53 2016
+++ src/sys/arch/arm/broadcom/bcm2835_space.c	Wed Jan  3 20:23:43 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: bcm2835_space.c,v 1.6.10.3 2016/02/26 22:52:53 snj Exp $	*/
+/*	$NetBSD: bcm2835_space.c,v 1.6.10.4 2018/01/03 20:23:43 snj Exp $	*/
 
 /*-
  * Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
 
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: bcm2835_space.c,v 1.6.10.3 2016/02/26 22:52:53 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bcm2835_space.c,v 1.6.10.4 2018/01/03 20:23:43 snj Exp $");
 
 #include 
 #include 
@@ -51,6 +51,12 @@ bs_protos(generic_armv4);
 bs_protos(a4x);
 bs_protos(bs_notimpl);
 
+#if __ARMEB__
+#define NSWAP(n)	n ## _swap
+#else
+#define NSWAP(n)	n
+#endif
+
 struct bus_space bcm2835_bs_tag = {
 	/* cookie */
 	(void *) 0,
@@ -75,38 +81,38 @@ struct bus_space bcm2835_bs_tag = {
 
 	/* read (single) */
 	generic_bs_r_1,
-	generic_armv4_bs_r_2,
-	generic_bs_r_4,
+	NSWAP(generic_armv4_bs_r_2),
+	NSWAP(generic_bs_r_4),
 	bs_notimpl_bs_r_8,
 
 	/* read multiple */
 	generic_bs_rm_1,
-	generic_armv4_bs_rm_2,
-	generic_bs_rm_4,
+	NSWAP(generic_armv4_bs_rm_2),
+	NSWAP(generic_bs_rm_4),
 	bs_notimpl_bs_rm_8,
 
 	/* read region */
 	generic_bs_rr_1,
-	generic_armv4_bs_rr_2,
-	generic_bs_rr_4,
+	NSWAP(generic_armv4_bs_rr_2),
+	NSWAP(generic_bs_rr_4),
 	bs_notimpl_bs_rr_8,
 
 	/* write (single) */
 	generic_bs_w_1,
-	generic_armv4_bs_w_2,
-	generic_bs_w_4,
+	NSWAP(generic_armv4_bs_w_2),
+	NSWAP(generic_bs_w_4),
 	bs_notimpl_bs_w_8,
 
 	/* write multiple */
 	generic_bs_wm_1,
-	generic_armv4_bs_wm_2,
-	generic_bs_wm_4,
+	NSWAP(generic_armv4_bs_wm_2),
+	NSWAP(generic_bs_wm_4),
 	bs_notimpl_bs_wm_8,
 
 	/* write region */
 	generic_bs_wr_1,
-	generic_armv4_bs_wr_2,
-	generic_bs_wr_4,
+	NSWAP(generic_armv4_bs_wr_2),
+	NSWAP(generic_bs_wr_4),
 	bs_notimpl_bs_wr_8,
 
 	/* set multiple */
@@ -117,8 +123,8 @@ struct bus_space bcm2835_bs_tag = {
 
 	/* set region */
 	generic_bs_sr_1,
-	generic_armv4_bs_sr_2,
-	bs_notimpl_bs_sr_4,
+	NSWAP(generic_armv4_bs_sr_2),
+	NSWAP(generic_bs_sr_4),
 	bs_notimpl_bs_sr_8,
 
 	/* copy */
@@ -130,38 +136,38 @@ struct bus_space bcm2835_bs_tag = {
 #ifdef __BUS_SPACE_HAS_STREAM_METHODS
 	/* read (single) */
 	generic_bs_r_1,
-	generic_armv4_bs_r_2,
-	generic_bs_r_4,
+	NSWAP(generic_armv4_bs_r_2),
+	NSWAP(generic_bs_r_4),
 	bs_notimpl_bs_r_8,
 
 	/* read multiple */
 	generic_bs_rm_1,
-	generic_armv4_bs_rm_2,
-	generic_bs_rm_4,
+	NSWAP(generic_armv4_bs_rm_2),
+	NSWAP(generic_bs_rm_4),
 	bs_notimpl_bs_rm_8,
 
 	/* read region */
 	generic_bs_rr_1,
-	generic_armv4_bs_rr_2,
-	generic_bs_rr_4,
+	NSWAP(generic_armv4_bs_rr_2),
+	NSWAP(generic_bs_rr_4),
 	bs_notimpl_bs_rr_8,
 
 	/* write (single) */
 	generic_bs_w_1,
-	generic_armv4_bs_w_2,
-	generic_bs_w_4,
+	NSWAP(generic_armv4_bs_w_2),
+	NSWAP(generic_bs_w_4),
 	bs_notimpl_bs_w_8,
 
 	/* write multiple */
 	generic_bs_wm_1,
-	generic_armv4_bs_wm_2,
-	generic_bs_wm_4,
+	NSWAP(generic_armv4_bs_wm_2),
+	NSWAP(generic_bs_wm_4),
 	bs_notimpl_bs_wm_8,
 
 	/* write region */
 	generic_bs_wr_1,
-	generic_armv4_bs_wr_2,
-	generic_bs_wr_4,
+	NSWAP(generic_armv4_bs_wr_2),
+	NSWAP(generic_bs_wr_4),
 	bs_notimpl_bs_wr_8,
 #endif
 };
@@ -173,7 +179,7 @@ struct bus_space bcm2835_a4x_bs_tag = {
 	/* mapping/unmapping */
 	bcm2835_bs_map,
 	bcm2835_bs_unmap,
-	bcm2835_bs_subregion,
+	bcm2835_a4x_bs_subregion,
 
 	/* allocation/deallocation */
 	bcm2835_bs_alloc,	/* not implemented */
@@ -183,21 +189,21 @@ struct bus_space bcm2835_a4x_bs_tag = {
 	bcm2835_bs_vaddr,
 
 	/* mmap */
-	bs_notimpl_bs_mmap,
+	bcm2835_a4x_bs_mmap,
 
 	/* barrier */
 	bcm2835_bs_barrier,
 
 	/* read (single) */
 	a4x_bs_r_1,
-	a4x_bs_r_2,
-	a4x_bs_r_4,
+	NSWAP(a4x_bs_r_2),
+	NSWAP(a4x_bs_r_4),
 	bs_notimpl_bs_r_8,
 
 	/* read multiple */
 	a4x_bs_rm_1,
-	a4x_bs_rm_2,
-	a4x_bs_rm_4,
+	NSWAP(a4x_bs_rm_2),
+	NSWAP(a4x_bs_rm_4),
 	bs_notimpl_bs_rm_8,
 
 	/* read region */
@@ -208,15 +214,16 @@ struct bus_space bcm2835_a4x_bs_tag = {
 
 	/* write (single) */
 	a4x_bs_w_1,
-	a

CVS commit: [netbsd-7] src/sys/arch/arm/broadcom

2015-03-15 Thread Soren Jacobsen
Module Name:src
Committed By:   snj
Date:   Sun Mar 15 22:55:47 UTC 2015

Modified Files:
src/sys/arch/arm/broadcom [netbsd-7]: bcm2835_vcaudio.c files.bcm2835

Log Message:
Pull up following revision(s) (requested by jmcneill in ticket #594):
sys/arch/arm/broadcom/bcm2835_vcaudio.c: revision 1.8, 1.9
sys/arch/arm/broadcom/files.bcm2835: revision 1.25
port-arm/49057: Raspberry Pi Audio volume control does not work
- Use software volume control for outputs.master/inputs.dac
- Previous volume control (for analog output only) is available on new
  outputs.headphones mixer control.
- Add an outputs.select enum to choose between "auto", "headphones", and
  "hdmi" outputs.
--
port-arm/49057: Raspberry Pi Audio volume control does not work
AUDS server messages expect volume to be expressed in units of 1/256 dB,
where we previously (incorrectly) treated it as as percentage. Map the
NetBSD audio level (0-255) to 20 steps (levels from FreeBSD bcm2835_audio.c)
and provide independent volume knobs for outputs.auto, outputs.hdmi, and
outputs.headphones.


To generate a diff of this commit:
cvs rdiff -u -r1.3.4.1 -r1.3.4.2 src/sys/arch/arm/broadcom/bcm2835_vcaudio.c
cvs rdiff -u -r1.21.2.3 -r1.21.2.4 src/sys/arch/arm/broadcom/files.bcm2835

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/broadcom/bcm2835_vcaudio.c
diff -u src/sys/arch/arm/broadcom/bcm2835_vcaudio.c:1.3.4.1 src/sys/arch/arm/broadcom/bcm2835_vcaudio.c:1.3.4.2
--- src/sys/arch/arm/broadcom/bcm2835_vcaudio.c:1.3.4.1	Sun Oct 19 15:22:00 2014
+++ src/sys/arch/arm/broadcom/bcm2835_vcaudio.c	Sun Mar 15 22:55:47 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: bcm2835_vcaudio.c,v 1.3.4.1 2014/10/19 15:22:00 martin Exp $ */
+/* $NetBSD: bcm2835_vcaudio.c,v 1.3.4.2 2015/03/15 22:55:47 snj Exp $ */
 
 /*-
  * Copyright (c) 2013 Jared D. McNeill 
@@ -31,7 +31,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: bcm2835_vcaudio.c,v 1.3.4.1 2014/10/19 15:22:00 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bcm2835_vcaudio.c,v 1.3.4.2 2015/03/15 22:55:47 snj Exp $");
 
 #include 
 #include 
@@ -44,6 +44,7 @@ __KERNEL_RCSID(0, "$NetBSD: bcm2835_vcau
 #include 
 #include 
 #include 
+#include 
 
 #include 
 #include 
@@ -51,13 +52,26 @@ __KERNEL_RCSID(0, "$NetBSD: bcm2835_vcau
 
 #include "bcm2835_vcaudioreg.h"
 
-#define vol2pct(vol)	(((vol) * 100) / 255)
+/* levels with 5% volume step */
+static int vcaudio_levels[] = {
+	-10239, -4605, -3794, -3218, -2772,
+	-2407, -2099, -1832, -1597, -1386,
+	-1195, -1021, -861, -713, -575,
+	-446, -325, -210, -102, 0,
+};
+
+#define vol2db(vol)	vcaudio_levels[((vol) * 20) >> 8]
+#define vol2vc(vol)	((uint32_t)(-(vol2db((vol)) << 8) / 100))
 
 enum {
 	VCAUDIO_OUTPUT_CLASS,
 	VCAUDIO_INPUT_CLASS,
 	VCAUDIO_OUTPUT_MASTER_VOLUME,
 	VCAUDIO_INPUT_DAC_VOLUME,
+	VCAUDIO_OUTPUT_AUTO_VOLUME,
+	VCAUDIO_OUTPUT_HEADPHONE_VOLUME,
+	VCAUDIO_OUTPUT_HDMI_VOLUME,
+	VCAUDIO_OUTPUT_SELECT,
 	VCAUDIO_ENUM_LAST,
 };
 
@@ -122,8 +136,10 @@ struct vcaudio_softc {
 
 	shortsc_peer_version;
 
-	intsc_volume;
+	intsc_hwvol[3];
 	enum vcaudio_dest		sc_dest;
+
+	uint8_tsc_swvol;
 };
 
 static int	vcaudio_match(device_t, cfdata_t, void *);
@@ -163,6 +179,10 @@ static int	vcaudio_trigger_input(void *,
 
 static void	vcaudio_get_locks(void *, kmutex_t **, kmutex_t **);
 
+static stream_filter_t *vcaudio_swvol_filter(struct audio_softc *,
+const audio_params_t *, const audio_params_t *);
+static void	vcaudio_swvol_dtor(stream_filter_t *);
+
 static const struct audio_hw_if vcaudio_hw_if = {
 	.open = vcaudio_open,
 	.close = vcaudio_close,
@@ -257,7 +277,10 @@ vcaudio_init(struct vcaudio_softc *sc)
 	VC_AUDIO_MSG_T msg;
 	int error;
 
-	sc->sc_volume = 128;
+	sc->sc_swvol = 255;
+	sc->sc_hwvol[VCAUDIO_DEST_AUTO] = 255;
+	sc->sc_hwvol[VCAUDIO_DEST_HP] = 255;
+	sc->sc_hwvol[VCAUDIO_DEST_HDMI] = 255;
 	sc->sc_dest = VCAUDIO_DEST_AUTO;
 
 	sc->sc_format.mode = AUMODE_PLAY|AUMODE_RECORD;
@@ -342,8 +365,8 @@ vcaudio_init(struct vcaudio_softc *sc)
 
 	memset(&msg, 0, sizeof(msg));
 	msg.type = VC_AUDIO_MSG_TYPE_CONTROL;
-	msg.u.control.volume = vol2pct(sc->sc_volume);
-	msg.u.control.dest = VCAUDIO_DEST_AUTO;
+	msg.u.control.volume = vol2vc(sc->sc_hwvol[sc->sc_dest]);
+	msg.u.control.dest = sc->sc_dest;
 	error = vcaudio_msg_sync(sc, &msg, sizeof(msg));
 	if (error) {
 		aprint_error_dev(sc->sc_dev,
@@ -585,6 +608,9 @@ vcaudio_set_params(void *priv, int setmo
 		AUMODE_PLAY, play, true, pfil);
 		if (index < 0)
 			return EINVAL;
+		if (pfil->req_size > 0)
+			play = &pfil->filters[0].param;
+		pfil->prepend(pfil, vcaudio_swvol_filter, play);
 	}
 
 	return 0;
@@ -629,33 +655,59 @@ vcaudio_halt_input(void *priv)
 }
 
 static int
-vcaudio_set_port(void *priv, mixer_ctrl_t *mc)
+vcaudio_set_volume(struct vcaudio_softc *sc, enum vcaudio_dest dest,
+int hwvol)
 {
-	struct vcaudio_softc *sc = priv;
 	VC_AUDIO_MSG_T msg;
 	int

CVS commit: [netbsd-7] src/sys/arch/arm/broadcom

2014-12-17 Thread Martin Husemann
Module Name:src
Committed By:   martin
Date:   Wed Dec 17 18:47:34 UTC 2014

Modified Files:
src/sys/arch/arm/broadcom [netbsd-7]: bcm2835_tmr.c

Log Message:
Pull up following revision(s) (requested by nat in ticket #333):
sys/arch/arm/broadcom/bcm2835_tmr.c: revision 1.4
Clear status of BCM2835_STIMER_M3 only as timer comparison reg 0 and 2
are used by the VideoCore on Raspberry Pi.  This fixes audio playback.
Addresses PR 48805.
This commit was approved by skrll@


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.3.12.1 src/sys/arch/arm/broadcom/bcm2835_tmr.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/broadcom/bcm2835_tmr.c
diff -u src/sys/arch/arm/broadcom/bcm2835_tmr.c:1.3 src/sys/arch/arm/broadcom/bcm2835_tmr.c:1.3.12.1
--- src/sys/arch/arm/broadcom/bcm2835_tmr.c:1.3	Tue Jan  8 12:13:58 2013
+++ src/sys/arch/arm/broadcom/bcm2835_tmr.c	Wed Dec 17 18:47:34 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: bcm2835_tmr.c,v 1.3 2013/01/08 12:13:58 skrll Exp $	*/
+/*	$NetBSD: bcm2835_tmr.c,v 1.3.12.1 2014/12/17 18:47:34 martin Exp $	*/
 
 /*-
  * Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: bcm2835_tmr.c,v 1.3 2013/01/08 12:13:58 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bcm2835_tmr.c,v 1.3.12.1 2014/12/17 18:47:34 martin Exp $");
 
 #include 
 #include 
@@ -201,7 +201,7 @@ clockhandler(void *arg)
 	if (!(status & BCM2835_STIMER_M3))
 		return 0;
 
-	bus_space_write_4(sc->sc_iot, sc->sc_ioh, BCM2835_STIMER_CS, status);
+	bus_space_write_4(sc->sc_iot, sc->sc_ioh, BCM2835_STIMER_CS, BCM2835_STIMER_M3);
 
 	hardclock(frame);
 



CVS commit: [netbsd-7] src/sys/arch/arm/broadcom

2014-12-15 Thread Martin Husemann
Module Name:src
Committed By:   martin
Date:   Mon Dec 15 11:53:58 UTC 2014

Modified Files:
src/sys/arch/arm/broadcom [netbsd-7]: bcm2835_emmc.c

Log Message:
Pull up following revision(s) (requested by mlelstv in ticket #328):
sys/arch/arm/broadcom/bcm2835_emmc.c: revision 1.21
Don't pipeline any DMA writes to eMMC.
Fixes PR/49463.


To generate a diff of this commit:
cvs rdiff -u -r1.9.4.3 -r1.9.4.4 src/sys/arch/arm/broadcom/bcm2835_emmc.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/broadcom/bcm2835_emmc.c
diff -u src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.9.4.3 src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.9.4.4
--- src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.9.4.3	Tue Nov 25 15:49:27 2014
+++ src/sys/arch/arm/broadcom/bcm2835_emmc.c	Mon Dec 15 11:53:58 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: bcm2835_emmc.c,v 1.9.4.3 2014/11/25 15:49:27 martin Exp $	*/
+/*	$NetBSD: bcm2835_emmc.c,v 1.9.4.4 2014/12/15 11:53:58 martin Exp $	*/
 
 /*-
  * Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: bcm2835_emmc.c,v 1.9.4.3 2014/11/25 15:49:27 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bcm2835_emmc.c,v 1.9.4.4 2014/12/15 11:53:58 martin Exp $");
 
 #include "bcmdmac.h"
 
@@ -278,6 +278,7 @@ bcmemmc_xfer_data_dma(struct sdhc_softc 
 			if ((sc->sc_cblk[seg].cb_txfr_len & 0xf) == 0)
 sc->sc_cblk[seg].cb_ti |= DMAC_TI_SRC_WIDTH;
 			sc->sc_cblk[seg].cb_ti |= DMAC_TI_DEST_DREQ;
+			sc->sc_cblk[seg].cb_ti |= DMAC_TI_WAIT_RESP;
 			sc->sc_cblk[seg].cb_source_ad =
 			cmd->c_dmamap->dm_segs[seg].ds_addr;
 			sc->sc_cblk[seg].cb_dest_ad =
@@ -286,7 +287,6 @@ bcmemmc_xfer_data_dma(struct sdhc_softc 
 		}
 		sc->sc_cblk[seg].cb_stride = 0;
 		if (seg == cmd->c_dmamap->dm_nsegs - 1) {
-			sc->sc_cblk[seg].cb_ti |= DMAC_TI_WAIT_RESP;
 			sc->sc_cblk[seg].cb_ti |= DMAC_TI_INTEN;
 			sc->sc_cblk[seg].cb_nextconbk = 0;
 		} else {



CVS commit: [netbsd-7] src/sys/arch/arm/broadcom

2014-11-25 Thread Martin Husemann
Module Name:src
Committed By:   martin
Date:   Tue Nov 25 15:49:28 UTC 2014

Modified Files:
src/sys/arch/arm/broadcom [netbsd-7]: bcm2835_emmc.c

Log Message:
Pull up following revision(s) (requested by skrll in ticket #265):
sys/arch/arm/broadcom/bcm2835_emmc.c: revision 1.20
Only use 128-bit mode when the transfer is a multiple of this.
>From Jared (the arm periph guy)


To generate a diff of this commit:
cvs rdiff -u -r1.9.4.2 -r1.9.4.3 src/sys/arch/arm/broadcom/bcm2835_emmc.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/broadcom/bcm2835_emmc.c
diff -u src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.9.4.2 src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.9.4.3
--- src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.9.4.2	Sun Oct  5 20:00:54 2014
+++ src/sys/arch/arm/broadcom/bcm2835_emmc.c	Tue Nov 25 15:49:27 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: bcm2835_emmc.c,v 1.9.4.2 2014/10/05 20:00:54 martin Exp $	*/
+/*	$NetBSD: bcm2835_emmc.c,v 1.9.4.3 2014/11/25 15:49:27 martin Exp $	*/
 
 /*-
  * Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: bcm2835_emmc.c,v 1.9.4.2 2014/10/05 20:00:54 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bcm2835_emmc.c,v 1.9.4.3 2014/11/25 15:49:27 martin Exp $");
 
 #include "bcmdmac.h"
 
@@ -248,9 +248,21 @@ bcmemmc_xfer_data_dma(struct sdhc_softc 
 	for (seg = 0; seg < cmd->c_dmamap->dm_nsegs; seg++) {
 		sc->sc_cblk[seg].cb_ti =
 		__SHIFTIN(11, DMAC_TI_PERMAP); /* e.MMC */
+		sc->sc_cblk[seg].cb_txfr_len =
+		cmd->c_dmamap->dm_segs[seg].ds_len;
+		/*
+		 * All transfers are assumed to be multiples of 32-bits.
+		 */
+		KASSERTMSG((sc->sc_cblk[seg].cb_txfr_len & 0x3) == 0,
+		"seg %zu len %d", seg, sc->sc_cblk[seg].cb_txfr_len);
 		if (ISSET(cmd->c_flags, SCF_CMD_READ)) {
 			sc->sc_cblk[seg].cb_ti |= DMAC_TI_DEST_INC;
-			sc->sc_cblk[seg].cb_ti |= DMAC_TI_DEST_WIDTH;
+			/*
+			 * Use 128-bit mode if transfer is a multiple of
+			 * 16-bytes.
+			 */
+			if ((sc->sc_cblk[seg].cb_txfr_len & 0xf) == 0)
+sc->sc_cblk[seg].cb_ti |= DMAC_TI_DEST_WIDTH;
 			sc->sc_cblk[seg].cb_ti |= DMAC_TI_SRC_DREQ;
 			sc->sc_cblk[seg].cb_source_ad =
 			BCM2835_PERIPHERALS_TO_BUS(sc->sc_physaddr +
@@ -259,7 +271,12 @@ bcmemmc_xfer_data_dma(struct sdhc_softc 
 			cmd->c_dmamap->dm_segs[seg].ds_addr;
 		} else {
 			sc->sc_cblk[seg].cb_ti |= DMAC_TI_SRC_INC;
-			sc->sc_cblk[seg].cb_ti |= DMAC_TI_SRC_WIDTH;
+			/*
+			 * Use 128-bit mode if transfer is a multiple of
+			 * 16-bytes.
+			 */
+			if ((sc->sc_cblk[seg].cb_txfr_len & 0xf) == 0)
+sc->sc_cblk[seg].cb_ti |= DMAC_TI_SRC_WIDTH;
 			sc->sc_cblk[seg].cb_ti |= DMAC_TI_DEST_DREQ;
 			sc->sc_cblk[seg].cb_source_ad =
 			cmd->c_dmamap->dm_segs[seg].ds_addr;
@@ -267,8 +284,6 @@ bcmemmc_xfer_data_dma(struct sdhc_softc 
 			BCM2835_PERIPHERALS_TO_BUS(sc->sc_physaddr +
 			SDHC_DATA);
 		}
-		sc->sc_cblk[seg].cb_txfr_len =
-		cmd->c_dmamap->dm_segs[seg].ds_len;
 		sc->sc_cblk[seg].cb_stride = 0;
 		if (seg == cmd->c_dmamap->dm_nsegs - 1) {
 			sc->sc_cblk[seg].cb_ti |= DMAC_TI_WAIT_RESP;



CVS commit: [netbsd-7] src/sys/arch/arm/broadcom

2014-09-11 Thread Martin Husemann
Module Name:src
Committed By:   martin
Date:   Thu Sep 11 13:46:49 UTC 2014

Modified Files:
src/sys/arch/arm/broadcom [netbsd-7]: bcm2835_bsc.c

Log Message:
Pull up following revision(s) (requested by skrll in ticket #90):
sys/arch/arm/broadcom/bcm2835_bsc.c: revision 1.3
Initialise bsciichist only once, otherwise the kern_histories list
never ends.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.2.4.1 src/sys/arch/arm/broadcom/bcm2835_bsc.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/broadcom/bcm2835_bsc.c
diff -u src/sys/arch/arm/broadcom/bcm2835_bsc.c:1.2 src/sys/arch/arm/broadcom/bcm2835_bsc.c:1.2.4.1
--- src/sys/arch/arm/broadcom/bcm2835_bsc.c:1.2	Thu Mar 20 05:39:11 2014
+++ src/sys/arch/arm/broadcom/bcm2835_bsc.c	Thu Sep 11 13:46:49 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: bcm2835_bsc.c,v 1.2 2014/03/20 05:39:11 ozaki-r Exp $	*/
+/*	$NetBSD: bcm2835_bsc.c,v 1.2.4.1 2014/09/11 13:46:49 martin Exp $	*/
 
 /*
  * Copyright (c) 2012 Jonathan A. Kollasch
@@ -27,14 +27,15 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: bcm2835_bsc.c,v 1.2 2014/03/20 05:39:11 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bcm2835_bsc.c,v 1.2.4.1 2014/09/11 13:46:49 martin Exp $");
 
 #include 
-#include 
-#include 
-#include 
 #include 
+#include 
 #include 
+#include 
+#include 
+#include 
 
 #include 
 
@@ -48,7 +49,6 @@ __KERNEL_RCSID(0, "$NetBSD: bcm2835_bsc.
 #endif
 #include 
 
-KERNHIST_DECL(bsciichist);
 KERNHIST_DEFINE(bsciichist);
 
 struct bsciic_softc {
@@ -75,6 +75,15 @@ CFATTACH_DECL_NEW(bsciic, sizeof(struct 
 bsciic_match, bsciic_attach, NULL, NULL);
 
 static int
+bsciic_init(void)
+{
+
+	KERNHIST_INIT(bsciichist, 512);
+
+	return 0;
+}
+
+static int
 bsciic_match(device_t parent, cfdata_t match, void *aux)
 {
 	struct amba_attach_args * const aaa = aux;
@@ -92,6 +101,7 @@ bsciic_attach(device_t parent, device_t 
 	struct amba_attach_args * const aaa = aux;
 	struct i2cbus_attach_args iba;
 	u_int bscunit = ~0;
+	static ONCE_DECL(control);
 
 	switch (aaa->aaa_addr) {
 	case BCM2835_BSC0_BASE:
@@ -105,7 +115,7 @@ bsciic_attach(device_t parent, device_t 
 	aprint_naive("\n");
 	aprint_normal(": BSC%u\n", bscunit);
 
-	KERNHIST_INIT(bsciichist, 512);
+	RUN_ONCE(&control, bsciic_init);
 
 	sc->sc_dev = self;