All of lore.kernel.org
 help / color / mirror / Atom feed
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


  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.