CVS commit: [netbsd-7] src/sys/arch/arm/broadcom
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
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
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
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
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
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;