On Tue, Oct 29, 2024 at 02:22:53PM +0530, Sughosh Ganu wrote: > On Tue, 29 Oct 2024 at 14:02, Janne Grunau <j...@jannau.net> wrote: > > > > On Tue, Oct 29, 2024 at 12:48:46PM +0530, Sughosh Ganu wrote: > > > The LMB module is typically used for managing the platform's RAM > > > memory. RAM memory gets added to the module's memory map, and > > > subsequently allocated through various LMB API's. > > > > > > The IOMMU driver for the apple platforms also uses the LMB API's for > > > allocating device virtual addresses(VA). These addresses are different > > > from the RAM addresses, and cannot be added to the RAM memory map. Add > > > a separate instance of LMB memory map for the device VA's, which gets > > > managed by the IOMMU driver. Use lmb_push() and lmb_pop() functions to > > > set-up the relevant lmb instance. > > > > thanks, this fixes the initial brokenness when setting up dma mappings > > but I still see SError due to translation fault. I don't have time right > > now to look into it so it could be unrelated to the iommu. > > Good to know. Thanks for testing the changes.
It's SError-ing on `dc zva` of an invalid address which somehow got into the main lmb. I don't see how but it went away with my minimal io_lmb implemenmtation exposing lmb_setup, lmb_add, lmb_alloc, lmb_free. I'm not too happy about this approach since it's a little fragile with respect to the global struct lmb. to be somewhat safe we would need to reorder lmb.c to avoid `static struct lmb lmb;` is visible in "shared" code to avoid using it by surprise in the middle of functions like in _lmb_alloc_base(). I'll post patches later today. Janne