From patchwork Sun Aug 25 08:48:42 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kousik Sanagavarapu X-Patchwork-Id: 13776722 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 74DF2C5321E for ; Sun, 25 Aug 2024 08:59:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=q/vK+T10MZyl0kQgej4VXi53+tf/ED+iZjgN4kOLleI=; b=DPU/mGdreWNISQDzSHl2fkU2M+ GVvHKCsZgTnZxWnW1Kh5w1l4KZKDyzB46xM9bHtpGHenojaRxqYJQGGP5fqCaUBxhaNIi+dHOLxKc atSj+7YTWmOP/7Nw65xeXpnO1P6YqQAD8t321VHFmhfUnVIoXVC7Dv2IL6n6u4EmHfEH3i2QdxUVz 2yZBx62s+QQHIWQdY9xc9+pfeA4zTMueMAnch4WrAtaCYoYYQUXAedkrElc68qP+Om2iVJfEwujMf xsrRiFYwWoSbk/H+4gn/OAQ3ChWoTobTOTwPTExIKsAch800Bs+PqO8e967nartIo/roD5TxP6PkM fnMbOLbQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1si95a-000000040yL-0KAS; Sun, 25 Aug 2024 08:59:10 +0000 Received: from mail-oo1-xc2e.google.com ([2607:f8b0:4864:20::c2e]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1si947-000000040cC-42tr for linux-arm-kernel@lists.infradead.org; Sun, 25 Aug 2024 08:57:43 +0000 Received: by mail-oo1-xc2e.google.com with SMTP id 006d021491bc7-5dc93fa5639so2663598eaf.1 for ; Sun, 25 Aug 2024 01:57:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1724576258; x=1725181058; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=q/vK+T10MZyl0kQgej4VXi53+tf/ED+iZjgN4kOLleI=; b=OVXcL91E9ksoquYwgFlh9H24UnnKSSGuRkJCOxvwZU+5Ns7CrrqXX338fbffhr7m7y THEh+UdjAykTP9Uq5UOb31iGDyVc324Q18adMWT5k39rDeWDeRFHfw/Dz2bMNN52Isdm gvHZa4NH2gaJlC5i+tIJ5B2TMLRKtzhhYN4VMaEEifDGrkFFuXQ0HoUpY8uYIUgwLCkw dy93juR6mAHWbvDI+sjU+mjVB4lJBeq/UbiEXxbUertEIiJdzXyZwZZy89XSe1hkT/Ey lroZ7rYM8LU/U5nVp4IIfM1tXM6aF7IMOEmENBO7oNGcuIrSRGR2eVgxIhP6d2sGmzil Lu4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1724576258; x=1725181058; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=q/vK+T10MZyl0kQgej4VXi53+tf/ED+iZjgN4kOLleI=; b=qdexHX4+s8wdXtIUlbUFSFerbS/LP2qVhx5NMU50w9mhaY8EWDjy+++1sdqiG5dxpt aWQ3AKRMhyQJfgp94pdseelpeJVxi1cev4sS0mqQpvGpGfP1HR+gHNyhDPj60Vj+f/Wa pZV2bVYQbcl/VDiAwdFnbW91aMYP0aicIhNlg3fO1V+nEONq9O3bV/0Q7FSUyratLcCc psAg5dcf0AZ3/P6+Y2ZXkj5xC/GiQAj4P8GPw1A+8Vw0G5r70cudiCY0lVi27bS4Hqji XaIbu0r5PH3GzXWBV6Z0za291KDqK1fi29Ie9Goij6juL71p8sQF6arVysO4NcNn6VFV jNcQ== X-Forwarded-Encrypted: i=1; AJvYcCUdhzWkz38S9tblov5mCZTwtySp0SDUWAwohXCTPJsa8X7jibUHJpcT/Vo8CJ6D2xj1dQ0JD28lfwsbYp+9tzYc@lists.infradead.org X-Gm-Message-State: AOJu0YxlMFNNiX8pPz35Wm/Q8LI943OS/mpXjpzDJ6VXEBBv6A7kYbm4 XVuMB8c71XfPYxJKvJwOEKnY6iB1kE3VAy5mU5Qr4L0aXDhXOT87 X-Google-Smtp-Source: AGHT+IHSY5KmHfBXS1f/iH3BbPeOnqda3O25mlOO6gjzgvkfgvRgrisxNgpfP9TPlIHcB9Ocp9SDXQ== X-Received: by 2002:a05:6358:9148:b0:1a5:4b74:2214 with SMTP id e5c5f4694b2df-1b5c3a45ad5mr882342455d.3.1724576258008; Sun, 25 Aug 2024 01:57:38 -0700 (PDT) Received: from kousik.local ([2405:201:c006:3236:b871:d8f1:d936:dc0c]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7143425109asm5414348b3a.67.2024.08.25.01.57.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 25 Aug 2024 01:57:37 -0700 (PDT) From: Kousik Sanagavarapu To: Nishanth Menon , Jonathan Cameron , Santosh Shilimkar , Nathan Chancellor , Julia Lawall Cc: Shuah Khan , Javier Carrasco , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Kousik Sanagavarapu Subject: [PATCH v4 1/4] soc: ti: pruss: factor out memories setup Date: Sun, 25 Aug 2024 14:18:42 +0530 Message-ID: <20240825085714.10736-2-five231003@gmail.com> X-Mailer: git-send-email 2.46.0.290.g4f02c709e8.dirty In-Reply-To: <20240825085714.10736-1-five231003@gmail.com> References: <20240825085714.10736-1-five231003@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240825_015740_026153_D50F4FF6 X-CRM114-Status: GOOD ( 24.16 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Factor out memories setup code from probe() into a new function pruss_of_setup_memories(). This sets the stage for introducing auto cleanup of the device node (done in the subsequent patch), since the clean up depends on the scope of the pointer and factoring out code into a separate function obviously limits the scope of the various variables used in that function. Apart from the above, this change also has the advantage of making the code look more neat. While at it, use dev_err_probe() instead of plain dev_err() as this new function is called by the probe(). Signed-off-by: Kousik Sanagavarapu --- drivers/soc/ti/pruss.c | 111 ++++++++++++++++++++++------------------- 1 file changed, 61 insertions(+), 50 deletions(-) diff --git a/drivers/soc/ti/pruss.c b/drivers/soc/ti/pruss.c index 24a42e0b645c..83d7d8d5ef22 100644 --- a/drivers/soc/ti/pruss.c +++ b/drivers/soc/ti/pruss.c @@ -415,6 +415,63 @@ static int pruss_clk_init(struct pruss *pruss, struct device_node *cfg_node) return ret; } +static int pruss_of_setup_memories(struct device *dev, struct pruss *pruss) +{ + struct device_node *np = dev_of_node(dev); + struct device_node *child; + const struct pruss_private_data *data = of_device_get_match_data(dev); + const char *mem_names[PRUSS_MEM_MAX] = { "dram0", "dram1", "shrdram2" }; + int i; + + child = of_get_child_by_name(np, "memories"); + if (!child) + return dev_err_probe(dev, -ENODEV, + "%pOF is missing its 'memories' node\n", + child); + + for (i = 0; i < PRUSS_MEM_MAX; i++) { + struct resource res; + int index; + + /* + * On AM437x one of two PRUSS units don't contain Shared RAM, + * skip it + */ + if (data && data->has_no_sharedram && i == PRUSS_MEM_SHRD_RAM2) + continue; + + index = of_property_match_string(child, "reg-names", + mem_names[i]); + if (index < 0) { + of_node_put(child); + return index; + } + + if (of_address_to_resource(child, index, &res)) { + of_node_put(child); + return -EINVAL; + } + + pruss->mem_regions[i].va = devm_ioremap(dev, res.start, + resource_size(&res)); + if (!pruss->mem_regions[i].va) { + of_node_put(child); + return dev_err_probe(dev, -ENOMEM, + "failed to parse and map memory resource %d %s\n", + i, mem_names[i]); + } + pruss->mem_regions[i].pa = res.start; + pruss->mem_regions[i].size = resource_size(&res); + + dev_dbg(dev, "memory %8s: pa %pa size 0x%zx va %pK\n", + mem_names[i], &pruss->mem_regions[i].pa, + pruss->mem_regions[i].size, pruss->mem_regions[i].va); + } + of_node_put(child); + + return 0; +} + static struct regmap_config regmap_conf = { .reg_bits = 32, .val_bits = 32, @@ -471,15 +528,8 @@ static int pruss_cfg_of_init(struct device *dev, struct pruss *pruss) static int pruss_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; - struct device_node *np = dev_of_node(dev); - struct device_node *child; struct pruss *pruss; - struct resource res; - int ret, i, index; - const struct pruss_private_data *data; - const char *mem_names[PRUSS_MEM_MAX] = { "dram0", "dram1", "shrdram2" }; - - data = of_device_get_match_data(&pdev->dev); + int ret; ret = dma_set_coherent_mask(dev, DMA_BIT_MASK(32)); if (ret) { @@ -494,48 +544,9 @@ static int pruss_probe(struct platform_device *pdev) pruss->dev = dev; mutex_init(&pruss->lock); - child = of_get_child_by_name(np, "memories"); - if (!child) { - dev_err(dev, "%pOF is missing its 'memories' node\n", child); - return -ENODEV; - } - - for (i = 0; i < PRUSS_MEM_MAX; i++) { - /* - * On AM437x one of two PRUSS units don't contain Shared RAM, - * skip it - */ - if (data && data->has_no_sharedram && i == PRUSS_MEM_SHRD_RAM2) - continue; - - index = of_property_match_string(child, "reg-names", - mem_names[i]); - if (index < 0) { - of_node_put(child); - return index; - } - - if (of_address_to_resource(child, index, &res)) { - of_node_put(child); - return -EINVAL; - } - - pruss->mem_regions[i].va = devm_ioremap(dev, res.start, - resource_size(&res)); - if (!pruss->mem_regions[i].va) { - dev_err(dev, "failed to parse and map memory resource %d %s\n", - i, mem_names[i]); - of_node_put(child); - return -ENOMEM; - } - pruss->mem_regions[i].pa = res.start; - pruss->mem_regions[i].size = resource_size(&res); - - dev_dbg(dev, "memory %8s: pa %pa size 0x%zx va %pK\n", - mem_names[i], &pruss->mem_regions[i].pa, - pruss->mem_regions[i].size, pruss->mem_regions[i].va); - } - of_node_put(child); + ret = pruss_of_setup_memories(dev, pruss); + if (ret < 0) + return ret; platform_set_drvdata(pdev, pruss); From patchwork Sun Aug 25 08:48:43 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kousik Sanagavarapu X-Patchwork-Id: 13776723 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id B844EC5320E for ; Sun, 25 Aug 2024 09:00:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=jNMuyrfijznIh50InJIHyOaHM84gPkC0aoCc4qU4CQ4=; b=epCuZMwd3j8udUEif93bw4vl6m ZdNeYB6uE7b8STTLIw1MsO4BrFYxvttLuxvbb32894+xRoitchQ/Hsa/n5jEsVQjzIy4wzBIohdG9 iWh8jmecb1Ee9PY/rB/Hw56C3a1Jm5mEQawGicCRn76IxSIy3qlGEtigI+qpD1EwyiPnvsyzAebA7 FiqswsgfkZwLu+TiVKEDwxkRhR43QRurOglScBP9y05DXoT1oP6XDeY/MFU7xFR0nq+2EVAAX08q0 XMdTHP+xQ/DZ3Vykr2srHxrbdboxgiL573WLeMonFDX4GzGNf8uPH+RHMsxvAmNI4LbeFIQTlYZ3r JuC6pTOA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1si96J-00000004149-3zdV; Sun, 25 Aug 2024 08:59:55 +0000 Received: from mail-oo1-xc34.google.com ([2607:f8b0:4864:20::c34]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1si94D-000000040cx-08OJ for linux-arm-kernel@lists.infradead.org; Sun, 25 Aug 2024 08:57:48 +0000 Received: by mail-oo1-xc34.google.com with SMTP id 006d021491bc7-5d5b1e33fa8so2584710eaf.3 for ; Sun, 25 Aug 2024 01:57:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1724576263; x=1725181063; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=jNMuyrfijznIh50InJIHyOaHM84gPkC0aoCc4qU4CQ4=; b=fdA6vmf+EKkGGJCDYaw7c6kjuAhvRo4gqD/boMzVHbd4e9YcGOECFWbVUsuS+KOQmv H//nPJs8N651Ou3D3MMhTkJdN9MS/LliLeQV1baKZMHO/onKYHVAO2mVJPBU3zuqTZn7 31HgS8Mfh0Z9snPsS/KwzMETeeFdDR+jtV2WPx4gfoo24ivmZtYlqoc/PUiY31IgX1SF 3kckCv0Ae7JrW9allWeZrbgVuqwH4WE/rKiiR7WQ+CBWL4rG85FeJ8wcz1x/ItqwIfLj /N7/Gz2U8tM/cbf1GrDCZleDeFCK54DegJRzt2pP7nUMbng6b0ExMofa2n/xsX8qmusG IbBQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1724576263; x=1725181063; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=jNMuyrfijznIh50InJIHyOaHM84gPkC0aoCc4qU4CQ4=; b=s0aTOliIixnXsN2k5ZMc9peK+mXqaIwjmVg3MSG0zMjzMTrKLFeCt7OtYuMwlCK4KZ 6VBdO8bXVbUM55G/yLns4lq9bT4DC6zGYlq2514E9iDmUT3OzWAoIXmC/TpBjzwSDakm aySNvfa86yjnMKT720V5z2nuHezHRQUP78MvgsDKyu7cWo5piWvaJbQDY9nCZtdT4flx GtENBGaGV+9xuVJu+tI1fxgjwO3h89rjm5BT5G5k1FC94RpjvKp6oDSZPZpQttygBiwW brQ3jXJF6BGdNw/4K2yJ8PC0i+xgKgq4hbnJ0RLecv4oN8qdxkyPXCGQN2CXOAQhAY7V Gv5w== X-Forwarded-Encrypted: i=1; AJvYcCWtIdl2YSUGp53gyomPg0LHxYkv9rvkel+CwIbKfnbkg34TWyT45Y5LuoDSCPaRGdWrVByd58N+mU1s2dywNRdN@lists.infradead.org X-Gm-Message-State: AOJu0YwNDxnOPt0pV4aRb7lf/PSBhzF+xCwYu9r+Lb9K03PK94bpwdML 5xxFpsuAbLW7BCsU39Yn9+G3JCtYomH6QJtMe7NgpbE3q0T/O3Zh X-Google-Smtp-Source: AGHT+IGpYva06f1FOiHhlRMbZ9nmuMmHEPsYHgf5mxg8wBqak1kBhd2jWqR4HEB5jI0I/wBjcbP2AQ== X-Received: by 2002:a05:6358:5f02:b0:1b3:8960:986f with SMTP id e5c5f4694b2df-1b5c3b0fab6mr797160855d.19.1724576263352; Sun, 25 Aug 2024 01:57:43 -0700 (PDT) Received: from kousik.local ([2405:201:c006:3236:b871:d8f1:d936:dc0c]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7143425109asm5414348b3a.67.2024.08.25.01.57.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 25 Aug 2024 01:57:43 -0700 (PDT) From: Kousik Sanagavarapu To: Nishanth Menon , Jonathan Cameron , Santosh Shilimkar , Nathan Chancellor , Julia Lawall Cc: Shuah Khan , Javier Carrasco , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Kousik Sanagavarapu Subject: [PATCH v4 2/4] soc: ti: pruss: do device_node auto cleanup Date: Sun, 25 Aug 2024 14:18:43 +0530 Message-ID: <20240825085714.10736-3-five231003@gmail.com> X-Mailer: git-send-email 2.46.0.290.g4f02c709e8.dirty In-Reply-To: <20240825085714.10736-1-five231003@gmail.com> References: <20240825085714.10736-1-five231003@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240825_015745_139659_5E30D93A X-CRM114-Status: GOOD ( 17.35 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Use scope based cleanup instead of manual of_node_put() calls, hence simplifying the handling of error paths at various places. While at it, use dev_err_probe() instead of dev_err() in all the code paths touched. Suggested-by: Julia Lawall Signed-off-by: Kousik Sanagavarapu --- drivers/soc/ti/pruss.c | 91 +++++++++++++++--------------------------- 1 file changed, 33 insertions(+), 58 deletions(-) diff --git a/drivers/soc/ti/pruss.c b/drivers/soc/ti/pruss.c index 83d7d8d5ef22..3ec758f50e24 100644 --- a/drivers/soc/ti/pruss.c +++ b/drivers/soc/ti/pruss.c @@ -380,50 +380,42 @@ static int pruss_clk_mux_setup(struct pruss *pruss, struct clk *clk_mux, static int pruss_clk_init(struct pruss *pruss, struct device_node *cfg_node) { - const struct pruss_private_data *data; - struct device_node *clks_np; struct device *dev = pruss->dev; - int ret = 0; - - data = of_device_get_match_data(dev); + struct device_node *clks_np __free(device_node) = + of_get_child_by_name(cfg_node, "clocks"); + const struct pruss_private_data *data = of_device_get_match_data(dev); + int ret; - clks_np = of_get_child_by_name(cfg_node, "clocks"); - if (!clks_np) { - dev_err(dev, "%pOF is missing its 'clocks' node\n", cfg_node); - return -ENODEV; - } + if (!clks_np) + return dev_err_probe(dev, -ENODEV, + "%pOF is missing its 'clocks' node\n", + cfg_node); if (data && data->has_core_mux_clock) { ret = pruss_clk_mux_setup(pruss, pruss->core_clk_mux, "coreclk-mux", clks_np); - if (ret) { - dev_err(dev, "failed to setup coreclk-mux\n"); - goto put_clks_node; - } + if (ret) + return dev_err_probe(dev, ret, + "failed to setup coreclk-mux\n"); } ret = pruss_clk_mux_setup(pruss, pruss->iep_clk_mux, "iepclk-mux", clks_np); - if (ret) { - dev_err(dev, "failed to setup iepclk-mux\n"); - goto put_clks_node; - } - -put_clks_node: - of_node_put(clks_np); + if (ret) + return dev_err_probe(dev, ret, "failed to setup iepclk-mux\n"); - return ret; + return 0; } static int pruss_of_setup_memories(struct device *dev, struct pruss *pruss) { struct device_node *np = dev_of_node(dev); - struct device_node *child; + struct device_node *child __free(device_node) = + of_get_child_by_name(np, "memories"); const struct pruss_private_data *data = of_device_get_match_data(dev); const char *mem_names[PRUSS_MEM_MAX] = { "dram0", "dram1", "shrdram2" }; int i; - child = of_get_child_by_name(np, "memories"); if (!child) return dev_err_probe(dev, -ENODEV, "%pOF is missing its 'memories' node\n", @@ -442,24 +434,18 @@ static int pruss_of_setup_memories(struct device *dev, struct pruss *pruss) index = of_property_match_string(child, "reg-names", mem_names[i]); - if (index < 0) { - of_node_put(child); + if (index < 0) return index; - } - if (of_address_to_resource(child, index, &res)) { - of_node_put(child); + if (of_address_to_resource(child, index, &res)) return -EINVAL; - } pruss->mem_regions[i].va = devm_ioremap(dev, res.start, resource_size(&res)); - if (!pruss->mem_regions[i].va) { - of_node_put(child); + if (!pruss->mem_regions[i].va) return dev_err_probe(dev, -ENOMEM, "failed to parse and map memory resource %d %s\n", i, mem_names[i]); - } pruss->mem_regions[i].pa = res.start; pruss->mem_regions[i].size = resource_size(&res); @@ -467,7 +453,6 @@ static int pruss_of_setup_memories(struct device *dev, struct pruss *pruss) mem_names[i], &pruss->mem_regions[i].pa, pruss->mem_regions[i].size, pruss->mem_regions[i].va); } - of_node_put(child); return 0; } @@ -481,26 +466,21 @@ static struct regmap_config regmap_conf = { static int pruss_cfg_of_init(struct device *dev, struct pruss *pruss) { struct device_node *np = dev_of_node(dev); - struct device_node *child; + struct device_node *child __free(device_node) = + of_get_child_by_name(np, "cfg"); struct resource res; int ret; - child = of_get_child_by_name(np, "cfg"); - if (!child) { - dev_err(dev, "%pOF is missing its 'cfg' node\n", child); - return -ENODEV; - } + if (!child) + return dev_err_probe(dev, -ENODEV, + "%pOF is missing its 'cfg' node\n", child); - if (of_address_to_resource(child, 0, &res)) { - ret = -ENOMEM; - goto node_put; - } + if (of_address_to_resource(child, 0, &res)) + return -ENOMEM; pruss->cfg_base = devm_ioremap(dev, res.start, resource_size(&res)); - if (!pruss->cfg_base) { - ret = -ENOMEM; - goto node_put; - } + if (!pruss->cfg_base) + return -ENOMEM; regmap_conf.name = kasprintf(GFP_KERNEL, "%pOFn@%llx", child, (u64)res.start); @@ -509,20 +489,15 @@ static int pruss_cfg_of_init(struct device *dev, struct pruss *pruss) pruss->cfg_regmap = devm_regmap_init_mmio(dev, pruss->cfg_base, ®map_conf); kfree(regmap_conf.name); - if (IS_ERR(pruss->cfg_regmap)) { - dev_err(dev, "regmap_init_mmio failed for cfg, ret = %ld\n", - PTR_ERR(pruss->cfg_regmap)); - ret = PTR_ERR(pruss->cfg_regmap); - goto node_put; - } + if (IS_ERR(pruss->cfg_regmap)) + return dev_err_probe(dev, PTR_ERR(pruss->cfg_regmap), + "regmap_init_mmio failed for cfg\n"); ret = pruss_clk_init(pruss, child); if (ret) - dev_err(dev, "pruss_clk_init failed, ret = %d\n", ret); + return dev_err_probe(dev, ret, "pruss_clk_init failed\n"); -node_put: - of_node_put(child); - return ret; + return 0; } static int pruss_probe(struct platform_device *pdev) From patchwork Sun Aug 25 08:48:44 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kousik Sanagavarapu X-Patchwork-Id: 13776724 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 3C867C5321E for ; Sun, 25 Aug 2024 09:00:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=RdDSkwgr4tP8vvC2Lh81EsoGSqhFoF9r46WKr4u5n6Q=; b=fD9gYVR7NQtbWLefKNIh0AyA8Z qjaPCthnLfn+w6p5U0StXyg3Hs5liw8uRh3kQCi7tUF0Un4yf/XikOX9GX+Ngi1+pZWMcOt6OR3Lv yl6YPU5PSfOtKeAgMKGmYTJRhQrFnS+G7jbyV7FFuJze0sLxJleRfGhQSZYaTy42Ygk3wwSiaJUEg NHw0Rg4pMgTVOSD97NPSYfD8+7CxhrS3fxh8S8na6lVhPVdlTYRsNbCiX/jKox73T1D3sljAMm8eq 59rslj82ZAcdhFzop95OZFhwqhUx3sPd+uDeZaXgNIXTHn8MfIXK5z2JNt4k66lxxAwZO26+YLxl7 4zQSJ9og==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1si972-000000041Aq-3SL7; Sun, 25 Aug 2024 09:00:40 +0000 Received: from mail-pf1-x42d.google.com ([2607:f8b0:4864:20::42d]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1si94J-000000040ff-0DPB for linux-arm-kernel@lists.infradead.org; Sun, 25 Aug 2024 08:57:52 +0000 Received: by mail-pf1-x42d.google.com with SMTP id d2e1a72fcca58-7141feed424so2819812b3a.2 for ; Sun, 25 Aug 2024 01:57:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1724576270; x=1725181070; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=RdDSkwgr4tP8vvC2Lh81EsoGSqhFoF9r46WKr4u5n6Q=; b=PldrapZkISRcqxOiNtokWPb0Kzl2wJ+Yf3wIy1mPq5zi1rKCSkEZJWCDu7xB5A8aSd JzBANEjLtXoJkoNQxQJxcsdSJEenCZomPALr1MEzmZv1RoSpLt0IWEyCiQH8s4En0uN7 6LJvAhV2ikuP16OEvFD6OYS4cME5GN5/5tMXNvaATrsUbQp/qLW3fkOzljBF4ZgdgRmV t0pBUx5ozAJG/T8Ec2K+9HoKUXZxWT7wbRn7yAcqpiw+6uuOv35u14VUjsiYGjQCogY1 iKUoeiixbS0/wTgEJTmvH2NBZM5hGnR6KhCzbaNK6t8YKhhE5qLvOXQhxst5pp9tVfLS gz0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1724576270; x=1725181070; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=RdDSkwgr4tP8vvC2Lh81EsoGSqhFoF9r46WKr4u5n6Q=; b=PZhYSWUAeEGaPY+aDHV7YZmV2xk3chXaXLIr46KpTa8psRRWxGJwHLLOw+QScXAd4U iNO9NtOu3fqBkZd15JbgnDBbOL89kHSI9PJ4O4PP2l47IH5eIL0X+9qm9OLSe7F/bk6M KYYWVZIp9gtQixdpNeCribaoJb6jeIBZhatj2kr1amGhnhrbsP8Xbv5N9T+C4YTy1Wai uRw+QYZIvVYHnmJnyPUhgrSgLOaG2EZxtADPdUAbk5o1j8PcLeUkl6/sE0NUcWduhdPb PHgHPVhUL6S8o0VffvFuFqKMVwPrXtAjdg9Jmfk7PsyA7fxLMdJuFkLYKa3IJ+iKv2FF NtXQ== X-Forwarded-Encrypted: i=1; AJvYcCW6+YIx4Q90in/xZmvUAAte9oyHRmOslDDP3ij8W3Auor97KzZHJEC3t/w3+uw1KWg5BQ9UVZ8KtVpB67YQ7dhh@lists.infradead.org X-Gm-Message-State: AOJu0YxFocRCOHP7+xbNrHl56/tMwKbw9X6+2i47YzYFfcEYbskhQlQk VLFyEboqEd+ppcBT+Jqp3dyyLXogc10XOW9HWf5u+hi4IxhsqC4G8N40WV/d X-Google-Smtp-Source: AGHT+IHnYI0GVsC+HRYaFQj5uR/diEHP2T8oRwEjXY1h9XGwrqqq7Xfcp8V/76LBZgRP8GY0y4P4hA== X-Received: by 2002:a05:6a00:b8f:b0:702:3e36:b7c4 with SMTP id d2e1a72fcca58-71445cd49d4mr7759843b3a.5.1724576269357; Sun, 25 Aug 2024 01:57:49 -0700 (PDT) Received: from kousik.local ([2405:201:c006:3236:b871:d8f1:d936:dc0c]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7143425109asm5414348b3a.67.2024.08.25.01.57.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 25 Aug 2024 01:57:49 -0700 (PDT) From: Kousik Sanagavarapu To: Nishanth Menon , Jonathan Cameron , Santosh Shilimkar , Nathan Chancellor , Julia Lawall Cc: Shuah Khan , Javier Carrasco , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Kousik Sanagavarapu , Jonathan Cameron Subject: [PATCH v4 3/4] soc: ti: knav_qmss_queue: do device_node auto cleanup Date: Sun, 25 Aug 2024 14:18:44 +0530 Message-ID: <20240825085714.10736-4-five231003@gmail.com> X-Mailer: git-send-email 2.46.0.290.g4f02c709e8.dirty In-Reply-To: <20240825085714.10736-1-five231003@gmail.com> References: <20240825085714.10736-1-five231003@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240825_015751_114860_9EC858F2 X-CRM114-Status: GOOD ( 19.73 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Use scope based cleanup, instead of manual of_node_put() calls, which automatically free()s "struct device_node". While at it, refactor the code from knav_queue_probe() into the separate functions to make auto cleanup look more neat. Doing the cleanup this way has the advantage of reducing the chance of memory leaks in case we need to read from new OF nodes in the future when we probe. Suggested-by: Julia Lawall Reviewed-by: Jonathan Cameron Signed-off-by: Kousik Sanagavarapu --- drivers/soc/ti/knav_qmss_queue.c | 100 ++++++++++++++++--------------- 1 file changed, 53 insertions(+), 47 deletions(-) diff --git a/drivers/soc/ti/knav_qmss_queue.c b/drivers/soc/ti/knav_qmss_queue.c index f2055a76f84c..2f14841ac8a9 100644 --- a/drivers/soc/ti/knav_qmss_queue.c +++ b/drivers/soc/ti/knav_qmss_queue.c @@ -1076,14 +1076,20 @@ static const char *knav_queue_find_name(struct device_node *node) } static int knav_queue_setup_regions(struct knav_device *kdev, - struct device_node *regions) + struct device_node *node) { struct device *dev = kdev->dev; + struct device_node *regions __free(device_node) = + of_get_child_by_name(node, "descriptor-regions"); struct knav_region *region; struct device_node *child; u32 temp[2]; int ret; + if (!regions) + return dev_err_probe(dev, -ENODEV, + "descriptor-regions not specified\n"); + for_each_child_of_node(regions, child) { region = devm_kzalloc(dev, sizeof(*region), GFP_KERNEL); if (!region) { @@ -1121,10 +1127,9 @@ static int knav_queue_setup_regions(struct knav_device *kdev, INIT_LIST_HEAD(®ion->pools); list_add_tail(®ion->list, &kdev->regions); } - if (list_empty(&kdev->regions)) { - dev_err(dev, "no valid region information found\n"); - return -ENODEV; - } + if (list_empty(&kdev->regions)) + return dev_err_probe(dev, -ENODEV, + "no valid region information found\n"); /* Next, we run through the regions and set things up */ for_each_region(kdev, region) @@ -1306,10 +1311,16 @@ static int knav_setup_queue_range(struct knav_device *kdev, } static int knav_setup_queue_pools(struct knav_device *kdev, - struct device_node *queue_pools) + struct device_node *node) { + struct device_node *queue_pools __free(device_node) = + of_get_child_by_name(node, "queue-pools"); struct device_node *type, *range; + if (!queue_pools) + return dev_err_probe(kdev->dev, -ENODEV, + "queue-pools not specified\n"); + for_each_child_of_node(queue_pools, type) { for_each_child_of_node(type, range) { /* return value ignored, we init the rest... */ @@ -1318,10 +1329,9 @@ static int knav_setup_queue_pools(struct knav_device *kdev, } /* ... and barf if they all failed! */ - if (list_empty(&kdev->queue_ranges)) { - dev_err(kdev->dev, "no valid queue range found\n"); - return -ENODEV; - } + if (list_empty(&kdev->queue_ranges)) + return dev_err_probe(kdev->dev, -ENODEV, + "no valid queue range found\n"); return 0; } @@ -1389,14 +1399,20 @@ static void __iomem *knav_queue_map_reg(struct knav_device *kdev, } static int knav_queue_init_qmgrs(struct knav_device *kdev, - struct device_node *qmgrs) + struct device_node *node) { struct device *dev = kdev->dev; + struct device_node *qmgrs __free(device_node) = + of_get_child_by_name(node, "qmgrs"); struct knav_qmgr_info *qmgr; struct device_node *child; u32 temp[2]; int ret; + if (!qmgrs) + return dev_err_probe(dev, -ENODEV, + "queue manager info not specified\n"); + for_each_child_of_node(qmgrs, child) { qmgr = devm_kzalloc(dev, sizeof(*qmgr), GFP_KERNEL); if (!qmgr) { @@ -1668,6 +1684,26 @@ static int knav_queue_start_pdsps(struct knav_device *kdev) return 0; } +static int knav_queue_setup_pdsps(struct knav_device *kdev, + struct device_node *node) +{ + struct device_node *pdsps __free(device_node) = + of_get_child_by_name(node, "pdsps"); + + if (pdsps) { + int ret; + + ret = knav_queue_init_pdsps(kdev, pdsps); + if (ret) + return ret; + + ret = knav_queue_start_pdsps(kdev); + if (ret) + return ret; + } + return 0; +} + static inline struct knav_qmgr_info *knav_find_qmgr(unsigned id) { struct knav_qmgr_info *qmgr; @@ -1755,7 +1791,6 @@ MODULE_DEVICE_TABLE(of, keystone_qmss_of_match); static int knav_queue_probe(struct platform_device *pdev) { struct device_node *node = pdev->dev.of_node; - struct device_node *qmgrs, *queue_pools, *regions, *pdsps; struct device *dev = &pdev->dev; u32 temp[2]; int ret; @@ -1799,39 +1834,17 @@ static int knav_queue_probe(struct platform_device *pdev) kdev->num_queues = temp[1]; /* Initialize queue managers using device tree configuration */ - qmgrs = of_get_child_by_name(node, "qmgrs"); - if (!qmgrs) { - dev_err(dev, "queue manager info not specified\n"); - ret = -ENODEV; - goto err; - } - ret = knav_queue_init_qmgrs(kdev, qmgrs); - of_node_put(qmgrs); + ret = knav_queue_init_qmgrs(kdev, node); if (ret) goto err; /* get pdsp configuration values from device tree */ - pdsps = of_get_child_by_name(node, "pdsps"); - if (pdsps) { - ret = knav_queue_init_pdsps(kdev, pdsps); - if (ret) - goto err; - - ret = knav_queue_start_pdsps(kdev); - if (ret) - goto err; - } - of_node_put(pdsps); + ret = knav_queue_setup_pdsps(kdev, node); + if (ret) + goto err; /* get usable queue range values from device tree */ - queue_pools = of_get_child_by_name(node, "queue-pools"); - if (!queue_pools) { - dev_err(dev, "queue-pools not specified\n"); - ret = -ENODEV; - goto err; - } - ret = knav_setup_queue_pools(kdev, queue_pools); - of_node_put(queue_pools); + ret = knav_setup_queue_pools(kdev, node); if (ret) goto err; @@ -1853,14 +1866,7 @@ static int knav_queue_probe(struct platform_device *pdev) if (ret) goto err; - regions = of_get_child_by_name(node, "descriptor-regions"); - if (!regions) { - dev_err(dev, "descriptor-regions not specified\n"); - ret = -ENODEV; - goto err; - } - ret = knav_queue_setup_regions(kdev, regions); - of_node_put(regions); + ret = knav_queue_setup_regions(kdev, node); if (ret) goto err; From patchwork Sun Aug 25 08:48:45 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kousik Sanagavarapu X-Patchwork-Id: 13776725 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id DE65DC5320E for ; Sun, 25 Aug 2024 09:01:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=UmISYgMpUlAe9Yh2xMwNMd95DBbU9NeKqHPqX7UpJnU=; b=eZzK81jmL1l/7Uzu9lZWK300J/ wT3/eg1swvRFn32VfA1Mn+bXES1ELasfUPLmxKGZJmW2NKQpeKYDv/Xgo5003PGl9NckC/a38kB/W kUQc1zMFpcxDe7xA8L7RNXOBcKdafwtPd+c3bqa47BAgYNMwyRiNTWUsnbAzhjyuK4OMqNxQ2TSXP XbMvGqiPVqVUetggCkJxb2Bz8XclCdzsPvt51w5qLTpWi0FceGA17xRMo5zTH6aMGew7gsbv0JBQi Dm3XUnqXqzWkve2/b/4RCb4ZpHBvxEfAQLHLeMvWD/YyVHmZjmGPIo1M1dWO3ZGeCdBAqU0y9/hE9 hVk3hS9g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1si97n-000000041LD-08Lh; Sun, 25 Aug 2024 09:01:27 +0000 Received: from mail-pf1-x432.google.com ([2607:f8b0:4864:20::432]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1si94U-000000040hr-0EgT for linux-arm-kernel@lists.infradead.org; Sun, 25 Aug 2024 08:58:04 +0000 Received: by mail-pf1-x432.google.com with SMTP id d2e1a72fcca58-7141feed424so2819854b3a.2 for ; Sun, 25 Aug 2024 01:58:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1724576280; x=1725181080; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=UmISYgMpUlAe9Yh2xMwNMd95DBbU9NeKqHPqX7UpJnU=; b=OK/8lczcUzK+DrXkUcfM75SacF/N5QHPh8wqkzAUh2yaDTrSUC8/OWuiDGMRReumGo JxNxPWTDRheet0XuyQPo1Vh4uRCxFZkA1It7lmxN72xf409SQ6eX769ITa9B/YPRncTz bE+9INA/YcVM3BBcbirAfFq+QyMDA+ha2GJnKlfKGw8gywzdUJ2EAVn7Yv7pg4OcC3dC p0lkP5fxE5BJF1kAZiP3JjBcpRl++HOjmVsGkXpMVY8ZTAGkkdntuAvmVtZX960OKDu7 pqQfqEJi2jMLMBtsRyZpiEnnwUA9Vhp5IxhsbUDxEuLXodrKq+CBClS51Ezgn0U1IAa4 px9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1724576280; x=1725181080; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=UmISYgMpUlAe9Yh2xMwNMd95DBbU9NeKqHPqX7UpJnU=; b=RL93+r/l8Z69FsTStkllcQFw9r1+R/GpFHeju9mKnqcSGMH4NecwCszGnYS9ZGS1Tk O2lEgapQwTKPtDzBPF1YE5KW++bYSV/tFoEQ1axjE/67WxjQVXwgJulB4gOR2QPoVMmL XnXpaeV4W0cIf+KeIcm7WRqkdGTWpx2vPmL5MSfQ0YM5h1AnnlqlSPW5oamzLegOcdWq J/KqnIl++wP3y6u6SQeMs1D9WmIU7skXDOxM+VZIAaKu+Wukaxnn9PbvODuk/7dlBj+v AIzT8tJcw09ydONTyZz82hNVG3MWtIGgrNIs0+6Q1MXsENBLv2S27y1E6E8/en1seRMi TWVQ== X-Forwarded-Encrypted: i=1; AJvYcCVhF5NWOJWcP7qE8SXPN2dktvt93UR2+A+Ng23SVBcp+24hSnA4yqdqiH4Pcz8CYiOZMcnoWR1iLB8ZDPjJ3zhW@lists.infradead.org X-Gm-Message-State: AOJu0YzFvF8va3WhHdO5v+jC4YdKmfDo3wZS0jWHqt/+T78H+hrZ6G7q 435cTU4zb/Q1aF8AnCXZpzQ1ggLZdNbv3RXHKfOdJ/aUsTeqbMY8 X-Google-Smtp-Source: AGHT+IFgyeQwAMTLWK0lo4575kKeDSrTrlhwS/4NLcWiLXb0PV0PIYonF6/gE+NONh44UsvI2HFn/g== X-Received: by 2002:a05:6a00:a17:b0:714:21cb:8486 with SMTP id d2e1a72fcca58-71445cd5eb7mr7504708b3a.3.1724576279792; Sun, 25 Aug 2024 01:57:59 -0700 (PDT) Received: from kousik.local ([2405:201:c006:3236:b871:d8f1:d936:dc0c]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7143425109asm5414348b3a.67.2024.08.25.01.57.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 25 Aug 2024 01:57:59 -0700 (PDT) From: Kousik Sanagavarapu To: Nishanth Menon , Jonathan Cameron , Santosh Shilimkar , Nathan Chancellor , Julia Lawall Cc: Shuah Khan , Javier Carrasco , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Kousik Sanagavarapu Subject: [PATCH v4 4/4] soc: ti: pm33xx: do device_node auto cleanup Date: Sun, 25 Aug 2024 14:18:45 +0530 Message-ID: <20240825085714.10736-5-five231003@gmail.com> X-Mailer: git-send-email 2.46.0.290.g4f02c709e8.dirty In-Reply-To: <20240825085714.10736-1-five231003@gmail.com> References: <20240825085714.10736-1-five231003@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240825_015802_132512_38DBB4C6 X-CRM114-Status: GOOD ( 13.56 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Use scope based cleanup instead of manual of_node_put() calls, hence simplifying the handling of error paths. Suggested-by: Julia Lawall Signed-off-by: Kousik Sanagavarapu --- drivers/soc/ti/pm33xx.c | 52 +++++++++++++++++------------------------ 1 file changed, 21 insertions(+), 31 deletions(-) diff --git a/drivers/soc/ti/pm33xx.c b/drivers/soc/ti/pm33xx.c index 3a56bbf3268a..8169885ab1e0 100644 --- a/drivers/soc/ti/pm33xx.c +++ b/drivers/soc/ti/pm33xx.c @@ -383,54 +383,44 @@ static void am33xx_pm_free_sram(void) */ static int am33xx_pm_alloc_sram(void) { - struct device_node *np; - int ret = 0; + struct device_node *np __free(device_node) = + of_find_compatible_node(NULL, NULL, "ti,omap3-mpu"); - np = of_find_compatible_node(NULL, NULL, "ti,omap3-mpu"); if (!np) { np = of_find_compatible_node(NULL, NULL, "ti,omap4-mpu"); - if (!np) { - dev_err(pm33xx_dev, "PM: %s: Unable to find device node for mpu\n", - __func__); - return -ENODEV; - } + if (!np) + return dev_err_probe(pm33xx_dev, -ENODEV, + "PM: %s: Unable to find device node for mpu\n", + __func__); } sram_pool = of_gen_pool_get(np, "pm-sram", 0); - if (!sram_pool) { - dev_err(pm33xx_dev, "PM: %s: Unable to get sram pool for ocmcram\n", - __func__); - ret = -ENODEV; - goto mpu_put_node; - } + if (!sram_pool) + return dev_err_probe(pm33xx_dev, -ENODEV, + "PM: %s: Unable to get sram pool for ocmcram\n", + __func__); sram_pool_data = of_gen_pool_get(np, "pm-sram", 1); - if (!sram_pool_data) { - dev_err(pm33xx_dev, "PM: %s: Unable to get sram data pool for ocmcram\n", - __func__); - ret = -ENODEV; - goto mpu_put_node; - } + if (!sram_pool_data) + return dev_err_probe(pm33xx_dev, -ENODEV, + "PM: %s: Unable to get sram data pool for ocmcram\n", + __func__); ocmcram_location = gen_pool_alloc(sram_pool, *pm_sram->do_wfi_sz); - if (!ocmcram_location) { - dev_err(pm33xx_dev, "PM: %s: Unable to allocate memory from ocmcram\n", - __func__); - ret = -ENOMEM; - goto mpu_put_node; - } + if (!ocmcram_location) + return dev_err_probe(pm33xx_dev, -ENOMEM, + "PM: %s: Unable to allocate memory from ocmcram\n", + __func__); ocmcram_location_data = gen_pool_alloc(sram_pool_data, sizeof(struct emif_regs_amx3)); if (!ocmcram_location_data) { - dev_err(pm33xx_dev, "PM: Unable to allocate memory from ocmcram\n"); gen_pool_free(sram_pool, ocmcram_location, *pm_sram->do_wfi_sz); - ret = -ENOMEM; + return dev_err_probe(pm33xx_dev, -ENOMEM, + "PM: Unable to allocate memory from ocmcram\n"); } -mpu_put_node: - of_node_put(np); - return ret; + return 0; } static int am33xx_pm_rtc_setup(void)