From nobody Mon May 25 05:12:28 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8A405375F81 for ; Mon, 18 May 2026 15:17:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779117462; cv=none; b=Ida843a1aswnfqQ3VR6HZc51ZzqrhoGCu1deEejQgkAnSjr3PqZAAqnoWY5eY9SrQBr1byFmvNsXyYnZzv1ReWF8hqrjkM0AqNm82exhwL8EIAdKJBQgUFSJUC+UOCA1X+q4hDgS51AerR1C2AVh3oeItke3ceI618am/UjXDDI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779117462; c=relaxed/simple; bh=X6H9YMI/G5UD7SgY0WhWwEquiNvZiLCynZ0Ng09icf0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cAHZNcPs4bBOco/5Q3b5iBvG5Hkpy+V7JprGvQ4TnRVO/U8GbuhltdzkhLBPNs3CMx6744OZY2ynlG0gbVAmdfueNiSR4RCJRK2VOkNylTCDPCRNohRSJzECy1ibQGUu/XNXbGjl8KKdq1rpyoMxWRJzqvGNMIXXp1q8FoaLr4Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=Xnbh+kV8; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=oJ/toitM; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="Xnbh+kV8"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="oJ/toitM" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1779117459; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=jtzC8GOmAvHT3XfNpHE4tG+IxT92XswAdGYofHiX++Q=; b=Xnbh+kV8IpLdPr8QStOHpyllC8mAfj5ZOLYWBnfvBudPgxMe7kbougBeYXkO5HxXTLjOGz VeW/2uzI3TCfc9VQZeU6B6rz9pgysdFHtHeUuWpwxeHdIKEspcRQfvY2+7CijtOt/EHQb2 LJcPNY3p3m5gdR56xxZW0GoX7s9cQR0= Received: from mail-pf1-f199.google.com (mail-pf1-f199.google.com [209.85.210.199]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-460-hWgdhRiNN-SAHePJL2MFsA-1; Mon, 18 May 2026 11:17:38 -0400 X-MC-Unique: hWgdhRiNN-SAHePJL2MFsA-1 X-Mimecast-MFC-AGG-ID: hWgdhRiNN-SAHePJL2MFsA_1779117457 Received: by mail-pf1-f199.google.com with SMTP id d2e1a72fcca58-82fa6c3a77cso1335044b3a.3 for ; Mon, 18 May 2026 08:17:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1779117456; x=1779722256; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=jtzC8GOmAvHT3XfNpHE4tG+IxT92XswAdGYofHiX++Q=; b=oJ/toitMClugy/eelXYgGKrBfPskR2J5S08VH4f4H75GaH2w0eiwDreTSSsHn6XK7F rt2kIo05CUlhu0j0MF4xFdyW+O3Wq4uxkf5YMgvuISOl7zVvnlIhXqUbXsGgXcZbM6vy EgJkx8dk0DnpZgFnnorWAlHJA6TNgE2PLrkfvCyiqri7lhdmwLE9jgiNST6gl5uR87gv ulozZ3oOBD+gIU9VVfpJXBByXOkPYafbZTVV9o8sHv2nV9QqIdSFT9oPBplD9O8Om2MK AGxvvEou2B43fal7Opu11B47egANWPa2nKwz84PHm309NLUo5L4Dd0stX3B1XdPWI4vb bQRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779117456; x=1779722256; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=jtzC8GOmAvHT3XfNpHE4tG+IxT92XswAdGYofHiX++Q=; b=YkvWsFVVLhEkkoeUdi4BCLt5qs/9sIaokLLyyMbDY0uk5bnoa6P9EzFM7FPHuX6zGa l53aqO0W8tQNyalu5Jy8Tls0ZsIS5FCjUOlrpPPAlP1DVecW3/ile6oltfmEhuitSJ0g 3GpPq75zJDsAq37yrh+wJR3XqGgqSONHMuqhwH4sOr/OSt7zh0aBtla1BVe0fgqO4bTN dSg1ISougSGSoDc4DT2QyiNhIOGek2CWrvhqO1d65LTByOrz8qseG5SguZdB0WahlwZx LlOa4ZmajMnpMwApS2hmKaPc+2YY2j6/P+1YXk7GBvANz7jc+TuWp7roXqT14HE3HVWQ xmuA== X-Gm-Message-State: AOJu0YzJFWaiBSdloJiQdcH3FFWfctmToxxCEeBA/QH8+o4nvylhGjEy +VFjZWbRrUg6VEWnD3AzlKz3+NTlx9ik37A04DByAhPRiwiQoP5KQbgP2eet36joPMa2Q3jwKM/ IsI5UpiKQpTdCJAw2fJYbWvQImziiiBZBIZH9yhBsp7QTJqDrKdOWs2oOtS6S8KTsCKQjFOt5L1 05DVA8s7l8XCZoUg2MV7kU9EsxFafpwb2j8tgfMreH9/I6AvaA X-Gm-Gg: Acq92OHzABXd1u+mlF5y0P7N/bniZg+ujXenSuV37IYkQggvCdubPjBfOLMRd7H21sT GuaPm//pLb11+eFP3ordD1IhdcDuSEDkYFTxsHOE600Iz6g7lasCuDA3RMfJ/XDhyko6NzCCPoP XhduiDJD1oZxPmyWmZymKoyanRctyaZjSmZW5XBpV5av0+pup4XMXzbNTFWzHUxC2+Z36SCuKlu /ldyAWQVuaqeP4Va4IsC4DMvSKWhmwF7Hr1YHD7erFtTGZhyocNfRLF0MyQFdpI87STe7Z1RArK X6x9Z2iRHoJoPAAlCAmhG/VgqRfTuqVzjPmuwHkdIxjZSn5k1jgAsRC84IuyoQkd4u9i7Q1myOA jTFvUsVMpuLELniIhk9bfKa7WV+Y9kG0rYbS51pPmJ0Y2FC/zxulfr8Tsl/g9VRctgOZflvYA6A == X-Received: by 2002:a05:6a00:3907:b0:82d:556b:7a01 with SMTP id d2e1a72fcca58-83f33c25b5bmr16219911b3a.16.1779117456439; Mon, 18 May 2026 08:17:36 -0700 (PDT) X-Received: by 2002:a05:6a00:3907:b0:82d:556b:7a01 with SMTP id d2e1a72fcca58-83f33c25b5bmr16219874b3a.16.1779117455840; Mon, 18 May 2026 08:17:35 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.104.172]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-83f197815cesm18181153b3a.24.2026.05.18.08.17.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 May 2026 08:17:35 -0700 (PDT) From: Arun Menon To: linux-kernel@vger.kernel.org Cc: Jarkko Sakkinen , linux-integrity@vger.kernel.org, Jason Gunthorpe , Peter Huewe , Arun Menon Subject: [PATCH v3 1/6] tpm_crb: Add register definitions of TPM CRB chunking fields Date: Mon, 18 May 2026 20:47:19 +0530 Message-ID: <20260518151724.730443-2-armenon@redhat.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260518151724.730443-1-armenon@redhat.com> References: <20260518151724.730443-1-armenon@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Arun Menon Post-quantum cryptographic (PQC) algorithms can require buffer sizes that exceed the physical capacity of the TPM's Command/Response Buffer (CRB). To support these larger payloads, the TPM 2.0 CRB specification [1] allows for data chunking when the physical MMIO window is smaller than the required buffer size. To support this protocol, the TPM driver must be able to detect the chunking capability, and signal the backend using specific start method flags, also known as the control area start register bits. As per sections 6.4.2.2 and 6.5.3.9 of the specification document [1] Add 2 new bit flags to the existing enum crb_start and add the capability bit. - CRB_INTF_CAP_CRB_CHUNK: A capability bit used to detect if the backend supports chunking. - CRB_START_NEXT_CHUNK: A control bit to signal the TPM to consume the current command buffer, or to get the next chunk from the response buffer. - CRB_START_RESP_RETRY: A control bit to signal retransmission of a response buffer. [1] https://trustedcomputinggroup.org/wp-content/uploads/PC-Client-Specific= -Platform-TPM-Profile-for-TPM-2p0-v1p07_rc1_121225.pdf Signed-off-by: Arun Menon Reviewed-by: Jarkko Sakkinen --- drivers/char/tpm/tpm_crb.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/char/tpm/tpm_crb.c b/drivers/char/tpm/tpm_crb.c index ceb4100ba400..d76f9e30f036 100644 --- a/drivers/char/tpm/tpm_crb.c +++ b/drivers/char/tpm/tpm_crb.c @@ -57,12 +57,18 @@ enum crb_ctrl_sts { =20 enum crb_start { CRB_START_INVOKE =3D BIT(0), + CRB_START_RESP_RETRY =3D BIT(1), + CRB_START_NEXT_CHUNK =3D BIT(2), }; =20 enum crb_cancel { CRB_CANCEL_INVOKE =3D BIT(0), }; =20 +enum crb_intf { + CRB_INTF_CAP_CRB_CHUNK =3D BIT(10), +}; + struct crb_regs_head { u32 loc_state; u32 reserved1; --=20 2.54.0 From nobody Mon May 25 05:12:28 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5AD9D36DA14 for ; Mon, 18 May 2026 15:17:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779117467; cv=none; b=ZGu2CakA8MurZIHOyxOXgUUGYZqkIN9F4yl4iXvRYOSwn9aX8JlaguFoNn+EIat4aimEvbdz7H5gQ/o7ysut2RHImRaOTKke7ICigW5oxKgkrah3SL5W0+d93TmWjvsSM8EujjDUwhjwmxzbwsDurahZn5TxaSlh2Yofxmh6Wgg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779117467; c=relaxed/simple; bh=VxX+WokTYMcXgCaqGRDIyCcANcY+2xvqODyU/qFVdVM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=FroR0HLcntL+P3T7cPQJHEGih5uU2JmsT++7WeQU2ZKWWpRGCt9RxPG+C2fRuUbLgpOqqq0WVXGq6RPLbL0I9Qworj+stNSXif7BAgvB6XCAInLwaD9ChLzI6wzYNw+vzG/mY4pLvinwOSXKFzAAG88RiWAz4FcJpg29IGhHsNM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=DP6NCYpM; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=K/dEWHiz; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="DP6NCYpM"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="K/dEWHiz" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1779117463; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=BnPbGV+ZY+zNpAkrnk2fLEpoynLtxIvL3bKUiWP9NRA=; b=DP6NCYpM0NGHQQ1oeKUqR2SjfkN3tw9eb9ESrKbJO83PnQC9u7EsuCXQOVtMQ1QFATqBDv HbfdMY1P30sEztm2C7fHGjoYAox7cSH9+rdOUKfw/lt1hufPGhIvXdMWFmajsYuJxwiHHu ZkGnFK2xIyj1BSiBC1kMzLXVxwMaYyE= Received: from mail-pf1-f199.google.com (mail-pf1-f199.google.com [209.85.210.199]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-546-MBkyAKpiO62xsxT7jlyJZA-1; Mon, 18 May 2026 11:17:42 -0400 X-MC-Unique: MBkyAKpiO62xsxT7jlyJZA-1 X-Mimecast-MFC-AGG-ID: MBkyAKpiO62xsxT7jlyJZA_1779117461 Received: by mail-pf1-f199.google.com with SMTP id d2e1a72fcca58-82f6b984b3aso1261552b3a.3 for ; Mon, 18 May 2026 08:17:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1779117460; x=1779722260; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=BnPbGV+ZY+zNpAkrnk2fLEpoynLtxIvL3bKUiWP9NRA=; b=K/dEWHizDObMJTwxpvIbl2efKOkhTXlmVe1Sxt64+ySr1P2vFObDNmyNz3O4U5UUyQ 1nMGrFixun2KCJnQ2RKi+EvpGmKxdwN4m4Gu/8RYqdSm0JlsdDb24HSJWFe0+jD6ZX8Q 1UxGel5Ikus6b9ZMxhaBYIzvM8f07jWprr+nelBG/HX96lpdNzp90E2oxiftGt5w0Mzo WtlM9zm/JR+pOQv0oq5yanmSwZFbrD1B0XMlIUxC36/AEefYTW6ibSYCW00xd/TJcMTc JiShoM0QaM9hlgw0/4NrFLno2MftsCueqduaBq+0jvRTXjbuzoKOq+N4OI/5xKZRrEqR lkyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779117460; x=1779722260; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=BnPbGV+ZY+zNpAkrnk2fLEpoynLtxIvL3bKUiWP9NRA=; b=N9m4IlmIc23Y0pthouE6w6d1a+7uRE79s0tPEKKvfAYFJBRH0eStMaa0ylJKwdz2x8 aNGXHYeue9ViLpWvHEmg1pQyC8lZaKFpZL+7xqTlMMCXRWDTlhX0pOecGI3TRntKhjr3 CY4uQaOLV4IRtZ6KeUaHkms0oUg6Ghsh5+yQLNTfpP8RE7afHp9GCC81R7mfiTH6Zag7 dGUSt3jy0QeTus75v23f3AhXIZ6JoUiF/JmBHVmvyKJrn2PMtbK8bQdlKXXnweeL18L/ sx3dokDFmiUaM+sTpehPOI9NH1zk6ko75HpT72tTTtXP8TzdccHmXvNqlDJcb/BWnXKi yIPQ== X-Gm-Message-State: AOJu0YwW/mG1kqNUnSanQUshyBdeXW/fiZAsWYsM+qL7VoKei3iHhfRL VhM6LZPVE+MTnFzb4eJLtgCIoyjkrM6I7DDfxn7zjnLMZ4Kuk0v6J7CLOWSSKT0U1pcVVHSKOyt tYez/ZkK6iI07i5/HGiGEJdFsQ1clYicCrDT9vNPfIy9HgU0FQDbRgjkjIZ7h+mVhk11Ng+DkW0 tISGMw8QGrUFphAY+C871fgKzobybWPfMwihqBaviRpzLle3T/ X-Gm-Gg: Acq92OFUYf7qrRHWP83YIY/O7aGSVwmwFpg2mLhmJKq6bciSr+ctLn4TcTHg25a3P3v VLE0A41JC0CEG2V53W3juwEZIsfyDY+ZX/jWwvogbP8GYQNJtGKQo5X+27v/XWWz8Fhzr5W6VTP i5N3b1Wz5Fx9nFP5Mir8TNy2ivqOLDZL9rEHFyRPN6NkZAWTb1zCRHSSeuDxSME5WGyngBulK9/ r5IWBKZq93MMsLriQJvkZO7HDf/HZ5OlG1XW+ER5WS5ZE0Ue0J4kziTltCcaaivlIdyN+SyzJYw Wj4iBUUpSRa1uqhgcIRlESUzu5qllRYkU8T1YJFNoDl2feygPDFwQfsq8i5jkxZXQdIaoYKMhxq Ys1pSNUp6xyHJj7/t/WuB7b9MY9KPmuen3F3hll7hdeVNcdqOym+P3b9RgoKIzz8= X-Received: by 2002:a05:6a00:950f:b0:838:c01a:7a50 with SMTP id d2e1a72fcca58-83f33d8c1ddmr14067548b3a.30.1779117460349; Mon, 18 May 2026 08:17:40 -0700 (PDT) X-Received: by 2002:a05:6a00:950f:b0:838:c01a:7a50 with SMTP id d2e1a72fcca58-83f33d8c1ddmr14067498b3a.30.1779117459638; Mon, 18 May 2026 08:17:39 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.104.172]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-83f197815cesm18181153b3a.24.2026.05.18.08.17.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 May 2026 08:17:39 -0700 (PDT) From: Arun Menon To: linux-kernel@vger.kernel.org Cc: Jarkko Sakkinen , linux-integrity@vger.kernel.org, Jason Gunthorpe , Peter Huewe , Arun Menon Subject: [PATCH v3 2/6] tpm_crb: Split start method into a separate header Date: Mon, 18 May 2026 20:47:20 +0530 Message-ID: <20260518151724.730443-3-armenon@redhat.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260518151724.730443-1-armenon@redhat.com> References: <20260518151724.730443-1-armenon@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Arun Menon The current implementation handles different platform start methods (ACPI, ARM SMC, and ARM FFA) directly within crb_send(). Move this logic into a new helper function, tpm_crb_start(). This is a pure refactor with no functional changes intended. Signed-off-by: Arun Menon Reviewed-by: Jarkko Sakkinen --- drivers/char/tpm/tpm_crb.c | 50 ++++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/drivers/char/tpm/tpm_crb.c b/drivers/char/tpm/tpm_crb.c index d76f9e30f036..9a2f512b4ae3 100644 --- a/drivers/char/tpm/tpm_crb.c +++ b/drivers/char/tpm/tpm_crb.c @@ -446,6 +446,32 @@ static int tpm_crb_smc_start(struct device *dev, unsig= ned long func_id) } #endif =20 +static int tpm_crb_start(struct tpm_chip *chip) +{ + struct crb_priv *priv =3D dev_get_drvdata(&chip->dev); + int rc =3D 0; + /* The reason for the extra quirk is that the PTT in 4th Gen Core CPUs + * report only ACPI start but in practice seems to require both + * CRB start, hence invoking CRB start method if hid =3D=3D MSFT0101. + */ + if (priv->sm =3D=3D ACPI_TPM2_COMMAND_BUFFER || + priv->sm =3D=3D ACPI_TPM2_MEMORY_MAPPED || + !strcmp(priv->hid, "MSFT0101")) + iowrite32(CRB_START_INVOKE, &priv->regs_t->ctrl_start); + if (priv->sm =3D=3D ACPI_TPM2_START_METHOD || + priv->sm =3D=3D ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD) + rc =3D crb_do_acpi_start(chip); + if (priv->sm =3D=3D ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC) { + iowrite32(CRB_START_INVOKE, &priv->regs_t->ctrl_start); + rc =3D tpm_crb_smc_start(&chip->dev, priv->smc_func_id); + } + if (priv->sm =3D=3D ACPI_TPM2_CRB_WITH_ARM_FFA) { + iowrite32(CRB_START_INVOKE, &priv->regs_t->ctrl_start); + rc =3D tpm_crb_ffa_start(CRB_FFA_START_TYPE_COMMAND, chip->locality); + } + return rc; +} + static int crb_send(struct tpm_chip *chip, u8 *buf, size_t bufsiz, size_t = len) { struct crb_priv *priv =3D dev_get_drvdata(&chip->dev); @@ -471,29 +497,7 @@ static int crb_send(struct tpm_chip *chip, u8 *buf, si= ze_t bufsiz, size_t len) /* Make sure that cmd is populated before issuing start. */ wmb(); =20 - /* The reason for the extra quirk is that the PTT in 4th Gen Core CPUs - * report only ACPI start but in practice seems to require both - * CRB start, hence invoking CRB start method if hid =3D=3D MSFT0101. - */ - if (priv->sm =3D=3D ACPI_TPM2_COMMAND_BUFFER || - priv->sm =3D=3D ACPI_TPM2_MEMORY_MAPPED || - !strcmp(priv->hid, "MSFT0101")) - iowrite32(CRB_START_INVOKE, &priv->regs_t->ctrl_start); - - if (priv->sm =3D=3D ACPI_TPM2_START_METHOD || - priv->sm =3D=3D ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD) - rc =3D crb_do_acpi_start(chip); - - if (priv->sm =3D=3D ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC) { - iowrite32(CRB_START_INVOKE, &priv->regs_t->ctrl_start); - rc =3D tpm_crb_smc_start(&chip->dev, priv->smc_func_id); - } - - if (priv->sm =3D=3D ACPI_TPM2_CRB_WITH_ARM_FFA) { - iowrite32(CRB_START_INVOKE, &priv->regs_t->ctrl_start); - rc =3D tpm_crb_ffa_start(CRB_FFA_START_TYPE_COMMAND, chip->locality); - } - + rc =3D tpm_crb_start(chip); if (rc) return rc; =20 --=20 2.54.0 From nobody Mon May 25 05:12:28 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0069B375F81 for ; Mon, 18 May 2026 15:17:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779117469; cv=none; b=bhBSc8BgTM+h8mElFyi+5rgWE/8wc64xIAun6vMJZpqYkC4vZAjzlOU7YK9reQhyDarUC3RPuH2byMQM6GfgsthsCwWTbI2dHr2e+fGGlpifoD1GSI0xtTRMPNq7xMRKS79P35RQY+So/VSVS1PA/Xn8hPpGJdWFfP8a5N/9p0U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779117469; c=relaxed/simple; bh=ExFMwvKcte30iE/5xeAT+yE2G/l/cIlYbv6MzIObXps=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=RAmQ/LEUvkMDmNdiDZtbS9Ai4bMRdLFoRHlmimwKYsvUMxZWl/HjtFfDTYzJ5KhsjpqszeJFk2pcebLDgbdwWdo48VkrnFiQwB46atod5ncn8iQ5VBBEp6G96hlc44QzSvxKejggI83eIhWF9yB6JChoelygCkrhwRcb6RbfgMk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=hsHsZr2S; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=n3sslKY8; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="hsHsZr2S"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="n3sslKY8" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1779117467; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ChwJFmg7CxWjli9jGFgnSfwP9Dprp7rtfDPtVsAymzA=; b=hsHsZr2SbCS8EqvoSG8RtK+pYiqslDm22m3E4c92qkhsm9W7R/OWHsv0oyrZ+py3ToBWJo NH3WEmbtZPOqKszmiNSAj1LYueBzUeHvqaMx3W+Z7JbwVKPOMcpDeEyaytvmrdtlKHe/dP hzGerwWi9qGPvNfBXInOrhdKlyRjjec= Received: from mail-pf1-f198.google.com (mail-pf1-f198.google.com [209.85.210.198]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-564-U3ou-GCDPGejdMhQgwUvVA-1; Mon, 18 May 2026 11:17:45 -0400 X-MC-Unique: U3ou-GCDPGejdMhQgwUvVA-1 X-Mimecast-MFC-AGG-ID: U3ou-GCDPGejdMhQgwUvVA_1779117465 Received: by mail-pf1-f198.google.com with SMTP id d2e1a72fcca58-83f7e7f7457so762372b3a.1 for ; Mon, 18 May 2026 08:17:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1779117464; x=1779722264; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ChwJFmg7CxWjli9jGFgnSfwP9Dprp7rtfDPtVsAymzA=; b=n3sslKY82wj2LoCyfoL90aSj4VDRZrV2yEPsD0/26pYR/K6+5FtJ9RhikAJHOUl6G6 xpup1+gssNLo7MnD0PzRcbf5YTYZpJPMWtw45MnUy49Q1mRa2m9jaBDo+ECNcowIqbFF KPRHg5xGnzN+GeNUec7/+/IR1PCMOUSXbZ3x69TmGQu4lrTSknPOAjmq+VF+YWKBOkI4 4tnFy8HH5a4ELJPxcUYeT50snDSViRZYyxVAopGzRbfdrNrszbscoIEKFALJH8jdImZl vyDefJMQ5xgPrE33ncqUYxB00l0LnFqszZ3rJFtglQAJk0iXE+YiKBGlLD2pnhv9/Pz7 YebQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779117464; x=1779722264; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=ChwJFmg7CxWjli9jGFgnSfwP9Dprp7rtfDPtVsAymzA=; b=OaLp/tH7eDbPUbGJPB0GhJjXQ185dlkdbCD+h0UIKn13b1v5yHxdV5AjQwvDu0eIqt E12jPIpf1EmtSKidT/Nqn9RjHVtta4bCYVtwCPXxMvxmjY5u9ZQMULz1XAhx5vnJHCE5 QtUAQnW/WoRiKfAmkjpLoIzTctdiJbeAgg4GEGh80BHqAGhyOD9euMkO5rH7WxMyosZv DabNnnU/EPSxxYkFSSV8ZcSDF2cOGEa929kWVqc+7tn0DqZGcENOn02yXAYedTV1Ks3H w0aR3MWVJbzysmGKEOhp34+5B0F8A4nzPBT1SR9nEMgDTJ1kIVnMdVEDVh/4jKW9nOR1 uwNw== X-Gm-Message-State: AOJu0Yz5noyc2EHYBX/x1+HG/AMtW0P9ontVLpR+oCFw0YAE9s0LNeeB 9rKdQue9mUwTHBZ1eTusPt1J6v2D9tpcQxzPg0MdGLOpybuHS234VrhbFgB5KceO/AOSrcV/9LE GfwZ0hzXY9+3Q8/mU7Djl01/YujiJ0j5HeVMB1hTGRW78ZO0OkKRIP5A2S7fWWqbx2y4P30EgDX SWUXYAdtBOO6o3UJxtam3N1J5Bgc4eMvdtOQH+VNLwZCr1dsEA X-Gm-Gg: Acq92OEqJVEQCEDZWpGfmIf9zu6vbWkbmC+mY2BHhA8sBIkJBRhjpSp3oXSi9H4z1SL fZNbIAgzU4/ok/mXM7E1uczduCyMtXKoF6aedt+vI+zi74alzeElx3CXiE/Ng/mLw56jPA3bnNs /83uVW18q3bo3pRz25zQWnqW2hMvURNrGRRQvMXPrmfIb5eAI8MrpDygIfj2zuPOUJxfscRcwFL QoG7ppXACcSVFb/pPoj1/g8WczDyyE+Qq04PiWAYzxK/At0cPo9h1sNvgGrLfsSr6N3fBs4F9Vd 30qIPIqiWIyLQbja1YPez2s1Rgo52GvTGLGf/QZTz0hpBNZmE1J4w9oZkKXtnLt2St6Z6SluKgl SA0EbQ5ikh3M1kLJcw8JceLJETmS7JoAKpOnOsoPY823tBlQBVodLCzduUJQr6Jg= X-Received: by 2002:a05:6a00:2d81:b0:82f:49b5:cfc3 with SMTP id d2e1a72fcca58-83f33c9080fmr12002539b3a.18.1779117464132; Mon, 18 May 2026 08:17:44 -0700 (PDT) X-Received: by 2002:a05:6a00:2d81:b0:82f:49b5:cfc3 with SMTP id d2e1a72fcca58-83f33c9080fmr12002498b3a.18.1779117463426; Mon, 18 May 2026 08:17:43 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.104.172]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-83f197815cesm18181153b3a.24.2026.05.18.08.17.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 May 2026 08:17:42 -0700 (PDT) From: Arun Menon To: linux-kernel@vger.kernel.org Cc: Jarkko Sakkinen , linux-integrity@vger.kernel.org, Jason Gunthorpe , Peter Huewe , Arun Menon Subject: [PATCH v3 3/6] tpm_crb: Add start_cmd parameter to tpm_crb_start wrapper Date: Mon, 18 May 2026 20:47:21 +0530 Message-ID: <20260518151724.730443-4-armenon@redhat.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260518151724.730443-1-armenon@redhat.com> References: <20260518151724.730443-1-armenon@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Arun Menon The current implementation of tpm_crb_start() is limited to triggering the CRB_START_INVOKE bit. To support command and response chunking, the driver must be able to send other control bits, like CRB_START_NEXT_CHUNK, using the same platform-specific paths. This commit adds the start_cmd parameter to tpm_crb_start() so the caller can specify which command to send. Signed-off-by: Arun Menon Reviewed-by: Jarkko Sakkinen --- drivers/char/tpm/tpm_crb.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/char/tpm/tpm_crb.c b/drivers/char/tpm/tpm_crb.c index 9a2f512b4ae3..31f530744e90 100644 --- a/drivers/char/tpm/tpm_crb.c +++ b/drivers/char/tpm/tpm_crb.c @@ -446,7 +446,7 @@ static int tpm_crb_smc_start(struct device *dev, unsign= ed long func_id) } #endif =20 -static int tpm_crb_start(struct tpm_chip *chip) +static int tpm_crb_start(struct tpm_chip *chip, u32 start_cmd) { struct crb_priv *priv =3D dev_get_drvdata(&chip->dev); int rc =3D 0; @@ -457,16 +457,16 @@ static int tpm_crb_start(struct tpm_chip *chip) if (priv->sm =3D=3D ACPI_TPM2_COMMAND_BUFFER || priv->sm =3D=3D ACPI_TPM2_MEMORY_MAPPED || !strcmp(priv->hid, "MSFT0101")) - iowrite32(CRB_START_INVOKE, &priv->regs_t->ctrl_start); + iowrite32(start_cmd, &priv->regs_t->ctrl_start); if (priv->sm =3D=3D ACPI_TPM2_START_METHOD || priv->sm =3D=3D ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD) rc =3D crb_do_acpi_start(chip); if (priv->sm =3D=3D ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC) { - iowrite32(CRB_START_INVOKE, &priv->regs_t->ctrl_start); + iowrite32(start_cmd, &priv->regs_t->ctrl_start); rc =3D tpm_crb_smc_start(&chip->dev, priv->smc_func_id); } if (priv->sm =3D=3D ACPI_TPM2_CRB_WITH_ARM_FFA) { - iowrite32(CRB_START_INVOKE, &priv->regs_t->ctrl_start); + iowrite32(start_cmd, &priv->regs_t->ctrl_start); rc =3D tpm_crb_ffa_start(CRB_FFA_START_TYPE_COMMAND, chip->locality); } return rc; @@ -497,7 +497,7 @@ static int crb_send(struct tpm_chip *chip, u8 *buf, siz= e_t bufsiz, size_t len) /* Make sure that cmd is populated before issuing start. */ wmb(); =20 - rc =3D tpm_crb_start(chip); + rc =3D tpm_crb_start(chip, CRB_START_INVOKE); if (rc) return rc; =20 --=20 2.54.0 From nobody Mon May 25 05:12:28 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BE24637883E for ; Mon, 18 May 2026 15:17:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779117474; cv=none; b=FMGqSmI+y5GOpacNprICfkUuiQ+M9YwzyxRyLlQ6QyHdwBDwlbFsdmI3eELjxotOuToDsxkbIZzfgDd13Rd5UK7FiGfaeJSSQjsrSFLWFNDltV5N/tr/OJR7YlY6+puWLg8C7uvGOJKZgfDbtIKSlsC6RlQfk2izTTzSPzhvBFI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779117474; c=relaxed/simple; bh=PRKgbwrbL5iMNslBxl3scRrf7sNesK+Vs+rfRBhB4R0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=hAQMyBk0PLolKZcMqhcAxfzbE7ILMfEvzjGiXCG3Glu0/kvV7f0UwAdV27Ab02pJcyf7NzLTB2hLK0A7iMWmRnS9GKQVQF/erysXOBRI0+vpQnyyzUYeqom/DWbVBRgQq/vRRR5n2LhgZq/QqiqbpVGk4rWetGeycjrHyRPu9H8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=ZMaX0Mbi; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=d1wTpCzR; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="ZMaX0Mbi"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="d1wTpCzR" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1779117469; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=y1xmf5x73w7x9YqKPrcPljDvbvvQKElp2j9AELMu+d4=; b=ZMaX0Mbivziy8JDEPkDNug84ioe8Vwds+J2ErsUQQ1dYohYcRt8akJOjiXnpk8v6FTwR8J 1fpVY+y8nm8llo/09EHovJoGlz7M5Ey9HlglEwskv1dViO8aYSoac/tpKI3iU3DxdhXEC0 fK18KniEgnG8rkQxsVXLBo4pRRr0/Is= Received: from mail-pf1-f200.google.com (mail-pf1-f200.google.com [209.85.210.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-154-80ix7z3cPpG7BMTL1XPU9A-1; Mon, 18 May 2026 11:17:48 -0400 X-MC-Unique: 80ix7z3cPpG7BMTL1XPU9A-1 X-Mimecast-MFC-AGG-ID: 80ix7z3cPpG7BMTL1XPU9A_1779117467 Received: by mail-pf1-f200.google.com with SMTP id d2e1a72fcca58-82f6a5b4f88so4103647b3a.2 for ; Mon, 18 May 2026 08:17:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1779117467; x=1779722267; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=y1xmf5x73w7x9YqKPrcPljDvbvvQKElp2j9AELMu+d4=; b=d1wTpCzRtfNOBj7XfRANCzMr78RNQDzBHreLV7JCoORJCUf2GUral2hvQtgxC/ZoOE 2QJMpf9I6DzVRrUPHF1t66KULBCnsndgre7+/mpl9J0ijYuRO1vOABK6GQldAxEizMJR xIeCTTPJhpcW3wltbrBnMfu8VPKzluCWeB3iHnz3se1yd6yXxTuXwaKPKjX4OfoU+/jd P0vrRZhGranGQJA2sCbmqMxqfVIdEKK2Vqb84bp56qbDgvaaY4o/4soij6oMzDYQM2h6 CPKkJpL/HLuDc9UFgOrzrA2ZMIBlyWeNb8FlDBd6QrYUVlwRIPu+9pz5Po+C61sisASe PBUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779117467; x=1779722267; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=y1xmf5x73w7x9YqKPrcPljDvbvvQKElp2j9AELMu+d4=; b=c0ecWIhBsCjrZW6bsVhMWjwdKefPMxZDir79XcGOBdaw2YaTpFhi7bw+OOIu/OCSoT fEH0d/o296+znouHl27b7AQySAM66dCwkiTZBQh79vr2yer0PBOPx2oj7ey/8o200Kp/ 2eDOxsVt1HShYq8FAg/zdpwS5p/lu47U1MZyxGpfxWxtfQP1vJ0NEhGEJ1rxcrDkh0T1 sigCVfhgTjNtZCHgiveK//obqetMc6ZYTbqhnz63UIZxxpG96V/nFvBDEgeWosgLbsT3 kq3VlqXU6Vjq8ebmhIRPbh14/mSmjVtHwxFai3P+VzaNVcQmBraYU0IFeHCI5I0yitqH FGvQ== X-Gm-Message-State: AOJu0Yz+e1hAKqWoScCikt6EZBqbR79aWj0TsAN+woVPHyf34vxV04FH eVVPwCDlZQ8hQGDZA7QoWwvZKq+CFVkoteLPO6N2tDw3InMD7qLOZPlvHkOPl4yBHYpT6Wug2AY egCAcKZKoZzizaQKGpK35Pc+/IlwYXzUHqgRuqMjkHwr4TVGACH0NjNtQ6dFOctkpTICuuvQJJR hGo61EKjUEcQLLEr2FyH5FYaFTwteqpm5j8/GQdZ/GeQsYfEYX X-Gm-Gg: Acq92OF/jCGhaWsoCy4mhTsFf+yecbUFBqA6Zv/JsGg6yFqY6CA64LqefUXw5NnFj+k mter8FnmG+4/XTdMbpnbtnmSbh9xGIkVM8XV8JngK/6vV+rBOi6H0XN0Sn4Re0Ujlc5mJ/DMcq8 RijzfaSNx6ayTGATtdJgDChBHXp2iq9Mzf6/mMqCjovos+D5YXWb7RZnbrgLBrNZT/NY+2L50ts 6eS/sv388A/NR5jkBaut7d+6DM6hUpFafNSQsYw29uJPxs53/QZ0KhyAu/Zp5jCX9GeUsj0zWZN oO+yhZe80BFCarVKnAFidcPMO0mWRYSrqm3a83paL1tImOh4XbmzG4jg+/IcrSrpZGmrnnn1Uog yfTqx5KF+nsRupJQksxYAp+06bnmapzdJ6V9GbYsA9KS0zdHhEwa3Laja0z3EG3c= X-Received: by 2002:a05:6a00:1743:b0:82f:3828:a009 with SMTP id d2e1a72fcca58-83f33aebda2mr16553748b3a.3.1779117467417; Mon, 18 May 2026 08:17:47 -0700 (PDT) X-Received: by 2002:a05:6a00:1743:b0:82f:3828:a009 with SMTP id d2e1a72fcca58-83f33aebda2mr16553698b3a.3.1779117466798; Mon, 18 May 2026 08:17:46 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.104.172]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-83f197815cesm18181153b3a.24.2026.05.18.08.17.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 May 2026 08:17:46 -0700 (PDT) From: Arun Menon To: linux-kernel@vger.kernel.org Cc: Jarkko Sakkinen , linux-integrity@vger.kernel.org, Jason Gunthorpe , Peter Huewe , Arun Menon Subject: [PATCH v3 4/6] tpm: tis_i2c: Use local 4KB buffer to limit memory usage Date: Mon, 18 May 2026 20:47:22 +0530 Message-ID: <20260518151724.730443-5-armenon@redhat.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260518151724.730443-1-armenon@redhat.com> References: <20260518151724.730443-1-armenon@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Arun Menon The global increase of TPM_BUFSIZE to 8KB is necessary to support Post-Quantum Cryptography (PQC) payloads. However, applying this increase to the tpm_tis_i2c driver is unnecessary and wasteful due to physical transport limitations as pointed out in [1] This commit introduces a local buffer limit that is used in the i2c driver. [1] https://sashiko.dev/#/patchset/20260324071803.324774-1-armenon%40redhat= .com?patch=3D8319 Signed-off-by: Arun Menon Reviewed-by: Jarkko Sakkinen --- drivers/char/tpm/tpm_tis_i2c.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/char/tpm/tpm_tis_i2c.c b/drivers/char/tpm/tpm_tis_i2c.c index 6cd07dd34507..db19d459ea1e 100644 --- a/drivers/char/tpm/tpm_tis_i2c.c +++ b/drivers/char/tpm/tpm_tis_i2c.c @@ -54,6 +54,8 @@ #define TPM_INTF_CAPABILITY_ZERO 0x0FFFF000 #define TPM_I2C_INTERFACE_CAPABILITY_ZERO 0x80000000 =20 +#define TPM_I2C_BUFSIZE 4096 + struct tpm_tis_i2c_phy { struct tpm_tis_data priv; struct i2c_client *i2c_client; @@ -232,7 +234,7 @@ static int tpm_tis_i2c_write_bytes(struct tpm_tis_data = *data, u32 addr, u16 len, int ret; u16 wrote =3D 0; =20 - if (len > TPM_BUFSIZE - 1) + if (len > TPM_I2C_BUFSIZE - 1) return -EIO; =20 phy->io_buf[0] =3D reg; @@ -339,7 +341,7 @@ static int tpm_tis_i2c_probe(struct i2c_client *dev) if (!phy) return -ENOMEM; =20 - phy->io_buf =3D devm_kzalloc(&dev->dev, TPM_BUFSIZE, GFP_KERNEL); + phy->io_buf =3D devm_kzalloc(&dev->dev, TPM_I2C_BUFSIZE, GFP_KERNEL); if (!phy->io_buf) return -ENOMEM; =20 --=20 2.54.0 From nobody Mon May 25 05:12:28 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2862837105A for ; Mon, 18 May 2026 15:17:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779117478; cv=none; b=MBLEicZTewJMYgn/xB5dg2INfN5wm4B8bBuI6v3zjUuLsubzbAafdtIkJ59ByzNAshYODnz4z46jQNmenplJh2+f4gGB+xWMx2ignbYOQWMQaS2AuKGqJeOyWZza0UGo2dfis6UngMb0OjFPJHfiTkkuort39+OVmJ7tufw6uPU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779117478; c=relaxed/simple; bh=7mc0+0o7LySHifhkyRGcSW/V20zw7yVVpjyNvNY0pyE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fs7wtLvc+/t0nc++tKR/kLGnNIfkam2Xec0SY8mZiXgupiWv/GHv1uLDsjWSA/BfwwDM47ByZDXQxinQDDeGSSr2Id7hqgWTvCEPkZ532G6Nsg9TtcKldzdzICtQ6iqgyeRmC0Q9YkLHRJwkyxWUGzqEJiF+n3oS46AqaUYVXxE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=Tb2Y8mO0; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=YAZ96yHO; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="Tb2Y8mO0"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="YAZ96yHO" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1779117473; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=j2TI0MzanH3PuDuy5c7bqP5Hk/GS1GvGyRmHJgGaHX0=; b=Tb2Y8mO0G1KsA2i6q3OPqGMC565Guud8drUn8IJuJIiv/UDkA2u1ETge6v9mUsWvUqLubA MvgM/6HnLRBLEAxlHanzjIrZojkxRtpk6QWK3u8B1YtjxRYFSpeK1vFp8Evsoqc2p5NyTs 1HzI2JOB3JckgKvuOzsoky/qfwbrS4s= Received: from mail-pf1-f198.google.com (mail-pf1-f198.google.com [209.85.210.198]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-279-_g9XqCy_Om2n5HIAoK4tOw-1; Mon, 18 May 2026 11:17:51 -0400 X-MC-Unique: _g9XqCy_Om2n5HIAoK4tOw-1 X-Mimecast-MFC-AGG-ID: _g9XqCy_Om2n5HIAoK4tOw_1779117471 Received: by mail-pf1-f198.google.com with SMTP id d2e1a72fcca58-8353df9bc7eso3154695b3a.2 for ; Mon, 18 May 2026 08:17:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1779117470; x=1779722270; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=j2TI0MzanH3PuDuy5c7bqP5Hk/GS1GvGyRmHJgGaHX0=; b=YAZ96yHOlV6AsOvzFdWXv5mGqAPutaXpu6xxjo5HM/PqfT2CUOWJYpj0KiZxjb5PWp GWKjLNe0Gt2ahr9t8KHAy5qEedS6vVmWyr5hTf8Po79f+iN7DfZtbQMfbsvQ0yFbrOP1 LrekFK9irf601K+6IaDEyy9mbjATLDQUO7ea6XdTEKHjHSiaxNWgTHQVqfJ4RMHWSG2t 7xl8gY4P2PJAmMhiOFH5WN/Ag5RUxHulsm0CCAiP3ULfDaYNuU/tBydrdPJo8ib35rC8 ojRPqAyS4ouRc7shgs3M4+aT2TwmJwuZruU1MVFeXz3cufoDDQ6ixI7yHGRspaiTmDfD g/YA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779117470; x=1779722270; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=j2TI0MzanH3PuDuy5c7bqP5Hk/GS1GvGyRmHJgGaHX0=; b=dhH6hoVLdnDrQpvp1NMaNtghA581UTS3UltvkbDlnlsS+6S9bw+e51DivHo6Wv7Ztt LatH1Cv2384/r2L5s3BeDUprm5WXNGhsrfDWkm0fkia3yrgQYvEg+ePDjWbIyg7AvRzj Tkegmz4iHIaFRZy+D+eBt2ZOhGxKG5nra5q/aa+9LOJI/K0NjAgINPVVvbzawl3f4i2p tDHIJklQtYy5EtVQRNbfrC/PsDnuyck+U2vBDOZXF4onqKUr34qK/euhY9PFWM7FLCce VyLFzs8fD4laKCzGxiO3lzqX+kwVtMfwMmdbwj2Teqj0besfmz9rfSN6ocBik/iXk+pu PVJA== X-Gm-Message-State: AOJu0YwPGG6ShLSIhfPmFzcrXKFkZpQRkW9nGk0X3Sw6aS41ee2imDtz auV4pXa7/PN3IKpfRZ4Pw5HqXzbCyOWNRTnCKApzMG/uwkwi/ESMfX6JryCv+yD9Tvhg61tscJ1 N1ntP96uYMflRqzXPhrdP06IRbm9sPazhqenHcJIN/F2+Loj445dk0gJ42DN4o4ij5ogrdocZw0 3GaoG7H7aaG9gE+l28d2bGf/EsNDVGuctO2s9ZCIkFElibJ2NR X-Gm-Gg: Acq92OFMBkh6+8Chhmw8v9wvD0EA3K11QfGZXFfqfmFToTUXgTtXDnpbWIJbN+ZSY2/ KTCOzCABIslRYNMBAI76gV5FixDzFUaFnnprhjaSZefGKte8cXFwgl5/o7COBteTL3lxKhIxEBC +Yfw1EUFNtopuO4/XUH1gmdcAvSf29A5fekvH54lEbw+Pyn90KKcpgRp3coJ6q9ekUJYXurLrAZ beOYMASaFdtp9pilFpeiyOSgZ6AUaW0qCvJP6gkcbT+YOdT7rQ0D3VieAjdiwPwmrQLLVwD8mvc W7SuJGk8IEgSNgtHdqo7v6k2sFhz/mxAKAbk2aHVZoA+BMkVmWSH+fzrz4FD8X42zF/qjTo07KB PcfhpTsyRDQC+XEzgTo8kOjjiBii7xJU3beQ4lGcnUUqWYAMLbptE9LvuWCdpa8U= X-Received: by 2002:a05:6a00:a221:b0:82f:7b98:e499 with SMTP id d2e1a72fcca58-83f33d9dcb4mr15964664b3a.31.1779117470556; Mon, 18 May 2026 08:17:50 -0700 (PDT) X-Received: by 2002:a05:6a00:a221:b0:82f:7b98:e499 with SMTP id d2e1a72fcca58-83f33d9dcb4mr15964624b3a.31.1779117470023; Mon, 18 May 2026 08:17:50 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.104.172]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-83f197815cesm18181153b3a.24.2026.05.18.08.17.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 May 2026 08:17:49 -0700 (PDT) From: Arun Menon To: linux-kernel@vger.kernel.org Cc: Jarkko Sakkinen , linux-integrity@vger.kernel.org, Jason Gunthorpe , Peter Huewe , Arun Menon Subject: [PATCH v3 5/6] tpm: Increase TPM_BUFSIZE to 8kB for chunking support Date: Mon, 18 May 2026 20:47:23 +0530 Message-ID: <20260518151724.730443-6-armenon@redhat.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260518151724.730443-1-armenon@redhat.com> References: <20260518151724.730443-1-armenon@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Arun Menon The size of the command is checked against TPM_BUFSIZE early on before even sending it to the backend. We therefore need to increase the TPM_BUFSIZE to allow support for larger commands. For now, 8KB seems sufficient for ML-KEM and ML-DSA algorithms and it is also order-1 safe. Signed-off-by: Arun Menon --- include/linux/tpm.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/linux/tpm.h b/include/linux/tpm.h index 01216156a1ec..af2bfac45fe0 100644 --- a/include/linux/tpm.h +++ b/include/linux/tpm.h @@ -26,7 +26,7 @@ #include =20 #define TPM_DIGEST_SIZE 20 /* Max TPM v1.2 PCR size */ -#define TPM_BUFSIZE 4096 +#define TPM_BUFSIZE 8192 =20 /* * SHA-512 is, as of today, the largest digest in the TCG algorithm reposi= tory. --=20 2.54.0 From nobody Mon May 25 05:12:28 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E56F536DA14 for ; Mon, 18 May 2026 15:17:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779117484; cv=none; b=C+4cBZuh3+IHwbbM05AynnsbMfL336bZJL6BRXDPLcgmY/e+CglkPm/39a64pmSeqxEsn6PY4LoPmKcToYaPT8KMfnI12llaO+NXumVSoFvHx7y8hTGBC2X66OWGdsDfCANXQa5MohxJzzTCq9Q0xbJeTFAaPKl+7y21t/R/A7c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779117484; c=relaxed/simple; bh=GUOwjHTHp7F+veAyU1RHSAr7O3jNZOc2wq937tHgqSs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=TJOJ2Udil1T9Q5rv6uXuRUWs+2YRujnqgLz3GiQDIS1yW4uzS7ddjpUoHWEO23yQhPEHTU5xHLp1+DhXwxQvtVfl69HchnZLJjfPrr2p3YULVkoyLk0xcDWK2YqwnrW/wKKGGMF5JcjBOWAymeF8j2P1I+dnSSiISToroAW47Ck= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=hHiaVY8j; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=KZleIkGM; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="hHiaVY8j"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="KZleIkGM" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1779117477; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=pe/iolypET0Kouxm0CjpcIMCpG/CgODFZgpYFH+mQ+E=; b=hHiaVY8jWAyES52eM4i1ZDzDlgmipQtrOkF55vo5w5/eoGvcPc/4G45xXukMpV7Vz9fWoz Iy1wy3Bal8Lc967ELWG6CZyiv2I9IRxSV3OLHfa+SxUlULv4y1o6LrCuqbFEPBi8jOjnmA zIrdYwU76OtpElMttKXyGMxqv389TyA= Received: from mail-pf1-f198.google.com (mail-pf1-f198.google.com [209.85.210.198]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-618-IcO0U3boNG2qDdJf-0Jx5A-1; Mon, 18 May 2026 11:17:55 -0400 X-MC-Unique: IcO0U3boNG2qDdJf-0Jx5A-1 X-Mimecast-MFC-AGG-ID: IcO0U3boNG2qDdJf-0Jx5A_1779117475 Received: by mail-pf1-f198.google.com with SMTP id d2e1a72fcca58-836d0184333so3348427b3a.0 for ; Mon, 18 May 2026 08:17:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1779117475; x=1779722275; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=pe/iolypET0Kouxm0CjpcIMCpG/CgODFZgpYFH+mQ+E=; b=KZleIkGMFNWK4imHUQ3rJ+hlOxxxggfmMuVd+fE9tsOnEOGOhzZZsdOfFxEmD/dwAJ KLH6GC9i8TpXeG1+6h2mK4Vxqh9xES3JEeyOb5Bc1KhRnK9d26TTL77UPHHVjCN0XNiG 47fsbrKov110URKY7R7xzb1lUx4zlXO00xT8jeWbfL/aEED8CT3ZKW/RvGzMX0u3bh5o gqmmfN3N50JsTrsGDPnyrv5CWPVdiVxRuRq6X5nee+C5pES37FFZR1oCLpgdORzARkCo 1OdIy2cT8do6lTFQTNtvE/Fssv2nCyZATE9wEkSLviDFWVFxyNFRXxYMne6PohVX3df/ 8GXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779117475; x=1779722275; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=pe/iolypET0Kouxm0CjpcIMCpG/CgODFZgpYFH+mQ+E=; b=eCYgJidDfYP37E50J49wwcVtr+UOkkExnzNwMW1ai3giwVs/tAuLaAWFEjXbPaKbbx MDViUALT5HQVPuGGt3fXFLaRAGxJGLRfN0XBa1v/HAXT83jOWGESzQS5Gb1l5A+mcTd0 FKGU8Cq/mTb2/KYYkXVJz5fymQwMSAksS7ca6R12B48lFYNt6mAInc6V7CY1OtjwFxSv nwiJTfoKL62Q5MY0wTYhJNedH5pHUKM4uHCxbSpE4I2sVvnTdf52zf3c+XoDmvyjfUMp mcrvp0ePZOffunBhL9kBmDtUAtwMYEHoYnt2MrZqxB4ti8hAr5MhswnHMozP6pJ/1FO1 vUZQ== X-Gm-Message-State: AOJu0Ywbc471jIMT7qVMUYiGOo2Gfr4dkIzMo16H8eRwBDpMGw4swmtz 0z2qQPs7d2lVRp56lMgy6jr4IyUdLB4uMr5uvT+Poogk8EIL68ZuatMILyPsATIi4GucQDV/wcp G6+D5fGH5yuwM/uIgKT6KT+QljDqo7vzDu8vWrdlyHtbaMdyA/N7VgjmpxJjtOMaMtyHHk+dIMs lnLZ4CB4EtN3hYAS7Km4P+l62bpl3tY0Khj9UFcSNf+jIdH1QH X-Gm-Gg: Acq92OHpXIfSjo8CGc744dtDHqlf1jhUVQTnXUasSevk8sHA/URk8aj7iHCiTf3HrJL /zHaN1i51rAEibCGWzxRRRZ9PsrQsui648uUacskyE4kRAa2E2mws3LVCVfdzAnTXNtcQo5T6aT xDuDUjhQ/rZP8gZPqxeFIDWQStqf2JJRBjJk+MQb4bEAUnSyfNXYSfhKqCn32FKMsfdnvBeTo80 bzBUkEY4iVehEeJjAF+IpRmyRVP5t6Z1o1kwr1S5nMYzbDwvcP68l/5m++Fg3NX6PWBvdbRBnpL 1IKRxP98KcCejrhElrcoQak8bsJkP+yXEYFBIOGAYJuOkH0YBevEQa7uWQekQrF/R49rhgea7jV QXwvHrEE/cvTZduhYw0XXYxnts40UpBjIn9XqBODPvcVeFMuCoXi0i0Oe+3+NoQ4= X-Received: by 2002:a05:6a00:a10:b0:83e:c8f8:cec7 with SMTP id d2e1a72fcca58-83f33dddb8cmr16057938b3a.35.1779117474490; Mon, 18 May 2026 08:17:54 -0700 (PDT) X-Received: by 2002:a05:6a00:a10:b0:83e:c8f8:cec7 with SMTP id d2e1a72fcca58-83f33dddb8cmr16057884b3a.35.1779117473762; Mon, 18 May 2026 08:17:53 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.104.172]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-83f197815cesm18181153b3a.24.2026.05.18.08.17.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 May 2026 08:17:52 -0700 (PDT) From: Arun Menon To: linux-kernel@vger.kernel.org Cc: Jarkko Sakkinen , linux-integrity@vger.kernel.org, Jason Gunthorpe , Peter Huewe , Arun Menon Subject: [PATCH v3 6/6] tpm_crb: Implement command and response chunking logic Date: Mon, 18 May 2026 20:47:24 +0530 Message-ID: <20260518151724.730443-7-armenon@redhat.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260518151724.730443-1-armenon@redhat.com> References: <20260518151724.730443-1-armenon@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Arun Menon With the introduction of support for Post Quantum Cryptography algorithms in TPM, the commands and responses will grow in size. Some TPMs have a physical hardware memory window (MMIO) that is smaller than the commands we need to send. Therefore this commit implements the core logic of sending/receiving data in chunks. Instead of sending the whole command at once, the driver now sends it in small chunks. After each chunk, it signals the TPM using a nextChunk signal, and waits for the TPM to consume the data. Once the final piece is delivered, the driver signals the TPM to begin execution by toggling the start invoke bit. We use the same logic in reverse to read large responses from the TPM. This allows the driver to handle large payloads even when the hardware interface has limited memory. This kernel-side support corresponds to the backend implementation in QEMU [1]. QEMU reassembles the chunks before passing them to the TPM emulator. [1] https://lore.kernel.org/qemu-devel/20260506075813.120781-1-armenon@redh= at.com/ Signed-off-by: Arun Menon --- drivers/char/tpm/tpm_crb.c | 215 +++++++++++++++++++++++++++++-------- 1 file changed, 173 insertions(+), 42 deletions(-) diff --git a/drivers/char/tpm/tpm_crb.c b/drivers/char/tpm/tpm_crb.c index 31f530744e90..8b2aaa109fc4 100644 --- a/drivers/char/tpm/tpm_crb.c +++ b/drivers/char/tpm/tpm_crb.c @@ -105,11 +105,13 @@ struct crb_priv { u8 __iomem *cmd; u8 __iomem *rsp; u32 cmd_size; + u32 rsp_size; u32 smc_func_id; u32 __iomem *pluton_start_addr; u32 __iomem *pluton_reply_addr; u8 ffa_flags; u8 ffa_attributes; + u32 intf_id; }; =20 struct tpm2_crb_smc { @@ -369,38 +371,6 @@ static u8 crb_status(struct tpm_chip *chip) return sts; } =20 -static int crb_recv(struct tpm_chip *chip, u8 *buf, size_t count) -{ - struct crb_priv *priv =3D dev_get_drvdata(&chip->dev); - unsigned int expected; - - /* A sanity check that the upper layer wants to get at least the header - * as that is the minimum size for any TPM response. - */ - if (count < TPM_HEADER_SIZE) - return -EIO; - - /* If this bit is set, according to the spec, the TPM is in - * unrecoverable condition. - */ - if (ioread32(&priv->regs_t->ctrl_sts) & CRB_CTRL_STS_ERROR) - return -EIO; - - /* Read the first 8 bytes in order to get the length of the response. - * We read exactly a quad word in order to make sure that the remaining - * reads will be aligned. - */ - memcpy_fromio(buf, priv->rsp, 8); - - expected =3D be32_to_cpup((__be32 *)&buf[2]); - if (expected > count || expected < TPM_HEADER_SIZE) - return -EIO; - - memcpy_fromio(&buf[8], &priv->rsp[8], expected - 8); - - return expected; -} - static int crb_do_acpi_start(struct tpm_chip *chip) { union acpi_object *obj; @@ -472,17 +442,71 @@ static int tpm_crb_start(struct tpm_chip *chip, u32 s= tart_cmd) return rc; } =20 +static int tpm_crb_send_no_chunks(struct tpm_chip *chip, u8 *buf, size_t l= en) +{ + struct crb_priv *priv =3D dev_get_drvdata(&chip->dev); + int rc; + + memcpy_toio(priv->cmd, buf, len); + + /* Make sure that cmd is populated before issuing start. */ + wmb(); + + rc =3D tpm_crb_start(chip, CRB_START_INVOKE); + if (rc) + return rc; + + return crb_try_pluton_doorbell(priv, false); +} + +static int tpm_crb_send_chunks(struct tpm_chip *chip, u8 *buf, size_t len) +{ + struct crb_priv *priv =3D dev_get_drvdata(&chip->dev); + size_t offset =3D 0; + size_t chunk_size; + int rc; + + while (offset < len) { + chunk_size =3D min_t(size_t, len - offset, priv->cmd_size); + + if (chunk_size =3D=3D 0) + break; + + memcpy_toio(priv->cmd, buf + offset, chunk_size); + offset +=3D chunk_size; + + /* Make sure that cmd is populated before issuing start. */ + wmb(); + if (offset < len) { + rc =3D tpm_crb_start(chip, CRB_START_NEXT_CHUNK); + if (rc) + return rc; + if (!crb_wait_for_reg_32(&priv->regs_t->ctrl_start, + CRB_START_NEXT_CHUNK, 0, + TPM2_TIMEOUT_C)) { + dev_err(&chip->dev, + "Timeout waiting for backend to consume chunk\n"); + return -ETIME; + } + } else { + rc =3D tpm_crb_start(chip, CRB_START_INVOKE); + if (rc) + return rc; + } + } + + return crb_try_pluton_doorbell(priv, false); +} static int crb_send(struct tpm_chip *chip, u8 *buf, size_t bufsiz, size_t = len) { struct crb_priv *priv =3D dev_get_drvdata(&chip->dev); - int rc =3D 0; =20 /* Zero the cancel register so that the next command will not get * canceled. */ iowrite32(0, &priv->regs_t->ctrl_cancel); =20 - if (len > priv->cmd_size) { + if (len > priv->cmd_size && !(priv->intf_id & CRB_INTF_CAP_CRB_CHUNK)) { dev_err(&chip->dev, "invalid command count value %zd %d\n", len, priv->cmd_size); return -E2BIG; @@ -492,16 +516,115 @@ static int crb_send(struct tpm_chip *chip, u8 *buf, = size_t bufsiz, size_t len) if (priv->sm =3D=3D ACPI_TPM2_COMMAND_BUFFER_WITH_PLUTON) __crb_cmd_ready(&chip->dev, priv, chip->locality); =20 - memcpy_toio(priv->cmd, buf, len); + if (len <=3D priv->cmd_size) + return tpm_crb_send_no_chunks(chip, buf, len); =20 - /* Make sure that cmd is populated before issuing start. */ - wmb(); + return tpm_crb_send_chunks(chip, buf, len); +} =20 - rc =3D tpm_crb_start(chip, CRB_START_INVOKE); - if (rc) - return rc; +static int tpm_crb_recv_no_chunks(struct tpm_chip *chip, u8 *buf, size_t c= ount) +{ + struct crb_priv *priv =3D dev_get_drvdata(&chip->dev); + unsigned int expected; =20 - return crb_try_pluton_doorbell(priv, false); + /* Read the first 8 bytes in order to get the length of the response. + * We read exactly a quad word in order to make sure that the remaining + * reads will be aligned. + */ + memcpy_fromio(buf, priv->rsp, 8); + + expected =3D be32_to_cpup((__be32 *)&buf[2]); + if (expected > count || expected < TPM_HEADER_SIZE) + return -EIO; + + memcpy_fromio(&buf[8], &priv->rsp[8], expected - 8); + + return expected; +} + +static int tpm_crb_recv_chunks(struct tpm_chip *chip, u8 *buf, size_t coun= t, + unsigned int expected) +{ + struct crb_priv *priv =3D dev_get_drvdata(&chip->dev); + size_t offset =3D 0; + size_t chunk_size; + size_t first_read; + int rc; + + if (expected > count) + return -EIO; + /* + * Set chunk_size by comparing the size of the buffer that the upper + * layer has allocated (count) to the hardware tpm limit (priv->rsp_size). + * This is to prevent buffer overflow while writing to buf. + */ + chunk_size =3D min_t(size_t, count, priv->rsp_size); + if (chunk_size < 8) + return -EIO; + + memcpy_fromio(buf, priv->rsp, 8); + + /* + * Compare the actual size of the response we found in + * the header to the chunk size + */ + first_read =3D min_t(size_t, expected, chunk_size); + + memcpy_fromio(&buf[8], &priv->rsp[8], first_read - 8); + offset =3D first_read; + + while (offset < expected) { + rc =3D tpm_crb_start(chip, CRB_START_NEXT_CHUNK); + if (rc) + return rc; + + if (!crb_wait_for_reg_32(&priv->regs_t->ctrl_start, + CRB_START_NEXT_CHUNK, 0, + TPM2_TIMEOUT_C)) { + dev_err(&chip->dev, "Timeout waiting for backend response\n"); + return -ETIME; + } + + chunk_size =3D min_t(size_t, expected - offset, priv->rsp_size); + memcpy_fromio(buf + offset, priv->rsp, chunk_size); + offset +=3D chunk_size; + } + + return expected; +} + +static int crb_recv(struct tpm_chip *chip, u8 *buf, size_t count) +{ + struct crb_priv *priv =3D dev_get_drvdata(&chip->dev); + unsigned int expected; + + /* A sanity check that the upper layer wants to get at least the header + * as that is the minimum size for any TPM response. + */ + if (count < TPM_HEADER_SIZE) + return -EIO; + + /* If this bit is set, according to the spec, the TPM is in + * unrecoverable condition. + */ + if (ioread32(&priv->regs_t->ctrl_sts) & CRB_CTRL_STS_ERROR) + return -EIO; + + /* + * Peek at the first 8 bytes to determine the response size + */ + expected =3D be32_to_cpup((__be32 *)&priv->rsp[2]); + + if (expected <=3D priv->rsp_size) + return tpm_crb_recv_no_chunks(chip, buf, count); + + if (!(priv->intf_id & CRB_INTF_CAP_CRB_CHUNK)) { + dev_err(&chip->dev, + "Response larger than MMIO and chunking not supported\n"); + return -EIO; + } + + return tpm_crb_recv_chunks(chip, buf, count, expected); } =20 static void crb_cancel(struct tpm_chip *chip) @@ -728,6 +851,12 @@ static int crb_map_io(struct device *dev, struct crb_p= riv *priv, goto out; } =20 + if (priv->regs_h) + priv->intf_id =3D ioread32((u32 __iomem *)&priv->regs_h->intf_id); + + if (priv->intf_id & CRB_INTF_CAP_CRB_CHUNK) + dev_info(dev, "CRB Chunking is supported by backend\n"); + memcpy_fromio(&__rsp_pa, &priv->regs_t->ctrl_rsp_pa, 8); rsp_pa =3D le64_to_cpu(__rsp_pa); rsp_size =3D ioread32(&priv->regs_t->ctrl_rsp_size); @@ -765,8 +894,10 @@ static int crb_map_io(struct device *dev, struct crb_p= riv *priv, priv->rsp =3D priv->cmd; =20 out: - if (!ret) + if (!ret) { priv->cmd_size =3D cmd_size; + priv->rsp_size =3D rsp_size; + } =20 __crb_go_idle(dev, priv, 0); =20 --=20 2.54.0