| 481 | } |
| 482 | |
| 483 | static int |
| 484 | ccp_add_device(struct ccp_device *dev) |
| 485 | { |
| 486 | int i; |
| 487 | uint32_t qmr, status_lo, status_hi, dma_addr_lo, dma_addr_hi; |
| 488 | uint64_t status; |
| 489 | struct ccp_queue *cmd_q; |
| 490 | const struct rte_memzone *q_mz; |
| 491 | void *vaddr; |
| 492 | |
| 493 | if (dev == NULL) |
| 494 | return -1; |
| 495 | |
| 496 | dev->id = ccp_dev_id++; |
| 497 | dev->qidx = 0; |
| 498 | vaddr = (void *)(dev->pci->mem_resource[2].addr); |
| 499 | |
| 500 | if (dev->pci->id.device_id == AMD_PCI_CCP_5B) { |
| 501 | CCP_WRITE_REG(vaddr, CMD_TRNG_CTL_OFFSET, 0x00012D57); |
| 502 | CCP_WRITE_REG(vaddr, CMD_CONFIG_0_OFFSET, 0x00000003); |
| 503 | for (i = 0; i < 12; i++) { |
| 504 | CCP_WRITE_REG(vaddr, CMD_AES_MASK_OFFSET, |
| 505 | CCP_READ_REG(vaddr, TRNG_OUT_REG)); |
| 506 | } |
| 507 | CCP_WRITE_REG(vaddr, CMD_QUEUE_MASK_OFFSET, 0x0000001F); |
| 508 | CCP_WRITE_REG(vaddr, CMD_QUEUE_PRIO_OFFSET, 0x00005B6D); |
| 509 | CCP_WRITE_REG(vaddr, CMD_CMD_TIMEOUT_OFFSET, 0x00000000); |
| 510 | |
| 511 | CCP_WRITE_REG(vaddr, LSB_PRIVATE_MASK_LO_OFFSET, 0x3FFFFFFF); |
| 512 | CCP_WRITE_REG(vaddr, LSB_PRIVATE_MASK_HI_OFFSET, 0x000003FF); |
| 513 | |
| 514 | CCP_WRITE_REG(vaddr, CMD_CLK_GATE_CTL_OFFSET, 0x00108823); |
| 515 | } |
| 516 | CCP_WRITE_REG(vaddr, CMD_REQID_CONFIG_OFFSET, 0x0); |
| 517 | |
| 518 | /* Copy the private LSB mask to the public registers */ |
| 519 | status_lo = CCP_READ_REG(vaddr, LSB_PRIVATE_MASK_LO_OFFSET); |
| 520 | status_hi = CCP_READ_REG(vaddr, LSB_PRIVATE_MASK_HI_OFFSET); |
| 521 | CCP_WRITE_REG(vaddr, LSB_PUBLIC_MASK_LO_OFFSET, status_lo); |
| 522 | CCP_WRITE_REG(vaddr, LSB_PUBLIC_MASK_HI_OFFSET, status_hi); |
| 523 | status = ((uint64_t)status_hi<<30) | ((uint64_t)status_lo); |
| 524 | |
| 525 | dev->cmd_q_count = 0; |
| 526 | /* Find available queues */ |
| 527 | qmr = CCP_READ_REG(vaddr, Q_MASK_REG); |
| 528 | for (i = 0; i < MAX_HW_QUEUES; i++) { |
| 529 | if (!(qmr & (1 << i))) |
| 530 | continue; |
| 531 | cmd_q = &dev->cmd_q[dev->cmd_q_count++]; |
| 532 | cmd_q->dev = dev; |
| 533 | cmd_q->id = i; |
| 534 | cmd_q->qidx = 0; |
| 535 | cmd_q->qsize = Q_SIZE(Q_DESC_SIZE); |
| 536 | |
| 537 | cmd_q->reg_base = (uint8_t *)vaddr + |
| 538 | CMD_Q_STATUS_INCR * (i + 1); |
| 539 | |
| 540 | /* CCP queue memory */ |
no test coverage detected