Received: by 2002:a05:6358:11c7:b0:104:8066:f915 with SMTP id i7csp5093275rwl; Mon, 10 Apr 2023 23:50:24 -0700 (PDT) X-Google-Smtp-Source: AKy350ZIfD1B/xOBQM+ZuSkd9vHiwrc1tR8ct0Gy4qxUir8h3e1W0ZdubKRXfEhXG+JkGKA8vbkC X-Received: by 2002:a50:ed08:0:b0:504:a29c:3989 with SMTP id j8-20020a50ed08000000b00504a29c3989mr4424253eds.37.1681195823961; Mon, 10 Apr 2023 23:50:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681195823; cv=none; d=google.com; s=arc-20160816; b=OXYEr479VGEl69bNrprx5Z2m5C/sDAMRZreCnmTnsTxS65RzaMEhMyJH7rgso3n0HX 9sLncBjsZH5kFIwVYvfXudqn1bDK32EPWhyt+nxcQHOExpet+aHGcKXssKfPS3dXk3Uc TZQNdefxonsYmnvGX9HOWWvLAk3YV4BB19FQUcvRRQeKqp6VSjHzpXQfSx8qQL1b0Ixy KWSgnJdHSeeSRYWZ9eOU/+jJzbL128wp2b10fzyPCgEpIyr/PEg07G2IvupfcHtBJuXl 59eEU9Qn52QCKmekpauAOOhce9/pA96QtKHyJBvYr8tBb+r98NkmrThg6SXD3jlTtfuP 3jWA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=9Z3XJY412qjZqqFbQ8/oTfOtB4r+EGyW/n2zJXn9B44=; b=eLoPReoKbRrI0BI8Zn+og+1wJwCWgofbja3jgsYNecuQBIqaaFNFqGGmClDCUuG/ta WMmmawnnDc72lhkRvYGVQYxiO1uYDk366Qz0AOHnDF2+QZvkFxpRiW0+3MppeUxmfgLs 5+jmolaWkbcVW1p81Ze8rIMMDjOROY6FfOp2q7affhFp7wTQVPVcj7LbqBaQzGqWIqTC JPqi0CiE4y9+3kC2AXTj4wfginUggtewWI9aMV/JFrkcqPGEssqRCDbJdoU5bgFmmAYe 5mA5kA7YXi78DxV9pfpoH8xgmexpwuXSfisAzOsRTuyiqmezhj5XkeTnLQqy2LACowmi s1tA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id be13-20020a1709070a4d00b0094a5c3a0362si898000ejc.989.2023.04.10.23.49.53; Mon, 10 Apr 2023 23:50:23 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230198AbjDKGsK convert rfc822-to-8bit (ORCPT + 99 others); Tue, 11 Apr 2023 02:48:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58696 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230172AbjDKGry (ORCPT ); Tue, 11 Apr 2023 02:47:54 -0400 Received: from ex01.ufhost.com (ex01.ufhost.com [61.152.239.75]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 25D431BD5; Mon, 10 Apr 2023 23:47:50 -0700 (PDT) Received: from EXMBX165.cuchost.com (unknown [175.102.18.54]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client CN "EXMBX165", Issuer "EXMBX165" (not verified)) by ex01.ufhost.com (Postfix) with ESMTP id A84DE24E226; Tue, 11 Apr 2023 14:47:48 +0800 (CST) Received: from EXMBX162.cuchost.com (172.16.6.72) by EXMBX165.cuchost.com (172.16.6.75) with Microsoft SMTP Server (TLS) id 15.0.1497.42; Tue, 11 Apr 2023 14:47:48 +0800 Received: from ubuntu.localdomain (113.72.145.176) by EXMBX162.cuchost.com (172.16.6.72) with Microsoft SMTP Server (TLS) id 15.0.1497.42; Tue, 11 Apr 2023 14:47:47 +0800 From: Changhuang Liang To: Rob Herring , Krzysztof Kozlowski , Emil Renner Berthing , Conor Dooley , Paul Walmsley , Palmer Dabbelt , Albert Ou CC: Walker Chen , Changhuang Liang , , , Subject: [PATCH v1 5/7] soc: starfive: Use call back to parse device tree resources Date: Mon, 10 Apr 2023 23:47:41 -0700 Message-ID: <20230411064743.273388-6-changhuang.liang@starfivetech.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230411064743.273388-1-changhuang.liang@starfivetech.com> References: <20230411064743.273388-1-changhuang.liang@starfivetech.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [113.72.145.176] X-ClientProxiedBy: EXCAS064.cuchost.com (172.16.6.24) To EXMBX162.cuchost.com (172.16.6.72) X-YovoleRuleAgent: yovoleflag Content-Transfer-Encoding: 8BIT X-Spam-Status: No, score=0.0 required=5.0 tests=SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Different compatible parse device tree resources work in different ways. Signed-off-by: Changhuang Liang --- drivers/soc/starfive/jh71xx_pmu.c | 54 ++++++++++++++++++++++--------- 1 file changed, 39 insertions(+), 15 deletions(-) diff --git a/drivers/soc/starfive/jh71xx_pmu.c b/drivers/soc/starfive/jh71xx_pmu.c index 98f6849d61de..990db6735c48 100644 --- a/drivers/soc/starfive/jh71xx_pmu.c +++ b/drivers/soc/starfive/jh71xx_pmu.c @@ -57,10 +57,14 @@ struct jh71xx_domain_info { u8 bit; }; +struct jh71xx_pmu; + struct jh71xx_pmu_match_data { const struct jh71xx_domain_info *domain_info; int num_domains; u8 pmu_type; + int (*pmu_parse_dt)(struct platform_device *pdev, + struct jh71xx_pmu *pmu); }; struct jh71xx_pmu { @@ -251,6 +255,31 @@ static irqreturn_t jh71xx_pmu_interrupt(int irq, void *data) return IRQ_HANDLED; } +static int jh7110_pmu_general_parse_dt(struct platform_device *pdev, + struct jh71xx_pmu *pmu) +{ + struct device *dev = &pdev->dev; + struct device_node *np = dev->of_node; + int ret; + + pmu->base = device_node_to_regmap(np); + if (IS_ERR(pmu->base)) + return PTR_ERR(pmu->base); + + pmu->irq = platform_get_irq(pdev, 0); + if (pmu->irq < 0) + return pmu->irq; + + ret = devm_request_irq(dev, pmu->irq, jh71xx_pmu_interrupt, + 0, pdev->name, pmu); + if (ret) + dev_err(dev, "failed to request irq\n"); + + jh71xx_pmu_int_enable(pmu, JH71XX_PMU_INT_ALL_MASK & ~JH71XX_PMU_INT_PCH_FAIL, true); + + return 0; +} + static int jh71xx_pmu_init_domain(struct jh71xx_pmu *pmu, int index) { struct jh71xx_pmu_dev *pmd; @@ -296,23 +325,20 @@ static int jh71xx_pmu_probe(struct platform_device *pdev) if (!pmu) return -ENOMEM; - pmu->base = device_node_to_regmap(np); - if (IS_ERR(pmu->base)) - return PTR_ERR(pmu->base); - - pmu->irq = platform_get_irq(pdev, 0); - if (pmu->irq < 0) - return pmu->irq; - - ret = devm_request_irq(dev, pmu->irq, jh71xx_pmu_interrupt, - 0, pdev->name, pmu); - if (ret) - dev_err(dev, "failed to request irq\n"); + spin_lock_init(&pmu->lock); match_data = of_device_get_match_data(dev); if (!match_data) return -EINVAL; + if (match_data->pmu_parse_dt) { + ret = match_data->pmu_parse_dt(pdev, pmu); + if (ret) { + dev_err(dev, "failed to parse dt\n"); + return ret; + } + } + pmu->genpd = devm_kcalloc(dev, match_data->num_domains, sizeof(struct generic_pm_domain *), GFP_KERNEL); @@ -332,9 +358,6 @@ static int jh71xx_pmu_probe(struct platform_device *pdev) } } - spin_lock_init(&pmu->lock); - jh71xx_pmu_int_enable(pmu, JH71XX_PMU_INT_ALL_MASK & ~JH71XX_PMU_INT_PCH_FAIL, true); - ret = of_genpd_add_provider_onecell(np, &pmu->genpd_data); if (ret) { dev_err(dev, "failed to register genpd driver: %d\n", ret); @@ -383,6 +406,7 @@ static const struct jh71xx_pmu_match_data jh7110_pmu = { .num_domains = ARRAY_SIZE(jh7110_power_domains), .domain_info = jh7110_power_domains, .pmu_type = JH71XX_PMU_GENERAL, + .pmu_parse_dt = jh7110_pmu_general_parse_dt, }; static const struct of_device_id jh71xx_pmu_of_match[] = { -- 2.25.1