Dear list,
Sorry this maybe off topic-- I am writing a device driver for a kind of
framebuffer device.
This is virtually complete and working, all I wish to add is
write-combining but I can find
very little information on how to do this. Looking at other device
drivers MTRR crops
up a few times but I is still not clear to me what I have to do.
So far-
I grab the memory region for the framebuffer (1/4Mb) something like so;
......
memio=ioremap(pci_resource_start(dev,MEMIO)&PCI_BASE_ADDRESS_MEM_MASK,MEMIO_SIZE);
......
then try to mtrr it
.....
err=mtrr_add(memio,MEMIO_SIZE,MTRR_TYPE_WRCOMB,1);
......
which fails because memio is not aligned correctly
my code generates the following messages
slm: init: mtrr option enabled- trying region cc960000
mtrr: base(0xcc960000) is not aligned on a size(0x40000) boundary
slm: init: mtrr: unable to set write combining for slm memory :(
Before I go any further I would like to ask is this a sensible approach
or have I missed
something somewhere?
If this is not the most sensible way please point me towards a sensible
solution-
If this is the correct way of doing things is there
> an easy way to discover the mtrr alignment requirements prior to
mtrr_add?
> Can I align memio properly (how?) or
> do I start by defining a larger mtrr region below memio and then
masking off the
unwanted regions either side of my memory region with
mtrr(...MTRR_TYPE_WRBACK..)?
> What happens on none x86 type processors?
any other advice?
Thanks SA
Have I missed something here?
Am I being dim?
Or is the usual "instant advice" feature switched off?
The device I am writing the driver for formally didn't support
write-combining and it took
10000 clock ticks to do a partial transfer- now it does support
write-combining and it still
takes 10000 clock ticks to transfer the data- It is performance
critical- How do I switch
write-combining on? It is worth at least a 2x speed up for me?
If it is something obvious please don't be afraid to point it out-----
Thanks SA