From nobody Mon Dec 1 22:37:14 2025 Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A09B933DECA for ; Wed, 26 Nov 2025 16:09:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=195.135.223.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764173352; cv=none; b=LdFPUBpYXauUrDkSNBH96fVGQ/cXrKpgl2i0FCIWX6kCwdBIhq4k9NPP/sN7czOMMQQi0qJSM4xOZdyt2P7DOV+k6NArM8Nz2JxszNO21zqL/ynbXGsSgA/dZ08xEqB1YKaCGTUPQW03HVeem1IyI7dYtibyEQSxZMMpp+fjVLo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764173352; c=relaxed/simple; bh=L1aPOhyq8DGxlHXlPMvUQew9wYYpOFCTBbsUMdEBg7w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VMan9gRLR843AzXe9PHVt78iaYfSGCFEgfxAMScMUS5ENRQVZstu6m/26pkwcnaGg5lj9tcRb16qQYBiN67mg16TJhUSBAe7ra12sMVI0JNFhj1CKffxib6Yg25NkYcUYd/6jrBAf/9iQrmt2hkR/u8UtZW1HZcrpwogwFnAOyM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de; spf=pass smtp.mailfrom=suse.de; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b=HNlHLdT4; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b=BtXYUld8; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b=EyCENnQs; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b=x1rd6/pA; arc=none smtp.client-ip=195.135.223.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b="HNlHLdT4"; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b="BtXYUld8"; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b="EyCENnQs"; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b="x1rd6/pA" Received: from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104:10:150:64:97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id EB0005BE8D; Wed, 26 Nov 2025 16:08:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1764173340; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=63HXk2asPcR6HKGFSmIOTJlWneEzg1F4AZ9qPy2VUyc=; b=HNlHLdT4+ftHDfSGcOLmy/wgSh5PB0cIxN3PxYieoVKiFvyEg8LqW4ET/7i469pmj8Lj8r FFYRB2BMSM5Cjq6CIf+WPNeq6UfL04Jz+h3N19417jz3JnfrAY52w+MeBLNLemJLqAjoTl pID0na9X6myqM8n7YH+zioeY7M/kMQ8= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1764173340; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=63HXk2asPcR6HKGFSmIOTJlWneEzg1F4AZ9qPy2VUyc=; b=BtXYUld8tzzkYVjOlVGH33TFv6Kfv0PQxIUS+XyuDDZpunpaFqz3IKfrOFfn5OCn5VAeEF OOtQyrTU0ueFv8Dg== Authentication-Results: smtp-out2.suse.de; dkim=pass header.d=suse.de header.s=susede2_rsa header.b=EyCENnQs; dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b="x1rd6/pA" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1764173339; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=63HXk2asPcR6HKGFSmIOTJlWneEzg1F4AZ9qPy2VUyc=; b=EyCENnQsl8ql14ma1fvIBorWD44yIEHI8lT/qCunnUIaRK1Ao+djFjva9osjmJ1wh7q49T 46MPz3orf+H4x0zBFul1vfD9JsUmomlTSyzC/+g+duBwOe0GRJaZFyKigWcDkFEhhFI+MS MEdpWIq3AQR5UNvOlmCX8bmiicagCc8= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1764173339; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=63HXk2asPcR6HKGFSmIOTJlWneEzg1F4AZ9qPy2VUyc=; b=x1rd6/pAixjpIpLzme3cxM2k/UuYVXhrQrtn+ltzf+fRuYOB2bhlwpUamTWylLS2vhJrV5 o3i4EkgeCsw7HDBA== Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id 7CDC83EA65; Wed, 26 Nov 2025 16:08:59 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap1.dmz-prg2.suse.org with ESMTPSA id SHoMHRsmJ2lnIgAAD6G6ig (envelope-from ); Wed, 26 Nov 2025 16:08:59 +0000 From: Thomas Zimmermann To: ardb@kernel.org, javierm@redhat.com, arnd@arndb.de, richard.lyu@suse.com, helgaas@kernel.org Cc: x86@kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-efi@vger.kernel.org, loongarch@lists.linux.dev, linux-riscv@lists.infradead.org, dri-devel@lists.freedesktop.org, linux-hyperv@vger.kernel.org, linux-pci@vger.kernel.org, linux-fbdev@vger.kernel.org, Thomas Zimmermann Subject: [PATCH v3 1/9] efi: earlycon: Reduce number of references to global screen_info Date: Wed, 26 Nov 2025 17:03:18 +0100 Message-ID: <20251126160854.553077-2-tzimmermann@suse.de> X-Mailer: git-send-email 2.51.1 In-Reply-To: <20251126160854.553077-1-tzimmermann@suse.de> References: <20251126160854.553077-1-tzimmermann@suse.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Spamd-Result: default: False [-3.01 / 50.00]; BAYES_HAM(-3.00)[100.00%]; MID_CONTAINS_FROM(1.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000]; R_MISSING_CHARSET(0.50)[]; R_DKIM_ALLOW(-0.20)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; MX_GOOD(-0.01)[]; FUZZY_RATELIMITED(0.00)[rspamd.com]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; RBL_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[2a07:de40:b281:104:10:150:64:97:from]; SPAMHAUS_XBL(0.00)[2a07:de40:b281:104:10:150:64:97:from]; MIME_TRACE(0.00)[0:+]; ARC_NA(0.00)[]; RCPT_COUNT_TWELVE(0.00)[16]; RCVD_COUNT_TWO(0.00)[2]; TO_MATCH_ENVRCPT_ALL(0.00)[]; FROM_HAS_DN(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; DNSWL_BLOCKED(0.00)[2a07:de40:b281:104:10:150:64:97:from,2a07:de40:b281:106:10:150:64:167:received]; FROM_EQ_ENVFROM(0.00)[]; R_RATELIMIT(0.00)[to_ip_from(RLtfyjk8sg4x43ngtem9djprcp)]; RCVD_TLS_ALL(0.00)[]; DKIM_TRACE(0.00)[suse.de:+]; TO_DN_SOME(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:mid,suse.de:dkim,suse.de:email,imap1.dmz-prg2.suse.org:rdns,imap1.dmz-prg2.suse.org:helo,suse.com:email] X-Spam-Level: X-Spam-Score: -3.01 X-Rspamd-Server: rspamd2.dmz-prg2.suse.org X-Rspamd-Queue-Id: EB0005BE8D X-Rspamd-Action: no action X-Spam-Flag: NO Content-Type: text/plain; charset="utf-8" Replace usage of global screen_info with local pointers. This will later reduce churn when screen_info is being moved. v2: - fix coding style Signed-off-by: Thomas Zimmermann Reviewed-by: Richard Lyu Acked-by: Arnd Bergmann Acked-by: Ard Biesheuvel --- drivers/firmware/efi/earlycon.c | 40 ++++++++++++++++----------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/drivers/firmware/efi/earlycon.c b/drivers/firmware/efi/earlyco= n.c index d18a1a5de144..42e3a173dac1 100644 --- a/drivers/firmware/efi/earlycon.c +++ b/drivers/firmware/efi/earlycon.c @@ -32,12 +32,13 @@ static void *efi_fb; */ static int __init efi_earlycon_remap_fb(void) { + const struct screen_info *si =3D &screen_info; + /* bail if there is no bootconsole or it was unregistered already */ if (!earlycon_console || !console_is_registered(earlycon_console)) return 0; =20 - efi_fb =3D memremap(fb_base, screen_info.lfb_size, - fb_wb ? MEMREMAP_WB : MEMREMAP_WC); + efi_fb =3D memremap(fb_base, si->lfb_size, fb_wb ? MEMREMAP_WB : MEMREMAP= _WC); =20 return efi_fb ? 0 : -ENOMEM; } @@ -71,12 +72,12 @@ static __ref void efi_earlycon_unmap(void *addr, unsign= ed long len) early_memunmap(addr, len); } =20 -static void efi_earlycon_clear_scanline(unsigned int y) +static void efi_earlycon_clear_scanline(unsigned int y, const struct scree= n_info *si) { unsigned long *dst; u16 len; =20 - len =3D screen_info.lfb_linelength; + len =3D si->lfb_linelength; dst =3D efi_earlycon_map(y*len, len); if (!dst) return; @@ -85,7 +86,7 @@ static void efi_earlycon_clear_scanline(unsigned int y) efi_earlycon_unmap(dst, len); } =20 -static void efi_earlycon_scroll_up(void) +static void efi_earlycon_scroll_up(const struct screen_info *si) { unsigned long *dst, *src; u16 maxlen =3D 0; @@ -99,8 +100,8 @@ static void efi_earlycon_scroll_up(void) } maxlen *=3D 4; =20 - len =3D screen_info.lfb_linelength; - height =3D screen_info.lfb_height; + len =3D si->lfb_linelength; + height =3D si->lfb_height; =20 for (i =3D 0; i < height - font->height; i++) { dst =3D efi_earlycon_map(i*len, len); @@ -120,7 +121,8 @@ static void efi_earlycon_scroll_up(void) } } =20 -static void efi_earlycon_write_char(u32 *dst, unsigned char c, unsigned in= t h) +static void efi_earlycon_write_char(u32 *dst, unsigned char c, unsigned in= t h, + const struct screen_info *si) { const u32 color_black =3D 0x00000000; const u32 color_white =3D 0x00ffffff; @@ -145,13 +147,12 @@ static void efi_earlycon_write_char(u32 *dst, unsigne= d char c, unsigned int h) static void efi_earlycon_write(struct console *con, const char *str, unsigned int num) { - struct screen_info *si; + const struct screen_info *si =3D &screen_info; u32 cur_efi_x =3D efi_x; unsigned int len; const char *s; void *dst; =20 - si =3D &screen_info; len =3D si->lfb_linelength; =20 while (num) { @@ -174,7 +175,7 @@ efi_earlycon_write(struct console *con, const char *str= , unsigned int num) x =3D efi_x; =20 while (n-- > 0) { - efi_earlycon_write_char(dst + x*4, *s, h); + efi_earlycon_write_char(dst + x * 4, *s, h, si); x +=3D font->width; s++; } @@ -207,10 +208,10 @@ efi_earlycon_write(struct console *con, const char *s= tr, unsigned int num) cur_line_y =3D (cur_line_y + 1) % max_line_y; =20 efi_y -=3D font->height; - efi_earlycon_scroll_up(); + efi_earlycon_scroll_up(si); =20 for (i =3D 0; i < font->height; i++) - efi_earlycon_clear_scanline(efi_y + i); + efi_earlycon_clear_scanline(efi_y + i, si); } } } @@ -226,22 +227,21 @@ void __init efi_earlycon_reprobe(void) static int __init efi_earlycon_setup(struct earlycon_device *device, const char *opt) { - struct screen_info *si; + const struct screen_info *si =3D &screen_info; u16 xres, yres; u32 i; =20 fb_wb =3D opt && !strcmp(opt, "ram"); =20 - if (screen_info.orig_video_isVGA !=3D VIDEO_TYPE_EFI) { + if (si->orig_video_isVGA !=3D VIDEO_TYPE_EFI) { fb_probed =3D true; return -ENODEV; } =20 - fb_base =3D screen_info.lfb_base; - if (screen_info.capabilities & VIDEO_CAPABILITY_64BIT_BASE) - fb_base |=3D (u64)screen_info.ext_lfb_base << 32; + fb_base =3D si->lfb_base; + if (si->capabilities & VIDEO_CAPABILITY_64BIT_BASE) + fb_base |=3D (u64)si->ext_lfb_base << 32; =20 - si =3D &screen_info; xres =3D si->lfb_width; yres =3D si->lfb_height; =20 @@ -266,7 +266,7 @@ static int __init efi_earlycon_setup(struct earlycon_de= vice *device, =20 efi_y -=3D font->height; for (i =3D 0; i < (yres - efi_y) / font->height; i++) - efi_earlycon_scroll_up(); + efi_earlycon_scroll_up(si); =20 device->con->write =3D efi_earlycon_write; earlycon_console =3D device->con; --=20 2.51.1 From nobody Mon Dec 1 22:37:14 2025 Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E710433F391 for ; Wed, 26 Nov 2025 16:09:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=195.135.223.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764173359; cv=none; b=CbrUn0KXUQPBl5LWgA33xMwoFROAXzgZ48iIY9lQWpgnMf7hgsU4c7RYbjocXyfCVwPd8/SzY7IJqV8phnfFtpvqJDKnJbWUI5mTYXtrjQejtAX7erT65OEQQHox3J8Dyqf9enkYpnhcpYNni7SFIFJEwS4H+KuFifzWWZ2oKHg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764173359; c=relaxed/simple; bh=/kuMCC5leu0oR7QSirQiv13QRdBFSZlUqZuADF+YmU8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=o10tBl0QZB+qKyTY3Kc6rCkDjSFyVnLN88Csl+ELzg3xpyzHOw5lEl6R3WP8u3VBb3lTJDxg706/xuecdzONY0zbWnw7enAHIUbPG2kbOTlr5h916u7JHwpzmrK5ReZx7XRsFkrRGsrNehOdlTNUS0huPBycTBMYgoyLmf6kZpk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de; spf=pass smtp.mailfrom=suse.de; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b=DoC7dgJI; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b=lgZWJFcB; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b=DoC7dgJI; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b=lgZWJFcB; arc=none smtp.client-ip=195.135.223.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b="DoC7dgJI"; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b="lgZWJFcB"; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b="DoC7dgJI"; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b="lgZWJFcB" Received: from imap1.dmz-prg2.suse.org (unknown [10.150.64.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 6CFE65BE98; Wed, 26 Nov 2025 16:09:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1764173340; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=TLqTeUqxHMGJ5DwnWS0LONaS0qMJkFM3aTtgypG/rBQ=; b=DoC7dgJIBUamaOQUtk/UHCiAdZVnC+XcXAbZM8zcCtANlasXUyFUDagtCuQI3caOLpSteq /7cfL+nllbmaoskoi7bzoMJt5Rb4hAEmeZnlsQLxxc1ou+T1Vr26d7HAwi5eVz4UBFAcNu 0fQcGH7PjyESobUeum0d3dz+J0heYpA= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1764173340; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=TLqTeUqxHMGJ5DwnWS0LONaS0qMJkFM3aTtgypG/rBQ=; b=lgZWJFcB5v0eL4kg4JssZ9fNFWTFc3GGU7WXfuT205nINclXe1hAUcGFX53steVpx+IaHG HIhEIZk/LqKWzFCg== Authentication-Results: smtp-out2.suse.de; none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1764173340; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=TLqTeUqxHMGJ5DwnWS0LONaS0qMJkFM3aTtgypG/rBQ=; b=DoC7dgJIBUamaOQUtk/UHCiAdZVnC+XcXAbZM8zcCtANlasXUyFUDagtCuQI3caOLpSteq /7cfL+nllbmaoskoi7bzoMJt5Rb4hAEmeZnlsQLxxc1ou+T1Vr26d7HAwi5eVz4UBFAcNu 0fQcGH7PjyESobUeum0d3dz+J0heYpA= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1764173340; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=TLqTeUqxHMGJ5DwnWS0LONaS0qMJkFM3aTtgypG/rBQ=; b=lgZWJFcB5v0eL4kg4JssZ9fNFWTFc3GGU7WXfuT205nINclXe1hAUcGFX53steVpx+IaHG HIhEIZk/LqKWzFCg== Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id F30ED3EA63; Wed, 26 Nov 2025 16:08:59 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap1.dmz-prg2.suse.org with ESMTPSA id kJ3oORsmJ2lnIgAAD6G6ig (envelope-from ); Wed, 26 Nov 2025 16:08:59 +0000 From: Thomas Zimmermann To: ardb@kernel.org, javierm@redhat.com, arnd@arndb.de, richard.lyu@suse.com, helgaas@kernel.org Cc: x86@kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-efi@vger.kernel.org, loongarch@lists.linux.dev, linux-riscv@lists.infradead.org, dri-devel@lists.freedesktop.org, linux-hyperv@vger.kernel.org, linux-pci@vger.kernel.org, linux-fbdev@vger.kernel.org, Thomas Zimmermann Subject: [PATCH v3 2/9] efi: sysfb_efi: Reduce number of references to global screen_info Date: Wed, 26 Nov 2025 17:03:19 +0100 Message-ID: <20251126160854.553077-3-tzimmermann@suse.de> X-Mailer: git-send-email 2.51.1 In-Reply-To: <20251126160854.553077-1-tzimmermann@suse.de> References: <20251126160854.553077-1-tzimmermann@suse.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Spam-Flag: NO X-Spam-Score: -2.80 X-Spam-Level: X-Spamd-Result: default: False [-2.80 / 50.00]; BAYES_HAM(-3.00)[100.00%]; NEURAL_HAM_LONG(-1.00)[-1.000]; MID_CONTAINS_FROM(1.00)[]; R_MISSING_CHARSET(0.50)[]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; TO_MATCH_ENVRCPT_ALL(0.00)[]; FROM_HAS_DN(0.00)[]; ARC_NA(0.00)[]; MIME_TRACE(0.00)[0:+]; RCPT_COUNT_TWELVE(0.00)[16]; DBL_BLOCKED_OPENRESOLVER(0.00)[suse.com:email,suse.de:email,suse.de:mid,imap1.dmz-prg2.suse.org:helo]; RCVD_VIA_SMTP_AUTH(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; RCVD_COUNT_TWO(0.00)[2]; FUZZY_RATELIMITED(0.00)[rspamd.com]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; TO_DN_SOME(0.00)[]; RCVD_TLS_ALL(0.00)[] Content-Type: text/plain; charset="utf-8" Replace usage of global screen_info with local pointers. This will later reduce churn when screen_info is being moved. Signed-off-by: Thomas Zimmermann Reviewed-by: Richard Lyu Acked-by: Arnd Bergmann Acked-by: Ard Biesheuvel --- drivers/firmware/efi/sysfb_efi.c | 81 ++++++++++++++++--------------- drivers/firmware/sysfb.c | 4 +- drivers/firmware/sysfb_simplefb.c | 2 +- include/linux/sysfb.h | 9 ++-- 4 files changed, 51 insertions(+), 45 deletions(-) diff --git a/drivers/firmware/efi/sysfb_efi.c b/drivers/firmware/efi/sysfb_= efi.c index 1e509595ac03..8e0f9d08397f 100644 --- a/drivers/firmware/efi/sysfb_efi.c +++ b/drivers/firmware/efi/sysfb_efi.c @@ -92,7 +92,7 @@ void efifb_setup_from_dmi(struct screen_info *si, const c= har *opt) }) =20 #ifdef CONFIG_EFI -static int __init efifb_set_system(const struct dmi_system_id *id) +static int __init efifb_set_system(struct screen_info *si, const struct dm= i_system_id *id) { struct efifb_dmi_info *info =3D id->driver_data; =20 @@ -101,14 +101,14 @@ static int __init efifb_set_system(const struct dmi_s= ystem_id *id) return 0; =20 /* Trust the bootloader over the DMI tables */ - if (screen_info.lfb_base =3D=3D 0) { + if (si->lfb_base =3D=3D 0) { #if defined(CONFIG_PCI) struct pci_dev *dev =3D NULL; int found_bar =3D 0; #endif if (info->base) { - screen_info.lfb_base =3D choose_value(info->base, - screen_info.lfb_base, OVERRIDE_BASE, + si->lfb_base =3D choose_value(info->base, + si->lfb_base, OVERRIDE_BASE, info->flags); =20 #if defined(CONFIG_PCI) @@ -135,49 +135,53 @@ static int __init efifb_set_system(const struct dmi_s= ystem_id *id) =20 start =3D pci_resource_start(dev, i); end =3D pci_resource_end(dev, i); - if (screen_info.lfb_base >=3D start && - screen_info.lfb_base < end) { + if (si->lfb_base >=3D start && si->lfb_base < end) { found_bar =3D 1; break; } } } if (!found_bar) - screen_info.lfb_base =3D 0; + si->lfb_base =3D 0; #endif } } - if (screen_info.lfb_base) { - screen_info.lfb_linelength =3D choose_value(info->stride, - screen_info.lfb_linelength, OVERRIDE_STRIDE, + if (si->lfb_base) { + si->lfb_linelength =3D choose_value(info->stride, + si->lfb_linelength, OVERRIDE_STRIDE, info->flags); - screen_info.lfb_width =3D choose_value(info->width, - screen_info.lfb_width, OVERRIDE_WIDTH, + si->lfb_width =3D choose_value(info->width, + si->lfb_width, OVERRIDE_WIDTH, info->flags); - screen_info.lfb_height =3D choose_value(info->height, - screen_info.lfb_height, OVERRIDE_HEIGHT, + si->lfb_height =3D choose_value(info->height, + si->lfb_height, OVERRIDE_HEIGHT, info->flags); - if (screen_info.orig_video_isVGA =3D=3D 0) - screen_info.orig_video_isVGA =3D VIDEO_TYPE_EFI; + if (si->orig_video_isVGA =3D=3D 0) + si->orig_video_isVGA =3D VIDEO_TYPE_EFI; } else { - screen_info.lfb_linelength =3D 0; - screen_info.lfb_width =3D 0; - screen_info.lfb_height =3D 0; - screen_info.orig_video_isVGA =3D 0; + si->lfb_linelength =3D 0; + si->lfb_width =3D 0; + si->lfb_height =3D 0; + si->orig_video_isVGA =3D 0; return 0; } =20 printk(KERN_INFO "efifb: dmi detected %s - framebuffer at 0x%08x " "(%dx%d, stride %d)\n", id->ident, - screen_info.lfb_base, screen_info.lfb_width, - screen_info.lfb_height, screen_info.lfb_linelength); + si->lfb_base, si->lfb_width, + si->lfb_height, si->lfb_linelength); =20 return 1; } =20 +static int __init efifb_set_system_callback(const struct dmi_system_id *id) +{ + return efifb_set_system(&screen_info, id); +} + #define EFIFB_DMI_SYSTEM_ID(vendor, name, enumid) \ { \ - efifb_set_system, \ + efifb_set_system_callback, \ name, \ { \ DMI_MATCH(DMI_BIOS_VENDOR, vendor), \ @@ -284,12 +288,13 @@ static const struct dmi_system_id efifb_dmi_swap_widt= h_height[] __initconst =3D { {}, }; =20 -static bool efifb_overlaps_pci_range(const struct of_pci_range *range) +static bool efifb_overlaps_pci_range(const struct screen_info *si, + const struct of_pci_range *range) { - u64 fb_base =3D screen_info.lfb_base; + u64 fb_base =3D si->lfb_base; =20 - if (screen_info.capabilities & VIDEO_CAPABILITY_64BIT_BASE) - fb_base |=3D (u64)(unsigned long)screen_info.ext_lfb_base << 32; + if (si->capabilities & VIDEO_CAPABILITY_64BIT_BASE) + fb_base |=3D (u64)(unsigned long)si->ext_lfb_base << 32; =20 return fb_base >=3D range->cpu_addr && fb_base < (range->cpu_addr + range->size); @@ -311,7 +316,7 @@ static struct device_node *find_pci_overlap_node(void) } =20 for_each_of_pci_range(&parser, &range) - if (efifb_overlaps_pci_range(&range)) + if (efifb_overlaps_pci_range(&screen_info, &range)) return np; } return NULL; @@ -349,25 +354,25 @@ static const struct fwnode_operations efifb_fwnode_op= s =3D { =20 static struct fwnode_handle efifb_fwnode; =20 -__init void sysfb_apply_efi_quirks(void) +__init void sysfb_apply_efi_quirks(struct screen_info *si) { - if (screen_info.orig_video_isVGA !=3D VIDEO_TYPE_EFI || - !(screen_info.capabilities & VIDEO_CAPABILITY_SKIP_QUIRKS)) + if (si->orig_video_isVGA !=3D VIDEO_TYPE_EFI || + !(si->capabilities & VIDEO_CAPABILITY_SKIP_QUIRKS)) dmi_check_system(efifb_dmi_system_table); =20 - if (screen_info.orig_video_isVGA =3D=3D VIDEO_TYPE_EFI && + if (si->orig_video_isVGA =3D=3D VIDEO_TYPE_EFI && dmi_check_system(efifb_dmi_swap_width_height)) { - u16 temp =3D screen_info.lfb_width; + u16 temp =3D si->lfb_width; =20 - screen_info.lfb_width =3D screen_info.lfb_height; - screen_info.lfb_height =3D temp; - screen_info.lfb_linelength =3D 4 * screen_info.lfb_width; + si->lfb_width =3D si->lfb_height; + si->lfb_height =3D temp; + si->lfb_linelength =3D 4 * si->lfb_width; } } =20 -__init void sysfb_set_efifb_fwnode(struct platform_device *pd) +__init void sysfb_set_efifb_fwnode(const struct screen_info *si, struct pl= atform_device *pd) { - if (screen_info.orig_video_isVGA =3D=3D VIDEO_TYPE_EFI && IS_ENABLED(CONF= IG_PCI)) { + if (si->orig_video_isVGA =3D=3D VIDEO_TYPE_EFI && IS_ENABLED(CONFIG_PCI))= { fwnode_init(&efifb_fwnode, &efifb_fwnode_ops); pd->dev.fwnode =3D &efifb_fwnode; } diff --git a/drivers/firmware/sysfb.c b/drivers/firmware/sysfb.c index 889e5b05c739..916b28538a29 100644 --- a/drivers/firmware/sysfb.c +++ b/drivers/firmware/sysfb.c @@ -155,7 +155,7 @@ static __init int sysfb_init(void) if (disabled) goto unlock_mutex; =20 - sysfb_apply_efi_quirks(); + sysfb_apply_efi_quirks(si); =20 parent =3D sysfb_parent_dev(si); if (IS_ERR(parent)) { @@ -200,7 +200,7 @@ static __init int sysfb_init(void) =20 pd->dev.parent =3D parent; =20 - sysfb_set_efifb_fwnode(pd); + sysfb_set_efifb_fwnode(si, pd); =20 ret =3D platform_device_add_data(pd, si, sizeof(*si)); if (ret) diff --git a/drivers/firmware/sysfb_simplefb.c b/drivers/firmware/sysfb_sim= plefb.c index 592d8a644619..71f542e37732 100644 --- a/drivers/firmware/sysfb_simplefb.c +++ b/drivers/firmware/sysfb_simplefb.c @@ -117,7 +117,7 @@ __init struct platform_device *sysfb_create_simplefb(co= nst struct screen_info *s =20 pd->dev.parent =3D parent; =20 - sysfb_set_efifb_fwnode(pd); + sysfb_set_efifb_fwnode(si, pd); =20 ret =3D platform_device_add_resources(pd, &res, 1); if (ret) diff --git a/include/linux/sysfb.h b/include/linux/sysfb.h index b449665c686a..8527a50a5290 100644 --- a/include/linux/sysfb.h +++ b/include/linux/sysfb.h @@ -82,16 +82,17 @@ static inline bool sysfb_handles_screen_info(void) #ifdef CONFIG_EFI =20 extern struct efifb_dmi_info efifb_dmi_list[]; -void sysfb_apply_efi_quirks(void); -void sysfb_set_efifb_fwnode(struct platform_device *pd); +void sysfb_apply_efi_quirks(struct screen_info *si); +void sysfb_set_efifb_fwnode(const struct screen_info *si, struct platform_= device *pd); =20 #else /* CONFIG_EFI */ =20 -static inline void sysfb_apply_efi_quirks(void) +static inline void sysfb_apply_efi_quirks(struct screen_info *si) { } =20 -static inline void sysfb_set_efifb_fwnode(struct platform_device *pd) +static inline void sysfb_set_efifb_fwnode(const struct screen_info *si, + struct platform_device *pd) { } =20 --=20 2.51.1 From nobody Mon Dec 1 22:37:14 2025 Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 30A2433FE0C for ; Wed, 26 Nov 2025 16:09:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=195.135.223.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764173367; cv=none; b=T+g200iDKt5+NDwCaa8/2pad9QjXDDosfG9RtFcinAwP5QXJoUjb3Hg7/cO+31ACZ/0+Qa2Jnh5VchwxSwFSPQ2bvXVTjkt5XZsarvOUGSwprxAAA4iw2YzBAzvIKJVIl5uqwyySgj2+G64yQvzrip51xQROpaUWB9maMErRh34= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764173367; c=relaxed/simple; bh=14pakZtIwMf+xKgbsWc6zXdEVt3YvxE4efqD8N8oMdE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=LEgeQD1pTx7u2UmKKQn49YagT3EKOMXHoM69cR46qyxPtjjTOcoaMkW6zcidP2DreQOzSPOl2Mz0VjE28RxYnQ+RJUDMxyag6e0G807MxJifqugnJXvOrI3ExKLHPAwbf26lWrKX3oZ5Uk/fyIrgsgbdbHGLqnk5F8jMJMzgYV4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de; spf=pass smtp.mailfrom=suse.de; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b=YIebGvX6; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b=dF+lI1ok; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b=QGiJn3kD; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b=dVva07uz; arc=none smtp.client-ip=195.135.223.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b="YIebGvX6"; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b="dF+lI1ok"; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b="QGiJn3kD"; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b="dVva07uz" Received: from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104:10:150:64:97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id EEA165BEB2; Wed, 26 Nov 2025 16:09:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1764173341; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=rgp8e/ztEk3SroGbIpTtvMrgmXHBuJDU6cXbgqWVfUM=; b=YIebGvX6MVunmhKbKAsNi+PxznaZ+5NUp3zAGhZScxBxELF9R9O/OVfiSeFcMrVt4oYyzc PLEvT0/q9Tg4ovZ6aN9p+q+dBAH6COLEF3PAGgCkgyawuYhnfYwaqPXRQaNxt01sFLbZQl p0j6zwTzPU6h4wpmKZ4u5ZPF4bxcM6A= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1764173341; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=rgp8e/ztEk3SroGbIpTtvMrgmXHBuJDU6cXbgqWVfUM=; b=dF+lI1okdyypxFxWlTgyW+nN+tUZZ7lcoWiV/fIqv5ExoMvUOf5y5UOXDR9M9swylj+kqF VqZn1UczVZVG4uBQ== Authentication-Results: smtp-out2.suse.de; dkim=pass header.d=suse.de header.s=susede2_rsa header.b=QGiJn3kD; dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b=dVva07uz DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1764173340; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=rgp8e/ztEk3SroGbIpTtvMrgmXHBuJDU6cXbgqWVfUM=; b=QGiJn3kD/FeBxgGWZAJaiznlfqFXD46IMlOmIVJ6sFxJWdTCApBkrTmRMITbEvn9Y9onS0 WPmKhMPplKRUmBzzz86qW3DtmPOCqqZt/odXRorgfGxlNAYwAAccmK7zAqv0DELSny657N d4D6jslbOZc23s5NhS/2WQoV+PmO4fs= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1764173340; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=rgp8e/ztEk3SroGbIpTtvMrgmXHBuJDU6cXbgqWVfUM=; b=dVva07uzPe/JQfQSPwGdnPsMHm837ZGVVMBumavAiogRp1Tj1Dp7w9fs4n9FnRhcXitdRh aB/RULljezUmTABw== Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id 74F8D3EA65; Wed, 26 Nov 2025 16:09:00 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap1.dmz-prg2.suse.org with ESMTPSA id OB0hGxwmJ2lnIgAAD6G6ig (envelope-from ); Wed, 26 Nov 2025 16:09:00 +0000 From: Thomas Zimmermann To: ardb@kernel.org, javierm@redhat.com, arnd@arndb.de, richard.lyu@suse.com, helgaas@kernel.org Cc: x86@kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-efi@vger.kernel.org, loongarch@lists.linux.dev, linux-riscv@lists.infradead.org, dri-devel@lists.freedesktop.org, linux-hyperv@vger.kernel.org, linux-pci@vger.kernel.org, linux-fbdev@vger.kernel.org, Thomas Zimmermann Subject: [PATCH v3 3/9] sysfb: Add struct sysfb_display_info Date: Wed, 26 Nov 2025 17:03:20 +0100 Message-ID: <20251126160854.553077-4-tzimmermann@suse.de> X-Mailer: git-send-email 2.51.1 In-Reply-To: <20251126160854.553077-1-tzimmermann@suse.de> References: <20251126160854.553077-1-tzimmermann@suse.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Spamd-Result: default: False [-3.01 / 50.00]; BAYES_HAM(-3.00)[99.99%]; MID_CONTAINS_FROM(1.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000]; R_MISSING_CHARSET(0.50)[]; R_DKIM_ALLOW(-0.20)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; MX_GOOD(-0.01)[]; FUZZY_RATELIMITED(0.00)[rspamd.com]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; RBL_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[2a07:de40:b281:104:10:150:64:97:from]; SPAMHAUS_XBL(0.00)[2a07:de40:b281:104:10:150:64:97:from]; MIME_TRACE(0.00)[0:+]; ARC_NA(0.00)[]; RCPT_COUNT_TWELVE(0.00)[16]; RCVD_COUNT_TWO(0.00)[2]; TO_MATCH_ENVRCPT_ALL(0.00)[]; FROM_HAS_DN(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; DNSWL_BLOCKED(0.00)[2a07:de40:b281:106:10:150:64:167:received,2a07:de40:b281:104:10:150:64:97:from]; FROM_EQ_ENVFROM(0.00)[]; R_RATELIMIT(0.00)[to_ip_from(RLtfyjk8sg4x43ngtem9djprcp)]; RCVD_TLS_ALL(0.00)[]; DKIM_TRACE(0.00)[suse.de:+]; TO_DN_SOME(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[imap1.dmz-prg2.suse.org:helo,imap1.dmz-prg2.suse.org:rdns,suse.de:mid,suse.de:email,suse.de:dkim] X-Rspamd-Action: no action X-Spam-Flag: NO X-Spam-Score: -3.01 X-Spam-Level: X-Rspamd-Server: rspamd1.dmz-prg2.suse.org X-Rspamd-Queue-Id: EEA165BEB2 Content-Type: text/plain; charset="utf-8" Add struct sysfb_display_info to wrap display-related state. For now it contains only the screen's video mode. Later EDID will be added as well. This struct will be helpful for passing display state to sysfb drivers or from the EFI stub library. Signed-off-by: Thomas Zimmermann Acked-by: Arnd Bergmann Acked-by: Ard Biesheuvel Reviewed-by: Richard Lyu --- include/linux/sysfb.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/include/linux/sysfb.h b/include/linux/sysfb.h index 8527a50a5290..8b37247528bf 100644 --- a/include/linux/sysfb.h +++ b/include/linux/sysfb.h @@ -8,6 +8,7 @@ */ =20 #include +#include #include =20 #include @@ -60,6 +61,10 @@ struct efifb_dmi_info { int flags; }; =20 +struct sysfb_display_info { + struct screen_info screen; +}; + #ifdef CONFIG_SYSFB =20 void sysfb_disable(struct device *dev); --=20 2.51.1 From nobody Mon Dec 1 22:37:14 2025 Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.223.130]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 65A3033C503 for ; Wed, 26 Nov 2025 16:09:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=195.135.223.130 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764173346; cv=none; b=HLxGQEkTGQ0jsLmU3EKzSj2tL318mKrmTRYk5i3at3uZyZ1dlxmCnOwXqqU0CBvDEwsvRIBwkk31IsLx8BLdAlqzdApvbLInfbJcMWCT/vXG5elWW6lbEU7IK5ZKFbTwljwuTy7QBt3Peu55mu1qct6NK5m3ru4krIeZvkdefQU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764173346; c=relaxed/simple; bh=3WwWbTlIlPj1FcNDjJw2A4/LVrs2vR+KyOMtOBaSlBw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mz5EYqOSZdP1WYwg6qI7jfMQpDgKSB/ft0SVaAs/AZHgxrQ2+vCVUgkdPdtSa5XQFx6FDDqgYxw6xnTJdSz1izY9Qnmj/XRcS99peRyVn4PwC5v4E97RASIFl/GQvcNuteCAyOTyc5b9CdRm6oBXxigcmgO9pnnqv/673LY9akI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de; spf=pass smtp.mailfrom=suse.de; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b=DKdVIS/5; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b=sbeogGZA; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b=DKdVIS/5; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b=sbeogGZA; arc=none smtp.client-ip=195.135.223.130 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b="DKdVIS/5"; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b="sbeogGZA"; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b="DKdVIS/5"; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b="sbeogGZA" Received: from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104:10:150:64:97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id 62F32336D7; Wed, 26 Nov 2025 16:09:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1764173341; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=rRIf2ShRONaKGm+iQwPVVgZrf+M8pVG5Np77UOpTWeg=; b=DKdVIS/5AKTshXzRccAZLyvAbRSNk74MrQQcA+heDuKWh92JgyuFHLJUFTSijL2ZSsK7Lx krjGsH1o0rqrAvP9SWKIE66fjy79EnLtF4CJqfYbTTRs/ue0/UPadL6E7xqCfc+9frFwhd hT8G/v9ctMbUt0HPhT+2NQaj0NCUvds= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1764173341; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=rRIf2ShRONaKGm+iQwPVVgZrf+M8pVG5Np77UOpTWeg=; b=sbeogGZAkKwluO5rdD4VLhgw5BMWr2NoTSYfdBAeQJ6cmZ2x7PMqeZpN5jJx7xkPVj5l43 KPSYGd+jX+aesICQ== Authentication-Results: smtp-out1.suse.de; dkim=pass header.d=suse.de header.s=susede2_rsa header.b="DKdVIS/5"; dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b=sbeogGZA DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1764173341; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=rRIf2ShRONaKGm+iQwPVVgZrf+M8pVG5Np77UOpTWeg=; b=DKdVIS/5AKTshXzRccAZLyvAbRSNk74MrQQcA+heDuKWh92JgyuFHLJUFTSijL2ZSsK7Lx krjGsH1o0rqrAvP9SWKIE66fjy79EnLtF4CJqfYbTTRs/ue0/UPadL6E7xqCfc+9frFwhd hT8G/v9ctMbUt0HPhT+2NQaj0NCUvds= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1764173341; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=rRIf2ShRONaKGm+iQwPVVgZrf+M8pVG5Np77UOpTWeg=; b=sbeogGZAkKwluO5rdD4VLhgw5BMWr2NoTSYfdBAeQJ6cmZ2x7PMqeZpN5jJx7xkPVj5l43 KPSYGd+jX+aesICQ== Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id EB4703EA63; Wed, 26 Nov 2025 16:09:00 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap1.dmz-prg2.suse.org with ESMTPSA id YIQ4OBwmJ2lnIgAAD6G6ig (envelope-from ); Wed, 26 Nov 2025 16:09:00 +0000 From: Thomas Zimmermann To: ardb@kernel.org, javierm@redhat.com, arnd@arndb.de, richard.lyu@suse.com, helgaas@kernel.org Cc: x86@kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-efi@vger.kernel.org, loongarch@lists.linux.dev, linux-riscv@lists.infradead.org, dri-devel@lists.freedesktop.org, linux-hyperv@vger.kernel.org, linux-pci@vger.kernel.org, linux-fbdev@vger.kernel.org, Thomas Zimmermann , Bjorn Helgaas Subject: [PATCH v3 4/9] sysfb: Replace screen_info with sysfb_primary_display Date: Wed, 26 Nov 2025 17:03:21 +0100 Message-ID: <20251126160854.553077-5-tzimmermann@suse.de> X-Mailer: git-send-email 2.51.1 In-Reply-To: <20251126160854.553077-1-tzimmermann@suse.de> References: <20251126160854.553077-1-tzimmermann@suse.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Spamd-Result: default: False [-3.01 / 50.00]; BAYES_HAM(-3.00)[100.00%]; MID_CONTAINS_FROM(1.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000]; R_MISSING_CHARSET(0.50)[]; R_DKIM_ALLOW(-0.20)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; MX_GOOD(-0.01)[]; FUZZY_RATELIMITED(0.00)[rspamd.com]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; RBL_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[2a07:de40:b281:104:10:150:64:97:from]; SPAMHAUS_XBL(0.00)[2a07:de40:b281:104:10:150:64:97:from]; MIME_TRACE(0.00)[0:+]; ARC_NA(0.00)[]; RCPT_COUNT_TWELVE(0.00)[17]; RCVD_COUNT_TWO(0.00)[2]; TO_MATCH_ENVRCPT_ALL(0.00)[]; FROM_HAS_DN(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; DNSWL_BLOCKED(0.00)[2a07:de40:b281:104:10:150:64:97:from,2a07:de40:b281:106:10:150:64:167:received]; FROM_EQ_ENVFROM(0.00)[]; R_RATELIMIT(0.00)[to_ip_from(RLtfyjk8sg4x43ngtem9djprcp)]; RCVD_TLS_ALL(0.00)[]; DKIM_TRACE(0.00)[suse.de:+]; TO_DN_SOME(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[imap1.dmz-prg2.suse.org:helo,imap1.dmz-prg2.suse.org:rdns,suse.de:mid,suse.de:email,suse.de:dkim] X-Rspamd-Action: no action X-Spam-Flag: NO X-Spam-Score: -3.01 X-Spam-Level: X-Rspamd-Server: rspamd1.dmz-prg2.suse.org X-Rspamd-Queue-Id: 62F32336D7 Content-Type: text/plain; charset="utf-8" Replace the global screen_info with sysfb_primary_display of type struct sysfb_display_info. Adapt all users of screen_info. Instances of screen_info are defined for x86, loongarch and EFI, with only one instance compiled into a specific build. Replace all of them with sysfb_primary_display. All existing users of screen_info are updated by pointing them to sysfb_primary_display.screen instead. This introduces some churn to the code, but has no impact on functionality. Boot parameters and EFI config tables are unchanged. They transfer screen_info as before. The logic in EFI's alloc_screen_info() changes slightly, as it now returns the screen field of sysfb_primary_display. v2: - update comment - rename init_screen_info() to init_primary_display() Signed-off-by: Thomas Zimmermann Acked-by: Arnd Bergmann Acked-by: Ard Biesheuvel Acked-by: Bjorn Helgaas # drivers/pci/ Reviewed-by: Richard Lyu --- arch/arm64/kernel/image-vars.h | 2 +- arch/loongarch/kernel/efi.c | 15 +++++++------ arch/loongarch/kernel/image-vars.h | 2 +- arch/riscv/kernel/image-vars.h | 2 +- arch/x86/kernel/kexec-bzimage64.c | 4 +++- arch/x86/kernel/setup.c | 10 +++++---- arch/x86/video/video-common.c | 4 ++-- drivers/firmware/efi/earlycon.c | 8 +++---- drivers/firmware/efi/efi-init.c | 22 +++++++++---------- drivers/firmware/efi/libstub/efi-stub-entry.c | 18 ++++++++++----- drivers/firmware/efi/sysfb_efi.c | 4 ++-- drivers/firmware/sysfb.c | 6 ++--- drivers/hv/vmbus_drv.c | 6 ++--- drivers/pci/vgaarb.c | 4 ++-- drivers/video/screen_info_pci.c | 5 +++-- include/linux/screen_info.h | 2 -- include/linux/sysfb.h | 5 +++-- 17 files changed, 66 insertions(+), 53 deletions(-) diff --git a/arch/arm64/kernel/image-vars.h b/arch/arm64/kernel/image-vars.h index 85bc629270bd..d7b0d12b1015 100644 --- a/arch/arm64/kernel/image-vars.h +++ b/arch/arm64/kernel/image-vars.h @@ -38,7 +38,7 @@ PROVIDE(__efistub__end =3D _end); PROVIDE(__efistub___inittext_end =3D __inittext_end); PROVIDE(__efistub__edata =3D _edata); #if defined(CONFIG_EFI_EARLYCON) || defined(CONFIG_SYSFB) -PROVIDE(__efistub_screen_info =3D screen_info); +PROVIDE(__efistub_sysfb_primary_display =3D sysfb_primary_display); #endif PROVIDE(__efistub__ctype =3D _ctype); =20 diff --git a/arch/loongarch/kernel/efi.c b/arch/loongarch/kernel/efi.c index 860a3bc030e0..638a392d2cd2 100644 --- a/arch/loongarch/kernel/efi.c +++ b/arch/loongarch/kernel/efi.c @@ -18,7 +18,7 @@ #include #include #include -#include +#include #include =20 #include @@ -75,11 +75,11 @@ bool efi_poweroff_required(void) unsigned long __initdata screen_info_table =3D EFI_INVALID_TABLE_ADDR; =20 #if defined(CONFIG_SYSFB) || defined(CONFIG_EFI_EARLYCON) -struct screen_info screen_info __section(".data"); -EXPORT_SYMBOL_GPL(screen_info); +struct sysfb_display_info sysfb_primary_display __section(".data"); +EXPORT_SYMBOL_GPL(sysfb_primary_display); #endif =20 -static void __init init_screen_info(void) +static void __init init_primary_display(void) { struct screen_info *si; =20 @@ -91,11 +91,12 @@ static void __init init_screen_info(void) pr_err("Could not map screen_info config table\n"); return; } - screen_info =3D *si; + sysfb_primary_display.screen =3D *si; memset(si, 0, sizeof(*si)); early_memunmap(si, sizeof(*si)); =20 - memblock_reserve(__screen_info_lfb_base(&screen_info), screen_info.lfb_si= ze); + memblock_reserve(__screen_info_lfb_base(&sysfb_primary_display.screen), + sysfb_primary_display.screen.lfb_size); } =20 void __init efi_init(void) @@ -127,7 +128,7 @@ void __init efi_init(void) set_bit(EFI_CONFIG_TABLES, &efi.flags); =20 if (IS_ENABLED(CONFIG_EFI_EARLYCON) || IS_ENABLED(CONFIG_SYSFB)) - init_screen_info(); + init_primary_display(); =20 if (boot_memmap =3D=3D EFI_INVALID_TABLE_ADDR) return; diff --git a/arch/loongarch/kernel/image-vars.h b/arch/loongarch/kernel/ima= ge-vars.h index 41ddcf56d21c..e557ebd46c2b 100644 --- a/arch/loongarch/kernel/image-vars.h +++ b/arch/loongarch/kernel/image-vars.h @@ -12,7 +12,7 @@ __efistub_kernel_entry =3D kernel_entry; __efistub_kernel_asize =3D kernel_asize; __efistub_kernel_fsize =3D kernel_fsize; #if defined(CONFIG_EFI_EARLYCON) || defined(CONFIG_SYSFB) -__efistub_screen_info =3D screen_info; +__efistub_sysfb_primary_display =3D sysfb_primary_display; #endif =20 #endif diff --git a/arch/riscv/kernel/image-vars.h b/arch/riscv/kernel/image-vars.h index 3df30dd1c458..3bd9d06a8b8f 100644 --- a/arch/riscv/kernel/image-vars.h +++ b/arch/riscv/kernel/image-vars.h @@ -29,7 +29,7 @@ __efistub__end =3D _end; __efistub__edata =3D _edata; __efistub___init_text_end =3D __init_text_end; #if defined(CONFIG_EFI_EARLYCON) || defined(CONFIG_SYSFB) -__efistub_screen_info =3D screen_info; +__efistub_sysfb_primary_display =3D sysfb_primary_display; #endif =20 #endif diff --git a/arch/x86/kernel/kexec-bzimage64.c b/arch/x86/kernel/kexec-bzim= age64.c index c3244ac680d1..7508d0ccc740 100644 --- a/arch/x86/kernel/kexec-bzimage64.c +++ b/arch/x86/kernel/kexec-bzimage64.c @@ -20,6 +20,7 @@ #include #include #include +#include =20 #include #include @@ -303,7 +304,8 @@ setup_boot_parameters(struct kimage *image, struct boot= _params *params, params->hdr.hardware_subarch =3D boot_params.hdr.hardware_subarch; =20 /* Copying screen_info will do? */ - memcpy(¶ms->screen_info, &screen_info, sizeof(struct screen_info)); + memcpy(¶ms->screen_info, &sysfb_primary_display.screen, + sizeof(sysfb_primary_display.screen)); =20 /* Fill in memsize later */ params->screen_info.ext_mem_k =3D 0; diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c index 1b2edd07a3e1..675e4b9deb1f 100644 --- a/arch/x86/kernel/setup.c +++ b/arch/x86/kernel/setup.c @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -211,8 +212,9 @@ arch_initcall(init_x86_sysctl); /* * Setup options */ -struct screen_info screen_info; -EXPORT_SYMBOL(screen_info); + +struct sysfb_display_info sysfb_primary_display; +EXPORT_SYMBOL(sysfb_primary_display); #if defined(CONFIG_FIRMWARE_EDID) struct edid_info edid_info; EXPORT_SYMBOL_GPL(edid_info); @@ -526,7 +528,7 @@ static void __init parse_setup_data(void) static void __init parse_boot_params(void) { ROOT_DEV =3D old_decode_dev(boot_params.hdr.root_dev); - screen_info =3D boot_params.screen_info; + sysfb_primary_display.screen =3D boot_params.screen_info; #if defined(CONFIG_FIRMWARE_EDID) edid_info =3D boot_params.edid_info; #endif @@ -1254,7 +1256,7 @@ void __init setup_arch(char **cmdline_p) #ifdef CONFIG_VT #if defined(CONFIG_VGA_CONSOLE) if (!efi_enabled(EFI_BOOT) || (efi_mem_type(0xa0000) !=3D EFI_CONVENTIONA= L_MEMORY)) - vgacon_register_screen(&screen_info); + vgacon_register_screen(&sysfb_primary_display.screen); #endif #endif x86_init.oem.banner(); diff --git a/arch/x86/video/video-common.c b/arch/x86/video/video-common.c index e0aeee99bc99..152789f00fcd 100644 --- a/arch/x86/video/video-common.c +++ b/arch/x86/video/video-common.c @@ -9,7 +9,7 @@ =20 #include #include -#include +#include #include =20 #include @@ -29,7 +29,7 @@ EXPORT_SYMBOL(pgprot_framebuffer); bool video_is_primary_device(struct device *dev) { #ifdef CONFIG_SCREEN_INFO - struct screen_info *si =3D &screen_info; + struct screen_info *si =3D &sysfb_primary_display.screen; struct resource res[SCREEN_INFO_MAX_RESOURCES]; ssize_t i, numres; #endif diff --git a/drivers/firmware/efi/earlycon.c b/drivers/firmware/efi/earlyco= n.c index 42e3a173dac1..3d060d59968c 100644 --- a/drivers/firmware/efi/earlycon.c +++ b/drivers/firmware/efi/earlycon.c @@ -9,7 +9,7 @@ #include #include #include -#include +#include #include =20 #include @@ -32,7 +32,7 @@ static void *efi_fb; */ static int __init efi_earlycon_remap_fb(void) { - const struct screen_info *si =3D &screen_info; + const struct screen_info *si =3D &sysfb_primary_display.screen; =20 /* bail if there is no bootconsole or it was unregistered already */ if (!earlycon_console || !console_is_registered(earlycon_console)) @@ -147,7 +147,7 @@ static void efi_earlycon_write_char(u32 *dst, unsigned = char c, unsigned int h, static void efi_earlycon_write(struct console *con, const char *str, unsigned int num) { - const struct screen_info *si =3D &screen_info; + const struct screen_info *si =3D &sysfb_primary_display.screen; u32 cur_efi_x =3D efi_x; unsigned int len; const char *s; @@ -227,7 +227,7 @@ void __init efi_earlycon_reprobe(void) static int __init efi_earlycon_setup(struct earlycon_device *device, const char *opt) { - const struct screen_info *si =3D &screen_info; + const struct screen_info *si =3D &sysfb_primary_display.screen; u16 xres, yres; u32 i; =20 diff --git a/drivers/firmware/efi/efi-init.c b/drivers/firmware/efi/efi-ini= t.c index a65c2d5b9e7b..d1d418a34407 100644 --- a/drivers/firmware/efi/efi-init.c +++ b/drivers/firmware/efi/efi-init.c @@ -19,7 +19,7 @@ #include #include #include -#include +#include =20 #include =20 @@ -57,15 +57,15 @@ static phys_addr_t __init efi_to_phys(unsigned long add= r) extern __weak const efi_config_table_type_t efi_arch_tables[]; =20 /* - * x86 defines its own screen_info and uses it even without EFI, - * everything else can get it from here. + * x86 defines its own instance of sysfb_primary_display and uses + * it even without EFI, everything else can get them from here. */ #if !defined(CONFIG_X86) && (defined(CONFIG_SYSFB) || defined(CONFIG_EFI_E= ARLYCON)) -struct screen_info screen_info __section(".data"); -EXPORT_SYMBOL_GPL(screen_info); +struct sysfb_display_info sysfb_primary_display __section(".data"); +EXPORT_SYMBOL_GPL(sysfb_primary_display); #endif =20 -static void __init init_screen_info(void) +static void __init init_primary_display(void) { struct screen_info *si; =20 @@ -75,13 +75,13 @@ static void __init init_screen_info(void) pr_err("Could not map screen_info config table\n"); return; } - screen_info =3D *si; + sysfb_primary_display.screen =3D *si; memset(si, 0, sizeof(*si)); early_memunmap(si, sizeof(*si)); =20 - if (memblock_is_map_memory(screen_info.lfb_base)) - memblock_mark_nomap(screen_info.lfb_base, - screen_info.lfb_size); + if (memblock_is_map_memory(sysfb_primary_display.screen.lfb_base)) + memblock_mark_nomap(sysfb_primary_display.screen.lfb_base, + sysfb_primary_display.screen.lfb_size); =20 if (IS_ENABLED(CONFIG_EFI_EARLYCON)) efi_earlycon_reprobe(); @@ -274,5 +274,5 @@ void __init efi_init(void) if (IS_ENABLED(CONFIG_X86) || IS_ENABLED(CONFIG_SYSFB) || IS_ENABLED(CONFIG_EFI_EARLYCON)) - init_screen_info(); + init_primary_display(); } diff --git a/drivers/firmware/efi/libstub/efi-stub-entry.c b/drivers/firmwa= re/efi/libstub/efi-stub-entry.c index a6c049835190..401ecbbdf331 100644 --- a/drivers/firmware/efi/libstub/efi-stub-entry.c +++ b/drivers/firmware/efi/libstub/efi-stub-entry.c @@ -1,13 +1,18 @@ // SPDX-License-Identifier: GPL-2.0-only =20 #include -#include +#include =20 #include =20 #include "efistub.h" =20 -static unsigned long screen_info_offset; +static unsigned long kernel_image_offset; + +static void *kernel_image_addr(void *addr) +{ + return addr + kernel_image_offset; +} =20 struct screen_info *alloc_screen_info(void) { @@ -16,8 +21,11 @@ struct screen_info *alloc_screen_info(void) =20 if (IS_ENABLED(CONFIG_X86) || IS_ENABLED(CONFIG_EFI_EARLYCON) || - IS_ENABLED(CONFIG_SYSFB)) - return (void *)&screen_info + screen_info_offset; + IS_ENABLED(CONFIG_SYSFB)) { + struct sysfb_display_info *dpy =3D kernel_image_addr(&sysfb_primary_disp= lay); + + return &dpy->screen; + } =20 return NULL; } @@ -73,7 +81,7 @@ efi_status_t __efiapi efi_pe_entry(efi_handle_t handle, return status; } =20 - screen_info_offset =3D image_addr - (unsigned long)image->image_base; + kernel_image_offset =3D image_addr - (unsigned long)image->image_base; =20 status =3D efi_stub_common(handle, image, image_addr, cmdline_ptr); =20 diff --git a/drivers/firmware/efi/sysfb_efi.c b/drivers/firmware/efi/sysfb_= efi.c index 8e0f9d08397f..46ad95084b50 100644 --- a/drivers/firmware/efi/sysfb_efi.c +++ b/drivers/firmware/efi/sysfb_efi.c @@ -176,7 +176,7 @@ static int __init efifb_set_system(struct screen_info *= si, const struct dmi_syst =20 static int __init efifb_set_system_callback(const struct dmi_system_id *id) { - return efifb_set_system(&screen_info, id); + return efifb_set_system(&sysfb_primary_display.screen, id); } =20 #define EFIFB_DMI_SYSTEM_ID(vendor, name, enumid) \ @@ -316,7 +316,7 @@ static struct device_node *find_pci_overlap_node(void) } =20 for_each_of_pci_range(&parser, &range) - if (efifb_overlaps_pci_range(&screen_info, &range)) + if (efifb_overlaps_pci_range(&sysfb_primary_display.screen, &range)) return np; } return NULL; diff --git a/drivers/firmware/sysfb.c b/drivers/firmware/sysfb.c index 916b28538a29..1f671f9219b0 100644 --- a/drivers/firmware/sysfb.c +++ b/drivers/firmware/sysfb.c @@ -66,7 +66,7 @@ static bool sysfb_unregister(void) */ void sysfb_disable(struct device *dev) { - struct screen_info *si =3D &screen_info; + struct screen_info *si =3D &sysfb_primary_display.screen; struct device *parent; =20 mutex_lock(&disable_lock); @@ -92,7 +92,7 @@ EXPORT_SYMBOL_GPL(sysfb_disable); */ bool sysfb_handles_screen_info(void) { - const struct screen_info *si =3D &screen_info; + const struct screen_info *si =3D &sysfb_primary_display.screen; =20 return !!screen_info_video_type(si); } @@ -141,7 +141,7 @@ static struct device *sysfb_parent_dev(const struct scr= een_info *si) =20 static __init int sysfb_init(void) { - struct screen_info *si =3D &screen_info; + struct screen_info *si =3D &sysfb_primary_display.screen; struct device *parent; unsigned int type; struct simplefb_platform_data mode; diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c index a53af6fe81a6..9c937190be81 100644 --- a/drivers/hv/vmbus_drv.c +++ b/drivers/hv/vmbus_drv.c @@ -29,7 +29,7 @@ #include #include #include -#include +#include #include #include #include @@ -2340,8 +2340,8 @@ static void __maybe_unused vmbus_reserve_fb(void) if (efi_enabled(EFI_BOOT)) { /* Gen2 VM: get FB base from EFI framebuffer */ if (IS_ENABLED(CONFIG_SYSFB)) { - start =3D screen_info.lfb_base; - size =3D max_t(__u32, screen_info.lfb_size, 0x800000); + start =3D sysfb_primary_display.screen.lfb_base; + size =3D max_t(__u32, sysfb_primary_display.screen.lfb_size, 0x800000); } } else { /* Gen1 VM: get FB base from PCI */ diff --git a/drivers/pci/vgaarb.c b/drivers/pci/vgaarb.c index 436fa7f4c387..805be9ea4a34 100644 --- a/drivers/pci/vgaarb.c +++ b/drivers/pci/vgaarb.c @@ -26,7 +26,7 @@ #include #include #include -#include +#include #include #include #include @@ -557,7 +557,7 @@ EXPORT_SYMBOL(vga_put); static bool vga_is_firmware_default(struct pci_dev *pdev) { #if defined CONFIG_X86 - return pdev =3D=3D screen_info_pci_dev(&screen_info); + return pdev =3D=3D screen_info_pci_dev(&sysfb_primary_display.screen); #else return false; #endif diff --git a/drivers/video/screen_info_pci.c b/drivers/video/screen_info_pc= i.c index 66bfc1d0a6dc..8f34d8a74f09 100644 --- a/drivers/video/screen_info_pci.c +++ b/drivers/video/screen_info_pci.c @@ -4,6 +4,7 @@ #include #include #include +#include =20 static struct pci_dev *screen_info_lfb_pdev; static size_t screen_info_lfb_bar; @@ -26,7 +27,7 @@ static bool __screen_info_relocation_is_valid(const struc= t screen_info *si, stru =20 void screen_info_apply_fixups(void) { - struct screen_info *si =3D &screen_info; + struct screen_info *si =3D &sysfb_primary_display.screen; =20 if (screen_info_lfb_pdev) { struct resource *pr =3D &screen_info_lfb_pdev->resource[screen_info_lfb_= bar]; @@ -75,7 +76,7 @@ static void screen_info_fixup_lfb(struct pci_dev *pdev) .flags =3D IORESOURCE_MEM, }; const struct resource *pr; - const struct screen_info *si =3D &screen_info; + const struct screen_info *si =3D &sysfb_primary_display.screen; =20 if (screen_info_lfb_pdev) return; // already found diff --git a/include/linux/screen_info.h b/include/linux/screen_info.h index 1690706206e8..c022403c599a 100644 --- a/include/linux/screen_info.h +++ b/include/linux/screen_info.h @@ -151,6 +151,4 @@ static inline struct pci_dev *screen_info_pci_dev(const= struct screen_info *si) } #endif =20 -extern struct screen_info screen_info; - #endif /* _SCREEN_INFO_H */ diff --git a/include/linux/sysfb.h b/include/linux/sysfb.h index 8b37247528bf..e8bde392c690 100644 --- a/include/linux/sysfb.h +++ b/include/linux/sysfb.h @@ -8,11 +8,10 @@ */ =20 #include +#include #include #include =20 -#include - struct device; struct platform_device; struct screen_info; @@ -65,6 +64,8 @@ struct sysfb_display_info { struct screen_info screen; }; =20 +extern struct sysfb_display_info sysfb_primary_display; + #ifdef CONFIG_SYSFB =20 void sysfb_disable(struct device *dev); --=20 2.51.1 From nobody Mon Dec 1 22:37:14 2025 Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.223.130]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2DA0233E341 for ; Wed, 26 Nov 2025 16:09:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=195.135.223.130 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764173354; cv=none; b=T3mOOC7I2QpOJ1SEdNJZTAWjDG2FNie8JedS5vNnZodtu4Yp99V58jdYoYXCRPgft7ZJw0HyNq3BTIlDelhaAiZHpLGEDVqiMroUnN/rw9WwEMfELCtTeAWR8dg8533Bf9i+9rhjbvYyAo4WlF9rFOJzX8D2OP8ukyPMaPPudLw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764173354; c=relaxed/simple; bh=sp86CpH/A0QqK5BFCqTkOcjyl+gJ5bCI/mUhLxv96bs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=niF/6yeZqk5NlbDyszAkFHXfK3rJKoR6JZq9YzAKfPf4X5M8MOWvCds7DxH3uzlRMqLqxliSTiirmWPKyJfUZDy70SvUZX53xn8OVh5jYHKYyW23d+huqm5qwNp5QFbiv/87d8/2CSb8//YQWA8jFNlVbHUvl+4hFV2MrvbZA+0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de; spf=pass smtp.mailfrom=suse.de; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b=ST+nf0Fj; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b=nB5dki8z; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b=ST+nf0Fj; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b=nB5dki8z; arc=none smtp.client-ip=195.135.223.130 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b="ST+nf0Fj"; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b="nB5dki8z"; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b="ST+nf0Fj"; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b="nB5dki8z" Received: from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104:10:150:64:97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id CC999336E3; Wed, 26 Nov 2025 16:09:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1764173341; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=XPW+X7Z9Og3TIXMVS76E66zrmesV1TERYcVqY5JCDD0=; b=ST+nf0Fjbe1nmDFUuLkgXacfg5j/bRS3FGTUxyCeevadj9W1KtwXniDydPPbiUR4nmPNQq qMj0vp+kuoOF6cGnHXFv0GSASe3RmI3Dk702Q9OxiiIj/fFWr2n/pKkDEhNzAuooVfEhlh 2oT6XQEtw5eecZGGXGXDu++dhO3CcyY= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1764173341; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=XPW+X7Z9Og3TIXMVS76E66zrmesV1TERYcVqY5JCDD0=; b=nB5dki8ztlQuQcxoenoz5eNe6yeBZco5bvp7hoiu25cfA5j0bBlyf6M51Io7RYNaUrcexN tfddPu8CO+18twBA== Authentication-Results: smtp-out1.suse.de; dkim=pass header.d=suse.de header.s=susede2_rsa header.b=ST+nf0Fj; dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b=nB5dki8z DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1764173341; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=XPW+X7Z9Og3TIXMVS76E66zrmesV1TERYcVqY5JCDD0=; b=ST+nf0Fjbe1nmDFUuLkgXacfg5j/bRS3FGTUxyCeevadj9W1KtwXniDydPPbiUR4nmPNQq qMj0vp+kuoOF6cGnHXFv0GSASe3RmI3Dk702Q9OxiiIj/fFWr2n/pKkDEhNzAuooVfEhlh 2oT6XQEtw5eecZGGXGXDu++dhO3CcyY= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1764173341; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=XPW+X7Z9Og3TIXMVS76E66zrmesV1TERYcVqY5JCDD0=; b=nB5dki8ztlQuQcxoenoz5eNe6yeBZco5bvp7hoiu25cfA5j0bBlyf6M51Io7RYNaUrcexN tfddPu8CO+18twBA== Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id 685413EA65; Wed, 26 Nov 2025 16:09:01 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap1.dmz-prg2.suse.org with ESMTPSA id MEdIGB0mJ2lnIgAAD6G6ig (envelope-from ); Wed, 26 Nov 2025 16:09:01 +0000 From: Thomas Zimmermann To: ardb@kernel.org, javierm@redhat.com, arnd@arndb.de, richard.lyu@suse.com, helgaas@kernel.org Cc: x86@kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-efi@vger.kernel.org, loongarch@lists.linux.dev, linux-riscv@lists.infradead.org, dri-devel@lists.freedesktop.org, linux-hyperv@vger.kernel.org, linux-pci@vger.kernel.org, linux-fbdev@vger.kernel.org, Thomas Zimmermann Subject: [PATCH v3 5/9] sysfb: Pass sysfb_primary_display to devices Date: Wed, 26 Nov 2025 17:03:22 +0100 Message-ID: <20251126160854.553077-6-tzimmermann@suse.de> X-Mailer: git-send-email 2.51.1 In-Reply-To: <20251126160854.553077-1-tzimmermann@suse.de> References: <20251126160854.553077-1-tzimmermann@suse.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Spamd-Result: default: False [-3.01 / 50.00]; BAYES_HAM(-3.00)[100.00%]; MID_CONTAINS_FROM(1.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000]; R_MISSING_CHARSET(0.50)[]; R_DKIM_ALLOW(-0.20)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; MX_GOOD(-0.01)[]; RBL_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[2a07:de40:b281:104:10:150:64:97:from]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; FUZZY_RATELIMITED(0.00)[rspamd.com]; SPAMHAUS_XBL(0.00)[2a07:de40:b281:104:10:150:64:97:from]; MIME_TRACE(0.00)[0:+]; ARC_NA(0.00)[]; RCPT_COUNT_TWELVE(0.00)[16]; RCVD_COUNT_TWO(0.00)[2]; TO_MATCH_ENVRCPT_ALL(0.00)[]; FROM_HAS_DN(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; DNSWL_BLOCKED(0.00)[2a07:de40:b281:106:10:150:64:167:received,2a07:de40:b281:104:10:150:64:97:from]; FROM_EQ_ENVFROM(0.00)[]; R_RATELIMIT(0.00)[to_ip_from(RLtfyjk8sg4x43ngtem9djprcp)]; RCVD_TLS_ALL(0.00)[]; DKIM_TRACE(0.00)[suse.de:+]; TO_DN_SOME(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[imap1.dmz-prg2.suse.org:rdns,imap1.dmz-prg2.suse.org:helo,suse.de:mid,suse.de:dkim,suse.de:email] X-Spam-Level: X-Spam-Score: -3.01 X-Rspamd-Server: rspamd2.dmz-prg2.suse.org X-Rspamd-Queue-Id: CC999336E3 X-Rspamd-Action: no action X-Spam-Flag: NO Content-Type: text/plain; charset="utf-8" Instead of screen_info, store a copy of sysfb_primary_display as device data. Pick it up in drivers. Later changes will add additional data to the display info, such as EDID information. Signed-off-by: Thomas Zimmermann Acked-by: Arnd Bergmann Acked-by: Ard Biesheuvel Reviewed-by: Richard Lyu --- drivers/firmware/sysfb.c | 5 +++-- drivers/gpu/drm/sysfb/efidrm.c | 9 ++++++--- drivers/gpu/drm/sysfb/vesadrm.c | 9 ++++++--- drivers/video/fbdev/efifb.c | 10 ++++++---- drivers/video/fbdev/vesafb.c | 10 ++++++---- drivers/video/fbdev/vga16fb.c | 8 +++++--- 6 files changed, 32 insertions(+), 19 deletions(-) diff --git a/drivers/firmware/sysfb.c b/drivers/firmware/sysfb.c index 1f671f9219b0..8833582c1883 100644 --- a/drivers/firmware/sysfb.c +++ b/drivers/firmware/sysfb.c @@ -141,7 +141,8 @@ static struct device *sysfb_parent_dev(const struct scr= een_info *si) =20 static __init int sysfb_init(void) { - struct screen_info *si =3D &sysfb_primary_display.screen; + struct sysfb_display_info *dpy =3D &sysfb_primary_display; + struct screen_info *si =3D &dpy->screen; struct device *parent; unsigned int type; struct simplefb_platform_data mode; @@ -202,7 +203,7 @@ static __init int sysfb_init(void) =20 sysfb_set_efifb_fwnode(si, pd); =20 - ret =3D platform_device_add_data(pd, si, sizeof(*si)); + ret =3D platform_device_add_data(pd, dpy, sizeof(*dpy)); if (ret) goto err; =20 diff --git a/drivers/gpu/drm/sysfb/efidrm.c b/drivers/gpu/drm/sysfb/efidrm.c index 1b683d55d6ea..29533ae8fbbf 100644 --- a/drivers/gpu/drm/sysfb/efidrm.c +++ b/drivers/gpu/drm/sysfb/efidrm.c @@ -4,7 +4,7 @@ #include #include #include -#include +#include =20 #include #include @@ -141,6 +141,7 @@ static const struct drm_mode_config_funcs efidrm_mode_c= onfig_funcs =3D { static struct efidrm_device *efidrm_device_create(struct drm_driver *drv, struct platform_device *pdev) { + const struct sysfb_display_info *dpy; const struct screen_info *si; const struct drm_format_info *format; int width, height, stride; @@ -160,9 +161,11 @@ static struct efidrm_device *efidrm_device_create(stru= ct drm_driver *drv, size_t nformats; int ret; =20 - si =3D dev_get_platdata(&pdev->dev); - if (!si) + dpy =3D dev_get_platdata(&pdev->dev); + if (!dpy) return ERR_PTR(-ENODEV); + si =3D &dpy->screen; + if (screen_info_video_type(si) !=3D VIDEO_TYPE_EFI) return ERR_PTR(-ENODEV); =20 diff --git a/drivers/gpu/drm/sysfb/vesadrm.c b/drivers/gpu/drm/sysfb/vesadr= m.c index 7b7b5ba26317..16fc223f8c5b 100644 --- a/drivers/gpu/drm/sysfb/vesadrm.c +++ b/drivers/gpu/drm/sysfb/vesadrm.c @@ -4,7 +4,7 @@ #include #include #include -#include +#include =20 #include #include @@ -391,6 +391,7 @@ static const struct drm_mode_config_funcs vesadrm_mode_= config_funcs =3D { static struct vesadrm_device *vesadrm_device_create(struct drm_driver *drv, struct platform_device *pdev) { + const struct sysfb_display_info *dpy; const struct screen_info *si; const struct drm_format_info *format; int width, height, stride; @@ -410,9 +411,11 @@ static struct vesadrm_device *vesadrm_device_create(st= ruct drm_driver *drv, size_t nformats; int ret; =20 - si =3D dev_get_platdata(&pdev->dev); - if (!si) + dpy =3D dev_get_platdata(&pdev->dev); + if (!dpy) return ERR_PTR(-ENODEV); + si =3D &dpy->screen; + if (screen_info_video_type(si) !=3D VIDEO_TYPE_VLFB) return ERR_PTR(-ENODEV); =20 diff --git a/drivers/video/fbdev/efifb.c b/drivers/video/fbdev/efifb.c index 0e1bd3dba255..47ebc0107209 100644 --- a/drivers/video/fbdev/efifb.c +++ b/drivers/video/fbdev/efifb.c @@ -15,7 +15,7 @@ #include #include #include -#include +#include #include