mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-09-04 20:19:47 +08:00 
			
		
		
		
	tpm: ibmvtpm: Add support for TPM2
Support TPM2 in the IBM vTPM driver. The hypervisor tells us what version of TPM is connected through the vio_device_id. In case a TPM2 device is found, we set the TPM_CHIP_FLAG_TPM2 flag and get the command codes attributes table. The driver does not need the timeouts and durations, though. Signed-off-by: Stefan Berger <stefanb@linux.ibm.com> Acked-by: Nayna Jain <nayna@linux.ibm.com> Tested-by: Nayna Jain <nayna@linux.ibm.com> Reviewed-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com> Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
This commit is contained in:
		
							parent
							
								
									d8d74ea3c0
								
							
						
					
					
						commit
						18b3670d79
					
				| @ -226,6 +226,7 @@ int tpm2_auto_startup(struct tpm_chip *chip); | |||||||
| void tpm2_shutdown(struct tpm_chip *chip, u16 shutdown_type); | void tpm2_shutdown(struct tpm_chip *chip, u16 shutdown_type); | ||||||
| unsigned long tpm2_calc_ordinal_duration(struct tpm_chip *chip, u32 ordinal); | unsigned long tpm2_calc_ordinal_duration(struct tpm_chip *chip, u32 ordinal); | ||||||
| int tpm2_probe(struct tpm_chip *chip); | int tpm2_probe(struct tpm_chip *chip); | ||||||
|  | int tpm2_get_cc_attrs_tbl(struct tpm_chip *chip); | ||||||
| int tpm2_find_cc(struct tpm_chip *chip, u32 cc); | int tpm2_find_cc(struct tpm_chip *chip, u32 cc); | ||||||
| int tpm2_init_space(struct tpm_space *space); | int tpm2_init_space(struct tpm_space *space); | ||||||
| void tpm2_del_space(struct tpm_chip *chip, struct tpm_space *space); | void tpm2_del_space(struct tpm_chip *chip, struct tpm_space *space); | ||||||
|  | |||||||
| @ -615,7 +615,7 @@ out: | |||||||
| 	return rc; | 	return rc; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static int tpm2_get_cc_attrs_tbl(struct tpm_chip *chip) | int tpm2_get_cc_attrs_tbl(struct tpm_chip *chip) | ||||||
| { | { | ||||||
| 	struct tpm_buf buf; | 	struct tpm_buf buf; | ||||||
| 	u32 nr_commands; | 	u32 nr_commands; | ||||||
|  | |||||||
| @ -29,6 +29,7 @@ static const char tpm_ibmvtpm_driver_name[] = "tpm_ibmvtpm"; | |||||||
| 
 | 
 | ||||||
| static const struct vio_device_id tpm_ibmvtpm_device_table[] = { | static const struct vio_device_id tpm_ibmvtpm_device_table[] = { | ||||||
| 	{ "IBM,vtpm", "IBM,vtpm"}, | 	{ "IBM,vtpm", "IBM,vtpm"}, | ||||||
|  | 	{ "IBM,vtpm", "IBM,vtpm20"}, | ||||||
| 	{ "", "" } | 	{ "", "" } | ||||||
| }; | }; | ||||||
| MODULE_DEVICE_TABLE(vio, tpm_ibmvtpm_device_table); | MODULE_DEVICE_TABLE(vio, tpm_ibmvtpm_device_table); | ||||||
| @ -672,6 +673,13 @@ static int tpm_ibmvtpm_probe(struct vio_dev *vio_dev, | |||||||
| 	if (rc) | 	if (rc) | ||||||
| 		goto init_irq_cleanup; | 		goto init_irq_cleanup; | ||||||
| 
 | 
 | ||||||
|  | 	if (!strcmp(id->compat, "IBM,vtpm20")) { | ||||||
|  | 		chip->flags |= TPM_CHIP_FLAG_TPM2; | ||||||
|  | 		rc = tpm2_get_cc_attrs_tbl(chip); | ||||||
|  | 		if (rc) | ||||||
|  | 			goto init_irq_cleanup; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	if (!wait_event_timeout(ibmvtpm->crq_queue.wq, | 	if (!wait_event_timeout(ibmvtpm->crq_queue.wq, | ||||||
| 				ibmvtpm->rtce_buf != NULL, | 				ibmvtpm->rtce_buf != NULL, | ||||||
| 				HZ)) { | 				HZ)) { | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Stefan Berger
						Stefan Berger