Message ID | 1476838185-24007-6-git-send-email-nayna@linux.vnet.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Tue, Oct 18, 2016 at 08:49:43PM -0400, Nayna Jain wrote: > Currently, read_log() has two implementations: one for ACPI platforms > and the other for device tree(OF) based platforms. The proper one is > selected at compile time using Kconfig and #ifdef in the Makefile, > which is not the recommended approach. > > This patch removes the #ifdef in the Makefile by defining a single > read_log() method, which checks for ACPI/OF event log properties at > runtime. > > Suggested-by: Jason Gunthorpe <jgunthorpe@obsidianresearch.com> > Signed-off-by: Nayna Jain <nayna@linux.vnet.ibm.com> > Reviewed-by: Jason Gunthorpe <jgunthorpe@obsidianresearch.com> Do we have situation where we need a compiled kernel image that is both DT and ACPI enabled? /Jarkko > --- > drivers/char/tpm/Makefile | 14 ++++---------- > drivers/char/tpm/tpm_acpi.c | 9 ++------- > drivers/char/tpm/tpm_eventlog.c | 18 ++++++++++++++++++ > drivers/char/tpm/tpm_eventlog.h | 22 +++++++++++++--------- > drivers/char/tpm/tpm_of.c | 8 ++------ > 5 files changed, 39 insertions(+), 32 deletions(-) > > diff --git a/drivers/char/tpm/Makefile b/drivers/char/tpm/Makefile > index a385fb8..a05b1eb 100644 > --- a/drivers/char/tpm/Makefile > +++ b/drivers/char/tpm/Makefile > @@ -2,16 +2,10 @@ > # Makefile for the kernel tpm device drivers. > # > obj-$(CONFIG_TCG_TPM) += tpm.o > -tpm-y := tpm-interface.o tpm-dev.o tpm-sysfs.o tpm-chip.o tpm2-cmd.o > -tpm-$(CONFIG_ACPI) += tpm_ppi.o > - > -ifdef CONFIG_ACPI > - tpm-y += tpm_eventlog.o tpm_acpi.o > -else > -ifdef CONFIG_TCG_IBMVTPM > - tpm-y += tpm_eventlog.o tpm_of.o > -endif > -endif > +tpm-y := tpm-interface.o tpm-dev.o tpm-sysfs.o tpm-chip.o tpm2-cmd.o \ > + tpm_eventlog.o > +tpm-$(CONFIG_ACPI) += tpm_ppi.o tpm_acpi.o > +tpm-$(CONFIG_OF) += tpm_of.o > obj-$(CONFIG_TCG_TIS_CORE) += tpm_tis_core.o > obj-$(CONFIG_TCG_TIS) += tpm_tis.o > obj-$(CONFIG_TCG_TIS_SPI) += tpm_tis_spi.o > diff --git a/drivers/char/tpm/tpm_acpi.c b/drivers/char/tpm/tpm_acpi.c > index 4d6c2d7..859bdba 100644 > --- a/drivers/char/tpm/tpm_acpi.c > +++ b/drivers/char/tpm/tpm_acpi.c > @@ -6,6 +6,7 @@ > * Stefan Berger <stefanb@us.ibm.com> > * Reiner Sailer <sailer@watson.ibm.com> > * Kylene Hall <kjhall@us.ibm.com> > + * Nayna Jain <nayna@linux.vnet.ibm.com> > * > * Maintained by: <tpmdd-devel@lists.sourceforge.net> > * > @@ -45,7 +46,7 @@ struct acpi_tcpa { > }; > > /* read binary bios log */ > -int read_log(struct tpm_chip *chip) > +int read_log_acpi(struct tpm_chip *chip) > { > struct acpi_tcpa *buff; > acpi_status status; > @@ -54,12 +55,6 @@ int read_log(struct tpm_chip *chip) > struct tpm_bios_log *log; > > log = &chip->log; > - if (log->bios_event_log != NULL) { > - printk(KERN_ERR > - "%s: ERROR - Eventlog already initialized\n", > - __func__); > - return -EFAULT; > - } > > /* Find TCPA entry in RSDT (ACPI_LOGICAL_ADDRESSING) */ > status = acpi_get_table(ACPI_SIG_TCPA, 1, > diff --git a/drivers/char/tpm/tpm_eventlog.c b/drivers/char/tpm/tpm_eventlog.c > index bb142f2..b60c028 100644 > --- a/drivers/char/tpm/tpm_eventlog.c > +++ b/drivers/char/tpm/tpm_eventlog.c > @@ -365,6 +365,24 @@ static int is_bad(void *p) > return 0; > } > > +int read_log(struct tpm_chip *chip) > +{ > + int rc; > + > + if (chip->log.bios_event_log != NULL) { > + dev_dbg(&chip->dev, "%s: ERROR - Eventlog already initialized\n", > + __func__); > + return -EFAULT; > + } > + > + rc = read_log_acpi(chip); > + if ((rc == 0) || (rc == -ENOMEM)) > + return rc; > + rc = read_log_of(chip); > + return rc; > + > +} > + > int tpm_bios_log_setup(struct tpm_chip *chip) > { > const char *name = dev_name(&chip->dev); > diff --git a/drivers/char/tpm/tpm_eventlog.h b/drivers/char/tpm/tpm_eventlog.h > index 6df2f8e..be529ad 100644 > --- a/drivers/char/tpm/tpm_eventlog.h > +++ b/drivers/char/tpm/tpm_eventlog.h > @@ -73,20 +73,24 @@ enum tcpa_pc_event_ids { > HOST_TABLE_OF_DEVICES, > }; > > -int read_log(struct tpm_chip *chip); > - > -#if defined(CONFIG_TCG_IBMVTPM) || defined(CONFIG_TCG_IBMVTPM_MODULE) || \ > - defined(CONFIG_ACPI) > -extern int tpm_bios_log_setup(struct tpm_chip *chip); > -extern void tpm_bios_log_teardown(struct tpm_chip *chip); > +#if defined(CONFIG_ACPI) > +int read_log_acpi(struct tpm_chip *chip); > #else > -static inline int tpm_bios_log_setup(struct tpm_chip *chip) > +static inline int read_log_acpi(struct tpm_chip *chip) > { > - return 0; > + return -ENODEV; > } > -static inline void tpm_bios_log_teardown(struct tpm_chip *chip) > +#endif > +#if defined(CONFIG_OF) > +int read_log_of(struct tpm_chip *chip); > +#else > +static inline int read_log_of(struct tpm_chip *chip) > { > + return -ENODEV; > } > #endif > > +int tpm_bios_log_setup(struct tpm_chip *chip); > +void tpm_bios_log_teardown(struct tpm_chip *chip); > + > #endif > diff --git a/drivers/char/tpm/tpm_of.c b/drivers/char/tpm/tpm_of.c > index 68d891a..7c30752 100644 > --- a/drivers/char/tpm/tpm_of.c > +++ b/drivers/char/tpm/tpm_of.c > @@ -2,6 +2,7 @@ > * Copyright 2012 IBM Corporation > * > * Author: Ashley Lai <ashleydlai@gmail.com> > + * Nayna Jain <nayna@linux.vnet.ibm.com> > * > * Maintained by: <tpmdd-devel@lists.sourceforge.net> > * > @@ -20,7 +21,7 @@ > #include "tpm.h" > #include "tpm_eventlog.h" > > -int read_log(struct tpm_chip *chip) > +int read_log_of(struct tpm_chip *chip) > { > struct device_node *np; > const u32 *sizep; > @@ -28,11 +29,6 @@ int read_log(struct tpm_chip *chip) > struct tpm_bios_log *log; > > log = &chip->log; > - if (log->bios_event_log != NULL) { > - pr_err("%s: ERROR - Eventlog already initialized\n", __func__); > - return -EFAULT; > - } > - > np = of_find_node_by_name(NULL, "vtpm"); > if (!np) { > pr_err("%s: ERROR - IBMVTPM not supported\n", __func__); > -- > 2.5.0 > ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot
On Wed, Oct 19, 2016 at 07:17:40PM +0300, Jarkko Sakkinen wrote: > > Suggested-by: Jason Gunthorpe <jgunthorpe@obsidianresearch.com> > > Signed-off-by: Nayna Jain <nayna@linux.vnet.ibm.com> > > Reviewed-by: Jason Gunthorpe <jgunthorpe@obsidianresearch.com> > > Do we have situation where we need a compiled kernel image that is > both DT and ACPI enabled? It is possible to enable DT on x86, and apparently ARM64 has some combination too, there is nothing in kconfig that prevents both from being enabled, it has been a longstanding issue in this code that they are #ifdef'd to be exclusive. Jason ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot
On Wed, Oct 19, 2016 at 11:26:25AM -0600, Jason Gunthorpe wrote: > On Wed, Oct 19, 2016 at 07:17:40PM +0300, Jarkko Sakkinen wrote: > > > Suggested-by: Jason Gunthorpe <jgunthorpe@obsidianresearch.com> > > > Signed-off-by: Nayna Jain <nayna@linux.vnet.ibm.com> > > > Reviewed-by: Jason Gunthorpe <jgunthorpe@obsidianresearch.com> > > > > Do we have situation where we need a compiled kernel image that is > > both DT and ACPI enabled? > > It is possible to enable DT on x86, and apparently ARM64 has some > combination too, there is nothing in kconfig that prevents both from > being enabled, it has been a longstanding issue in this code that they > are #ifdef'd to be exclusive. OK, makes sense then. I just got Minnowboard Turbot. I have to do some research if I could use it to do a DT-based boot. Reviewed-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com> /Jarkko ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot
On Tue, Oct 18, 2016 at 08:49:43PM -0400, Nayna Jain wrote: > Currently, read_log() has two implementations: one for ACPI platforms > and the other for device tree(OF) based platforms. The proper one is > selected at compile time using Kconfig and #ifdef in the Makefile, > which is not the recommended approach. > > This patch removes the #ifdef in the Makefile by defining a single > read_log() method, which checks for ACPI/OF event log properties at > runtime. > > Suggested-by: Jason Gunthorpe <jgunthorpe@obsidianresearch.com> > Signed-off-by: Nayna Jain <nayna@linux.vnet.ibm.com> > Reviewed-by: Jason Gunthorpe <jgunthorpe@obsidianresearch.com> Reviewed-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com> /Jarkko > --- > drivers/char/tpm/Makefile | 14 ++++---------- > drivers/char/tpm/tpm_acpi.c | 9 ++------- > drivers/char/tpm/tpm_eventlog.c | 18 ++++++++++++++++++ > drivers/char/tpm/tpm_eventlog.h | 22 +++++++++++++--------- > drivers/char/tpm/tpm_of.c | 8 ++------ > 5 files changed, 39 insertions(+), 32 deletions(-) > > diff --git a/drivers/char/tpm/Makefile b/drivers/char/tpm/Makefile > index a385fb8..a05b1eb 100644 > --- a/drivers/char/tpm/Makefile > +++ b/drivers/char/tpm/Makefile > @@ -2,16 +2,10 @@ > # Makefile for the kernel tpm device drivers. > # > obj-$(CONFIG_TCG_TPM) += tpm.o > -tpm-y := tpm-interface.o tpm-dev.o tpm-sysfs.o tpm-chip.o tpm2-cmd.o > -tpm-$(CONFIG_ACPI) += tpm_ppi.o > - > -ifdef CONFIG_ACPI > - tpm-y += tpm_eventlog.o tpm_acpi.o > -else > -ifdef CONFIG_TCG_IBMVTPM > - tpm-y += tpm_eventlog.o tpm_of.o > -endif > -endif > +tpm-y := tpm-interface.o tpm-dev.o tpm-sysfs.o tpm-chip.o tpm2-cmd.o \ > + tpm_eventlog.o > +tpm-$(CONFIG_ACPI) += tpm_ppi.o tpm_acpi.o > +tpm-$(CONFIG_OF) += tpm_of.o > obj-$(CONFIG_TCG_TIS_CORE) += tpm_tis_core.o > obj-$(CONFIG_TCG_TIS) += tpm_tis.o > obj-$(CONFIG_TCG_TIS_SPI) += tpm_tis_spi.o > diff --git a/drivers/char/tpm/tpm_acpi.c b/drivers/char/tpm/tpm_acpi.c > index 4d6c2d7..859bdba 100644 > --- a/drivers/char/tpm/tpm_acpi.c > +++ b/drivers/char/tpm/tpm_acpi.c > @@ -6,6 +6,7 @@ > * Stefan Berger <stefanb@us.ibm.com> > * Reiner Sailer <sailer@watson.ibm.com> > * Kylene Hall <kjhall@us.ibm.com> > + * Nayna Jain <nayna@linux.vnet.ibm.com> > * > * Maintained by: <tpmdd-devel@lists.sourceforge.net> > * > @@ -45,7 +46,7 @@ struct acpi_tcpa { > }; > > /* read binary bios log */ > -int read_log(struct tpm_chip *chip) > +int read_log_acpi(struct tpm_chip *chip) > { > struct acpi_tcpa *buff; > acpi_status status; > @@ -54,12 +55,6 @@ int read_log(struct tpm_chip *chip) > struct tpm_bios_log *log; > > log = &chip->log; > - if (log->bios_event_log != NULL) { > - printk(KERN_ERR > - "%s: ERROR - Eventlog already initialized\n", > - __func__); > - return -EFAULT; > - } > > /* Find TCPA entry in RSDT (ACPI_LOGICAL_ADDRESSING) */ > status = acpi_get_table(ACPI_SIG_TCPA, 1, > diff --git a/drivers/char/tpm/tpm_eventlog.c b/drivers/char/tpm/tpm_eventlog.c > index bb142f2..b60c028 100644 > --- a/drivers/char/tpm/tpm_eventlog.c > +++ b/drivers/char/tpm/tpm_eventlog.c > @@ -365,6 +365,24 @@ static int is_bad(void *p) > return 0; > } > > +int read_log(struct tpm_chip *chip) > +{ > + int rc; > + > + if (chip->log.bios_event_log != NULL) { > + dev_dbg(&chip->dev, "%s: ERROR - Eventlog already initialized\n", > + __func__); > + return -EFAULT; > + } > + > + rc = read_log_acpi(chip); > + if ((rc == 0) || (rc == -ENOMEM)) > + return rc; > + rc = read_log_of(chip); > + return rc; > + > +} > + > int tpm_bios_log_setup(struct tpm_chip *chip) > { > const char *name = dev_name(&chip->dev); > diff --git a/drivers/char/tpm/tpm_eventlog.h b/drivers/char/tpm/tpm_eventlog.h > index 6df2f8e..be529ad 100644 > --- a/drivers/char/tpm/tpm_eventlog.h > +++ b/drivers/char/tpm/tpm_eventlog.h > @@ -73,20 +73,24 @@ enum tcpa_pc_event_ids { > HOST_TABLE_OF_DEVICES, > }; > > -int read_log(struct tpm_chip *chip); > - > -#if defined(CONFIG_TCG_IBMVTPM) || defined(CONFIG_TCG_IBMVTPM_MODULE) || \ > - defined(CONFIG_ACPI) > -extern int tpm_bios_log_setup(struct tpm_chip *chip); > -extern void tpm_bios_log_teardown(struct tpm_chip *chip); > +#if defined(CONFIG_ACPI) > +int read_log_acpi(struct tpm_chip *chip); > #else > -static inline int tpm_bios_log_setup(struct tpm_chip *chip) > +static inline int read_log_acpi(struct tpm_chip *chip) > { > - return 0; > + return -ENODEV; > } > -static inline void tpm_bios_log_teardown(struct tpm_chip *chip) > +#endif > +#if defined(CONFIG_OF) > +int read_log_of(struct tpm_chip *chip); > +#else > +static inline int read_log_of(struct tpm_chip *chip) > { > + return -ENODEV; > } > #endif > > +int tpm_bios_log_setup(struct tpm_chip *chip); > +void tpm_bios_log_teardown(struct tpm_chip *chip); > + > #endif > diff --git a/drivers/char/tpm/tpm_of.c b/drivers/char/tpm/tpm_of.c > index 68d891a..7c30752 100644 > --- a/drivers/char/tpm/tpm_of.c > +++ b/drivers/char/tpm/tpm_of.c > @@ -2,6 +2,7 @@ > * Copyright 2012 IBM Corporation > * > * Author: Ashley Lai <ashleydlai@gmail.com> > + * Nayna Jain <nayna@linux.vnet.ibm.com> > * > * Maintained by: <tpmdd-devel@lists.sourceforge.net> > * > @@ -20,7 +21,7 @@ > #include "tpm.h" > #include "tpm_eventlog.h" > > -int read_log(struct tpm_chip *chip) > +int read_log_of(struct tpm_chip *chip) > { > struct device_node *np; > const u32 *sizep; > @@ -28,11 +29,6 @@ int read_log(struct tpm_chip *chip) > struct tpm_bios_log *log; > > log = &chip->log; > - if (log->bios_event_log != NULL) { > - pr_err("%s: ERROR - Eventlog already initialized\n", __func__); > - return -EFAULT; > - } > - > np = of_find_node_by_name(NULL, "vtpm"); > if (!np) { > pr_err("%s: ERROR - IBMVTPM not supported\n", __func__); > -- > 2.5.0 > ------------------------------------------------------------------------------ Developer Access Program for Intel Xeon Phi Processors Access to Intel Xeon Phi processor-based developer platforms. With one year of Intel Parallel Studio XE. Training and support from Colfax. Order your platform today. http://sdm.link/xeonphi
diff --git a/drivers/char/tpm/Makefile b/drivers/char/tpm/Makefile index a385fb8..a05b1eb 100644 --- a/drivers/char/tpm/Makefile +++ b/drivers/char/tpm/Makefile @@ -2,16 +2,10 @@ # Makefile for the kernel tpm device drivers. # obj-$(CONFIG_TCG_TPM) += tpm.o -tpm-y := tpm-interface.o tpm-dev.o tpm-sysfs.o tpm-chip.o tpm2-cmd.o -tpm-$(CONFIG_ACPI) += tpm_ppi.o - -ifdef CONFIG_ACPI - tpm-y += tpm_eventlog.o tpm_acpi.o -else -ifdef CONFIG_TCG_IBMVTPM - tpm-y += tpm_eventlog.o tpm_of.o -endif -endif +tpm-y := tpm-interface.o tpm-dev.o tpm-sysfs.o tpm-chip.o tpm2-cmd.o \ + tpm_eventlog.o +tpm-$(CONFIG_ACPI) += tpm_ppi.o tpm_acpi.o +tpm-$(CONFIG_OF) += tpm_of.o obj-$(CONFIG_TCG_TIS_CORE) += tpm_tis_core.o obj-$(CONFIG_TCG_TIS) += tpm_tis.o obj-$(CONFIG_TCG_TIS_SPI) += tpm_tis_spi.o diff --git a/drivers/char/tpm/tpm_acpi.c b/drivers/char/tpm/tpm_acpi.c index 4d6c2d7..859bdba 100644 --- a/drivers/char/tpm/tpm_acpi.c +++ b/drivers/char/tpm/tpm_acpi.c @@ -6,6 +6,7 @@ * Stefan Berger <stefanb@us.ibm.com> * Reiner Sailer <sailer@watson.ibm.com> * Kylene Hall <kjhall@us.ibm.com> + * Nayna Jain <nayna@linux.vnet.ibm.com> * * Maintained by: <tpmdd-devel@lists.sourceforge.net> * @@ -45,7 +46,7 @@ struct acpi_tcpa { }; /* read binary bios log */ -int read_log(struct tpm_chip *chip) +int read_log_acpi(struct tpm_chip *chip) { struct acpi_tcpa *buff; acpi_status status; @@ -54,12 +55,6 @@ int read_log(struct tpm_chip *chip) struct tpm_bios_log *log; log = &chip->log; - if (log->bios_event_log != NULL) { - printk(KERN_ERR - "%s: ERROR - Eventlog already initialized\n", - __func__); - return -EFAULT; - } /* Find TCPA entry in RSDT (ACPI_LOGICAL_ADDRESSING) */ status = acpi_get_table(ACPI_SIG_TCPA, 1, diff --git a/drivers/char/tpm/tpm_eventlog.c b/drivers/char/tpm/tpm_eventlog.c index bb142f2..b60c028 100644 --- a/drivers/char/tpm/tpm_eventlog.c +++ b/drivers/char/tpm/tpm_eventlog.c @@ -365,6 +365,24 @@ static int is_bad(void *p) return 0; } +int read_log(struct tpm_chip *chip) +{ + int rc; + + if (chip->log.bios_event_log != NULL) { + dev_dbg(&chip->dev, "%s: ERROR - Eventlog already initialized\n", + __func__); + return -EFAULT; + } + + rc = read_log_acpi(chip); + if ((rc == 0) || (rc == -ENOMEM)) + return rc; + rc = read_log_of(chip); + return rc; + +} + int tpm_bios_log_setup(struct tpm_chip *chip) { const char *name = dev_name(&chip->dev); diff --git a/drivers/char/tpm/tpm_eventlog.h b/drivers/char/tpm/tpm_eventlog.h index 6df2f8e..be529ad 100644 --- a/drivers/char/tpm/tpm_eventlog.h +++ b/drivers/char/tpm/tpm_eventlog.h @@ -73,20 +73,24 @@ enum tcpa_pc_event_ids { HOST_TABLE_OF_DEVICES, }; -int read_log(struct tpm_chip *chip); - -#if defined(CONFIG_TCG_IBMVTPM) || defined(CONFIG_TCG_IBMVTPM_MODULE) || \ - defined(CONFIG_ACPI) -extern int tpm_bios_log_setup(struct tpm_chip *chip); -extern void tpm_bios_log_teardown(struct tpm_chip *chip); +#if defined(CONFIG_ACPI) +int read_log_acpi(struct tpm_chip *chip); #else -static inline int tpm_bios_log_setup(struct tpm_chip *chip) +static inline int read_log_acpi(struct tpm_chip *chip) { - return 0; + return -ENODEV; } -static inline void tpm_bios_log_teardown(struct tpm_chip *chip) +#endif +#if defined(CONFIG_OF) +int read_log_of(struct tpm_chip *chip); +#else +static inline int read_log_of(struct tpm_chip *chip) { + return -ENODEV; } #endif +int tpm_bios_log_setup(struct tpm_chip *chip); +void tpm_bios_log_teardown(struct tpm_chip *chip); + #endif diff --git a/drivers/char/tpm/tpm_of.c b/drivers/char/tpm/tpm_of.c index 68d891a..7c30752 100644 --- a/drivers/char/tpm/tpm_of.c +++ b/drivers/char/tpm/tpm_of.c @@ -2,6 +2,7 @@ * Copyright 2012 IBM Corporation * * Author: Ashley Lai <ashleydlai@gmail.com> + * Nayna Jain <nayna@linux.vnet.ibm.com> * * Maintained by: <tpmdd-devel@lists.sourceforge.net> * @@ -20,7 +21,7 @@ #include "tpm.h" #include "tpm_eventlog.h" -int read_log(struct tpm_chip *chip) +int read_log_of(struct tpm_chip *chip) { struct device_node *np; const u32 *sizep; @@ -28,11 +29,6 @@ int read_log(struct tpm_chip *chip) struct tpm_bios_log *log; log = &chip->log; - if (log->bios_event_log != NULL) { - pr_err("%s: ERROR - Eventlog already initialized\n", __func__); - return -EFAULT; - } - np = of_find_node_by_name(NULL, "vtpm"); if (!np) { pr_err("%s: ERROR - IBMVTPM not supported\n", __func__);