GNU Linux-libre 5.19-rc6-gnu
[releases.git] / drivers / gpu / drm / bridge / cadence / cdns-mhdp8546-hdcp.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Cadence MHDP8546 DP bridge driver.
4  *
5  * Copyright (C) 2020 Cadence Design Systems, Inc.
6  *
7  */
8
9 #ifndef CDNS_MHDP8546_HDCP_H
10 #define CDNS_MHDP8546_HDCP_H
11
12 #include "cdns-mhdp8546-core.h"
13
14 #define HDCP_MAX_RECEIVERS 32
15 #define HDCP_RECEIVER_ID_SIZE_BYTES 5
16 #define HDCP_STATUS_SIZE         0x5
17 #define HDCP_PORT_STS_AUTH       0x1
18 #define HDCP_PORT_STS_LAST_ERR_SHIFT 0x5
19 #define HDCP_PORT_STS_LAST_ERR_MASK  (0x0F << 5)
20 #define GET_HDCP_PORT_STS_LAST_ERR(__sts__) \
21         (((__sts__) & HDCP_PORT_STS_LAST_ERR_MASK) >> \
22         HDCP_PORT_STS_LAST_ERR_SHIFT)
23
24 #define HDCP_CONFIG_1_4     BIT(0) /* use HDCP 1.4 only */
25 #define HDCP_CONFIG_2_2     BIT(1) /* use HDCP 2.2 only */
26 /* use All HDCP versions */
27 #define HDCP_CONFIG_ALL     (BIT(0) | BIT(1))
28 #define HDCP_CONFIG_NONE    0
29
30 enum {
31         HDCP_GENERAL_SET_LC_128,
32         HDCP_SET_SEED,
33 };
34
35 enum {
36         HDCP_TRAN_CONFIGURATION,
37         HDCP2X_TX_SET_PUBLIC_KEY_PARAMS,
38         HDCP2X_TX_SET_DEBUG_RANDOM_NUMBERS,
39         HDCP2X_TX_RESPOND_KM,
40         HDCP1_TX_SEND_KEYS,
41         HDCP1_TX_SEND_RANDOM_AN,
42         HDCP_TRAN_STATUS_CHANGE,
43         HDCP2X_TX_IS_KM_STORED,
44         HDCP2X_TX_STORE_KM,
45         HDCP_TRAN_IS_REC_ID_VALID,
46         HDCP_TRAN_RESPOND_RECEIVER_ID_VALID,
47         HDCP_TRAN_TEST_KEYS,
48         HDCP2X_TX_SET_KM_KEY_PARAMS,
49         HDCP_NUM_OF_SUPPORTED_MESSAGES
50 };
51
52 enum {
53         HDCP_CONTENT_TYPE_0,
54         HDCP_CONTENT_TYPE_1,
55 };
56
57 #define DRM_HDCP_CHECK_PERIOD_MS (128 * 16)
58
59 #define HDCP_PAIRING_R_ID 5
60 #define HDCP_PAIRING_M_LEN 16
61 #define HDCP_KM_LEN 16
62 #define HDCP_PAIRING_M_EKH 16
63
64 struct cdns_hdcp_pairing_data {
65         u8 receiver_id[HDCP_PAIRING_R_ID];
66         u8 m[HDCP_PAIRING_M_LEN];
67         u8 km[HDCP_KM_LEN];
68         u8 ekh[HDCP_PAIRING_M_EKH];
69 };
70
71 enum {
72         HDCP_TX_2,
73         HDCP_TX_1,
74         HDCP_TX_BOTH,
75 };
76
77 #define DLP_MODULUS_N 384
78 #define DLP_E 3
79
80 struct cdns_hdcp_tx_public_key_param {
81         u8 N[DLP_MODULUS_N];
82         u8 E[DLP_E];
83 };
84
85 int cdns_mhdp_hdcp_set_public_key_param(struct cdns_mhdp_device *mhdp,
86                                         struct cdns_hdcp_tx_public_key_param *val);
87 int cdns_mhdp_hdcp_set_lc(struct cdns_mhdp_device *mhdp, u8 *val);
88 int cdns_mhdp_hdcp_enable(struct cdns_mhdp_device *mhdp, u8 content_type);
89 int cdns_mhdp_hdcp_disable(struct cdns_mhdp_device *mhdp);
90 void cdns_mhdp_hdcp_init(struct cdns_mhdp_device *mhdp);
91
92 #endif