From patchwork Wed Jan 10 01:14:34 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kuninori Morimoto X-Patchwork-Id: 13515572 X-Patchwork-Delegate: geert@linux-m68k.org Received: from JPN01-OS0-obe.outbound.protection.outlook.com (mail-os0jpn01on2112.outbound.protection.outlook.com [40.107.113.112]) (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 486CD28EA; Wed, 10 Jan 2024 01:14:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=renesas.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=renesas.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=renesas.com header.i=@renesas.com header.b="M1CRR0S2" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=K74BmIZFZOTg1lBQBuVdwQNc+1DaRakSoTe6g+DZvsvojpBx4wNITfXSUJESAfLN9yaEAFx1aNYSK2LRUI9EWUqDLKu2GdTJvwJpTrfJF26XfZ+gmF4A8aa04WfQkEYRHVKqGJScITBjEWdVi/t1oE5B234ogzlkvqKwqp9XqxgxvoY9qQxqtjdySoPjOqztcXQtp/60u27RnJ7Bx6ACqhjYdRm4vpM5J/SSsNDlPgg6EGPuasJdRjhWuVQtM2UGrNbsUpmmJPctuYZXFpER+LkifgsrR+wN0tsK5tnVeOGCDlzrvnvDUk/FoNOEOhly+eS6WNcXNLh2iM/anlveVg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=1XQHWRTVIn3IR/BVQKSU7VmzH27RAnJGrU21XEgwWMw=; b=cOlwPBXDzrQMJ5rp2sgrYfEhU5gU/5u5FG8rWuhN76PTni9KW9FdOrV+7nqaJ+sFQlR795RVXMSXUARv2msO6Q0ROFmebMmfYRy2v2kAowvPfey0u6d9VNBDAKMXx3efKWdpRxqYWPYGcc/oicspYc9KqxabE4yTHgSZT4fFD1/IR8pVVE+uH+aheXDkF9EMVddq8IVFheJZjZNm6QzBlywNf5r84wLRw8+IsOYiDVQOBLWeIkXqyFT8Nf0yp5R/ToWT5UEWwShxJgsdkn5ieajCzpBzFV7lZBQQ+e72DRWjkqOZ6WBavNm9vYG0Ud5eHCyCy3x73WrN1GOmxmjV+Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=renesas.com; dmarc=pass action=none header.from=renesas.com; dkim=pass header.d=renesas.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=renesas.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1XQHWRTVIn3IR/BVQKSU7VmzH27RAnJGrU21XEgwWMw=; b=M1CRR0S2yb3d5B/MMxbBKKuKGuDBOQziH37+zoAKn5mOEGMFNQ7bftxVFjMYfRUivUTo3Rh1Oyxjw+yo5faHM+gN+Kn+cLZoIwiJxeKpYGGpf4IPg8J4hdDlcSm/5RwbHBw1bQnNtKZAZDsxosmlFE1MBelwlfLG8NG8CoUK178= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=renesas.com; Received: from TYCPR01MB10914.jpnprd01.prod.outlook.com (2603:1096:400:3a9::11) by OS3PR01MB8442.jpnprd01.prod.outlook.com (2603:1096:604:195::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7181.17; Wed, 10 Jan 2024 01:14:34 +0000 Received: from TYCPR01MB10914.jpnprd01.prod.outlook.com ([fe80::91d:1bfa:edc4:1c5b]) by TYCPR01MB10914.jpnprd01.prod.outlook.com ([fe80::91d:1bfa:edc4:1c5b%7]) with mapi id 15.20.7181.015; Wed, 10 Jan 2024 01:14:34 +0000 Message-ID: <87cyuagfba.wl-kuninori.morimoto.gx@renesas.com> From: Kuninori Morimoto Subject: [PATCH v5 resend 1/4] of: add __of_device_is_status() and makes more generic status check User-Agent: Wanderlust/2.15.9 Emacs/27.1 Mule/6.0 To: Frank Rowand , Geert Uytterhoeven , Michael Turquette , Rob Herring , Stephen Boyd Cc: Rob Herring , devicetree@vger.kernel.org, linux-clk@vger.kernel.org, linux-renesas-soc@vger.kernel.org, Aymeric Aillet , Yusuke Goda In-Reply-To: <87edeqgfbu.wl-kuninori.morimoto.gx@renesas.com> References: <87edeqgfbu.wl-kuninori.morimoto.gx@renesas.com> Date: Wed, 10 Jan 2024 01:14:34 +0000 X-ClientProxiedBy: TYAPR01CA0052.jpnprd01.prod.outlook.com (2603:1096:404:2b::16) To TYCPR01MB10914.jpnprd01.prod.outlook.com (2603:1096:400:3a9::11) Precedence: bulk X-Mailing-List: linux-renesas-soc@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYCPR01MB10914:EE_|OS3PR01MB8442:EE_ X-MS-Office365-Filtering-Correlation-Id: 9ddffdaf-b1f9-4bd6-d5c8-08dc11798190 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: jeYTo60qpUoopRSxlX6wQ8p1xRfYGNyAKJ2V/4Xgesj2D9BqedW4IfW5qKAzSjoyyje1WNEQoWwfuvDpUmPi4jzZYyOLFCgunPY7fiACI5QERqSihcBhW7BDKnme9SCGUr5nhTriCeaoaF3PC7aO56R8TL51uVauxROb+cRb6AnQX6Q4rUE5T/lx3q7s0m3Jfo1jhMsTRRUHL12NyfNqfW964fhrjuLgPT6lzUe8NccxyXqicaupkvITyzzXeu+feYjHE/wpWDPqh5m+ASXoVFNx4Sv3c6glc6srOzubXbub41YkDSfZzuc7Dxr9GFRnwF9rwAIKAiPzRWC2kw+WcMNB4P6Mpl7VilI1H9APtSTfcynWAjmdbeeIlJNSZG8lOzGNlVvx+0gSk+eUFkP5QhO5mdYZj+fdFiOWA+d10qTzqg68T7kEamQebLCttn21venyvwF6uaR4aKJbuJIcmM64IdGa4vzLNcpbAHhQH9HmU+5H6V0VFEADggEx1k6KR/sQlF2rV1B9JJdNayr/4kg3aqIIEJxV94AaUKadHtn2ue1EkNstI/eIrP4wr9gOBnieoaAZrnjO/8bTBQDJxbKum1rD2dAgDdkcfj2Epx7m9LDObkpv00hvstgwKwa8rrXnLIKudtakj1FKNpiZAA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYCPR01MB10914.jpnprd01.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(39860400002)(396003)(346002)(366004)(376002)(136003)(230922051799003)(64100799003)(451199024)(1800799012)(186009)(38100700002)(478600001)(6486002)(83380400001)(54906003)(8936002)(8676002)(66556008)(66476007)(4326008)(110136005)(316002)(66946007)(36756003)(52116002)(107886003)(2616005)(26005)(6512007)(86362001)(6506007)(2906002)(38350700005)(5660300002)(7416002)(41300700001)(41533002);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: lEKj/txH68scWAWHA0oefU+2Mf5CIY7R8MLNGQbuAD//J4eOnr554GoaifyXzxXk+A2GGgTiguaEPb0WwuiJLiGM2oL02A2LetXqTPxM3P7vGj9sok3NLZCaDq7t9x1AvCm8xXtWUXE0xRSVSU3L04+kq4md6oRKX9NZ7ABDA/1S88zqcVJyCw99qaEqKHo9fq5kOKXlz73PMalPeKTmo1CBpyaoSaHLgvNNOWWZ24mid+VUxgBY88QBLVDnBzws5J6aoZ8izYtrsRibCmEJIQxO0Xqd0PmWMOVPjYJoGHyCDExcY25vk+5Yz3cXrZU9hhrGtc3yZd8/qPbfcZ4k98LgQzKUvHM+EoiE4HMVdKeS453BsQra57hOO/36EZC3E2evZ+gLK7/he3x1FFbPHiU3f8lc7lM9r52IhXK6GGVIOnQ3AB5yOSZDteyq/lBUXDmcfcX4Ouha0GSaVF+sID7HQrLeRHXzGJ2Dx0iJ+qDMuBQJd98ycQzC6SqgduXK67Yp2B59RYp8nsDHzUaMGPDd6WC8dzYRW8VxZCecZr7WoX2fC2q1+s8qxzyj1droWIFQRA4VzLy7xbhZfLSGgN5bSXRuGC6zfJL0TJ6jZplfnREH0QLady8gtKUiRUVzqOovxVR0EkbATx1094+qqraUakA2tn6uvem+WtJGlNSSf2q6t5HJG642+olNBAZQkUzPvkrznMkxRjyYddEqbTcWhLCEPbMdRCiHPYU2Ko8nSKsODQ8jjtphnNLVC0qfJR0ckCALU9rDIjL8y/pKyFNV4P0U8hwOAKfv2nfR46fHlGGW1PWPi/V4H8albEz5QVYu9XDcJdrDRfm7gtU4otwS4VseNeuDDD9CBQNx4KakE17uPs7ViiN/mXbcxBhGmdoRJ8JXiYM/j2tNEjqu0JcycYAyjarFxRHAgVqnqm/VtLUnrVhQuQrtzVBLSsZSzozVvx1Vg9F/3E2MksKQdK/5W9mhJl2BplyGTbV21k3hv8PywHxr7oHXXsenKawb1knz2oFSh5CeiExXajNQ3CC9ZQl9G7WSYcW9EVbiAKa1Mm5QZbyFcfnpubwzTCxieT8l34r+0ngXYdV3vFTtNEJ2yw5JFgmJEMPafO6i9mrobXJcs10wTNKBHRvvUQqf3A1mE9TlAm0pH/iO8Cm9N3ItZDcz6Qq3Zsf66slrfkoQxDAvI3LXa6ViQC9IhJARyj1pXWl01Vz11iWvbXMY0YN57l2WxPcW5lNJ88VHWiROI7TvpxS6R1121NcYahlYcYE6Qf2ZPwRvcgG8qi2652jJH8J4xAEW4ErxJCpNST5HRMmV4fRMJRkZI3AxuuzNRqcI4RYXHZrYUhVXf/QmcaoDV2y6P0ryRBMfRFqGt0xRCABcKLt0De4r7EqMtVROGrCWQDVPfvIGMkRx9KwZJP+DSpEt9bv4dqMiJJCZnVv1+VO+Y7/kxyprr0Dhf5V6C0+exata7GDQX8om+laNt/YPEr42CSJuCaXitAAGzjIdHgp9p4yMJpSxyrdp9N3ypqdI3SyMaVtypQSCLWLkinQh8v+TuiOhKZit1yAWyF9pw1wi12TI6FQqKadL4FFYzDRS7CYKfDvt1TvRltRMQWrjHhdmDY5VutnnLUDG/aQ= X-OriginatorOrg: renesas.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9ddffdaf-b1f9-4bd6-d5c8-08dc11798190 X-MS-Exchange-CrossTenant-AuthSource: TYCPR01MB10914.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jan 2024 01:14:34.3666 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 53d82571-da19-47e4-9cb4-625a166a4a2a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: MQ7YF5GdTi996McHBFuE+UPYKtkj8tU689SygGRfWb6e8uFNWgPHRo8kNYHihQr3K8HuZKMVsB9nzNb6D+Xitkwfn+a+E9uiXWKjqi2iC+ciCKwlbkhO9PqNbj0HY2vh X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS3PR01MB8442 Linux Kernel has __of_device_is_available() / __of_device_is_fail(), these are checking if the status was "okay" / "ok" / "fail" / "fail-". Add more generic __of_device_is_status() function for these. Signed-off-by: Kuninori Morimoto Tested-by: Yusuke Goda Reviewed-by: Rob Herring Reviewed-by: Geert Uytterhoeven --- drivers/of/base.c | 57 ++++++++++++++++++++++++++++++----------------- 1 file changed, 36 insertions(+), 21 deletions(-) diff --git a/drivers/of/base.c b/drivers/of/base.c index 8d93cb6ea9cd..3cb467a7e747 100644 --- a/drivers/of/base.c +++ b/drivers/of/base.c @@ -415,15 +415,8 @@ int of_machine_is_compatible(const char *compat) } EXPORT_SYMBOL(of_machine_is_compatible); -/** - * __of_device_is_available - check if a device is available for use - * - * @device: Node to check for availability, with locks already held - * - * Return: True if the status property is absent or set to "okay" or "ok", - * false otherwise - */ -static bool __of_device_is_available(const struct device_node *device) +static bool __of_device_is_status(const struct device_node *device, + const char * const*strings) { const char *status; int statlen; @@ -433,16 +426,45 @@ static bool __of_device_is_available(const struct device_node *device) status = __of_get_property(device, "status", &statlen); if (status == NULL) - return true; + return false; if (statlen > 0) { - if (!strcmp(status, "okay") || !strcmp(status, "ok")) - return true; + while (*strings) { + unsigned int len = strlen(*strings); + + if ((*strings)[len - 1] == '-') { + if (!strncmp(status, *strings, len)) + return true; + } else { + if (!strcmp(status, *strings)) + return true; + } + strings++; + } } return false; } +/** + * __of_device_is_available - check if a device is available for use + * + * @device: Node to check for availability, with locks already held + * + * Return: True if the status property is absent or set to "okay" or "ok", + * false otherwise + */ +static bool __of_device_is_available(const struct device_node *device) +{ + static const char * const ok[] = {"okay", "ok", NULL}; + + if (!device) + return false; + + return !__of_get_property(device, "status", NULL) || + __of_device_is_status(device, ok); +} + /** * of_device_is_available - check if a device is available for use * @@ -474,16 +496,9 @@ EXPORT_SYMBOL(of_device_is_available); */ static bool __of_device_is_fail(const struct device_node *device) { - const char *status; - - if (!device) - return false; - - status = __of_get_property(device, "status", NULL); - if (status == NULL) - return false; + static const char * const fail[] = {"fail", "fail-", NULL}; - return !strcmp(status, "fail") || !strncmp(status, "fail-", 5); + return __of_device_is_status(device, fail); } /** From patchwork Wed Jan 10 01:14:43 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kuninori Morimoto X-Patchwork-Id: 13515573 X-Patchwork-Delegate: geert@linux-m68k.org Received: from JPN01-OS0-obe.outbound.protection.outlook.com (mail-os0jpn01on2119.outbound.protection.outlook.com [40.107.113.119]) (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 729A21373; Wed, 10 Jan 2024 01:14:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=renesas.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=renesas.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=renesas.com header.i=@renesas.com header.b="jETWwvwz" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jnanZp2/flt/tfEubJcX8UB+kqbk+2eTpUAQgEmi612QjHpxzQySo+YL7MUKNZhjXe1Ss0bMv0ZHWPEfr163eYk1WegmM/gCnr5Ofu5raTMUfgg7szx6UVJNPaNqVeevfEZ2D0wDNEl3YG2fCxcnBm6IaEhQWUzDiCfziI0q3jc0WSRrEgl2lViuP/sZlV3H4ZnIz0Qhi3jz8nRi443BvKNhmE2B6k8JeGKKR42padL3POjD7QxdfeQjkksmVMOO+0ZLi/NNDrMxl0d+TrJUqfBsFd6ZxdWN1AeQ3sPV9smzGoCIxx4FJzKVSumPS6OzvTnPGj63D58Ldcxk+x1M1A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=RgUkUYtygoxiqzMiBVycBlhtPag3tFrU4SqtSRyEFyI=; b=lxPPm72hfeBTx0T9x0VrOIyzf6McPLkZw7NStWHrWFniZhbK3Fb49bUVZbCFWkneIIxJIS5IIMqJAWAdAD/LJVXSNd4jifGJSoP1sLn04pQn5ec5PQs2Bf+chSY6TVPkD9rGLzkAyK9M+Y7XM2GgBrlHWWw2w0TwX5KWYTaXOu/nx2Q+yYHX7WzhjT9ilG9l6RzSZs8L5v+XzjIUloODvUskN5+af+GLQ+rCOzIuaZAwojAVKYZtayolr9zCEDIAV0ugEpeEFkr0xUSETtbUMj4BSrhhptAa3k9lC03uxokPJs4lyDk89s/4PGlmMOd2GszG0EjldtEEPUY6fbPmog== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=renesas.com; dmarc=pass action=none header.from=renesas.com; dkim=pass header.d=renesas.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=renesas.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=RgUkUYtygoxiqzMiBVycBlhtPag3tFrU4SqtSRyEFyI=; b=jETWwvwzizK5X4RfNSRYxFmz7NsJy3dBjWxjpD7L8c1/XFfjP/ElOSeEkMnHjsMPiYWe2zKutVPM9uG1q5Ok/tgDbjE5fEtYxq4Yx3qKaMF1AkQ7vP2vG3PMXD5jaIojNVrmr9BJ952RPTbmHGznJxvMUFVXs6snW3r1oJwdPFI= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=renesas.com; Received: from TYCPR01MB10914.jpnprd01.prod.outlook.com (2603:1096:400:3a9::11) by OS3PR01MB8442.jpnprd01.prod.outlook.com (2603:1096:604:195::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7181.17; Wed, 10 Jan 2024 01:14:43 +0000 Received: from TYCPR01MB10914.jpnprd01.prod.outlook.com ([fe80::91d:1bfa:edc4:1c5b]) by TYCPR01MB10914.jpnprd01.prod.outlook.com ([fe80::91d:1bfa:edc4:1c5b%7]) with mapi id 15.20.7181.015; Wed, 10 Jan 2024 01:14:43 +0000 Message-ID: <87bk9ugfb0.wl-kuninori.morimoto.gx@renesas.com> From: Kuninori Morimoto Subject: [PATCH v5 resend 2/4] of: add of_get_next_status_child() and makes more generic of_get_next User-Agent: Wanderlust/2.15.9 Emacs/27.1 Mule/6.0 To: Frank Rowand , Geert Uytterhoeven , Michael Turquette , Rob Herring , Stephen Boyd Cc: Rob Herring , devicetree@vger.kernel.org, linux-clk@vger.kernel.org, linux-renesas-soc@vger.kernel.org, Aymeric Aillet , Yusuke Goda In-Reply-To: <87edeqgfbu.wl-kuninori.morimoto.gx@renesas.com> References: <87edeqgfbu.wl-kuninori.morimoto.gx@renesas.com> Date: Wed, 10 Jan 2024 01:14:43 +0000 X-ClientProxiedBy: TY2PR0101CA0040.apcprd01.prod.exchangelabs.com (2603:1096:404:8000::26) To TYCPR01MB10914.jpnprd01.prod.outlook.com (2603:1096:400:3a9::11) Precedence: bulk X-Mailing-List: linux-renesas-soc@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYCPR01MB10914:EE_|OS3PR01MB8442:EE_ X-MS-Office365-Filtering-Correlation-Id: a4dc6906-47ef-40cb-03d8-08dc11798744 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: FtOehzZ4Kx6XKhbP6FTAniIU9TpVXT9oNJZWiQ2Vg6OXjv9qE7oftWq5WvDIEgiXDDd/f/NJsxknKrnYkdXhQ91c+I6Gspi1tewbPJeOaTrMGKsZf8eWOA4ef4wsQkIUFJehuNxSsVmry4/IE4+zThDdNFuTwFmHL7urgvW8+iGS7odox7ScpTV0FiwZO7K4WjVw8nEf1/MXWbBPS5k92XhA7U2/6kBNYrMLXZtXdI5r6rUwPflZogWqxEKAMP+S6S7FTS2V707lLvKI3RdZta6/y1EyIrJzhoUKXKnkfL3hoVLR86R4zI+tZcH+ZmxTdJo/uoxkEGpcApaAhLftfFDc1a5b8lV3NxTmZ7kj6GDdQ7wL2/fNhssoSznYU2oJAq2G69j/TCj2ngJuaoWQNqXXtIU2rf2F6Zc/Xz1K7OgfstEinRJDHK4xWDIc64mIrJD/6p6JAEzh59KtJxdHUyY1Qnozi7SssGsLHTFRQUgqkj7uZ1d0XHBIEo/X3K7ZfDkm3YKsj48UgvQ6H3LvKKx13kLw8xBrOPd3ZVLZ7NBxffrmsPgpCCrijs3/vJxGRYJFkp618ukst0X4JoC5X4YDvHRSjlf6PoiwPXCqbr7aoWZW6KphEx9BbkJTWq8r5eK+XRTwcTSkyi/WmIARKw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYCPR01MB10914.jpnprd01.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(39860400002)(396003)(346002)(366004)(376002)(136003)(230922051799003)(64100799003)(451199024)(1800799012)(186009)(38100700002)(478600001)(6486002)(83380400001)(54906003)(8936002)(8676002)(66556008)(66476007)(4326008)(110136005)(316002)(66946007)(36756003)(52116002)(107886003)(2616005)(26005)(6512007)(86362001)(6506007)(2906002)(38350700005)(5660300002)(7416002)(41300700001)(41533002);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: hLgyfoyQzfCxxwaVjEZwYoq7kSH2UdskB1jCpqRT/pjkgW1jRJZcG7nWlGigMRHD87fhdYp5ZWFklLDuiqF+6cCaKruxqieK0MAlk8X3FPmR26CMl5EEoY7NZyEggd0gpShXaIH+rHA1+KhinFleXvRpi9Vh7HuYUSooE72FJnYPg1tq0zcWkm4G84BLAJ9iaPnh/TPjxmCpackwXOqDVo2sNKsHrlyq9Jl/+CszTIGwdBdUAufq8PTXtntDfizqExyw0ub0qfE2AybOxlLB/t/YkyD/WYFU6VszUFx02T+riqALxNn7Cp387Ld3k0ARvb2P4zrdMUyw5VRBz3EbablBV8FmgXo7QdnFbw9vUUo60e6lfCczpso69jwk2+azaooiy5I9C9I+jW567s9OgtKiJ8YdDKELlNaQVmT76fDthHR0nQPYskBWqEgDHYoir0Qg1dc1FWahOmq+oL9gJ7b/jaVHjJxJKm6brIZ/cU1SBRWJaxgbjRvqOdvtjUYYRAG3RlKqBT4GjzKVDUtOVQuEDuGUzcEpEvrekp1t65Wd52fV1A4H8XM6ANEH1pGa72tVz3p3Z5VgQqaLrnvZqRBO4almYXk/zDAsKjzYWXSCNuzI2oTt9Nka/oU9BBBP0EN+UgLcNfM36QedLthgdhNbp6CtbJVH7RzFpafweWJ/9oUlp/21JZg0BxCuRKHw3bYnbJwGht2PIG9bHEOLw53ncky4PG14r+QgHLsB18AmmkfD+NhQtC1RBsug+xT/9u94LBkr2eJFDwsU34oD/09/xD/bF4ZIIPcsPco1ScA9QbMHUrQhbsZQgsa3/xZy8MJbizEym3DVvixRTTnCf44nuopEicJXlfQD3RNYXWuxTpIv4k3Tp3ueSOLgybKaI3Kfc36I7iS6SsoEqU33d9q4RDQKGWpC5ER4mSRF6vfwk+nrhE+Fsxq5UrfINUcpL2r3BK/GelUTr7FVmHn7S1MniwMo1HDh490bGLupnozws9mEB98bF+uYC7BiefaezWPpCmp4b5l4G3jbdn+bj9xy+gf9u6V1ibhcCe0HBmgCHXptzbdt3xy8oT4HbemBGGr5H0C8JfdSe5bfLS9juzc/VDZnnS9W4Mwbn9dJUK1ltgY83b2OvxmSHbSX1as6XHlrAprdW1dd5ZKOFJZQMg6Ohg/kO6ZDKJaqMBSn4kjOQQg5pbp7W5lah4n7ovLJNeCcJkua3KVf+5AXOkyNmyddCEMcjq0hFRAUQz1YzFw43zBkRE8TlCxQ+dCOCzl9tQGxnW2llLa63mTsN/8n13Ima0jpr4g+B09tD+Y1/ae3Ipw98GiW8TjT1JP9pV3Qs9qAuGqsVaI9RmAR4CU7u7P3QF5dqWJBzCpPZ/PR60TYhG2bgVGb6oE5KyBFZyWny4O7qr8prfZqUn07GHxn95ZfVTXP2bEPZzjPB7Tdj5fn4Fx9W5eeQ6sfZ6jyVNClfiwQYMaupJLRFtTPg5qCT7fLamvKmrcY66RjnbXa9QEZDWSn0R8V0vxrTBkbeLEOjlAiBJYUji5WFdC/t44gkcWQ83aQ/LW1Z+nSt68dt1UCgPfSYTvNz1DiW8exGmBDMjOqGtQQaEg3x2MTeBQJmI/93F4uQokkAlRoOWOEA5M= X-OriginatorOrg: renesas.com X-MS-Exchange-CrossTenant-Network-Message-Id: a4dc6906-47ef-40cb-03d8-08dc11798744 X-MS-Exchange-CrossTenant-AuthSource: TYCPR01MB10914.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jan 2024 01:14:43.8915 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 53d82571-da19-47e4-9cb4-625a166a4a2a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: SA/LYqSBIYKj32YLBKjwoVy/0NOSTN7wQI5l+0X9Yc3iDHaJW+Oqq5e1QYGZa86eESDaqayQKqN8GRiksFPaY19bags+GMhG6lWmXgxGR0EgO313S51Fqgsn+TTUWEHM X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS3PR01MB8442 Linux Kernel has of_get_next_available_child(). Add more generic of_get_next_status_child() to enable to use same logic for other status. Signed-off-by: Kuninori Morimoto Tested-by: Yusuke Goda Reviewed-by: Rob Herring Reviewed-by: Geert Uytterhoeven --- drivers/of/base.c | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/drivers/of/base.c b/drivers/of/base.c index 3cb467a7e747..25c841a3882f 100644 --- a/drivers/of/base.c +++ b/drivers/of/base.c @@ -612,16 +612,9 @@ struct device_node *of_get_next_child(const struct device_node *node, } EXPORT_SYMBOL(of_get_next_child); -/** - * of_get_next_available_child - Find the next available child node - * @node: parent node - * @prev: previous child of the parent node, or NULL to get first - * - * This function is like of_get_next_child(), except that it - * automatically skips any disabled nodes (i.e. status = "disabled"). - */ -struct device_node *of_get_next_available_child(const struct device_node *node, - struct device_node *prev) +static struct device_node *of_get_next_status_child(const struct device_node *node, + struct device_node *prev, + bool (*checker)(const struct device_node *)) { struct device_node *next; unsigned long flags; @@ -632,7 +625,7 @@ struct device_node *of_get_next_available_child(const struct device_node *node, raw_spin_lock_irqsave(&devtree_lock, flags); next = prev ? prev->sibling : node->child; for (; next; next = next->sibling) { - if (!__of_device_is_available(next)) + if (!checker(next)) continue; if (of_node_get(next)) break; @@ -641,6 +634,20 @@ struct device_node *of_get_next_available_child(const struct device_node *node, raw_spin_unlock_irqrestore(&devtree_lock, flags); return next; } + +/** + * of_get_next_available_child - Find the next available child node + * @node: parent node + * @prev: previous child of the parent node, or NULL to get first + * + * This function is like of_get_next_child(), except that it + * automatically skips any disabled nodes (i.e. status = "disabled"). + */ +struct device_node *of_get_next_available_child(const struct device_node *node, + struct device_node *prev) +{ + return of_get_next_status_child(node, prev, __of_device_is_available); +} EXPORT_SYMBOL(of_get_next_available_child); /** From patchwork Wed Jan 10 01:14:50 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kuninori Morimoto X-Patchwork-Id: 13515574 X-Patchwork-Delegate: geert@linux-m68k.org Received: from JPN01-OS0-obe.outbound.protection.outlook.com (mail-os0jpn01on2119.outbound.protection.outlook.com [40.107.113.119]) (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 5D5D917E4; Wed, 10 Jan 2024 01:14:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=renesas.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=renesas.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=renesas.com header.i=@renesas.com header.b="kd9xm+WY" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=SzYFtJ8qoW6eMJpnz+lsFBXCwMCufcjCyBHKe64xGG754DzZvN9pMpyrfq6LXmqSUcVhJNuIVHZCvXtoQJ7mgtD+4HzpchWFCYyLQbW9e7BhGYQK0srJnrrsYoG9af/l8CF8D7JfjhJMh8Mt60tokV9HSa5IkZJlYYP0dgFmHqJORV+70UQ212Hdwucq3BXdBiR5yVQhiECkRa+Z9BfxToxENJyOTmBJSyegHQm1JIKb92dsSelB6otmtuxCmL3mOK40VvM4WqwSPid692Z1cjmarsAtETLvJqVS52qoswexU59NoU8r7WcNJc6Pp7lX13myoMqS2BpKxx+i2jJkZA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=KQYO2RCbtijy3ZVuoe8I2Am3bSOnNmNkkPtgt0AW3FU=; b=WrI9JY3iuma6kgvgl9AWL7JjAWeW2h3EU0W0uggJh8dUJlj4DrK8at3jaxlfKI39OwJhNLYBImUEg5zvAF3ELuKYhOceK9wtPIOiVS0tTXLf9A+yxRhdlqxbeJuhPBmBaCUgp5EaxGk5rvZ/8dhY4NF6GGFXfMtsyF2WVU/HlJYVQzncG8H7GErMuKySJiuc+hG0uj5JJdnpB8cH+OHmz5AaLuAqE04mridafp2lZQoEIXVrY4/Zb1XeDTRiKMvwtkjrl704si4+Yn1kwGgV9200mUx2OPKd9ggIEklRMaXLPbmj81IuRa/7xhmo7CEARBQeeg/McvweUSI74XUh7g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=renesas.com; dmarc=pass action=none header.from=renesas.com; dkim=pass header.d=renesas.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=renesas.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KQYO2RCbtijy3ZVuoe8I2Am3bSOnNmNkkPtgt0AW3FU=; b=kd9xm+WYrrSAO4banh9wWegMaMwNIdIzHqRf7cP0uEZLXs4I0vjb1lA6jMh5bQTxxPOjc0qIPzf3M+zQJFys9RCQ6BLwl4U64IDyoYOIJRTLN2/wHMV5P1CL9W7K1Syh8j926NByJQ7QAfHaw4zRZ5SDfR3l93izDQTeQgrBf0s= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=renesas.com; Received: from TYCPR01MB10914.jpnprd01.prod.outlook.com (2603:1096:400:3a9::11) by OS3PR01MB8442.jpnprd01.prod.outlook.com (2603:1096:604:195::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7181.17; Wed, 10 Jan 2024 01:14:50 +0000 Received: from TYCPR01MB10914.jpnprd01.prod.outlook.com ([fe80::91d:1bfa:edc4:1c5b]) by TYCPR01MB10914.jpnprd01.prod.outlook.com ([fe80::91d:1bfa:edc4:1c5b%7]) with mapi id 15.20.7181.015; Wed, 10 Jan 2024 01:14:50 +0000 Message-ID: <87a5pegfau.wl-kuninori.morimoto.gx@renesas.com> From: Kuninori Morimoto Subject: [PATCH v5 resend 3/4] of: add for_each_reserved_child_of_node() User-Agent: Wanderlust/2.15.9 Emacs/27.1 Mule/6.0 To: Frank Rowand , Geert Uytterhoeven , Michael Turquette , Rob Herring , Stephen Boyd Cc: Rob Herring , devicetree@vger.kernel.org, linux-clk@vger.kernel.org, linux-renesas-soc@vger.kernel.org, Aymeric Aillet , Yusuke Goda In-Reply-To: <87edeqgfbu.wl-kuninori.morimoto.gx@renesas.com> References: <87edeqgfbu.wl-kuninori.morimoto.gx@renesas.com> Date: Wed, 10 Jan 2024 01:14:50 +0000 X-ClientProxiedBy: TY2PR0101CA0038.apcprd01.prod.exchangelabs.com (2603:1096:404:8000::24) To TYCPR01MB10914.jpnprd01.prod.outlook.com (2603:1096:400:3a9::11) Precedence: bulk X-Mailing-List: linux-renesas-soc@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYCPR01MB10914:EE_|OS3PR01MB8442:EE_ X-MS-Office365-Filtering-Correlation-Id: df0b8b10-d3d7-4c19-e041-08dc11798b23 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: csbuybNQxkVNBPmS0ok+T5sqJcYzIcMbB1NjEcAKOA2OWM2YRIb54DR+OBjjdKeEif98Py+jnrDiTq6qHxvKOwM6TQisIyZ5A0Dnvzci7/74sx6uk9k/MbzDwAY+cDr2XG01gZh74A8muw4ci9ZFVXJA5gIA6PWsW3MTz23iGIVuT4d3AhQZS6zn+W/AXK2sls6wLakeBNin4trlO5xiAtFeTDGT9cn+yoRS/0LqM4qPs/7JU1SEwwqm49u/xu0mVrALZOf7wGAD9jT6SEX4PHwVyO5VdGVl8GqiqnQ1G/Na8OTsmLWLLVF6uJfLkL5m+M/7I9QqMlZ+RbImBSp8k2d1Ghgfaw6ghHMWVeeuA7RXR+EkF6i11g28u6iSFiOQ89c69HiEOHIDpfwSfrvuEAV63ihI+sqbFyMi7m4asJeoYT1T+yHhQVk/cCfUhjYCzH6HMAEKIOPWcCKXhJ+aOYVj9yD5k8hGDYyGefo4fmQTPpg1GCGZs6JKKk2xLacaZytx8qM9Hqt4EgqlIAU/99UTRoW1wzYiHhJwsGpmRALK8PmZU3lRs44BvO+xM2O0+eLD/FQKKH9EYC32AteVhfAw22exinfjAQKunrqKzGVtULBemUOHab3JzY0qVHUp X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYCPR01MB10914.jpnprd01.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(39860400002)(396003)(346002)(366004)(376002)(136003)(230922051799003)(64100799003)(451199024)(1800799012)(186009)(38100700002)(478600001)(6486002)(83380400001)(54906003)(8936002)(8676002)(66556008)(66476007)(4326008)(110136005)(316002)(66946007)(36756003)(52116002)(107886003)(2616005)(26005)(6512007)(86362001)(6506007)(2906002)(38350700005)(5660300002)(7416002)(41300700001);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Rg8Iq+/GyWAT85GaR+RhvEUPSdWw8IdUghu3JvhTCYsbM9++pDce7udi/eJ/f9gh5SRIWi7eRFOcEI38k/FM0S6RK9+46RYnXGh7fAdUFtXj1wanQ16NLXKYZdGSvP8qI3rvIVHngLtWKfHm4aZwLa1GbXX7HKpY1SNAGXqBmkihFbUxLpZwcS6okh9Dj4okCS9YLCgu9u4jdOBMmsE3r/tWcPpxY7X2XIRNiVIcl6abSSzyN88rGtHSEpg8mWvZNbGGZZLCFL4YbA6CxJzthd2VPnQhlyNqu6F+eM/Ls/AXCckQgWB3a9Gz91s3Mc/Qy+FqnUCCw+1C9lG5fe7IlllOdfVWhuwYB6Ddq0a9wLiPcajEpYnHXf7hK4HlT5BewG1QcDpK/z4CJ76Xt3aFxtENnbKSYj7S+AfNeUPdo5UeKOhWJlIejlLGwyM8r7f490KpDXURRqc2Fmp6HHnvuEVcjMjMyDuVqg7HgJuHcgMrLI4sGW8wO8btNVDDX25KnMMQzevzSonZ1HD/p7T6yx4ERsqk851thybVzCXwrU+Tzh1AlWrg8K5X4ThBUUeSmHi/Ic0pMgKs7LebZPF0dT60DgoUAtMx+LAiWr5X72+OAzaNkXyXl1f9RkepCWyhqHUzuPjazJczqjPYMUQoUVKZBQcdEFIpVdFi4oP5Ky8gtlZxRtUBgpsaW+Msqr5OHYPrQXpOGk1JqMi1nxPr6DNUqXqS0nWAdhk96eijLu10cqZg/srSzfmOuZ7D0OOscQi6kYpyduVDUiPKuO0Y8AeXjpxyT77327bhVECoV3Re2dajPAWQWM/wKJfR4LwPSuryAmZyxejwByS1bY6fHYp2u7e+HQSNpkB546Qy7eT+v6YpLowaoU6G6WNKjjKH/tpN8hcWpk0A0qp0+1Q9KtrEDuyfAxGIg9sIgaDAw+Nr+LDCXV6kxtxfgFFKQm6igHWKbUwzjZcoXoek1wrbJ7+A1YAL1IVPQYp101iGV7BWfDEAjYRBOD2mgAELpY12bsW9Utpc+O/93zDqyW3nf6vFzShAOfKeTQBGlawme4HHJ6BWJgRjNMV0lNCQZe57gG3+Ox8xIWSfi4JFWq7/vj6GlHDYB3XarM+ZwpUBm/bdEfxWilUA9aFcFPdUQgs5yXcJtbA96GrIk8GSD3yIX4n6mDRf62fWCulwX0R+0D/UkiV210WZcvhvLgINYy+btAZzUJl20OssmEq12LvFo2yg+vmzE8zKyl4fQLJqxB4cHOIGKHUwPzG+GQ1f43DF2OKmh1pv9uqnTeue/ttQrauRd1vYngxm57GSNudIxjW1GqvhdoQwDviFmQkVZxoYWAnGL6gVa/HMDY7NcEGg52okJJ/BYh2cG4yH8EhwMnV5OaCTetKuWRmgGQ1H4po4zsa3e6cwxpsJ7EBZILB/UPjKsChpvvCSIcQ9Nl5U9YEy0cp/mEPiGgbK8xIa/NhLkOgcLnWbMt22s7oU/K/2XkH//7GnTGnxnanINE+IYVdxoQH2SJSz9evqWHlytAAwE+0EqEvM8UqchuEvkR4AvtKMPeuCE8A6ld8GPvLZaJ4qN73PQKFVr7VnqhRCjjyt9yggJPbUu02kc7wIC0+0W7WgUIM5xGLiSyN4zVPw3eU= X-OriginatorOrg: renesas.com X-MS-Exchange-CrossTenant-Network-Message-Id: df0b8b10-d3d7-4c19-e041-08dc11798b23 X-MS-Exchange-CrossTenant-AuthSource: TYCPR01MB10914.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jan 2024 01:14:50.3974 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 53d82571-da19-47e4-9cb4-625a166a4a2a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: GiwSYaPYCpwNhHHYnFzic6wT2FaaELvFYh91dPVFicMdgTMMnM8FTy3K0CWejZUzFT8bfbhi1IvZuh/CEyzvroHlYINWnbtbxDj8r9U6wONpfsjouaeetmL4Wue/e4lk X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS3PR01MB8442 We would like to use for_each loop for status = "reserved" nodes. Add for_each_reserved_child_of_node() for it. Signed-off-by: Kuninori Morimoto Tested-by: Yusuke Goda Reviewed-by: Geert Uytterhoeven Reviewed-by: Rob Herring --- drivers/of/base.c | 29 +++++++++++++++++++++++++++++ include/linux/of.h | 11 +++++++++++ 2 files changed, 40 insertions(+) diff --git a/drivers/of/base.c b/drivers/of/base.c index 25c841a3882f..b1ecfcfbb90f 100644 --- a/drivers/of/base.c +++ b/drivers/of/base.c @@ -465,6 +465,20 @@ static bool __of_device_is_available(const struct device_node *device) __of_device_is_status(device, ok); } +/** + * __of_device_is_reserved - check if a device is reserved + * + * @device: Node to check for availability, with locks already held + * + * Return: True if the status property is set to "reserved", false otherwise + */ +static bool __of_device_is_reserved(const struct device_node *device) +{ + static const char * const reserved[] = {"reserved", NULL}; + + return __of_device_is_status(device, reserved); +} + /** * of_device_is_available - check if a device is available for use * @@ -650,6 +664,21 @@ struct device_node *of_get_next_available_child(const struct device_node *node, } EXPORT_SYMBOL(of_get_next_available_child); +/** + * of_get_next_reserved_child - Find the next reserved child node + * @node: parent node + * @prev: previous child of the parent node, or NULL to get first + * + * This function is like of_get_next_child(), except that it + * automatically skips any disabled nodes (i.e. status = "disabled"). + */ +struct device_node *of_get_next_reserved_child(const struct device_node *node, + struct device_node *prev) +{ + return of_get_next_status_child(node, prev, __of_device_is_reserved); +} +EXPORT_SYMBOL(of_get_next_reserved_child); + /** * of_get_next_cpu_node - Iterate on cpu nodes * @prev: previous child of the /cpus node, or NULL to get first diff --git a/include/linux/of.h b/include/linux/of.h index 6a9ddf20e79a..331e05918f11 100644 --- a/include/linux/of.h +++ b/include/linux/of.h @@ -294,6 +294,8 @@ extern struct device_node *of_get_next_child(const struct device_node *node, struct device_node *prev); extern struct device_node *of_get_next_available_child( const struct device_node *node, struct device_node *prev); +extern struct device_node *of_get_next_reserved_child( + const struct device_node *node, struct device_node *prev); extern struct device_node *of_get_compatible_child(const struct device_node *parent, const char *compatible); @@ -541,6 +543,12 @@ static inline struct device_node *of_get_next_available_child( return NULL; } +static inline struct device_node *of_get_next_reserved_child( + const struct device_node *node, struct device_node *prev) +{ + return NULL; +} + static inline struct device_node *of_find_node_with_property( struct device_node *from, const char *prop_name) { @@ -1431,6 +1439,9 @@ static inline int of_property_read_s32(const struct device_node *np, #define for_each_available_child_of_node(parent, child) \ for (child = of_get_next_available_child(parent, NULL); child != NULL; \ child = of_get_next_available_child(parent, child)) +#define for_each_reserved_child_of_node(parent, child) \ + for (child = of_get_next_reserved_child(parent, NULL); child != NULL; \ + child = of_get_next_reserved_child(parent, child)) #define for_each_of_cpu_node(cpu) \ for (cpu = of_get_next_cpu_node(NULL); cpu != NULL; \ From patchwork Wed Jan 10 01:14:55 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kuninori Morimoto X-Patchwork-Id: 13515575 X-Patchwork-Delegate: geert@linux-m68k.org Received: from JPN01-OS0-obe.outbound.protection.outlook.com (mail-os0jpn01on2110.outbound.protection.outlook.com [40.107.113.110]) (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 C4FD9184E; Wed, 10 Jan 2024 01:14:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=renesas.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=renesas.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=renesas.com header.i=@renesas.com header.b="IoUdL9Xe" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XH2P6PovrdVUEOJshi3rPCFwYmUAl1fMVrlR/LtYWkBJrVWi2ZccU1N/jOwWV1ilWKzhrwHMm2z2hRZ2NEEiapRwsPUX919HGQefBu7MpEDS/0DMGa9I71hUq1S7USwaMMglUTchqIt1u77jxI6ZUH/WXpKuki5EDJECrZxPSI1JqZen5z8mXPo0xRU/4Xl+FiX11O5uXo31AssergLNmw6Y75pjmYAHm2Ah/za9h5ImR7OPIBpcjW8G7mxGx+lL5qVvTpMAPhJICbbMDVG5RVN8jlpuwqAhNsmt0+AkXFkSJGnEwRBWIoS+n5nlsNsTTqpQPnu4N+1U0mx6BsUDbg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=IlnzplvKddfmHf9/l66OOIE8xFIgHGzMXbzFgKHljAg=; b=D+UHyRX2mfE028afxXZG5grU/S6GKljzCmRExH36MW3XMaYwzTQEMA5e9zKdmNlRXXItW3Su0Tt0Rt+n5TBS2z7BfWtBGLEMgAqN5smojz9+8W+dQTdZg9xujFLIilD4Yl9PGDpsTnZjR4AjlfOGNk57yCQt79JX+5lQYki7xSOqJmxkvq+5omcHKSYqSakvstdKVHA+8BqixL7BqPcMWSF1EkghWFa7fMRaCHCvwJCoEmKH5xU63jTAgcwfIszsCS3LWE8HWrb59EXbfR/nUv0t5L4DL6OnIGJZytKL5PhifyEWJrH7cHNn16S/3qo9AGL81yD8PiQxKvWdXGGbiQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=renesas.com; dmarc=pass action=none header.from=renesas.com; dkim=pass header.d=renesas.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=renesas.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=IlnzplvKddfmHf9/l66OOIE8xFIgHGzMXbzFgKHljAg=; b=IoUdL9XeLICBodZ9J/PWdJYYPsO4Gsh83AJ0H6r5tZh1o4UixKmpxTWMolSwUwQI+hChFPPl5kjuAI2N/qGNfBmyLhbezPNpoTuhmORDUdbxH5oWK7c1sqOy+29wgWwz5yicOj0n1+ZS63XHMusDx4ilaj9uGt7cyPdc1Qse+ok= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=renesas.com; Received: from TYCPR01MB10914.jpnprd01.prod.outlook.com (2603:1096:400:3a9::11) by OS3PR01MB8442.jpnprd01.prod.outlook.com (2603:1096:604:195::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7181.17; Wed, 10 Jan 2024 01:14:55 +0000 Received: from TYCPR01MB10914.jpnprd01.prod.outlook.com ([fe80::91d:1bfa:edc4:1c5b]) by TYCPR01MB10914.jpnprd01.prod.outlook.com ([fe80::91d:1bfa:edc4:1c5b%7]) with mapi id 15.20.7181.015; Wed, 10 Jan 2024 01:14:55 +0000 Message-ID: <878r4ygfap.wl-kuninori.morimoto.gx@renesas.com> From: Kuninori Morimoto Subject: [PATCH v5 resend 4/4] drivers: clk: renesas: ignore all clocks which are assigned to non-Linux system User-Agent: Wanderlust/2.15.9 Emacs/27.1 Mule/6.0 To: Frank Rowand , Geert Uytterhoeven , Michael Turquette , Rob Herring , Stephen Boyd Cc: Rob Herring , devicetree@vger.kernel.org, linux-clk@vger.kernel.org, linux-renesas-soc@vger.kernel.org, Aymeric Aillet , Yusuke Goda In-Reply-To: <87edeqgfbu.wl-kuninori.morimoto.gx@renesas.com> References: <87edeqgfbu.wl-kuninori.morimoto.gx@renesas.com> Date: Wed, 10 Jan 2024 01:14:55 +0000 X-ClientProxiedBy: TYCP301CA0016.JPNP301.PROD.OUTLOOK.COM (2603:1096:400:381::17) To TYCPR01MB10914.jpnprd01.prod.outlook.com (2603:1096:400:3a9::11) Precedence: bulk X-Mailing-List: linux-renesas-soc@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYCPR01MB10914:EE_|OS3PR01MB8442:EE_ X-MS-Office365-Filtering-Correlation-Id: 23d7efa8-35be-4f99-9d58-08dc11798e23 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: CQ+jKd30vp+nfb4kKr29bjRvKwXwRe3HTtvR4adXip934JEEAg793k1+tUjNhXMUG85Ltu7S43dtrfSW1+Tz+wJgvx+j5dnDLvGHm1DNx78kcHHcagIT6U51Gi72mlzkQ5SV1JMZO9NHDFWz3yRNvxCN4wQ1O6dV3V/QXfhK73EPh1uQyDnavQgOrBgtj5dGx0kauKs++N1L8/E/ClxbEg8y/8uEhLfdnYAht2/HOUtS/GHDPkIUHJLqzSXyqWzm5KcPlS1XejLAMUlefwX0pLCsRGsC7afsPRpAJBvjhw3n2QSHargRIpcKBKalLL2Z545Kk7Rehh0CiVxlp5xE424wJe3OSNh65jMXlP7Lok0lhYXNx+pP4CDNqk5zHu57QE91wZZU8skkYrZvzkw6Kj+dq+MCw1X2+bs33OShmxviNoWiR7MFlu+u4SJILD3w3s46RaEeLlyPaN3z9eixj6rW2rsGWeIkkCRImQGdcXJ5wrfa8tHRPsSZV+uZBIXRjkoa1pvrlrS0lIFJ+hgixo+VjrW/glyddpYO9oG9VxBRGZpbaHxe8zwbnK6PwfgvawGd5rQpjbMA/a923izpWjtfm/qm0P11+/FK7LE56MtpW9xGsMxUMETd4uVuPWLs X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYCPR01MB10914.jpnprd01.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(39860400002)(396003)(346002)(366004)(376002)(136003)(230922051799003)(64100799003)(451199024)(1800799012)(186009)(38100700002)(478600001)(6486002)(83380400001)(966005)(54906003)(8936002)(8676002)(66556008)(66476007)(4326008)(110136005)(316002)(66946007)(36756003)(52116002)(107886003)(2616005)(26005)(6512007)(86362001)(6506007)(2906002)(38350700005)(5660300002)(7416002)(41300700001)(21314003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: hPykYv94PeTBqcpA20AA7GeRy8kVehxkrmzhLsPoXzA27gZAtNdtixPLcUVnIm18T/QHfrQ9R2k8ahmNswC0o/xyVAHEmOOC0tH5dHp2dDjMwuCpRqFkKqPU7QfJbaVJpQZBbLEtBSB6ZOaYwK/UGDj55Ot1349q9AbSebh1jOgdrOC5FoVo4yGFq8OfbsLM6GP60wJzHwBIU+2r+/0vlVPYjJR3fZXQvIwFlLFR1WW3+fVhhI9SF8f9IgvrsFB29rXyzIL+nqunEC+SQcLl74kWo+tO/pz7jT327NzRJvVbXx5G3jPKS0R9hYo33sEJJFQ9C59tw4bImyl5Get/sPVsnqELShZl1srzrEqsl8/1faE3mXL2h6IPK+N0uHJoS1Ybu2mObAWZ6p2AKDe9NLqCR1FRSMHPm/Uvsopv+IrgfBP6SpuRI74Gkr6Z/n38vYB9YZsJO9t1oRavaqlOxJeLIhcY9YEiw8r98Qkl/SGHb4FhoeS8SqHNfxIGxrfM3FqWFr8HFrDwKs6NQlXMwrwOMY0cePDUzs2AO5KhrGOnHlfnCubdHKDumqQCNiEjaTrpM6m1u91GqMfaIAIodis2ytF2hxg2nO37cHCbUg6pkJB2WxExpBLq/myN1b/3LxhzkpGmGKL4yQJqTYIsshgvRaPStiutFQfLSxwgHa8FGxoqWjFYaqFXBzll09Zmh26x39RzF9n7bd9wvKqqyGreGlBsjQalcRL/p6G8OA3vMBuRZWqiKbbwtIwUl77rsOUN+PGQM1gL1N3aWlunKKqatwd+RHNYa3D+eZUBfAUx0cx5DjGY8K15o7B4B5HkPl54OD4N5+D6U/YSlP8e4M8YhNYmoiYxS3c/prmNLIh/LWiQMxq0EtkkkqgwDBTh3yap+vdbA/lffDbdPdxCBPNixwb1fjegtDzeKar97SLfQBGwkrVPMmFGt3Bj6/xye656M71jJBPwG0qFIuSJ/u74doPOLe9g3RRMS0mUcWM//PnXw/YCTcils7C9b99ykPnGi2ejG5+wYA4pqY93kUY0fhd/x17odjapdDx1OSQ6OGQwygxBwat3GOzg6kQUk8cySPwaTdt46N5P5mwukDXkheJ1+qqJzI+2gPJfqkE38I+Fn7cluIxVQGSrEaSPDg0Zb7VBykR8IQjd/KQOOy3TSKGpo9+mZcudYwhoHsLFMfA4w2hYt134yGjz/tqa39BqHYkoHIdKKpmNPpFL9HGUwlGseXTx5tX8vV7iWYKCbhL1HRKnIBqhXtTNpSIfD/8xhYTLvaqN9A6kFinmyqY1LW+G3eJjzA7nFssgTwYHjhrnVT9JHKClEzUG4oak6lOPJN8qhzSnxH5X0KpABmxdJFMKVVswSvvM5xXQT2xWVwAOP1SCSmOowxWDe7EXdQxKpfWXeoJYQnTIpv1QBuMHgN+P8fE/G6EPyjwQM0eV8TpSgr93OJBQ2guhsmL3RtXDcanbnSNKNtMP7Zr+eLJJGmEpDqA+pjJuHeuBwEbww+5n5dzTzcDOSFJ0hpUiJy48WuPMgT4F7gahvtnAqh8E/3UNXFpW0cI+SxkqwIS5C0mNDPZH87UKOgqPmvjED+FSmtuK/76IZOimSjrmD2vg4nAhvNwIzevOF00id58= X-OriginatorOrg: renesas.com X-MS-Exchange-CrossTenant-Network-Message-Id: 23d7efa8-35be-4f99-9d58-08dc11798e23 X-MS-Exchange-CrossTenant-AuthSource: TYCPR01MB10914.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jan 2024 01:14:55.4697 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 53d82571-da19-47e4-9cb4-625a166a4a2a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: PjCy3WHT7vQdAhx72Oej+Es5S7+LdHKmuvEGlOpvPP+MnFZfM6j/SZPBR4uKd+vi+azVVwxip9xJknCm0m3dHctveyF4chOzpdO9g4hWtb+Azo8JJBbYlXMrttYfT9IY X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS3PR01MB8442 Some boards might use Linux and another OS at the same time. In such case, currently, during booting, Linux will stop necessary module clocks which are not used on the Linux side, but are used by another OS. To avoid such situation, renesas-cpg-mssr tries to find status = "reserved" devices (A), and adds CLK_IGNORE_UNUSED flag to its <&cgp CPG_MOD xxx> clock (B). Table 2.4: Values for status property https://github.com/devicetree-org/devicetree-specification/releases/download/v0.4/devicetree-specification-v0.4.pdf "reserved" Indicates that the device is operational, but should not be used. Typically this is used for devices that are controlled by another software component, such as platform firmware. ex) scif5: serial@e6f30000 { ... (B) clocks = <&cpg CPG_MOD 202>, <&cpg CPG_CORE R8A7795_CLK_S3D1>, <&scif_clk>; ... (A) status = "reserved"; }; Cc: Aymeric Aillet Signed-off-by: Kuninori Morimoto Tested-by: Yusuke Goda Reviewed-by: Geert Uytterhoeven --- drivers/clk/renesas/renesas-cpg-mssr.c | 111 +++++++++++++++++++++++-- 1 file changed, 104 insertions(+), 7 deletions(-) diff --git a/drivers/clk/renesas/renesas-cpg-mssr.c b/drivers/clk/renesas/renesas-cpg-mssr.c index cb80d1bf6c7c..23e5a2b46ac1 100644 --- a/drivers/clk/renesas/renesas-cpg-mssr.c +++ b/drivers/clk/renesas/renesas-cpg-mssr.c @@ -142,6 +142,8 @@ static const u16 srstclr_for_gen4[] = { * @reset_clear_regs: Pointer to reset clearing registers array * @smstpcr_saved: [].mask: Mask of SMSTPCR[] bits under our control * [].val: Saved values of SMSTPCR[] + * @reserved_ids: Temporary used, reserved id list + * @num_reserved_ids: Temporary used, number of reserved id list * @clks: Array containing all Core and Module Clocks */ struct cpg_mssr_priv { @@ -168,6 +170,9 @@ struct cpg_mssr_priv { u32 val; } smstpcr_saved[ARRAY_SIZE(mstpsr_for_gen4)]; + unsigned int *reserved_ids; + unsigned int num_reserved_ids; + struct clk *clks[]; }; @@ -453,6 +458,19 @@ static void __init cpg_mssr_register_mod_clk(const struct mssr_mod_clk *mod, break; } + /* + * Ignore reserved device. + * see + * cpg_mssr_reserved_init() + */ + for (i = 0; i < priv->num_reserved_ids; i++) { + if (id == priv->reserved_ids[i]) { + dev_info(dev, "Ignore Linux non-assigned mod (%s)\n", mod->name); + init.flags |= CLK_IGNORE_UNUSED; + break; + } + } + clk = clk_register(NULL, &clock->hw); if (IS_ERR(clk)) goto fail; @@ -949,6 +967,78 @@ static const struct dev_pm_ops cpg_mssr_pm = { #define DEV_PM_OPS NULL #endif /* CONFIG_PM_SLEEP && CONFIG_ARM_PSCI_FW */ +static void __init cpg_mssr_reserved_exit(struct cpg_mssr_priv *priv) +{ + kfree(priv->reserved_ids); +} + +static int __init cpg_mssr_reserved_init(struct cpg_mssr_priv *priv, + const struct cpg_mssr_info *info) +{ + struct device_node *soc = of_find_node_by_path("/soc"); + struct device_node *node; + uint32_t args[MAX_PHANDLE_ARGS]; + unsigned int *ids = NULL; + unsigned int num = 0; + + /* + * Because clk_disable_unused() will disable all unused clocks, the device which is assigned + * to a non-Linux system will be disabled when Linux is booted. + * + * To avoid such situation, renesas-cpg-mssr assumes the device which has + * status = "reserved" is assigned to a non-Linux system, and adds CLK_IGNORE_UNUSED flag + * to its CPG_MOD clocks. + * see also + * cpg_mssr_register_mod_clk() + * + * scif5: serial@e6f30000 { + * ... + * => clocks = <&cpg CPG_MOD 202>, + * <&cpg CPG_CORE R8A7795_CLK_S3D1>, + * <&scif_clk>; + * ... + * status = "reserved"; + * }; + */ + for_each_reserved_child_of_node(soc, node) { + struct of_phandle_iterator it; + int rc; + + of_for_each_phandle(&it, rc, node, "clocks", "#clock-cells", -1) { + int idx; + + if (it.node != priv->np) + continue; + + if (of_phandle_iterator_args(&it, args, MAX_PHANDLE_ARGS) != 2) + continue; + + if (args[0] != CPG_MOD) + continue; + + ids = krealloc_array(ids, (num + 1), sizeof(*ids), GFP_KERNEL); + if (!ids) { + of_node_put(it.node); + return -ENOMEM; + } + + if (priv->reg_layout == CLK_REG_LAYOUT_RZ_A) + idx = MOD_CLK_PACK_10(args[1]); /* for DEF_MOD_STB() */ + else + idx = MOD_CLK_PACK(args[1]); /* for DEF_MOD() */ + + ids[num] = info->num_total_core_clks + idx; + + num++; + } + } + + priv->num_reserved_ids = num; + priv->reserved_ids = ids; + + return 0; +} + static int __init cpg_mssr_common_init(struct device *dev, struct device_node *np, const struct cpg_mssr_info *info) @@ -1003,14 +1093,20 @@ static int __init cpg_mssr_common_init(struct device *dev, for (i = 0; i < nclks; i++) priv->clks[i] = ERR_PTR(-ENOENT); - error = of_clk_add_provider(np, cpg_mssr_clk_src_twocell_get, priv); + error = cpg_mssr_reserved_init(priv, info); if (error) goto out_err; + error = of_clk_add_provider(np, cpg_mssr_clk_src_twocell_get, priv); + if (error) + goto reserve_err; + cpg_mssr_priv = priv; return 0; +reserve_err: + cpg_mssr_reserved_exit(priv); out_err: if (priv->base) iounmap(priv->base); @@ -1070,22 +1166,23 @@ static int __init cpg_mssr_probe(struct platform_device *pdev) cpg_mssr_del_clk_provider, np); if (error) - return error; + goto reserve_exit; error = cpg_mssr_add_clk_domain(dev, info->core_pm_clks, info->num_core_pm_clks); if (error) - return error; + goto reserve_exit; /* Reset Controller not supported for Standby Control SoCs */ if (priv->reg_layout == CLK_REG_LAYOUT_RZ_A) - return 0; + goto reserve_exit; error = cpg_mssr_reset_controller_register(priv); - if (error) - return error; - return 0; +reserve_exit: + cpg_mssr_reserved_exit(priv); + + return error; } static struct platform_driver cpg_mssr_driver = {