[PATCH] video: simplefb: Map framebuffer region on probe on ARM64

Luca Weiss luca.weiss at fairphone.com
Wed Mar 25 09:38:20 CET 2026


Hi Sumit,

On Tue Mar 24, 2026 at 7:02 AM CET, Sumit Garg wrote:
> Hi Luca,
>
> On Wed, Mar 18, 2026 at 04:07:17PM +0100, Luca Weiss wrote:
>> The framebuffer buffer might not be mapped on some devices.
>> 
>> This is #ifdef'ed for ARM64 since mmu_map_region() is not defined for
>> any other architecture.
>
> This isn't an appropriate fix to the problem.
>
>> 
>> Signed-off-by: Luca Weiss <luca.weiss at fairphone.com>
>> ---
>> Map 0x1000 extra due to unknown reason, but otherwise it's not enough
>> and we still get a "Synchronous Abort" when drawing at the bottom of the
>> framebuffer.
>> 
>> For milos-fairphone-fp6 the framebuffer is reg=0xe3940000
>> size=0xa932c0 (2484*1116*4).
>> 
>> When just calling mmu_map_region with plat->size, then it's crashing at
>> 0xe43d3000 even though everything up to 0xe43d32c0 should be mapped.
>> With size+0x800 (or less) it was also still crashing, only size+0x1000
>> then worked.
>> 
>> Possible I just don't know enough about memory mapping things, so
>> suggestions welcome! :)
>
> This sounds more likely the synchronous aborts caused by cache prefetch
> of nearby reserved memory regions. I see there are some reserved mememory
> regions around the address space you have mentioned on Milos.
>
> On Qcom platforms, the default memory map strategy is to map the overall
> DRAM space without excluding reserved reqions. One can exclude reserved
> regions in a SoC specific manner here [1] but it adds some runtime
> overhead. Give it a try for Milos as well in case it resolves your
> issue.

Casey's verdict from dump_pagetable() was that the ABL doesn't include
the framebuffer in the memory map it provides, so we need to map it
ourselves. I honestly have less understanding of how that works, so
please correct me/us if that's wrong.

As a reminder, the framebuffer is reg = <0xe3940000 (2484 * 1116 * 4)>,
so 0xe3940000 - 0xe43d32c0

<debug_uart>


U-Boot 2026.04-rc2-00021-gbae2991415b0-dirty (Mar 05 2026 - 16:37:20 +0100)

Model: The Fairphone (Gen. 6)
DRAM:  38 GiB (total 7.4 GiB)
Walking pagetable at 00000009fff00000, va_bits: 36. Using 3 levels
[0x000009fff01000]                        |  Table |            |               |          
  [0x000009fff02000]                      |  Table |            |               |          
    [0x00000000001000 - 0x00000000200000] |  Pages | PXN UXN    | Device-nGnRnE | Non-shareable   
  [0x00000000200000 - 0x00000040000000]   |  Block | PXN UXN    | Device-nGnRnE | Non-shareable   
[0x00000040000000 - 0x00000080000000]     |  Block | PXN UXN    | Device-nGnRnE | Non-shareable   
[0x000009fff03000]                        |  Table |            |               |          
  [0x00000080000000 - 0x00000080e00000]   |  Block | PXN UXN    | Device-nGnRnE | Non-shareable   
  [0x00000080e00000 - 0x00000081800000]   |  Block | RWX        | Normal        | Inner-shareable 
  [0x000009fff04000]                      |  Table |            |               |          
    [0x00000081cf5000 - 0x00000081cff000] |  Pages | RWX        | Normal        | Inner-shareable 
  [0x000009fff05000]                      |  Table |            |               |          
    [0x00000081f20000 - 0x00000082000000] |  Pages | RWX        | Normal        | Inner-shareable 
  [0x00000082000000 - 0x00000082400000]   |  Block | RWX        | Normal        | Inner-shareable 
  [0x000009fff06000]                      |  Table |            |               |          
    [0x00000082400000 - 0x000000824a0000] |  Pages | RWX        | Normal        | Inner-shareable 
  [0x00000082800000 - 0x0000008ac00000]   |  Block | RWX        | Normal        | Inner-shareable 
  [0x000009fff07000]                      |  Table |            |               |          
    [0x0000009ea9c000 - 0x0000009eb00000] |  Pages | RWX        | Normal        | Inner-shareable 
  [0x000009fff08000]                      |  Table |            |               |          
    [0x0000009f300000 - 0x0000009f400000] |  Pages | RWX        | Normal        | Inner-shareable 
  [0x0000009f400000 - 0x000000a6400000]   |  Block | RWX        | Normal        | Inner-shareable 
  [0x000000a7000000 - 0x000000c0000000]   |  Block | RWX        | Normal        | Inner-shareable 
[0x000009fff09000]                        |  Table |            |               |          
  [0x000000c0000000 - 0x000000e0600000]   |  Block | RWX        | Normal        | Inner-shareable 
  [0x000000e0a00000 - 0x000000e1e00000]   |  Block | RWX        | Normal        | Inner-shareable 
  [0x000009fff0a000]                      |  Table |            |               |          
    [0x000000e1e00000 - 0x000000e1f00000] |  Pages | RWX        | Normal        | Inner-shareable 
  [0x000009fff0b000]                      |  Table |            |               |          
    [0x000000e2500000 - 0x000000e2600000] |  Pages | RWX        | Normal        | Inner-shareable 
  [0x000000e2600000 - 0x000000e3800000]   |  Block | RWX        | Normal        | Inner-shareable 
  [0x000009fff0c000]                      |  Table |            |               |          
    [0x000000e3800000 - 0x000000e3940000] |  Pages | RWX        | Normal        | Inner-shareable 
  [0x000009fff0d000]                      |  Table |            |               |          
    [0x000000e6440000 - 0x000000e6600000] |  Pages | RWX        | Normal        | Inner-shareable 
  [0x000000e6600000 - 0x000000e8800000]   |  Block | RWX        | Normal        | Inner-shareable 
  [0x000009fff0e000]                      |  Table |            |               |          
    [0x000000e8800000 - 0x000000e8900000] |  Pages | RWX        | Normal        | Inner-shareable 
  [0x000009fff0f000]                      |  Table |            |               |          
    [0x000000f0d00000 - 0x000000f0e00000] |  Pages | RWX        | Normal        | Inner-shareable 
  [0x000000f0e00000 - 0x00000100000000]   |  Block | RWX        | Normal        | Inner-shareable 
[0x000009fff10000]                        |  Table |            |               |          
  [0x00000880000000 - 0x000008afa00000]   |  Block | RWX        | Normal        | Inner-shareable 
  [0x000009fff11000]                      |  Table |            |               |          
    [0x000008afa00000 - 0x000008afafe000] |  Pages | RWX        | Normal        | Inner-shareable 
  [0x000008b0000000 - 0x000008b9600000]   |  Block | RWX        | Normal        | Inner-shareable 
  [0x000009fff12000]                      |  Table |            |               |          
    [0x000008b9600000 - 0x000008b9700000] |  Pages | RWX        | Normal        | Inner-shareable 
  [0x000008bf800000 - 0x000008c0000000]   |  Block | RWX        | Normal        | Inner-shareable 
[0x000008c0000000 - 0x00000a00000000]     |  Block | RWX        | Normal        | Inner-shareable 
Core:  124 devices, 32 uclasses, devicetree: board
MMC:   mmc at 8804000: 0
Loading Environment from nowhere... OK
"Synchronous Abort" handler, esr 0x96000047, far 0x0
elr: 000000000003bdac lr : 000000000003bdac (reloc)
elr: 00000009ffe05dac lr : 00000009ffe05dac
x0 : 00000000fffffffe x1 : 00000009ffec5170
x2 : 0000000000000003 x3 : 0000000000000001
x4 : 0000000000000063 x5 : 0000000000000000
x6 : 00000009efd9c7f0 x7 : 0000000000000000
x8 : 000000000000000a x9 : 0000000000000034
x10: 000000000000000d x11: 0000000000000006
x12: 00000009efd9ca38 x13: 00000000b7dfe000
x14: 00000000fffffffb x15: 00000009ffefbb9c
x16: 00000009ffe30cec x17: 0000000000000001
x18: 00000009efdaac30 x19: 0000000000000000
x20: 00000009efde2990 x21: 00000009ffecd110
x22: 00000009ffeb2e8e x23: 00000009efdb1430
x24: 00000009efdd8290 x25: 00000000e3940000
x26: 0000000000000002 x27: 0000000000000002
x28: 0000000000000002 x29: 00000009efd9c840

Code: 90000602 9105c021 91047842 9400291b (f900027f) 
Resetting CPU ...

### ERROR ### Please RESET the board ###


Regards
Luca

>
> I think we still need to revisit that reserved memory strategy where
> default should rather be we unmap the reserved regions.
>
> [1] https://github.com/u-boot/u-boot/blob/master/arch/arm/mach-snapdragon/board.c#L743
>
> -Sumit
>
>> ---
>>  drivers/video/simplefb.c | 6 ++++++
>>  1 file changed, 6 insertions(+)
>> 
>> diff --git a/drivers/video/simplefb.c b/drivers/video/simplefb.c
>> index 8d0772d4e51..e144fde697b 100644
>> --- a/drivers/video/simplefb.c
>> +++ b/drivers/video/simplefb.c
>> @@ -9,6 +9,7 @@
>>  #include <log.h>
>>  #include <video.h>
>>  #include <asm/global_data.h>
>> +#include <asm/system.h>
>>  
>>  static int simple_video_probe(struct udevice *dev)
>>  {
>> @@ -37,6 +38,11 @@ static int simple_video_probe(struct udevice *dev)
>>  	plat->base = base;
>>  	plat->size = size;
>>  
>> +#ifdef CONFIG_ARM64
>> +	/* The framebuffer buffer might not be mapped on some devices */
>> +	mmu_map_region((phys_addr_t)plat->base, (phys_addr_t)plat->size + 0x1000, false);
>> +#endif
>> +
>>  	video_set_flush_dcache(dev, true);
>>  
>>  	debug("%s: Query resolution...\n", __func__);
>> 
>> ---
>> base-commit: ba7bf918dafcd093ad733b07ba490baeb20cf5da
>> change-id: 20260318-simplefb-map-abb9dba0eed1
>> 
>> Best regards,
>> -- 
>> Luca Weiss <luca.weiss at fairphone.com>
>> 



More information about the U-Boot mailing list