diff --git a/tests/drivers/dma/loop_transfer/src/test_dma_loop.c b/tests/drivers/dma/loop_transfer/src/test_dma_loop.c
index 59dad03..63bfcf8 100644
--- a/tests/drivers/dma/loop_transfer/src/test_dma_loop.c
+++ b/tests/drivers/dma/loop_transfer/src/test_dma_loop.c
@@ -31,42 +31,18 @@
 /* in millisecond */
 #define SLEEPTIME 250
 
-#define DATA                                                                                       \
-	"The quick brown fox jumps over the lazy dog\n"                                            \
-	"The quick brown fox jumps over the lazy dog\n"                                            \
-	"The quick brown fox jumps over the lazy dog\n"                                            \
-	"The quick brown fox jumps over the lazy dog\n"                                            \
-	"The quick brown fox jumps over the lazy dog\n"                                            \
-	"The quick brown fox jumps over the lazy dog\n"                                            \
-	"The quick brown fox jumps over the lazy dog\n"                                            \
-	"The quick brown fox jumps over the lazy dog\n"                                            \
-	"The quick brown fox jumps over the lazy dog\n"                                            \
-	"The quick brown fox jumps over the lazy dog\n"                                            \
-	"The quick brown fox jumps over the lazy dog\n"                                            \
-	"The quick brown fox jumps over the lazy dog\n"                                            \
-	"The quick brown fox jumps over the lazy dog\n"                                            \
-	"The quick brown fox jumps over the lazy dog\n"                                            \
-	"The quick brown fox jumps over the lazy dog\n"                                            \
-	"The quick brown fox jumps over the lazy dog\n"                                            \
-	"The quick brown fox jumps over the lazy dog\n"                                            \
-	"The quick brown fox jumps over the lazy dog\n"                                            \
-	"The quick brown fox jumps over the lazy dog\n"                                            \
-	"The quick brown fox jumps over the lazy dog\n"                                            \
-	"The quick brown fox jumps over the lazy dog"
-
 #define TRANSFER_LOOPS (4)
-#define RX_BUFF_SIZE (1024)
+#define XFER_SIZE (8192)
 
 #if CONFIG_NOCACHE_MEMORY
-static const char TX_DATA[] = DATA;
-static __aligned(32) char tx_data[1024] __used
+static __aligned(32) uint8_t tx_data[XFER_SIZE] __used
 	__attribute__((__section__(CONFIG_DMA_LOOP_TRANSFER_SRAM_SECTION)));
-static __aligned(32) char rx_data[TRANSFER_LOOPS][RX_BUFF_SIZE] __used
+static __aligned(32) uint8_t rx_data[TRANSFER_LOOPS][XFER_SIZE] __used
 	__attribute__((__section__(CONFIG_DMA_LOOP_TRANSFER_SRAM_SECTION".dma")));
 #else
 /* this src memory shall be in RAM to support usingas a DMA source pointer.*/
-static char tx_data[] = DATA;
-static __aligned(16) char rx_data[TRANSFER_LOOPS][RX_BUFF_SIZE] = { { 0 } };
+static uint8_t tx_data[XFER_SIZE];
+static __aligned(16) uint8_t rx_data[TRANSFER_LOOPS][XFER_SIZE] = { { 0 } };
 #endif
 
 volatile uint32_t transfer_count;
@@ -79,7 +55,7 @@
 {
 	transfer_count++;
 	if (transfer_count < TRANSFER_LOOPS) {
-		dma_block_cfg.block_size = strlen(tx_data);
+		dma_block_cfg.block_size = sizeof(tx_data);
 #ifdef CONFIG_DMA_64BIT
 		dma_block_cfg.source_address = (uint64_t)tx_data;
 		dma_block_cfg.dest_address = (uint64_t)rx_data[transfer_count];
@@ -125,10 +101,11 @@
 	test_case_id = 0;
 	TC_PRINT("DMA memory to memory transfer started\n");
 
-#if CONFIG_NOCACHE_MEMORY
 	memset(tx_data, 0, sizeof(tx_data));
-	memcpy(tx_data, TX_DATA, sizeof(TX_DATA));
-#endif
+
+	for (int i = 0; i < XFER_SIZE; i++) {
+		tx_data[i] = i;
+	}
 
 	memset(rx_data, 0, sizeof(rx_data));
 
@@ -164,7 +141,7 @@
 	transfer_count = 0;
 	done = 0;
 	TC_PRINT("Starting the transfer on channel %d and waiting for 1 second\n", chan_id);
-	dma_block_cfg.block_size = strlen(tx_data);
+	dma_block_cfg.block_size = sizeof(tx_data);
 #ifdef CONFIG_DMA_64BIT
 	dma_block_cfg.source_address = (uint64_t)tx_data;
 	dma_block_cfg.dest_address = (uint64_t)rx_data[transfer_count];
@@ -197,8 +174,8 @@
 	TC_PRINT("Each RX buffer should contain the full TX buffer string.\n");
 
 	for (int i = 0; i < TRANSFER_LOOPS; i++) {
-		TC_PRINT("RX data Loop %d: %s\n", i, rx_data[i]);
-		if (strncmp(tx_data, rx_data[i], sizeof(rx_data[i])) != 0) {
+		TC_PRINT("RX data Loop %d\n", i);
+		if (memcmp(tx_data, rx_data[i], XFER_SIZE)) {
 			return TC_FAIL;
 		}
 	}
@@ -215,10 +192,11 @@
 	test_case_id = 1;
 	TC_PRINT("DMA memory to memory transfer started\n");
 
-#if CONFIG_NOCACHE_MEMORY
 	memset(tx_data, 0, sizeof(tx_data));
-	memcpy(tx_data, TX_DATA, sizeof(TX_DATA));
-#endif
+
+	for (int i = 0; i < XFER_SIZE; i++) {
+		tx_data[i] = i;
+	}
 
 	memset(rx_data, 0, sizeof(rx_data));
 
@@ -254,7 +232,7 @@
 	transfer_count = 0;
 	done = 0;
 	TC_PRINT("Starting the transfer on channel %d and waiting for 1 second\n", chan_id);
-	dma_block_cfg.block_size = strlen(tx_data);
+	dma_block_cfg.block_size = sizeof(tx_data);
 #ifdef CONFIG_DMA_64BIT
 	dma_block_cfg.source_address = (uint64_t)tx_data;
 	dma_block_cfg.dest_address = (uint64_t)rx_data[transfer_count];
@@ -340,8 +318,8 @@
 	TC_PRINT("Each RX buffer should contain the full TX buffer string.\n");
 
 	for (int i = 0; i < TRANSFER_LOOPS; i++) {
-		TC_PRINT("RX data Loop %d: %s\n", i, rx_data[i]);
-		if (strncmp(tx_data, rx_data[i], sizeof(rx_data[i])) != 0) {
+		TC_PRINT("RX data Loop %d\n", i);
+		if (memcmp(tx_data, rx_data[i], XFER_SIZE)) {
 			return TC_FAIL;
 		}
 	}
@@ -393,10 +371,7 @@
 	TC_PRINT("DMA memory to memory transfer started\n");
 	TC_PRINT("Preparing DMA Controller\n");
 
-#if CONFIG_NOCACHE_MEMORY
 	memset(tx_data, 0, sizeof(tx_data));
-	memcpy(tx_data, TX_DATA, sizeof(TX_DATA));
-#endif
 
 	memset(rx_data, 0, sizeof(rx_data));
 
@@ -435,7 +410,7 @@
 	transfer_count = 0;
 	done = 0;
 	TC_PRINT("Starting the transfer on channel %d and waiting for 1 second\n", chan_id);
-	dma_block_cfg.block_size = strlen(tx_data);
+	dma_block_cfg.block_size = sizeof(tx_data);
 #ifdef CONFIG_DMA_64BIT
 	dma_block_cfg.source_address = (uint64_t)tx_data;
 	dma_block_cfg.dest_address = (uint64_t)rx_data[transfer_count];
@@ -481,8 +456,8 @@
 	TC_PRINT("Each RX buffer should contain the full TX buffer string.\n");
 
 	for (int i = 0; i < TRANSFER_LOOPS; i++) {
-		TC_PRINT("RX data Loop %d: %s\n", i, rx_data[i]);
-		if (strncmp(tx_data, rx_data[i], sizeof(rx_data[i])) != 0) {
+		TC_PRINT("RX data Loop %d\n", i);
+		if (memcmp(tx_data, rx_data[i], XFER_SIZE)) {
 			return TC_FAIL;
 		}
 	}
