Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch/arm/cortex need to swap on big endian machines.
details: https://anonhg.NetBSD.org/src/rev/73b3dd03e6c0
branches: trunk
changeset: 944244:73b3dd03e6c0
user: ryo <ryo%NetBSD.org@localhost>
date: Thu Sep 24 08:50:09 2020 +0000
description:
need to swap on big endian machines.
"The ITS command queue uses a little endian memory order model." (GIC Architecture Specification)
diffstat:
sys/arch/arm/cortex/gicv3_its.c | 10 ++++++++--
1 files changed, 8 insertions(+), 2 deletions(-)
diffs (32 lines):
diff -r edff2f903540 -r 73b3dd03e6c0 sys/arch/arm/cortex/gicv3_its.c
--- a/sys/arch/arm/cortex/gicv3_its.c Thu Sep 24 08:23:29 2020 +0000
+++ b/sys/arch/arm/cortex/gicv3_its.c Thu Sep 24 08:50:09 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: gicv3_its.c,v 1.27 2020/02/13 02:12:06 jmcneill Exp $ */
+/* $NetBSD: gicv3_its.c,v 1.28 2020/09/24 08:50:09 ryo Exp $ */
/*-
* Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -32,7 +32,7 @@
#define _INTR_PRIVATE
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: gicv3_its.c,v 1.27 2020/02/13 02:12:06 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: gicv3_its.c,v 1.28 2020/09/24 08:50:09 ryo Exp $");
#include <sys/param.h>
#include <sys/kmem.h>
@@ -118,7 +118,13 @@
cwriter = gits_read_8(its, GITS_CWRITER);
woff = cwriter & GITS_CWRITER_Offset;
+#if _BYTE_ORDER == _BIG_ENDIAN
+ uint64_t *dw = (uint64_t *)(its->its_cmd.base + woff);
+ for (int i = 0; i < __arraycount(cmd->dw); i++)
+ dw[i] = htole64(cmd->dw[i]);
+#else
memcpy(its->its_cmd.base + woff, cmd->dw, sizeof(cmd->dw));
+#endif
bus_dmamap_sync(its->its_dmat, its->its_cmd.map, woff, sizeof(cmd->dw), BUS_DMASYNC_PREWRITE);
woff += sizeof(cmd->dw);
Home |
Main Index |
Thread Index |
Old Index