Commit d5837df1 authored by Martin Peres's avatar Martin Peres Committed by Ben Skeggs

drm/nouveau/pwr: add helpers for delay-to-ticks and ticks-to-delay

Signed-off-by: default avatarMartin Peres <martin.peres@free.fr>
Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 2befd17d
...@@ -242,6 +242,80 @@ intr: ...@@ -242,6 +242,80 @@ intr:
bclr $flags $p0 bclr $flags $p0
iret iret
// calculate the number of ticks in the specified nanoseconds delay
//
// $r15 - current
// $r14 - ns
// $r14 - ticks (return)
// $r0 - zero
ticks_from_ns:
push $r12
push $r11
/* try not losing precision (multiply then divide) */
imm32($r13, HW_TICKS_PER_US)
call #mulu32_32_64
/* use an immeditate, it's ok because HW_TICKS_PER_US < 16 bits */
div $r12 $r12 1000
/* check if there wasn't any overflow */
cmpu b32 $r11 0
bra e #ticks_from_ns_quit
/* let's divide then multiply, too bad for the precision! */
div $r14 $r14 1000
imm32($r13, HW_TICKS_PER_US)
call #mulu32_32_64
/* this cannot overflow as long as HW_TICKS_PER_US < 1000 */
ticks_from_ns_quit:
mov b32 $r14 $r12
pop $r11
pop $r12
ret
// calculate the number of ticks in the specified microsecond delay
//
// $r15 - current
// $r14 - us
// $r14 - ticks (return)
// $r0 - zero
ticks_from_us:
push $r12
push $r11
/* simply multiply $us by HW_TICKS_PER_US */
imm32($r13, HW_TICKS_PER_US)
call #mulu32_32_64
mov b32 $r14 $r12
/* check if there wasn't any overflow */
cmpu b32 $r11 0
bra e #ticks_from_us_quit
/* Overflow! */
clear b32 $r14
ticks_from_us_quit:
pop $r11
pop $r12
ret
// calculate the number of ticks in the specified microsecond delay
//
// $r15 - current
// $r14 - ticks
// $r14 - us (return)
// $r0 - zero
ticks_to_us:
/* simply divide $ticks by HW_TICKS_PER_US */
imm32($r13, HW_TICKS_PER_US)
div $r14 $r14 $r13
ret
// request the current process be sent a message after a timeout expires // request the current process be sent a message after a timeout expires
// //
// $r15 - current // $r15 - current
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
*/ */
#define NVKM_PPWR_CHIPSET GK208 #define NVKM_PPWR_CHIPSET GK208
#define HW_TICKS_PER_US 324
#define NVKM_FALCON_PC24 #define NVKM_FALCON_PC24
#define NVKM_FALCON_UNSHIFTED_IO #define NVKM_FALCON_UNSHIFTED_IO
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
*/ */
#define NVKM_PPWR_CHIPSET GT215 #define NVKM_PPWR_CHIPSET GT215
#define HW_TICKS_PER_US 203 // should be 202.5
//#define NVKM_FALCON_PC24 //#define NVKM_FALCON_PC24
//#define NVKM_FALCON_UNSHIFTED_IO //#define NVKM_FALCON_UNSHIFTED_IO
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
*/ */
#define NVKM_PPWR_CHIPSET GF100 #define NVKM_PPWR_CHIPSET GF100
#define HW_TICKS_PER_US 203 // should be 202.5
//#define NVKM_FALCON_PC24 //#define NVKM_FALCON_PC24
//#define NVKM_FALCON_UNSHIFTED_IO //#define NVKM_FALCON_UNSHIFTED_IO
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
*/ */
#define NVKM_PPWR_CHIPSET GF119 #define NVKM_PPWR_CHIPSET GF119
#define HW_TICKS_PER_US 324
//#define NVKM_FALCON_PC24 //#define NVKM_FALCON_PC24
#define NVKM_FALCON_UNSHIFTED_IO #define NVKM_FALCON_UNSHIFTED_IO
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment