sandbox: tpm: Tidy up enums and return values

Use an enum for command values instead of open-coding them. This removes
the need for comments. Also make sure the driver returns proper error
numbers instead of -1.

Signed-off-by: Simon Glass <sjg@chromium.org>
lime2-spi
Simon Glass 6 years ago
parent 114b60a7e6
commit 998af31903
  1. 20
      drivers/tpm/tpm_tis_sandbox.c
  2. 14
      include/tpm-v1.h
  3. 1
      include/tpm-v2.h

@ -151,10 +151,10 @@ static int sandbox_tpm_xfer(struct udevice *dev, const uint8_t *sendbuf,
*recv_len, code); *recv_len, code);
print_buffer(0, sendbuf, 1, send_size, 0); print_buffer(0, sendbuf, 1, send_size, 0);
switch (code) { switch (code) {
case 0x65: /* get flags */ case TPM_CMD_GET_CAPABILITY:
type = get_unaligned_be32(sendbuf + 14); type = get_unaligned_be32(sendbuf + 14);
switch (type) { switch (type) {
case 4: case TPM_CAP_FLAG:
index = get_unaligned_be32(sendbuf + 18); index = get_unaligned_be32(sendbuf + 18);
printf("Get flags index %#02x\n", index); printf("Get flags index %#02x\n", index);
*recv_len = 22; *recv_len = 22;
@ -173,7 +173,7 @@ static int sandbox_tpm_xfer(struct udevice *dev, const uint8_t *sendbuf,
break; break;
} }
break; break;
case 0x11: /* TPM_CAP_NV_INDEX */ case TPM_CAP_NV_INDEX:
index = get_unaligned_be32(sendbuf + 18); index = get_unaligned_be32(sendbuf + 18);
printf("Get cap nv index %#02x\n", index); printf("Get cap nv index %#02x\n", index);
put_unaligned_be32(22, recvbuf + put_unaligned_be32(22, recvbuf +
@ -182,26 +182,26 @@ static int sandbox_tpm_xfer(struct udevice *dev, const uint8_t *sendbuf,
default: default:
printf(" ** Unknown 0x65 command type %#02x\n", printf(" ** Unknown 0x65 command type %#02x\n",
type); type);
return -1; return -ENOSYS;
} }
break; break;
case 0xcd: /* nvwrite */ case TPM_CMD_NV_WRITE_VALUE:
index = get_unaligned_be32(sendbuf + 10); index = get_unaligned_be32(sendbuf + 10);
length = get_unaligned_be32(sendbuf + 18); length = get_unaligned_be32(sendbuf + 18);
seq = index_to_seq(index); seq = index_to_seq(index);
if (seq < 0) if (seq < 0)
return -1; return -EINVAL;
printf("tpm: nvwrite index=%#02x, len=%#02x\n", index, length); printf("tpm: nvwrite index=%#02x, len=%#02x\n", index, length);
memcpy(&tpm->nvdata[seq], sendbuf + 22, length); memcpy(&tpm->nvdata[seq], sendbuf + 22, length);
*recv_len = 12; *recv_len = 12;
memset(recvbuf, '\0', *recv_len); memset(recvbuf, '\0', *recv_len);
break; break;
case 0xcf: /* nvread */ case TPM_CMD_NV_READ_VALUE: /* nvread */
index = get_unaligned_be32(sendbuf + 10); index = get_unaligned_be32(sendbuf + 10);
length = get_unaligned_be32(sendbuf + 18); length = get_unaligned_be32(sendbuf + 18);
seq = index_to_seq(index); seq = index_to_seq(index);
if (seq < 0) if (seq < 0)
return -1; return -EINVAL;
printf("tpm: nvread index=%#02x, len=%#02x\n", index, length); printf("tpm: nvread index=%#02x, len=%#02x\n", index, length);
*recv_len = TPM_RESPONSE_HEADER_LENGTH + sizeof(uint32_t) + *recv_len = TPM_RESPONSE_HEADER_LENGTH + sizeof(uint32_t) +
length; length;
@ -225,7 +225,7 @@ static int sandbox_tpm_xfer(struct udevice *dev, const uint8_t *sendbuf,
sizeof(uint32_t), &tpm->nvdata[seq], length); sizeof(uint32_t), &tpm->nvdata[seq], length);
} }
break; break;
case 0x14: /* tpm extend */ case TPM_CMD_EXTEND: /* tpm extend */
case 0x15: /* pcr read */ case 0x15: /* pcr read */
case 0x5d: /* force clear */ case 0x5d: /* force clear */
case 0x6f: /* physical enable */ case 0x6f: /* physical enable */
@ -237,7 +237,7 @@ static int sandbox_tpm_xfer(struct udevice *dev, const uint8_t *sendbuf,
break; break;
default: default:
printf("Unknown tpm command %02x\n", code); printf("Unknown tpm command %02x\n", code);
return -1; return -ENOSYS;
} }
return 0; return 0;

@ -81,6 +81,12 @@ enum tpm_capability_areas {
TPM_CAP_VERSION_VAL = 0x0000001A, TPM_CAP_VERSION_VAL = 0x0000001A,
}; };
enum tmp_cap_flag {
TPM_CAP_FLAG_PERMANENT = 0x108,
};
#define TPM_TAG_PERMANENT_FLAGS 0x001f
#define TPM_NV_PER_GLOBALLOCK BIT(15) #define TPM_NV_PER_GLOBALLOCK BIT(15)
#define TPM_NV_PER_PPREAD BIT(16) #define TPM_NV_PER_PPREAD BIT(16)
#define TPM_NV_PER_PPWRITE BIT(0) #define TPM_NV_PER_PPWRITE BIT(0)
@ -93,6 +99,14 @@ enum {
TPM_PUBEK_SIZE = 256, TPM_PUBEK_SIZE = 256,
}; };
enum {
TPM_CMD_EXTEND = 0x14,
TPM_CMD_GET_CAPABILITY = 0x65,
TPM_CMD_NV_DEFINE_SPACE = 0xcc,
TPM_CMD_NV_WRITE_VALUE = 0xcd,
TPM_CMD_NV_READ_VALUE = 0xcf,
};
/** /**
* TPM return codes as defined in the TCG Main specification * TPM return codes as defined in the TCG Main specification
* (TPM Main Part 2 Structures; Specification version 1.2) * (TPM Main Part 2 Structures; Specification version 1.2)

@ -83,6 +83,7 @@ enum tpm2_command_codes {
TPM2_CC_PCR_SETAUTHPOL = 0x012C, TPM2_CC_PCR_SETAUTHPOL = 0x012C,
TPM2_CC_DAM_RESET = 0x0139, TPM2_CC_DAM_RESET = 0x0139,
TPM2_CC_DAM_PARAMETERS = 0x013A, TPM2_CC_DAM_PARAMETERS = 0x013A,
TPM2_CC_NV_READ = 0x014E,
TPM2_CC_GET_CAPABILITY = 0x017A, TPM2_CC_GET_CAPABILITY = 0x017A,
TPM2_CC_PCR_READ = 0x017E, TPM2_CC_PCR_READ = 0x017E,
TPM2_CC_PCR_EXTEND = 0x0182, TPM2_CC_PCR_EXTEND = 0x0182,

Loading…
Cancel
Save