mdp3.h 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. /* Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
  2. * Copyright (C) 2007 Google Incorporated
  3. *
  4. * This program is free software; you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License version 2 and
  6. * only version 2 as published by the Free Software Foundation.
  7. *
  8. * This program is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. * GNU General Public License for more details.
  12. *
  13. */
  14. #ifndef MDP3_H
  15. #define MDP3_H
  16. #include <linux/types.h>
  17. #include <linux/mutex.h>
  18. #include <linux/platform_device.h>
  19. #include <linux/io.h>
  20. #include <linux/earlysuspend.h>
  21. #include <mach/iommu_domains.h>
  22. #include "mdp3_dma.h"
  23. #include "mdss_fb.h"
  24. #define MDP_VSYNC_CLK_RATE 19200000
  25. #define MDP_CORE_CLK_RATE 100000000
  26. #define KOFF_TIMEOUT msecs_to_jiffies(84)
  27. enum {
  28. MDP3_CLK_AHB,
  29. MDP3_CLK_CORE,
  30. MDP3_CLK_VSYNC,
  31. MDP3_CLK_LCDC,
  32. MDP3_CLK_DSI,
  33. MDP3_MAX_CLK
  34. };
  35. enum {
  36. MDP3_BUS_HANDLE_DMA,
  37. MDP3_BUS_HANDLE_PPP,
  38. MDP3_BUS_HANDLE_MAX,
  39. };
  40. enum {
  41. MDP3_DMA_IOMMU_DOMAIN,
  42. MDP3_PPP_IOMMU_DOMAIN,
  43. MDP3_IOMMU_DOMAIN_MAX,
  44. };
  45. enum {
  46. MDP3_IOMMU_CTX_PPP_0,
  47. MDP3_IOMMU_CTX_PPP_1,
  48. MDP3_IOMMU_CTX_DMA_0,
  49. MDP3_IOMMU_CTX_DMA_1,
  50. MDP3_IOMMU_CTX_MAX
  51. };
  52. enum {
  53. MDP3_CLIENT_DMA_P,
  54. MDP3_CLIENT_PPP,
  55. };
  56. enum {
  57. DI_PARTITION_NUM = 0,
  58. DI_DOMAIN_NUM = 1,
  59. DI_MAX,
  60. };
  61. struct mdp3_bus_handle_map {
  62. struct msm_bus_vectors *bus_vector;
  63. struct msm_bus_paths *usecases;
  64. struct msm_bus_scale_pdata *scale_pdata;
  65. int current_bus_idx;
  66. int ref_cnt;
  67. u64 restore_ab;
  68. u64 restore_ib;
  69. u32 handle;
  70. };
  71. struct mdp3_iommu_domain_map {
  72. u32 domain_type;
  73. char *client_name;
  74. struct msm_iova_partition partitions[1];
  75. int npartitions;
  76. int domain_idx;
  77. struct iommu_domain *domain;
  78. };
  79. struct mdp3_iommu_ctx_map {
  80. u32 ctx_type;
  81. struct mdp3_iommu_domain_map *domain;
  82. char *ctx_name;
  83. struct device *ctx;
  84. int attached;
  85. };
  86. struct mdp3_iommu_meta {
  87. struct rb_node node;
  88. struct ion_handle *handle;
  89. struct rb_root iommu_maps;
  90. struct kref ref;
  91. struct sg_table *table;
  92. struct dma_buf *dbuf;
  93. int mapped_size;
  94. unsigned long size;
  95. unsigned long iova_addr;
  96. unsigned long flags;
  97. };
  98. #define MDP3_MAX_INTR 28
  99. struct mdp3_intr_cb {
  100. void (*cb)(int type, void *);
  101. void *data;
  102. };
  103. struct mdp3_hw_resource {
  104. struct platform_device *pdev;
  105. u32 mdp_rev;
  106. struct mutex res_mutex;
  107. struct clk *clocks[MDP3_MAX_CLK];
  108. int clock_ref_count[MDP3_MAX_CLK];
  109. unsigned long dma_core_clk_request;
  110. unsigned long ppp_core_clk_request;
  111. char __iomem *mdp_base;
  112. size_t mdp_reg_size;
  113. u32 irq;
  114. struct mdp3_bus_handle_map *bus_handle;
  115. struct ion_client *ion_client;
  116. struct mdp3_iommu_domain_map *domains;
  117. struct mdp3_iommu_ctx_map *iommu_contexts;
  118. bool allow_iommu_update;
  119. struct ion_handle *ion_handle;
  120. struct mutex iommu_lock;
  121. struct rb_root iommu_root;
  122. struct mdp3_dma dma[MDP3_DMA_MAX];
  123. struct mdp3_intf intf[MDP3_DMA_OUTPUT_SEL_MAX];
  124. spinlock_t irq_lock;
  125. u32 irq_ref_count[MDP3_MAX_INTR];
  126. u32 irq_mask;
  127. int irq_ref_cnt;
  128. struct mdp3_intr_cb callbacks[MDP3_MAX_INTR];
  129. u32 underrun_cnt;
  130. int irq_registered;
  131. struct early_suspend suspend_handler;
  132. struct mdss_panel_cfg pan_cfg;
  133. unsigned long splash_mem_addr;
  134. u32 splash_mem_size;
  135. int clk_prepare_count;
  136. int cont_splash_en;
  137. bool batfet_required;
  138. struct regulator *batfet;
  139. struct regulator *vdd_cx;
  140. };
  141. struct mdp3_img_data {
  142. u32 addr;
  143. u32 len;
  144. u32 padding;
  145. u32 flags;
  146. int p_need;
  147. struct file *srcp_file;
  148. struct ion_handle *srcp_ihdl;
  149. };
  150. extern struct mdp3_hw_resource *mdp3_res;
  151. struct mdp3_dma *mdp3_get_dma_pipe(int capability);
  152. struct mdp3_intf *mdp3_get_display_intf(int type);
  153. void mdp3_irq_enable(int type);
  154. void mdp3_irq_disable(int type);
  155. void mdp3_irq_disable_nosync(int type);
  156. int mdp3_set_intr_callback(u32 type, struct mdp3_intr_cb *cb);
  157. void mdp3_irq_register(void);
  158. void mdp3_irq_deregister(void);
  159. int mdp3_clk_set_rate(int clk_type, unsigned long clk_rate, int client);
  160. int mdp3_clk_enable(int enable, int dsi_clk);
  161. int mdp3_res_update(int enable, int dsi_clk, int client);
  162. int mdp3_bus_scale_set_quota(int client, u64 ab_quota, u64 ib_quota);
  163. int mdp3_put_img(struct mdp3_img_data *data, int client);
  164. int mdp3_get_img(struct msmfb_data *img, struct mdp3_img_data *data,
  165. int client);
  166. int mdp3_iommu_enable(int client);
  167. int mdp3_iommu_disable(int client);
  168. int mdp3_iommu_is_attached(int client);
  169. void mdp3_free(struct msm_fb_data_type *mfd);
  170. int mdp3_parse_dt_splash(struct msm_fb_data_type *mfd);
  171. void mdp3_release_splash_memory(struct msm_fb_data_type *mfd);
  172. int mdp3_create_sysfs_link(struct device *dev);
  173. int mdp3_get_cont_spash_en(void);
  174. int mdp3_get_mdp_dsi_clk(void);
  175. int mdp3_put_mdp_dsi_clk(void);
  176. void mdp3_batfet_ctrl(int enable);
  177. int mdp3_misr_set(struct mdp_misr *misr_req);
  178. int mdp3_misr_get(struct mdp_misr *misr_resp);
  179. void mdp3_enable_regulator(int enable);
  180. void mdp3_check_dsi_ctrl_status(struct work_struct *work,
  181. uint32_t interval);
  182. #define MDP3_REG_WRITE(addr, val) writel_relaxed(val, mdp3_res->mdp_base + addr)
  183. #define MDP3_REG_READ(addr) readl_relaxed(mdp3_res->mdp_base + addr)
  184. #endif /* MDP3_H */