summaryrefslogtreecommitdiffstats
path: root/drivers/clocksource
diff options
context:
space:
mode:
authorJean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>2017-03-03 13:34:03 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2017-03-09 07:36:15 +0100
commitda11bd9d6028b811732e98bc8cbf3e00b7a1f2b3 (patch)
treeca93e81132d363be2e77e48de36ea0a026b010c4 /drivers/clocksource
parent8972eb7ff17ad058a6c6018305bb912138ab0ca2 (diff)
downloadbarebox-da11bd9d6028b811732e98bc8cbf3e00b7a1f2b3.tar.gz
barebox-da11bd9d6028b811732e98bc8cbf3e00b7a1f2b3.tar.xz
efi: move x86 clocksource to device/driver
so we can dynamicly register the device As we may need to use HW IP for clocksource. As on EFI we could use Timestamp GUID if present (Not often the case as it's not even enabled by default on any Target on EDK II not even OVMF) Or if we choose we could use a Simulated Timestamp driver that work on Event (Add Later) Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/clocksource')
-rw-r--r--drivers/clocksource/Kconfig6
-rw-r--r--drivers/clocksource/Makefile2
-rw-r--r--drivers/clocksource/efi_x86.c (renamed from drivers/clocksource/efi.c)34
3 files changed, 30 insertions, 12 deletions
diff --git a/drivers/clocksource/Kconfig b/drivers/clocksource/Kconfig
index 54b05bbf3b..9b7f0a9d7f 100644
--- a/drivers/clocksource/Kconfig
+++ b/drivers/clocksource/Kconfig
@@ -34,9 +34,9 @@ config CLOCKSOURCE_DUMMY_RATE
The option CONFIG_CLOCKSOURCE_DUMMY_RATE is used to adjust this clocksource.
The bigger rate valuest makes clocksource "faster".
-config CLOCKSOURCE_EFI
- bool
- depends on EFI_BOOTUP
+config CLOCKSOURCE_EFI_X86
+ bool "EFI X86 HW driver"
+ depends on EFI_BOOTUP && X86
config CLOCKSOURCE_MVEBU
bool
diff --git a/drivers/clocksource/Makefile b/drivers/clocksource/Makefile
index e83fdeeec2..1fd18296ea 100644
--- a/drivers/clocksource/Makefile
+++ b/drivers/clocksource/Makefile
@@ -3,7 +3,7 @@ obj-$(CONFIG_ARM_SMP_TWD) += arm_smp_twd.o
obj-$(CONFIG_CLOCKSOURCE_BCM283X) += bcm2835.o
obj-$(CONFIG_CLOCKSOURCE_CLPS711X) += clps711x.o
obj-$(CONFIG_CLOCKSOURCE_DIGIC) += digic.o
-obj-$(CONFIG_CLOCKSOURCE_EFI) += efi.o
+obj-$(CONFIG_CLOCKSOURCE_EFI_X86) += efi_x86.o
obj-$(CONFIG_CLOCKSOURCE_MVEBU) += mvebu.o
obj-$(CONFIG_CLOCKSOURCE_NOMADIK) += nomadik.o
obj-$(CONFIG_CLOCKSOURCE_ORION) += orion.o
diff --git a/drivers/clocksource/efi.c b/drivers/clocksource/efi_x86.c
index 6d2fee8eba..4d2657ea1d 100644
--- a/drivers/clocksource/efi.c
+++ b/drivers/clocksource/efi_x86.c
@@ -1,5 +1,6 @@
#include <common.h>
#include <init.h>
+#include <driver.h>
#include <efi.h>
#include <efi/efi.h>
#include <clock.h>
@@ -38,24 +39,41 @@ static uint64_t ticks_freq(void)
return (ticks_end - ticks_start) * 1000;
}
-static uint64_t efi_clocksource_read(void)
+static uint64_t efi_x86_cs_read(void)
{
return 1000 * 1000 * ticks_read() / freq;
}
-static struct clocksource cs = {
- .read = efi_clocksource_read,
+static int efi_x86_cs_init(struct clocksource *cs)
+{
+ cs->mult = clocksource_hz2mult(1000 * 1000, cs->shift);
+
+ freq = ticks_freq();
+
+ return 0;
+}
+
+static struct clocksource efi_x86_cs = {
+ .read = efi_x86_cs_read,
.mask = CLOCKSOURCE_MASK(64),
.shift = 0,
+ .priority = 100,
+ .init = efi_x86_cs_init,
};
-static int efi_clocksource_init(void)
+static int efi_x86_cs_probe(struct device_d *dev)
{
- cs.mult = clocksource_hz2mult(1000 * 1000, cs.shift);
+ return init_clock(&efi_x86_cs);
+}
- freq = ticks_freq();
+static struct driver_d efi_x86_cs_driver = {
+ .name = "efi-cs-x86",
+ .probe = efi_x86_cs_probe,
+};
- return init_clock(&cs);
+static int efi_x86_cs_initcall(void)
+{
+ return platform_driver_register(&efi_x86_cs_driver);
}
/* for efi the time must be init at core initcall level */
-core_initcall(efi_clocksource_init);
+core_initcall(efi_x86_cs_initcall);