xref: /titanic_41/usr/src/uts/common/io/tpm/tpm_tis.h (revision 8d26100c1d185652ac4e12e1b6c2337446ad0746)
147e946e7SWyllys Ingersoll /*
247e946e7SWyllys Ingersoll  * CDDL HEADER START
347e946e7SWyllys Ingersoll  *
447e946e7SWyllys Ingersoll  * The contents of this file are subject to the terms of the
547e946e7SWyllys Ingersoll  * Common Development and Distribution License (the "License").
647e946e7SWyllys Ingersoll  * You may not use this file except in compliance with the License.
747e946e7SWyllys Ingersoll  *
847e946e7SWyllys Ingersoll  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
947e946e7SWyllys Ingersoll  * or http://www.opensolaris.org/os/licensing.
1047e946e7SWyllys Ingersoll  * See the License for the specific language governing permissions
1147e946e7SWyllys Ingersoll  * and limitations under the License.
1247e946e7SWyllys Ingersoll  *
1347e946e7SWyllys Ingersoll  * When distributing Covered Code, include this CDDL HEADER in each
1447e946e7SWyllys Ingersoll  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1547e946e7SWyllys Ingersoll  * If applicable, add the following below this CDDL HEADER, with the
1647e946e7SWyllys Ingersoll  * fields enclosed by brackets "[]" replaced with your own identifying
1747e946e7SWyllys Ingersoll  * information: Portions Copyright [yyyy] [name of copyright owner]
1847e946e7SWyllys Ingersoll  *
1947e946e7SWyllys Ingersoll  * CDDL HEADER END
2047e946e7SWyllys Ingersoll  */
2147e946e7SWyllys Ingersoll 
2247e946e7SWyllys Ingersoll /*
2347e946e7SWyllys Ingersoll  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
2447e946e7SWyllys Ingersoll  * Use is subject to license terms.
2547e946e7SWyllys Ingersoll  */
2647e946e7SWyllys Ingersoll #ifndef	_TPM_TIS_H
2747e946e7SWyllys Ingersoll #define	_TPM_TIS_H
2847e946e7SWyllys Ingersoll 
2947e946e7SWyllys Ingersoll /*
3047e946e7SWyllys Ingersoll  * TPM Interface Specification Defaults
3147e946e7SWyllys Ingersoll  * ICH7 spec (pg 253) says this is the base
3247e946e7SWyllys Ingersoll  * TPM on LPC: FED40000-FED40FFF But this is only locality 0
3347e946e7SWyllys Ingersoll  * It has to include 4 localities so the real range is FED40000-FED44FFF
3447e946e7SWyllys Ingersoll  * (TIS 1.2 pg 27)
3547e946e7SWyllys Ingersoll  */
3647e946e7SWyllys Ingersoll #define	TIS_MEM_BASE	0xFED40000
3747e946e7SWyllys Ingersoll #define	TIS_MEM_LEN    	0x5000
3847e946e7SWyllys Ingersoll 
39*8d26100cSWyllys Ingersoll #define	TPM_LOCALITY_OFFSET(x)	((x) << 12)
40*8d26100cSWyllys Ingersoll 
4147e946e7SWyllys Ingersoll /* Used to gain ownership */
42*8d26100cSWyllys Ingersoll #define	TPM_ACCESS		0x0000
4347e946e7SWyllys Ingersoll /* Enable Interrupts */
44*8d26100cSWyllys Ingersoll #define	TPM_INT_ENABLE		0x0008
4547e946e7SWyllys Ingersoll /* Interrupt vector (SIRQ values) */
46*8d26100cSWyllys Ingersoll #define	TPM_INT_VECTOR		0x000C
4747e946e7SWyllys Ingersoll /* What caused interrupt */
48*8d26100cSWyllys Ingersoll #define	TPM_INT_STATUS		0x0010
4947e946e7SWyllys Ingersoll /* Supported Interrupts */
50*8d26100cSWyllys Ingersoll #define	TPM_INTF_CAP		0x0014
5147e946e7SWyllys Ingersoll /* Status Register */
52*8d26100cSWyllys Ingersoll #define	TPM_STS			0x0018
5347e946e7SWyllys Ingersoll /* I/O FIFO */
54*8d26100cSWyllys Ingersoll #define	TPM_DATA_FIFO   	0x0024
5547e946e7SWyllys Ingersoll /* Vendor and Device ID */
56*8d26100cSWyllys Ingersoll #define	TPM_DID_VID		0x0F00
5747e946e7SWyllys Ingersoll /* Revision ID */
58*8d26100cSWyllys Ingersoll #define	TPM_RID			0x0F04
5947e946e7SWyllys Ingersoll 
6047e946e7SWyllys Ingersoll /* The number of all ordinals */
6147e946e7SWyllys Ingersoll #define	TSC_ORDINAL_MAX		12
6247e946e7SWyllys Ingersoll #define	TPM_ORDINAL_MAX		243
6347e946e7SWyllys Ingersoll #define	TSC_ORDINAL_MASK	0x40000000
6447e946e7SWyllys Ingersoll 
6547e946e7SWyllys Ingersoll /* Timeouts (in milliseconds) (TIS v1.2 pg 43) */
6647e946e7SWyllys Ingersoll #define	TPM_REQUEST_TIMEOUT	9000000		/* 9 seconds...too long? */
6747e946e7SWyllys Ingersoll #define	TPM_POLLING_TIMEOUT	10000		/* 10 ms for polling */
6847e946e7SWyllys Ingersoll 
6947e946e7SWyllys Ingersoll enum tis_timeouts {
7047e946e7SWyllys Ingersoll 	TIS_TIMEOUT_A = 750000,
7147e946e7SWyllys Ingersoll 	TIS_TIMEOUT_B = 2000000,
7247e946e7SWyllys Ingersoll 	TIS_TIMEOUT_C = 750000,
7347e946e7SWyllys Ingersoll 	TIS_TIMEOUT_D = 750000
7447e946e7SWyllys Ingersoll };
7547e946e7SWyllys Ingersoll 
7647e946e7SWyllys Ingersoll #define	TPM_DEFAULT_DURATION	750000
7747e946e7SWyllys Ingersoll 
7847e946e7SWyllys Ingersoll /* Possible TPM_ACCESS register bit values (TIS 1.2 pg.47-49) */
7947e946e7SWyllys Ingersoll enum tis_access {
8047e946e7SWyllys Ingersoll 	TPM_ACCESS_VALID = 0x80,
8147e946e7SWyllys Ingersoll 	TPM_ACCESS_ACTIVE_LOCALITY = 0x20,
8247e946e7SWyllys Ingersoll 	TPM_ACCESS_REQUEST_PENDING = 0x04,
8347e946e7SWyllys Ingersoll 	TPM_ACCESS_REQUEST_USE = 0x02
8447e946e7SWyllys Ingersoll };
8547e946e7SWyllys Ingersoll 
8647e946e7SWyllys Ingersoll /* Possible TPM_STS register values (TIS 1.2 pg.52-54) */
8747e946e7SWyllys Ingersoll enum tis_status {
8847e946e7SWyllys Ingersoll 	/* bit 0 and bit 2 are reserved */
8947e946e7SWyllys Ingersoll 	TPM_STS_RESPONSE_RETRY	= 0x02, /* bit 1 */
9047e946e7SWyllys Ingersoll 	TPM_STS_DATA_EXPECT	= 0x08, /* bit 3 */
9147e946e7SWyllys Ingersoll 	TPM_STS_DATA_AVAIL	= 0x10, /* bit 4 */
9247e946e7SWyllys Ingersoll 	TPM_STS_GO		= 0x20, /* bit 5 */
9347e946e7SWyllys Ingersoll 	TPM_STS_CMD_READY	= 0x40, /* bit 6 */
9447e946e7SWyllys Ingersoll 	TPM_STS_VALID		= 0x80  /* bit 7 */
9547e946e7SWyllys Ingersoll };
9647e946e7SWyllys Ingersoll 
9747e946e7SWyllys Ingersoll /* Possible TPM_INTF_CAPABILITY register values (TIS 1.2 pg.55) */
9847e946e7SWyllys Ingersoll enum tis_intf_cap {
9947e946e7SWyllys Ingersoll 	TPM_INTF_BURST_COUNT_STATIC = 0x100,
10047e946e7SWyllys Ingersoll 	TPM_INTF_CMD_READY_INT = 0x080,
10147e946e7SWyllys Ingersoll 	TPM_INTF_INT_EDGE_FALLING = 0x040,
10247e946e7SWyllys Ingersoll 	TPM_INTF_INT_EDGE_RISING = 0x020,
10347e946e7SWyllys Ingersoll 	TPM_INTF_INT_LEVEL_LOW = 0x010,
10447e946e7SWyllys Ingersoll 	TPM_INTF_INT_LEVEL_HIGH = 0x008,
10547e946e7SWyllys Ingersoll 	TPM_INTF_INT_LOCALITY_CHANGE_INT = 0x004,
10647e946e7SWyllys Ingersoll 	TPM_INTF_INT_STS_VALID_INT = 0x002,
10747e946e7SWyllys Ingersoll 	TPM_INTF_INT_DATA_AVAIL_INT = 0x001
10847e946e7SWyllys Ingersoll };
10947e946e7SWyllys Ingersoll 
11047e946e7SWyllys Ingersoll /* Possible TPM_INT_ENABLE register values (TIS 1.2 pg.62-63) */
11147e946e7SWyllys Ingersoll /* Interrupt enable bit for TPM_INT_ENABLE_x register */
11247e946e7SWyllys Ingersoll /* Too big to fit in enum... */
11347e946e7SWyllys Ingersoll #define	TPM_INT_GLOBAL_EN	0x80000000
11447e946e7SWyllys Ingersoll enum tis_int_enable {
11547e946e7SWyllys Ingersoll 	TPM_INT_CMD_RDY_EN = 0x80,
11647e946e7SWyllys Ingersoll 	TPM_INT_LOCAL_CHANGE_INT_EN = 0x04,
11747e946e7SWyllys Ingersoll 	TPM_INT_STS_VALID_EN = 0x02,
11847e946e7SWyllys Ingersoll 	TPM_INT_STS_DATA_AVAIL_EN = 0x01
11947e946e7SWyllys Ingersoll };
12047e946e7SWyllys Ingersoll 
12147e946e7SWyllys Ingersoll #endif	/* _TPM_TIS_H */
122