vboot: TPM2 - report attempts to re-create NVRAM spaces

Currently the tlcl_define_space() function returns the same error
value for any non-zero TPM response code. The thing is that the caller
might want to allow attempts to re-create existing NVRAM spaces. This
patch adds a new API return value to indicate this condition and uses
it as appropriate.

BRANCH=none
BUG=chrome-os-partner:59654
TEST=for test purposes modified the code not to create the firmware
     space, wiped out the TPM NVRAM and booted the device. Observed it
     create kernel and MRC index spaces on the first boot and then
     reporting return code 0x14c for already existing spaces on the
     following restarts.

Change-Id: Ic183eb45e73edfbccf11cc19fd2f64f64274bfb2
Signed-off-by: Vadim Bendebury <vbendeb@chromium.org>
Reviewed-on: https://review.coreboot.org/17422
Tested-by: build bot (Jenkins)
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
diff --git a/src/lib/tpm2_tlcl.c b/src/lib/tpm2_tlcl.c
index 457e874..6f5243e 100644
--- a/src/lib/tpm2_tlcl.c
+++ b/src/lib/tpm2_tlcl.c
@@ -359,6 +359,13 @@
 	if (!response)
 		return TPM_E_NO_DEVICE;
 
-	return response->hdr.tpm_code ? TPM_E_INTERNAL_INCONSISTENCY :
-		TPM_SUCCESS;
+	/* Map TPM2 retrun codes into common vboot represenation. */
+	switch(response->hdr.tpm_code) {
+	case TPM2_RC_SUCCESS:
+		return TPM_SUCCESS;
+	case TPM2_RC_NV_DEFINED:
+		return TPM_E_NV_DEFINED;
+	default:
+		return TPM_E_INTERNAL_INCONSISTENCY;
+	}
 }