Discussion:
[edk2] [PATCH] EmbeddedPkg: fix PcdTimerPeriod value
Haojian Zhuang
2015-07-13 14:25:12 UTC
Permalink
Fix PcdTimerPeriod from 100,000 to 10,000. Since the unit base of
PcdTimerPeriod is 100ns.

100,000 * 100ns = 10ms (interval of hardware timer interrupt)
10,1000 * 100ns = 1ms (interval of hardware timer interrupt)

In GRUB, the required timer granularity is only 1ms. If interval of
hardware timer interrupt is 10ms in UEFI, GRUB will only get all
timer granularity >= 10ms. At least, the timeout of boot menu in
GRUB is much slower. Only the interval of hardware timer interrupt
is 1ms in UEFI, the timeout of boot menu in GRUB works well.

Signed-off-by: Haojian Zhuang <***@linaro.org>
---
ArmPlatformPkg/ArmRealViewEbPkg/ArmRealViewEb-RTSM-A8.dsc | 2 +-
ArmPlatformPkg/ArmRealViewEbPkg/ArmRealViewEb-RTSM-A9x2.dsc | 2 +-
ArmPlatformPkg/ArmVExpressPkg/ArmVExpress-CTA9x4.dsc | 2 +-
ArmPlatformPkg/ArmVExpressPkg/ArmVExpress-RTSM-A9x4.dsc | 2 +-
BeagleBoardPkg/BeagleBoardPkg.dsc | 2 +-
EmbeddedPkg/EmbeddedPkg.dec | 2 +-
EmbeddedPkg/EmbeddedPkg.dsc | 2 +-
Omap35xxPkg/Omap35xxPkg.dsc | 2 +-
8 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/ArmPlatformPkg/ArmRealViewEbPkg/ArmRealViewEb-RTSM-A8.dsc b/ArmPlatformPkg/ArmRealViewEbPkg/ArmRealViewEb-RTSM-A8.dsc
index a64f2df..2b13fd7 100644
--- a/ArmPlatformPkg/ArmRealViewEbPkg/ArmRealViewEb-RTSM-A8.dsc
+++ b/ArmPlatformPkg/ArmRealViewEbPkg/ArmRealViewEb-RTSM-A8.dsc
@@ -105,7 +105,7 @@

## SP804 Timer
gEmbeddedTokenSpaceGuid.PcdEmbeddedPerformanceCounterFrequencyInHz|1000000
- gEmbeddedTokenSpaceGuid.PcdTimerPeriod|100000 # expressed in 100ns units, 100,000 x 100 ns = 10,000,000 ns = 10 ms
+ gEmbeddedTokenSpaceGuid.PcdTimerPeriod|10000 # expressed in 100ns units, 10,000 x 100 ns = 1,000,000 ns = 1 ms
gArmPlatformTokenSpaceGuid.PcdSP804TimerPeriodicInterruptNum|36
gArmPlatformTokenSpaceGuid.PcdSP804TimerPeriodicBase|0x10011000
gArmPlatformTokenSpaceGuid.PcdSP804TimerMetronomeBase|0x10011020
diff --git a/ArmPlatformPkg/ArmRealViewEbPkg/ArmRealViewEb-RTSM-A9x2.dsc b/ArmPlatformPkg/ArmRealViewEbPkg/ArmRealViewEb-RTSM-A9x2.dsc
index a4bffb3..e5ec8d4 100644
--- a/ArmPlatformPkg/ArmRealViewEbPkg/ArmRealViewEb-RTSM-A9x2.dsc
+++ b/ArmPlatformPkg/ArmRealViewEbPkg/ArmRealViewEb-RTSM-A9x2.dsc
@@ -104,7 +104,7 @@

## SP804 Timer
gEmbeddedTokenSpaceGuid.PcdEmbeddedPerformanceCounterFrequencyInHz|1000000
- gEmbeddedTokenSpaceGuid.PcdTimerPeriod|100000 # expressed in 100ns units, 100,000 x 100 ns = 10,000,000 ns = 10 ms
+ gEmbeddedTokenSpaceGuid.PcdTimerPeriod|10000 # expressed in 100ns units, 10,000 x 100 ns = 1,000,000 ns = 1 ms
gArmPlatformTokenSpaceGuid.PcdSP804TimerPeriodicInterruptNum|33
gArmPlatformTokenSpaceGuid.PcdSP804TimerPeriodicBase|0x10011000
gArmPlatformTokenSpaceGuid.PcdSP804TimerMetronomeBase|0x10011020
diff --git a/ArmPlatformPkg/ArmVExpressPkg/ArmVExpress-CTA9x4.dsc b/ArmPlatformPkg/ArmVExpressPkg/ArmVExpress-CTA9x4.dsc
index ad4e7bf..248e54f 100644
--- a/ArmPlatformPkg/ArmVExpressPkg/ArmVExpress-CTA9x4.dsc
+++ b/ArmPlatformPkg/ArmVExpressPkg/ArmVExpress-CTA9x4.dsc
@@ -138,7 +138,7 @@

## SP804 Timer
gEmbeddedTokenSpaceGuid.PcdEmbeddedPerformanceCounterFrequencyInHz|1000000
- gEmbeddedTokenSpaceGuid.PcdTimerPeriod|100000 # expressed in 100ns units, 100,000 x 100 ns = 10,000,000 ns = 10 ms
+ gEmbeddedTokenSpaceGuid.PcdTimerPeriod|10000 # expressed in 100ns units, 10,000 x 100 ns = 1,000,000 ns = 1 ms
gArmPlatformTokenSpaceGuid.PcdSP804TimerPeriodicInterruptNum|34
gArmPlatformTokenSpaceGuid.PcdSP804TimerPeriodicBase|0x10011000
gArmPlatformTokenSpaceGuid.PcdSP804TimerPerformanceBase|0x10011020
diff --git a/ArmPlatformPkg/ArmVExpressPkg/ArmVExpress-RTSM-A9x4.dsc b/ArmPlatformPkg/ArmVExpressPkg/ArmVExpress-RTSM-A9x4.dsc
index 14d0cf5..d6870dc 100644
--- a/ArmPlatformPkg/ArmVExpressPkg/ArmVExpress-RTSM-A9x4.dsc
+++ b/ArmPlatformPkg/ArmVExpressPkg/ArmVExpress-RTSM-A9x4.dsc
@@ -128,7 +128,7 @@

## SP804 Timer
gEmbeddedTokenSpaceGuid.PcdEmbeddedPerformanceCounterFrequencyInHz|1000000
- gEmbeddedTokenSpaceGuid.PcdTimerPeriod|100000 # expressed in 100ns units, 100,000 x 100 ns = 10,000,000 ns = 10 ms
+ gEmbeddedTokenSpaceGuid.PcdTimerPeriod|10000 # expressed in 100ns units, 10,000 x 100 ns = 1,000,000 ns = 1 ms
gArmPlatformTokenSpaceGuid.PcdSP804TimerPeriodicInterruptNum|34
gArmPlatformTokenSpaceGuid.PcdSP804TimerPeriodicBase|0x1c110000
gArmPlatformTokenSpaceGuid.PcdSP804TimerPerformanceBase|0x1c110020
diff --git a/BeagleBoardPkg/BeagleBoardPkg.dsc b/BeagleBoardPkg/BeagleBoardPkg.dsc
index 9eb364e..375f03c 100644
--- a/BeagleBoardPkg/BeagleBoardPkg.dsc
+++ b/BeagleBoardPkg/BeagleBoardPkg.dsc
@@ -341,7 +341,7 @@
gArmTokenSpaceGuid.PcdCpuVectorBaseAddress|0x80008000
gArmTokenSpaceGuid.PcdCpuResetAddress|0x80008000

- gEmbeddedTokenSpaceGuid.PcdTimerPeriod|100000
+ gEmbeddedTokenSpaceGuid.PcdTimerPeriod|10000
gEmbeddedTokenSpaceGuid.PcdEmbeddedPerformanceCounterPeriodInNanoseconds|77
gEmbeddedTokenSpaceGuid.PcdEmbeddedPerformanceCounterFrequencyInHz|13000000

diff --git a/EmbeddedPkg/EmbeddedPkg.dec b/EmbeddedPkg/EmbeddedPkg.dec
index f557527..9f113fc 100644
--- a/EmbeddedPkg/EmbeddedPkg.dec
+++ b/EmbeddedPkg/EmbeddedPkg.dec
@@ -121,7 +121,7 @@

gEmbeddedTokenSpaceGuid.PcdTimerBaseAddress|0x3c700000|UINT32|0x0000001c
gEmbeddedTokenSpaceGuid.PcdTimerVector|7|UINT32|0x0000001d
- gEmbeddedTokenSpaceGuid.PcdTimerPeriod|100000|UINT32|0x0000001e
+ gEmbeddedTokenSpaceGuid.PcdTimerPeriod|10000|UINT32|0x0000001e
gEmbeddedTokenSpaceGuid.PcdInterruptBaseAddress|0x38e00000|UINT32|0x0000001f

gEmbeddedTokenSpaceGuid.PcdMetronomeTickPeriod|100|UINT32|0x00000020
diff --git a/EmbeddedPkg/EmbeddedPkg.dsc b/EmbeddedPkg/EmbeddedPkg.dsc
index 6719eea..2005d8f 100644
--- a/EmbeddedPkg/EmbeddedPkg.dsc
+++ b/EmbeddedPkg/EmbeddedPkg.dsc
@@ -219,7 +219,7 @@
#
gEmbeddedTokenSpaceGuid.PcdTimerBaseAddress|0x3c700000
gEmbeddedTokenSpaceGuid.PcdTimerVector|7
- gEmbeddedTokenSpaceGuid.PcdTimerPeriod|100000
+ gEmbeddedTokenSpaceGuid.PcdTimerPeriod|10000

[PcdsFixedAtBuild.IPF]
gEfiMdePkgTokenSpaceGuid.PcdIoBlockBaseAddressForIpf|0x0ffffc000000
diff --git a/Omap35xxPkg/Omap35xxPkg.dsc b/Omap35xxPkg/Omap35xxPkg.dsc
index 8d8f521..cd963f3 100644
--- a/Omap35xxPkg/Omap35xxPkg.dsc
+++ b/Omap35xxPkg/Omap35xxPkg.dsc
@@ -157,7 +157,7 @@
# Timers
gOmap35xxTokenSpaceGuid.PcdOmap35xxArchTimer|3
gOmap35xxTokenSpaceGuid.PcdOmap35xxFreeTimer|4
- gEmbeddedTokenSpaceGuid.PcdTimerPeriod|100000
+ gEmbeddedTokenSpaceGuid.PcdTimerPeriod|10000
gEmbeddedTokenSpaceGuid.PcdEmbeddedPerformanceCounterPeriodInNanoseconds|77
gEmbeddedTokenSpaceGuid.PcdEmbeddedPerformanceCounterFrequencyInHz|13000000
--
2.1.4
Leif Lindholm
2015-07-13 15:04:27 UTC
Permalink
Thanks Haojian,

A few comments below. It looks sane to me, but the patches to
individual platforms may need some testing.

As a note to my future self, I should go through these platforms and
delete the default timer period from the platform-specific config
files and get it from a central config file instead.

/
Leif
Post by Haojian Zhuang
Fix PcdTimerPeriod from 100,000 to 10,000. Since the unit base of
PcdTimerPeriod is 100ns.
100,000 * 100ns = 10ms (interval of hardware timer interrupt)
10,1000 * 100ns = 1ms (interval of hardware timer interrupt)
10,000
Post by Haojian Zhuang
In GRUB, the required timer granularity is only 1ms. If interval of
hardware timer interrupt is 10ms in UEFI, GRUB will only get all
timer granularity >= 10ms. At least, the timeout of boot menu in
GRUB is much slower. Only the interval of hardware timer interrupt
is 1ms in UEFI, the timeout of boot menu in GRUB works well.
I would add that this is something that needs to be better handled in
GRUB as well (which I'm working on), but changing the default solves
the problem in the current versions of GRUB (and a 1ms timer
granularity is nice to have anyway).

Contributions to EDK2 must contain a contributed-under tag - like so:
Contributed-under: TianoCore Contribution Agreement 1.0
Post by Haojian Zhuang
---
Also, since EDK2 coding style mandates DOS-style line endings, these
get corrupted when sending a patch inline in an email. This is still
my preferred way of doing it, for reviewing purposes. But it can be
helpful to also put (after the ---) a link to the patch or patch
series in your personal git tree - so that people can access an
uncorrupted version of your patch.
Post by Haojian Zhuang
ArmPlatformPkg/ArmRealViewEbPkg/ArmRealViewEb-RTSM-A8.dsc | 2 +-
ArmPlatformPkg/ArmRealViewEbPkg/ArmRealViewEb-RTSM-A9x2.dsc | 2 +-
ArmPlatformPkg/ArmVExpressPkg/ArmVExpress-CTA9x4.dsc | 2 +-
ArmPlatformPkg/ArmVExpressPkg/ArmVExpress-RTSM-A9x4.dsc | 2 +-
BeagleBoardPkg/BeagleBoardPkg.dsc | 2 +-
EmbeddedPkg/EmbeddedPkg.dec | 2 +-
EmbeddedPkg/EmbeddedPkg.dsc | 2 +-
Omap35xxPkg/Omap35xxPkg.dsc | 2 +-
8 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/ArmPlatformPkg/ArmRealViewEbPkg/ArmRealViewEb-RTSM-A8.dsc b/ArmPlatformPkg/ArmRealViewEbPkg/ArmRealViewEb-RTSM-A8.dsc
index a64f2df..2b13fd7 100644
--- a/ArmPlatformPkg/ArmRealViewEbPkg/ArmRealViewEb-RTSM-A8.dsc
+++ b/ArmPlatformPkg/ArmRealViewEbPkg/ArmRealViewEb-RTSM-A8.dsc
@@ -105,7 +105,7 @@
## SP804 Timer
gEmbeddedTokenSpaceGuid.PcdEmbeddedPerformanceCounterFrequencyInHz|1000000
- gEmbeddedTokenSpaceGuid.PcdTimerPeriod|100000 # expressed in 100ns units, 100,000 x 100 ns = 10,000,000 ns = 10 ms
+ gEmbeddedTokenSpaceGuid.PcdTimerPeriod|10000 # expressed in 100ns units, 10,000 x 100 ns = 1,000,000 ns = 1 ms
gArmPlatformTokenSpaceGuid.PcdSP804TimerPeriodicInterruptNum|36
gArmPlatformTokenSpaceGuid.PcdSP804TimerPeriodicBase|0x10011000
gArmPlatformTokenSpaceGuid.PcdSP804TimerMetronomeBase|0x10011020
diff --git a/ArmPlatformPkg/ArmRealViewEbPkg/ArmRealViewEb-RTSM-A9x2.dsc b/ArmPlatformPkg/ArmRealViewEbPkg/ArmRealViewEb-RTSM-A9x2.dsc
index a4bffb3..e5ec8d4 100644
--- a/ArmPlatformPkg/ArmRealViewEbPkg/ArmRealViewEb-RTSM-A9x2.dsc
+++ b/ArmPlatformPkg/ArmRealViewEbPkg/ArmRealViewEb-RTSM-A9x2.dsc
@@ -104,7 +104,7 @@
## SP804 Timer
gEmbeddedTokenSpaceGuid.PcdEmbeddedPerformanceCounterFrequencyInHz|1000000
- gEmbeddedTokenSpaceGuid.PcdTimerPeriod|100000 # expressed in 100ns units, 100,000 x 100 ns = 10,000,000 ns = 10 ms
+ gEmbeddedTokenSpaceGuid.PcdTimerPeriod|10000 # expressed in 100ns units, 10,000 x 100 ns = 1,000,000 ns = 1 ms
gArmPlatformTokenSpaceGuid.PcdSP804TimerPeriodicInterruptNum|33
gArmPlatformTokenSpaceGuid.PcdSP804TimerPeriodicBase|0x10011000
gArmPlatformTokenSpaceGuid.PcdSP804TimerMetronomeBase|0x10011020
diff --git a/ArmPlatformPkg/ArmVExpressPkg/ArmVExpress-CTA9x4.dsc b/ArmPlatformPkg/ArmVExpressPkg/ArmVExpress-CTA9x4.dsc
index ad4e7bf..248e54f 100644
--- a/ArmPlatformPkg/ArmVExpressPkg/ArmVExpress-CTA9x4.dsc
+++ b/ArmPlatformPkg/ArmVExpressPkg/ArmVExpress-CTA9x4.dsc
@@ -138,7 +138,7 @@
## SP804 Timer
gEmbeddedTokenSpaceGuid.PcdEmbeddedPerformanceCounterFrequencyInHz|1000000
- gEmbeddedTokenSpaceGuid.PcdTimerPeriod|100000 # expressed in 100ns units, 100,000 x 100 ns = 10,000,000 ns = 10 ms
+ gEmbeddedTokenSpaceGuid.PcdTimerPeriod|10000 # expressed in 100ns units, 10,000 x 100 ns = 1,000,000 ns = 1 ms
gArmPlatformTokenSpaceGuid.PcdSP804TimerPeriodicInterruptNum|34
gArmPlatformTokenSpaceGuid.PcdSP804TimerPeriodicBase|0x10011000
gArmPlatformTokenSpaceGuid.PcdSP804TimerPerformanceBase|0x10011020
diff --git a/ArmPlatformPkg/ArmVExpressPkg/ArmVExpress-RTSM-A9x4.dsc b/ArmPlatformPkg/ArmVExpressPkg/ArmVExpress-RTSM-A9x4.dsc
index 14d0cf5..d6870dc 100644
--- a/ArmPlatformPkg/ArmVExpressPkg/ArmVExpress-RTSM-A9x4.dsc
+++ b/ArmPlatformPkg/ArmVExpressPkg/ArmVExpress-RTSM-A9x4.dsc
@@ -128,7 +128,7 @@
## SP804 Timer
gEmbeddedTokenSpaceGuid.PcdEmbeddedPerformanceCounterFrequencyInHz|1000000
- gEmbeddedTokenSpaceGuid.PcdTimerPeriod|100000 # expressed in 100ns units, 100,000 x 100 ns = 10,000,000 ns = 10 ms
+ gEmbeddedTokenSpaceGuid.PcdTimerPeriod|10000 # expressed in 100ns units, 10,000 x 100 ns = 1,000,000 ns = 1 ms
gArmPlatformTokenSpaceGuid.PcdSP804TimerPeriodicInterruptNum|34
gArmPlatformTokenSpaceGuid.PcdSP804TimerPeriodicBase|0x1c110000
gArmPlatformTokenSpaceGuid.PcdSP804TimerPerformanceBase|0x1c110020
diff --git a/BeagleBoardPkg/BeagleBoardPkg.dsc b/BeagleBoardPkg/BeagleBoardPkg.dsc
index 9eb364e..375f03c 100644
--- a/BeagleBoardPkg/BeagleBoardPkg.dsc
+++ b/BeagleBoardPkg/BeagleBoardPkg.dsc
@@ -341,7 +341,7 @@
gArmTokenSpaceGuid.PcdCpuVectorBaseAddress|0x80008000
gArmTokenSpaceGuid.PcdCpuResetAddress|0x80008000
- gEmbeddedTokenSpaceGuid.PcdTimerPeriod|100000
+ gEmbeddedTokenSpaceGuid.PcdTimerPeriod|10000
gEmbeddedTokenSpaceGuid.PcdEmbeddedPerformanceCounterPeriodInNanoseconds|77
gEmbeddedTokenSpaceGuid.PcdEmbeddedPerformanceCounterFrequencyInHz|13000000
diff --git a/EmbeddedPkg/EmbeddedPkg.dec b/EmbeddedPkg/EmbeddedPkg.dec
index f557527..9f113fc 100644
--- a/EmbeddedPkg/EmbeddedPkg.dec
+++ b/EmbeddedPkg/EmbeddedPkg.dec
@@ -121,7 +121,7 @@
gEmbeddedTokenSpaceGuid.PcdTimerBaseAddress|0x3c700000|UINT32|0x0000001c
gEmbeddedTokenSpaceGuid.PcdTimerVector|7|UINT32|0x0000001d
- gEmbeddedTokenSpaceGuid.PcdTimerPeriod|100000|UINT32|0x0000001e
+ gEmbeddedTokenSpaceGuid.PcdTimerPeriod|10000|UINT32|0x0000001e
gEmbeddedTokenSpaceGuid.PcdInterruptBaseAddress|0x38e00000|UINT32|0x0000001f
gEmbeddedTokenSpaceGuid.PcdMetronomeTickPeriod|100|UINT32|0x00000020
diff --git a/EmbeddedPkg/EmbeddedPkg.dsc b/EmbeddedPkg/EmbeddedPkg.dsc
index 6719eea..2005d8f 100644
--- a/EmbeddedPkg/EmbeddedPkg.dsc
+++ b/EmbeddedPkg/EmbeddedPkg.dsc
@@ -219,7 +219,7 @@
#
gEmbeddedTokenSpaceGuid.PcdTimerBaseAddress|0x3c700000
gEmbeddedTokenSpaceGuid.PcdTimerVector|7
- gEmbeddedTokenSpaceGuid.PcdTimerPeriod|100000
+ gEmbeddedTokenSpaceGuid.PcdTimerPeriod|10000
[PcdsFixedAtBuild.IPF]
gEfiMdePkgTokenSpaceGuid.PcdIoBlockBaseAddressForIpf|0x0ffffc000000
diff --git a/Omap35xxPkg/Omap35xxPkg.dsc b/Omap35xxPkg/Omap35xxPkg.dsc
index 8d8f521..cd963f3 100644
--- a/Omap35xxPkg/Omap35xxPkg.dsc
+++ b/Omap35xxPkg/Omap35xxPkg.dsc
@@ -157,7 +157,7 @@
# Timers
gOmap35xxTokenSpaceGuid.PcdOmap35xxArchTimer|3
gOmap35xxTokenSpaceGuid.PcdOmap35xxFreeTimer|4
- gEmbeddedTokenSpaceGuid.PcdTimerPeriod|100000
+ gEmbeddedTokenSpaceGuid.PcdTimerPeriod|10000
gEmbeddedTokenSpaceGuid.PcdEmbeddedPerformanceCounterPeriodInNanoseconds|77
gEmbeddedTokenSpaceGuid.PcdEmbeddedPerformanceCounterFrequencyInHz|13000000
--
2.1.4
Haojian Zhuang
2015-07-14 02:05:14 UTC
Permalink
Post by Leif Lindholm
Thanks Haojian,
A few comments below. It looks sane to me, but the patches to
individual platforms may need some testing.
As a note to my future self, I should go through these platforms and
delete the default timer period from the platform-specific config
files and get it from a central config file instead.
/
Leif
Post by Haojian Zhuang
Fix PcdTimerPeriod from 100,000 to 10,000. Since the unit base of
PcdTimerPeriod is 100ns.
100,000 * 100ns = 10ms (interval of hardware timer interrupt)
10,1000 * 100ns = 1ms (interval of hardware timer interrupt)
10,000
Thanks for catching it. I'll deliver the next version to fix it.
Post by Leif Lindholm
Post by Haojian Zhuang
In GRUB, the required timer granularity is only 1ms. If interval of
hardware timer interrupt is 10ms in UEFI, GRUB will only get all
timer granularity >= 10ms. At least, the timeout of boot menu in
GRUB is much slower. Only the interval of hardware timer interrupt
is 1ms in UEFI, the timeout of boot menu in GRUB works well.
I would add that this is something that needs to be better handled in
GRUB as well (which I'm working on), but changing the default solves
the problem in the current versions of GRUB (and a 1ms timer
granularity is nice to have anyway).
After thinking a while, I think that we needn't to handle it in GRUB.

Aarch64 requires generic timer at least 1MHz. And SP804 is always
working in 1MHz in UEFI.

1 / 1MHz = 1us
1 / 1ms = 1KHz

And in current embedded SoC solutions, the lowest frequency of hardware
timer is 32.768KHz. So all of them could meet the requirement of timer
granularity = 1ms.
Post by Leif Lindholm
Contributed-under: TianoCore Contribution Agreement 1.0
Thanks. I'll append them.
Post by Leif Lindholm
Post by Haojian Zhuang
---
Also, since EDK2 coding style mandates DOS-style line endings, these
get corrupted when sending a patch inline in an email. This is still
my preferred way of doing it, for reviewing purposes. But it can be
helpful to also put (after the ---) a link to the patch or patch
series in your personal git tree - so that people can access an
uncorrupted version of your patch.
I'll append the link.

Regards
Haojian
Leif Lindholm
2015-07-14 11:42:39 UTC
Permalink
Post by Haojian Zhuang
Post by Leif Lindholm
Post by Haojian Zhuang
In GRUB, the required timer granularity is only 1ms. If interval of
hardware timer interrupt is 10ms in UEFI, GRUB will only get all
timer granularity >= 10ms. At least, the timeout of boot menu in
GRUB is much slower. Only the interval of hardware timer interrupt
is 1ms in UEFI, the timeout of boot menu in GRUB works well.
I would add that this is something that needs to be better handled in
GRUB as well (which I'm working on), but changing the default solves
the problem in the current versions of GRUB (and a 1ms timer
granularity is nice to have anyway).
After thinking a while, I think that we needn't to handle it in GRUB.
Aarch64 requires generic timer at least 1MHz. And SP804 is always
working in 1MHz in UEFI.
1 / 1MHz = 1us
1 / 1ms = 1KHz
And in current embedded SoC solutions, the lowest frequency of hardware
timer is 32.768KHz. So all of them could meet the requirement of timer
granularity = 1ms.
Yes, they certainly can.
However, we cannot force all platforms to comply - so GRUB still needs
to be able to do something sane (or at least warn that something is
amiss).

Regards,

Leif

Loading...