On Fri, May 29, 2020 at 11:03:48AM -0700, Florian Fainelli wrote: > On 5/29/20 10:53 AM, Lukas Wunner wrote: > > On Fri, May 29, 2020 at 10:46:01AM -0700, Florian Fainelli wrote: > >> On 5/29/20 10:43 AM, Lukas Wunner wrote: > >>> Finally, it would be nice if the check would be optimized away when > >>> compiling for pre-RasPi4 products, maybe something like: > >>> > >>> + if (IS_ENABLED(CONFIG_ARM_LPAE) && !(cs & BCM2835_SPI_CS_INTR)) > >>> + return IRQ_NONE; > >> > >> Rather than keying this off ARM_LPAE or any other option, this should be > >> keyed off a compatible string, that way we can even conditionally pass > >> IRQF_SHARED to the interrupt handler if we care so much about performance. > > > > But a compatible string can't be checked at compile time, can it? > > No, but you can have a different interrupt handler that it set at > runtime if you want to completely eliminate this comparison. Good idea. In fact the IRQ handler for platforms with shared interrupts could just be a wrapper which performs the BCM2835_SPI_CS_INTR check then tail-calls the existing IRQ handler. The compiler would just inline it and everything would be fine. > My point is that CONFIG_ARM_LPAE is just too brittle, there is nothing > that prevents you from using a non-LPAE kernel on the Pi 4, even PCIe > could be made to work if using super section mappings to map the PCIe > outbound space. Even on models with over 4GB of DRAM, if you are willing > to lose some of it, it can work. Agreed. Thanks, Lukas