Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 4 Feb 2020 20:09:26 +0000 (UTC)
From:      Dimitry Andric <dim@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org
Subject:   svn commit: r357526 - in stable: 11/sys/dev/tpm 12/sys/dev/tpm
Message-ID:  <202002042009.014K9Qh8076899@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: dim
Date: Tue Feb  4 20:09:25 2020
New Revision: 357526
URL: https://svnweb.freebsd.org/changeset/base/357526

Log:
  MFC r357349:
  
  Merge r357348 from the clang 10.0.0 import branch:
  
  Disable new clang 10.0.0 warnings about converting the result of shift
  operations to a boolean in tpm(4):
  
  sys/dev/tpm/tpm_crb.c:301:32: error: converting the result of '<<' to a boolean; did you mean '(1 << (0)) != 0'? [-Werror,-Wint-in-bool-context]
          WR4(sc, TPM_CRB_CTRL_CANCEL, !TPM_CRB_CTRL_CANCEL_CMD);
                                        ^
  sys/dev/tpm/tpm_crb.c:73:34: note: expanded from macro 'TPM_CRB_CTRL_CANCEL_CMD'
  #define TPM_CRB_CTRL_CANCEL_CMD         BIT(0)
                                          ^
  sys/dev/tpm/tpm20.h:60:19: note: expanded from macro 'BIT'
  #define BIT(x) (1 << (x))
                    ^
  
  Such warnings can be useful in C++ contexts, but not so much in kernel
  drivers, where this type of bit twiddling is commonplace.  So disable it
  for this case.
  
  MFC r357366:
  
  Revert r357349, since the clang 10.0.0 warning was actually correct, and
  the ! operator should have been a ~ instead:
  
    Merge r357348 from the clang 10.0.0 import branch:
  
    Disable new clang 10.0.0 warnings about converting the result of
    shift operations to a boolean in tpm(4):
  
    sys/dev/tpm/tpm_crb.c:301:32: error: converting the result of '<<' to a boolean; did you mean '(1 << (0)) != 0'? [-Werror,-Wint-in-bool-context]
  	  WR4(sc, TPM_CRB_CTRL_CANCEL, !TPM_CRB_CTRL_CANCEL_CMD);
  					^
    sys/dev/tpm/tpm_crb.c:73:34: note: expanded from macro 'TPM_CRB_CTRL_CANCEL_CMD'
    #define TPM_CRB_CTRL_CANCEL_CMD         BIT(0)
  					  ^
    sys/dev/tpm/tpm20.h:60:19: note: expanded from macro 'BIT'
    #define BIT(x) (1 << (x))
  		    ^
  
    Such warnings can be useful in C++ contexts, but not so much in kernel
    drivers, where this type of bit twiddling is commonplace.  So disable
    it for this case.
  
  Noticed by:	cem
  
  MFC r357367:
  
  Fix new clang 10.0.0 warnings about converting the result of shift
  operations to a boolean in tpm(4):
  
    sys/dev/tpm/tpm_crb.c:301:32: error: converting the result of '<<' to a boolean; did you mean '(1 << (0)) != 0'? [-Werror,-Wint-in-bool-context]
  	  WR4(sc, TPM_CRB_CTRL_CANCEL, !TPM_CRB_CTRL_CANCEL_CMD);
  					^
    sys/dev/tpm/tpm_crb.c:73:34: note: expanded from macro 'TPM_CRB_CTRL_CANCEL_CMD'
    #define TPM_CRB_CTRL_CANCEL_CMD         BIT(0)
  					  ^
    sys/dev/tpm/tpm20.h:60:19: note: expanded from macro 'BIT'
    #define BIT(x) (1 << (x))
  		    ^
  
  In this case, the intent was to clear the zeroth bit, and leave the rest
  unaffected.  Therefore, the ~ operator should be used instead.
  
  Noticed by:	cem
  
  MFC r357388:
  
  Amend r357367 by using register values from the TPM datasheet.
  
  As Ian Lepore noted, writing ~1 to a register might have a completely
  different effect than doing a regular read-modify-write operation.
  
  Follow the TCG_PC_Client_Platform_TPM_Profile_PTP_2.0_r1.03_v22
  datasheet instead, and use the actual values mentioned there:
  (uint32_t)1 to cancel the command, (uint32_t)0 to clear the field.
  
  MFC r357391 (by kib):
  
  Fix build.
  
  Sponsored by:	The FreeBSD Foundation

Modified:
  stable/11/sys/dev/tpm/tpm_crb.c
Directory Properties:
  stable/11/   (props changed)

Changes in other areas also in this revision:
Modified:
  stable/12/sys/dev/tpm/tpm_crb.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/11/sys/dev/tpm/tpm_crb.c
==============================================================================
--- stable/11/sys/dev/tpm/tpm_crb.c	Tue Feb  4 20:00:45 2020	(r357525)
+++ stable/11/sys/dev/tpm/tpm_crb.c	Tue Feb  4 20:09:25 2020	(r357526)
@@ -70,7 +70,8 @@ __FBSDID("$FreeBSD$");
 #define	TPM_CRB_CTRL_STS_ERR_BIT	BIT(0)
 #define	TPM_CRB_CTRL_STS_IDLE_BIT	BIT(1)
 
-#define	TPM_CRB_CTRL_CANCEL_CMD		BIT(0)
+#define	TPM_CRB_CTRL_CANCEL_CMD		0x1
+#define	TPM_CRB_CTRL_CANCEL_CLEAR	0x0
 
 #define	TPM_CRB_CTRL_START_CMD		BIT(0)
 
@@ -299,7 +300,7 @@ tpmcrb_cancel_cmd(struct tpm_sc *sc)
 		return (false);
 	}
 
-	WR4(sc, TPM_CRB_CTRL_CANCEL, !TPM_CRB_CTRL_CANCEL_CMD);
+	WR4(sc, TPM_CRB_CTRL_CANCEL, TPM_CRB_CTRL_CANCEL_CLEAR);
 	return (true);
 }
 
@@ -331,7 +332,7 @@ tpmcrb_transmit(struct tpm_sc *sc, size_t length)
 		return (EIO);
 	}
 	/* Clear cancellation bit */
-	WR4(sc, TPM_CRB_CTRL_CANCEL, !TPM_CRB_CTRL_CANCEL_CMD);
+	WR4(sc, TPM_CRB_CTRL_CANCEL, TPM_CRB_CTRL_CANCEL_CLEAR);
 
 	/* Switch device to idle state if necessary */
 	if (!(RD4(sc, TPM_CRB_CTRL_STS) & TPM_CRB_CTRL_STS_IDLE_BIT)) {



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202002042009.014K9Qh8076899>