From patchwork Sun Jul 7 05:14:16 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kousik Sanagavarapu X-Patchwork-Id: 13725969 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 97D1FC3814E for ; Sun, 7 Jul 2024 05:54:38 +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=5AFnd+VA8Z38aedFSnDQhJz5LXWpxu4cJVkL+MlMwtg=; b=eLn79y3kBqDg0cvtR15xb+5jrp dHvLH9lBBYhCQ5Rddb3sPEDC/X5+A4svjo2gl5QmV6TUu90Ny6HzqvNn7SI4rRMYjECOW0CwdkQJC W4ezvct/ZRZTyYe0evXFaRNMJX15fSZCzrXBhd0HdFDuDwwd0mrgnyIbjpExsHpX2py96UMh9lqKd mEIbms6/v66yVHbcrwC+eNZtLEFJ0WhXKzmmv41rUlPOusELmhLOPnG9dkAsk38QNh0pzEVrX/ir0 B/ZXh8DWB0d4ZRHqG8/omhitxlN84eKpjTCfUOAPK6vvCkp11iZ0sGR4FRPP7IVkAMB7MVcxNjyAe Sio4ebkA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sQKqx-00000001OBl-2FoD; Sun, 07 Jul 2024 05:54:27 +0000 Received: from mail-yw1-x1134.google.com ([2607:f8b0:4864:20::1134]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sQKqb-00000001O4i-1hLP for linux-arm-kernel@lists.infradead.org; Sun, 07 Jul 2024 05:54:06 +0000 Received: by mail-yw1-x1134.google.com with SMTP id 00721157ae682-64b3655297aso27856187b3.1 for ; Sat, 06 Jul 2024 22:54:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1720331644; x=1720936444; 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=5AFnd+VA8Z38aedFSnDQhJz5LXWpxu4cJVkL+MlMwtg=; b=B4XvUFvWq1rQiQzT/406q1Nyr2wETmZv012879uGapvyT7J35nkyTtQj00x+KFg9bt efewO4Q1quPQjrWGdmJC1ABEqHgVrGGDL0HaZRCcLd0LYnap5JXeVAETxGOV3hQvyE9X FAOylTxPooG8bUWAD+o4D2X/MpjmVw6ER4pKHQVjXj49Fb7JUNpvtNwr1SaeQroiqZFI kH4S1AjVye/uv8C0LuJlO00F/xs6vQVFizVnLfti2r/PTM1PUbyYWK9N2loN7oxsVCyF ERsDOgJHl7DRbTcEQ85L8mpiKA9g6Sr0HxrYx8yw5w8ahhCOe9LjJP7M74ePm/7RMnuF tdbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1720331644; x=1720936444; 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=5AFnd+VA8Z38aedFSnDQhJz5LXWpxu4cJVkL+MlMwtg=; b=rDGQnCl2vLYiw7yZa69T12MyQrUQLgHpXb33KGqvCd3fCybRSREkXAt5wFDZuuaVs7 v+4eZO5Fwq0gBs/9gNlCLediRNUvDWGVoi4j+zJp2jLfAZlHRp1E0cy23I/9GACXWXgs 0BMCKMKLFDsXtsUUjnlpNgJLran28i6Us6PXLLoVAga/HvHfMRMVBLJX41zwGM3g43VX GxT/SkSv5t6O6reW37edxxwpa+QwtK4JZL5HKGcHjUrnXJPGpm8Tk8M2s/EsmYC4zvss MXk+HjofJMHtZnS0jDb9ZNm9EQN5WbtW6ipN9YWjn9Vzyw8OOkwMtArvcvUtvVgXOzwi 1Row== X-Forwarded-Encrypted: i=1; AJvYcCXAq36w0tDryltLjZ7pwU32I0Ujc6QNaNWyTi6+H7n2nwk5diU6OAh/RMxI6h05kPF8JTxJEMrql0q8R74ZVr6D/1DBQsulJpawpeXSPl7u3YM7Sec= X-Gm-Message-State: AOJu0YyjibOspCFTT7fzBmlvYpnVHNpEsraHm3H3b791U3DiQqIki0fi N7Iesx8PpkR/iCabba/beamL1dbANytdHPoejwsLmYJ0gUV3yeqd X-Google-Smtp-Source: AGHT+IEM8rXNId+q2iXUTZrQl0UTkENIr3G4q3CoYS4vqe0FwmaON3MklvnPUYn/y1DOmJ4MEAs5FQ== X-Received: by 2002:a05:690c:986:b0:63b:d711:f06d with SMTP id 00721157ae682-652d7b5c8d9mr79208147b3.33.1720331643688; Sat, 06 Jul 2024 22:54:03 -0700 (PDT) Received: from kousik.local ([2405:201:c006:312d:252d:94b8:b79c:d7bb]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-70b2e5fe3dfsm94429b3a.97.2024.07.06.22.53.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 06 Jul 2024 22:54:03 -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 v3 1/4] soc: ti: pruss: factor out memories setup Date: Sun, 7 Jul 2024 10:44:16 +0530 Message-ID: <20240707055341.3656-2-five231003@gmail.com> X-Mailer: git-send-email 2.45.2.561.g66ac6e4bcd In-Reply-To: <20240707055341.3656-1-five231003@gmail.com> References: <20240707055341.3656-1-five231003@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240706_225405_471906_F7E5513F X-CRM114-Status: GOOD ( 24.44 ) 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 seperate 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..a3c55a291b0b 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) + goto rpm_put; platform_set_drvdata(pdev, pruss);