[LinuxBIOS] Opteron caching of device memory

Marc Jones Marc.Jones at amd.com
Thu Jun 14 23:44:29 CEST 2007


Myles Watson wrote:
>   
>> -----Original Message-----
>> From: linuxbios-bounces at linuxbios.org [mailto:linuxbios-
>> bounces at linuxbios.org] On Behalf Of Marc Jones
>> Sent: Thursday, June 14, 2007 2:39 PM
>> To: Roman Kononov
>> Cc: myles at mouselemur.cs.byu.edu; linuxbios at linuxbios.org
>> Subject: Re: [LinuxBIOS] Opteron caching of device memory
>>
>> Roman Kononov wrote:
>>     
>>> On 06/13/2007 09:39 AM, Myles Watson wrote:
>>>
>>>       
>>>> I'm using LinuxBIOS on my Tyan s2892.  I have a device that maps a lot
>>>> of the memory space, but I'm struggling trying to get the Opteron to
>>>> read and write to my device in larger blocks.  I have set the variable
>>>> MTRRs in the device driver to writeback (witnessed by /proc/mtrr), but
>>>>         
>> I
>>     
>>>> still get 64-bit accesses instead of 64-byte (cache line).
>>>>
>>>>         
>>> Some time ago I officially asked an AMD's rep about this. Someone from
>>>       
>> AMD
>>     
>>> unofficially said that MemIO can be only Write-Combined. And I gave up
>>>       
>> with
>>     
>>> caching.
>>>
>>> Below is what I asked. Maybe you can spot what I missed. Please let me
>>>       
>> know
>>     
>>> if you succeed.
>>>
>>> Roman
>>> --------------------------------------------------------------------
>>> I have a difficulty related to cacheability of Memory-Mapped I/O memory
>>>       
>> in
>>     
>>> Opteron. Can you please assist me?
>>>
>>> I have an Opteron-based system, where the Opteron and an FPGA are
>>>       
>> connected
>>     
>>> using a HyperTransport link. As a target of HT traffic, the FPGA
>>>       
>> responses
>>     
>>> to certain range of physical addresses. I am trying to configure the CPU
>>>       
>> and
>>     
>>> the North Bridge to treat the FPGA as Writeback memory. I cannot do
>>>       
>> this.
>>     
>>> I've been able to make the FPGA Uncacheable, Write-Combining, Write-
>>>       
>> Protect
>>     
>>> and Writethrough. When I try to make it Writeback it behaves as if it
>>>       
>> were
>>     
>>> Writethrough.
>>>
>>> Is it possible to make the FPGA Writeback? If yes, what should I change?
>>>
>>> I have observability of the HT traffic from the FPGA point of view, so I
>>> know what is written and what is requested by the CPU.
>>>
>>> Here is how I program the Opteron:
>>>
>>> The processor is running in the Long Mode with paging enabled.
>>>
>>> A pair of NB PCI Function 1, Memory-Mapped I/O Base and Limit registers
>>>       
>> is
>>     
>>> programmed with the FPGA physical address range, proper link and node
>>>       
>> IDs,
>>     
>>> posted.
>>>
>>> A pair of the variable MTRR Base and Mask (MSR 0x200-0x20f) registers is
>>> programmed with the FPGA physical address range, valid bit and the
>>>       
>> desired
>>     
>>> caching method. Another pair of MTRR registers describes the DRAM, all
>>> others are disabled.
>>>
>>> The PAT register (MSR 0x277) is 0x0606060606060606ull.
>>>
>>> The Page Table Entry for the virtual address mapped to the FPGA has PAT,
>>>       
>> PCD
>>     
>>> and PWT bits cleared.
>>>
>>> Bit CD in the CR0 register is cleared.
>>>
>>>
>>>
>>>       
>> I am not an expert but these are my thoughts....
>>
>> Now that I think about it, it makes sense that you can't set writeback
>> to noncoherent (nonsystem) memory space. What if another device wants to
>> write to that memory. There is no way for the cache to snoop that it was
>> written. You would need a coherent HT link to to your FPGA to get the
>> cache snoop messaging.
>>
>> Marc
>>     
>
> I think that the FPGA should be able to set the coherent bit and cause
> snooping, even if it is not on the coherent bus, because it targets coherent
> memory.  
>
> An example is DMA:
> 1. The processor writes data to DRAM (some of it may/will still be cached)
> 2. The processor writes to the DMA controller (say a SATA controller)
> 3. The DMA transfers the data to the disk drive
>
> If there's no snooping, the DMA controller reads stale data from the DRAM.
>
> Feel free to point out shortcomings in my example.  I need to learn more
> about it.
>
> Myles
>
>
>   
I am sorry, I don't have the expertise to answer your question. I 
recommend that you try the Hyper Transport Consortium and if you still 
can't get an answer let me know. I will try to find the AMD Torrenza 
guys to get us an answer.

http://www.hypertransport.org/
http://enterprise.amd.com/us-en/AMD-Business/Technology-Home/Torrenza.aspx

Marc


-- 
Marc Jones
Senior Software Engineer
(970) 226-9684 Office
mailto:Marc.Jones at amd.com
http://www.amd.com/embeddedprocessors 







More information about the coreboot mailing list