On Tue, Jul 29, 2025 at 01:53:10PM +0530, Aneesh Kumar K.V wrote: > Jason Gunthorpe <jgg@xxxxxxxx> writes: > > > On Mon, Jul 28, 2025 at 07:21:41PM +0530, Aneesh Kumar K.V (Arm) wrote: > >> @@ -48,3 +49,12 @@ int set_memory_decrypted(unsigned long addr, int numpages) > >> return crypt_ops->decrypt(addr, numpages); > >> } > >> EXPORT_SYMBOL_GPL(set_memory_decrypted); > >> + > >> +bool force_dma_unencrypted(struct device *dev) > >> +{ > >> + if (dev->tdi_enabled) > >> + return false; > > > > Is this OK? I see code like this: > > > > static inline dma_addr_t phys_to_dma_direct(struct device *dev, > > phys_addr_t phys) > > { > > if (force_dma_unencrypted(dev)) > > return phys_to_dma_unencrypted(dev, phys); > > return phys_to_dma(dev, phys); > > > > What are the ARM rules for generating dma addreses? > > > > 1) Device is T=0, memory is unencrypted, call dma_addr_unencrypted() > > and do "top bit IBA set" > > > > 2) Device is T=1, memory is encrypted, use the phys_to_dma() normally > > > > 3) Device it T=1, memory is uncrypted, use the phys_to_dma() > > normally??? Seems odd, I would have guessed the DMA address sould > > be the same as case #1? > > > > Can you document this in a comment? > > > > If a device is operating in secure mode (T=1), it is currently assumed > that only access to private (encrypted) memory is supported. No, this is no how the PCI specs were written as far as I understand. The XT bit thing is supposed to add more fine grained device side control over what memory the DMA can target. T alone does not do that. > It is unclear whether devices would need to perform DMA to shared > (unencrypted) memory while operating in this mode, as TLPs with T=1 > are generally expected to target private memory. PCI SIG supports it, kernel should support it. Jason