From patchwork Thu Aug 24 15:08:39 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geert Uytterhoeven X-Patchwork-Id: 136863 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a7d1:0:b0:3f2:4152:657d with SMTP id p17csp1313753vqm; Thu, 24 Aug 2023 11:37:25 -0700 (PDT) X-Google-Smtp-Source: AGHT+IElQ9q5gNkj1m4FNmltfo8dBBGZWu8Uf8b2VMFNbP9oYJjVw7ciDKJNadF2ld7p6tKXwXzO X-Received: by 2002:aa7:d6d3:0:b0:526:9c4:bc06 with SMTP id x19-20020aa7d6d3000000b0052609c4bc06mr10883723edr.18.1692902244791; Thu, 24 Aug 2023 11:37:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1692902244; cv=none; d=google.com; s=arc-20160816; b=tLUQ6mJhS8NnqNv4Skqhg5me/vkzKWW8TyQPyD9ttf7Usan9+WKGbOJ84sBW4N+W8N MSREnMhDYtFGqCltFgkvjtF5Vi6BiYmQbl3CMjTAsRs6hqs821K4SM7VbnCyIU547urZ i171L0arN+tksT3nVFiWKXWPaHcjfW1HXNE+0friAglhos9CxAf5mzoTwwj8p3/0lWF3 F6LIFSSUkUnxDfNDDowo11Z59+8/CRFeKpYMFqmCBX84tydSkyWxdzVpn0a3z+3E+4Bk gAti89BsqLxx8k/EOrRi9keTtnn5KWQ/PS8fOPciNpnefhh6aI2fkA9fhCrTzl8bahWu pxfA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=2N7mbQPvK7LQ0OpzKkTpAy9prh/ht/3pUVjmPbhm6HU=; fh=6JC+QaZxsG5AckT/UYpDVnqfnTEqALGwlsdU/L/iDlk=; b=Yxy5EWUNPRX04dpqVii3M2h85wIolyub2MQYmSlZ67Txdair+Oqf/dXGv5c+qzSwA1 eKNbvTxXfHWy9VQ6NM54DQoNwHq0ixV4xw08BGDElt5iB73XWObxYOCoZUtQE3Dw1Tf4 P0uQTlN3x9NoZ4pma5HhN8azHwrd/iWqy3ne0p558lM3qvr2Ot/dmfD3WtJF0Qj85SVc oSHORJjmebYQKVAREWH7Ofo5BfxPZCVj4U3pg+d+YmZ76vUXDMgIhe7JFSEHDtz1V9xf +NCbNLlvCUq05rSohcVh4Y+2s+ktv95CQ2oU+Yr8PGmn//XBBiVBjtTWQVFNg5O0Rxs3 U8JA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id w12-20020a056402128c00b00522e5272088si59042edv.415.2023.08.24.11.37.01; Thu, 24 Aug 2023 11:37:24 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242103AbjHXPJH (ORCPT + 99 others); Thu, 24 Aug 2023 11:09:07 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34216 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242149AbjHXPI7 (ORCPT ); Thu, 24 Aug 2023 11:08:59 -0400 Received: from laurent.telenet-ops.be (laurent.telenet-ops.be [IPv6:2a02:1800:110:4::f00:19]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 02FB219B9 for ; Thu, 24 Aug 2023 08:08:56 -0700 (PDT) Received: from ramsan.of.borg ([IPv6:2a02:1810:ac12:ed40:3c6b:f703:5ab5:f36d]) by laurent.telenet-ops.be with bizsmtp id dT8t2A00B01sfPQ01T8th4; Thu, 24 Aug 2023 17:08:53 +0200 Received: from rox.of.borg ([192.168.97.57]) by ramsan.of.borg with esmtp (Exim 4.95) (envelope-from ) id 1qZBwx-001dh5-Dx; Thu, 24 Aug 2023 17:08:53 +0200 Received: from geert by rox.of.borg with local (Exim 4.95) (envelope-from ) id 1qZBx7-000Vyk-2m; Thu, 24 Aug 2023 17:08:53 +0200 From: Geert Uytterhoeven To: Javier Martinez Canillas , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Geert Uytterhoeven Subject: [PATCH v2 1/8] drm/dumb-buffers: Fix drm_mode_create_dumb() for bpp < 8 Date: Thu, 24 Aug 2023 17:08:39 +0200 Message-Id: <16d488639e99f43ca3977ee7b8f76fc26c34aa86.1692888745.git.geert@linux-m68k.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: References: MIME-Version: 1.0 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1775136664278130693 X-GMAIL-MSGID: 1775136664278130693 drm_mode_create_dumb() calculates the number of characters per pixel from the number of bits per pixel by rounding up, which is not correct as the actual value of cpp may be non-integer. While we do not need to care here about complex formats like YUV, bpp < 8 is a valid use case. - The overflow check for the buffer width is not correct if bpp < 8. However, it doesn't hurt, as widths larger than U32_MAX / 8 should not happen for real anyway. Add a comment to clarify. - Calculating the stride from the number of characters per pixel is not correct. Fix this by calculating it from the number of bits per pixel instead. Signed-off-by: Geert Uytterhoeven Reviewed-by: Javier Martinez Canillas Tested-by: Javier Martinez Canillas --- v2: - Add Reviewed-by, Tested-by. --- drivers/gpu/drm/drm_dumb_buffers.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/drm_dumb_buffers.c b/drivers/gpu/drm/drm_dumb_buffers.c index 70032bba1c97e787..21a04c32a5e3d785 100644 --- a/drivers/gpu/drm/drm_dumb_buffers.c +++ b/drivers/gpu/drm/drm_dumb_buffers.c @@ -71,10 +71,11 @@ int drm_mode_create_dumb(struct drm_device *dev, /* overflow checks for 32bit size calculations */ if (args->bpp > U32_MAX - 8) return -EINVAL; + /* Incorrect (especially if bpp < 8), but doesn't hurt much */ cpp = DIV_ROUND_UP(args->bpp, 8); if (cpp > U32_MAX / args->width) return -EINVAL; - stride = cpp * args->width; + stride = DIV_ROUND_UP(args->bpp * args->width, 8); if (args->height > U32_MAX / stride) return -EINVAL; From patchwork Thu Aug 24 15:08:40 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geert Uytterhoeven X-Patchwork-Id: 136856 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a7d1:0:b0:3f2:4152:657d with SMTP id p17csp1247553vqm; Thu, 24 Aug 2023 09:43:59 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFs6Jq2u+xxI5zHVkcuBcU4CjdhtZvCu8l2QpCTxyNstm8bccQ0q3+yN0iPTHPAQJYCNEbk X-Received: by 2002:a17:90b:2551:b0:268:808:8e82 with SMTP id nw17-20020a17090b255100b0026808088e82mr23687334pjb.1.1692895439009; Thu, 24 Aug 2023 09:43:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1692895438; cv=none; d=google.com; s=arc-20160816; b=mYi/X+4Pr1oQItDaj+SHV+ZVa2fERrMEy/zOTGthPYaY4iQ3NN5mKttXbV5vwKamE6 xjahroZJYun42N36BHLWAd6G7f8yu/S0mGdn5g4U+VcZulb5DTvrCf14dq6xM/U4hOQH 8Lwx8cywpxloqgiVnEzpJTDD0RN7w0wCmc+V6D+n/9yK6wESWgRk0flDD7ohr60E0T21 WYqdK3fozfSumSAoMgN6vEKMB0s/JdlqMmMwmCYJI7ShLO5YfXfXiEa7vQ0m5fAlYv9x 0V7OwjU0+u9obs9knTE1MqGiPGuRuTDtVA2AsCrqD8dSqiN5fSWyJ9tw6fot0amlEm5t Gesw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=1hCyts42s19/5M1BcwCoL5++K3ZPos8wOkZ0pe7MPkY=; fh=wcJXU+GRAJ+lFf7so8itXL2pGJ6fujr2XomH/f1be3s=; b=sfi2tteVJZSo/slxaL9rHBXv7Xp1lruXjOTNEUbVeulzwzaU6d7sXDz/jAvFBR0dGm VT4rKhZOLgSvYw2J43+iLPb5OAGmOqdASs/s0DaiWASzd1xmAy2ISZaUcdOmaDXstsV6 mAmWbEG3Mox8i1FyHz6DQA33WBmnurMmGo5OINsIcpHLQfkeM2qT7rsDHQoPcLkY+Vql +7x7iZ2q4DGS8C51MTHNB+3zSY4MLeXAQFkbVg56jfLmlSJuAdPNs4FyU+QgZipCfiw+ iPisAUhbaooC2o9xNX3quKxQJ1mQubAFONeLSLp+v/eWv4ZjRBWnFiT9YPdn4Z0Ouhg7 tGZg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id v9-20020a17090a088900b0025de453ee4csi2357064pjc.168.2023.08.24.09.43.45; Thu, 24 Aug 2023 09:43:58 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242093AbjHXPJG (ORCPT + 99 others); Thu, 24 Aug 2023 11:09:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34236 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242150AbjHXPI7 (ORCPT ); Thu, 24 Aug 2023 11:08:59 -0400 Received: from michel.telenet-ops.be (michel.telenet-ops.be [IPv6:2a02:1800:110:4::f00:18]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 02D9319B5 for ; Thu, 24 Aug 2023 08:08:56 -0700 (PDT) Received: from ramsan.of.borg ([IPv6:2a02:1810:ac12:ed40:3c6b:f703:5ab5:f36d]) by michel.telenet-ops.be with bizsmtp id dT8t2A00701sfPQ06T8tSB; Thu, 24 Aug 2023 17:08:53 +0200 Received: from rox.of.borg ([192.168.97.57]) by ramsan.of.borg with esmtp (Exim 4.95) (envelope-from ) id 1qZBwx-001dh9-Ep; Thu, 24 Aug 2023 17:08:53 +0200 Received: from geert by rox.of.borg with local (Exim 4.95) (envelope-from ) id 1qZBx7-000Vyn-44; Thu, 24 Aug 2023 17:08:53 +0200 From: Geert Uytterhoeven To: Javier Martinez Canillas , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Geert Uytterhoeven Subject: [PATCH v2 2/8] drm/ssd130x: Fix screen clearing Date: Thu, 24 Aug 2023 17:08:40 +0200 Message-Id: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: MIME-Version: 1.0 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1775129528075821680 X-GMAIL-MSGID: 1775129528075821680 Due to the reuse of buffers, ssd130x_clear_screen() no longers clears the screen, but merely redraws the last image that is residing in the intermediate buffer. As there is no point in clearing the intermediate buffer and transposing an all-black image, fix this by just clearing the HW format buffer, and writing it to the panel. Fixes: 49d7d581ceaf4cf8 ("drm/ssd130x: Don't allocate buffers on each plane update") Signed-off-by: Geert Uytterhoeven --- ssd130x_clear_screen() is only called from ssd130x_primary_plane_helper_atomic_disable(), but this never happens on my system. Tested by adding some extra calls to ssd130x_clear_screen() at regular intervals. v2: - New. --- drivers/gpu/drm/solomon/ssd130x.c | 47 +++++++++++++++++++++++++------ 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/solomon/ssd130x.c b/drivers/gpu/drm/solomon/ssd130x.c index 5a80b228d18cae33..78272b1f9d5b167f 100644 --- a/drivers/gpu/drm/solomon/ssd130x.c +++ b/drivers/gpu/drm/solomon/ssd130x.c @@ -553,14 +553,45 @@ static int ssd130x_update_rect(struct ssd130x_device *ssd130x, static void ssd130x_clear_screen(struct ssd130x_device *ssd130x, struct ssd130x_plane_state *ssd130x_state) { - struct drm_rect fullscreen = { - .x1 = 0, - .x2 = ssd130x->width, - .y1 = 0, - .y2 = ssd130x->height, - }; - - ssd130x_update_rect(ssd130x, ssd130x_state, &fullscreen); + unsigned int page_height = ssd130x->device_info->page_height; + unsigned int pages = DIV_ROUND_UP(ssd130x->height, page_height); + u8 *data_array = ssd130x_state->data_array; + unsigned int width = ssd130x->width; + int ret, i; + + if (!ssd130x->page_address_mode) { + memset(data_array, 0, width * pages); + + /* Set address range for horizontal addressing mode */ + ret = ssd130x_set_col_range(ssd130x, ssd130x->col_offset, width); + if (ret < 0) + return; + + ret = ssd130x_set_page_range(ssd130x, ssd130x->page_offset, pages); + if (ret < 0) + return; + + /* Write out update in one go if we aren't using page addressing mode */ + ssd130x_write_data(ssd130x, data_array, width * pages); + } else { + /* + * In page addressing mode, the start address needs to be reset, + * and each page then needs to be written out separately. + */ + memset(data_array, 0, width); + + for (i = 0; i < pages; i++) { + ret = ssd130x_set_page_pos(ssd130x, + ssd130x->page_offset + i, + ssd130x->col_offset); + if (ret < 0) + return; + + ret = ssd130x_write_data(ssd130x, data_array, width); + if (ret < 0) + return; + } + } } static int ssd130x_fb_blit_rect(struct drm_plane_state *state, From patchwork Thu Aug 24 15:08:41 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geert Uytterhoeven X-Patchwork-Id: 136876 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a7d1:0:b0:3f2:4152:657d with SMTP id p17csp1383996vqm; Thu, 24 Aug 2023 13:53:34 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFwXIiTEvv6FH1bpNdYAFMYvCVbnIltFnaeL9q7LmP9paY6R0GUuh83JS7wTcwYTCByGZc2 X-Received: by 2002:a17:903:1208:b0:1bc:224a:45c2 with SMTP id l8-20020a170903120800b001bc224a45c2mr26854624plh.15.1692910414287; Thu, 24 Aug 2023 13:53:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1692910414; cv=none; d=google.com; s=arc-20160816; b=eE0doBtGSiQyrEKZiGE3RaMPe3Px2lxiEJqsejOSPr66p7EUTWMztlf8dsKm3UDNoh CSv4qeQ4Zrkl1645wMQ75WaNIan+Zbe646ZV0ZniQMDKCSFtDEl7F1JyiiouKAilNczk pkORqv2cCcwQdNN92hzYiMdoFMzKiJHWQpumsHT+QaqmZeLavxIwx2AKsk3V+U274I2N SynCes8PIzsC7yaeMkUkoRoODVWi5zGoasTpDh23VwiaaMNjgd0Ff8EY0mENfT2TSIOt n7498H7OpknhKEcD9mUBs4XTx7gXjuneYXtHkLJNIqUI8WJuLpMbA7moFCUvZBIaRCKK AJbA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=/9LpKQiQqNZ7tDMbAXJhed4kLN47OGG8AFOAEXRgXwk=; fh=6JC+QaZxsG5AckT/UYpDVnqfnTEqALGwlsdU/L/iDlk=; b=IogwUPPJXccF+CWJ5gXMkVPlouKczUyUIOfsRAscXqb6iM6vRvEk0MkEHiZ+01WKub 5FwcK1+COFs35c0QkIdFPpDo/gRTv44wX7fb+EorJmEI+1HGN0jiuEBFjqhi3lJEbzrd kiHoB2C4g5qa60KHFrtzLIOpTVyZmHALJ9/2lYP8JS7U0cGfCLzGsJP+Jg9zgi8aOYxK mJZ/AO/SOOkkTuCUzNkJY1Wz9PVnXroW6e+/Mgou9BIk5fticbFbqYp8KOeiQDrto7b/ kmPgm/6VQ7bTa4vW2hYUiDtB/Ca74KdWl94JtLAqQzgxt8JB1Jhzf+dWyMN3a8kx1lLg +zig== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id v17-20020a170902d09100b001b9eb349550si183085plv.391.2023.08.24.13.53.18; Thu, 24 Aug 2023 13:53:34 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242136AbjHXPJK (ORCPT + 99 others); Thu, 24 Aug 2023 11:09:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43236 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242156AbjHXPJA (ORCPT ); Thu, 24 Aug 2023 11:09:00 -0400 Received: from albert.telenet-ops.be (albert.telenet-ops.be [IPv6:2a02:1800:110:4::f00:1a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 02BC319B4 for ; Thu, 24 Aug 2023 08:08:56 -0700 (PDT) Received: from ramsan.of.borg ([IPv6:2a02:1810:ac12:ed40:3c6b:f703:5ab5:f36d]) by albert.telenet-ops.be with bizsmtp id dT8t2A00Y01sfPQ06T8tx9; Thu, 24 Aug 2023 17:08:53 +0200 Received: from rox.of.borg ([192.168.97.57]) by ramsan.of.borg with esmtp (Exim 4.95) (envelope-from ) id 1qZBwx-001dhB-Fq; Thu, 24 Aug 2023 17:08:53 +0200 Received: from geert by rox.of.borg with local (Exim 4.95) (envelope-from ) id 1qZBx7-000Vys-55; Thu, 24 Aug 2023 17:08:53 +0200 From: Geert Uytterhoeven To: Javier Martinez Canillas , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Geert Uytterhoeven Subject: [PATCH v2 3/8] drm/ssd130x: Use bool for ssd130x_deviceinfo flags Date: Thu, 24 Aug 2023 17:08:41 +0200 Message-Id: <285005ff361969eff001386c5f97990f0e703838.1692888745.git.geert@linux-m68k.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: References: MIME-Version: 1.0 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1775145230102068237 X-GMAIL-MSGID: 1775145230102068237 The .need_pwm and .need_chargepump fields in struct ssd130x_deviceinfo are flags that can have only two possible values: 0 and 1. Reduce kernel size by changing their types from int to bool. Signed-off-by: Geert Uytterhoeven --- v2: - New. --- drivers/gpu/drm/solomon/ssd130x.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/solomon/ssd130x.h b/drivers/gpu/drm/solomon/ssd130x.h index 87968b3e7fb8279d..aa39b13615ebedf2 100644 --- a/drivers/gpu/drm/solomon/ssd130x.h +++ b/drivers/gpu/drm/solomon/ssd130x.h @@ -40,8 +40,8 @@ struct ssd130x_deviceinfo { u32 default_width; u32 default_height; u32 page_height; - int need_pwm; - int need_chargepump; + bool need_pwm; + bool need_chargepump; bool page_mode_only; }; From patchwork Thu Aug 24 15:08:42 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geert Uytterhoeven X-Patchwork-Id: 136882 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a7d1:0:b0:3f2:4152:657d with SMTP id p17csp1400122vqm; Thu, 24 Aug 2023 14:24:18 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHq7gkuB1zqRY3Gn/IyqolXXpZ1SRDILqYgAWSavOSnVVqJ4stuD37JtKJnO7uW2qyyyZR1 X-Received: by 2002:a05:6512:6d1:b0:4fb:751a:98db with SMTP id u17-20020a05651206d100b004fb751a98dbmr13906078lff.63.1692912258273; Thu, 24 Aug 2023 14:24:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1692912258; cv=none; d=google.com; s=arc-20160816; b=UOpQkO1gTnG/Ecp7iwpLfuRgE6N0e0PlxlPAy2y/v4F5TyLvr5HuB9k8YPaqzrkA2R odHNZrWFqlxBGqYoQanKaayN27nMj86hjuhsuV7136wf/fJ6b+gxwy7EMtB/HSzFxCtw BIIjqxcciU3zN6V1abAgnN+X8DER0M/pft+8Ef7LMD3bkuI0Jnd7zMfB85TsvdQM3OGL bPHFPYhXjUHuUZ5oDQwVvOh59sSEBIrLsRK3thWvuNtf+e7IUbJ+odb+n+wpGylh6k87 7+4vJUVzg/RxccklfZrhTh5q9cbBk7zYJlxJiweQdJQyTBqtJQXTE7L5Tw8dMSd+Xyzz BECA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=I5g3il3FaEQWUnWiZwzHDEifNL1ctQvke52P1DAXmtk=; fh=6JC+QaZxsG5AckT/UYpDVnqfnTEqALGwlsdU/L/iDlk=; b=Ut8VkSOBp8sWp0LoB9KC9yKx7WZiLKKQmZL8Zy9STIzQzafn0WwUZPbI94jGcn++C7 T6CUAYFe6L9G+WuHYIfj11ZdrWcNygXuH11zgrU3KjHwUIPKdu1re9HvwQ+h2fuwoazY JFOtfaICXxHJybrBBueBeg9P06Tbw3Qh+c3sUpCdVE2wBrwRMCzWy+AZHZcUm/KfrR9M I7mxRHh19j5XDovzqKITzaAr30pQh0qUA1mchRfu2r0rzA/EUHiJsmrSxBHK7yMBkEBy 76OSM3yThJ+9cCQAF7DM59D4olb2poTlzPn5KtoZCpxPHXrjm6J0I+dvG5GMRlU3bJcH MZKw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id h3-20020a50ed83000000b0052a0fd4885bsi8117edr.639.2023.08.24.14.23.54; Thu, 24 Aug 2023 14:24:18 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242142AbjHXPJL (ORCPT + 99 others); Thu, 24 Aug 2023 11:09:11 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34252 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242153AbjHXPJA (ORCPT ); Thu, 24 Aug 2023 11:09:00 -0400 Received: from baptiste.telenet-ops.be (baptiste.telenet-ops.be [IPv6:2a02:1800:120:4::f00:13]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 029DD19B0 for ; Thu, 24 Aug 2023 08:08:56 -0700 (PDT) Received: from ramsan.of.borg ([IPv6:2a02:1810:ac12:ed40:3c6b:f703:5ab5:f36d]) by baptiste.telenet-ops.be with bizsmtp id dT8t2A00701sfPQ01T8tZW; Thu, 24 Aug 2023 17:08:53 +0200 Received: from rox.of.borg ([192.168.97.57]) by ramsan.of.borg with esmtp (Exim 4.95) (envelope-from ) id 1qZBwx-001dhJ-Gu; Thu, 24 Aug 2023 17:08:53 +0200 Received: from geert by rox.of.borg with local (Exim 4.95) (envelope-from ) id 1qZBx7-000Vyw-5y; Thu, 24 Aug 2023 17:08:53 +0200 From: Geert Uytterhoeven To: Javier Martinez Canillas , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Geert Uytterhoeven Subject: [PATCH v2 4/8] drm/ssd130x: Add support for DRM_FORMAT_R1 Date: Thu, 24 Aug 2023 17:08:42 +0200 Message-Id: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: MIME-Version: 1.0 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1775147164209520698 X-GMAIL-MSGID: 1775147164209520698 The native display format is monochrome light-on-dark (R1). Hence add support for R1, so monochrome applications not only look better, but also avoid the overhead of back-and-forth conversions between R1 and XR24. Do not allocate the intermediate conversion buffer when it is not needed, and reorder the two buffer allocations to streamline operation. Signed-off-by: Geert Uytterhoeven --- v2: - Rework on top op commit 8c3926367ac9df6c ("drm/ssd130x: Use shadow-buffer helpers when managing plane's state") in drm/drm-next. Hence I did not add Javier's tags given on v1. - Do not allocate intermediate buffer when not needed. --- drivers/gpu/drm/solomon/ssd130x.c | 76 +++++++++++++++++++++---------- 1 file changed, 51 insertions(+), 25 deletions(-) diff --git a/drivers/gpu/drm/solomon/ssd130x.c b/drivers/gpu/drm/solomon/ssd130x.c index 78272b1f9d5b167f..18007cb4f3de5aa1 100644 --- a/drivers/gpu/drm/solomon/ssd130x.c +++ b/drivers/gpu/drm/solomon/ssd130x.c @@ -449,15 +449,14 @@ static int ssd130x_init(struct ssd130x_device *ssd130x) static int ssd130x_update_rect(struct ssd130x_device *ssd130x, struct ssd130x_plane_state *ssd130x_state, + u8 *buf, unsigned int pitch, struct drm_rect *rect) { unsigned int x = rect->x1; unsigned int y = rect->y1; - u8 *buf = ssd130x_state->buffer; u8 *data_array = ssd130x_state->data_array; unsigned int width = drm_rect_width(rect); unsigned int height = drm_rect_height(rect); - unsigned int line_length = DIV_ROUND_UP(width, 8); unsigned int page_height = ssd130x->device_info->page_height; unsigned int pages = DIV_ROUND_UP(height, page_height); struct drm_device *drm = &ssd130x->drm; @@ -516,7 +515,7 @@ static int ssd130x_update_rect(struct ssd130x_device *ssd130x, u8 data = 0; for (k = 0; k < m; k++) { - u8 byte = buf[(8 * i + k) * line_length + j / 8]; + u8 byte = buf[(8 * i + k) * pitch + j / 8]; u8 bit = (byte >> (j % 8)) & 1; data |= bit << k; @@ -602,27 +601,51 @@ static int ssd130x_fb_blit_rect(struct drm_plane_state *state, struct ssd130x_device *ssd130x = drm_to_ssd130x(fb->dev); unsigned int page_height = ssd130x->device_info->page_height; struct ssd130x_plane_state *ssd130x_state = to_ssd130x_plane_state(state); - u8 *buf = ssd130x_state->buffer; struct iosys_map dst; unsigned int dst_pitch; int ret = 0; + u8 *buf; /* Align y to display page boundaries */ rect->y1 = round_down(rect->y1, page_height); rect->y2 = min_t(unsigned int, round_up(rect->y2, page_height), ssd130x->height); - dst_pitch = DIV_ROUND_UP(drm_rect_width(rect), 8); + switch (fb->format->format) { + case DRM_FORMAT_R1: + /* Align x to byte boundaries */ + rect->x1 = round_down(rect->x1, 8); + rect->x2 = round_up(rect->x2, 8); - ret = drm_gem_fb_begin_cpu_access(fb, DMA_FROM_DEVICE); - if (ret) - return ret; + ret = drm_gem_fb_begin_cpu_access(fb, DMA_FROM_DEVICE); + if (ret) + return ret; + + dst_pitch = fb->pitches[0]; + buf = vmap[0].vaddr + rect->y1 * dst_pitch + rect->x1 / 8; + + ssd130x_update_rect(ssd130x, ssd130x_state, buf, dst_pitch, + rect); + + drm_gem_fb_end_cpu_access(fb, DMA_FROM_DEVICE); + break; + + case DRM_FORMAT_XRGB8888: + dst_pitch = DIV_ROUND_UP(drm_rect_width(rect), 8); + buf = ssd130x_state->buffer; + + ret = drm_gem_fb_begin_cpu_access(fb, DMA_FROM_DEVICE); + if (ret) + return ret; - iosys_map_set_vaddr(&dst, buf); - drm_fb_xrgb8888_to_mono(&dst, &dst_pitch, vmap, fb, rect); + iosys_map_set_vaddr(&dst, buf); + drm_fb_xrgb8888_to_mono(&dst, &dst_pitch, vmap, fb, rect); - drm_gem_fb_end_cpu_access(fb, DMA_FROM_DEVICE); + drm_gem_fb_end_cpu_access(fb, DMA_FROM_DEVICE); - ssd130x_update_rect(ssd130x, ssd130x_state, rect); + ssd130x_update_rect(ssd130x, ssd130x_state, buf, dst_pitch, + rect); + break; + } return ret; } @@ -644,22 +667,24 @@ static int ssd130x_primary_plane_helper_atomic_check(struct drm_plane *plane, if (ret) return ret; - fi = drm_format_info(DRM_FORMAT_R1); - if (!fi) - return -EINVAL; + ssd130x_state->data_array = kcalloc(ssd130x->width, pages, GFP_KERNEL); + if (!ssd130x_state->data_array) + return -ENOMEM; - pitch = drm_format_info_min_pitch(fi, 0, ssd130x->width); + if (plane_state->fb->format->format != DRM_FORMAT_R1) { + fi = drm_format_info(DRM_FORMAT_R1); + if (!fi) + return -EINVAL; - ssd130x_state->buffer = kcalloc(pitch, ssd130x->height, GFP_KERNEL); - if (!ssd130x_state->buffer) - return -ENOMEM; + pitch = drm_format_info_min_pitch(fi, 0, ssd130x->width); - ssd130x_state->data_array = kcalloc(ssd130x->width, pages, GFP_KERNEL); - if (!ssd130x_state->data_array) { - kfree(ssd130x_state->buffer); - /* Set to prevent a double free in .atomic_destroy_state() */ - ssd130x_state->buffer = NULL; - return -ENOMEM; + ssd130x_state->buffer = kcalloc(pitch, ssd130x->height, GFP_KERNEL); + if (!ssd130x_state->buffer) { + kfree(ssd130x_state->data_array); + /* Set to prevent a double free in .atomic_destroy_state() */ + ssd130x_state->data_array = NULL; + return -ENOMEM; + } } return 0; @@ -898,6 +923,7 @@ static const struct drm_mode_config_funcs ssd130x_mode_config_funcs = { }; static const uint32_t ssd130x_formats[] = { + DRM_FORMAT_R1, DRM_FORMAT_XRGB8888, }; From patchwork Thu Aug 24 15:08:43 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geert Uytterhoeven X-Patchwork-Id: 136855 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a7d1:0:b0:3f2:4152:657d with SMTP id p17csp1247021vqm; Thu, 24 Aug 2023 09:43:05 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFy9M9GlTc3kYHpNuuDT6ovWjmZif7CXfUgUbB31wl2Z/yR3zQxncSYP5DtjRdcYHcW5rTE X-Received: by 2002:a05:6a21:819f:b0:14b:b42c:349d with SMTP id pd31-20020a056a21819f00b0014bb42c349dmr4417903pzb.9.1692895384662; Thu, 24 Aug 2023 09:43:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1692895384; cv=none; d=google.com; s=arc-20160816; b=ZCY3Ppr2F+75tgCK+VEZTo1uaEHZ8d6koQFbTVKe5G/f3sU3C2fz33NdQ+1C8CFAaA wDj61tf0H7q7E0l7FijAvtpCOomXmpP6cd6OdIRxMhxs9DUxMne0FLl+L2g7dxno0RGR vVq5NR7Y0cCczdo0lMICjHigBoxu1VNG6fggohTPqhzsJlW08UPHrkpVk8kkPtFUVXFf iVuIdB3IBBqLpDTI1KOqN0HGVE/0LW9qBJ/HdEyYpnwLRN05/H+f6zMAEbRMPDXhCKTl K6D6Pe/lTifXyn/0BUYJwDet8PY3zdHhCbHWCOqLthTk8XMgxJ5lHLTql+0mC+PUqpJb 24yg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=F3mgGDmKlvrQAc4vcLenU3r31b5MLpSGLfO52hZoUiQ=; fh=wcJXU+GRAJ+lFf7so8itXL2pGJ6fujr2XomH/f1be3s=; b=EpGZLlYaIoO+Noa0SW/sNKBn2UPjEamb9ou+3eDaJUg76bGk5wv7sIcmB5J4R/AKjv vQlW4G7a+ROJgzhVppy0IoiDxTNmmvMzVl1yRZTx15quOzerjgSm8QARaOBpQN8EvT3U ShQG0EZ8BARSIjyYUnEXDrs7pg3n+yj8ZnMUqAPjN8ktLyAUdSWEyFrWNWD6E75B7ljj HrmVrTv2r+XYm5isDOujXswsoDjnXECLhHzX2SaLyYkYuHA6xkkyQCIeV0kVjCOQJyOy kh3FtfhR9njuE9oe5+vOeF96PTeOVFfyLQrWG8+bvTvjILkdTIOjYTk4jJI0RzSAc2LA cieQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id e8-20020a656488000000b00565e386ff40si13132838pgv.744.2023.08.24.09.42.51; Thu, 24 Aug 2023 09:43:04 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242119AbjHXPJI (ORCPT + 99 others); Thu, 24 Aug 2023 11:09:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43248 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242155AbjHXPJA (ORCPT ); Thu, 24 Aug 2023 11:09:00 -0400 Received: from baptiste.telenet-ops.be (baptiste.telenet-ops.be [IPv6:2a02:1800:120:4::f00:13]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 02EA519B7 for ; Thu, 24 Aug 2023 08:08:56 -0700 (PDT) Received: from ramsan.of.borg ([IPv6:2a02:1810:ac12:ed40:3c6b:f703:5ab5:f36d]) by baptiste.telenet-ops.be with bizsmtp id dT8t2A00A01sfPQ01T8tZX; Thu, 24 Aug 2023 17:08:53 +0200 Received: from rox.of.borg ([192.168.97.57]) by ramsan.of.borg with esmtp (Exim 4.95) (envelope-from ) id 1qZBwx-001dhM-Hn; Thu, 24 Aug 2023 17:08:53 +0200 Received: from geert by rox.of.borg with local (Exim 4.95) (envelope-from ) id 1qZBx7-000Vz0-77; Thu, 24 Aug 2023 17:08:53 +0200 From: Geert Uytterhoeven To: Javier Martinez Canillas , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Geert Uytterhoeven Subject: [PATCH v2 5/8] drm/client: Convert drm_client_buffer_addfb() to drm_mode_addfb2() Date: Thu, 24 Aug 2023 17:08:43 +0200 Message-Id: <50762fd1694d3b5f6df1bdfa482564adb2ee7f36.1692888745.git.geert@linux-m68k.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: References: MIME-Version: 1.0 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1775129470976915825 X-GMAIL-MSGID: 1775129470976915825 Currently drm_client_buffer_addfb() uses the legacy drm_mode_addfb(), which uses bpp and depth to guess the wanted buffer format. However, drm_client_buffer_addfb() already knows the exact buffer format, so there is no need to convert back and forth between buffer format and bpp/depth, and the function can just call drm_mode_addfb2() directly instead. Signed-off-by: Geert Uytterhoeven Reviewed-by: Javier Martinez Canillas Tested-by: Javier Martinez Canillas --- v2: - Add Reviewed-by, Tested-by, - s/drm_mode_create_dumb/drm_client_buffer_addfb/ in one-line summary. --- drivers/gpu/drm/drm_client.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/drm_client.c b/drivers/gpu/drm/drm_client.c index 037e36f2049c1793..0ced189befebae12 100644 --- a/drivers/gpu/drm/drm_client.c +++ b/drivers/gpu/drm/drm_client.c @@ -395,19 +395,16 @@ static int drm_client_buffer_addfb(struct drm_client_buffer *buffer, u32 handle) { struct drm_client_dev *client = buffer->client; - struct drm_mode_fb_cmd fb_req = { }; - const struct drm_format_info *info; + struct drm_mode_fb_cmd2 fb_req = { }; int ret; - info = drm_format_info(format); - fb_req.bpp = drm_format_info_bpp(info, 0); - fb_req.depth = info->depth; fb_req.width = width; fb_req.height = height; - fb_req.handle = handle; - fb_req.pitch = buffer->pitch; + fb_req.pixel_format = format; + fb_req.handles[0] = handle; + fb_req.pitches[0] = buffer->pitch; - ret = drm_mode_addfb(client->dev, &fb_req, client->file); + ret = drm_mode_addfb2(client->dev, &fb_req, client->file); if (ret) return ret; From patchwork Thu Aug 24 15:08:45 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geert Uytterhoeven X-Patchwork-Id: 136870 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a7d1:0:b0:3f2:4152:657d with SMTP id p17csp1348690vqm; Thu, 24 Aug 2023 12:42:36 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHMwc9if78t6ZQxwUcfWLfQsYyEieFwSji4Uh0idAHo+YVoYJOjYONSer71rL/OFJ7NQbZ2 X-Received: by 2002:a05:6512:33c1:b0:4f8:4512:c846 with SMTP id d1-20020a05651233c100b004f84512c846mr15292554lfg.49.1692906155824; Thu, 24 Aug 2023 12:42:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1692906155; cv=none; d=google.com; s=arc-20160816; b=DyjWUfG9bW7LMMFlS9E1YssigJb4OTpU+ZZbUOfXMLlMcnwKSZ1Y7RW3A6NnqcdBka RV8tEZinh7sc/972K9391aq7zNYXMfc9K/g4200GjW6fJMdYHHj97lesG2tISX+ZyANi m6OXjOPDDf6uptY5AEtSZ53xb6zIZHkAlQyqCrAnV6VswNZtyct5p95Fj4qHfYuajm3I euqC23eSU2EEkjQB7E9rgYh9RBa4nJHUMGtn5D0Z5hNM6aL2+c2IHUyNbh9LiA74Um6b yaH1gOnI4xnOnkZVViIkjzQAemm1Xmdbk0jaGCXfzqluOXDEMxLVyK0aUKA8MUIWHoWe TIPQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=e0M6k89CEVrY+MCfRREUfp/i4sjY5kQJaYxY9IH2o/E=; fh=6JC+QaZxsG5AckT/UYpDVnqfnTEqALGwlsdU/L/iDlk=; b=0W0CJcZvGYpUHK4jD+dRFv/8jo0dEZHmN3WUP9fzJmMtVcqUTa3k2LJyIi34Rzx+6y 2dmRmkBtr1uF9UOmW+6EoGYqYsgIlvXAG61lfo9FVIHmJ2xs8LUoMvmj9TSfElM3RXu1 uwngEqSGxIWkLRp/9VSqT22upfY0CXvONGmC4cXO8outV+JcyDG9wsvXA4hYQmxPia0A wZz0XAQvC3ZgrLI/dh2M6GY+inNPRbixrFNihMrwaQYxKkJh+LMOO5Z+itRQjjsbsgcp RcAKoKIsd3hPyrvHsBV99P6O2PBWggLxEbE9IKKiWTwlcaDtuoCTAsgdscVC7DZbjYVL hJXw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id w3-20020aa7cb43000000b005255f4c64bfsi142726edt.297.2023.08.24.12.42.11; Thu, 24 Aug 2023 12:42:35 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242074AbjHXPJE (ORCPT + 99 others); Thu, 24 Aug 2023 11:09:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34228 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242151AbjHXPI7 (ORCPT ); Thu, 24 Aug 2023 11:08:59 -0400 Received: from michel.telenet-ops.be (michel.telenet-ops.be [IPv6:2a02:1800:110:4::f00:18]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 02B0419B2 for ; Thu, 24 Aug 2023 08:08:56 -0700 (PDT) Received: from ramsan.of.borg ([IPv6:2a02:1810:ac12:ed40:3c6b:f703:5ab5:f36d]) by michel.telenet-ops.be with bizsmtp id dT8t2A00E01sfPQ06T8tSE; Thu, 24 Aug 2023 17:08:53 +0200 Received: from rox.of.borg ([192.168.97.57]) by ramsan.of.borg with esmtp (Exim 4.95) (envelope-from ) id 1qZBwx-001dhT-Jw; Thu, 24 Aug 2023 17:08:53 +0200 Received: from geert by rox.of.borg with local (Exim 4.95) (envelope-from ) id 1qZBx7-000VzB-93; Thu, 24 Aug 2023 17:08:53 +0200 From: Geert Uytterhoeven To: Javier Martinez Canillas , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Geert Uytterhoeven Subject: [PATCH v2 7/8] drm/fb-helper: Add support for DRM_FORMAT_R1 Date: Thu, 24 Aug 2023 17:08:45 +0200 Message-Id: <62cb6e8c7aba2a037fb3704d46f60b93d7218b90.1692888745.git.geert@linux-m68k.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: References: MIME-Version: 1.0 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1775140765232192615 X-GMAIL-MSGID: 1775140765232192615 Add support for the monochrome light-on-dark buffer format (R1) to the fb helper, so this format can be used for fbdev emulation and for the text console. This avoids the overhead of using XR24 and the associated conversions on display hardware that supports only a simple monochrome format. R1 is very similar to C1 (monochrome indexed color), and shares the same depth and bpp. As drm_mode_legacy_fb_format() returns a format based on only depth and bpp, it cannot distinguish between R1 and C1. Hence drm_fb_helper_find_format() is modified to try to fall back to R1 if C1 is not supported. Signed-off-by: Geert Uytterhoeven Reviewed-by: Javier Martinez Canillas Tested-by: Javier Martinez Canillas --- v2: - Add Reviewed-by, Tested-by. --- drivers/gpu/drm/drm_fb_helper.c | 41 ++++++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c index 4dc28fdcc1e0a6a4..71baf8597516e9fd 100644 --- a/drivers/gpu/drm/drm_fb_helper.c +++ b/drivers/gpu/drm/drm_fb_helper.c @@ -1130,7 +1130,7 @@ static void drm_fb_helper_fill_pixel_fmt(struct fb_var_screeninfo *var, { u8 depth = format->depth; - if (format->is_color_indexed) { + if (format->format == DRM_FORMAT_R1 || format->is_color_indexed) { var->red.offset = 0; var->green.offset = 0; var->blue.offset = 0; @@ -1236,6 +1236,7 @@ int drm_fb_helper_check_var(struct fb_var_screeninfo *var, case DRM_FORMAT_C1: case DRM_FORMAT_C2: case DRM_FORMAT_C4: + case DRM_FORMAT_R1: /* supported format with sub-byte pixels */ break; @@ -1439,12 +1440,24 @@ int drm_fb_helper_pan_display(struct fb_var_screeninfo *var, } EXPORT_SYMBOL(drm_fb_helper_pan_display); +static bool is_supported_format(uint32_t format, const uint32_t *formats, + size_t format_count) +{ + size_t i; + + for (i = 0; i < format_count; ++i) { + if (formats[i] == format) + return true; + } + + return false; +} + static uint32_t drm_fb_helper_find_format(struct drm_fb_helper *fb_helper, const uint32_t *formats, size_t format_count, uint32_t bpp, uint32_t depth) { struct drm_device *dev = fb_helper->dev; uint32_t format; - size_t i; /* * Do not consider YUV or other complicated formats @@ -1457,10 +1470,12 @@ static uint32_t drm_fb_helper_find_format(struct drm_fb_helper *fb_helper, const if (!format) goto err; - for (i = 0; i < format_count; ++i) { - if (formats[i] == format) - return format; - } + if (is_supported_format(format, formats, format_count)) + return format; + + if (format == DRM_FORMAT_C1 && + is_supported_format(DRM_FORMAT_R1, formats, format_count)) + return DRM_FORMAT_R1; err: /* We found nothing. */ @@ -1680,11 +1695,15 @@ static int drm_fb_helper_single_fb_probe(struct drm_fb_helper *fb_helper) } static void drm_fb_helper_fill_fix(struct fb_info *info, uint32_t pitch, - bool is_color_indexed) + const struct drm_format_info *format) { info->fix.type = FB_TYPE_PACKED_PIXELS; - info->fix.visual = is_color_indexed ? FB_VISUAL_PSEUDOCOLOR - : FB_VISUAL_TRUECOLOR; + if (format->format == DRM_FORMAT_R1) + info->fix.visual = FB_VISUAL_MONO10; + else if (format->is_color_indexed) + info->fix.visual = FB_VISUAL_PSEUDOCOLOR; + else + info->fix.visual = FB_VISUAL_TRUECOLOR; info->fix.mmio_start = 0; info->fix.mmio_len = 0; info->fix.type_aux = 0; @@ -1707,6 +1726,7 @@ static void drm_fb_helper_fill_var(struct fb_info *info, case DRM_FORMAT_C1: case DRM_FORMAT_C2: case DRM_FORMAT_C4: + case DRM_FORMAT_R1: /* supported format with sub-byte pixels */ break; @@ -1747,8 +1767,7 @@ void drm_fb_helper_fill_info(struct fb_info *info, { struct drm_framebuffer *fb = fb_helper->fb; - drm_fb_helper_fill_fix(info, fb->pitches[0], - fb->format->is_color_indexed); + drm_fb_helper_fill_fix(info, fb->pitches[0], fb->format); drm_fb_helper_fill_var(info, fb_helper, sizes->fb_width, sizes->fb_height); From patchwork Thu Aug 24 15:08:46 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geert Uytterhoeven X-Patchwork-Id: 136850 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a7d1:0:b0:3f2:4152:657d with SMTP id p17csp1233012vqm; Thu, 24 Aug 2023 09:19:03 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFRMdc/GHal8uNivI2BCFyefYygMP0YXv6senRlGA341ouoOSV6e9tpSVdV8FN/WTlCSzbx X-Received: by 2002:a2e:8796:0:b0:2bc:cff6:f506 with SMTP id n22-20020a2e8796000000b002bccff6f506mr6697609lji.0.1692893942669; Thu, 24 Aug 2023 09:19:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1692893942; cv=none; d=google.com; s=arc-20160816; b=I4MMRhjHQ8HYJthu4xyK26PMC8tiVsdkrxrC8A9gmi3Yi0tol/Va4EKsdt1SIvlQYC eiQc3LEUKImBDL28QdL3v3yHlkWaRXJgpelT5rsCMOuZqPzz+BtvSj+NW5ifITEKjDHj 9pniRX9gXGfeDlXE/+oHG3gh0UZmEOzuN+3YQImRXGqo1q3fssqiAlY6dbk44bQJ8lOr BTduy3UeEqj56zkjXiUxZB3OTl+D8Q53nwXdcUiOe5LVBAJRWUu0198AMv+uU6AQOZKh aMxYQevzXpz5xppdSd14UpWHEsq+gt3TD5K4xra8Q3914iOvWYdQwpOfxvG5Anlz/+W6 MAHA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=pTTIx/3wsXgqu/LoOf+f6JsbAYTQNIF6xZRMzHo5bD0=; fh=wcJXU+GRAJ+lFf7so8itXL2pGJ6fujr2XomH/f1be3s=; b=MG4P0lShDJejMrMZjTPfgkSMxyZVuR/czXg+xc4LVlwbQakUEFboj/IrYS6rXwqtJQ 1YbBwUN0VuNoKtNDNZ1qkhC0wXO+RuG6fybeoU/jhweQ4XjHS+w3tghT1Sj7PtGoBvQh 2SdAaqdWVrMCHisyFMSrQTYk89Fytd7+7EuqwNr3S9xQcgzMm3nVa18zF+e3LTPgevFY BaxEVxUpDMKDqpkim98Ydeazpxg2bNuvHvirjkseiD+qwPtnfhDxfJsoLfq5/tumTtpz 1nhf2fFW01p2PZIi5M8LCmS60Ctb5yWCeLcse9ABRs191W0OUQjOoJXSPNGeITesgM/K Vbpw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id n11-20020a170906724b00b009888e0923cfsi10110798ejk.712.2023.08.24.09.18.37; Thu, 24 Aug 2023 09:19:02 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242128AbjHXPJJ (ORCPT + 99 others); Thu, 24 Aug 2023 11:09:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34256 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242154AbjHXPJA (ORCPT ); Thu, 24 Aug 2023 11:09:00 -0400 Received: from laurent.telenet-ops.be (laurent.telenet-ops.be [IPv6:2a02:1800:110:4::f00:19]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 030941BC5 for ; Thu, 24 Aug 2023 08:08:56 -0700 (PDT) Received: from ramsan.of.borg ([IPv6:2a02:1810:ac12:ed40:3c6b:f703:5ab5:f36d]) by laurent.telenet-ops.be with bizsmtp id dT8t2A00G01sfPQ01T8th6; Thu, 24 Aug 2023 17:08:53 +0200 Received: from rox.of.borg ([192.168.97.57]) by ramsan.of.borg with esmtp (Exim 4.95) (envelope-from ) id 1qZBwx-001dhY-L3; Thu, 24 Aug 2023 17:08:53 +0200 Received: from geert by rox.of.borg with local (Exim 4.95) (envelope-from ) id 1qZBx7-000VzG-AC; Thu, 24 Aug 2023 17:08:53 +0200 From: Geert Uytterhoeven To: Javier Martinez Canillas , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Geert Uytterhoeven Subject: [PATCH v2 8/8] drm/ssd130x: Switch preferred_bpp/depth to 1 Date: Thu, 24 Aug 2023 17:08:46 +0200 Message-Id: <9dbc3b5124c69514c123f9b880fdd372928e69df.1692888745.git.geert@linux-m68k.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: References: MIME-Version: 1.0 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1775127958486499505 X-GMAIL-MSGID: 1775127958486499505 The native display format is R1. Hence change the preferred_depth and preferred_bpp to 1, to avoid the overhead of using XR24 and the associated conversions when using fbdev emulation and its text console. Signed-off-by: Geert Uytterhoeven Reviewed-by: Javier Martinez Canillas Tested-by: Javier Martinez Canillas --- v2: - Add Reviewed-by, Tested-by. --- drivers/gpu/drm/solomon/ssd130x.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/solomon/ssd130x.c b/drivers/gpu/drm/solomon/ssd130x.c index 18007cb4f3de5aa1..0d2b36ba40113fa3 100644 --- a/drivers/gpu/drm/solomon/ssd130x.c +++ b/drivers/gpu/drm/solomon/ssd130x.c @@ -1049,7 +1049,7 @@ static int ssd130x_init_modeset(struct ssd130x_device *ssd130x) drm->mode_config.max_width = max_width; drm->mode_config.min_height = mode->vdisplay; drm->mode_config.max_height = max_height; - drm->mode_config.preferred_depth = 24; + drm->mode_config.preferred_depth = 1; drm->mode_config.funcs = &ssd130x_mode_config_funcs; /* Primary plane */ @@ -1179,7 +1179,7 @@ struct ssd130x_device *ssd130x_probe(struct device *dev, struct regmap *regmap) if (ret) return ERR_PTR(dev_err_probe(dev, ret, "DRM device register failed\n")); - drm_fbdev_generic_setup(drm, 32); + drm_fbdev_generic_setup(drm, 1); return ssd130x; }