Rev 3531 | Show entire file | Ignore 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 | ||
- | 630 | ||
- | 631 | ; READ TSC / SECOND === Fusion fam.14h only! === |
|
- | 632 | ||
- | 633 | uglobal |
|
- | 634 | align 4 |
|
- | 635 | diff16 "pll_freq : ", 0, $ |
|
- | 636 | pll_frequency: |
|
- | 637 | .main dd ? |
|
- | 638 | .divd dd ? |
|
- | 639 | .nclk dd ? |
|
- | 640 | .osc dd ? |
|
- | 641 | endg |
|
- | 642 | mov ecx, 0xC0010064 ; P0-state register |
|
- | 643 | rdmsr |
|
- | 644 | and eax, 0x000001F3 |
|
- | 645 | xor ebx, ebx |
|
- | 646 | mov bl, al |
|
- | 647 | shr eax, 2 ; divd = 4*((1 + bits[8:4]) + 0.25*(bits[1:0])) |
|
- | 648 | add al, 4 |
|
- | 649 | and bl, 3 |
|
- | 650 | add al, bl |
|
- | 651 | mov [pll_frequency.divd], eax |
|
- | 652 | ||
- | 653 | ||
- | 654 | mov eax, [PCIe_CONFIG_SPACE + 0xC30D4] ; bdf: 0.18.3; reg.0xD4 |
|
- | 655 | and eax, 0x0000003F ; 100 * (16 + bits[5:0]) = MHz |
|
- | 656 | add al, 16 |
|
- | 657 | imul eax, 100 |
|
- | 658 | mov [pll_frequency.main], eax |
|
- | 659 | ||
- | 660 | shl eax, 2 |
|
- | 661 | xor edx, edx |
|
- | 662 | mov ebx, [pll_frequency.divd] |
|
- | 663 | div ebx |
|
- | 664 | mov ecx, 1000000 |
|
- | 665 | push edx |
|
- | 666 | xor edx, edx |
|
- | 667 | mul ecx |
|
- | 668 | mov [CPU_FREQ], eax ; Hz |
|
- | 669 | pop eax |
|
- | 670 | xor edx, edx |
|
- | 671 | mov ecx, 250000 ; remainder in MHz/4 |
|
- | 672 | mul ecx |
|
- | 673 | div ebx |
|
- | 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 |
|
- | 692 | xor edx, edx |
|
- | 693 | imul eax, 1000000 |
|
- | 694 | div ebx |
|
- | 695 | add [pll_frequency.nclk], eax ; precise bus clk |
|
- | 696 | mov eax, 200000000 |
|
Line 630... | Line -... | ||
630 | - | ||
631 | ; READ TSC / SECOND == Fusion only! |
- | |
632 | - | ||
633 | cli |
- | |
634 | mov edx, PCIe_CONFIG_SPACE + 0xE0 |
- | |
635 | mov eax, 0x013080F0 ; BIOS timer reg. |
- | |
636 | mov [edx], eax |
- | |
637 | add dl, 4 |
- | |
638 | mov edi, edx |
- | |
639 | mov eax, [edi] ; old microseconds |
- | |
640 | inc eax ; next precise microsecond |
- | |
641 | mov esi, eax |
- | |
642 | @@: |
- | |
643 | mov eax, [edi] |
- | |
644 | cmp eax, esi |
- | |
645 | jne @b |
- | |
646 | - | ||
647 | rdtsc |
- | |
648 | mov ebp, eax ; clockmark |
- | |
649 | add esi, 20 ; wait 20us |
- | |
650 | @@: |
- | |
651 | mov eax, [edi] |
- | |
652 | cmp eax, esi |
- | |
653 | jne @b |
- | |
654 | - | ||
655 | rdtsc |
- | |
656 | sub eax, ebp |
- | |
657 | mov ebx, 50000 |
- | |
658 | mul ebx ; clks per second |
- | |
659 | sti |
- | |
660 | - | ||
661 | mov [CPU_FREQ],eax ; save tsc / sec |
- | |
662 | mov ebx, 1000000 |
697 | mov [pll_frequency.osc], eax ; 200MHz main oscillator |
663 | div ebx |
698 | |
664 | mov [stall_mcs], eax |
699 | |
Line -... | Line 700... | ||
- | 700 | ; PRINT CPU FREQUENCY |
|
- | 701 | mov esi, boot_cpufreq |
|
- | 702 | call boot_log |
|
- | 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 |
|
669 | mov ebx, eax |
708 | mov ebx, eax |
670 | movzx ecx, word [boot_y] |
709 | movzx ecx, word [boot_y] |
671 | add ecx, (10+17*6) shl 16 - 10 ; 'CPU frequency is ' |
710 | add ecx, (10+17*6) shl 16 - 10 ; 'CPU frequency is ' |
672 | mov edx, 0xFFFFFF |
711 | mov edx, 0xFFFFFF |
Line 673... | Line 712... | ||
673 | xor edi,edi |
712 | xor edi,edi |
Line 674... | Line 713... | ||
674 | mov eax, 0x00040000 |
713 | mov eax, 0x00040000 |