dma.c 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * Direct Memory Access U-Class tests
  4. *
  5. * Copyright (C) 2018 Texas Instruments Incorporated <www.ti.com>
  6. * Grygorii Strashko <grygorii.strashko@ti.com>
  7. */
  8. #include <common.h>
  9. #include <dm.h>
  10. #include <dm/test.h>
  11. #include <dma.h>
  12. #include <test/ut.h>
  13. static int dm_test_dma_m2m(struct unit_test_state *uts)
  14. {
  15. struct udevice *dev;
  16. struct dma dma_m2m;
  17. u8 src_buf[512];
  18. u8 dst_buf[512];
  19. size_t len = 512;
  20. int i;
  21. ut_assertok(uclass_get_device_by_name(UCLASS_DMA, "dma", &dev));
  22. ut_assertok(dma_get_by_name(dev, "m2m", &dma_m2m));
  23. memset(dst_buf, 0, len);
  24. for (i = 0; i < len; i++)
  25. src_buf[i] = i;
  26. ut_assertok(dma_memcpy(dst_buf, src_buf, len));
  27. ut_assertok(memcmp(src_buf, dst_buf, len));
  28. return 0;
  29. }
  30. DM_TEST(dm_test_dma_m2m, DM_TESTF_SCAN_FDT);
  31. static int dm_test_dma(struct unit_test_state *uts)
  32. {
  33. struct udevice *dev;
  34. struct dma dma_tx, dma_rx;
  35. u8 src_buf[512];
  36. u8 dst_buf[512];
  37. void *dst_ptr;
  38. size_t len = 512;
  39. u32 meta1, meta2;
  40. int i;
  41. ut_assertok(uclass_get_device_by_name(UCLASS_DMA, "dma", &dev));
  42. ut_assertok(dma_get_by_name(dev, "tx0", &dma_tx));
  43. ut_assertok(dma_get_by_name(dev, "rx0", &dma_rx));
  44. ut_assertok(dma_enable(&dma_tx));
  45. ut_assertok(dma_enable(&dma_rx));
  46. memset(dst_buf, 0, len);
  47. for (i = 0; i < len; i++)
  48. src_buf[i] = i;
  49. meta1 = 0xADADDEAD;
  50. meta2 = 0;
  51. dst_ptr = &dst_buf;
  52. ut_assertok(dma_send(&dma_tx, src_buf, len, &meta1));
  53. ut_asserteq(len, dma_receive(&dma_rx, &dst_ptr, &meta2));
  54. ut_asserteq(0xADADDEAD, meta2);
  55. ut_assertok(dma_disable(&dma_tx));
  56. ut_assertok(dma_disable(&dma_rx));
  57. ut_assertok(dma_free(&dma_tx));
  58. ut_assertok(dma_free(&dma_rx));
  59. ut_assertok(memcmp(src_buf, dst_buf, len));
  60. return 0;
  61. }
  62. DM_TEST(dm_test_dma, DM_TESTF_SCAN_FDT);
  63. static int dm_test_dma_rx(struct unit_test_state *uts)
  64. {
  65. struct udevice *dev;
  66. struct dma dma_tx, dma_rx;
  67. u8 src_buf[512];
  68. u8 dst_buf[512];
  69. void *dst_ptr;
  70. size_t len = 512;
  71. u32 meta1, meta2;
  72. int i;
  73. ut_assertok(uclass_get_device_by_name(UCLASS_DMA, "dma", &dev));
  74. ut_assertok(dma_get_by_name(dev, "tx0", &dma_tx));
  75. ut_assertok(dma_get_by_name(dev, "rx0", &dma_rx));
  76. ut_assertok(dma_enable(&dma_tx));
  77. ut_assertok(dma_enable(&dma_rx));
  78. memset(dst_buf, 0, len);
  79. for (i = 0; i < len; i++)
  80. src_buf[i] = i;
  81. meta1 = 0xADADDEAD;
  82. meta2 = 0;
  83. dst_ptr = NULL;
  84. ut_assertok(dma_prepare_rcv_buf(&dma_tx, dst_buf, len));
  85. ut_assertok(dma_send(&dma_tx, src_buf, len, &meta1));
  86. ut_asserteq(len, dma_receive(&dma_rx, &dst_ptr, &meta2));
  87. ut_asserteq(0xADADDEAD, meta2);
  88. ut_asserteq_ptr(dst_buf, dst_ptr);
  89. ut_assertok(dma_disable(&dma_tx));
  90. ut_assertok(dma_disable(&dma_rx));
  91. ut_assertok(dma_free(&dma_tx));
  92. ut_assertok(dma_free(&dma_rx));
  93. ut_assertok(memcmp(src_buf, dst_buf, len));
  94. return 0;
  95. }
  96. DM_TEST(dm_test_dma_rx, DM_TESTF_SCAN_FDT);