Revert "libc/memset: Implement function in assembler"

This reverts commit e7d344de01ad11b856233634717aafe9312697e4.
 This reverts the patch https://review.trustedfirmware.org/c/TF-A/trusted-firmware-a/+/5313 due to a timing issue with the merge.  The merge occurred at the same time as the additional comments and thusly were were not seen until the merge was done.  This reverts the change and additional patches from Alexei will follow to address the concerns expressed in the orignal patch.

Change-Id: Iae5f6403c93ac13ceeda29463883fcd4c437f2b7
diff --git a/lib/libc/aarch32/memset.S b/lib/libc/aarch32/memset.S
deleted file mode 100644
index 0b69897..0000000
--- a/lib/libc/aarch32/memset.S
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 2020, Arm Limited. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#include <asm_macros.S>
-
-	.syntax unified
-	.global	memset
-
-/* -----------------------------------------------------------------------
- * void memset(void *dst, int val, size_t count)
- *
- * Copy the value of 'val' (converted to an unsigned char) into
- * each of the first 'count' characters of the object pointed to by 'dst'.
- *
- * Returns the value of 'dst'.
- * -----------------------------------------------------------------------
- */
-func memset
-	cmp	r2, #0
-	bxeq	lr			/* return if 'count' = 0 */
-	mov	r12, r0			/* keep r0 */
-	tst	r0, #3
-	beq	aligned			/* 4-bytes aligned */
-
-	/* Unaligned 'dst' */
-unaligned:
-	strb	r1, [r12], #1
-	subs	r2, r2, #1
-	bxeq	lr			/* return if 0 */
-	tst	r12, #3
-	bne	unaligned		/* continue while unaligned */
-
-	/* 4-bytes aligned */
-aligned:bfi	r1, r1, #8, #8		/* propagate 'val' */
-	bfi	r1, r1, #16, #16
-
-	mov	r3, r1
-
-	cmp	r2, #16
-	blo	less_16
-
-	push	{r4, lr}
-	mov	r4, r1
-	mov	lr, r1
-
-	cmp	r2, #32
-	blo	less_32
-
-write_32:
-	stmia	r12!, {r1, r3, r4, lr}	/* write 32 bytes in a loop */
-	stmia	r12!, {r1, r3, r4, lr}
-	subs	r2, r2, #32
-	popeq	{r4, pc}		/* return if 0 */
-	cmp	r2, #32
-	bhs	write_32
-
-less_32:cmp	r2, #16
-	stmiahs	r12!, {r1, r3, r4, lr}	/* write 16 bytes */
-	popeq	{r4, pc}		/* return if 16 */
-	pop	{r4, lr}
-
-less_16:lsls	r2, r2, #29		/* C = r2[3]; N = r2[2]; Z = r2[2:0] */
-	stmiacs	r12!, {r1, r3}		/* write 8 bytes */
-	bxeq	lr			/* return if 8 */
-	strmi	r1, [r12], #4		/* write 4 bytes */
-	lsls	r2, r2, #1		/* N = r2[1]; Z = r2[0] */
-	strhmi	r1, [r12], #2		/* write 2 bytes */
-	strbne	r1, [r12]		/* write 1 byte */
-	bx	lr
-
-endfunc memset
diff --git a/lib/libc/aarch64/memset.S b/lib/libc/aarch64/memset.S
deleted file mode 100644
index 8c65760..0000000
--- a/lib/libc/aarch64/memset.S
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (c) 2020, Arm Limited. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#include <asm_macros.S>
-
-	.global	memset
-
-/* -----------------------------------------------------------------------
- * void memset(void *dst, int val, size_t count)
- *
- * Copy the value of 'val' (converted to an unsigned char) into
- * each of the first 'count' characters of the object pointed to by 'dst'.
- *
- * Returns the value of 'dst'.
- * -----------------------------------------------------------------------
- */
-func memset
-	cbz	w2, exit		/* exit if 'count' = 0 */
-	mov	x3, x0			/* keep x0 */
-	tst	x0, #7
-	b.eq	aligned			/* 8-bytes aligned */
-
-	/* Unaligned 'dst' */
-unaligned:
-	strb	w1, [x3], #1
-	subs	w2, w2, #1
-	b.eq	exit			/* exit if 0 */
-	tst	x3, #7
-	b.ne	unaligned		/* continue while unaligned */
-
-	/* 8-bytes aligned */
-aligned:cbz	x1, x1_zero
-	bfi	w1, w1, #8, #8		/* propagate 'val' */
-	bfi	w1, w1, #16, #16
-	bfi	x1, x1, #32, #32
-
-x1_zero:ands	w4, w2, #~0x3f
-	b.eq	less_64
-
-write_64:
-	.rept	4
-	stp	x1, x1, [x3], #16	/* write 64 bytes in a loop */
-	.endr
-	subs	w4, w4, #64
-	b.ne	write_64
-	ands	w2, w2, #0x3f
-	b.eq	exit			/* exit if 0 */
-
-less_64:tbz	w2, #5, less_32		/* < 32 bytes */
-	stp	x1, x1, [x3], #16	/* write 32 bytes */
-	stp	x1, x1, [x3], #16
-	ands	w2, w2, #0x1f
-	b.eq	exit
-
-less_32:tbz	w2, #4, less_16		/* < 16 bytes */
-	stp	x1, x1, [x3], #16	/* write 16 bytes */
-	ands	w2, w2, #0xf
-	b.eq	exit
-
-less_16:tbz	w2, #3, less_8		/* < 8 bytes */
-	str	x1, [x3], #8		/* write 8 bytes */
-	ands	w2, w2, #7
-	b.eq	exit
-
-less_8:	tbz	w2, #2, less_4		/* < 4 bytes */
-	str	w1, [x3], #4		/* write 4 bytes */
-	ands	w2, w2, #3
-	b.eq	exit
-
-less_4:	tbz	w2, #1, less_2		/* < 2 bytes */
-	strh	w1, [x3], #2		/* write 2 bytes */
-	tbz	w2, #0, exit
-less_2:	strb	w1, [x3]		/* write 1 byte */
-exit:	ret
-
-endfunc	memset
diff --git a/lib/libc/libc.mk b/lib/libc/libc.mk
index 90a2a1e..93d30d0 100644
--- a/lib/libc/libc.mk
+++ b/lib/libc/libc.mk
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2016-2020, ARM Limited and Contributors. All rights reserved.
+# Copyright (c) 2016-2019, ARM Limited and Contributors. All rights reserved.
 #
 # SPDX-License-Identifier: BSD-3-Clause
 #
@@ -13,6 +13,7 @@
 			memcpy.c			\
 			memmove.c			\
 			memrchr.c			\
+			memset.c			\
 			printf.c			\
 			putchar.c			\
 			puts.c				\
@@ -27,14 +28,8 @@
 
 ifeq (${ARCH},aarch64)
 LIBC_SRCS	+=	$(addprefix lib/libc/aarch64/,	\
-			memset.S			\
 			setjmp.S)
 endif
 
-ifeq (${ARCH},aarch32)
-LIBC_SRCS	+=	$(addprefix lib/libc/aarch32/,	\
-			memset.S)
-endif
-
 INCLUDES	+=	-Iinclude/lib/libc		\
 			-Iinclude/lib/libc/$(ARCH)	\
diff --git a/lib/libc/memset.c b/lib/libc/memset.c
new file mode 100644
index 0000000..d8007d8
--- /dev/null
+++ b/lib/libc/memset.c
@@ -0,0 +1,18 @@
+/*
+ * Copyright (c) 2013-2019, ARM Limited and Contributors. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include <stddef.h>
+#include <string.h>
+
+void *memset(void *dst, int val, size_t count)
+{
+	char *ptr = dst;
+
+	while (count--)
+		*ptr++ = val;
+
+	return dst;
+}
diff --git a/plat/nvidia/tegra/platform.mk b/plat/nvidia/tegra/platform.mk
index 5cac46f..a4724e6 100644
--- a/plat/nvidia/tegra/platform.mk
+++ b/plat/nvidia/tegra/platform.mk
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2015-2020, ARM Limited and Contributors. All rights reserved.
+# Copyright (c) 2015-2019, ARM Limited and Contributors. All rights reserved.
 # Copyright (c) 2020, NVIDIA Corporation. All rights reserved.
 #
 # SPDX-License-Identifier: BSD-3-Clause
@@ -69,11 +69,11 @@
 
 # override with necessary libc files for the Tegra platform
 override LIBC_SRCS :=	$(addprefix lib/libc/,		\
-			aarch64/memset.S		\
 			aarch64/setjmp.S		\
 			assert.c			\
 			memcpy.c			\
 			memmove.c			\
+			memset.c			\
 			printf.c			\
 			putchar.c			\
 			strlen.c			\