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 |