[parisc-linux] Re: CCIO dma io_command and related io_tlb format questions.
Joel Soete
soete.joel at scarlet.be
Fri Oct 20 11:18:28 MDT 2006
Grant Grundler wrote:
> On Fri, Oct 20, 2006 at 12:04:47PM +0000, Joel Soete wrote:
>> mmm offhand wasn't there limits in ccio page size like in ia64 sba comments:
>>> /*
>>> ** The zx1 IOC supports 4/8/16/64KB page sizes (see TCNFG register)
>
> I don't remember.
> ia64 sba is the 3rd generation IO controller.
> U2 (ccio) is the first generation.
> Sorry, I'm not interested in comparing them.
>
no pb,
>>> Uhm....sounds reasonable to me. All I know is I believe the existing
>>> code use of chain_id is correct.
>>>
>> Just come back here shortly: the computed values with my hw config (256Mb
>> and 2 ccio) are
>>> Found U2 at 0xfff88000
>>> ccio_ioc_init() hpa 0x00008000 mem 256Mb IOV 128Mb (27 bits)
>>> base 10740000
>>> ccio_ioc_init() res_size 0x1000
>>> chainid_shift 0x13
>>> chainid_mask 0x7f80000
>
> This looks correct.
>
>>> Found U2 at 0xfff8a000
>>> ccio_ioc_init() hpa 0x0000a000 mem 256Mb IOV 128Mb (27 bits)
>>> base 10780000
>>> ccio_ioc_init() res_size 0x1000
>>> chainid_shift 0x13
>>> chainid_mask 0x7f80000
>> otoh, applying this other formula [io_chain_id_mask = (~(CHAINID_SIZE -1));
>> with CHAINID_SIZE = (1UL << ioc->chainid_shift)], I got:
>>> chainid_mask 0xfff80000
>
> This second chainid_mask is 13 bits wide.
mmm sorry how do you compute this wide value?
> Remember that the mask can only be 8 bits wide for ccio.
>
Btw I just discover an interesting comment in rope.h
> /*
> ** IOC supports 4/8/16/64KB page sizes (see TCNFG register)
> ** It's safer (avoid memory corruption) to keep DMA page mappings
> ** equivalently sized to VM PAGE_SIZE.
> **
[snip]
> **
> ** PAGE_SIZE could be greater than IOVP_SIZE. But not the inverse.
> */
and specialy:
> ** It's safer (avoid memory corruption) to keep DMA page mappings
> ** equivalently sized to VM PAGE_SIZE.
which was related to the original question I didn't reach to explain better.
So even if I don't understand why, we have to limits the number of iotlb entries to 256 (without doc I just accept it).
but in term to 'avoid memory corruption' why don't we limit the iova_space_size to 256 * IOVP_SIZE?
Many thanks,
Joel
More information about the parisc-linux
mailing list