Module Name: src
Committed By: rin
Date: Tue Dec 1 04:15:04 UTC 2020
Modified Files:
src/sys/arch/arm/broadcom: bcm2835_dmac.h bcm2835_emmc.c
bcm2835_sdhost.c
Log Message:
Data written to bcmdmac(4) should be in little-endian.
To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/broadcom/bcm2835_dmac.h
cvs rdiff -u -r1.38 -r1.39 src/sys/arch/arm/broadcom/bcm2835_emmc.c
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/broadcom/bcm2835_sdhost.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_dmac.h
diff -u src/sys/arch/arm/broadcom/bcm2835_dmac.h:1.4 src/sys/arch/arm/broadcom/bcm2835_dmac.h:1.5
--- src/sys/arch/arm/broadcom/bcm2835_dmac.h:1.4 Sun Aug 9 13:06:44 2015
+++ src/sys/arch/arm/broadcom/bcm2835_dmac.h Tue Dec 1 04:15:04 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: bcm2835_dmac.h,v 1.4 2015/08/09 13:06:44 mlelstv Exp $ */
+/* $NetBSD: bcm2835_dmac.h,v 1.5 2020/12/01 04:15:04 rin Exp $ */
/*-
* Copyright (c) 2014 Jared D. McNeill <[email protected]>
@@ -29,6 +29,8 @@
#ifndef BCM2835_DMAC_H
#define BCM2835_DMAC_H
+#include <sys/endian.h>
+
#define DMAC_CS(n) (0x00 + (0x100 * (n)))
#define DMAC_CS_RESET __BIT(31)
#define DMAC_CS_ABORT __BIT(30)
@@ -62,6 +64,9 @@
#define DMAC_DEBUG_FIFO_ERROR __BIT(1)
#define DMAC_DEBUG_READ_LAST_NOT_SET_ERROR __BIT(0)
+/*
+ * Byte-order is little endain.
+ */
struct bcm_dmac_conblk {
uint32_t cb_ti;
#define DMAC_TI_NO_WIDE_BURSTS __BIT(26)
@@ -108,5 +113,16 @@ void bcm_dmac_set_conblk_addr(struct bcm
int bcm_dmac_transfer(struct bcm_dmac_channel *);
void bcm_dmac_halt(struct bcm_dmac_channel *);
+static inline void
+bcm_dmac_swap_conblk(struct bcm_dmac_conblk *conblk)
+{
+
+ HTOLE32(conblk->cb_ti);
+ HTOLE32(conblk->cb_source_ad);
+ HTOLE32(conblk->cb_dest_ad);
+ HTOLE32(conblk->cb_txfr_len);
+ HTOLE32(conblk->cb_stride);
+ HTOLE32(conblk->cb_nextconbk);
+}
#endif /* !BCM2835_DMAC_H */
Index: src/sys/arch/arm/broadcom/bcm2835_emmc.c
diff -u src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.38 src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.39
--- src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.38 Fri Aug 28 13:13:55 2020
+++ src/sys/arch/arm/broadcom/bcm2835_emmc.c Tue Dec 1 04:15:04 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: bcm2835_emmc.c,v 1.38 2020/08/28 13:13:55 skrll Exp $ */
+/* $NetBSD: bcm2835_emmc.c,v 1.39 2020/12/01 04:15:04 rin Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: bcm2835_emmc.c,v 1.38 2020/08/28 13:13:55 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bcm2835_emmc.c,v 1.39 2020/12/01 04:15:04 rin Exp $");
#include "bcmdmac.h"
@@ -327,6 +327,7 @@ bcmemmc_xfer_data_dma(struct sdhc_softc
sc->sc_dmamap->dm_segs[0].ds_addr +
sizeof(struct bcm_dmac_conblk) * (seg+1);
}
+ bcm_dmac_swap_conblk(&sc->sc_cblk[seg]);
sc->sc_cblk[seg].cb_padding[0] = 0;
sc->sc_cblk[seg].cb_padding[1] = 0;
}
Index: src/sys/arch/arm/broadcom/bcm2835_sdhost.c
diff -u src/sys/arch/arm/broadcom/bcm2835_sdhost.c:1.5 src/sys/arch/arm/broadcom/bcm2835_sdhost.c:1.6
--- src/sys/arch/arm/broadcom/bcm2835_sdhost.c:1.5 Sun May 31 23:52:19 2020
+++ src/sys/arch/arm/broadcom/bcm2835_sdhost.c Tue Dec 1 04:15:04 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: bcm2835_sdhost.c,v 1.5 2020/05/31 23:52:19 thorpej Exp $ */
+/* $NetBSD: bcm2835_sdhost.c,v 1.6 2020/12/01 04:15:04 rin Exp $ */
/*-
* Copyright (c) 2017 Jared McNeill <[email protected]>
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: bcm2835_sdhost.c,v 1.5 2020/05/31 23:52:19 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bcm2835_sdhost.c,v 1.6 2020/12/01 04:15:04 rin Exp $");
#include "bcmdmac.h"
@@ -397,6 +397,7 @@ sdhost_dma_transfer(struct sdhost_softc
sc->sc_dmamap->dm_segs[0].ds_addr +
sizeof(struct bcm_dmac_conblk) * (seg+1);
}
+ bcm_dmac_swap_conblk(&sc->sc_cblk[seg]);
sc->sc_cblk[seg].cb_padding[0] = 0;
sc->sc_cblk[seg].cb_padding[1] = 0;
}