Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'tpmdd-next-6.16' of git://git.kernel.org/pub/scm/linux/kernel/git/jarkko/linux-tpmdd

Pull tpm updates from Jarkko Sakkinen:
"This is only a small pull request with fixes, as possible features
moved to +1 release"

* tag 'tpmdd-next-6.16' of git://git.kernel.org/pub/scm/linux/kernel/git/jarkko/linux-tpmdd:
tpm_crb: ffa_tpm: fix/update comments describing the CRB over FFA ABI
tpm_crb_ffa: use dev_xx() macro to print log
tpm_ffa_crb: access tpm service over FF-A direct message request v2
tpm: remove kmalloc failure error message

+52 -27
+2 -5
drivers/char/tpm/eventlog/tpm1.c
··· 257 257 (unsigned char *)(v + sizeof(struct tcpa_event)); 258 258 259 259 eventname = kmalloc(MAX_TEXT_EVENT, GFP_KERNEL); 260 - if (!eventname) { 261 - printk(KERN_ERR "%s: ERROR - No Memory for event name\n ", 262 - __func__); 263 - return -EFAULT; 264 - } 260 + if (!eventname) 261 + return -ENOMEM; 265 262 266 263 /* 1st: PCR */ 267 264 seq_printf(m, "%2d ", do_endian_conversion(event->pcr_index));
+50 -22
drivers/char/tpm/tpm_crb_ffa.c
··· 38 38 * messages. 39 39 * 40 40 * All requests with FFA_MSG_SEND_DIRECT_REQ and FFA_MSG_SEND_DIRECT_RESP 41 - * are using the AArch32 SMC calling convention with register usage as 42 - * defined in FF-A specification: 43 - * w0: Function ID (0x8400006F or 0x84000070) 41 + * are using the AArch32 or AArch64 SMC calling convention with register usage 42 + * as defined in FF-A specification: 43 + * w0: Function ID 44 + * -for 32-bit: 0x8400006F or 0x84000070 45 + * -for 64-bit: 0xC400006F or 0xC4000070 44 46 * w1: Source/Destination IDs 45 47 * w2: Reserved (MBZ) 46 48 * w3-w7: Implementation defined, free to be used below ··· 70 68 #define CRB_FFA_GET_INTERFACE_VERSION 0x0f000001 71 69 72 70 /* 73 - * Return information on a given feature of the TPM service 71 + * Notifies the TPM service that a TPM command or TPM locality request is 72 + * ready to be processed, and allows the TPM service to process it. 74 73 * Call register usage: 75 74 * w3: Not used (MBZ) 76 75 * w4: TPM service function ID, CRB_FFA_START ··· 108 105 u16 minor_version; 109 106 /* lock to protect sending of FF-A messages: */ 110 107 struct mutex msg_data_lock; 111 - struct ffa_send_direct_data direct_msg_data; 108 + union { 109 + struct ffa_send_direct_data direct_msg_data; 110 + struct ffa_send_direct_data2 direct_msg_data2; 111 + }; 112 112 }; 113 113 114 114 static struct tpm_crb_ffa *tpm_crb_ffa; ··· 191 185 192 186 msg_ops = tpm_crb_ffa->ffa_dev->ops->msg_ops; 193 187 194 - memset(&tpm_crb_ffa->direct_msg_data, 0x00, 195 - sizeof(struct ffa_send_direct_data)); 188 + if (ffa_partition_supports_direct_req2_recv(tpm_crb_ffa->ffa_dev)) { 189 + memset(&tpm_crb_ffa->direct_msg_data2, 0x00, 190 + sizeof(struct ffa_send_direct_data2)); 196 191 197 - tpm_crb_ffa->direct_msg_data.data1 = func_id; 198 - tpm_crb_ffa->direct_msg_data.data2 = a0; 199 - tpm_crb_ffa->direct_msg_data.data3 = a1; 200 - tpm_crb_ffa->direct_msg_data.data4 = a2; 192 + tpm_crb_ffa->direct_msg_data2.data[0] = func_id; 193 + tpm_crb_ffa->direct_msg_data2.data[1] = a0; 194 + tpm_crb_ffa->direct_msg_data2.data[2] = a1; 195 + tpm_crb_ffa->direct_msg_data2.data[3] = a2; 201 196 202 - ret = msg_ops->sync_send_receive(tpm_crb_ffa->ffa_dev, 203 - &tpm_crb_ffa->direct_msg_data); 204 - if (!ret) 205 - ret = tpm_crb_ffa_to_linux_errno(tpm_crb_ffa->direct_msg_data.data1); 197 + ret = msg_ops->sync_send_receive2(tpm_crb_ffa->ffa_dev, 198 + &tpm_crb_ffa->direct_msg_data2); 199 + if (!ret) 200 + ret = tpm_crb_ffa_to_linux_errno(tpm_crb_ffa->direct_msg_data2.data[0]); 201 + } else { 202 + memset(&tpm_crb_ffa->direct_msg_data, 0x00, 203 + sizeof(struct ffa_send_direct_data)); 204 + 205 + tpm_crb_ffa->direct_msg_data.data1 = func_id; 206 + tpm_crb_ffa->direct_msg_data.data2 = a0; 207 + tpm_crb_ffa->direct_msg_data.data3 = a1; 208 + tpm_crb_ffa->direct_msg_data.data4 = a2; 209 + 210 + ret = msg_ops->sync_send_receive(tpm_crb_ffa->ffa_dev, 211 + &tpm_crb_ffa->direct_msg_data); 212 + if (!ret) 213 + ret = tpm_crb_ffa_to_linux_errno(tpm_crb_ffa->direct_msg_data.data1); 214 + } 215 + 206 216 207 217 return ret; 208 218 } ··· 253 231 254 232 rc = __tpm_crb_ffa_send_recieve(CRB_FFA_GET_INTERFACE_VERSION, 0x00, 0x00, 0x00); 255 233 if (!rc) { 256 - *major = CRB_FFA_MAJOR_VERSION(tpm_crb_ffa->direct_msg_data.data2); 257 - *minor = CRB_FFA_MINOR_VERSION(tpm_crb_ffa->direct_msg_data.data2); 234 + if (ffa_partition_supports_direct_req2_recv(tpm_crb_ffa->ffa_dev)) { 235 + *major = CRB_FFA_MAJOR_VERSION(tpm_crb_ffa->direct_msg_data2.data[1]); 236 + *minor = CRB_FFA_MINOR_VERSION(tpm_crb_ffa->direct_msg_data2.data[1]); 237 + } else { 238 + *major = CRB_FFA_MAJOR_VERSION(tpm_crb_ffa->direct_msg_data.data2); 239 + *minor = CRB_FFA_MINOR_VERSION(tpm_crb_ffa->direct_msg_data.data2); 240 + } 258 241 } 259 242 260 243 return rc; ··· 304 277 305 278 tpm_crb_ffa = ERR_PTR(-ENODEV); // set tpm_crb_ffa so we can detect probe failure 306 279 307 - if (!ffa_partition_supports_direct_recv(ffa_dev)) { 308 - pr_err("TPM partition doesn't support direct message receive.\n"); 280 + if (!ffa_partition_supports_direct_recv(ffa_dev) && 281 + !ffa_partition_supports_direct_req2_recv(ffa_dev)) { 282 + dev_warn(&ffa_dev->dev, "partition doesn't support direct message receive.\n"); 309 283 return -EINVAL; 310 284 } 311 285 ··· 327 299 rc = tpm_crb_ffa_get_interface_version(&tpm_crb_ffa->major_version, 328 300 &tpm_crb_ffa->minor_version); 329 301 if (rc) { 330 - pr_err("failed to get crb interface version. rc:%d", rc); 302 + dev_err(&ffa_dev->dev, "failed to get crb interface version. rc:%d\n", rc); 331 303 goto out; 332 304 } 333 305 334 - pr_info("ABI version %u.%u", tpm_crb_ffa->major_version, 306 + dev_info(&ffa_dev->dev, "ABI version %u.%u\n", tpm_crb_ffa->major_version, 335 307 tpm_crb_ffa->minor_version); 336 308 337 309 if (tpm_crb_ffa->major_version != CRB_FFA_VERSION_MAJOR || 338 310 (tpm_crb_ffa->minor_version > 0 && 339 311 tpm_crb_ffa->minor_version < CRB_FFA_VERSION_MINOR)) { 340 - pr_err("Incompatible ABI version"); 312 + dev_warn(&ffa_dev->dev, "Incompatible ABI version\n"); 341 313 goto out; 342 314 } 343 315