Subversion Repositories Kolibri OS

Rev

Rev 3531 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3531 Rev 3573
Line 56... Line 56...
56
;;
56
;;
57
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
57
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Line 58... Line 58...
58
 
58
 
Line 59... Line 59...
59
include 'macros.inc'
59
include 'macros.inc'
Line 60... Line 60...
60
 
60
 
Line 61... Line 61...
61
$Revision: 3531 $
61
$Revision: 3573 $
Line 626... Line 626...
626
	mov eax, [def_cursor]
626
	mov eax, [def_cursor]
627
	mov [SLOT_BASE+APPDATA.cursor],eax
627
	mov [SLOT_BASE+APPDATA.cursor],eax
628
	mov [SLOT_BASE+APPDATA.cursor+256],eax
628
	mov [SLOT_BASE+APPDATA.cursor+256],eax
Line 629... Line 629...
629
 
629
 
Line -... Line 630...
-
 
630
 
630
 
631
  ; READ TSC / SECOND === Fusion fam.14h only! ===
631
  ; READ TSC / SECOND == Fusion only!
632
 
632
 
633
uglobal
633
	cli
634
align 4
634
	mov	edx, PCIe_CONFIG_SPACE + 0xE0
635
diff16 "pll_freq : ", 0, $
-
 
636
pll_frequency:
635
	mov	eax, 0x013080F0 	; BIOS timer reg.
637
	.main	dd ?
-
 
638
	.divd	dd ?
636
	mov	[edx], eax
639
	.nclk	dd ?
-
 
640
	.osc	dd ?
637
	add	dl, 4
641
endg
638
	mov	edi, edx
642
	mov	ecx, 0xC0010064 	; P0-state register
639
	mov	eax, [edi]		; old microseconds
643
	rdmsr
-
 
644
	and	eax, 0x000001F3
640
	inc	eax			; next precise microsecond
645
	xor	ebx, ebx
641
	mov	esi, eax
646
	mov	bl, al
642
 @@:
647
	shr	eax, 2			; divd = 4*((1 + bits[8:4]) + 0.25*(bits[1:0]))
-
 
648
	add	al, 4
-
 
649
	and	bl, 3
643
	mov	eax, [edi]
650
	add	al, bl
-
 
651
	mov	[pll_frequency.divd], eax
-
 
652
 
644
	cmp	eax, esi
653
 
645
	jne	@b
654
	mov	eax, [PCIe_CONFIG_SPACE + 0xC30D4]  ; bdf: 0.18.3; reg.0xD4
646
 
655
	and	eax, 0x0000003F 	; 100 * (16 + bits[5:0]) = MHz
647
	rdtsc
656
	add	al, 16
648
	mov	ebp, eax		; clockmark
657
	imul	eax, 100
649
	add	esi, 20 		; wait 20us
658
	mov	[pll_frequency.main], eax
-
 
659
 
650
 @@:
660
	shl	eax, 2
-
 
661
	xor	edx, edx
651
	mov	eax, [edi]
662
	mov	ebx, [pll_frequency.divd]
-
 
663
	div	ebx
652
	cmp	eax, esi
664
	mov	ecx, 1000000
-
 
665
	push	edx
653
	jne	@b
666
	xor	edx, edx
654
 
667
	mul	ecx
655
	rdtsc
668
	mov	[CPU_FREQ], eax 	; Hz
-
 
669
	pop	eax
656
	sub	eax, ebp
670
	xor	edx, edx
-
 
671
	mov	ecx, 250000		; remainder in MHz/4
Line 657... Line 672...
657
	mov	ebx, 50000
672
	mul	ecx
658
	mul	ebx		      ; clks per second
673
	div	ebx
659
	sti
674
	add	eax, [CPU_FREQ]
-
 
675
 
-
 
676
	mov	[CPU_FREQ],eax		; save tsc / sec
-
 
677
	mov	ebx, 1000000
-
 
678
	div	ebx
-
 
679
	mov	[stall_mcs], eax	; (core/memory.inc:stall)
-
 
680
 
-
 
681
	mov	ebx, [PCIe_CONFIG_SPACE + 0xC30DC]  ; bdf: 0.18.3; reg.0xDC
-
 
682
	shr	ebx, 20
-
 
683
	and	bx, 0x3F		; NbP0NclkDiv
-
 
684
	mov	eax, [pll_frequency.main]
-
 
685
	shl	eax, 2
-
 
686
	xor	edx, edx
-
 
687
	div	ebx
-
 
688
	push	edx
-
 
689
	imul	eax, 1000000
-
 
690
	mov	[pll_frequency.nclk], eax  ; +-MHz
-
 
691
	pop	eax
660
 
692
	xor	edx, edx
-
 
693
	imul	eax, 1000000
-
 
694
	div	ebx
-
 
695
	add	[pll_frequency.nclk], eax  ; precise bus clk
661
	mov   [CPU_FREQ],eax	      ; save tsc / sec
696
	mov	eax, 200000000
662
	mov   ebx, 1000000
697
	mov	[pll_frequency.osc], eax   ; 200MHz main oscillator
663
	div   ebx
698
 
Line -... Line 699...
-
 
699
 
-
 
700
; PRINT CPU FREQUENCY
-
 
701
	mov	esi, boot_cpufreq
-
 
702
	call	boot_log
664
	mov [stall_mcs], eax
703
 
665
; PRINT CPU FREQUENCY
704
	mov	eax, [CPU_FREQ]
666
	mov	esi, boot_cpufreq
705
	xor	edx, edx
667
	call	boot_log
706
	mov	ebx, 1000000
668
 
707
	div	ebx