Received: by 2002:a05:7412:251c:b0:e2:908c:2ebd with SMTP id w28csp1232950rda; Mon, 23 Oct 2023 06:43:33 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGpCGQejvvRnwhwlr2qDurj2Rz+Hcx6VxcBOq0KBWUCQZtWnLskNRzsPzcNXhCEQLrolWHx X-Received: by 2002:a92:b10:0:b0:357:5751:7aa9 with SMTP id b16-20020a920b10000000b0035757517aa9mr9768224ilf.2.1698068613383; Mon, 23 Oct 2023 06:43:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698068613; cv=none; d=google.com; s=arc-20160816; b=FtrDpPq3JU87oFGFWH9WrkO+wMcgxEMBDWA9BQqsv6F8NiftTj5fTBcsZ9bS+93YSy Zt8hruhABn0/YBbWwIRBE6WjJ829NNkic8GAuSH11cveC8XYgdNPvNMs9BJcwRLmNnD/ ByzQCtVJUjoLuQupW8uXRzTrB4i4sRT1p1hb94pIF9fkkFh9t2Sicyd1rdDEprymjJjd 2VfQN+yJsRKahU8JWRDmrIAn0tqoyAQAZnT4SpVfdvqox6e3ssFqyE4Kx/BpK9MH/evw NKj8k8GS36n35GYc8iQd8aTcA3JbPMttb6yUDUvukttc2weQ99oNBCYwvRVBm9dcZ3oa IDpA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:in-reply-to:from :references:cc:to:content-language:subject:user-agent:mime-version :date:message-id; bh=3MOvtTd73ozsCZg4N7EGyzAu/R/Y6I3HvcLAA2ZyYYc=; fh=1o5nvy+gPaxd3z+cupTtV7uKqz22RRau0KxRJ2VXLC4=; b=BvVczxF/urbneU5x6a4aXiQGrdEJWs9xoOp9Dnw2Prijk0m6Yjmdn4a7KBXRjVnft/ cuVA3992xISoaPXOmj7EAW47ATmxFga3jOHikvV1FSRxGOUiAWuB698wobl8Slc6Sblv Bvl77TnQ7+bwFe0odGq4U356PeySAI32e+5T8KtUo36m1nxJ4fso5zN7zMo1sgKiVV8e SwNoK+XkEDL2RhcxAln1CRyjzpbJleusH4ABYFn/gTqRk8hn9laAJwbz/skKA4Kky+aL mZuCY1kW3+9lGRasU40neJbE85Qwp3CYWvldcS6KDCCqzUFypapgDHCGdTOR01WKx2CB VP+A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from pete.vger.email (pete.vger.email. [2620:137:e000::3:6]) by mx.google.com with ESMTPS id d22-20020a637356000000b005af21fd2c7dsi6538534pgn.412.2023.10.23.06.43.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Oct 2023 06:43:33 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) client-ip=2620:137:e000::3:6; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by pete.vger.email (Postfix) with ESMTP id 8496580A9997; Mon, 23 Oct 2023 06:43:30 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at pete.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230356AbjJWNnX (ORCPT + 99 others); Mon, 23 Oct 2023 09:43:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47854 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229986AbjJWNnV (ORCPT ); Mon, 23 Oct 2023 09:43:21 -0400 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 6A9F691; Mon, 23 Oct 2023 06:43:19 -0700 (PDT) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 394112F4; Mon, 23 Oct 2023 06:44:00 -0700 (PDT) Received: from [10.57.82.113] (unknown [10.57.82.113]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id BD3843F762; Mon, 23 Oct 2023 06:43:16 -0700 (PDT) Message-ID: <310b8150-3554-4cca-8ec9-8996955cc3a1@arm.com> Date: Mon, 23 Oct 2023 14:44:08 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v3 7/8] thermal: exynos: split initialization of TMU and the thermal zone Content-Language: en-US To: Marek Szyprowski , Mateusz Majewski Cc: Bartlomiej Zolnierkiewicz , linux-pm@vger.kernel.org, linux-samsung-soc@vger.kernel.org, Krzysztof Kozlowski , "Rafael J. Wysocki" , Daniel Lezcano , Amit Kucheria , Zhang Rui , Alim Akhtar , Liam Girdwood , Mark Brown , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org References: <20231003111638.241542-1-m.majewski2@samsung.com> <20231003111638.241542-8-m.majewski2@samsung.com> <91b3ff5a-cfdf-4bba-806e-093a90746d86@arm.com> From: Lukasz Luba In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-0.8 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,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 pete.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (pete.vger.email [0.0.0.0]); Mon, 23 Oct 2023 06:43:30 -0700 (PDT) On 10/23/23 14:33, Marek Szyprowski wrote: > On 23.10.2023 14:59, Lukasz Luba wrote: >> On 10/3/23 12:16, Mateusz Majewski wrote: >>> This will be needed in the future, as the thermal zone subsystem might >>> call our callbacks right after devm_thermal_of_zone_register. Currently >>> we just make get_temp return EAGAIN in such case, but this will not be >>> possible with state-modifying callbacks, for instance set_trips. >>> >>> Signed-off-by: Mateusz Majewski >>> --- >>> v1 -> v2: We take clocks into account; exynos_tmu_initialize needs both >>>    clocks, as tmu_initialize might use the base_second registers. >>> However, >>>    exynos_thermal_zone_configure only needs clk. >>> >>>   drivers/thermal/samsung/exynos_tmu.c | 104 +++++++++++++++------------ >>>   1 file changed, 60 insertions(+), 44 deletions(-) >>> >>> diff --git a/drivers/thermal/samsung/exynos_tmu.c >>> b/drivers/thermal/samsung/exynos_tmu.c >>> index 7138e001fa5a..343e27c61528 100644 >>> --- a/drivers/thermal/samsung/exynos_tmu.c >>> +++ b/drivers/thermal/samsung/exynos_tmu.c >>> @@ -251,25 +251,8 @@ static void sanitize_temp_error(struct >>> exynos_tmu_data *data, u32 trim_info) >>>   static int exynos_tmu_initialize(struct platform_device *pdev) >>>   { >>>       struct exynos_tmu_data *data = platform_get_drvdata(pdev); >>> -    struct thermal_zone_device *tzd = data->tzd; >>> -    int num_trips = thermal_zone_get_num_trips(tzd); >>>       unsigned int status; >>> -    int ret = 0, temp; >>> - >>> -    ret = thermal_zone_get_crit_temp(tzd, &temp); >>> -    if (ret && data->soc != SOC_ARCH_EXYNOS5433) { /* FIXME */ >>> -        dev_err(&pdev->dev, >>> -            "No CRITICAL trip point defined in device tree!\n"); >>> -        goto out; >>> -    } >>> - >>> -    if (num_trips > data->ntrip) { >>> -        dev_info(&pdev->dev, >>> -             "More trip points than supported by this TMU.\n"); >>> -        dev_info(&pdev->dev, >>> -             "%d trip points should be configured in polling mode.\n", >>> -             num_trips - data->ntrip); >>> -    } >>> +    int ret = 0; >>>         mutex_lock(&data->lock); >>>       clk_enable(data->clk); >>> @@ -280,32 +263,63 @@ static int exynos_tmu_initialize(struct >>> platform_device *pdev) >>>       if (!status) { >>>           ret = -EBUSY; >>>       } else { >>> -        int i, ntrips = >>> -            min_t(int, num_trips, data->ntrip); >>> - >>>           data->tmu_initialize(pdev); >>> - >>> -        /* Write temperature code for rising and falling threshold */ >>> -        for (i = 0; i < ntrips; i++) { >>> - >>> -            struct thermal_trip trip; >>> - >>> -            ret = thermal_zone_get_trip(tzd, i, &trip); >>> -            if (ret) >>> -                goto err; >>> - >>> -            data->tmu_set_trip_temp(data, i, trip.temperature / >>> MCELSIUS); >>> -            data->tmu_set_trip_hyst(data, i, trip.temperature / >>> MCELSIUS, >>> -                        trip.hysteresis / MCELSIUS); >>> -        } >>> - >>>           data->tmu_clear_irqs(data); >>>       } >>> + >>> +    mutex_unlock(&data->lock); >>> +    clk_disable(data->clk); >>> +    if (!IS_ERR(data->clk_sec)) >>> +        clk_disable(data->clk_sec); >> >> In all other places the clock is strictly protected inside the critical >> section, but not here. In this code in theory on SMP (especially with >> big.LITTLE system with different speeds of CPUs) this could lead to >> disabling the clocks just after other CPU acquired the mutex and enabled >> them (in order to use the HW regs). > > > Clocks have internal atomic counters, so it is safe to disable them > after leaving critical section. The clock would still be enabled in the > mentioned case. Fair enough. So I would just put them there for code cleanup and aliment with all other places (otherwise it looks odd).