summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-hdcp.h
blob: 334c0b8b0d4f5dbb70a85d81487fee80f28b8e03 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * Cadence MHDP8546 DP bridge driver.
 *
 * Copyright (C) 2020 Cadence Design Systems, Inc.
 *
 */

#ifndef CDNS_MHDP8546_HDCP_H
#define CDNS_MHDP8546_HDCP_H

#include "cdns-mhdp8546-core.h"

#define HDCP_MAX_RECEIVERS 32
#define HDCP_RECEIVER_ID_SIZE_BYTES 5
#define HDCP_STATUS_SIZE         0x5
#define HDCP_PORT_STS_AUTH       0x1
#define HDCP_PORT_STS_LAST_ERR_SHIFT 0x5
#define HDCP_PORT_STS_LAST_ERR_MASK  (0x0F << 5)
#define GET_HDCP_PORT_STS_LAST_ERR(__sts__) \
	(((__sts__) & HDCP_PORT_STS_LAST_ERR_MASK) >> \
	HDCP_PORT_STS_LAST_ERR_SHIFT)

#define HDCP_CONFIG_1_4     BIT(0) /* use HDCP 1.4 only */
#define HDCP_CONFIG_2_2     BIT(1) /* use HDCP 2.2 only */
/* use All HDCP versions */
#define HDCP_CONFIG_ALL     (BIT(0) | BIT(1))
#define HDCP_CONFIG_NONE    0

enum {
	HDCP_GENERAL_SET_LC_128,
	HDCP_SET_SEED,
};

enum {
	HDCP_TRAN_CONFIGURATION,
	HDCP2X_TX_SET_PUBLIC_KEY_PARAMS,
	HDCP2X_TX_SET_DEBUG_RANDOM_NUMBERS,
	HDCP2X_TX_RESPOND_KM,
	HDCP1_TX_SEND_KEYS,
	HDCP1_TX_SEND_RANDOM_AN,
	HDCP_TRAN_STATUS_CHANGE,
	HDCP2X_TX_IS_KM_STORED,
	HDCP2X_TX_STORE_KM,
	HDCP_TRAN_IS_REC_ID_VALID,
	HDCP_TRAN_RESPOND_RECEIVER_ID_VALID,
	HDCP_TRAN_TEST_KEYS,
	HDCP2X_TX_SET_KM_KEY_PARAMS,
	HDCP_NUM_OF_SUPPORTED_MESSAGES
};

enum {
	HDCP_CONTENT_TYPE_0,
	HDCP_CONTENT_TYPE_1,
};

#define DRM_HDCP_CHECK_PERIOD_MS (128 * 16)

#define HDCP_PAIRING_R_ID 5
#define HDCP_PAIRING_M_LEN 16
#define HDCP_KM_LEN 16
#define HDCP_PAIRING_M_EKH 16

struct cdns_hdcp_pairing_data {
	u8 receiver_id[HDCP_PAIRING_R_ID];
	u8 m[HDCP_PAIRING_M_LEN];
	u8 km[HDCP_KM_LEN];
	u8 ekh[HDCP_PAIRING_M_EKH];
};

enum {
	HDCP_TX_2,
	HDCP_TX_1,
	HDCP_TX_BOTH,
};

#define DLP_MODULUS_N 384
#define DLP_E 3

struct cdns_hdcp_tx_public_key_param {
	u8 N[DLP_MODULUS_N];
	u8 E[DLP_E];
};

int cdns_mhdp_hdcp_set_public_key_param(struct cdns_mhdp_device *mhdp,
					struct cdns_hdcp_tx_public_key_param *val);
int cdns_mhdp_hdcp_set_lc(struct cdns_mhdp_device *mhdp, u8 *val);
int cdns_mhdp_hdcp_enable(struct cdns_mhdp_device *mhdp, u8 content_type);
int cdns_mhdp_hdcp_disable(struct cdns_mhdp_device *mhdp);
void cdns_mhdp_hdcp_init(struct cdns_mhdp_device *mhdp);

#endif