From nobody Fri Dec 19 16:19:56 2025 Received: from mail-oo1-f51.google.com (mail-oo1-f51.google.com [209.85.161.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3D1E14776E for ; Sun, 25 Aug 2024 08:57:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.161.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724576260; cv=none; b=OOJsaUQop7vPEg/r7BRKCwSgTQTDkieqAWrSs2FMkrBhudbH6IhmwYNGZbfSM6ZUHWivKvYINHking9ztiFh4aFxuqfaw2Vl4Rj+9i3dK/+3jj2KVVVDkTt8ox8mzD8YkKDu6apE1U3nY09AUgxiGZ/gLZ0lf7EtkcOU2ZxHo/o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724576260; c=relaxed/simple; bh=L/mXP7Xn6MZBVQiLfifg1NGi/ykpTasI9JOSZKAvRdg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Z7I3vi2y5fvl62IMcmzqnMg3u8l2k4pOieKMY/Gr2N4yF6qwitRRr64u+mQI6oUCnreej0+oDjXDxUb29cO1U26NCqeMJCjU9/HPLGmNlHAXdf9Pm2KfOW40WtQ8hARXZ8ADWy43FmmEJGhgoaQkuGgvglOYytYA8StJQbg1UZo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=DPd5LvPw; arc=none smtp.client-ip=209.85.161.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="DPd5LvPw" Received: by mail-oo1-f51.google.com with SMTP id 006d021491bc7-5de8389e77cso693198eaf.2 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=vger.kernel.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=DPd5LvPw870KThAHL5sTjLJ9fCzpIAa5GvPjgxkJxN1EPRsROibhZ1kk3TQHADkpr/ F3uqxGFHgPOIdXaFKpBmTFBOOUee8B8xre9ucQ9XWLHHwFzYjvLUAmCgidFVLEclGSMF MoVnH7HK7AzL6gOrj8nX0JiqCCYRvToRytPuicXd6Wt2c7cEZ+SqiYTswA0dCoxabwB2 mlt+5grEBWKgGN2ab3bTIfM6cnfxyYYTIaHmnmoKqY4UHhbKECKU/GSi4WJ0RsxwZDrB 59RYxqvCvMd97EDa2x/xTznorfIdk3v7wxH1LM0lxPwbphzlt++knpBXVq6xj2s4JUnS 9fwg== 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=qIZKkkmOtlEjzzTTRw9UMl0bfh7HXezpUt74NUYPqZB/KEZOlMyYknUrVQG250wv5g saD4PV61VzIuvEtnQ58pzMLinysTHJjy0jTPG5jaA8w1nbOs4GyX9uPJd/N3Y1FV+pNZ Cqb4U0Wxbh2bSjxir8i3dp3K0hMlJbKG1cR/F8TjfuxjqptvlSuoupkbsq+Jtz8y2f1v xAlWXKMP/obWumMsIeWAFQmUAJ8LpGtkQd94NXm/0vBm8cV58qqiXPI8wqjFGITxJVV4 KQ4u9F/7u5YxXEbr/ZNSyxCRhHEXQ7hQvFkoGxjimfYTGwDOAkj0wJhZJkFOejs/ILRw tT8A== X-Forwarded-Encrypted: i=1; AJvYcCXBnnQ0tBNM/1qzoCTMiwvoGAQPPjAjrGbDnpAq+c09q2EzLZ4kpOcANGswt25qdelT50Viv4KlMOR5bPc=@vger.kernel.org X-Gm-Message-State: AOJu0Yxwn9DWw+19y5ODtq6IBucb34/GjfRuwOFmuhvlLtxmSpt/Me6K Jej2cqGwUzX8Bi+qVbnGJqEZuvw1cl/9CLgxdWUc9GIxDq2D5Llp 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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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; } =20 +static int pruss_of_setup_memories(struct device *dev, struct pruss *pruss) +{ + struct device_node *np =3D dev_of_node(dev); + struct device_node *child; + const struct pruss_private_data *data =3D of_device_get_match_data(dev); + const char *mem_names[PRUSS_MEM_MAX] =3D { "dram0", "dram1", "shrdram2" }; + int i; + + child =3D 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 =3D 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 =3D=3D PRUSS_MEM_SHRD_RAM2) + continue; + + index =3D 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 =3D 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 =3D res.start; + pruss->mem_regions[i].size =3D 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 =3D { .reg_bits =3D 32, .val_bits =3D 32, @@ -471,15 +528,8 @@ static int pruss_cfg_of_init(struct device *dev, struc= t pruss *pruss) static int pruss_probe(struct platform_device *pdev) { struct device *dev =3D &pdev->dev; - struct device_node *np =3D 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] =3D { "dram0", "dram1", "shrdram2" }; - - data =3D of_device_get_match_data(&pdev->dev); + int ret; =20 ret =3D 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 =3D dev; mutex_init(&pruss->lock); =20 - child =3D of_get_child_by_name(np, "memories"); - if (!child) { - dev_err(dev, "%pOF is missing its 'memories' node\n", child); - return -ENODEV; - } - - for (i =3D 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 =3D=3D PRUSS_MEM_SHRD_RAM2) - continue; - - index =3D 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 =3D 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 =3D res.start; - pruss->mem_regions[i].size =3D 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 =3D pruss_of_setup_memories(dev, pruss); + if (ret < 0) + return ret; =20 platform_set_drvdata(pdev, pruss); =20 --=20 2.46.0.290.g4f02c709e8.dirty From nobody Fri Dec 19 16:19:56 2025 Received: from mail-oo1-f52.google.com (mail-oo1-f52.google.com [209.85.161.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 61C1177119 for ; Sun, 25 Aug 2024 08:57:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.161.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724576265; cv=none; b=rJ+volB/35zE/SNm/dDptdji8hvZz7N6OGQ0vU0Jwz0BjphxKdGUbTNhVTR7BXTdxYqYionOpfzqAFTra6+WDSAeh2y9kj+jSKnN8xr/3jVw17m5H3oyBRTWpSemgj6+lTPIEfckzTrBW7Cx3arnXqVF/rfuw9gEavYkzpQAlrQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724576265; c=relaxed/simple; bh=67/Xozd18Ej9k8mZ00J+8j3/xv7WWXoGpKJcxBLrG2Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ZvGesFNkZDfiGsWmMosygqnJMMDTBi6pUJAnu9QNXyOdG/n/YnLET6rSSwKqkSuJwaQ07MapQZuRn5rt5RzHOiwD1W2Q6pL+E4kkkGMrrEkh3KPNsC7pV0d6bERCXwfSpLgncIFPdJkSlV31G0+kgJhb/8bZLHTuI6zwSKo/cX4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ZKzZ1Lee; arc=none smtp.client-ip=209.85.161.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ZKzZ1Lee" Received: by mail-oo1-f52.google.com with SMTP id 006d021491bc7-5d5e97b8adbso2902022eaf.1 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=vger.kernel.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=ZKzZ1Lee9BdGoPcdhW3sXk2UGrsARciML8Kici79KF5DuboffLz7WU6SSy+hN7LzdR +cuWZdb9CPvijv+ugugacXXhFMKPLCV1BjzygyXZ4wu9VQkuWXF7HCkNi32UPlbLDeif RVPTcIxB0mgm5fTYqc8fj3cwzmo+N+cflGRtOA0W3UqpWxJ0B5IGMHKsjsaLw5f//Yvt 13beL90LJLQ6JQHP0r7hJKlOa5jSxDgmZjHiErd6OaJQxUyGtUcqqVCjA54aCOplpOOa xespI5iPQVlbWRyTE5XEVWpLwU6seYNffS0x9G64/76r5KNoG6Tv/UMY3tBuTAOqkuFf Iaiw== 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=GtVeQ+//HStjf3Wk4XppxB7na5nVEBFB/EeMeh0Ybiq6AGsrnHwcoKFMDvBGKM3VXU b1kk/VEJli6cccfmUdCV3whjeohUua4qLNLgS4Z9NjHPJQdRXWCzNNSw5g05ZwElgRm/ iH78oZLNnjzSp6QJRih82TtM6lh1S7z1BUCquwGl6uRkWgfgELRPN98buRZTZb4nx3sV dNOmHD4hSJGau2Zr75YRY1vLnLCbEIKIZoMdbupbB8QmY3YYB6PAhMc48I4CqdQx8FLT uq9jIziqLobQmpdiK2xl9XVqsxz1/WbbK2qjQVZfWR6LSdIZRk1L05ZKeI0tzTppXG/h v32Q== X-Forwarded-Encrypted: i=1; AJvYcCVi43XXLWdBRz6OpG/SAOrWHrRBFNaajx3t9yW7a/Dbv7xtqCD3lpZSEc6oUAfgjoo2UB+sy8yTh9f6O5k=@vger.kernel.org X-Gm-Message-State: AOJu0YzjPRxF7oIxpSolMhK3y280yDFqs9p+d0GOvs3+XtovKDPoarAP 6IwLVREWeNmnUWahbIrnFKSicqRTVoU5CpDZNyMR/ldD9vEq9dzH 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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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, s= truct clk *clk_mux, =20 static int pruss_clk_init(struct pruss *pruss, struct device_node *cfg_nod= e) { - const struct pruss_private_data *data; - struct device_node *clks_np; struct device *dev =3D pruss->dev; - int ret =3D 0; - - data =3D of_device_get_match_data(dev); + struct device_node *clks_np __free(device_node) =3D + of_get_child_by_name(cfg_node, "clocks"); + const struct pruss_private_data *data =3D of_device_get_match_data(dev); + int ret; =20 - clks_np =3D 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); =20 if (data && data->has_core_mux_clock) { ret =3D 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"); } =20 ret =3D 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"); =20 - return ret; + return 0; } =20 static int pruss_of_setup_memories(struct device *dev, struct pruss *pruss) { struct device_node *np =3D dev_of_node(dev); - struct device_node *child; + struct device_node *child __free(device_node) =3D + of_get_child_by_name(np, "memories"); const struct pruss_private_data *data =3D of_device_get_match_data(dev); const char *mem_names[PRUSS_MEM_MAX] =3D { "dram0", "dram1", "shrdram2" }; int i; =20 - child =3D 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) =20 index =3D of_property_match_string(child, "reg-names", mem_names[i]); - if (index < 0) { - of_node_put(child); + if (index < 0) return index; - } =20 - if (of_address_to_resource(child, index, &res)) { - of_node_put(child); + if (of_address_to_resource(child, index, &res)) return -EINVAL; - } =20 pruss->mem_regions[i].va =3D 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 =3D res.start; pruss->mem_regions[i].size =3D resource_size(&res); =20 @@ -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); =20 return 0; } @@ -481,26 +466,21 @@ static struct regmap_config regmap_conf =3D { static int pruss_cfg_of_init(struct device *dev, struct pruss *pruss) { struct device_node *np =3D dev_of_node(dev); - struct device_node *child; + struct device_node *child __free(device_node) =3D + of_get_child_by_name(np, "cfg"); struct resource res; int ret; =20 - child =3D 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); =20 - if (of_address_to_resource(child, 0, &res)) { - ret =3D -ENOMEM; - goto node_put; - } + if (of_address_to_resource(child, 0, &res)) + return -ENOMEM; =20 pruss->cfg_base =3D devm_ioremap(dev, res.start, resource_size(&res)); - if (!pruss->cfg_base) { - ret =3D -ENOMEM; - goto node_put; - } + if (!pruss->cfg_base) + return -ENOMEM; =20 regmap_conf.name =3D kasprintf(GFP_KERNEL, "%pOFn@%llx", child, (u64)res.start); @@ -509,20 +489,15 @@ static int pruss_cfg_of_init(struct device *dev, stru= ct pruss *pruss) pruss->cfg_regmap =3D 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 =3D %ld\n", - PTR_ERR(pruss->cfg_regmap)); - ret =3D 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"); =20 ret =3D pruss_clk_init(pruss, child); if (ret) - dev_err(dev, "pruss_clk_init failed, ret =3D %d\n", ret); + return dev_err_probe(dev, ret, "pruss_clk_init failed\n"); =20 -node_put: - of_node_put(child); - return ret; + return 0; } =20 static int pruss_probe(struct platform_device *pdev) --=20 2.46.0.290.g4f02c709e8.dirty From nobody Fri Dec 19 16:19:56 2025 Received: from mail-pf1-f170.google.com (mail-pf1-f170.google.com [209.85.210.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 692D177119 for ; Sun, 25 Aug 2024 08:57:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724576272; cv=none; b=mCymU9UFF8h/TnZW1zHLvjYnBcYrmTLxuAJByK7M/zPZRDH1kMZFZIjOgEjm2hvGYsGGoOnPAUmcEJlfcacEnR2Fyu0Rt97zFVnCH/MOlxdjDaPb5bi7clzpTHfxJ/IMB/orp2a9DqWJERHASnJ872xF8lVUSbhlEplIgk6wMBM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724576272; c=relaxed/simple; bh=lCTjWmF/9K4denNqt2FdCUUu0I5veJZNX61skQW6V+4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ZuAXvsO2MC2r9dY5nMB0NpJbHbAEYBku3sTZ7IHDBbCFpkTfWVHJ2YWvKgHJIFgT4URV+VPGRXrNgAOnTQ/e9OO9pOb10MOFMsdP/cTEPnPpctBO6FD4wMY1FVMS2u505oR20S3vxiBepQgeb6SDr9+21jtsAMoRbKNZYpdz6Hs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=jOmYR2l6; arc=none smtp.client-ip=209.85.210.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="jOmYR2l6" Received: by mail-pf1-f170.google.com with SMTP id d2e1a72fcca58-71423273c62so2405667b3a.0 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=vger.kernel.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=jOmYR2l6RcKqklM15/PvBLfnPzNHFsV1SZdKCBbJyk4IPTXM27VQK1Ssb2bF6rK38e k5EgOJe5b4cFmFSF9WW22h/S7lZIYB6wPPsRigrxz+e1MUuanHmKlczLY6zp5IOBe+bx XycN7IQtQixZaU2H0fhuD4R6NQCqMxuVZN821ZegVwfmJq6TXB6V2aAYPqGia5V7XGDx gefSgLzI8lKA7XENsJOOI/AcLJZcwrC3XEdt8018LYvKPY6PeWkCqKBZ9382em+PaFBR xCwtyyhlMg2rYPk5ntPKET7eUAlOkRHxs5GoNV+B9QD36l+LcylHqPMQj+EIc0RRoH8k FhVQ== 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=bGl7YqS2uV8VOTTill+4SsrQz+Rltf7QvEhkKW0Q9eOPrTEYKc69ea1wInN6MO6AJg cwQr+jaGLbFQSSbwvz4LA3S5TDFRIJLggCrth756WaU5N3pWbBRCsKfrKKQaf5YEjofc LqFXVwNyozeiIyo7oqiw7X06vsaUO3LB9qqoNgYf1T1koJRE4s+MhGEg0qOJdVZK9lLu z39fkQMf6KuXq1dt4FmXZExsFtPFMKCt5nwPyC5CNFPGfdKD2hF/fTPBzOp6A04QzHlD BblTVPEPS5Whz370xvdDZgVyekW0U8b2Qe0MueaLf4ELJR/seU4AdxOOCgWOAupeP4DM dkQw== X-Forwarded-Encrypted: i=1; AJvYcCXs6obgtd44pZDl7tLGkkxNrFeAvQcugDGh/rUOJLG9XUCqtlPba6qRliXYe2rlrRn5bwJpcjDVSN7/Xw0=@vger.kernel.org X-Gm-Message-State: AOJu0YyJnDw4TEhjnINjEt7f5OCv22xYfu7yS8B10Kz2yOqLhfZJXQ0j r71bFdXXjnEm2JtlFOM/1clmji4B2+RU1pCf6Lc/clW/xIOXzTT9 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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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_qu= eue.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 devi= ce_node *node) } =20 static int knav_queue_setup_regions(struct knav_device *kdev, - struct device_node *regions) + struct device_node *node) { struct device *dev =3D kdev->dev; + struct device_node *regions __free(device_node) =3D + of_get_child_by_name(node, "descriptor-regions"); struct knav_region *region; struct device_node *child; u32 temp[2]; int ret; =20 + if (!regions) + return dev_err_probe(dev, -ENODEV, + "descriptor-regions not specified\n"); + for_each_child_of_node(regions, child) { region =3D devm_kzalloc(dev, sizeof(*region), GFP_KERNEL); if (!region) { @@ -1121,10 +1127,9 @@ static int knav_queue_setup_regions(struct knav_devi= ce *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"); =20 /* 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_devic= e *kdev, } =20 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) =3D + of_get_child_by_name(node, "queue-pools"); struct device_node *type, *range; =20 + 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, } =20 /* ... 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; } =20 @@ -1389,14 +1399,20 @@ static void __iomem *knav_queue_map_reg(struct knav= _device *kdev, } =20 static int knav_queue_init_qmgrs(struct knav_device *kdev, - struct device_node *qmgrs) + struct device_node *node) { struct device *dev =3D kdev->dev; + struct device_node *qmgrs __free(device_node) =3D + of_get_child_by_name(node, "qmgrs"); struct knav_qmgr_info *qmgr; struct device_node *child; u32 temp[2]; int ret; =20 + if (!qmgrs) + return dev_err_probe(dev, -ENODEV, + "queue manager info not specified\n"); + for_each_child_of_node(qmgrs, child) { qmgr =3D 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; } =20 +static int knav_queue_setup_pdsps(struct knav_device *kdev, + struct device_node *node) +{ + struct device_node *pdsps __free(device_node) =3D + of_get_child_by_name(node, "pdsps"); + + if (pdsps) { + int ret; + + ret =3D knav_queue_init_pdsps(kdev, pdsps); + if (ret) + return ret; + + ret =3D 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 =3D pdev->dev.of_node; - struct device_node *qmgrs, *queue_pools, *regions, *pdsps; struct device *dev =3D &pdev->dev; u32 temp[2]; int ret; @@ -1799,39 +1834,17 @@ static int knav_queue_probe(struct platform_device = *pdev) kdev->num_queues =3D temp[1]; =20 /* Initialize queue managers using device tree configuration */ - qmgrs =3D of_get_child_by_name(node, "qmgrs"); - if (!qmgrs) { - dev_err(dev, "queue manager info not specified\n"); - ret =3D -ENODEV; - goto err; - } - ret =3D knav_queue_init_qmgrs(kdev, qmgrs); - of_node_put(qmgrs); + ret =3D knav_queue_init_qmgrs(kdev, node); if (ret) goto err; =20 /* get pdsp configuration values from device tree */ - pdsps =3D of_get_child_by_name(node, "pdsps"); - if (pdsps) { - ret =3D knav_queue_init_pdsps(kdev, pdsps); - if (ret) - goto err; - - ret =3D knav_queue_start_pdsps(kdev); - if (ret) - goto err; - } - of_node_put(pdsps); + ret =3D knav_queue_setup_pdsps(kdev, node); + if (ret) + goto err; =20 /* get usable queue range values from device tree */ - queue_pools =3D of_get_child_by_name(node, "queue-pools"); - if (!queue_pools) { - dev_err(dev, "queue-pools not specified\n"); - ret =3D -ENODEV; - goto err; - } - ret =3D knav_setup_queue_pools(kdev, queue_pools); - of_node_put(queue_pools); + ret =3D knav_setup_queue_pools(kdev, node); if (ret) goto err; =20 @@ -1853,14 +1866,7 @@ static int knav_queue_probe(struct platform_device *= pdev) if (ret) goto err; =20 - regions =3D of_get_child_by_name(node, "descriptor-regions"); - if (!regions) { - dev_err(dev, "descriptor-regions not specified\n"); - ret =3D -ENODEV; - goto err; - } - ret =3D knav_queue_setup_regions(kdev, regions); - of_node_put(regions); + ret =3D knav_queue_setup_regions(kdev, node); if (ret) goto err; =20 --=20 2.46.0.290.g4f02c709e8.dirty From nobody Fri Dec 19 16:19:56 2025 Received: from mail-pf1-f180.google.com (mail-pf1-f180.google.com [209.85.210.180]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A5CBC7DA80 for ; Sun, 25 Aug 2024 08:58:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724576282; cv=none; b=KpWG5H7zSPpYQYy8zIU72haS4L1fqFDhxYTHIUQkNUThT6G/A717ciPrn6jQ4Hh7+LQVqCvCL9uCE05AVnkAG8adfTXVzjqC1LzPJhdQbiVgoPjbQIPh7h4ef65ADzHjcocHrH+JTdJZHhC/S91uUejfeOvItZ8TTc0KODdP/no= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724576282; c=relaxed/simple; bh=bZ2coIvMThC0641Kch/FQFWZUStNTz9cg7L/vnjPLIE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ty82g5AUWHGDHW1DiYT1rkVwkPAJ5xIM3wn8kZ0PwYw9Uh11vk+rFGrb1CYEOYi9hY1IHNv4IvfHiFVuvHPr4x+QowHo0WPtT1YHpaI1zRWGmHbRvpaTsWV2SpAaAgYgPKd3vNuzOGfbghvRhivW2dptV1Vk1boXyp0XgfOTawQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=WQhwqZL5; arc=none smtp.client-ip=209.85.210.180 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="WQhwqZL5" Received: by mail-pf1-f180.google.com with SMTP id d2e1a72fcca58-71423273c62so2405690b3a.0 for ; Sun, 25 Aug 2024 01:58:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1724576280; x=1725181080; darn=vger.kernel.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=WQhwqZL5YF6BX6RvXoR7hELZroEvhvtSs8m/jdIQHfWRru6/Fe9efuXgqtiTbEtbMS EPG4e30ZMl4Z9WNQHM4BVWpA9r34ODgJggtT7dBAqbSLf7SX+EFOamkaldt192EEX7il 3LXXjG8HXNscQzB2sYLZIguwHqz8fLlp6PVCJu3TXsbBvFrwUwYxZ8rJsxIZt6gO0Fpt xaentioA7bQVDcqBesJJ86tFear+RzxavD1/8dbDtTX39RNpvnV6PZKMp39LH3OkMy69 drw95AngF02KdK/pcEUx6k9RWxSGWOMVAGhaYJIFdoxLQ6cRE47VfzoMDwwMBTYpqzmG jglA== 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=ABwRnVe19TVwqBlXND3FSwkimRDFp4Znz5p+3KYGkyE94CQ+9vPn6DnMIFFgIRhkPc T6EaQjSO3xfG17XF4DWgSsax2FbNC1GiIro702//BKd8CB6wfGgwDh/RlCJ7LpYcO92T oW9QWDzSvBqj5x3WUFAt9kczbgPHrCp4pwY/RZ7hb4BvgUVf5DPTlnDfzkY0jgSxyIRN xQ7DeVEukG6TiIz2gtaiIBXY+cDF+w2btFbtvGNIiPahb2aHmgSz2osxlYAkWtT/ZDFF h/nzHlDOLVjRpecJh55RcQHYkk8Xgm4V2yZh+XvsjSJEa183bxmh0BXZWid/P0QqBu8q PlOA== X-Forwarded-Encrypted: i=1; AJvYcCVfbaDt67yJ2tsX1SPOcGfTWDCu4IIsQ9igZBLqPpJcoyGYQ+SNSjrhmONygX77V0HKYFflT/Dmct7R6zc=@vger.kernel.org X-Gm-Message-State: AOJu0YzCT2dGMydYG5d+/5I8bTnHvnQ2VRY4F0kgeN5Xjr6pptgMUqSJ uXVX9Jo7dMWVY+Hs1hjRMpyo0N6RxgodJ0yfKW9Ux3Q8jWOLz6Za 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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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 =3D 0; + struct device_node *np __free(device_node) =3D + of_find_compatible_node(NULL, NULL, "ti,omap3-mpu"); =20 - np =3D of_find_compatible_node(NULL, NULL, "ti,omap3-mpu"); if (!np) { np =3D 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__); } =20 sram_pool =3D 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 =3D -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__); =20 sram_pool_data =3D 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 =3D -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__); =20 ocmcram_location =3D 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 =3D -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__); =20 ocmcram_location_data =3D 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 =3D -ENOMEM; + return dev_err_probe(pm33xx_dev, -ENOMEM, + "PM: Unable to allocate memory from ocmcram\n"); } =20 -mpu_put_node: - of_node_put(np); - return ret; + return 0; } =20 static int am33xx_pm_rtc_setup(void) --=20 2.46.0.290.g4f02c709e8.dirty