1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /* Copyright (c) 2015-2018, The Linux Foundation. All rights reserved.
3 */
4
5 #ifndef _DPU_FORMATS_H
6 #define _DPU_FORMATS_H
7
8 #include <drm/drm_fourcc.h>
9 #include "msm_gem.h"
10 #include "dpu_hw_mdss.h"
11
12 /**
13 * dpu_find_format - validate if the pixel format is supported
14 * @format: dpu format
15 * @supported_formats: supported formats by dpu HW
16 * @num_formatss: total number of formats
17 *
18 * Return: false if not valid format, true on success
19 */
dpu_find_format(u32 format,const u32 * supported_formats,size_t num_formats)20 static inline bool dpu_find_format(u32 format, const u32 *supported_formats,
21 size_t num_formats)
22 {
23 int i;
24
25 for (i = 0; i < num_formats; i++) {
26 /* check for valid formats supported */
27 if (format == supported_formats[i])
28 return true;
29 }
30
31 return false;
32 }
33
34 /**
35 * dpu_format_check_modified_format - validate format and buffers for
36 * dpu non-standard, i.e. modified format
37 * @kms: kms driver
38 * @msm_fmt: pointer to the msm_fmt base pointer of an msm_format
39 * @cmd: fb_cmd2 structure user request
40 * @bos: gem buffer object list
41 *
42 * Return: error code on failure, 0 on success
43 */
44 int dpu_format_check_modified_format(
45 const struct msm_kms *kms,
46 const struct msm_format *msm_fmt,
47 const struct drm_mode_fb_cmd2 *cmd,
48 struct drm_gem_object **bos);
49
50 /**
51 * dpu_format_populate_layout - populate the given format layout based on
52 * mmu, fb, and format found in the fb
53 * @aspace: address space pointer
54 * @fb: framebuffer pointer
55 * @fmtl: format layout structure to populate
56 *
57 * Return: error code on failure, -EAGAIN if success but the addresses
58 * are the same as before or 0 if new addresses were populated
59 */
60 int dpu_format_populate_layout(
61 struct msm_gem_address_space *aspace,
62 struct drm_framebuffer *fb,
63 struct dpu_hw_fmt_layout *fmtl);
64
65 #endif /*_DPU_FORMATS_H */
66