0001
0002
0003
0004
0005
0006
0007 #ifndef _KOMEDA_DEV_H_
0008 #define _KOMEDA_DEV_H_
0009
0010 #include <linux/device.h>
0011 #include <linux/clk.h>
0012 #include "komeda_pipeline.h"
0013 #include "malidp_product.h"
0014 #include "komeda_format_caps.h"
0015
0016 #define KOMEDA_EVENT_VSYNC BIT_ULL(0)
0017 #define KOMEDA_EVENT_FLIP BIT_ULL(1)
0018 #define KOMEDA_EVENT_URUN BIT_ULL(2)
0019 #define KOMEDA_EVENT_IBSY BIT_ULL(3)
0020 #define KOMEDA_EVENT_OVR BIT_ULL(4)
0021 #define KOMEDA_EVENT_EOW BIT_ULL(5)
0022 #define KOMEDA_EVENT_MODE BIT_ULL(6)
0023 #define KOMEDA_EVENT_FULL BIT_ULL(7)
0024 #define KOMEDA_EVENT_EMPTY BIT_ULL(8)
0025
0026 #define KOMEDA_ERR_TETO BIT_ULL(14)
0027 #define KOMEDA_ERR_TEMR BIT_ULL(15)
0028 #define KOMEDA_ERR_TITR BIT_ULL(16)
0029 #define KOMEDA_ERR_CPE BIT_ULL(17)
0030 #define KOMEDA_ERR_CFGE BIT_ULL(18)
0031 #define KOMEDA_ERR_AXIE BIT_ULL(19)
0032 #define KOMEDA_ERR_ACE0 BIT_ULL(20)
0033 #define KOMEDA_ERR_ACE1 BIT_ULL(21)
0034 #define KOMEDA_ERR_ACE2 BIT_ULL(22)
0035 #define KOMEDA_ERR_ACE3 BIT_ULL(23)
0036 #define KOMEDA_ERR_DRIFTTO BIT_ULL(24)
0037 #define KOMEDA_ERR_FRAMETO BIT_ULL(25)
0038 #define KOMEDA_ERR_CSCE BIT_ULL(26)
0039 #define KOMEDA_ERR_ZME BIT_ULL(27)
0040 #define KOMEDA_ERR_MERR BIT_ULL(28)
0041 #define KOMEDA_ERR_TCF BIT_ULL(29)
0042 #define KOMEDA_ERR_TTNG BIT_ULL(30)
0043 #define KOMEDA_ERR_TTF BIT_ULL(31)
0044
0045 #define KOMEDA_ERR_EVENTS \
0046 (KOMEDA_EVENT_URUN | KOMEDA_EVENT_IBSY | KOMEDA_EVENT_OVR |\
0047 KOMEDA_ERR_TETO | KOMEDA_ERR_TEMR | KOMEDA_ERR_TITR |\
0048 KOMEDA_ERR_CPE | KOMEDA_ERR_CFGE | KOMEDA_ERR_AXIE |\
0049 KOMEDA_ERR_ACE0 | KOMEDA_ERR_ACE1 | KOMEDA_ERR_ACE2 |\
0050 KOMEDA_ERR_ACE3 | KOMEDA_ERR_DRIFTTO | KOMEDA_ERR_FRAMETO |\
0051 KOMEDA_ERR_ZME | KOMEDA_ERR_MERR | KOMEDA_ERR_TCF |\
0052 KOMEDA_ERR_TTNG | KOMEDA_ERR_TTF)
0053
0054 #define KOMEDA_WARN_EVENTS \
0055 (KOMEDA_ERR_CSCE | KOMEDA_EVENT_FULL | KOMEDA_EVENT_EMPTY)
0056
0057 #define KOMEDA_INFO_EVENTS (0 \
0058 | KOMEDA_EVENT_VSYNC \
0059 | KOMEDA_EVENT_FLIP \
0060 | KOMEDA_EVENT_EOW \
0061 | KOMEDA_EVENT_MODE \
0062 )
0063
0064
0065 enum {
0066 KOMEDA_OF_PORT_OUTPUT = 0,
0067 KOMEDA_OF_PORT_COPROC = 1,
0068 };
0069
0070 struct komeda_chip_info {
0071 u32 arch_id;
0072 u32 core_id;
0073 u32 core_info;
0074 u32 bus_width;
0075 };
0076
0077 struct komeda_dev;
0078
0079 struct komeda_events {
0080 u64 global;
0081 u64 pipes[KOMEDA_MAX_PIPELINES];
0082 };
0083
0084
0085
0086
0087
0088
0089 struct komeda_dev_funcs {
0090
0091
0092
0093
0094
0095
0096 void (*init_format_table)(struct komeda_dev *mdev);
0097
0098
0099
0100
0101
0102 int (*enum_resources)(struct komeda_dev *mdev);
0103
0104 void (*cleanup)(struct komeda_dev *mdev);
0105
0106 int (*connect_iommu)(struct komeda_dev *mdev);
0107
0108 int (*disconnect_iommu)(struct komeda_dev *mdev);
0109
0110
0111
0112
0113
0114 irqreturn_t (*irq_handler)(struct komeda_dev *mdev,
0115 struct komeda_events *events);
0116
0117 int (*enable_irq)(struct komeda_dev *mdev);
0118
0119 int (*disable_irq)(struct komeda_dev *mdev);
0120
0121 void (*on_off_vblank)(struct komeda_dev *mdev,
0122 int master_pipe, bool on);
0123
0124
0125 void (*dump_register)(struct komeda_dev *mdev, struct seq_file *seq);
0126
0127
0128
0129
0130
0131 int (*change_opmode)(struct komeda_dev *mdev, int new_mode);
0132
0133 void (*flush)(struct komeda_dev *mdev,
0134 int master_pipe, u32 active_pipes);
0135 };
0136
0137
0138
0139
0140
0141
0142
0143
0144
0145
0146
0147 enum {
0148 KOMEDA_MODE_INACTIVE = 0,
0149 KOMEDA_MODE_DISP0 = BIT(0),
0150 KOMEDA_MODE_DISP1 = BIT(1),
0151 KOMEDA_MODE_DUAL_DISP = KOMEDA_MODE_DISP0 | KOMEDA_MODE_DISP1,
0152 };
0153
0154
0155
0156
0157
0158
0159
0160
0161 struct komeda_dev {
0162
0163 struct device *dev;
0164
0165 u32 __iomem *reg_base;
0166
0167
0168 struct komeda_chip_info chip;
0169
0170 struct komeda_format_caps_table fmt_tbl;
0171
0172 struct clk *aclk;
0173
0174
0175 int irq;
0176
0177
0178 struct mutex lock;
0179
0180 u32 dpmode;
0181
0182
0183 int n_pipelines;
0184
0185 struct komeda_pipeline *pipelines[KOMEDA_MAX_PIPELINES];
0186
0187
0188 const struct komeda_dev_funcs *funcs;
0189
0190
0191
0192
0193
0194
0195 void *chip_data;
0196
0197
0198 struct iommu_domain *iommu;
0199
0200
0201 struct dentry *debugfs_root;
0202
0203
0204
0205
0206
0207
0208 u16 err_verbosity;
0209
0210 #define KOMEDA_DEV_PRINT_ERR_EVENTS BIT(0)
0211
0212 #define KOMEDA_DEV_PRINT_WARN_EVENTS BIT(1)
0213
0214 #define KOMEDA_DEV_PRINT_INFO_EVENTS BIT(2)
0215
0216 #define KOMEDA_DEV_PRINT_DUMP_STATE_ON_EVENT BIT(8)
0217
0218 #define KOMEDA_DEV_PRINT_DISABLE_RATELIMIT BIT(12)
0219 };
0220
0221 static inline bool
0222 komeda_product_match(struct komeda_dev *mdev, u32 target)
0223 {
0224 return MALIDP_CORE_ID_PRODUCT_ID(mdev->chip.core_id) == target;
0225 }
0226
0227 typedef const struct komeda_dev_funcs *
0228 (*komeda_identify_func)(u32 __iomem *reg, struct komeda_chip_info *chip);
0229
0230 const struct komeda_dev_funcs *
0231 d71_identify(u32 __iomem *reg, struct komeda_chip_info *chip);
0232
0233 struct komeda_dev *komeda_dev_create(struct device *dev);
0234 void komeda_dev_destroy(struct komeda_dev *mdev);
0235
0236 struct komeda_dev *dev_to_mdev(struct device *dev);
0237
0238 void komeda_print_events(struct komeda_events *evts, struct drm_device *dev);
0239
0240 int komeda_dev_resume(struct komeda_dev *mdev);
0241 int komeda_dev_suspend(struct komeda_dev *mdev);
0242
0243 #endif