Lines Matching refs:chip
70 struct tpm_chip *chip; member
280 static int check_locality(struct tpm_chip *chip, int loc) in check_locality() argument
291 chip->vendor.locality = loc; in check_locality()
299 static void release_locality(struct tpm_chip *chip, int loc, int force) in release_locality() argument
312 static int request_locality(struct tpm_chip *chip, int loc) in request_locality() argument
317 if (check_locality(chip, loc) >= 0) in request_locality()
323 stop = jiffies + chip->vendor.timeout_a; in request_locality()
325 if (check_locality(chip, loc) >= 0) in request_locality()
333 static u8 tpm_tis_i2c_status(struct tpm_chip *chip) in tpm_tis_i2c_status() argument
340 if (iic_tpm_read(TPM_STS(chip->vendor.locality), &buf, 1) < 0) in tpm_tis_i2c_status()
350 static void tpm_tis_i2c_ready(struct tpm_chip *chip) in tpm_tis_i2c_ready() argument
354 iic_tpm_write_long(TPM_STS(chip->vendor.locality), &buf, 1); in tpm_tis_i2c_ready()
357 static ssize_t get_burstcount(struct tpm_chip *chip) in get_burstcount() argument
365 stop = jiffies + chip->vendor.timeout_d; in get_burstcount()
368 if (iic_tpm_read(TPM_STS(chip->vendor.locality)+1, buf, 3) < 0) in get_burstcount()
381 static int wait_for_stat(struct tpm_chip *chip, u8 mask, unsigned long timeout, in wait_for_stat() argument
387 *status = tpm_tis_i2c_status(chip); in wait_for_stat()
395 *status = tpm_tis_i2c_status(chip); in wait_for_stat()
404 static int recv_data(struct tpm_chip *chip, u8 *buf, size_t count) in recv_data() argument
412 burstcnt = get_burstcount(chip); in recv_data()
422 rc = iic_tpm_read(TPM_DATA_FIFO(chip->vendor.locality), in recv_data()
436 static int tpm_tis_i2c_recv(struct tpm_chip *chip, u8 *buf, size_t count) in tpm_tis_i2c_recv() argument
447 size = recv_data(chip, buf, TPM_HEADER_SIZE); in tpm_tis_i2c_recv()
449 dev_err(chip->pdev, "Unable to read header\n"); in tpm_tis_i2c_recv()
459 size += recv_data(chip, &buf[TPM_HEADER_SIZE], in tpm_tis_i2c_recv()
462 dev_err(chip->pdev, "Unable to read remainder of result\n"); in tpm_tis_i2c_recv()
467 wait_for_stat(chip, TPM_STS_VALID, chip->vendor.timeout_c, &status); in tpm_tis_i2c_recv()
469 dev_err(chip->pdev, "Error left over data\n"); in tpm_tis_i2c_recv()
475 tpm_tis_i2c_ready(chip); in tpm_tis_i2c_recv()
480 release_locality(chip, chip->vendor.locality, 0); in tpm_tis_i2c_recv()
484 static int tpm_tis_i2c_send(struct tpm_chip *chip, u8 *buf, size_t len) in tpm_tis_i2c_send() argument
495 if (request_locality(chip, 0) < 0) in tpm_tis_i2c_send()
498 status = tpm_tis_i2c_status(chip); in tpm_tis_i2c_send()
500 tpm_tis_i2c_ready(chip); in tpm_tis_i2c_send()
502 (chip, TPM_STS_COMMAND_READY, in tpm_tis_i2c_send()
503 chip->vendor.timeout_b, &status) < 0) { in tpm_tis_i2c_send()
510 burstcnt = get_burstcount(chip); in tpm_tis_i2c_send()
519 rc = iic_tpm_write(TPM_DATA_FIFO(chip->vendor.locality), in tpm_tis_i2c_send()
532 wait_for_stat(chip, TPM_STS_VALID, in tpm_tis_i2c_send()
533 chip->vendor.timeout_c, &status); in tpm_tis_i2c_send()
542 iic_tpm_write(TPM_DATA_FIFO(chip->vendor.locality), &(buf[count]), 1); in tpm_tis_i2c_send()
543 wait_for_stat(chip, TPM_STS_VALID, chip->vendor.timeout_c, &status); in tpm_tis_i2c_send()
550 iic_tpm_write(TPM_STS(chip->vendor.locality), &sts, 1); in tpm_tis_i2c_send()
554 tpm_tis_i2c_ready(chip); in tpm_tis_i2c_send()
559 release_locality(chip, chip->vendor.locality, 0); in tpm_tis_i2c_send()
563 static bool tpm_tis_i2c_req_canceled(struct tpm_chip *chip, u8 status) in tpm_tis_i2c_req_canceled() argument
582 struct tpm_chip *chip; in tpm_tis_i2c_init() local
584 chip = tpmm_chip_alloc(dev, &tpm_tis_i2c); in tpm_tis_i2c_init()
585 if (IS_ERR(chip)) in tpm_tis_i2c_init()
586 return PTR_ERR(chip); in tpm_tis_i2c_init()
589 chip->vendor.irq = 0; in tpm_tis_i2c_init()
592 chip->vendor.timeout_a = msecs_to_jiffies(TIS_SHORT_TIMEOUT); in tpm_tis_i2c_init()
593 chip->vendor.timeout_b = msecs_to_jiffies(TIS_LONG_TIMEOUT); in tpm_tis_i2c_init()
594 chip->vendor.timeout_c = msecs_to_jiffies(TIS_SHORT_TIMEOUT); in tpm_tis_i2c_init()
595 chip->vendor.timeout_d = msecs_to_jiffies(TIS_SHORT_TIMEOUT); in tpm_tis_i2c_init()
597 if (request_locality(chip, 0) != 0) { in tpm_tis_i2c_init()
622 INIT_LIST_HEAD(&chip->vendor.list); in tpm_tis_i2c_init()
623 tpm_dev.chip = chip; in tpm_tis_i2c_init()
625 tpm_get_timeouts(chip); in tpm_tis_i2c_init()
626 tpm_do_selftest(chip); in tpm_tis_i2c_init()
628 return tpm_chip_register(chip); in tpm_tis_i2c_init()
630 release_locality(chip, chip->vendor.locality, 1); in tpm_tis_i2c_init()
699 struct tpm_chip *chip = tpm_dev.chip; in tpm_tis_i2c_remove() local
701 tpm_chip_unregister(chip); in tpm_tis_i2c_remove()
702 release_locality(chip, chip->vendor.locality, 1); in tpm_tis_i2c_remove()