Patchwork [V8,04/14] Add tpm_tis driver to build process

login
register
mail settings
Submitter Stefan Berger
Date Aug. 31, 2011, 2:35 p.m.
Message ID <20110831143618.872204992@linux.vnet.ibm.com>
Download mbox | patch
Permalink /patch/112597/
State New
Headers show

Comments

Stefan Berger - Aug. 31, 2011, 2:35 p.m.
The TPM interface (tpm_tis) needs to be explicitly enabled via
./configure --enable-tpm. This patch also restricts the building of the
TPM support to i386 and x86_64 targets since only there it is currently
supported. This prevents that one will end up with support for a frontend
but no available backend.

v3:
 - fixed and moved hunks in Makefile.target into right place

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>

Index:qemu/Makefile.target
Michael S. Tsirkin - Sept. 1, 2011, 5:23 p.m.
On Wed, Aug 31, 2011 at 10:35:55AM -0400, Stefan Berger wrote:
> The TPM interface (tpm_tis) needs to be explicitly enabled via
> ./configure --enable-tpm. This patch also restricts the building of the
> TPM support to i386 and x86_64 targets since only there it is currently
> supported. This prevents that one will end up with support for a frontend
> but no available backend.

This can happen anyway - just don't load the tpms driver :)
Presumably if libtpms exists on the system, we should
assume it's there for a reason. configure should test
that IMO and not limit architectures artificially.

> 
> v3:
>  - fixed and moved hunks in Makefile.target into right place
> 
> Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
> Index:qemu/Makefile.target
> ===================================================================
> ---
>  Makefile.target |    1 +
>  configure       |   20 ++++++++++++++++++++
>  2 files changed, 21 insertions(+)
> 
> Index: qemu-git/Makefile.target
> ===================================================================
> --- qemu-git.orig/Makefile.target
> +++ qemu-git/Makefile.target
> @@ -233,6 +233,7 @@ obj-i386-y += debugcon.o multiboot.o
>  obj-i386-y += pc_piix.o
>  obj-i386-$(CONFIG_KVM) += kvmclock.o
>  obj-i386-$(CONFIG_SPICE) += qxl.o qxl-logger.o qxl-render.o
> +obj-i386-$(CONFIG_TPM) += tpm_tis.o
>  
>  # shared objects
>  obj-ppc-y = ppc.o
> Index: qemu-git/configure
> ===================================================================
> --- qemu-git.orig/configure
> +++ qemu-git/configure
> @@ -183,6 +183,7 @@ usb_redir=""
>  opengl=""
>  zlib="yes"
>  guest_agent="yes"
> +tpm="no"
>  
>  # parse CC options first
>  for opt do
> @@ -765,6 +766,8 @@ for opt do
>    ;;
>    --disable-guest-agent) guest_agent="no"
>    ;;
> +  --enable-tpm) tpm="yes"
> +  ;;
>    *) echo "ERROR: unknown option $opt"; show_help="yes"
>    ;;
>    esac
> @@ -1044,6 +1047,7 @@ echo "  --disable-usb-redir      disable
>  echo "  --enable-usb-redir       enable usb network redirection support"
>  echo "  --disable-guest-agent    disable building of the QEMU Guest Agent"
>  echo "  --enable-guest-agent     enable building of the QEMU Guest Agent"
> +echo "  --enable-tpm             enable an emulated TPM"
>  echo ""
>  echo "NOTE: The object files are built at the place where configure is launched"
>  exit 1
> @@ -2731,6 +2735,7 @@ echo "nss used          $smartcard_nss"
>  echo "usb net redir     $usb_redir"
>  echo "OpenGL support    $opengl"
>  echo "build guest agent $guest_agent"
> +echo "TPM support       $tpm"
>  
>  if test "$sdl_too_old" = "yes"; then
>  echo "-> Your SDL version is too old - please upgrade to have SDL support"
> @@ -3555,6 +3560,21 @@ if test "$gprof" = "yes" ; then
>    fi
>  fi
>  
> +if test "$tpm" = "yes"; then
> +  has_tpm=0
> +  if test "$target_softmmu" = "yes" ; then
> +    case "$TARGET_BASE_ARCH" in
> +    i386)
> +      has_tpm=1
> +    ;;
> +    esac
> +  fi
> +
> +  if test "$has_tpm" = "1"; then
> +      echo "CONFIG_TPM=y" >> $config_host_mak
> +  fi
> +fi
> +
>  linker_script="-Wl,-T../config-host.ld -Wl,-T,\$(SRC_PATH)/\$(ARCH).ld"
>  if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
>    case "$ARCH" in
>
Stefan Berger - Sept. 2, 2011, 1:16 a.m.
On 09/01/2011 01:23 PM, Michael S. Tsirkin wrote:
> On Wed, Aug 31, 2011 at 10:35:55AM -0400, Stefan Berger wrote:
>> The TPM interface (tpm_tis) needs to be explicitly enabled via
>> ./configure --enable-tpm. This patch also restricts the building of the
>> TPM support to i386 and x86_64 targets since only there it is currently
>> supported. This prevents that one will end up with support for a frontend
>> but no available backend.
> This can happen anyway - just don't load the tpms driver :)
> Presumably if libtpms exists on the system, we should
> assume it's there for a reason. configure should test
> that IMO and not limit architectures artificially.
Well, what above means is that one a ppc machine you can still build a 
qemu-system-x86_64 with tpm 'builtin' (libtpms) support if libtpms is 
found on the system. However, I am not building the arm, ppc, mips etc. 
emulators with TPM support simply because I only have code in hw/pc.c 
enabling a x86_64/i386 pc with a TPM. If someone wants to extend and 
test those other machines then this restriction would have to be opened 
up to those targets that they extended.

    Stefan

>> v3:
>>   - fixed and moved hunks in Makefile.target into right place
>>
>> Signed-off-by: Stefan Berger<stefanb@linux.vnet.ibm.com>
>> Index:qemu/Makefile.target
>> ===================================================================
>> ---
>>   Makefile.target |    1 +
>>   configure       |   20 ++++++++++++++++++++
>>   2 files changed, 21 insertions(+)
>>
>> Index: qemu-git/Makefile.target
>> ===================================================================
>> --- qemu-git.orig/Makefile.target
>> +++ qemu-git/Makefile.target
>> @@ -233,6 +233,7 @@ obj-i386-y += debugcon.o multiboot.o
>>   obj-i386-y += pc_piix.o
>>   obj-i386-$(CONFIG_KVM) += kvmclock.o
>>   obj-i386-$(CONFIG_SPICE) += qxl.o qxl-logger.o qxl-render.o
>> +obj-i386-$(CONFIG_TPM) += tpm_tis.o
>>
>>   # shared objects
>>   obj-ppc-y = ppc.o
>> Index: qemu-git/configure
>> ===================================================================
>> --- qemu-git.orig/configure
>> +++ qemu-git/configure
>> @@ -183,6 +183,7 @@ usb_redir=""
>>   opengl=""
>>   zlib="yes"
>>   guest_agent="yes"
>> +tpm="no"
>>
>>   # parse CC options first
>>   for opt do
>> @@ -765,6 +766,8 @@ for opt do
>>     ;;
>>     --disable-guest-agent) guest_agent="no"
>>     ;;
>> +  --enable-tpm) tpm="yes"
>> +  ;;
>>     *) echo "ERROR: unknown option $opt"; show_help="yes"
>>     ;;
>>     esac
>> @@ -1044,6 +1047,7 @@ echo "  --disable-usb-redir      disable
>>   echo "  --enable-usb-redir       enable usb network redirection support"
>>   echo "  --disable-guest-agent    disable building of the QEMU Guest Agent"
>>   echo "  --enable-guest-agent     enable building of the QEMU Guest Agent"
>> +echo "  --enable-tpm             enable an emulated TPM"
>>   echo ""
>>   echo "NOTE: The object files are built at the place where configure is launched"
>>   exit 1
>> @@ -2731,6 +2735,7 @@ echo "nss used          $smartcard_nss"
>>   echo "usb net redir     $usb_redir"
>>   echo "OpenGL support    $opengl"
>>   echo "build guest agent $guest_agent"
>> +echo "TPM support       $tpm"
>>
>>   if test "$sdl_too_old" = "yes"; then
>>   echo "->  Your SDL version is too old - please upgrade to have SDL support"
>> @@ -3555,6 +3560,21 @@ if test "$gprof" = "yes" ; then
>>     fi
>>   fi
>>
>> +if test "$tpm" = "yes"; then
>> +  has_tpm=0
>> +  if test "$target_softmmu" = "yes" ; then
>> +    case "$TARGET_BASE_ARCH" in
>> +    i386)
>> +      has_tpm=1
>> +    ;;
>> +    esac
>> +  fi
>> +
>> +  if test "$has_tpm" = "1"; then
>> +      echo "CONFIG_TPM=y">>  $config_host_mak
>> +  fi
>> +fi
>> +
>>   linker_script="-Wl,-T../config-host.ld -Wl,-T,\$(SRC_PATH)/\$(ARCH).ld"
>>   if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
>>     case "$ARCH" in
>>

Patch

===================================================================
---
 Makefile.target |    1 +
 configure       |   20 ++++++++++++++++++++
 2 files changed, 21 insertions(+)

Index: qemu-git/Makefile.target
===================================================================
--- qemu-git.orig/Makefile.target
+++ qemu-git/Makefile.target
@@ -233,6 +233,7 @@  obj-i386-y += debugcon.o multiboot.o
 obj-i386-y += pc_piix.o
 obj-i386-$(CONFIG_KVM) += kvmclock.o
 obj-i386-$(CONFIG_SPICE) += qxl.o qxl-logger.o qxl-render.o
+obj-i386-$(CONFIG_TPM) += tpm_tis.o
 
 # shared objects
 obj-ppc-y = ppc.o
Index: qemu-git/configure
===================================================================
--- qemu-git.orig/configure
+++ qemu-git/configure
@@ -183,6 +183,7 @@  usb_redir=""
 opengl=""
 zlib="yes"
 guest_agent="yes"
+tpm="no"
 
 # parse CC options first
 for opt do
@@ -765,6 +766,8 @@  for opt do
   ;;
   --disable-guest-agent) guest_agent="no"
   ;;
+  --enable-tpm) tpm="yes"
+  ;;
   *) echo "ERROR: unknown option $opt"; show_help="yes"
   ;;
   esac
@@ -1044,6 +1047,7 @@  echo "  --disable-usb-redir      disable
 echo "  --enable-usb-redir       enable usb network redirection support"
 echo "  --disable-guest-agent    disable building of the QEMU Guest Agent"
 echo "  --enable-guest-agent     enable building of the QEMU Guest Agent"
+echo "  --enable-tpm             enable an emulated TPM"
 echo ""
 echo "NOTE: The object files are built at the place where configure is launched"
 exit 1
@@ -2731,6 +2735,7 @@  echo "nss used          $smartcard_nss"
 echo "usb net redir     $usb_redir"
 echo "OpenGL support    $opengl"
 echo "build guest agent $guest_agent"
+echo "TPM support       $tpm"
 
 if test "$sdl_too_old" = "yes"; then
 echo "-> Your SDL version is too old - please upgrade to have SDL support"
@@ -3555,6 +3560,21 @@  if test "$gprof" = "yes" ; then
   fi
 fi
 
+if test "$tpm" = "yes"; then
+  has_tpm=0
+  if test "$target_softmmu" = "yes" ; then
+    case "$TARGET_BASE_ARCH" in
+    i386)
+      has_tpm=1
+    ;;
+    esac
+  fi
+
+  if test "$has_tpm" = "1"; then
+      echo "CONFIG_TPM=y" >> $config_host_mak
+  fi
+fi
+
 linker_script="-Wl,-T../config-host.ld -Wl,-T,\$(SRC_PATH)/\$(ARCH).ld"
 if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
   case "$ARCH" in