* Re: ACPI errors from TPM PPI
[not found] <CAMfhd9XWfp420M9wF-ACya9hbQGUSkneRB6sry9=nj1KtB_ygw@mail.gmail.com>
@ 2013-07-05 1:07 ` Rafael J. Wysocki
2013-07-05 14:03 ` Adam Langley
0 siblings, 1 reply; 5+ messages in thread
From: Rafael J. Wysocki @ 2013-07-05 1:07 UTC (permalink / raw)
To: Adam Langley; +Cc: xiaoyan.zhang, Bob Moore, Lv Zheng, ACPI Devel Maling List
[More CCs, LKML dropped]
On Thursday, July 04, 2013 08:41:00 PM Adam Langley wrote:
> All TPM PPI calls appear to result in ACPI errors for me:
>
> # cat /sys/devices/pnp0/00:09/ppi/version
> cat: version: Cannot allocate memory
>
> (All the nodes in that directory have the same result for read and write.)
>
> This appears to be coming from acpi_evaluate_object_typed in
> http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/char/tpm/tpm_ppi.c#n75,
> so I added a printk to get the actual value of |status| when it fails
> and it's 5 (aka AE_NOT_FOUND I believe).
>
> My knowledge of ACPI is almost nil, but here's some disassembly from
> the DSDT table (I don't know if that's the right one), where it
> doesn't seem impossible that it could return the string "1.2".
>
> Scope (_SB.PCI0.LPCB.TPM)
> {
> OperationRegion (TSMI, SystemIO, SMIT, 0x02)
> Field (TSMI, ByteAcc, NoLock, Preserve)
> {
> INQ, 8,
> DAT, 8
> }
>
> Method (_DSM, 4, NotSerialized) // _DSM: Device-Specific Method
> {
> If (LEqual (Arg0, Buffer (0x10)
> {
> /* 0000 */ 0xA6, 0xFA, 0xDD, 0x3D, 0x1B, 0x36, 0xB4, 0x4E,
> /* 0008 */ 0xA4, 0x24, 0x8D, 0x10, 0x08, 0x9D, 0x16, 0x53
> }))
> {
> Name (_T_0, Zero) // _T_x: Emitted by ASL Compiler
> Store (ToInteger (Arg2), _T_0)
> If (LEqual (_T_0, Zero))
> {
> Return (Buffer (0x02)
> {
> 0xFF, 0x01
> })
> }
> Else
> {
> If (LEqual (_T_0, One))
> {
> Return ("1.2")
> }
> Else
> {
> If (LEqual (_T_0, 0x02))
> {
> ToInteger (DerefOf (Index (Arg3, Zero)), TMF2)
> Store (0x12, TMF1)
> Store (TMF1, DAT)
> Store (OFST, INQ)
> If (LEqual (DAT, 0xFF))
> {
> Return (0x02)
> }
> ...
>
> # tpm_version
> TPM 1.2 Version Info:
> Chip Version: 1.2.3.69
> Spec Level: 2
> Errata Revision: 3
> TPM Vendor ID: WEC
> TPM Version: 01010000
> Manufacturer Info: 57454300
>
> The motherboard is an Intel DQ77KB.
>
> Any hints would be very helpful because I'm stuck at this point.
>
> Here's how I got here:
>
> 1) I want to store 32 bytes of data in a such a way that they can be
> safely erased in the future. With log-structured filesystems and SSDs,
> that seems quite hard these days.
>
> 2) Using NVRAM looks like it might be fruitful and the TPM has some
> designed to be written to, as opposed to the RTC NVRAM, which seems
> dangerous.
>
> 3) The TPM appears to want a physical presence signal before it'll let
> me create a new NVRAM area:
>
> # tpm_nvdefine -s 32 -i 0x10000002 -p WRITEALL
> Tspi_NV_DefineSpace failed: 0x0000002d - layer=tpm, code=002d (45),
> Bad physical presence value
>
> # sudo tpm_setpresence -z
> Physical Presence Status:
> Command Enable: true
> Hardware Enable: false
> Lifetime Lock: true
> Physical Presence: false
> Lock: true
>
> # sudo tpm_setpresence -z -a
> Tspi_TPM_SetStatus failed: 0x00002006 - layer=tcs, code=0006 (6), Not
> implemented
>
> There's nothing that I can find in the BIOS to assert presence but I'm
> led to understand the the PPI interface allows one to request that the
> BIOS assert physical presence:
>
> http://www.trustedcomputinggroup.org/resources/tcg_physical_presence_interface_specification
>
> 4) So I'm trying to get the ppi driver to do something.
>
>
> Cheers
>
> AGL
>
> --
> Adam Langley agl@imperialviolet.org http://www.imperialviolet.org
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
--
I speak only for myself.
Rafael J. Wysocki, Intel Open Source Technology Center.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: ACPI errors from TPM PPI
2013-07-05 1:07 ` ACPI errors from TPM PPI Rafael J. Wysocki
@ 2013-07-05 14:03 ` Adam Langley
2013-07-06 11:10 ` Mika Westerberg
0 siblings, 1 reply; 5+ messages in thread
From: Adam Langley @ 2013-07-05 14:03 UTC (permalink / raw)
To: Rafael J. Wysocki
Cc: xiaoyan.zhang, Bob Moore, Lv Zheng, ACPI Devel Maling List
On Thu, Jul 4, 2013 at 9:07 PM, Rafael J. Wysocki <rjw@rjwysocki.net> wrote:
>> This appears to be coming from acpi_evaluate_object_typed in
>> http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/char/tpm/tpm_ppi.c#n75,
>> so I added a printk to get the actual value of |status| when it fails
>> and it's 5 (aka AE_NOT_FOUND I believe).
In hindsight, the error was somewhat obvious. The driver is locating
the TPM object in the ACPI tables by walking the tables with a
callback [1]. The callback is using strstr to look for the substring
"TPM" in the handle of the object and returns the first that it finds.
On my system, if I alter the callback to print each match and not
abort the walk I find three values:
\_SB_.PCI0.TPMX
\_SB_.PCI0.LPCB.TPM_
\_SB_.PCI0.ITPM
Of these, the second is the right one.
(I note that the callback also appears to have a memory leak in the
case that the string doesn't contain "TPM".)
I'm sure that the strstr() worked on the computer that it was
developed on, but it's rather fragile. I can get it working for me by
using "LPCB.TPM" as the argument to strstr(), but who's to say that
doesn't break someone else?
So I would submit a patch if I was more confident that I was actually
improving matters by doing so!
[1] http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/char/tpm/tpm_ppi.c#n27
Cheers
AGL
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: ACPI errors from TPM PPI
2013-07-05 14:03 ` Adam Langley
@ 2013-07-06 11:10 ` Mika Westerberg
2013-07-08 16:13 ` Matthew Garrett
0 siblings, 1 reply; 5+ messages in thread
From: Mika Westerberg @ 2013-07-06 11:10 UTC (permalink / raw)
To: Adam Langley
Cc: Rafael J. Wysocki, xiaoyan.zhang, Bob Moore, Lv Zheng,
ACPI Devel Maling List
On Fri, Jul 05, 2013 at 10:03:10AM -0400, Adam Langley wrote:
> On Thu, Jul 4, 2013 at 9:07 PM, Rafael J. Wysocki <rjw@rjwysocki.net> wrote:
> >> This appears to be coming from acpi_evaluate_object_typed in
> >> http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/char/tpm/tpm_ppi.c#n75,
> >> so I added a printk to get the actual value of |status| when it fails
> >> and it's 5 (aka AE_NOT_FOUND I believe).
>
> In hindsight, the error was somewhat obvious. The driver is locating
> the TPM object in the ACPI tables by walking the tables with a
> callback [1]. The callback is using strstr to look for the substring
> "TPM" in the handle of the object and returns the first that it finds.
> On my system, if I alter the callback to print each match and not
> abort the walk I find three values:
>
> \_SB_.PCI0.TPMX
> \_SB_.PCI0.LPCB.TPM_
> \_SB_.PCI0.ITPM
>
> Of these, the second is the right one.
>
> (I note that the callback also appears to have a memory leak in the
> case that the string doesn't contain "TPM".)
>
> I'm sure that the strstr() worked on the computer that it was
> developed on, but it's rather fragile. I can get it working for me by
> using "LPCB.TPM" as the argument to strstr(), but who's to say that
> doesn't break someone else?
I wonder whether there is a real PNP Id associated with that device?
I have one sample ASL code that looks like:
Device (\_SB.PCI0.LPCB.TPM)
{
Name (_HID, EisaId ("PNP0C31"))
Name (_CID, EisaId ("PNP0C31"))
Name (_STR, Unicode ("TPM 1.2 Device"))
Name (_CRS, ResourceTemplate ()
{
Memory32Fixed (ReadOnly,
0xFED40000, // Address Base
0x00005000, // Address Length
)
})
Does your TPM_ device look similar?
That PNP0C31 can be matched in the TPM driver instead of trusting some
random device names that might change from vendor to vendor.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: ACPI errors from TPM PPI
2013-07-06 11:10 ` Mika Westerberg
@ 2013-07-08 16:13 ` Matthew Garrett
2013-07-09 8:54 ` Mika Westerberg
0 siblings, 1 reply; 5+ messages in thread
From: Matthew Garrett @ 2013-07-08 16:13 UTC (permalink / raw)
To: Mika Westerberg
Cc: Adam Langley, Rafael J. Wysocki, xiaoyan.zhang, Bob Moore,
Lv Zheng, ACPI Devel Maling List
On Sat, Jul 06, 2013 at 02:10:25PM +0300, Mika Westerberg wrote:
> I wonder whether there is a real PNP Id associated with that device?
You'd really hope so - it's certainly completely bogus to rely on the
device name. On the other hand, this is basically re-probing for a
device that the kernel already knows about. Just exporting the device
from tpm_tis would make more sense.
--
Matthew Garrett | mjg59@srcf.ucam.org
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: ACPI errors from TPM PPI
2013-07-08 16:13 ` Matthew Garrett
@ 2013-07-09 8:54 ` Mika Westerberg
0 siblings, 0 replies; 5+ messages in thread
From: Mika Westerberg @ 2013-07-09 8:54 UTC (permalink / raw)
To: Matthew Garrett
Cc: Adam Langley, Rafael J. Wysocki, xiaoyan.zhang, Bob Moore,
Lv Zheng, ACPI Devel Maling List
On Mon, Jul 08, 2013 at 05:13:01PM +0100, Matthew Garrett wrote:
> On Sat, Jul 06, 2013 at 02:10:25PM +0300, Mika Westerberg wrote:
>
> > I wonder whether there is a real PNP Id associated with that device?
>
> You'd really hope so - it's certainly completely bogus to rely on the
> device name. On the other hand, this is basically re-probing for a
> device that the kernel already knows about. Just exporting the device
> from tpm_tis would make more sense.
Indeed, you are right. I didn't even check whether there already exists a
driver for that.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2013-07-09 8:49 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <CAMfhd9XWfp420M9wF-ACya9hbQGUSkneRB6sry9=nj1KtB_ygw@mail.gmail.com>
2013-07-05 1:07 ` ACPI errors from TPM PPI Rafael J. Wysocki
2013-07-05 14:03 ` Adam Langley
2013-07-06 11:10 ` Mika Westerberg
2013-07-08 16:13 ` Matthew Garrett
2013-07-09 8:54 ` Mika Westerberg
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox