k3-udma-private.c 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Copyright (C) 2019 Texas Instruments Incorporated - http://www.ti.com
  4. * Author: Peter Ujfalusi <peter.ujfalusi@ti.com>
  5. */
  6. int xudma_navss_psil_pair(struct udma_dev *ud, u32 src_thread, u32 dst_thread)
  7. {
  8. return navss_psil_pair(ud, src_thread, dst_thread);
  9. }
  10. EXPORT_SYMBOL(xudma_navss_psil_pair);
  11. int xudma_navss_psil_unpair(struct udma_dev *ud, u32 src_thread, u32 dst_thread)
  12. {
  13. return navss_psil_unpair(ud, src_thread, dst_thread);
  14. }
  15. EXPORT_SYMBOL(xudma_navss_psil_unpair);
  16. struct udma_dev *of_xudma_dev_get(struct device_node *np, const char *property)
  17. {
  18. struct device_node *udma_node = np;
  19. struct platform_device *pdev;
  20. struct udma_dev *ud;
  21. if (property) {
  22. udma_node = of_parse_phandle(np, property, 0);
  23. if (!udma_node) {
  24. pr_err("UDMA node is not found\n");
  25. return ERR_PTR(-ENODEV);
  26. }
  27. }
  28. pdev = of_find_device_by_node(udma_node);
  29. if (!pdev) {
  30. pr_debug("UDMA device not found\n");
  31. return ERR_PTR(-EPROBE_DEFER);
  32. }
  33. if (np != udma_node)
  34. of_node_put(udma_node);
  35. ud = platform_get_drvdata(pdev);
  36. if (!ud) {
  37. pr_debug("UDMA has not been probed\n");
  38. put_device(&pdev->dev);
  39. return ERR_PTR(-EPROBE_DEFER);
  40. }
  41. return ud;
  42. }
  43. EXPORT_SYMBOL(of_xudma_dev_get);
  44. u32 xudma_dev_get_psil_base(struct udma_dev *ud)
  45. {
  46. return ud->psil_base;
  47. }
  48. EXPORT_SYMBOL(xudma_dev_get_psil_base);
  49. struct udma_tisci_rm *xudma_dev_get_tisci_rm(struct udma_dev *ud)
  50. {
  51. return &ud->tisci_rm;
  52. }
  53. EXPORT_SYMBOL(xudma_dev_get_tisci_rm);
  54. int xudma_alloc_gp_rflow_range(struct udma_dev *ud, int from, int cnt)
  55. {
  56. return __udma_alloc_gp_rflow_range(ud, from, cnt);
  57. }
  58. EXPORT_SYMBOL(xudma_alloc_gp_rflow_range);
  59. int xudma_free_gp_rflow_range(struct udma_dev *ud, int from, int cnt)
  60. {
  61. return __udma_free_gp_rflow_range(ud, from, cnt);
  62. }
  63. EXPORT_SYMBOL(xudma_free_gp_rflow_range);
  64. bool xudma_rflow_is_gp(struct udma_dev *ud, int id)
  65. {
  66. return !test_bit(id, ud->rflow_gp_map);
  67. }
  68. EXPORT_SYMBOL(xudma_rflow_is_gp);
  69. #define XUDMA_GET_PUT_RESOURCE(res) \
  70. struct udma_##res *xudma_##res##_get(struct udma_dev *ud, int id) \
  71. { \
  72. return __udma_reserve_##res(ud, UDMA_TP_NORMAL, id); \
  73. } \
  74. EXPORT_SYMBOL(xudma_##res##_get); \
  75. \
  76. void xudma_##res##_put(struct udma_dev *ud, struct udma_##res *p) \
  77. { \
  78. clear_bit(p->id, ud->res##_map); \
  79. } \
  80. EXPORT_SYMBOL(xudma_##res##_put)
  81. XUDMA_GET_PUT_RESOURCE(tchan);
  82. XUDMA_GET_PUT_RESOURCE(rchan);
  83. struct udma_rflow *xudma_rflow_get(struct udma_dev *ud, int id)
  84. {
  85. return __udma_get_rflow(ud, id);
  86. }
  87. EXPORT_SYMBOL(xudma_rflow_get);
  88. void xudma_rflow_put(struct udma_dev *ud, struct udma_rflow *p)
  89. {
  90. __udma_put_rflow(ud, p);
  91. }
  92. EXPORT_SYMBOL(xudma_rflow_put);
  93. #define XUDMA_GET_RESOURCE_ID(res) \
  94. int xudma_##res##_get_id(struct udma_##res *p) \
  95. { \
  96. return p->id; \
  97. } \
  98. EXPORT_SYMBOL(xudma_##res##_get_id)
  99. XUDMA_GET_RESOURCE_ID(tchan);
  100. XUDMA_GET_RESOURCE_ID(rchan);
  101. XUDMA_GET_RESOURCE_ID(rflow);
  102. /* Exported register access functions */
  103. #define XUDMA_RT_IO_FUNCTIONS(res) \
  104. u32 xudma_##res##rt_read(struct udma_##res *p, int reg) \
  105. { \
  106. if (!p) \
  107. return 0; \
  108. return udma_read(p->reg_rt, reg); \
  109. } \
  110. EXPORT_SYMBOL(xudma_##res##rt_read); \
  111. \
  112. void xudma_##res##rt_write(struct udma_##res *p, int reg, u32 val) \
  113. { \
  114. if (!p) \
  115. return; \
  116. udma_write(p->reg_rt, reg, val); \
  117. } \
  118. EXPORT_SYMBOL(xudma_##res##rt_write)
  119. XUDMA_RT_IO_FUNCTIONS(tchan);
  120. XUDMA_RT_IO_FUNCTIONS(rchan);