Hello Marek,
On Fri, Jan 23, 2015 at 1:40 PM, Marek Szyprowski m.szyprowski@samsung.com wrote:
list_add_tail(&data->owner_node, &owner->clients);
This is the line that causes the kernel to hang, if I comment the list_add_tail() call then the kernel boots.
I checked that neither data nor owner are NULL and that the owner->clients list_head is initialized. Do you have any ideas what could be happening?
This is really strange. However the hang is definitely not caused by adding the controller to the list, but rather the fact that it is later being initialized, probably in exynos_iommu_attach_device().
Yes, I knew adding to the list was not the issue but a side effect of being in the list. I'm not familiar with Exynos sysmmu/iommu to figure out though.
Just a quick question - does bootloader on Exynos5420 Peach Pit sets any image on the display?
Yes u-boot does initialize the display, I see the boot messages and have an u-boot prompt.
If so then we will get IOMMU page fault on init (DMA engine of FIMD is left enabled from bootloader) and such case is not yet handled. Besides that I have no idea for any other reason for such failure.
I see, that's a reasonable explanation and in fact your patch makes at least the kernel to start booting.
To check if this is caused by io page fault, please temporarily add the following hack: --->8--- diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c index 7864797609b3..5e70cf7eb31b 100644 --- a/arch/arm/mm/dma-mapping.c +++ b/arch/arm/mm/dma-mapping.c @@ -2011,6 +2011,9 @@ static bool arm_setup_iommu_dma_ops(struct device *dev, u64 dma_base, u64 size, return false; }
- iommu_map(mapping->domain, 0x40000000, 0x40000000, 0x80000000,
IOMMU_READ | IOMMU_WRITE);
- if (arm_iommu_attach_device(dev, mapping)) {
The kernel still hangs but the boot does indeed go further. Here is my boot log [0] although I couldn't find an evident cause.
Best regards, Javier