mirror of
https://github.com/torvalds/linux.git
synced 2026-09-23 22:14:03 +02:00
drm/msm/hdmi_hdcp: Simplify register bit updates
Simplify reister updates (read, apply mask, write) with a wrapper to make code more obvious and avoid possible errors of reading and writing to different registers. Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com> Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com> Patchwork: https://patchwork.freedesktop.org/patch/737203/ Link: https://lore.kernel.org/r/20260702-drm-msm-hdmi-cleanup-v2-2-a4a4f0e8895b@oss.qualcomm.com Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
This commit is contained in:
parent
eecba818a9
commit
c5f6b1abca
|
|
@ -306,9 +306,9 @@ static int msm_reset_hdcp_ddc_failures(struct hdmi_hdcp_ctrl *hdcp_ctrl)
|
|||
HDMI_HDCP_DDC_CTRL_0_DISABLE);
|
||||
|
||||
/* ACK the Failure to Clear it */
|
||||
reg_val = hdmi_read(hdmi, REG_HDMI_HDCP_DDC_CTRL_1);
|
||||
reg_val |= HDMI_HDCP_DDC_CTRL_1_FAILED_ACK;
|
||||
hdmi_write(hdmi, REG_HDMI_HDCP_DDC_CTRL_1, reg_val);
|
||||
hdmi_update_bits(hdmi, REG_HDMI_HDCP_DDC_CTRL_1,
|
||||
HDMI_HDCP_DDC_CTRL_1_FAILED_ACK,
|
||||
HDMI_HDCP_DDC_CTRL_1_FAILED_ACK);
|
||||
|
||||
/* Check if the FAILURE got Cleared */
|
||||
reg_val = hdmi_read(hdmi, REG_HDMI_HDCP_DDC_STATUS);
|
||||
|
|
@ -324,28 +324,22 @@ static int msm_reset_hdcp_ddc_failures(struct hdmi_hdcp_ctrl *hdcp_ctrl)
|
|||
DBG("Before: HDMI_DDC_SW_STATUS=0x%08x",
|
||||
hdmi_read(hdmi, REG_HDMI_DDC_SW_STATUS));
|
||||
/* Reset HDMI DDC software status */
|
||||
reg_val = hdmi_read(hdmi, REG_HDMI_DDC_CTRL);
|
||||
reg_val |= HDMI_DDC_CTRL_SW_STATUS_RESET;
|
||||
hdmi_write(hdmi, REG_HDMI_DDC_CTRL, reg_val);
|
||||
hdmi_update_bits(hdmi, REG_HDMI_DDC_CTRL, HDMI_DDC_CTRL_SW_STATUS_RESET,
|
||||
HDMI_DDC_CTRL_SW_STATUS_RESET);
|
||||
|
||||
rc = msm_hdmi_hdcp_msleep(hdcp_ctrl, 20, AUTH_ABORT_EV);
|
||||
|
||||
reg_val = hdmi_read(hdmi, REG_HDMI_DDC_CTRL);
|
||||
reg_val &= ~HDMI_DDC_CTRL_SW_STATUS_RESET;
|
||||
hdmi_write(hdmi, REG_HDMI_DDC_CTRL, reg_val);
|
||||
hdmi_clear_bits(hdmi, REG_HDMI_DDC_CTRL, HDMI_DDC_CTRL_SW_STATUS_RESET);
|
||||
|
||||
/* Reset HDMI DDC Controller */
|
||||
reg_val = hdmi_read(hdmi, REG_HDMI_DDC_CTRL);
|
||||
reg_val |= HDMI_DDC_CTRL_SOFT_RESET;
|
||||
hdmi_write(hdmi, REG_HDMI_DDC_CTRL, reg_val);
|
||||
hdmi_update_bits(hdmi, REG_HDMI_DDC_CTRL, HDMI_DDC_CTRL_SOFT_RESET,
|
||||
HDMI_DDC_CTRL_SOFT_RESET);
|
||||
|
||||
/* If previous msleep is aborted, skip this msleep */
|
||||
if (!rc)
|
||||
rc = msm_hdmi_hdcp_msleep(hdcp_ctrl, 20, AUTH_ABORT_EV);
|
||||
|
||||
reg_val = hdmi_read(hdmi, REG_HDMI_DDC_CTRL);
|
||||
reg_val &= ~HDMI_DDC_CTRL_SOFT_RESET;
|
||||
hdmi_write(hdmi, REG_HDMI_DDC_CTRL, reg_val);
|
||||
hdmi_clear_bits(hdmi, REG_HDMI_DDC_CTRL, HDMI_DDC_CTRL_SOFT_RESET);
|
||||
DBG("After: HDMI_DDC_SW_STATUS=0x%08x",
|
||||
hdmi_read(hdmi, REG_HDMI_DDC_SW_STATUS));
|
||||
}
|
||||
|
|
@ -399,7 +393,6 @@ static void msm_hdmi_hdcp_reauth_work(struct work_struct *work)
|
|||
struct hdmi_hdcp_ctrl, hdcp_reauth_work);
|
||||
struct hdmi *hdmi = hdcp_ctrl->hdmi;
|
||||
unsigned long flags;
|
||||
u32 reg_val;
|
||||
|
||||
DBG("HDCP REAUTH WORK");
|
||||
/*
|
||||
|
|
@ -409,9 +402,7 @@ static void msm_hdmi_hdcp_reauth_work(struct work_struct *work)
|
|||
* AN1_READY bits in HDMI_HDCP_LINK0_STATUS register
|
||||
*/
|
||||
spin_lock_irqsave(&hdmi->reg_lock, flags);
|
||||
reg_val = hdmi_read(hdmi, REG_HDMI_HPD_CTRL);
|
||||
reg_val &= ~HDMI_HPD_CTRL_ENABLE;
|
||||
hdmi_write(hdmi, REG_HDMI_HPD_CTRL, reg_val);
|
||||
hdmi_clear_bits(hdmi, REG_HDMI_HPD_CTRL, HDMI_HPD_CTRL_ENABLE);
|
||||
|
||||
/* Disable HDCP interrupts */
|
||||
hdmi_write(hdmi, REG_HDMI_HDCP_INT_CTRL, 0);
|
||||
|
|
@ -431,9 +422,8 @@ static void msm_hdmi_hdcp_reauth_work(struct work_struct *work)
|
|||
|
||||
/* Enable HPD circuitry */
|
||||
spin_lock_irqsave(&hdmi->reg_lock, flags);
|
||||
reg_val = hdmi_read(hdmi, REG_HDMI_HPD_CTRL);
|
||||
reg_val |= HDMI_HPD_CTRL_ENABLE;
|
||||
hdmi_write(hdmi, REG_HDMI_HPD_CTRL, reg_val);
|
||||
hdmi_update_bits(hdmi, REG_HDMI_HPD_CTRL, HDMI_HPD_CTRL_ENABLE,
|
||||
HDMI_HPD_CTRL_ENABLE);
|
||||
spin_unlock_irqrestore(&hdmi->reg_lock, flags);
|
||||
|
||||
/*
|
||||
|
|
@ -456,7 +446,6 @@ static int msm_hdmi_hdcp_auth_prepare(struct hdmi_hdcp_ctrl *hdcp_ctrl)
|
|||
{
|
||||
struct hdmi *hdmi = hdcp_ctrl->hdmi;
|
||||
u32 link0_status;
|
||||
u32 reg_val;
|
||||
unsigned long flags;
|
||||
int rc;
|
||||
|
||||
|
|
@ -472,14 +461,11 @@ static int msm_hdmi_hdcp_auth_prepare(struct hdmi_hdcp_ctrl *hdcp_ctrl)
|
|||
|
||||
spin_lock_irqsave(&hdmi->reg_lock, flags);
|
||||
/* disable HDMI Encrypt */
|
||||
reg_val = hdmi_read(hdmi, REG_HDMI_CTRL);
|
||||
reg_val &= ~HDMI_CTRL_ENCRYPTED;
|
||||
hdmi_write(hdmi, REG_HDMI_CTRL, reg_val);
|
||||
hdmi_clear_bits(hdmi, REG_HDMI_CTRL, HDMI_CTRL_ENCRYPTED);
|
||||
|
||||
/* Enabling Software DDC */
|
||||
reg_val = hdmi_read(hdmi, REG_HDMI_DDC_ARBITRATION);
|
||||
reg_val &= ~HDMI_DDC_ARBITRATION_HW_ARBITRATION;
|
||||
hdmi_write(hdmi, REG_HDMI_DDC_ARBITRATION, reg_val);
|
||||
hdmi_clear_bits(hdmi, REG_HDMI_DDC_ARBITRATION,
|
||||
HDMI_DDC_ARBITRATION_HW_ARBITRATION);
|
||||
spin_unlock_irqrestore(&hdmi->reg_lock, flags);
|
||||
|
||||
/*
|
||||
|
|
@ -498,9 +484,8 @@ static int msm_hdmi_hdcp_auth_prepare(struct hdmi_hdcp_ctrl *hdcp_ctrl)
|
|||
hdmi_write(hdmi, REG_HDMI_HDCP_ENTROPY_CTRL1, 0xF00DFACE);
|
||||
|
||||
/* Disable the RngCipher state */
|
||||
reg_val = hdmi_read(hdmi, REG_HDMI_HDCP_DEBUG_CTRL);
|
||||
reg_val &= ~HDMI_HDCP_DEBUG_CTRL_RNG_CIPHER;
|
||||
hdmi_write(hdmi, REG_HDMI_HDCP_DEBUG_CTRL, reg_val);
|
||||
hdmi_clear_bits(hdmi, REG_HDMI_HDCP_DEBUG_CTRL,
|
||||
HDMI_HDCP_DEBUG_CTRL_RNG_CIPHER);
|
||||
DBG("HDCP_DEBUG_CTRL=0x%08x",
|
||||
hdmi_read(hdmi, REG_HDMI_HDCP_DEBUG_CTRL));
|
||||
|
||||
|
|
@ -537,15 +522,12 @@ static int msm_hdmi_hdcp_auth_prepare(struct hdmi_hdcp_ctrl *hdcp_ctrl)
|
|||
static void msm_hdmi_hdcp_auth_fail(struct hdmi_hdcp_ctrl *hdcp_ctrl)
|
||||
{
|
||||
struct hdmi *hdmi = hdcp_ctrl->hdmi;
|
||||
u32 reg_val;
|
||||
unsigned long flags;
|
||||
|
||||
DBG("hdcp auth failed, queue reauth work");
|
||||
/* clear HDMI Encrypt */
|
||||
spin_lock_irqsave(&hdmi->reg_lock, flags);
|
||||
reg_val = hdmi_read(hdmi, REG_HDMI_CTRL);
|
||||
reg_val &= ~HDMI_CTRL_ENCRYPTED;
|
||||
hdmi_write(hdmi, REG_HDMI_CTRL, reg_val);
|
||||
hdmi_clear_bits(hdmi, REG_HDMI_CTRL, HDMI_CTRL_ENCRYPTED);
|
||||
spin_unlock_irqrestore(&hdmi->reg_lock, flags);
|
||||
|
||||
hdcp_ctrl->hdcp_state = HDCP_STATE_AUTH_FAILED;
|
||||
|
|
@ -555,7 +537,6 @@ static void msm_hdmi_hdcp_auth_fail(struct hdmi_hdcp_ctrl *hdcp_ctrl)
|
|||
static void msm_hdmi_hdcp_auth_done(struct hdmi_hdcp_ctrl *hdcp_ctrl)
|
||||
{
|
||||
struct hdmi *hdmi = hdcp_ctrl->hdmi;
|
||||
u32 reg_val;
|
||||
unsigned long flags;
|
||||
|
||||
/*
|
||||
|
|
@ -563,16 +544,15 @@ static void msm_hdmi_hdcp_auth_done(struct hdmi_hdcp_ctrl *hdcp_ctrl)
|
|||
* there is no Arbitration between software and hardware for DDC
|
||||
*/
|
||||
spin_lock_irqsave(&hdmi->reg_lock, flags);
|
||||
reg_val = hdmi_read(hdmi, REG_HDMI_DDC_ARBITRATION);
|
||||
reg_val |= HDMI_DDC_ARBITRATION_HW_ARBITRATION;
|
||||
hdmi_write(hdmi, REG_HDMI_DDC_ARBITRATION, reg_val);
|
||||
hdmi_update_bits(hdmi, REG_HDMI_DDC_ARBITRATION,
|
||||
HDMI_DDC_ARBITRATION_HW_ARBITRATION,
|
||||
HDMI_DDC_ARBITRATION_HW_ARBITRATION);
|
||||
spin_unlock_irqrestore(&hdmi->reg_lock, flags);
|
||||
|
||||
/* enable HDMI Encrypt */
|
||||
spin_lock_irqsave(&hdmi->reg_lock, flags);
|
||||
reg_val = hdmi_read(hdmi, REG_HDMI_CTRL);
|
||||
reg_val |= HDMI_CTRL_ENCRYPTED;
|
||||
hdmi_write(hdmi, REG_HDMI_CTRL, reg_val);
|
||||
hdmi_update_bits(hdmi, REG_HDMI_CTRL, HDMI_CTRL_ENCRYPTED,
|
||||
HDMI_CTRL_ENCRYPTED);
|
||||
spin_unlock_irqrestore(&hdmi->reg_lock, flags);
|
||||
|
||||
hdcp_ctrl->hdcp_state = HDCP_STATE_AUTHENTICATED;
|
||||
|
|
@ -1304,7 +1284,6 @@ static void msm_hdmi_hdcp_auth_work(struct work_struct *work)
|
|||
void msm_hdmi_hdcp_on(struct hdmi_hdcp_ctrl *hdcp_ctrl)
|
||||
{
|
||||
struct hdmi *hdmi = hdcp_ctrl->hdmi;
|
||||
u32 reg_val;
|
||||
unsigned long flags;
|
||||
|
||||
if ((HDCP_STATE_INACTIVE != hdcp_ctrl->hdcp_state) ||
|
||||
|
|
@ -1315,9 +1294,7 @@ void msm_hdmi_hdcp_on(struct hdmi_hdcp_ctrl *hdcp_ctrl)
|
|||
|
||||
/* clear HDMI Encrypt */
|
||||
spin_lock_irqsave(&hdmi->reg_lock, flags);
|
||||
reg_val = hdmi_read(hdmi, REG_HDMI_CTRL);
|
||||
reg_val &= ~HDMI_CTRL_ENCRYPTED;
|
||||
hdmi_write(hdmi, REG_HDMI_CTRL, reg_val);
|
||||
hdmi_clear_bits(hdmi, REG_HDMI_CTRL, HDMI_CTRL_ENCRYPTED);
|
||||
spin_unlock_irqrestore(&hdmi->reg_lock, flags);
|
||||
|
||||
hdcp_ctrl->auth_event = 0;
|
||||
|
|
@ -1330,7 +1307,6 @@ void msm_hdmi_hdcp_off(struct hdmi_hdcp_ctrl *hdcp_ctrl)
|
|||
{
|
||||
struct hdmi *hdmi = hdcp_ctrl->hdmi;
|
||||
unsigned long flags;
|
||||
u32 reg_val;
|
||||
|
||||
if ((HDCP_STATE_INACTIVE == hdcp_ctrl->hdcp_state) ||
|
||||
(HDCP_STATE_NO_AKSV == hdcp_ctrl->hdcp_state)) {
|
||||
|
|
@ -1345,9 +1321,7 @@ void msm_hdmi_hdcp_off(struct hdmi_hdcp_ctrl *hdcp_ctrl)
|
|||
* AN1_READY bits in HDMI_HDCP_LINK0_STATUS register
|
||||
*/
|
||||
spin_lock_irqsave(&hdmi->reg_lock, flags);
|
||||
reg_val = hdmi_read(hdmi, REG_HDMI_HPD_CTRL);
|
||||
reg_val &= ~HDMI_HPD_CTRL_ENABLE;
|
||||
hdmi_write(hdmi, REG_HDMI_HPD_CTRL, reg_val);
|
||||
hdmi_clear_bits(hdmi, REG_HDMI_HPD_CTRL, HDMI_HPD_CTRL_ENABLE);
|
||||
|
||||
/*
|
||||
* Disable HDCP interrupts.
|
||||
|
|
@ -1375,14 +1349,11 @@ void msm_hdmi_hdcp_off(struct hdmi_hdcp_ctrl *hdcp_ctrl)
|
|||
hdmi_write(hdmi, REG_HDMI_HDCP_CTRL, 0);
|
||||
|
||||
spin_lock_irqsave(&hdmi->reg_lock, flags);
|
||||
reg_val = hdmi_read(hdmi, REG_HDMI_CTRL);
|
||||
reg_val &= ~HDMI_CTRL_ENCRYPTED;
|
||||
hdmi_write(hdmi, REG_HDMI_CTRL, reg_val);
|
||||
hdmi_clear_bits(hdmi, REG_HDMI_CTRL, HDMI_CTRL_ENCRYPTED);
|
||||
|
||||
/* Enable HPD circuitry */
|
||||
reg_val = hdmi_read(hdmi, REG_HDMI_HPD_CTRL);
|
||||
reg_val |= HDMI_HPD_CTRL_ENABLE;
|
||||
hdmi_write(hdmi, REG_HDMI_HPD_CTRL, reg_val);
|
||||
hdmi_update_bits(hdmi, REG_HDMI_HPD_CTRL, HDMI_HPD_CTRL_ENABLE,
|
||||
HDMI_HPD_CTRL_ENABLE);
|
||||
spin_unlock_irqrestore(&hdmi->reg_lock, flags);
|
||||
|
||||
hdcp_ctrl->hdcp_state = HDCP_STATE_INACTIVE;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user