ddp_rdma.c 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #define LOG_TAG "RDMA"
  2. #include <linux/delay.h>
  3. #include "m4u.h"
  4. #include "ddp_log.h"
  5. #include "ddp_reg.h"
  6. #include "ddp_matrix_para.h"
  7. #include "ddp_dump.h"
  8. #include "lcm_drv.h"
  9. #include "ddp_rdma.h"
  10. #include "ddp_rdma_ex.h"
  11. unsigned int rdma_index(DISP_MODULE_ENUM module)
  12. {
  13. int idx = 0;
  14. switch (module) {
  15. case DISP_MODULE_RDMA0:
  16. idx = 0;
  17. break;
  18. case DISP_MODULE_RDMA1:
  19. idx = 1;
  20. break;
  21. case DISP_MODULE_RDMA2:
  22. idx = 2;
  23. break;
  24. default:
  25. DDPERR("invalid rdma module=%d\n", module); /* invalid module */
  26. ASSERT(0);
  27. }
  28. ASSERT((idx >= 0) && (idx < RDMA_INSTANCES));
  29. return idx;
  30. }
  31. void rdma_set_target_line(DISP_MODULE_ENUM module, unsigned int line, void *handle)
  32. {
  33. unsigned int idx = rdma_index(module);
  34. DISP_REG_SET(handle, idx * DISP_RDMA_INDEX_OFFSET + DISP_REG_RDMA_TARGET_LINE, line);
  35. }
  36. int rdma_init(DISP_MODULE_ENUM module, void *handle)
  37. {
  38. return rdma_clock_on(module, handle);
  39. }
  40. int rdma_deinit(DISP_MODULE_ENUM module, void *handle)
  41. {
  42. return rdma_clock_off(module, handle);
  43. }
  44. void rdma_get_address(DISP_MODULE_ENUM module, unsigned long *addr)
  45. {
  46. unsigned int idx = rdma_index(module);
  47. *addr = DISP_REG_GET(DISP_REG_RDMA_MEM_START_ADDR + DISP_RDMA_INDEX_OFFSET * idx);
  48. }