hdmi_hdcp.c (36641B)
1// SPDX-License-Identifier: GPL-2.0-only 2/* Copyright (c) 2010-2015, The Linux Foundation. All rights reserved. 3 */ 4 5#include "hdmi.h" 6#include <linux/qcom_scm.h> 7 8#define HDCP_REG_ENABLE 0x01 9#define HDCP_REG_DISABLE 0x00 10#define HDCP_PORT_ADDR 0x74 11 12#define HDCP_INT_STATUS_MASK ( \ 13 HDMI_HDCP_INT_CTRL_AUTH_SUCCESS_INT | \ 14 HDMI_HDCP_INT_CTRL_AUTH_FAIL_INT | \ 15 HDMI_HDCP_INT_CTRL_AUTH_XFER_REQ_INT | \ 16 HDMI_HDCP_INT_CTRL_AUTH_XFER_DONE_INT) 17 18#define AUTH_WORK_RETRIES_TIME 100 19#define AUTH_RETRIES_TIME 30 20 21/* QFPROM Registers for HDMI/HDCP */ 22#define QFPROM_RAW_FEAT_CONFIG_ROW0_LSB 0x000000F8 23#define QFPROM_RAW_FEAT_CONFIG_ROW0_MSB 0x000000FC 24#define HDCP_KSV_LSB 0x000060D8 25#define HDCP_KSV_MSB 0x000060DC 26 27enum DS_TYPE { /* type of downstream device */ 28 DS_UNKNOWN, 29 DS_RECEIVER, 30 DS_REPEATER, 31}; 32 33enum hdmi_hdcp_state { 34 HDCP_STATE_NO_AKSV, 35 HDCP_STATE_INACTIVE, 36 HDCP_STATE_AUTHENTICATING, 37 HDCP_STATE_AUTHENTICATED, 38 HDCP_STATE_AUTH_FAILED 39}; 40 41struct hdmi_hdcp_reg_data { 42 u32 reg_id; 43 u32 off; 44 char *name; 45 u32 reg_val; 46}; 47 48struct hdmi_hdcp_ctrl { 49 struct hdmi *hdmi; 50 u32 auth_retries; 51 bool tz_hdcp; 52 enum hdmi_hdcp_state hdcp_state; 53 struct work_struct hdcp_auth_work; 54 struct work_struct hdcp_reauth_work; 55 56#define AUTH_ABORT_EV 1 57#define AUTH_RESULT_RDY_EV 2 58 unsigned long auth_event; 59 wait_queue_head_t auth_event_queue; 60 61 u32 ksv_fifo_w_index; 62 /* 63 * store aksv from qfprom 64 */ 65 u32 aksv_lsb; 66 u32 aksv_msb; 67 bool aksv_valid; 68 u32 ds_type; 69 u32 bksv_lsb; 70 u32 bksv_msb; 71 u8 dev_count; 72 u8 depth; 73 u8 ksv_list[5 * 127]; 74 bool max_cascade_exceeded; 75 bool max_dev_exceeded; 76}; 77 78static int msm_hdmi_ddc_read(struct hdmi *hdmi, u16 addr, u8 offset, 79 u8 *data, u16 data_len) 80{ 81 int rc; 82 int retry = 5; 83 struct i2c_msg msgs[] = { 84 { 85 .addr = addr >> 1, 86 .flags = 0, 87 .len = 1, 88 .buf = &offset, 89 }, { 90 .addr = addr >> 1, 91 .flags = I2C_M_RD, 92 .len = data_len, 93 .buf = data, 94 } 95 }; 96 97 DBG("Start DDC read"); 98retry: 99 rc = i2c_transfer(hdmi->i2c, msgs, 2); 100 101 retry--; 102 if (rc == 2) 103 rc = 0; 104 else if (retry > 0) 105 goto retry; 106 else 107 rc = -EIO; 108 109 DBG("End DDC read %d", rc); 110 111 return rc; 112} 113 114#define HDCP_DDC_WRITE_MAX_BYTE_NUM 32 115 116static int msm_hdmi_ddc_write(struct hdmi *hdmi, u16 addr, u8 offset, 117 u8 *data, u16 data_len) 118{ 119 int rc; 120 int retry = 10; 121 u8 buf[HDCP_DDC_WRITE_MAX_BYTE_NUM]; 122 struct i2c_msg msgs[] = { 123 { 124 .addr = addr >> 1, 125 .flags = 0, 126 .len = 1, 127 } 128 }; 129 130 DBG("Start DDC write"); 131 if (data_len > (HDCP_DDC_WRITE_MAX_BYTE_NUM - 1)) { 132 pr_err("%s: write size too big\n", __func__); 133 return -ERANGE; 134 } 135 136 buf[0] = offset; 137 memcpy(&buf[1], data, data_len); 138 msgs[0].buf = buf; 139 msgs[0].len = data_len + 1; 140retry: 141 rc = i2c_transfer(hdmi->i2c, msgs, 1); 142 143 retry--; 144 if (rc == 1) 145 rc = 0; 146 else if (retry > 0) 147 goto retry; 148 else 149 rc = -EIO; 150 151 DBG("End DDC write %d", rc); 152 153 return rc; 154} 155 156static int msm_hdmi_hdcp_scm_wr(struct hdmi_hdcp_ctrl *hdcp_ctrl, u32 *preg, 157 u32 *pdata, u32 count) 158{ 159 struct hdmi *hdmi = hdcp_ctrl->hdmi; 160 struct qcom_scm_hdcp_req scm_buf[QCOM_SCM_HDCP_MAX_REQ_CNT]; 161 u32 resp, phy_addr, idx = 0; 162 int i, ret = 0; 163 164 WARN_ON(!pdata || !preg || (count == 0)); 165 166 if (hdcp_ctrl->tz_hdcp) { 167 phy_addr = (u32)hdmi->mmio_phy_addr; 168 169 while (count) { 170 memset(scm_buf, 0, sizeof(scm_buf)); 171 for (i = 0; i < count && i < QCOM_SCM_HDCP_MAX_REQ_CNT; 172 i++) { 173 scm_buf[i].addr = phy_addr + preg[idx]; 174 scm_buf[i].val = pdata[idx]; 175 idx++; 176 } 177 ret = qcom_scm_hdcp_req(scm_buf, i, &resp); 178 179 if (ret || resp) { 180 pr_err("%s: error: scm_call ret=%d resp=%u\n", 181 __func__, ret, resp); 182 ret = -EINVAL; 183 break; 184 } 185 186 count -= i; 187 } 188 } else { 189 for (i = 0; i < count; i++) 190 hdmi_write(hdmi, preg[i], pdata[i]); 191 } 192 193 return ret; 194} 195 196void msm_hdmi_hdcp_irq(struct hdmi_hdcp_ctrl *hdcp_ctrl) 197{ 198 struct hdmi *hdmi = hdcp_ctrl->hdmi; 199 u32 reg_val, hdcp_int_status; 200 unsigned long flags; 201 202 spin_lock_irqsave(&hdmi->reg_lock, flags); 203 reg_val = hdmi_read(hdmi, REG_HDMI_HDCP_INT_CTRL); 204 hdcp_int_status = reg_val & HDCP_INT_STATUS_MASK; 205 if (!hdcp_int_status) { 206 spin_unlock_irqrestore(&hdmi->reg_lock, flags); 207 return; 208 } 209 /* Clear Interrupts */ 210 reg_val |= hdcp_int_status << 1; 211 /* Clear AUTH_FAIL_INFO as well */ 212 if (hdcp_int_status & HDMI_HDCP_INT_CTRL_AUTH_FAIL_INT) 213 reg_val |= HDMI_HDCP_INT_CTRL_AUTH_FAIL_INFO_ACK; 214 hdmi_write(hdmi, REG_HDMI_HDCP_INT_CTRL, reg_val); 215 spin_unlock_irqrestore(&hdmi->reg_lock, flags); 216 217 DBG("hdcp irq %x", hdcp_int_status); 218 219 if (hdcp_int_status & HDMI_HDCP_INT_CTRL_AUTH_SUCCESS_INT) { 220 pr_info("%s:AUTH_SUCCESS_INT received\n", __func__); 221 if (HDCP_STATE_AUTHENTICATING == hdcp_ctrl->hdcp_state) { 222 set_bit(AUTH_RESULT_RDY_EV, &hdcp_ctrl->auth_event); 223 wake_up_all(&hdcp_ctrl->auth_event_queue); 224 } 225 } 226 227 if (hdcp_int_status & HDMI_HDCP_INT_CTRL_AUTH_FAIL_INT) { 228 reg_val = hdmi_read(hdmi, REG_HDMI_HDCP_LINK0_STATUS); 229 pr_info("%s: AUTH_FAIL_INT rcvd, LINK0_STATUS=0x%08x\n", 230 __func__, reg_val); 231 if (HDCP_STATE_AUTHENTICATED == hdcp_ctrl->hdcp_state) 232 queue_work(hdmi->workq, &hdcp_ctrl->hdcp_reauth_work); 233 else if (HDCP_STATE_AUTHENTICATING == 234 hdcp_ctrl->hdcp_state) { 235 set_bit(AUTH_RESULT_RDY_EV, &hdcp_ctrl->auth_event); 236 wake_up_all(&hdcp_ctrl->auth_event_queue); 237 } 238 } 239} 240 241static int msm_hdmi_hdcp_msleep(struct hdmi_hdcp_ctrl *hdcp_ctrl, u32 ms, u32 ev) 242{ 243 int rc; 244 245 rc = wait_event_timeout(hdcp_ctrl->auth_event_queue, 246 !!test_bit(ev, &hdcp_ctrl->auth_event), 247 msecs_to_jiffies(ms)); 248 if (rc) { 249 pr_info("%s: msleep is canceled by event %d\n", 250 __func__, ev); 251 clear_bit(ev, &hdcp_ctrl->auth_event); 252 return -ECANCELED; 253 } 254 255 return 0; 256} 257 258static int msm_hdmi_hdcp_read_validate_aksv(struct hdmi_hdcp_ctrl *hdcp_ctrl) 259{ 260 struct hdmi *hdmi = hdcp_ctrl->hdmi; 261 262 /* Fetch aksv from QFPROM, this info should be public. */ 263 hdcp_ctrl->aksv_lsb = hdmi_qfprom_read(hdmi, HDCP_KSV_LSB); 264 hdcp_ctrl->aksv_msb = hdmi_qfprom_read(hdmi, HDCP_KSV_MSB); 265 266 /* check there are 20 ones in AKSV */ 267 if ((hweight32(hdcp_ctrl->aksv_lsb) + hweight32(hdcp_ctrl->aksv_msb)) 268 != 20) { 269 pr_err("%s: AKSV QFPROM doesn't have 20 1's, 20 0's\n", 270 __func__); 271 pr_err("%s: QFPROM AKSV chk failed (AKSV=%02x%08x)\n", 272 __func__, hdcp_ctrl->aksv_msb, 273 hdcp_ctrl->aksv_lsb); 274 return -EINVAL; 275 } 276 DBG("AKSV=%02x%08x", hdcp_ctrl->aksv_msb, hdcp_ctrl->aksv_lsb); 277 278 return 0; 279} 280 281static int msm_reset_hdcp_ddc_failures(struct hdmi_hdcp_ctrl *hdcp_ctrl) 282{ 283 struct hdmi *hdmi = hdcp_ctrl->hdmi; 284 u32 reg_val, failure, nack0; 285 int rc = 0; 286 287 /* Check for any DDC transfer failures */ 288 reg_val = hdmi_read(hdmi, REG_HDMI_HDCP_DDC_STATUS); 289 failure = reg_val & HDMI_HDCP_DDC_STATUS_FAILED; 290 nack0 = reg_val & HDMI_HDCP_DDC_STATUS_NACK0; 291 DBG("HDCP_DDC_STATUS=0x%x, FAIL=%d, NACK0=%d", 292 reg_val, failure, nack0); 293 294 if (failure) { 295 /* 296 * Indicates that the last HDCP HW DDC transfer failed. 297 * This occurs when a transfer is attempted with HDCP DDC 298 * disabled (HDCP_DDC_DISABLE=1) or the number of retries 299 * matches HDCP_DDC_RETRY_CNT. 300 * Failure occurred, let's clear it. 301 */ 302 DBG("DDC failure detected"); 303 304 /* First, Disable DDC */ 305 hdmi_write(hdmi, REG_HDMI_HDCP_DDC_CTRL_0, 306 HDMI_HDCP_DDC_CTRL_0_DISABLE); 307 308 /* ACK the Failure to Clear it */ 309 reg_val = hdmi_read(hdmi, REG_HDMI_HDCP_DDC_CTRL_1); 310 reg_val |= HDMI_HDCP_DDC_CTRL_1_FAILED_ACK; 311 hdmi_write(hdmi, REG_HDMI_HDCP_DDC_CTRL_1, reg_val); 312 313 /* Check if the FAILURE got Cleared */ 314 reg_val = hdmi_read(hdmi, REG_HDMI_HDCP_DDC_STATUS); 315 if (reg_val & HDMI_HDCP_DDC_STATUS_FAILED) 316 pr_info("%s: Unable to clear HDCP DDC Failure\n", 317 __func__); 318 319 /* Re-Enable HDCP DDC */ 320 hdmi_write(hdmi, REG_HDMI_HDCP_DDC_CTRL_0, 0); 321 } 322 323 if (nack0) { 324 DBG("Before: HDMI_DDC_SW_STATUS=0x%08x", 325 hdmi_read(hdmi, REG_HDMI_DDC_SW_STATUS)); 326 /* Reset HDMI DDC software status */ 327 reg_val = hdmi_read(hdmi, REG_HDMI_DDC_CTRL); 328 reg_val |= HDMI_DDC_CTRL_SW_STATUS_RESET; 329 hdmi_write(hdmi, REG_HDMI_DDC_CTRL, reg_val); 330 331 rc = msm_hdmi_hdcp_msleep(hdcp_ctrl, 20, AUTH_ABORT_EV); 332 333 reg_val = hdmi_read(hdmi, REG_HDMI_DDC_CTRL); 334 reg_val &= ~HDMI_DDC_CTRL_SW_STATUS_RESET; 335 hdmi_write(hdmi, REG_HDMI_DDC_CTRL, reg_val); 336 337 /* Reset HDMI DDC Controller */ 338 reg_val = hdmi_read(hdmi, REG_HDMI_DDC_CTRL); 339 reg_val |= HDMI_DDC_CTRL_SOFT_RESET; 340 hdmi_write(hdmi, REG_HDMI_DDC_CTRL, reg_val); 341 342 /* If previous msleep is aborted, skip this msleep */ 343 if (!rc) 344 rc = msm_hdmi_hdcp_msleep(hdcp_ctrl, 20, AUTH_ABORT_EV); 345 346 reg_val = hdmi_read(hdmi, REG_HDMI_DDC_CTRL); 347 reg_val &= ~HDMI_DDC_CTRL_SOFT_RESET; 348 hdmi_write(hdmi, REG_HDMI_DDC_CTRL, reg_val); 349 DBG("After: HDMI_DDC_SW_STATUS=0x%08x", 350 hdmi_read(hdmi, REG_HDMI_DDC_SW_STATUS)); 351 } 352 353 return rc; 354} 355 356static int msm_hdmi_hdcp_hw_ddc_clean(struct hdmi_hdcp_ctrl *hdcp_ctrl) 357{ 358 int rc; 359 u32 hdcp_ddc_status, ddc_hw_status; 360 u32 xfer_done, xfer_req, hw_done; 361 bool hw_not_ready; 362 u32 timeout_count; 363 struct hdmi *hdmi = hdcp_ctrl->hdmi; 364 365 if (hdmi_read(hdmi, REG_HDMI_DDC_HW_STATUS) == 0) 366 return 0; 367 368 /* Wait to be clean on DDC HW engine */ 369 timeout_count = 100; 370 do { 371 hdcp_ddc_status = hdmi_read(hdmi, REG_HDMI_HDCP_DDC_STATUS); 372 ddc_hw_status = hdmi_read(hdmi, REG_HDMI_DDC_HW_STATUS); 373 374 xfer_done = hdcp_ddc_status & HDMI_HDCP_DDC_STATUS_XFER_DONE; 375 xfer_req = hdcp_ddc_status & HDMI_HDCP_DDC_STATUS_XFER_REQ; 376 hw_done = ddc_hw_status & HDMI_DDC_HW_STATUS_DONE; 377 hw_not_ready = !xfer_done || xfer_req || !hw_done; 378 379 if (hw_not_ready) 380 break; 381 382 timeout_count--; 383 if (!timeout_count) { 384 pr_warn("%s: hw_ddc_clean failed\n", __func__); 385 return -ETIMEDOUT; 386 } 387 388 rc = msm_hdmi_hdcp_msleep(hdcp_ctrl, 20, AUTH_ABORT_EV); 389 if (rc) 390 return rc; 391 } while (1); 392 393 return 0; 394} 395 396static void msm_hdmi_hdcp_reauth_work(struct work_struct *work) 397{ 398 struct hdmi_hdcp_ctrl *hdcp_ctrl = container_of(work, 399 struct hdmi_hdcp_ctrl, hdcp_reauth_work); 400 struct hdmi *hdmi = hdcp_ctrl->hdmi; 401 unsigned long flags; 402 u32 reg_val; 403 404 DBG("HDCP REAUTH WORK"); 405 /* 406 * Disable HPD circuitry. 407 * This is needed to reset the HDCP cipher engine so that when we 408 * attempt a re-authentication, HW would clear the AN0_READY and 409 * AN1_READY bits in HDMI_HDCP_LINK0_STATUS register 410 */ 411 spin_lock_irqsave(&hdmi->reg_lock, flags); 412 reg_val = hdmi_read(hdmi, REG_HDMI_HPD_CTRL); 413 reg_val &= ~HDMI_HPD_CTRL_ENABLE; 414 hdmi_write(hdmi, REG_HDMI_HPD_CTRL, reg_val); 415 416 /* Disable HDCP interrupts */ 417 hdmi_write(hdmi, REG_HDMI_HDCP_INT_CTRL, 0); 418 spin_unlock_irqrestore(&hdmi->reg_lock, flags); 419 420 hdmi_write(hdmi, REG_HDMI_HDCP_RESET, 421 HDMI_HDCP_RESET_LINK0_DEAUTHENTICATE); 422 423 /* Wait to be clean on DDC HW engine */ 424 if (msm_hdmi_hdcp_hw_ddc_clean(hdcp_ctrl)) { 425 pr_info("%s: reauth work aborted\n", __func__); 426 return; 427 } 428 429 /* Disable encryption and disable the HDCP block */ 430 hdmi_write(hdmi, REG_HDMI_HDCP_CTRL, 0); 431 432 /* Enable HPD circuitry */ 433 spin_lock_irqsave(&hdmi->reg_lock, flags); 434 reg_val = hdmi_read(hdmi, REG_HDMI_HPD_CTRL); 435 reg_val |= HDMI_HPD_CTRL_ENABLE; 436 hdmi_write(hdmi, REG_HDMI_HPD_CTRL, reg_val); 437 spin_unlock_irqrestore(&hdmi->reg_lock, flags); 438 439 /* 440 * Only retry defined times then abort current authenticating process 441 */ 442 if (++hdcp_ctrl->auth_retries == AUTH_RETRIES_TIME) { 443 hdcp_ctrl->hdcp_state = HDCP_STATE_INACTIVE; 444 hdcp_ctrl->auth_retries = 0; 445 pr_info("%s: abort reauthentication!\n", __func__); 446 447 return; 448 } 449 450 DBG("Queue AUTH WORK"); 451 hdcp_ctrl->hdcp_state = HDCP_STATE_AUTHENTICATING; 452 queue_work(hdmi->workq, &hdcp_ctrl->hdcp_auth_work); 453} 454 455static int msm_hdmi_hdcp_auth_prepare(struct hdmi_hdcp_ctrl *hdcp_ctrl) 456{ 457 struct hdmi *hdmi = hdcp_ctrl->hdmi; 458 u32 link0_status; 459 u32 reg_val; 460 unsigned long flags; 461 int rc; 462 463 if (!hdcp_ctrl->aksv_valid) { 464 rc = msm_hdmi_hdcp_read_validate_aksv(hdcp_ctrl); 465 if (rc) { 466 pr_err("%s: ASKV validation failed\n", __func__); 467 hdcp_ctrl->hdcp_state = HDCP_STATE_NO_AKSV; 468 return -ENOTSUPP; 469 } 470 hdcp_ctrl->aksv_valid = true; 471 } 472 473 spin_lock_irqsave(&hdmi->reg_lock, flags); 474 /* disable HDMI Encrypt */ 475 reg_val = hdmi_read(hdmi, REG_HDMI_CTRL); 476 reg_val &= ~HDMI_CTRL_ENCRYPTED; 477 hdmi_write(hdmi, REG_HDMI_CTRL, reg_val); 478 479 /* Enabling Software DDC */ 480 reg_val = hdmi_read(hdmi, REG_HDMI_DDC_ARBITRATION); 481 reg_val &= ~HDMI_DDC_ARBITRATION_HW_ARBITRATION; 482 hdmi_write(hdmi, REG_HDMI_DDC_ARBITRATION, reg_val); 483 spin_unlock_irqrestore(&hdmi->reg_lock, flags); 484 485 /* 486 * Write AKSV read from QFPROM to the HDCP registers. 487 * This step is needed for HDCP authentication and must be 488 * written before enabling HDCP. 489 */ 490 hdmi_write(hdmi, REG_HDMI_HDCP_SW_LOWER_AKSV, hdcp_ctrl->aksv_lsb); 491 hdmi_write(hdmi, REG_HDMI_HDCP_SW_UPPER_AKSV, hdcp_ctrl->aksv_msb); 492 493 /* 494 * HDCP setup prior to enabling HDCP_CTRL. 495 * Setup seed values for random number An. 496 */ 497 hdmi_write(hdmi, REG_HDMI_HDCP_ENTROPY_CTRL0, 0xB1FFB0FF); 498 hdmi_write(hdmi, REG_HDMI_HDCP_ENTROPY_CTRL1, 0xF00DFACE); 499 500 /* Disable the RngCipher state */ 501 reg_val = hdmi_read(hdmi, REG_HDMI_HDCP_DEBUG_CTRL); 502 reg_val &= ~HDMI_HDCP_DEBUG_CTRL_RNG_CIPHER; 503 hdmi_write(hdmi, REG_HDMI_HDCP_DEBUG_CTRL, reg_val); 504 DBG("HDCP_DEBUG_CTRL=0x%08x", 505 hdmi_read(hdmi, REG_HDMI_HDCP_DEBUG_CTRL)); 506 507 /* 508 * Ensure that all register writes are completed before 509 * enabling HDCP cipher 510 */ 511 wmb(); 512 513 /* 514 * Enable HDCP 515 * This needs to be done as early as possible in order for the 516 * hardware to make An available to read 517 */ 518 hdmi_write(hdmi, REG_HDMI_HDCP_CTRL, HDMI_HDCP_CTRL_ENABLE); 519 520 /* 521 * If we had stale values for the An ready bit, it should most 522 * likely be cleared now after enabling HDCP cipher 523 */ 524 link0_status = hdmi_read(hdmi, REG_HDMI_HDCP_LINK0_STATUS); 525 DBG("After enabling HDCP Link0_Status=0x%08x", link0_status); 526 if (!(link0_status & 527 (HDMI_HDCP_LINK0_STATUS_AN_0_READY | 528 HDMI_HDCP_LINK0_STATUS_AN_1_READY))) 529 DBG("An not ready after enabling HDCP"); 530 531 /* Clear any DDC failures from previous tries before enable HDCP*/ 532 rc = msm_reset_hdcp_ddc_failures(hdcp_ctrl); 533 534 return rc; 535} 536 537static void msm_hdmi_hdcp_auth_fail(struct hdmi_hdcp_ctrl *hdcp_ctrl) 538{ 539 struct hdmi *hdmi = hdcp_ctrl->hdmi; 540 u32 reg_val; 541 unsigned long flags; 542 543 DBG("hdcp auth failed, queue reauth work"); 544 /* clear HDMI Encrypt */ 545 spin_lock_irqsave(&hdmi->reg_lock, flags); 546 reg_val = hdmi_read(hdmi, REG_HDMI_CTRL); 547 reg_val &= ~HDMI_CTRL_ENCRYPTED; 548 hdmi_write(hdmi, REG_HDMI_CTRL, reg_val); 549 spin_unlock_irqrestore(&hdmi->reg_lock, flags); 550 551 hdcp_ctrl->hdcp_state = HDCP_STATE_AUTH_FAILED; 552 queue_work(hdmi->workq, &hdcp_ctrl->hdcp_reauth_work); 553} 554 555static void msm_hdmi_hdcp_auth_done(struct hdmi_hdcp_ctrl *hdcp_ctrl) 556{ 557 struct hdmi *hdmi = hdcp_ctrl->hdmi; 558 u32 reg_val; 559 unsigned long flags; 560 561 /* 562 * Disable software DDC before going into part3 to make sure 563 * there is no Arbitration between software and hardware for DDC 564 */ 565 spin_lock_irqsave(&hdmi->reg_lock, flags); 566 reg_val = hdmi_read(hdmi, REG_HDMI_DDC_ARBITRATION); 567 reg_val |= HDMI_DDC_ARBITRATION_HW_ARBITRATION; 568 hdmi_write(hdmi, REG_HDMI_DDC_ARBITRATION, reg_val); 569 spin_unlock_irqrestore(&hdmi->reg_lock, flags); 570 571 /* enable HDMI Encrypt */ 572 spin_lock_irqsave(&hdmi->reg_lock, flags); 573 reg_val = hdmi_read(hdmi, REG_HDMI_CTRL); 574 reg_val |= HDMI_CTRL_ENCRYPTED; 575 hdmi_write(hdmi, REG_HDMI_CTRL, reg_val); 576 spin_unlock_irqrestore(&hdmi->reg_lock, flags); 577 578 hdcp_ctrl->hdcp_state = HDCP_STATE_AUTHENTICATED; 579 hdcp_ctrl->auth_retries = 0; 580} 581 582/* 583 * hdcp authenticating part 1 584 * Wait Key/An ready 585 * Read BCAPS from sink 586 * Write BCAPS and AKSV into HDCP engine 587 * Write An and AKSV to sink 588 * Read BKSV from sink and write into HDCP engine 589 */ 590static int msm_hdmi_hdcp_wait_key_an_ready(struct hdmi_hdcp_ctrl *hdcp_ctrl) 591{ 592 int rc; 593 struct hdmi *hdmi = hdcp_ctrl->hdmi; 594 u32 link0_status, keys_state; 595 u32 timeout_count; 596 bool an_ready; 597 598 /* Wait for HDCP keys to be checked and validated */ 599 timeout_count = 100; 600 do { 601 link0_status = hdmi_read(hdmi, REG_HDMI_HDCP_LINK0_STATUS); 602 keys_state = (link0_status >> 28) & 0x7; 603 if (keys_state == HDCP_KEYS_STATE_VALID) 604 break; 605 606 DBG("Keys not ready(%d). s=%d, l0=%0x08x", 607 timeout_count, keys_state, link0_status); 608 609 timeout_count--; 610 if (!timeout_count) { 611 pr_err("%s: Wait key state timedout", __func__); 612 return -ETIMEDOUT; 613 } 614 615 rc = msm_hdmi_hdcp_msleep(hdcp_ctrl, 20, AUTH_ABORT_EV); 616 if (rc) 617 return rc; 618 } while (1); 619 620 timeout_count = 100; 621 do { 622 link0_status = hdmi_read(hdmi, REG_HDMI_HDCP_LINK0_STATUS); 623 an_ready = (link0_status & HDMI_HDCP_LINK0_STATUS_AN_0_READY) 624 && (link0_status & HDMI_HDCP_LINK0_STATUS_AN_1_READY); 625 if (an_ready) 626 break; 627 628 DBG("An not ready(%d). l0_status=0x%08x", 629 timeout_count, link0_status); 630 631 timeout_count--; 632 if (!timeout_count) { 633 pr_err("%s: Wait An timedout", __func__); 634 return -ETIMEDOUT; 635 } 636 637 rc = msm_hdmi_hdcp_msleep(hdcp_ctrl, 20, AUTH_ABORT_EV); 638 if (rc) 639 return rc; 640 } while (1); 641 642 return 0; 643} 644 645static int msm_hdmi_hdcp_send_aksv_an(struct hdmi_hdcp_ctrl *hdcp_ctrl) 646{ 647 int rc = 0; 648 struct hdmi *hdmi = hdcp_ctrl->hdmi; 649 u32 link0_aksv_0, link0_aksv_1; 650 u32 link0_an[2]; 651 u8 aksv[5]; 652 653 /* Read An0 and An1 */ 654 link0_an[0] = hdmi_read(hdmi, REG_HDMI_HDCP_RCVPORT_DATA5); 655 link0_an[1] = hdmi_read(hdmi, REG_HDMI_HDCP_RCVPORT_DATA6); 656 657 /* Read AKSV */ 658 link0_aksv_0 = hdmi_read(hdmi, REG_HDMI_HDCP_RCVPORT_DATA3); 659 link0_aksv_1 = hdmi_read(hdmi, REG_HDMI_HDCP_RCVPORT_DATA4); 660 661 DBG("Link ASKV=%08x%08x", link0_aksv_0, link0_aksv_1); 662 /* Copy An and AKSV to byte arrays for transmission */ 663 aksv[0] = link0_aksv_0 & 0xFF; 664 aksv[1] = (link0_aksv_0 >> 8) & 0xFF; 665 aksv[2] = (link0_aksv_0 >> 16) & 0xFF; 666 aksv[3] = (link0_aksv_0 >> 24) & 0xFF; 667 aksv[4] = link0_aksv_1 & 0xFF; 668 669 /* Write An to offset 0x18 */ 670 rc = msm_hdmi_ddc_write(hdmi, HDCP_PORT_ADDR, 0x18, (u8 *)link0_an, 671 (u16)sizeof(link0_an)); 672 if (rc) { 673 pr_err("%s:An write failed\n", __func__); 674 return rc; 675 } 676 DBG("Link0-An=%08x%08x", link0_an[0], link0_an[1]); 677 678 /* Write AKSV to offset 0x10 */ 679 rc = msm_hdmi_ddc_write(hdmi, HDCP_PORT_ADDR, 0x10, aksv, 5); 680 if (rc) { 681 pr_err("%s:AKSV write failed\n", __func__); 682 return rc; 683 } 684 DBG("Link0-AKSV=%02x%08x", link0_aksv_1 & 0xFF, link0_aksv_0); 685 686 return 0; 687} 688 689static int msm_hdmi_hdcp_recv_bksv(struct hdmi_hdcp_ctrl *hdcp_ctrl) 690{ 691 int rc = 0; 692 struct hdmi *hdmi = hdcp_ctrl->hdmi; 693 u8 bksv[5]; 694 u32 reg[2], data[2]; 695 696 /* Read BKSV at offset 0x00 */ 697 rc = msm_hdmi_ddc_read(hdmi, HDCP_PORT_ADDR, 0x00, bksv, 5); 698 if (rc) { 699 pr_err("%s:BKSV read failed\n", __func__); 700 return rc; 701 } 702 703 hdcp_ctrl->bksv_lsb = bksv[0] | (bksv[1] << 8) | 704 (bksv[2] << 16) | (bksv[3] << 24); 705 hdcp_ctrl->bksv_msb = bksv[4]; 706 DBG(":BKSV=%02x%08x", hdcp_ctrl->bksv_msb, hdcp_ctrl->bksv_lsb); 707 708 /* check there are 20 ones in BKSV */ 709 if ((hweight32(hdcp_ctrl->bksv_lsb) + hweight32(hdcp_ctrl->bksv_msb)) 710 != 20) { 711 pr_err(": BKSV doesn't have 20 1's and 20 0's\n"); 712 pr_err(": BKSV chk fail. BKSV=%02x%02x%02x%02x%02x\n", 713 bksv[4], bksv[3], bksv[2], bksv[1], bksv[0]); 714 return -EINVAL; 715 } 716 717 /* Write BKSV read from sink to HDCP registers */ 718 reg[0] = REG_HDMI_HDCP_RCVPORT_DATA0; 719 data[0] = hdcp_ctrl->bksv_lsb; 720 reg[1] = REG_HDMI_HDCP_RCVPORT_DATA1; 721 data[1] = hdcp_ctrl->bksv_msb; 722 rc = msm_hdmi_hdcp_scm_wr(hdcp_ctrl, reg, data, 2); 723 724 return rc; 725} 726 727static int msm_hdmi_hdcp_recv_bcaps(struct hdmi_hdcp_ctrl *hdcp_ctrl) 728{ 729 int rc = 0; 730 struct hdmi *hdmi = hdcp_ctrl->hdmi; 731 u32 reg, data; 732 u8 bcaps; 733 734 rc = msm_hdmi_ddc_read(hdmi, HDCP_PORT_ADDR, 0x40, &bcaps, 1); 735 if (rc) { 736 pr_err("%s:BCAPS read failed\n", __func__); 737 return rc; 738 } 739 DBG("BCAPS=%02x", bcaps); 740 741 /* receiver (0), repeater (1) */ 742 hdcp_ctrl->ds_type = (bcaps & BIT(6)) ? DS_REPEATER : DS_RECEIVER; 743 744 /* Write BCAPS to the hardware */ 745 reg = REG_HDMI_HDCP_RCVPORT_DATA12; 746 data = (u32)bcaps; 747 rc = msm_hdmi_hdcp_scm_wr(hdcp_ctrl, ®, &data, 1); 748 749 return rc; 750} 751 752static int msm_hdmi_hdcp_auth_part1_key_exchange(struct hdmi_hdcp_ctrl *hdcp_ctrl) 753{ 754 struct hdmi *hdmi = hdcp_ctrl->hdmi; 755 unsigned long flags; 756 int rc; 757 758 /* Wait for AKSV key and An ready */ 759 rc = msm_hdmi_hdcp_wait_key_an_ready(hdcp_ctrl); 760 if (rc) { 761 pr_err("%s: wait key and an ready failed\n", __func__); 762 return rc; 763 } 764 765 /* Read BCAPS and send to HDCP engine */ 766 rc = msm_hdmi_hdcp_recv_bcaps(hdcp_ctrl); 767 if (rc) { 768 pr_err("%s: read bcaps error, abort\n", __func__); 769 return rc; 770 } 771 772 /* 773 * 1.1_Features turned off by default. 774 * No need to write AInfo since 1.1_Features is disabled. 775 */ 776 hdmi_write(hdmi, REG_HDMI_HDCP_RCVPORT_DATA4, 0); 777 778 /* Send AKSV and An to sink */ 779 rc = msm_hdmi_hdcp_send_aksv_an(hdcp_ctrl); 780 if (rc) { 781 pr_err("%s:An/Aksv write failed\n", __func__); 782 return rc; 783 } 784 785 /* Read BKSV and send to HDCP engine*/ 786 rc = msm_hdmi_hdcp_recv_bksv(hdcp_ctrl); 787 if (rc) { 788 pr_err("%s:BKSV Process failed\n", __func__); 789 return rc; 790 } 791 792 /* Enable HDCP interrupts and ack/clear any stale interrupts */ 793 spin_lock_irqsave(&hdmi->reg_lock, flags); 794 hdmi_write(hdmi, REG_HDMI_HDCP_INT_CTRL, 795 HDMI_HDCP_INT_CTRL_AUTH_SUCCESS_ACK | 796 HDMI_HDCP_INT_CTRL_AUTH_SUCCESS_MASK | 797 HDMI_HDCP_INT_CTRL_AUTH_FAIL_ACK | 798 HDMI_HDCP_INT_CTRL_AUTH_FAIL_MASK | 799 HDMI_HDCP_INT_CTRL_AUTH_FAIL_INFO_ACK); 800 spin_unlock_irqrestore(&hdmi->reg_lock, flags); 801 802 return 0; 803} 804 805/* read R0' from sink and pass it to HDCP engine */ 806static int msm_hdmi_hdcp_auth_part1_recv_r0(struct hdmi_hdcp_ctrl *hdcp_ctrl) 807{ 808 struct hdmi *hdmi = hdcp_ctrl->hdmi; 809 int rc = 0; 810 u8 buf[2]; 811 812 /* 813 * HDCP Compliance Test case 1A-01: 814 * Wait here at least 100ms before reading R0' 815 */ 816 rc = msm_hdmi_hdcp_msleep(hdcp_ctrl, 125, AUTH_ABORT_EV); 817 if (rc) 818 return rc; 819 820 /* Read R0' at offset 0x08 */ 821 rc = msm_hdmi_ddc_read(hdmi, HDCP_PORT_ADDR, 0x08, buf, 2); 822 if (rc) { 823 pr_err("%s:R0' read failed\n", __func__); 824 return rc; 825 } 826 DBG("R0'=%02x%02x", buf[1], buf[0]); 827 828 /* Write R0' to HDCP registers and check to see if it is a match */ 829 hdmi_write(hdmi, REG_HDMI_HDCP_RCVPORT_DATA2_0, 830 (((u32)buf[1]) << 8) | buf[0]); 831 832 return 0; 833} 834 835/* Wait for authenticating result: R0/R0' are matched or not */ 836static int msm_hdmi_hdcp_auth_part1_verify_r0(struct hdmi_hdcp_ctrl *hdcp_ctrl) 837{ 838 struct hdmi *hdmi = hdcp_ctrl->hdmi; 839 u32 link0_status; 840 int rc; 841 842 /* wait for hdcp irq, 10 sec should be long enough */ 843 rc = msm_hdmi_hdcp_msleep(hdcp_ctrl, 10000, AUTH_RESULT_RDY_EV); 844 if (!rc) { 845 pr_err("%s: Wait Auth IRQ timeout\n", __func__); 846 return -ETIMEDOUT; 847 } 848 849 link0_status = hdmi_read(hdmi, REG_HDMI_HDCP_LINK0_STATUS); 850 if (!(link0_status & HDMI_HDCP_LINK0_STATUS_RI_MATCHES)) { 851 pr_err("%s: Authentication Part I failed\n", __func__); 852 return -EINVAL; 853 } 854 855 /* Enable HDCP Encryption */ 856 hdmi_write(hdmi, REG_HDMI_HDCP_CTRL, 857 HDMI_HDCP_CTRL_ENABLE | 858 HDMI_HDCP_CTRL_ENCRYPTION_ENABLE); 859 860 return 0; 861} 862 863static int msm_hdmi_hdcp_recv_check_bstatus(struct hdmi_hdcp_ctrl *hdcp_ctrl, 864 u16 *pbstatus) 865{ 866 int rc; 867 struct hdmi *hdmi = hdcp_ctrl->hdmi; 868 bool max_devs_exceeded = false, max_cascade_exceeded = false; 869 u32 repeater_cascade_depth = 0, down_stream_devices = 0; 870 u16 bstatus; 871 u8 buf[2]; 872 873 /* Read BSTATUS at offset 0x41 */ 874 rc = msm_hdmi_ddc_read(hdmi, HDCP_PORT_ADDR, 0x41, buf, 2); 875 if (rc) { 876 pr_err("%s: BSTATUS read failed\n", __func__); 877 goto error; 878 } 879 *pbstatus = bstatus = (buf[1] << 8) | buf[0]; 880 881 882 down_stream_devices = bstatus & 0x7F; 883 repeater_cascade_depth = (bstatus >> 8) & 0x7; 884 max_devs_exceeded = (bstatus & BIT(7)) ? true : false; 885 max_cascade_exceeded = (bstatus & BIT(11)) ? true : false; 886 887 if (down_stream_devices == 0) { 888 /* 889 * If no downstream devices are attached to the repeater 890 * then part II fails. 891 * todo: The other approach would be to continue PART II. 892 */ 893 pr_err("%s: No downstream devices\n", __func__); 894 rc = -EINVAL; 895 goto error; 896 } 897 898 /* 899 * HDCP Compliance 1B-05: 900 * Check if no. of devices connected to repeater 901 * exceed max_devices_connected from bit 7 of Bstatus. 902 */ 903 if (max_devs_exceeded) { 904 pr_err("%s: no. of devs connected exceeds max allowed", 905 __func__); 906 rc = -EINVAL; 907 goto error; 908 } 909 910 /* 911 * HDCP Compliance 1B-06: 912 * Check if no. of cascade connected to repeater 913 * exceed max_cascade_connected from bit 11 of Bstatus. 914 */ 915 if (max_cascade_exceeded) { 916 pr_err("%s: no. of cascade conn exceeds max allowed", 917 __func__); 918 rc = -EINVAL; 919 goto error; 920 } 921 922error: 923 hdcp_ctrl->dev_count = down_stream_devices; 924 hdcp_ctrl->max_cascade_exceeded = max_cascade_exceeded; 925 hdcp_ctrl->max_dev_exceeded = max_devs_exceeded; 926 hdcp_ctrl->depth = repeater_cascade_depth; 927 return rc; 928} 929 930static int msm_hdmi_hdcp_auth_part2_wait_ksv_fifo_ready( 931 struct hdmi_hdcp_ctrl *hdcp_ctrl) 932{ 933 int rc; 934 struct hdmi *hdmi = hdcp_ctrl->hdmi; 935 u32 reg, data; 936 u32 timeout_count; 937 u16 bstatus; 938 u8 bcaps; 939 940 /* 941 * Wait until READY bit is set in BCAPS, as per HDCP specifications 942 * maximum permitted time to check for READY bit is five seconds. 943 */ 944 timeout_count = 100; 945 do { 946 /* Read BCAPS at offset 0x40 */ 947 rc = msm_hdmi_ddc_read(hdmi, HDCP_PORT_ADDR, 0x40, &bcaps, 1); 948 if (rc) { 949 pr_err("%s: BCAPS read failed\n", __func__); 950 return rc; 951 } 952 953 if (bcaps & BIT(5)) 954 break; 955 956 timeout_count--; 957 if (!timeout_count) { 958 pr_err("%s: Wait KSV fifo ready timedout", __func__); 959 return -ETIMEDOUT; 960 } 961 962 rc = msm_hdmi_hdcp_msleep(hdcp_ctrl, 20, AUTH_ABORT_EV); 963 if (rc) 964 return rc; 965 } while (1); 966 967 rc = msm_hdmi_hdcp_recv_check_bstatus(hdcp_ctrl, &bstatus); 968 if (rc) { 969 pr_err("%s: bstatus error\n", __func__); 970 return rc; 971 } 972 973 /* Write BSTATUS and BCAPS to HDCP registers */ 974 reg = REG_HDMI_HDCP_RCVPORT_DATA12; 975 data = bcaps | (bstatus << 8); 976 rc = msm_hdmi_hdcp_scm_wr(hdcp_ctrl, ®, &data, 1); 977 if (rc) { 978 pr_err("%s: BSTATUS write failed\n", __func__); 979 return rc; 980 } 981 982 return 0; 983} 984 985/* 986 * hdcp authenticating part 2: 2nd 987 * read ksv fifo from sink 988 * transfer V' from sink to HDCP engine 989 * reset SHA engine 990 */ 991static int msm_hdmi_hdcp_transfer_v_h(struct hdmi_hdcp_ctrl *hdcp_ctrl) 992{ 993 struct hdmi *hdmi = hdcp_ctrl->hdmi; 994 int rc = 0; 995 struct hdmi_hdcp_reg_data reg_data[] = { 996 {REG_HDMI_HDCP_RCVPORT_DATA7, 0x20, "V' H0"}, 997 {REG_HDMI_HDCP_RCVPORT_DATA8, 0x24, "V' H1"}, 998 {REG_HDMI_HDCP_RCVPORT_DATA9, 0x28, "V' H2"}, 999 {REG_HDMI_HDCP_RCVPORT_DATA10, 0x2C, "V' H3"}, 1000 {REG_HDMI_HDCP_RCVPORT_DATA11, 0x30, "V' H4"}, 1001 }; 1002 struct hdmi_hdcp_reg_data *rd; 1003 u32 size = ARRAY_SIZE(reg_data); 1004 u32 reg[ARRAY_SIZE(reg_data)]; 1005 u32 data[ARRAY_SIZE(reg_data)]; 1006 int i; 1007 1008 for (i = 0; i < size; i++) { 1009 rd = ®_data[i]; 1010 rc = msm_hdmi_ddc_read(hdmi, HDCP_PORT_ADDR, 1011 rd->off, (u8 *)&data[i], (u16)sizeof(data[i])); 1012 if (rc) { 1013 pr_err("%s: Read %s failed\n", __func__, rd->name); 1014 goto error; 1015 } 1016 1017 DBG("%s =%x", rd->name, data[i]); 1018 reg[i] = reg_data[i].reg_id; 1019 } 1020 1021 rc = msm_hdmi_hdcp_scm_wr(hdcp_ctrl, reg, data, size); 1022 1023error: 1024 return rc; 1025} 1026 1027static int msm_hdmi_hdcp_recv_ksv_fifo(struct hdmi_hdcp_ctrl *hdcp_ctrl) 1028{ 1029 int rc; 1030 struct hdmi *hdmi = hdcp_ctrl->hdmi; 1031 u32 ksv_bytes; 1032 1033 ksv_bytes = 5 * hdcp_ctrl->dev_count; 1034 1035 rc = msm_hdmi_ddc_read(hdmi, HDCP_PORT_ADDR, 0x43, 1036 hdcp_ctrl->ksv_list, ksv_bytes); 1037 if (rc) 1038 pr_err("%s: KSV FIFO read failed\n", __func__); 1039 1040 return rc; 1041} 1042 1043static int msm_hdmi_hdcp_reset_sha_engine(struct hdmi_hdcp_ctrl *hdcp_ctrl) 1044{ 1045 u32 reg[2], data[2]; 1046 u32 rc = 0; 1047 1048 reg[0] = REG_HDMI_HDCP_SHA_CTRL; 1049 data[0] = HDCP_REG_ENABLE; 1050 reg[1] = REG_HDMI_HDCP_SHA_CTRL; 1051 data[1] = HDCP_REG_DISABLE; 1052 1053 rc = msm_hdmi_hdcp_scm_wr(hdcp_ctrl, reg, data, 2); 1054 1055 return rc; 1056} 1057 1058static int msm_hdmi_hdcp_auth_part2_recv_ksv_fifo( 1059 struct hdmi_hdcp_ctrl *hdcp_ctrl) 1060{ 1061 int rc; 1062 u32 timeout_count; 1063 1064 /* 1065 * Read KSV FIFO over DDC 1066 * Key Selection vector FIFO Used to pull downstream KSVs 1067 * from HDCP Repeaters. 1068 * All bytes (DEVICE_COUNT * 5) must be read in a single, 1069 * auto incrementing access. 1070 * All bytes read as 0x00 for HDCP Receivers that are not 1071 * HDCP Repeaters (REPEATER == 0). 1072 */ 1073 timeout_count = 100; 1074 do { 1075 rc = msm_hdmi_hdcp_recv_ksv_fifo(hdcp_ctrl); 1076 if (!rc) 1077 break; 1078 1079 timeout_count--; 1080 if (!timeout_count) { 1081 pr_err("%s: Recv ksv fifo timedout", __func__); 1082 return -ETIMEDOUT; 1083 } 1084 1085 rc = msm_hdmi_hdcp_msleep(hdcp_ctrl, 25, AUTH_ABORT_EV); 1086 if (rc) 1087 return rc; 1088 } while (1); 1089 1090 rc = msm_hdmi_hdcp_transfer_v_h(hdcp_ctrl); 1091 if (rc) { 1092 pr_err("%s: transfer V failed\n", __func__); 1093 return rc; 1094 } 1095 1096 /* reset SHA engine before write ksv fifo */ 1097 rc = msm_hdmi_hdcp_reset_sha_engine(hdcp_ctrl); 1098 if (rc) { 1099 pr_err("%s: fail to reset sha engine\n", __func__); 1100 return rc; 1101 } 1102 1103 return 0; 1104} 1105 1106/* 1107 * Write KSV FIFO to HDCP_SHA_DATA. 1108 * This is done 1 byte at time starting with the LSB. 1109 * Once 64 bytes have been written, we need to poll for 1110 * HDCP_SHA_BLOCK_DONE before writing any further 1111 * If the last byte is written, we need to poll for 1112 * HDCP_SHA_COMP_DONE to wait until HW finish 1113 */ 1114static int msm_hdmi_hdcp_write_ksv_fifo(struct hdmi_hdcp_ctrl *hdcp_ctrl) 1115{ 1116 int i; 1117 struct hdmi *hdmi = hdcp_ctrl->hdmi; 1118 u32 ksv_bytes, last_byte = 0; 1119 u8 *ksv_fifo = NULL; 1120 u32 reg_val, data, reg; 1121 u32 rc = 0; 1122 1123 ksv_bytes = 5 * hdcp_ctrl->dev_count; 1124 1125 /* Check if need to wait for HW completion */ 1126 if (hdcp_ctrl->ksv_fifo_w_index) { 1127 reg_val = hdmi_read(hdmi, REG_HDMI_HDCP_SHA_STATUS); 1128 DBG("HDCP_SHA_STATUS=%08x", reg_val); 1129 if (hdcp_ctrl->ksv_fifo_w_index == ksv_bytes) { 1130 /* check COMP_DONE if last write */ 1131 if (reg_val & HDMI_HDCP_SHA_STATUS_COMP_DONE) { 1132 DBG("COMP_DONE"); 1133 return 0; 1134 } else { 1135 return -EAGAIN; 1136 } 1137 } else { 1138 /* check BLOCK_DONE if not last write */ 1139 if (!(reg_val & HDMI_HDCP_SHA_STATUS_BLOCK_DONE)) 1140 return -EAGAIN; 1141 1142 DBG("BLOCK_DONE"); 1143 } 1144 } 1145 1146 ksv_bytes -= hdcp_ctrl->ksv_fifo_w_index; 1147 if (ksv_bytes <= 64) 1148 last_byte = 1; 1149 else 1150 ksv_bytes = 64; 1151 1152 ksv_fifo = hdcp_ctrl->ksv_list; 1153 ksv_fifo += hdcp_ctrl->ksv_fifo_w_index; 1154 1155 for (i = 0; i < ksv_bytes; i++) { 1156 /* Write KSV byte and set DONE bit[0] for last byte*/ 1157 reg_val = ksv_fifo[i] << 16; 1158 if ((i == (ksv_bytes - 1)) && last_byte) 1159 reg_val |= HDMI_HDCP_SHA_DATA_DONE; 1160 1161 reg = REG_HDMI_HDCP_SHA_DATA; 1162 data = reg_val; 1163 rc = msm_hdmi_hdcp_scm_wr(hdcp_ctrl, ®, &data, 1); 1164 1165 if (rc) 1166 return rc; 1167 } 1168 1169 hdcp_ctrl->ksv_fifo_w_index += ksv_bytes; 1170 1171 /* 1172 *return -EAGAIN to notify caller to wait for COMP_DONE or BLOCK_DONE 1173 */ 1174 return -EAGAIN; 1175} 1176 1177/* write ksv fifo into HDCP engine */ 1178static int msm_hdmi_hdcp_auth_part2_write_ksv_fifo( 1179 struct hdmi_hdcp_ctrl *hdcp_ctrl) 1180{ 1181 int rc; 1182 u32 timeout_count; 1183 1184 hdcp_ctrl->ksv_fifo_w_index = 0; 1185 timeout_count = 100; 1186 do { 1187 rc = msm_hdmi_hdcp_write_ksv_fifo(hdcp_ctrl); 1188 if (!rc) 1189 break; 1190 1191 if (rc != -EAGAIN) 1192 return rc; 1193 1194 timeout_count--; 1195 if (!timeout_count) { 1196 pr_err("%s: Write KSV fifo timedout", __func__); 1197 return -ETIMEDOUT; 1198 } 1199 1200 rc = msm_hdmi_hdcp_msleep(hdcp_ctrl, 20, AUTH_ABORT_EV); 1201 if (rc) 1202 return rc; 1203 } while (1); 1204 1205 return 0; 1206} 1207 1208static int msm_hdmi_hdcp_auth_part2_check_v_match(struct hdmi_hdcp_ctrl *hdcp_ctrl) 1209{ 1210 int rc = 0; 1211 struct hdmi *hdmi = hdcp_ctrl->hdmi; 1212 u32 link0_status; 1213 u32 timeout_count = 100; 1214 1215 do { 1216 link0_status = hdmi_read(hdmi, REG_HDMI_HDCP_LINK0_STATUS); 1217 if (link0_status & HDMI_HDCP_LINK0_STATUS_V_MATCHES) 1218 break; 1219 1220 timeout_count--; 1221 if (!timeout_count) { 1222 pr_err("%s: HDCP V Match timedout", __func__); 1223 return -ETIMEDOUT; 1224 } 1225 1226 rc = msm_hdmi_hdcp_msleep(hdcp_ctrl, 20, AUTH_ABORT_EV); 1227 if (rc) 1228 return rc; 1229 } while (1); 1230 1231 return 0; 1232} 1233 1234static void msm_hdmi_hdcp_auth_work(struct work_struct *work) 1235{ 1236 struct hdmi_hdcp_ctrl *hdcp_ctrl = container_of(work, 1237 struct hdmi_hdcp_ctrl, hdcp_auth_work); 1238 int rc; 1239 1240 rc = msm_hdmi_hdcp_auth_prepare(hdcp_ctrl); 1241 if (rc) { 1242 pr_err("%s: auth prepare failed %d\n", __func__, rc); 1243 goto end; 1244 } 1245 1246 /* HDCP PartI */ 1247 rc = msm_hdmi_hdcp_auth_part1_key_exchange(hdcp_ctrl); 1248 if (rc) { 1249 pr_err("%s: key exchange failed %d\n", __func__, rc); 1250 goto end; 1251 } 1252 1253 rc = msm_hdmi_hdcp_auth_part1_recv_r0(hdcp_ctrl); 1254 if (rc) { 1255 pr_err("%s: receive r0 failed %d\n", __func__, rc); 1256 goto end; 1257 } 1258 1259 rc = msm_hdmi_hdcp_auth_part1_verify_r0(hdcp_ctrl); 1260 if (rc) { 1261 pr_err("%s: verify r0 failed %d\n", __func__, rc); 1262 goto end; 1263 } 1264 pr_info("%s: Authentication Part I successful\n", __func__); 1265 if (hdcp_ctrl->ds_type == DS_RECEIVER) 1266 goto end; 1267 1268 /* HDCP PartII */ 1269 rc = msm_hdmi_hdcp_auth_part2_wait_ksv_fifo_ready(hdcp_ctrl); 1270 if (rc) { 1271 pr_err("%s: wait ksv fifo ready failed %d\n", __func__, rc); 1272 goto end; 1273 } 1274 1275 rc = msm_hdmi_hdcp_auth_part2_recv_ksv_fifo(hdcp_ctrl); 1276 if (rc) { 1277 pr_err("%s: recv ksv fifo failed %d\n", __func__, rc); 1278 goto end; 1279 } 1280 1281 rc = msm_hdmi_hdcp_auth_part2_write_ksv_fifo(hdcp_ctrl); 1282 if (rc) { 1283 pr_err("%s: write ksv fifo failed %d\n", __func__, rc); 1284 goto end; 1285 } 1286 1287 rc = msm_hdmi_hdcp_auth_part2_check_v_match(hdcp_ctrl); 1288 if (rc) 1289 pr_err("%s: check v match failed %d\n", __func__, rc); 1290 1291end: 1292 if (rc == -ECANCELED) { 1293 pr_info("%s: hdcp authentication canceled\n", __func__); 1294 } else if (rc == -ENOTSUPP) { 1295 pr_info("%s: hdcp is not supported\n", __func__); 1296 } else if (rc) { 1297 pr_err("%s: hdcp authentication failed\n", __func__); 1298 msm_hdmi_hdcp_auth_fail(hdcp_ctrl); 1299 } else { 1300 msm_hdmi_hdcp_auth_done(hdcp_ctrl); 1301 } 1302} 1303 1304void msm_hdmi_hdcp_on(struct hdmi_hdcp_ctrl *hdcp_ctrl) 1305{ 1306 struct hdmi *hdmi = hdcp_ctrl->hdmi; 1307 u32 reg_val; 1308 unsigned long flags; 1309 1310 if ((HDCP_STATE_INACTIVE != hdcp_ctrl->hdcp_state) || 1311 (HDCP_STATE_NO_AKSV == hdcp_ctrl->hdcp_state)) { 1312 DBG("still active or activating or no askv. returning"); 1313 return; 1314 } 1315 1316 /* clear HDMI Encrypt */ 1317 spin_lock_irqsave(&hdmi->reg_lock, flags); 1318 reg_val = hdmi_read(hdmi, REG_HDMI_CTRL); 1319 reg_val &= ~HDMI_CTRL_ENCRYPTED; 1320 hdmi_write(hdmi, REG_HDMI_CTRL, reg_val); 1321 spin_unlock_irqrestore(&hdmi->reg_lock, flags); 1322 1323 hdcp_ctrl->auth_event = 0; 1324 hdcp_ctrl->hdcp_state = HDCP_STATE_AUTHENTICATING; 1325 hdcp_ctrl->auth_retries = 0; 1326 queue_work(hdmi->workq, &hdcp_ctrl->hdcp_auth_work); 1327} 1328 1329void msm_hdmi_hdcp_off(struct hdmi_hdcp_ctrl *hdcp_ctrl) 1330{ 1331 struct hdmi *hdmi = hdcp_ctrl->hdmi; 1332 unsigned long flags; 1333 u32 reg_val; 1334 1335 if ((HDCP_STATE_INACTIVE == hdcp_ctrl->hdcp_state) || 1336 (HDCP_STATE_NO_AKSV == hdcp_ctrl->hdcp_state)) { 1337 DBG("hdcp inactive or no aksv. returning"); 1338 return; 1339 } 1340 1341 /* 1342 * Disable HPD circuitry. 1343 * This is needed to reset the HDCP cipher engine so that when we 1344 * attempt a re-authentication, HW would clear the AN0_READY and 1345 * AN1_READY bits in HDMI_HDCP_LINK0_STATUS register 1346 */ 1347 spin_lock_irqsave(&hdmi->reg_lock, flags); 1348 reg_val = hdmi_read(hdmi, REG_HDMI_HPD_CTRL); 1349 reg_val &= ~HDMI_HPD_CTRL_ENABLE; 1350 hdmi_write(hdmi, REG_HDMI_HPD_CTRL, reg_val); 1351 1352 /* 1353 * Disable HDCP interrupts. 1354 * Also, need to set the state to inactive here so that any ongoing 1355 * reauth works will know that the HDCP session has been turned off. 1356 */ 1357 hdmi_write(hdmi, REG_HDMI_HDCP_INT_CTRL, 0); 1358 spin_unlock_irqrestore(&hdmi->reg_lock, flags); 1359 1360 /* 1361 * Cancel any pending auth/reauth attempts. 1362 * If one is ongoing, this will wait for it to finish. 1363 * No more reauthentication attempts will be scheduled since we 1364 * set the current state to inactive. 1365 */ 1366 set_bit(AUTH_ABORT_EV, &hdcp_ctrl->auth_event); 1367 wake_up_all(&hdcp_ctrl->auth_event_queue); 1368 cancel_work_sync(&hdcp_ctrl->hdcp_auth_work); 1369 cancel_work_sync(&hdcp_ctrl->hdcp_reauth_work); 1370 1371 hdmi_write(hdmi, REG_HDMI_HDCP_RESET, 1372 HDMI_HDCP_RESET_LINK0_DEAUTHENTICATE); 1373 1374 /* Disable encryption and disable the HDCP block */ 1375 hdmi_write(hdmi, REG_HDMI_HDCP_CTRL, 0); 1376 1377 spin_lock_irqsave(&hdmi->reg_lock, flags); 1378 reg_val = hdmi_read(hdmi, REG_HDMI_CTRL); 1379 reg_val &= ~HDMI_CTRL_ENCRYPTED; 1380 hdmi_write(hdmi, REG_HDMI_CTRL, reg_val); 1381 1382 /* Enable HPD circuitry */ 1383 reg_val = hdmi_read(hdmi, REG_HDMI_HPD_CTRL); 1384 reg_val |= HDMI_HPD_CTRL_ENABLE; 1385 hdmi_write(hdmi, REG_HDMI_HPD_CTRL, reg_val); 1386 spin_unlock_irqrestore(&hdmi->reg_lock, flags); 1387 1388 hdcp_ctrl->hdcp_state = HDCP_STATE_INACTIVE; 1389 1390 DBG("HDCP: Off"); 1391} 1392 1393struct hdmi_hdcp_ctrl *msm_hdmi_hdcp_init(struct hdmi *hdmi) 1394{ 1395 struct hdmi_hdcp_ctrl *hdcp_ctrl = NULL; 1396 1397 if (!hdmi->qfprom_mmio) { 1398 pr_err("%s: HDCP is not supported without qfprom\n", 1399 __func__); 1400 return ERR_PTR(-EINVAL); 1401 } 1402 1403 hdcp_ctrl = kzalloc(sizeof(*hdcp_ctrl), GFP_KERNEL); 1404 if (!hdcp_ctrl) 1405 return ERR_PTR(-ENOMEM); 1406 1407 INIT_WORK(&hdcp_ctrl->hdcp_auth_work, msm_hdmi_hdcp_auth_work); 1408 INIT_WORK(&hdcp_ctrl->hdcp_reauth_work, msm_hdmi_hdcp_reauth_work); 1409 init_waitqueue_head(&hdcp_ctrl->auth_event_queue); 1410 hdcp_ctrl->hdmi = hdmi; 1411 hdcp_ctrl->hdcp_state = HDCP_STATE_INACTIVE; 1412 hdcp_ctrl->aksv_valid = false; 1413 1414 if (qcom_scm_hdcp_available()) 1415 hdcp_ctrl->tz_hdcp = true; 1416 else 1417 hdcp_ctrl->tz_hdcp = false; 1418 1419 return hdcp_ctrl; 1420} 1421 1422void msm_hdmi_hdcp_destroy(struct hdmi *hdmi) 1423{ 1424 if (hdmi) { 1425 kfree(hdmi->hdcp_ctrl); 1426 hdmi->hdcp_ctrl = NULL; 1427 } 1428}