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);