From: Stefan Roese <sr@denx.de>
To: u-boot@lists.denx.de
Cc: trini@konsulko.com, Rasmus Villemoes <rasmus.villemoes@prevas.dk>,
sjg@chromium.org, Wolfgang Denk <wd@denx.de>
Subject: [PATCH v3 2/3] arm64: memset-arm64: Use simple memset when cache is disabled
Date: Wed, 11 Aug 2021 16:02:41 +0200 [thread overview]
Message-ID: <20210811140242.1942483-3-sr@denx.de> (raw)
In-Reply-To: <20210811140242.1942483-1-sr@denx.de>
The optimized memset uses the dc opcode, which causes problems when the
cache is disabled. This patch adds a check if the cache is disabled and
uses a very simple memset implementation in this case. Otherwise the
optimized version is used.
Signed-off-by: Stefan Roese <sr@denx.de>
---
(no changes since v2)
Changes in v2:
- New patch
arch/arm/lib/memset-arm64.S | 30 ++++++++++++++++++++++++++++++
1 file changed, 30 insertions(+)
diff --git a/arch/arm/lib/memset-arm64.S b/arch/arm/lib/memset-arm64.S
index 710f6f582cad..a474dcb53c83 100644
--- a/arch/arm/lib/memset-arm64.S
+++ b/arch/arm/lib/memset-arm64.S
@@ -11,6 +11,7 @@
*
*/
+#include <asm/macro.h>
#include "asmdefs.h"
#define dstin x0
@@ -25,6 +26,35 @@ ENTRY (memset)
PTR_ARG (0)
SIZE_ARG (2)
+ /*
+ * The optimized memset uses the dc opcode, which causes problems
+ * when the cache is disabled. Let's check if the cache is disabled
+ * and use a very simple memset implementation in this case. Otherwise
+ * jump to the optimized version.
+ */
+ switch_el x6, 3f, 2f, 1f
+3: mrs x6, sctlr_el3
+ b 0f
+2: mrs x6, sctlr_el2
+ b 0f
+1: mrs x6, sctlr_el1
+0:
+ tst x6, #CR_C
+ bne 9f
+
+ /*
+ * A very "simple" memset implementation without the use of the
+ * dc opcode. Can be run with caches disabled.
+ */
+ mov x3, #0x0
+4: strb w1, [x0, x3]
+ add x3, x3, #0x1
+ cmp x2, x3
+ bne 4b
+ ret
+9:
+
+ /* Here the optimized memset version starts */
dup v0.16B, valw
add dstend, dstin, count
--
2.32.0
next prev parent reply other threads:[~2021-08-11 14:03 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-11 14:02 [PATCH v3 0/3] arm64: Add optimized memset/memcpy/memove functions Stefan Roese
2021-08-11 14:02 ` [PATCH v3 1/3] arm64: arch/arm/lib: Add optimized memset/memcpy/memmove functions Stefan Roese
2021-08-11 14:02 ` Stefan Roese [this message]
2021-08-11 14:02 ` [PATCH v3 3/3] arm64: Kconfig: Enable usage of optimized memset/memcpy/memmove Stefan Roese
2021-08-11 14:25 ` [PATCH v3 0/3] arm64: Add optimized memset/memcpy/memove functions Tom Rini
2021-08-11 14:28 ` Stefan Roese
2021-08-12 8:43 ` Stefan Roese
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210811140242.1942483-3-sr@denx.de \
--to=sr@denx.de \
--cc=rasmus.villemoes@prevas.dk \
--cc=sjg@chromium.org \
--cc=trini@konsulko.com \
--cc=u-boot@lists.denx.de \
--cc=wd@denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.