Received: by 2002:a05:6500:1b8f:b0:1fa:5c73:8e2d with SMTP id df15csp1018602lqb; Wed, 29 May 2024 19:14:03 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCXW9yAm3cQUouspX9jWI7ep73n+reihQTIFn09zeMz1n5oSx4W8YCHjlzI4rbxdX9jxD3uPW3t9WW3eZBfdvbKWJglLuaQK1AxCNi4vzA== X-Google-Smtp-Source: AGHT+IF+5twI+MxovWeah2lLV34JK502t6TrIk/VTAeHmOIrYkF+cGNOqTnYs3BPWKO10hMcx7ak X-Received: by 2002:a37:de10:0:b0:792:9a68:1532 with SMTP id af79cd13be357-794eb05c1a6mr85857185a.34.1717035243466; Wed, 29 May 2024 19:14:03 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1717035243; cv=pass; d=google.com; s=arc-20160816; b=I8JBEVrYr5Px/3kYejrfbi7DWMJ4gRlKSOO6zjL4pAIAyRdFUtNBLcGLJIoJTIQV+Z dK8PIS5DdyVe+tvvtJPGCr/DPkLMQe/OS83/G0KXv90NyBHlMC5fENkQmJgGJiFGq3Rb gc8EQsNux7Z2P/cnwBMX33CHgVLbFwAPYUH1e3BX7wg/1xkvuplbcD9OJMxc9OeJSoYY hb2PZBZdbJSayja7lT+WPv1O3HvOLsSWjRSu3ExqRCuLQX2HTnbkIZx5YT8UHD3JSDQE p/7jofF1o7RsbhfDUmnH71k0COZpl+TtCXw2wndNbKp8VbNYMeZV2l/tPZEF1UmY1/oT iZXA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=in-reply-to:content-disposition:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:message-id:subject:to :from:date; bh=WQO9zAiviUWo1YP6JYwJ1CHpdu1dMeRaTJqwlvWeJHk=; fh=PTscWTIHcoR2vyQtw5VESTy9e97dUqI8eGwoqj4vbiM=; b=rGHErpvl737ejQoy47NuMyTaHd2OKpa49YNaMETuCi9ibautKb4MRD7qp5coOSrBqo YAS/H/fUFjbjfb8zfJgWYYkv5N1rxoBX5tSOrabKreLktGL0rdRqP39FeQV7f+ekEG9y bu30vZzs/FDyp5bYRCTxaCZZCyyBpIW0XQh/6Wcpw9Wbbu8BBjNInqhZlvq0SVk+dGVU k+QMYk1rbSSjn0t9xVOsbIxN8Lfoy8IPnWR+9XfNbWJT4pfffhwgw2rWoUvDtNWOfEu6 LxJqGzeMbnkJAduNeS8dyVvOXLMh7Aa4267iz6rQnwnSRYZWNojqLrOiAkWY/kVJzntv tSEQ==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; arc=pass (i=1 spf=pass spfdomain=makrotopia.org); spf=pass (google.com: domain of linux-kernel+bounces-194877-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-194877-linux.lists.archive=gmail.com@vger.kernel.org" Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [147.75.199.223]) by mx.google.com with ESMTPS id af79cd13be357-794abd141fasi1572388885a.366.2024.05.29.19.14.03 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 May 2024 19:14:03 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-194877-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) client-ip=147.75.199.223; Authentication-Results: mx.google.com; arc=pass (i=1 spf=pass spfdomain=makrotopia.org); spf=pass (google.com: domain of linux-kernel+bounces-194877-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-194877-linux.lists.archive=gmail.com@vger.kernel.org" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 3593F1C219FD for ; Thu, 30 May 2024 02:14:03 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id B46C31DFE8; Thu, 30 May 2024 02:13:47 +0000 (UTC) Received: from pidgin.makrotopia.org (pidgin.makrotopia.org [185.142.180.65]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9AEFC18054; Thu, 30 May 2024 02:13:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.142.180.65 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717035227; cv=none; b=I9fIjuG0XhmOOYsbdjEK//pylYeqH0sOicppP4xOJZWX5wVsWOjmyHQc4Dd+mYLUhzX38Jay+AZ1m4+gHViOk6V1oI9hIoAqyunSOd+PY+0QjGxaFsW9zOr8w8SeOIAYc8DduMGpEJQPXMvRB5hrKJ5DcHN0eJSxTV0pkqnZ5Y4= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717035227; c=relaxed/simple; bh=8KiukBQuZe8dk/35HCsKrEZ3OpWGl77bj/JKjKV4ggo=; h=Date:From:To:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=mkRP2/7rD7pV5FSVh4vtCe5WmiDIsnT01psM6X+ad0wEZmxkBVvDxvvbirAA9TGITpMKymD35k2NB86BTiAdpzDDK4FOcXKV1eDtsQhIfv6MPLABzsfXRRY9YuM9NU7BIJkkf1s1fTQ76lAeJVBq90wWPg2VVqxgJ+u33PzIrTc= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=makrotopia.org; spf=pass smtp.mailfrom=makrotopia.org; arc=none smtp.client-ip=185.142.180.65 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=makrotopia.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=makrotopia.org Received: from local by pidgin.makrotopia.org with esmtpsa (TLS1.3:TLS_AES_256_GCM_SHA384:256) (Exim 4.97.1) (envelope-from ) id 1sCVIB-000000004dG-0THb; Thu, 30 May 2024 02:13:23 +0000 Date: Thu, 30 May 2024 03:13:19 +0100 From: Daniel Golle To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Ulf Hansson , Jens Axboe , Srinivas Kandagatla , Daniel Golle , Dave Chinner , Jan Kara , Christian Brauner , Thomas =?iso-8859-1?Q?Wei=DFschuh?= , Al Viro , Li Lingfeng , Christian Heusel , Min Li , Avri Altman , Adrian Hunter , Hannes Reinecke , Mikko Rapeli , Yeqi Fu , Victor Shih , Christophe JAILLET , Li Zhijian , "Ricardo B. Marliere" , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mmc@vger.kernel.org, linux-block@vger.kernel.org Subject: [PATCH v2 2/9] block: partitions: populate fwnode Message-ID: <3329bf2fa25695934b392944ff977ae95dc8c02d.1717031992.git.daniel@makrotopia.org> References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: Let block partitions to be represented by a firmware node and hence allow them to being referenced e.g. for use with blk-nvmem. Signed-off-by: Daniel Golle --- block/partitions/core.c | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/block/partitions/core.c b/block/partitions/core.c index ab76e64f0f6c..93d109409905 100644 --- a/block/partitions/core.c +++ b/block/partitions/core.c @@ -10,6 +10,8 @@ #include #include #include +#include + #include "check.h" static int (*const check_part[])(struct parsed_partitions *) = { @@ -281,6 +283,43 @@ static ssize_t whole_disk_show(struct device *dev, } static const DEVICE_ATTR(whole_disk, 0444, whole_disk_show, NULL); +static struct fwnode_handle *find_partition_fwnode(struct block_device *bdev) +{ + struct fwnode_handle *fw_parts, *fw_part; + struct device *ddev = disk_to_dev(bdev->bd_disk); + const char *partname, *uuid; + u32 partno; + + fw_parts = device_get_named_child_node(ddev, "partitions"); + if (!fw_parts) + fw_parts = device_get_named_child_node(ddev->parent, "partitions"); + + if (!fw_parts) + return NULL; + + fwnode_for_each_child_node(fw_parts, fw_part) { + if (!fwnode_property_read_string(fw_part, "uuid", &uuid) && + (!bdev->bd_meta_info || strncmp(uuid, + bdev->bd_meta_info->uuid, + PARTITION_META_INFO_UUIDLTH))) + continue; + + if (!fwnode_property_read_string(fw_part, "partname", &partname) && + (!bdev->bd_meta_info || strncmp(partname, + bdev->bd_meta_info->volname, + PARTITION_META_INFO_VOLNAMELTH))) + continue; + + if (!fwnode_property_read_u32(fw_part, "partno", &partno) && + bdev_partno(bdev) != partno) + continue; + + return fw_part; + } + + return NULL; +} + /* * Must be called either with open_mutex held, before a disk can be opened or * after all disk users are gone. @@ -355,6 +394,8 @@ static struct block_device *add_partition(struct gendisk *disk, int partno, goto out_put; } + device_set_node(pdev, find_partition_fwnode(bdev)); + /* delay uevent until 'holders' subdir is created */ dev_set_uevent_suppress(pdev, 1); err = device_add(pdev); -- 2.45.1