coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
hpet.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <arch/hpet.h>
5 #include <stdint.h>
6 
7 #include "hpet.h"
8 
9 #define HPTC 0x3404
10 
11 #define HPET32(x) (*((volatile u32 *)(HPET_BASE_ADDRESS + (x))))
12 
13 void enable_hpet(void)
14 {
15  u32 reg32;
16  reg32 = RCBA32(HPTC);
17  reg32 &= ~0x03;
18  reg32 |= (1 << 7);
19  RCBA32(HPTC) = reg32;
20  /* Read back for posted write to take effect */
21  RCBA32(HPTC);
22  HPET32(0x10) = HPET32(0x10) | 1;
23 }
24 
26 {
27  u32 start, finish, now;
28 
29  delay *= 15; /* now in usec */
30 
31  start = HPET32(0xf0);
32  finish = start + delay;
33  while (1) {
34  now = HPET32(0xf0);
35  if (finish > start) {
36  if (now >= finish)
37  break;
38  } else {
39  if ((now < start) && (now >= finish))
40  break;
41  }
42  }
43 }
void delay(unsigned int secs)
Definition: delay.c:8
#define HPET32(x)
Definition: hpet.c:11
#define HPTC
Definition: hpet.c:9
void enable_hpet(void)
Definition: hpet.c:13
void hpet_udelay(u32 delay)
Definition: hpet.c:25
#define RCBA32(x)
Definition: rcba.h:14
uint32_t u32
Definition: stdint.h:51