# MTRR clean up suport with pentium 4 and 855GM?

## turtles

I am not sure if "MTRR cleanup support" in the Kernel would improve any performance with sluggish X or KMS on this older laptop? I have looked at this guide: http://en.gentoo-wiki.com/wiki/MTRR and some other stuff. ( I have upgraded it to the full 2G of ram.) BTW The 855Gm video chip shares memory with the rest of the system.

I have in this context a "16MB, count=1: uncachable". 

```
[    0.000000] BIOS-provided physical RAM map:                                                                              

[    0.000000]  BIOS-e820: 0000000000000000 - 000000000009fc00 (usable)                                                     

[    0.000000]  BIOS-e820: 000000000009fc00 - 00000000000a0000 (reserved)                                                   

[    0.000000]  BIOS-e820: 00000000000e0000 - 00000000000eee00 (reserved)                                                   

[    0.000000]  BIOS-e820: 00000000000eee00 - 00000000000ef000 (ACPI NVS)                                                   

[    0.000000]  BIOS-e820: 00000000000ef000 - 0000000000100000 (reserved)                                                   

[    0.000000]  BIOS-e820: 0000000000100000 - 000000007ef40000 (usable)                                                     

[    0.000000]  BIOS-e820: 000000007ef40000 - 000000007ef50000 (ACPI data)                                                  

[    0.000000]  BIOS-e820: 000000007ef50000 - 000000007f000000 (reserved)                                                   

[    0.000000]  BIOS-e820: 00000000fec00000 - 00000000fec01000 (reserved)                                                   

[    0.000000]  BIOS-e820: 00000000fec10000 - 00000000fec20000 (reserved)                                                   

[    0.000000]  BIOS-e820: 00000000feda0000 - 00000000fedc0000 (reserved)                                                   

[    0.000000]  BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved)                                                   

[    0.000000]  BIOS-e820: 00000000ffb00000 - 00000000ffc00000 (reserved)                                                   

[    0.000000]  BIOS-e820: 00000000ffe80000 - 0000000100000000 (reserved)                                                   

[    0.000000] Notice: NX (Execute Disable) protection missing in CPU or disabled in BIOS!                                  

[    0.000000] DMI 2.3 present.                                                                                             

[    0.000000] e820 update range: 0000000000000000 - 0000000000001000 (usable) ==> (reserved)                               

[    0.000000] e820 remove range: 00000000000a0000 - 0000000000100000 (usable)                                              

[    0.000000] last_pfn = 0x7ef40 max_arch_pfn = 0x100000                                                                   

[    0.000000] MTRR default type: uncachable                                                                                

[    0.000000] MTRR fixed ranges enabled:                                                                                   

[    0.000000]   00000-9FFFF write-back                                                                                     

[    0.000000]   A0000-BFFFF uncachable                                                                                     

[    0.000000]   C0000-CFFFF write-protect                                                                                  

[    0.000000]   D0000-DFFFF uncachable                                                                                     

[    0.000000]   E0000-E7FFF write-protect                                                                                  

[    0.000000]   E8000-EFFFF write-back                                                                                     

[    0.000000]   F0000-FFFFF write-protect                                                                                  

[    0.000000] MTRR variable ranges enabled:                                                                                

[    0.000000]   0 base 0FEDA0000 mask FFFFE0000 write-back                                                                 

[    0.000000]   1 base 07F000000 mask FFF000000 uncachable                                                                 

[    0.000000]   2 base 0FFF00000 mask FFFF00000 uncachable                                                                 

[    0.000000]   3 base 000000000 mask F80000000 write-back                                                                 

[    0.000000]   4 disabled                                                                                                 

[    0.000000]   5 disabled                                                                                                 

[    0.000000]   6 disabled                                                                                                 

[    0.000000]   7 disabled                                                                                                 

[    0.000000] x86 PAT enabled: cpu 0, old 0x7010600070106, new 0x7010600070106                                             

[    0.000000] e820 update range: 000000007f000000 - 00000000feda0000 (usable) ==> (reserved)                               

[    0.000000] initial memory mapped : 0 - 01c00000                                                                         

[    0.000000] init_memory_mapping: 0000000000000000-00000000377fe000                                                       

[    0.000000]  0000000000 - 0000400000 page 4k                                                                             

[    0.000000]  0000400000 - 0037400000 page 2M                                                                             

[    0.000000]  0037400000 - 00377fe000 page 4k                                                                             

[    0.000000] kernel direct mapping tables up to 377fe000 @ 7000-c000                                                      

[    0.000000] ACPI: RSDP 000f0180 00014 (v00 TOSHIB)                                                                       

[    0.000000] ACPI: RSDT 7ef40000 00038 (v01 TOSHIB 750      00970814 TASM 04010000)                                       

[    0.000000] ACPI: FACP 7ef40060 00084 (v02 TOSHIB 750      20030101 TASM 04010000)                                       

[    0.000000] ACPI: DSDT 7ef40558 04B72 (v01 TOSHIB A000C    20031216 MSFT 0100000E)                                       

[    0.000000] ACPI: FACS 000eee00 00040                                                                                    

[    0.000000] ACPI: SSDT 7ef40444 00114 (v01 TOSHIB A000C    20031010 MSFT 0100000E)                                       

[    0.000000] ACPI: DBGP 7ef400e4 00034 (v01 TOSHIB 750      00970814 TASM 04010000)                                       

[    0.000000] ACPI: BOOT 7ef40038 00028 (v01 TOSHIB 750      00970814 TASM 04010000)                                       

[    0.000000] ACPI: APIC 7ef40118 00062 (v01 TOSHIB 750      00970814 TASM 04010000)                                       

[    0.000000] ACPI: Local APIC address 0xfee00000                                                                          

[    0.000000] 1143MB HIGHMEM available.                                                                                    

[    0.000000] 887MB LOWMEM available.                                                                                      

[    0.000000]   mapped low ram: 0 - 377fe000                                                                               

[    0.000000]   low ram: 0 - 377fe000                                                                                      

[    0.000000] Zone PFN ranges:                                                                                             

[    0.000000]   DMA      0x00000001 -> 0x00001000                                                                          

[    0.000000]   Normal   0x00001000 -> 0x000377fe                                                                          

[    0.000000]   HighMem  0x000377fe -> 0x0007ef40                                                                          

[    0.000000] Movable zone start PFN for each node                                                                         

[    0.000000] early_node_map[2] active PFN ranges                                                                          

[    0.000000]     0: 0x00000001 -> 0x0000009f                                                                              

[    0.000000]     0: 0x00000100 -> 0x0007ef40                                                                              

[    0.000000] On node 0 totalpages: 519902               
```

Here is my 

```
cat /proc/mtrr

reg00: base=0x0feda0000 ( 4077MB), size=  128KB, count=1: write-back

reg01: base=0x07f000000 ( 2032MB), size=   16MB, count=1: uncachable

reg02: base=0x0fff00000 ( 4095MB), size=    1MB, count=1: uncachable

reg03: base=0x000000000 (    0MB), size= 2048MB, count=1: write-back

reg04: base=0x0d8000000 ( 3456MB), size=  128MB, count=1: write-combining

```

and 

```
cat /proc/cpuinfo 

processor       : 0            

vendor_id       : GenuineIntel 

cpu family      : 15           

model           : 4            

model name      : Mobile Intel(R) Pentium(R) 4 CPU 3.33GHz

stepping        : 1                                       

cpu MHz         : 3330.000                                

cache size      : 1024 KB                                 

physical id     : 0                                       

siblings        : 2                                       

core id         : 0                                       

cpu cores       : 1                                       

apicid          : 0                                       

initial apicid  : 0                                       

fdiv_bug        : no                                      

hlt_bug         : no                                      

f00f_bug        : no                                      

coma_bug        : no                                      

fpu             : yes

fpu_exception   : yes

cpuid level     : 5

wp              : yes

flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe constant_tsc pebs bts pni dtes64 monitor ds_cpl est tm2 cid xtpr

bogomips        : 6649.06

clflush size    : 64

cache_alignment : 128

address sizes   : 36 bits physical, 32 bits virtual

power management:

processor       : 1

vendor_id       : GenuineIntel

cpu family      : 15

model           : 4

model name      : Mobile Intel(R) Pentium(R) 4 CPU 3.33GHz

stepping        : 1

cpu MHz         : 3330.000

cache size      : 1024 KB

physical id     : 0

siblings        : 2

core id         : 0

cpu cores       : 1

apicid          : 1

initial apicid  : 1

fdiv_bug        : no

hlt_bug         : no

f00f_bug        : no

coma_bug        : no

fpu             : yes

fpu_exception   : yes

cpuid level     : 5

wp              : yes

flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe constant_tsc pebs bts pni dtes64 monitor ds_cpl est tm2 cid xtpr

bogomips        : 6648.98

clflush size    : 64

cache_alignment : 128

address sizes   : 36 bits physical, 32 bits virtual

power management:

```

```
dmesg | grep 'drm'

[    1.141740] [drm] Initialized drm 1.1.0 20060810

[    1.210762] [drm] set up 15M of stolen space

[    1.255681] [drm] initialized overlay support

[    3.080029] fb0: inteldrmfb frame buffer device

[    3.080062] [drm] Initialized i915 1.6.0 20080730 for 0000:00:02.0 on minor 0

```

So in the dmesg output above I see:

    0.000000] MTRR variable ranges enabled:                                                                                

[    0.000000]   0 base 0FEDA0000 mask FFFFE0000 write-back                                                                 

[    0.000000]   1 base 07F000000 mask FFF000000 uncachable                                                                 

[    0.000000]   2 base 0FFF00000 mask FFFF00000 uncachable                                                                 

[    0.000000]   3 base 000000000 mask F80000000 write-back                                                                 

[    0.000000]   4 disabled                                                                                                 

[    0.000000]   5 disabled                                                                                                 

[    0.000000]   6 disabled                                                                                                 

[    0.000000]   7 disabled             

In the kernel config I can only enter a number 1-7:

 [*]   MTRR cleanup support                                                                  │ │

  │ │                     (1)     MTRR cleanup enable value (0-1)                                                     │ │

  │ │                     (1)     MTRR cleanup spare reg num (0-7) 

So what number do I enter in this context? 1 to get an additional 16mb?

Or leave this off?

And perhaps another post but any thoughts on the 64k low mem reserve?

I am pretty sure I do not have a "AMI / Phoenix bios" on a toshiba A45 series laptop. 

Thanks all in advance for any thoughts.

----------

## Gusar

Your processor supports pat, so mtrrs don't actually matter. Your problem is totally the graphics chip. They've introduced UMS back into the intel driver to try and help those old 8xx chips, but there are still problems. Those chips are old, difficult to support, and to put it simply - crap. My advice, get a cheap dedicated graphic card.

----------

## turtles

 *Gusar wrote:*   

> Your processor supports pat, so mtrrs don't actually matter. 

 

Are you sure about that?

I in section 11.11.1 of this document:

http://www.intel.com/Assets/PDF/manual/253668.pdf

It seems like they work together but may need to be set in software.

Why would it be in the linux kernel then?

 *Gusar wrote:*   

> My advice, get a cheap dedicated graphic card.

 

This is a "old" laptop, I have never had any graphics problems doing what I need to do with it. I don't care if the chip is 100 years old saying a 855GM is difficult to support is a cop out.

----------

## Gusar

 *turtles wrote:*   

>  *Gusar wrote:*   Your processor supports pat, so mtrrs don't actually matter.  Are you sure about that?

 The intel graphics driver uses pat, that I know. No idea if the rest of the system uses mtrr and what for, when pat is available.

Why is mtrr in the kernel? For machines without pat of course. A laptop of mine, Pentium-M processor, does not have pat.

 *turtles wrote:*   

> This is a "old" laptop, I have never had any graphics problems doing what I need to do with it. I don't care if the chip is 100 years old saying a 855GM is difficult to support is a cop out.

 

I don't know who this person is, but I've no reason to doubt their info (from Phoronix forums): *Quote:*   

> Well there is very little documentation over modesetting. On those older Intel stuff they left much of the implementation details up to the particular motherboard manufacturer. So a lot of the stuff is specific to specific motherboards and laptops.

 

I don't doubt it, because I know the hda-intel driver has the same problem - each board manufacturer wiring the sound chip differently. And so the hda-intel driver is full of laptop specific quirks.

So call it a "cop out" if you will, the difficulties of supporting such a scenario are nevertheless real.

----------

## turtles

Yeah I have read that too. The software programing manual referenced above gives a different story.

I don't think Pat can use a register that is not set up in early boot process.

I have 

```
[    0.000000] MTRR fixed ranges enabled:                                                                                   

[    0.000000]   00000-9FFFF write-back                                                                                     

[    0.000000]   A0000-BFFFF uncachable                                                                                     

[    0.000000]   C0000-CFFFF write-protect                                                                                  

[    0.000000]   D0000-DFFFF uncachable                                                                                     

[    0.000000]   E0000-E7FFF write-protect                                                                                  

[    0.000000]   E8000-EFFFF write-back                                                                                     

[    0.000000]   F0000-FFFFF write-protect                                                                                  

[    0.000000] MTRR variable ranges enabled:                                                                                

[    0.000000]   0 base 0FEDA0000 mask FFFFE0000 write-back                                                                 

[    0.000000]   1 base 07F000000 mask FFF000000 uncachable                                                                 

[    0.000000]   2 base 0FFF00000 mask FFFF00000 uncachable                                                                 

[    0.000000]   3 base 000000000 mask F80000000 write-back                                                                 

[    0.000000]   4 disabled                                                                                                 

[    0.000000]   5 disabled                                                                                                 

[    0.000000]   6 disabled                                                                                                 

[    0.000000]   7 disabled                                                                                                 

[    0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106                                             

[    0.000000] e820 update range: 000000007f000000 - 00000000feda0000 (usable) ==> (reserved)                               

[    0.000000] initial memory mapped : 0 - 01c00000                                                                         

[    0.000000] init_memory_mapping: 0000000000000000-00000000377fe000                                                       

[    0.000000]  0000000000 - 0000400000 page 4k                                                                             

[    0.000000]  0000400000 - 0037400000 page 2M                                                                             

[    0.000000]  0037400000 - 00377fe000 page 4k                                                                             

[    0.000000] kernel direct mapping tables up to 377fe000 @ 7000-c000                         
```

But there are 4 registers above 03 that are not set up and thus not mapped by PAT.

By setting 

```

(4)     MTRR cleanup spare reg num (0-7)
```

I can tell the kernel that 4 more registers can be set up and thus available to PAT.

This is my theory anyway.

 *rfernandez (on the linux forums) wrote:*   

> The "mtrr_spare_reg_num" is about those 5 free registers, where MTRR cleanup can make use of. My graphics card (GMA965) has 8MB of dedicated memory and 256MB of shared memory. So, MTRR cleanup will take use of one of those registers using it as a write-combining.

 

See his thread here: http://www.linuxquestions.org/questions/linux-kernel-70/what-is-mtrr-cleanup-spare-reg-num-about-814410/

He has a GMA965 so I imagine he has a pentium 4 with pat.

Checking proc MTRR confirms that they do not get set up.

Cheers

----------

