
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