On Wed, Jun 05, 2019 at 10:06:18PM -0500, Larry Finger wrote: > First of all, you have my sympathy for the laborious bisection on a > PowerBook G4. I have done several myself. Thank you. > > I confirm your results. > > The ppc code has a maximum DMA size of 31 bits, thus a 32-bit request will > fail. Why the 30-bit fallback fails in b43legacy fails while it works in > b43 is a mystery. > > Although dma_nommu_dma_supported() may be "largely identical" to > dma_direct_supported(), they obviously differ. Routine > dma_nommu_dma_supported() returns 1 for 32-bit systems, but I do not know > what dma_direct_supported() returns. > > I am trying to find a patch. if (IS_ENABLED(CONFIG_ZONE_DMA)) min_mask = DMA_BIT_MASK(ARCH_ZONE_DMA_BITS); else min_mask = DMA_BIT_MASK(32); min_mask = min_t(u64, min_mask, (max_pfn - 1) << PAGE_SHIFT); return mask >= __phys_to_dma(dev, min_mask); So the smaller or: (1) 32-bit (2) ARCH_ZONE_DMA_BITS (3) the actual amount of memory in the system modolo any DMA offsets that come into play. No offsets should exists on pmac, and ARCH_ZONE_DMA_BITS is 31 on powerpc. So unless the system has 1GB or less memory it will probably return false for b43, because it can't actually guarantee reliable allocation. It will work fine on x86 with the smaller ZONE_DMA.