serial.c 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Copyright (c) 2018, STMicroelectronics
  4. */
  5. #include <common.h>
  6. #include <log.h>
  7. #include <serial.h>
  8. #include <dm.h>
  9. #include <asm/serial.h>
  10. #include <dm/test.h>
  11. #include <test/test.h>
  12. #include <test/ut.h>
  13. static const char test_message[] =
  14. "This is a test message\n"
  15. "consisting of multiple lines\n";
  16. static int dm_test_serial(struct unit_test_state *uts)
  17. {
  18. int i;
  19. struct serial_device_info info_serial = {0};
  20. struct udevice *dev_serial;
  21. size_t start, putc_written;
  22. uint value_serial;
  23. ut_assertok(uclass_get_device_by_name(UCLASS_SERIAL, "serial",
  24. &dev_serial));
  25. ut_assertok(serial_tstc());
  26. /*
  27. * test with default config which is the only one supported by
  28. * sandbox_serial driver
  29. */
  30. ut_assertok(serial_setconfig(dev_serial, SERIAL_DEFAULT_CONFIG));
  31. ut_assertok(serial_getconfig(dev_serial, &value_serial));
  32. ut_assert(value_serial == SERIAL_DEFAULT_CONFIG);
  33. ut_assertok(serial_getinfo(dev_serial, &info_serial));
  34. ut_assert(info_serial.type == SERIAL_CHIP_UNKNOWN);
  35. ut_assert(info_serial.addr == SERIAL_DEFAULT_ADDRESS);
  36. ut_assert(info_serial.clock == SERIAL_DEFAULT_CLOCK);
  37. /*
  38. * test with a parameter which is NULL pointer
  39. */
  40. ut_asserteq(-EINVAL, serial_getconfig(dev_serial, NULL));
  41. ut_asserteq(-EINVAL, serial_getinfo(dev_serial, NULL));
  42. /*
  43. * test with a serial config which is not supported by
  44. * sandbox_serial driver: test with wrong parity
  45. */
  46. ut_asserteq(-ENOTSUPP,
  47. serial_setconfig(dev_serial,
  48. SERIAL_CONFIG(SERIAL_PAR_ODD,
  49. SERIAL_8_BITS,
  50. SERIAL_ONE_STOP)));
  51. /*
  52. * test with a serial config which is not supported by
  53. * sandbox_serial driver: test with wrong bits number
  54. */
  55. ut_asserteq(-ENOTSUPP,
  56. serial_setconfig(dev_serial,
  57. SERIAL_CONFIG(SERIAL_PAR_NONE,
  58. SERIAL_6_BITS,
  59. SERIAL_ONE_STOP)));
  60. /*
  61. * test with a serial config which is not supported by
  62. * sandbox_serial driver: test with wrong stop bits number
  63. */
  64. ut_asserteq(-ENOTSUPP,
  65. serial_setconfig(dev_serial,
  66. SERIAL_CONFIG(SERIAL_PAR_NONE,
  67. SERIAL_8_BITS,
  68. SERIAL_TWO_STOP)));
  69. /* Verify that putc and puts print the same number of characters */
  70. sandbox_serial_endisable(false);
  71. start = sandbox_serial_written();
  72. for (i = 0; i < sizeof(test_message) - 1; i++)
  73. serial_putc(test_message[i]);
  74. putc_written = sandbox_serial_written();
  75. serial_puts(test_message);
  76. sandbox_serial_endisable(true);
  77. ut_asserteq(putc_written - start,
  78. sandbox_serial_written() - putc_written);
  79. return 0;
  80. }
  81. DM_TEST(dm_test_serial, UT_TESTF_SCAN_FDT);