On Mon, Oct 17, 2022 at 9:54 AM Thierry Reding <thierry.reding@xxxxxxxxx> wrote: > > On Mon, Oct 10, 2022 at 10:12:34AM +0200, Thomas Zimmermann wrote: > > Hi > > > > Am 07.10.22 um 14:49 schrieb Thierry Reding: > > > From: Thierry Reding <treding@xxxxxxxxxx> > > > > > > Simple framebuffers can be set up in system memory, which cannot be > > > requested and/or I/O remapped using the I/O resource helpers. Add a > > > separate code path that obtains system memory framebuffers from the > > > reserved memory region referenced in the memory-region property. > > > > > > v2: make screen base a struct iosys_map to avoid sparse warnings [...] > > > +static int simple_framebuffer_init(struct reserved_mem *rmem) > > > +{ > > > + pr_info("framebuffer memory at %pa, size %lu bytes\n", &rmem->base, > > > + (unsigned long)rmem->size); > > > + > > > + rmem->ops = &simple_framebuffer_ops; > > > + > > > + return 0; > > > +} > > > +RESERVEDMEM_OF_DECLARE(simple_framebuffer, "framebuffer", simple_framebuffer_init); > > > > What's the prupose of these code at all? I looked through the kernel, but > > there aren't many other examples of it. > > This is a fairly standard construct to deal with early memory > reservations. What happens is roughly this: during early kernel boot, > the reserved-memory core code will iterate over all children of the top- > level reserved-memory node and see if they have a compatible string that > matches one of the entries in the table created by these > RESERVEDMEM_OF_DECLARE entries. It will then call the init function for > a matched entry and register a struct reserved_mem for these. The init > function in this case just dumps an informational message to the boot > log to provide some information about the framebuffer region that was > reserved (which can be used for example for troubleshooting purposes) > and sets the device init/release operations (which will be called when a > device is associated with the reserved memory region, i.e. when the > of_reserved_mem_device_init_by_idx() function is called). > > The reason why there aren't many examples of this is because these are > special memory regions that (at least upstream) kernels seldom support. > Perhaps the most common use-cases are the shared DMA pools (such as > CMA). Also, not all regions need to be handled 'early' before slab allocator or drivers are probed. Do you need early handling here? I can't see why other than if fbcon is up early. Rob