Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 83d185ac authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "drm/msm/dp: add input validation for bpc function"

parents 6ee0606e aa11b2d7
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
MSM HDCP driver

Standalone driver managing HDCP related communications
between TZ and HLOS for MSM chipset.

Required properties:

compatible = "qcom,msm-hdcp";

Example:

qcom_msmhdcp: qcom,msm_hdcp {
       compatible = "qcom,msm-hdcp";
};
+4 −0
Original line number Diff line number Diff line
@@ -2720,6 +2720,10 @@
			 <&apps_smmu 0x712 0x1>;
	};

	qcom_msmhdcp: qcom,msm_hdcp {
		compatible = "qcom,msm-hdcp";
	};

	qcom_crypto: qcrypto@1de0000 {
		compatible = "qcom,qcrypto";
		reg = <0x1de0000 0x20000>,
+1 −0
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@ config DRM_MSM
	select QCOM_SCM
	select SND_SOC_HDMI_CODEC if SND_SOC
	select SYNC_FILE
	select HDCP_QSEECOM
	default y
	help
	  DRM/KMS driver for MSM/snapdragon.
+3 −0
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@ ccflags-$(CONFIG_DRM_MSM_DSI) += -Idrivers/gpu/drm/msm/dsi
ccflags-$(CONFIG_DRM_MSM_DSI_PLL) += -Idrivers/gpu/drm/msm/dsi
ccflags-y += -Idrivers/gpu/drm/msm/sde
ccflags-y += -Idrivers/media/platform/msm/sde/rotator
ccflags-y += -Idrivers/gpu/drm/msm/hdmi

msm_drm-y := \
	dp/dp_usbpd.o \
@@ -15,6 +16,7 @@ msm_drm-y := \
	dp/dp_ctrl.o \
	dp/dp_display.o \
	dp/dp_drm.o \
	dp/dp_hdcp2p2.o \
	sde/sde_crtc.o \
	sde/sde_encoder.o \
	sde/sde_encoder_phys_vid.o \
@@ -36,6 +38,7 @@ msm_drm-y := \
	sde/sde_hw_color_proc_v4.o \
	sde/sde_hw_ad4.o \
	sde_edid_parser.o \
	sde_hdcp_1x.o

msm_drm-$(CONFIG_DRM_MSM_HDMI) += hdmi/hdmi.o \
	hdmi/hdmi_audio.o \
+18 −190
Original line number Diff line number Diff line
@@ -17,196 +17,7 @@
#include <linux/delay.h>

#include "dp_catalog.h"

/* DP_TX Registers */
#define DP_HW_VERSION				(0x00000000)
#define DP_SW_RESET				(0x00000010)
#define DP_PHY_CTRL				(0x00000014)
#define DP_CLK_CTRL				(0x00000018)
#define DP_CLK_ACTIVE				(0x0000001C)
#define DP_INTR_STATUS				(0x00000020)
#define DP_INTR_STATUS2				(0x00000024)
#define DP_INTR_STATUS3				(0x00000028)

#define DP_DP_HPD_CTRL				(0x00000200)
#define DP_DP_HPD_INT_STATUS			(0x00000204)
#define DP_DP_HPD_INT_ACK			(0x00000208)
#define DP_DP_HPD_INT_MASK			(0x0000020C)
#define DP_DP_HPD_REFTIMER			(0x00000218)
#define DP_DP_HPD_EVENT_TIME_0			(0x0000021C)
#define DP_DP_HPD_EVENT_TIME_1			(0x00000220)
#define DP_AUX_CTRL				(0x00000230)
#define DP_AUX_DATA				(0x00000234)
#define DP_AUX_TRANS_CTRL			(0x00000238)
#define DP_TIMEOUT_COUNT			(0x0000023C)
#define DP_AUX_LIMITS				(0x00000240)
#define DP_AUX_STATUS				(0x00000244)

#define DP_DPCD_CP_IRQ				(0x201)
#define DP_DPCD_RXSTATUS			(0x69493)

#define DP_INTERRUPT_TRANS_NUM			(0x000002A0)

#define DP_MAINLINK_CTRL			(0x00000400)
#define DP_STATE_CTRL				(0x00000404)
#define DP_CONFIGURATION_CTRL			(0x00000408)
#define DP_SOFTWARE_MVID			(0x00000410)
#define DP_SOFTWARE_NVID			(0x00000418)
#define DP_TOTAL_HOR_VER			(0x0000041C)
#define DP_START_HOR_VER_FROM_SYNC		(0x00000420)
#define DP_HSYNC_VSYNC_WIDTH_POLARITY		(0x00000424)
#define DP_ACTIVE_HOR_VER			(0x00000428)
#define DP_MISC1_MISC0				(0x0000042C)
#define DP_VALID_BOUNDARY			(0x00000430)
#define DP_VALID_BOUNDARY_2			(0x00000434)
#define DP_LOGICAL2PHYSCIAL_LANE_MAPPING	(0x00000438)

#define DP_MAINLINK_READY			(0x00000440)
#define DP_MAINLINK_LEVELS			(0x00000444)
#define DP_TU					(0x0000044C)

#define DP_HBR2_COMPLIANCE_SCRAMBLER_RESET	(0x00000454)
#define DP_TEST_80BIT_CUSTOM_PATTERN_REG0	(0x000004C0)
#define DP_TEST_80BIT_CUSTOM_PATTERN_REG1	(0x000004C4)
#define DP_TEST_80BIT_CUSTOM_PATTERN_REG2	(0x000004C8)

#define MMSS_DP_MISC1_MISC0			(0x0000042C)
#define MMSS_DP_AUDIO_TIMING_GEN		(0x00000480)
#define MMSS_DP_AUDIO_TIMING_RBR_32		(0x00000484)
#define MMSS_DP_AUDIO_TIMING_HBR_32		(0x00000488)
#define MMSS_DP_AUDIO_TIMING_RBR_44		(0x0000048C)
#define MMSS_DP_AUDIO_TIMING_HBR_44		(0x00000490)
#define MMSS_DP_AUDIO_TIMING_RBR_48		(0x00000494)
#define MMSS_DP_AUDIO_TIMING_HBR_48		(0x00000498)

#define MMSS_DP_PSR_CRC_RG			(0x00000554)
#define MMSS_DP_PSR_CRC_B			(0x00000558)

#define MMSS_DP_AUDIO_CFG			(0x00000600)
#define MMSS_DP_AUDIO_STATUS			(0x00000604)
#define MMSS_DP_AUDIO_PKT_CTRL			(0x00000608)
#define MMSS_DP_AUDIO_PKT_CTRL2			(0x0000060C)
#define MMSS_DP_AUDIO_ACR_CTRL			(0x00000610)
#define MMSS_DP_AUDIO_CTRL_RESET		(0x00000614)

#define MMSS_DP_SDP_CFG				(0x00000628)
#define MMSS_DP_SDP_CFG2			(0x0000062C)
#define MMSS_DP_AUDIO_TIMESTAMP_0		(0x00000630)
#define MMSS_DP_AUDIO_TIMESTAMP_1		(0x00000634)

#define MMSS_DP_AUDIO_STREAM_0			(0x00000640)
#define MMSS_DP_AUDIO_STREAM_1			(0x00000644)

#define MMSS_DP_EXTENSION_0			(0x00000650)
#define MMSS_DP_EXTENSION_1			(0x00000654)
#define MMSS_DP_EXTENSION_2			(0x00000658)
#define MMSS_DP_EXTENSION_3			(0x0000065C)
#define MMSS_DP_EXTENSION_4			(0x00000660)
#define MMSS_DP_EXTENSION_5			(0x00000664)
#define MMSS_DP_EXTENSION_6			(0x00000668)
#define MMSS_DP_EXTENSION_7			(0x0000066C)
#define MMSS_DP_EXTENSION_8			(0x00000670)
#define MMSS_DP_EXTENSION_9			(0x00000674)
#define MMSS_DP_AUDIO_COPYMANAGEMENT_0		(0x00000678)
#define MMSS_DP_AUDIO_COPYMANAGEMENT_1		(0x0000067C)
#define MMSS_DP_AUDIO_COPYMANAGEMENT_2		(0x00000680)
#define MMSS_DP_AUDIO_COPYMANAGEMENT_3		(0x00000684)
#define MMSS_DP_AUDIO_COPYMANAGEMENT_4		(0x00000688)
#define MMSS_DP_AUDIO_COPYMANAGEMENT_5		(0x0000068C)
#define MMSS_DP_AUDIO_ISRC_0			(0x00000690)
#define MMSS_DP_AUDIO_ISRC_1			(0x00000694)
#define MMSS_DP_AUDIO_ISRC_2			(0x00000698)
#define MMSS_DP_AUDIO_ISRC_3			(0x0000069C)
#define MMSS_DP_AUDIO_ISRC_4			(0x000006A0)
#define MMSS_DP_AUDIO_ISRC_5			(0x000006A4)
#define MMSS_DP_AUDIO_INFOFRAME_0		(0x000006A8)
#define MMSS_DP_AUDIO_INFOFRAME_1		(0x000006AC)
#define MMSS_DP_AUDIO_INFOFRAME_2		(0x000006B0)

#define MMSS_DP_GENERIC0_0			(0x00000700)
#define MMSS_DP_GENERIC0_1			(0x00000704)
#define MMSS_DP_GENERIC0_2			(0x00000708)
#define MMSS_DP_GENERIC0_3			(0x0000070C)
#define MMSS_DP_GENERIC0_4			(0x00000710)
#define MMSS_DP_GENERIC0_5			(0x00000714)
#define MMSS_DP_GENERIC0_6			(0x00000718)
#define MMSS_DP_GENERIC0_7			(0x0000071C)
#define MMSS_DP_GENERIC0_8			(0x00000720)
#define MMSS_DP_GENERIC0_9			(0x00000724)
#define MMSS_DP_GENERIC1_0			(0x00000728)
#define MMSS_DP_GENERIC1_1			(0x0000072C)
#define MMSS_DP_GENERIC1_2			(0x00000730)
#define MMSS_DP_GENERIC1_3			(0x00000734)
#define MMSS_DP_GENERIC1_4			(0x00000738)
#define MMSS_DP_GENERIC1_5			(0x0000073C)
#define MMSS_DP_GENERIC1_6			(0x00000740)
#define MMSS_DP_GENERIC1_7			(0x00000744)
#define MMSS_DP_GENERIC1_8			(0x00000748)
#define MMSS_DP_GENERIC1_9			(0x0000074C)

#define MMSS_DP_TIMING_ENGINE_EN		(0x00000A10)
#define MMSS_DP_ASYNC_FIFO_CONFIG		(0x00000A88)

/*DP PHY Register offsets */
#define DP_PHY_REVISION_ID0                     (0x00000000)
#define DP_PHY_REVISION_ID1                     (0x00000004)
#define DP_PHY_REVISION_ID2                     (0x00000008)
#define DP_PHY_REVISION_ID3                     (0x0000000C)

#define DP_PHY_CFG                              (0x00000010)
#define DP_PHY_PD_CTL                           (0x00000018)
#define DP_PHY_MODE                             (0x0000001C)

#define DP_PHY_AUX_CFG0                         (0x00000020)
#define DP_PHY_AUX_CFG1                         (0x00000024)
#define DP_PHY_AUX_CFG2                         (0x00000028)
#define DP_PHY_AUX_CFG3                         (0x0000002C)
#define DP_PHY_AUX_CFG4                         (0x00000030)
#define DP_PHY_AUX_CFG5                         (0x00000034)
#define DP_PHY_AUX_CFG6                         (0x00000038)
#define DP_PHY_AUX_CFG7                         (0x0000003C)
#define DP_PHY_AUX_CFG8                         (0x00000040)
#define DP_PHY_AUX_CFG9                         (0x00000044)
#define DP_PHY_AUX_INTERRUPT_MASK               (0x00000048)
#define DP_PHY_AUX_INTERRUPT_CLEAR              (0x0000004C)

#define DP_PHY_SPARE0				(0x00AC)

#define TXn_TX_EMP_POST1_LVL			(0x000C)
#define TXn_TX_DRV_LVL				(0x001C)

#define QSERDES_COM_BIAS_EN_CLKBUFLR_EN		(0x004)

/* DP MMSS_CC registers */
#define MMSS_DP_LINK_CMD_RCGR			(0x0138)
#define MMSS_DP_LINK_CFG_RCGR			(0x013C)
#define MMSS_DP_PIXEL_M				(0x0174)
#define MMSS_DP_PIXEL_N				(0x0178)

/* DP HDCP 1.3 registers */
#define DP_HDCP_CTRL                                   (0x0A0)
#define DP_HDCP_STATUS                                 (0x0A4)
#define DP_HDCP_SW_UPPER_AKSV                          (0x298)
#define DP_HDCP_SW_LOWER_AKSV                          (0x29C)
#define DP_HDCP_ENTROPY_CTRL0                          (0x750)
#define DP_HDCP_ENTROPY_CTRL1                          (0x75C)
#define DP_HDCP_SHA_STATUS                             (0x0C8)
#define DP_HDCP_RCVPORT_DATA2_0                        (0x0B0)
#define DP_HDCP_RCVPORT_DATA3                          (0x2A4)
#define DP_HDCP_RCVPORT_DATA4                          (0x2A8)
#define DP_HDCP_RCVPORT_DATA5                          (0x0C0)
#define DP_HDCP_RCVPORT_DATA6                          (0x0C4)

#define HDCP_SEC_DP_TZ_HV_HLOS_HDCP_SHA_CTRL           (0x024)
#define HDCP_SEC_DP_TZ_HV_HLOS_HDCP_SHA_DATA           (0x028)
#define HDCP_SEC_DP_TZ_HV_HLOS_HDCP_RCVPORT_DATA0      (0x004)
#define HDCP_SEC_DP_TZ_HV_HLOS_HDCP_RCVPORT_DATA1      (0x008)
#define HDCP_SEC_DP_TZ_HV_HLOS_HDCP_RCVPORT_DATA7      (0x00C)
#define HDCP_SEC_DP_TZ_HV_HLOS_HDCP_RCVPORT_DATA8      (0x010)
#define HDCP_SEC_DP_TZ_HV_HLOS_HDCP_RCVPORT_DATA9      (0x014)
#define HDCP_SEC_DP_TZ_HV_HLOS_HDCP_RCVPORT_DATA10     (0x018)
#define HDCP_SEC_DP_TZ_HV_HLOS_HDCP_RCVPORT_DATA11     (0x01C)
#define HDCP_SEC_DP_TZ_HV_HLOS_HDCP_RCVPORT_DATA12     (0x020)
#include "dp_reg.h"

#define dp_read(offset) readl_relaxed((offset))
#define dp_write(offset, data) writel_relaxed((data), (offset))
@@ -424,6 +235,22 @@ static void dp_catalog_aux_get_irq(struct dp_catalog_aux *aux, bool cmd_busy)
}

/* controller related catalog functions */
static u32 dp_catalog_ctrl_read_hdcp_status(struct dp_catalog_ctrl *ctrl)
{
	struct dp_catalog_private *catalog;
	void __iomem *base;

	if (!ctrl) {
		pr_err("invalid input\n");
		return -EINVAL;
	}

	dp_catalog_get_priv(ctrl);
	base = catalog->io->ctrl_io.base;

	return dp_read(base + DP_HDCP_STATUS);
}

static void dp_catalog_ctrl_update_transfer_unit(struct dp_catalog_ctrl *ctrl)
{
	struct dp_catalog_private *catalog;
@@ -917,6 +744,7 @@ struct dp_catalog *dp_catalog_get(struct device *dev, struct dp_io *io)
		.update_vx_px   = dp_catalog_ctrl_update_vx_px,
		.get_interrupt  = dp_catalog_ctrl_get_interrupt,
		.update_transfer_unit = dp_catalog_ctrl_update_transfer_unit,
		.read_hdcp_status     = dp_catalog_ctrl_read_hdcp_status,
	};
	struct dp_catalog_audio audio = {
		.acr_ctrl      = dp_catalog_audio_acr_ctrl,
Loading