diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Kconfig | 1 | ||||
-rw-r--r-- | lib/fdtdec.c | 14 | ||||
-rw-r--r-- | lib/time.c | 49 | ||||
-rw-r--r-- | lib/tpm.c | 20 |
4 files changed, 60 insertions, 24 deletions
diff --git a/lib/Kconfig b/lib/Kconfig index a8f8460d1d..30e84ed315 100644 --- a/lib/Kconfig +++ b/lib/Kconfig @@ -56,6 +56,7 @@ source lib/rsa/Kconfig config TPM bool "Trusted Platform Module (TPM) Support" + depends on DM help This enables support for TPMs which can be used to provide security features for your board. The TPM can be connected via LPC or I2C diff --git a/lib/fdtdec.c b/lib/fdtdec.c index 1a86369934..9db033ae73 100644 --- a/lib/fdtdec.c +++ b/lib/fdtdec.c @@ -219,13 +219,13 @@ int fdtdec_get_pci_addr(const void *blob, int node, enum fdt_pci_space type, for (i = 0; i < num; i++) { debug("pci address #%d: %08lx %08lx %08lx\n", i, - (ulong)fdt_addr_to_cpu(cell[0]), - (ulong)fdt_addr_to_cpu(cell[1]), - (ulong)fdt_addr_to_cpu(cell[2])); - if ((fdt_addr_to_cpu(*cell) & type) == type) { - addr->phys_hi = fdt_addr_to_cpu(cell[0]); - addr->phys_mid = fdt_addr_to_cpu(cell[1]); - addr->phys_lo = fdt_addr_to_cpu(cell[2]); + (ulong)fdt32_to_cpu(cell[0]), + (ulong)fdt32_to_cpu(cell[1]), + (ulong)fdt32_to_cpu(cell[2])); + if ((fdt32_to_cpu(*cell) & type) == type) { + addr->phys_hi = fdt32_to_cpu(cell[0]); + addr->phys_mid = fdt32_to_cpu(cell[1]); + addr->phys_lo = fdt32_to_cpu(cell[1]); break; } else { cell += (FDT_PCI_ADDR_CELLS + diff --git a/lib/time.c b/lib/time.c index 477440de16..b001745203 100644 --- a/lib/time.c +++ b/lib/time.c @@ -6,6 +6,9 @@ */ #include <common.h> +#include <dm.h> +#include <errno.h> +#include <timer.h> #include <watchdog.h> #include <div64.h> #include <asm/io.h> @@ -37,6 +40,52 @@ unsigned long notrace timer_read_counter(void) extern unsigned long __weak timer_read_counter(void); #endif +#ifdef CONFIG_TIMER +static int notrace dm_timer_init(void) +{ + struct udevice *dev; + int ret; + + if (!gd->timer) { + ret = uclass_first_device(UCLASS_TIMER, &dev); + if (ret) + return ret; + if (!dev) + return -ENODEV; + gd->timer = dev; + } + + return 0; +} + +ulong notrace get_tbclk(void) +{ + int ret; + + ret = dm_timer_init(); + if (ret) + return ret; + + return timer_get_rate(gd->timer); +} + +unsigned long notrace timer_read_counter(void) +{ + unsigned long count; + int ret; + + ret = dm_timer_init(); + if (ret) + return ret; + + ret = timer_get_count(gd->timer, &count); + if (ret) + return ret; + + return count; +} +#endif /* CONFIG_TIMER */ + uint64_t __weak notrace get_ticks(void) { unsigned long now = timer_read_counter(); @@ -7,7 +7,6 @@ #include <common.h> #include <dm.h> -#include <tis.h> #include <tpm.h> #include <asm/unaligned.h> #include <u-boot/sha1.h> @@ -230,6 +229,8 @@ static uint32_t tpm_return_code(const void *response) static uint32_t tpm_sendrecv_command(const void *command, void *response, size_t *size_ptr) { + struct udevice *dev; + int ret; uint8_t response_buffer[COMMAND_BUFFER_SIZE]; size_t response_length; uint32_t err; @@ -240,19 +241,13 @@ static uint32_t tpm_sendrecv_command(const void *command, response = response_buffer; response_length = sizeof(response_buffer); } -#ifdef CONFIG_DM_TPM - struct udevice *dev; - int ret; ret = uclass_first_device(UCLASS_TPM, &dev); if (ret) return ret; err = tpm_xfer(dev, command, tpm_command_size(command), response, &response_length); -#else - err = tis_sendrecv(command, tpm_command_size(command), - response, &response_length); -#endif + if (err < 0) return TPM_LIB_ERROR; if (size_ptr) @@ -264,21 +259,12 @@ static uint32_t tpm_sendrecv_command(const void *command, int tpm_init(void) { int err; - -#ifdef CONFIG_DM_TPM struct udevice *dev; err = uclass_first_device(UCLASS_TPM, &dev); if (err) return err; return tpm_open(dev); -#else - err = tis_init(); - if (err) - return err; - - return tis_open(); -#endif } uint32_t tpm_startup(enum tpm_startup_type mode) |