pc: report all modes by intel display driver

Issue #4450
This commit is contained in:
Alexander Boettcher 2022-04-06 11:15:16 +02:00 committed by Christian Helmuth
parent 0c5d8f1156
commit daa6195732
4 changed files with 31 additions and 10 deletions

View File

@ -763,3 +763,15 @@ int request_firmware_direct(const struct firmware ** firmware_p,const char * nam
lx_emul_trace(__func__); lx_emul_trace(__func__);
return -1; return -1;
} }
int ___ratelimit(struct ratelimit_state * rs, const char * func)
{
/*
* from lib/ratelimit.c:
* " 0 means callbacks will be suppressed.
* 1 means go ahead and do it. "
*/
lx_emul_trace(__func__);
return 1;
}

View File

@ -16,14 +16,6 @@ void * PDE_DATA(const struct inode * inode)
} }
#include <linux/ratelimit_types.h>
int ___ratelimit(struct ratelimit_state * rs,const char * func)
{
lx_emul_trace_and_stop(__func__);
}
#include <linux/skbuff.h> #include <linux/skbuff.h>
struct sk_buff * __alloc_skb(unsigned int size,gfp_t gfp_mask,int flags,int node) struct sk_buff * __alloc_skb(unsigned int size,gfp_t gfp_mask,int flags,int node)

View File

@ -375,7 +375,14 @@ void intel_vgpu_detect(struct drm_i915_private * dev_priv)
void call_rcu(struct rcu_head * head, rcu_callback_t func) void call_rcu(struct rcu_head * head, rcu_callback_t func)
{ {
enum { KVFREE_RCU_OFFSET = 4096 };
lx_emul_trace(__func__); lx_emul_trace(__func__);
if (func < (rcu_callback_t)KVFREE_RCU_OFFSET) {
kvfree((void*)head - (unsigned long)func);
return;
}
func(head); func(head);
} }

View File

@ -135,7 +135,7 @@ static bool reconfigure(void * data)
unsigned err = 0; unsigned err = 0;
struct drm_fb_helper_surface_size sizes = {}; struct drm_fb_helper_surface_size sizes = {};
sizes.surface_depth = 32; sizes.surface_depth = 24;
sizes.surface_bpp = 32; sizes.surface_bpp = 32;
sizes.fb_width = mode_preferred.hdisplay; sizes.fb_width = mode_preferred.hdisplay;
sizes.fb_height = mode_preferred.vdisplay; sizes.fb_height = mode_preferred.vdisplay;
@ -335,6 +335,16 @@ void lx_user_init(void)
static int genode_fb_client_hotplug(struct drm_client_dev *client) static int genode_fb_client_hotplug(struct drm_client_dev *client)
{ {
/*
* Set deferred_setup to execute codepath of drm_fb_helper_hotplug_event()
* on next connector state change that does not drop modes, which are
* above the current framebuffer resolution. It is required if the
* connected display at runtime is larger than the ones attached already
* during boot. Without this quirk, not all modes are reported on displays
* connected after boot.
*/
i915_fb()->deferred_setup = true;
lx_emul_i915_hotplug_connector(client); lx_emul_i915_hotplug_connector(client);
return 0; return 0;
} }
@ -353,7 +363,7 @@ void lx_emul_i915_report(void * lx_data, void * genode_data)
drm_client_for_each_connector_iter(connector, &conn_iter) { drm_client_for_each_connector_iter(connector, &conn_iter) {
lx_emul_i915_report_connector(connector, genode_data, lx_emul_i915_report_connector(connector, genode_data,
connector->name, connector->name,
!!connector->encoder /* connected */, connector->status != connector_status_disconnected,
get_brightness(connector, INVALID_BRIGHTNESS)); get_brightness(connector, INVALID_BRIGHTNESS));
} }
drm_connector_list_iter_end(&conn_iter); drm_connector_list_iter_end(&conn_iter);