diff --git a/tests/drivers/dma/test_chan_blen_transfer/Makefile b/tests/drivers/dma/test_chan_blen_transfer/Makefile new file mode 100644 index 00000000000..82003d355ab --- /dev/null +++ b/tests/drivers/dma/test_chan_blen_transfer/Makefile @@ -0,0 +1,4 @@ +BOARD ?= quark_se_c1000_devboard +CONF_FILE = prj.conf # set prj_shell.conf if debugging tc + +include ${ZEPHYR_BASE}/Makefile.inc diff --git a/tests/drivers/dma/test_chan_blen_transfer/prj.conf b/tests/drivers/dma/test_chan_blen_transfer/prj.conf new file mode 100644 index 00000000000..b8f19252870 --- /dev/null +++ b/tests/drivers/dma/test_chan_blen_transfer/prj.conf @@ -0,0 +1,3 @@ +CONFIG_DMA=y +CONFIG_DMA_QMSI=y +CONFIG_ZTEST=y diff --git a/tests/drivers/dma/test_chan_blen_transfer/prj_shell.conf b/tests/drivers/dma/test_chan_blen_transfer/prj_shell.conf new file mode 100644 index 00000000000..370978d5dad --- /dev/null +++ b/tests/drivers/dma/test_chan_blen_transfer/prj_shell.conf @@ -0,0 +1,6 @@ +CONFIG_DMA=y +CONFIG_DMA_QMSI=y +CONFIG_ZTEST=y +CONFIG_CONSOLE_HANDLER=y +CONFIG_CONSOLE_HANDLER_SHELL=y +CONFIG_ENABLE_SHELL=y diff --git a/tests/drivers/dma/test_chan_blen_transfer/src/Makefile b/tests/drivers/dma/test_chan_blen_transfer/src/Makefile new file mode 100644 index 00000000000..dea62b23b5c --- /dev/null +++ b/tests/drivers/dma/test_chan_blen_transfer/src/Makefile @@ -0,0 +1,2 @@ +include $(ZEPHYR_BASE)/tests/Makefile.test +obj-y = main.o test_dma.o diff --git a/tests/drivers/dma/test_chan_blen_transfer/src/main.c b/tests/drivers/dma/test_chan_blen_transfer/src/main.c new file mode 100644 index 00000000000..24bd17f6f4d --- /dev/null +++ b/tests/drivers/dma/test_chan_blen_transfer/src/main.c @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2016 Intel Corporation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @addtogroup t_driver_dma + * @{ + * @defgroup t_dma_mem_to_mem test_dma_mem_to_mem + * @} + */ + +#include +#include + +extern void test_dma_m2m_chan0_burst8(void); +extern void test_dma_m2m_chan1_burst8(void); +extern void test_dma_m2m_chan0_burst16(void); +extern void test_dma_m2m_chan1_burst16(void); + +#ifdef CONFIG_CONSOLE_HANDLER_SHELL +TC_CMD_DEFINE(test_dma_m2m_chan0_burst8) +TC_CMD_DEFINE(test_dma_m2m_chan1_burst8) +TC_CMD_DEFINE(test_dma_m2m_chan0_burst16) +TC_CMD_DEFINE(test_dma_m2m_chan1_burst16) +#endif + +void test_main(void) +{ +#ifdef CONFIG_CONSOLE_HANDLER_SHELL + /* initialize shell commands */ + static const struct shell_cmd commands[] = { + TC_CMD_ITEM(test_dma_m2m_chan0_burst8), + TC_CMD_ITEM(test_dma_m2m_chan1_burst8), + TC_CMD_ITEM(test_dma_m2m_chan0_burst16), + TC_CMD_ITEM(test_dma_m2m_chan1_burst16), + { NULL, NULL } + }; + SHELL_REGISTER("runtest", commands); +#else + ztest_test_suite(dma_m2m_test, + ztest_unit_test(test_dma_m2m_chan0_burst8), + ztest_unit_test(test_dma_m2m_chan1_burst8), + ztest_unit_test(test_dma_m2m_chan0_burst16), + ztest_unit_test(test_dma_m2m_chan1_burst16)); + ztest_run_test_suite(dma_m2m_test); +#endif +} diff --git a/tests/drivers/dma/test_chan_blen_transfer/src/test_dma.c b/tests/drivers/dma/test_chan_blen_transfer/src/test_dma.c new file mode 100644 index 00000000000..f75ca7bf395 --- /dev/null +++ b/tests/drivers/dma/test_chan_blen_transfer/src/test_dma.c @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2016 Intel Corporation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @addtogroup t_dma_mem_to_mem + * @{ + * @defgroup t_dma_m2m_chan_burst test_dma_m2m_chan_burst + * @brief TestPurpose: verify zephyr dma memory to memory transfer + * @details + * - Test Steps + * -# Set dma channel configuration including source/dest addr, burstlen + * -# Set direction memory-to-memory + * -# Start transter + * - Expected Results + * -# Data is transferred correctly from src to dest + * @} + */ + +#include +#include +#include + +#define DMA_DEVICE_NAME CONFIG_DMA_0_NAME +#define RX_BUFF_SIZE (48) + +static const char tx_data[] = "It is harder to be kind than to be wise"; +static char rx_data[RX_BUFF_SIZE] = { 0 }; + +static void test_done(struct device *dev, void *data) +{ + TC_PRINT("DMA transfer done\n"); +} + +static void test_error(struct device *dev, void *data) +{ + TC_PRINT("DMA transfer met an error\n"); +} + +static int test_task(uint32_t chan_id, uint32_t blen) +{ + enum dma_burst_length burst_len = BURST_TRANS_LENGTH_1; + struct dma_channel_config dma_chan_cfg = {0}; + struct dma_transfer_config dma_trans = {0}; + struct device *dma = device_get_binding(DMA_DEVICE_NAME); + + if (!dma) { + TC_PRINT("Cannot get dma controller\n"); + return TC_FAIL; + } + + switch (blen) { + case 8: + burst_len = BURST_TRANS_LENGTH_8; + break; + case 16: + burst_len = BURST_TRANS_LENGTH_16; + break; + default: + burst_len = BURST_TRANS_LENGTH_1; + } + + dma_chan_cfg.channel_direction = MEMORY_TO_MEMORY; + dma_chan_cfg.source_transfer_width = TRANS_WIDTH_8; + dma_chan_cfg.destination_transfer_width = TRANS_WIDTH_8; + dma_chan_cfg.source_burst_length = burst_len; + dma_chan_cfg.destination_burst_length = burst_len; + dma_chan_cfg.dma_transfer = test_done; + dma_chan_cfg.dma_error = test_error; + dma_chan_cfg.callback_data = (void *)&chan_id; + + TC_PRINT("Preparing DMA Controller: Chan_ID=%u, BURST_LEN=%u\n", + chan_id, burst_len); + if (dma_channel_config(dma, chan_id, &dma_chan_cfg)) { + TC_PRINT("Error: configuration\n"); + return TC_FAIL; + } + + TC_PRINT("Starting the transfer\n"); + dma_trans.block_size = strlen(tx_data); + dma_trans.source_address = (uint32_t *)tx_data; + dma_trans.destination_address = (uint32_t *)rx_data; + + if (dma_transfer_config(dma, chan_id, &dma_trans)) { + TC_PRINT("ERROR: transfer\n"); + return TC_FAIL; + } + + if (dma_transfer_start(dma, chan_id)) { + TC_PRINT("ERROR: transfer\n"); + return TC_FAIL; + } + k_sleep(2000); + TC_PRINT("%s\n", rx_data); + if (strcmp(tx_data, rx_data) != 0) + return TC_FAIL; + return TC_PASS; +} + +/* export test cases */ +void test_dma_m2m_chan0_burst8(void) +{ + assert_true((test_task(0, 8) == TC_PASS), NULL); +} + +void test_dma_m2m_chan1_burst8(void) +{ + assert_true((test_task(1, 8) == TC_PASS), NULL); +} + +void test_dma_m2m_chan0_burst16(void) +{ + assert_true((test_task(0, 16) == TC_PASS), NULL); +} + +void test_dma_m2m_chan1_burst16(void) +{ + assert_true((test_task(1, 16) == TC_PASS), NULL); +} diff --git a/tests/drivers/dma/test_chan_blen_transfer/testcase.ini b/tests/drivers/dma/test_chan_blen_transfer/testcase.ini new file mode 100644 index 00000000000..9aae96b4831 --- /dev/null +++ b/tests/drivers/dma/test_chan_blen_transfer/testcase.ini @@ -0,0 +1,11 @@ +[test_dma] +tags = drivers +arch_whitelist = x86 +platform_whitelist = quark_se_c1000_devboard arduino_101 quark_d2000_crb + +[test_dma_shell] +tags = drivers +build_only = true +arch_whitelist = x86 +extra_args = CONF_FILE=prj_shell.conf +platform_whitelist = quark_se_c1000_devboard arduino_101 quark_d2000_crb diff --git a/tests/drivers/dma/Makefile b/tests/drivers/dma/test_loop_transfer/Makefile similarity index 100% rename from tests/drivers/dma/Makefile rename to tests/drivers/dma/test_loop_transfer/Makefile diff --git a/tests/drivers/dma/prj.conf b/tests/drivers/dma/test_loop_transfer/prj.conf similarity index 100% rename from tests/drivers/dma/prj.conf rename to tests/drivers/dma/test_loop_transfer/prj.conf diff --git a/tests/drivers/dma/src/Makefile b/tests/drivers/dma/test_loop_transfer/src/Makefile similarity index 100% rename from tests/drivers/dma/src/Makefile rename to tests/drivers/dma/test_loop_transfer/src/Makefile diff --git a/tests/drivers/dma/src/dma.c b/tests/drivers/dma/test_loop_transfer/src/dma.c similarity index 100% rename from tests/drivers/dma/src/dma.c rename to tests/drivers/dma/test_loop_transfer/src/dma.c diff --git a/tests/drivers/dma/testcase.ini b/tests/drivers/dma/test_loop_transfer/testcase.ini similarity index 100% rename from tests/drivers/dma/testcase.ini rename to tests/drivers/dma/test_loop_transfer/testcase.ini