intel_fb: support larger resolutions

Increase "assumed" internal kernel memory size based on available memory
to support allocation of framebuffer larger than 16M, which was before
hardcoded.

Issue #4659
This commit is contained in:
Alexander Boettcher 2022-11-02 16:00:57 +01:00 committed by Christian Helmuth
parent 5df68922eb
commit 72217a6771
5 changed files with 22 additions and 11 deletions

View File

@ -216,7 +216,7 @@ append config {
append_if $use_gpu config {
<start name="intel_gpu_drv" caps="2000">
<resource name="RAM" quantum="40M"/>
<resource name="RAM" quantum="90M"/>
<provides>
<service name="Gpu"/>
<service name="Platform"/>
@ -241,7 +241,7 @@ append_if $use_gpu config {
append config {
<start name="intel_fb_drv" caps="1000">
<binary name="pc_intel_fb_drv"/>
<resource name="RAM" quantum="60M"/>
<resource name="RAM" quantum="90M"/>
<route>}
append_if $use_gpu config {

View File

@ -48,3 +48,9 @@ unsigned short emul_intel_gmch_control_reg()
return ret;
}
unsigned long long emul_avail_ram()
{
return Lx_kit::env().env.pd().avail_ram().value;
}

View File

@ -333,9 +333,6 @@ void i915_gem_driver_register(struct drm_i915_private * i915)
void i915_gem_init_early(struct drm_i915_private *dev_priv)
{
/* 4 * 4M XXX */
unsigned const ram_pages = 4 * 1024;
i915_gem_init__mm(dev_priv);
/*
i915_gem_init__contexts(dev_priv);
@ -345,7 +342,15 @@ void i915_gem_init_early(struct drm_i915_private *dev_priv)
spin_lock_init(&dev_priv->fb_tracking.lock);
totalram_pages_add(ram_pages);
/*
* Used by resource_size() check in shmem_get_pages in
* drivers/gpu/drm/i915/gem/i915_gem_shmem.c and initialized in
* i915_gem_shmem_setup() using totalram_pages()
*
* The memory is managed by Genode, so we have just to provide a
* value which is "big" enough truncated by the max available memory.
*/
totalram_pages_add(emul_avail_ram() / 4096);
}

View File

@ -44,13 +44,9 @@ void intel_wopcm_init_early(struct intel_wopcm * wopcm)
void si_meminfo(struct sysinfo * val)
{
/* 4M, ttm actually use only half - more or configurable XXX ? */
unsigned const ram_pages = 1024;
unsigned long long const ram_pages = emul_avail_ram() / PAGE_SIZE;
/* used by drivers/gpu/drm/ttm/ttm_device.c */
lx_emul_trace(__func__);
val->totalram = ram_pages;
val->sharedram = 0;
val->freeram = ram_pages;
@ -58,6 +54,8 @@ void si_meminfo(struct sysinfo * val)
val->totalhigh = 0;
val->freehigh = 0;
val->mem_unit = PAGE_SIZE;
lx_emul_trace(__func__);
}

View File

@ -38,6 +38,8 @@ unsigned short emul_intel_gmch_control_reg(void);
enum { OPREGION_PSEUDO_PHYS_ADDR = 0xffffefff };
unsigned long long emul_avail_ram(void);
#ifdef __cplusplus
}
#endif