From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B3E8146F480 for ; Wed, 5 Aug 2026 13:04:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785935061; cv=none; b=fqfA9VivcjGaqk3Z3us1aBuEEGX5aE82WmAPhHUYlpIaGCspiRtzK2d9huv+Eid/Gf/Y1O91CSSMjsXiMOZ4R6HPuwqSXFpFcsZJMdxFGmh1Ng1R6Si9ywwYWm3Nua5RRMOK3s+uOEeKGdrEkBG66/Oa2dNKd7abFKu7+jjIPiI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785935061; c=relaxed/simple; bh=bEf2TdxqrsfETQHTsqCcWujzWjSGMWByaj6TVgxXCMs=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=X1AC/vuKI8R3DV+lzPjnhW96OKnU1unrwxZK5DTP2UUGkrZSS7LbOesf9XHu8EpfjWqlq4zcvlmP0Z2FKBaQ7A4u0IZznzLynw+5/qA7jJkMc1V6Cs2T43xoCErpvPXTRe/afhalqK/CUHmTGv6fBovnBsYQ68aBKFalgGbo/kc= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=dHgzt1cf; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=kJyuyVs0; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="dHgzt1cf"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="kJyuyVs0" Received: from pps.filterd (m0279863.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 675Bv1Qm2921773 for ; Wed, 5 Aug 2026 13:04:17 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= 9tO4+RAdzUgSn/0bwqvyhspSzxA4rGtcmvR6GRlgszg=; b=dHgzt1cfWHKULlsv wZNznNeUUj+QTA2jU2koJnxoYfOrQk6fTQ8eYgR2Bcc/HqssWU1Q5FneXuJKV6Nt X6a14+Ox1dVFT/nB3M15SW5l5i2ZMAmU3oQDwPN6dRJT+LU3ZlZzlifl8+/m6lx2 gV2xoSg767IzpEVjMlncAcNhJ+UOamZTaEvpYbCA/e0TvDsbRdulhJC97KfkGjYf D+AflNg7C/gAHawHpLeYiIoY7nqj8lQO1bDVtXonra5nXp3dx4TaMK//ae3lFGGG AeND3Jb67jRMoqKk7KiufgQWsTefISdSkYwjfUAIZ/LWlSZB6ZFQbRfoP19nMXnD DPydkA== Received: from mail-pg1-f199.google.com (mail-pg1-f199.google.com [209.85.215.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fv3w68esq-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 05 Aug 2026 13:04:16 +0000 (GMT) Received: by mail-pg1-f199.google.com with SMTP id 41be03b00d2f7-c89704da8c7so1519792a12.0 for ; Wed, 05 Aug 2026 06:04:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1785935056; x=1786539856; darn=vger.kernel.org; h=content-transfer-encoding:content-type:in-reply-to:from :content-language:references:cc:to:subject:user-agent:mime-version :date:message-id:from:to:cc:subject:date:message-id:reply-to :content-type; bh=9tO4+RAdzUgSn/0bwqvyhspSzxA4rGtcmvR6GRlgszg=; b=kJyuyVs09PoeHrTVgT3C3As4p9WFdk8Dx9eH8LGE8hgntdEJ0xVOh1CPkbYgXcdHy1 7Ci0F8jrCTUPtg9jyH9xaEuHD53hTtA1RpOS1ydKZ7ipmM6DISfLJIIw44YN9ier+vPV Nrs919AORa7Q/Hgf1k2s/VT/CB8qSstpdFcIB0V/yljNeYxLLjghHeZRZ03Q1CM9dH2M dlffANsSdXVoZrobKeWPsV3/9jHJ2z0PK3qSCU6sCvv9/hA50FvYXe3GFAcDu+VIHmEU USkpWNXs2dT1ZVfketX7FkUjMudKP3zdXa0Ir93cvzbMiW5bYssu4lLxEuNucco+gLVm 97Ww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785935056; x=1786539856; h=content-transfer-encoding:content-type:in-reply-to:from :content-language:references:cc:to:subject:user-agent:mime-version :date:message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=9tO4+RAdzUgSn/0bwqvyhspSzxA4rGtcmvR6GRlgszg=; b=IAkd5MsgZHHtfpTZeipMkC3rlcR7b/bXaJKf9y4//l8nY7PLgOkthaFZLQVtUCjwGv PHIpnzfUxxn9zt5L39Z56zKedO0G6IJlxTpCVVPA3VPWBU6c5DfdDKd4ddfnZFYv2LMy Kd7Bri5EOOP7YpIVp5KXGQAasmGXUE87hbsBzhA9UpaLGTtet7bxkwqponexFCd8phGZ Ubqm+laSucN5PzdqGmOD2QiOvieRRNvUYrxN/vwvshzdxL4Qn5LLCIk7vYc0PcsmoYso MnHu2Er9R4ufLW3MZUXKAekxWj2aywbh+aViZtP92pGoXdtj0ZTTIcZDGGtsWx/4T5By C6mw== X-Forwarded-Encrypted: i=1; AHgh+RpmSiHL2LLPnZ3rOiDLG+9D54wpYN5DKO69/4SOLmeWZFPbXbfcJ+uZMlafep84fDG7G0U3JjXgkANtUSs=@vger.kernel.org X-Gm-Message-State: AOJu0Yw3M0YJ98tKKdMH4ccyqNBG9UZyqx5tUlcVajgsR5wVj8pnL6/m oGRbjdHBvRyqvu2LMa+UUSB+WHUcpSVqCbxcYAqS89JbbN9kW3XwswpNmsr4X6rLke3mQehW7dx k5tN7ULWiMDWeSXAC+RbQD7tGCLo5V0uxw/icPZKY10wyMIsmQAQjXVWzqupTEZLdDsk= X-Gm-Gg: AR+sD13X9WNC+ppRAQq0ZeJsAN3UQBdctS7RloqUd5u55pBpKOsfwTwoOxPRoFpDenV UI1ZpoHsksRdxOJljYr6UCMtzXA9VVMuwySk1GuB+xUJT9wOdjoSomDs9v3tXM8J1E3mzRNJ/0j c7RY2kjb/Z8YHe2H65Px3sh+4Gc1sV8iGY51tpJKAUpFKG86n2HQJfbM4kfzJ1ZG44CCIhvYFjS UbSiQLELpI4D0/Cazk/voNtEO967K/w0RVbnneSoNWGyjrb+8gnyHbD03rwXnY4plS2gPA8Npd6 IjP8Eerbh/AGnYOjIcDoDaqr0HHZg8PhDN020aqXW3dZLoF3WJx3z9Bsswra3FHlMyzw7Gfae0o Bm+TmVVNaB8bp+FJHUWF5na1K44oXE6kAPdEIrT30ji95ySkDQTodGR+iwFs31ke269FCkwnd X-Received: by 2002:a05:6a00:2e11:b0:845:4888:74c5 with SMTP id d2e1a72fcca58-84f2e01746dmr7039483b3a.23.1785935056259; Wed, 05 Aug 2026 06:04:16 -0700 (PDT) X-Received: by 2002:a05:6a00:2e11:b0:845:4888:74c5 with SMTP id d2e1a72fcca58-84f2e01746dmr7039396b3a.23.1785935055669; Wed, 05 Aug 2026 06:04:15 -0700 (PDT) Received: from [10.133.33.159] (tpe-colo-wan-fw-bordernet.qualcomm.com. [103.229.16.4]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-84f2e2c6145sm831463b3a.12.2026.08.05.06.04.11 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 05 Aug 2026 06:04:15 -0700 (PDT) Message-ID: <1a89f834-93f3-4741-9979-39570af397af@oss.qualcomm.com> Date: Wed, 5 Aug 2026 21:04:09 +0800 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 1/3] ACPI: CPPC: Avoid unnecessary reads for full-width writes To: Christian Loehle , "Rafael J . Wysocki" , Viresh Kumar Cc: linux-pm@vger.kernel.org, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, Len Brown , Jie Zhan , Lifeng Zheng , Pierre Gondois , Sumit Gupta , Sudeep Holla , Ionela Voinescu , zhongqiu.han@oss.qualcomm.com References: <20260803210527.1285229-1-christian.loehle@arm.com> <20260803210527.1285229-2-christian.loehle@arm.com> Content-Language: en-US From: Zhongqiu Han In-Reply-To: <20260803210527.1285229-2-christian.loehle@arm.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Proofpoint-GUID: LrOOMZKVms31Bk3FfLoV-4vPhzYj8k7s X-Proofpoint-ORIG-GUID: LrOOMZKVms31Bk3FfLoV-4vPhzYj8k7s X-Authority-Analysis: v=2.4 cv=a48AM0SF c=1 sm=1 tr=0 ts=6a7334d0 cx=c_pps a=Oh5Dbbf/trHjhBongsHeRQ==:117 a=nuhDOHQX5FNHPW3J6Bj6AA==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yOCtJkima9RkubShWh1s:22 a=7CQSdrXTAAAA:8 a=EUspDBNiAAAA:8 a=CXDJWAA9LoG17zI0-BsA:9 a=QEXdDO2ut3YA:10 a=_Vgx9l1VpLgwpw_dHYaR:22 a=a-qgeE7W1pNrGK8U0ZQC:22 X-Proofpoint-Spam-Info: AW1haW4tMjYwODA1MDEwNSBTYWx0ZWRfX4mbozfVrj+l8 m3iMokW3kftEffNfh3lRNvA6woanvR4WI9Wxn62H4VfsRHC0MWJSy72+LTvklaJ+71wLt5l5Q/z atOKTO2vdOqS5NMROtC/tYGjygfSeJg= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODA1MDEwNSBTYWx0ZWRfXwDmsuf9ChGbq 8Z7Rha+TaJGCQKWrSUjgx+Vgh9Koq6PAU4nXhavbmJjeFAFmrHULkt5sjDT7AGq5bjAl1MC2983 6LHjN5lhSV1NSvyPnwHNV29BDEZ6q0rzCRPk72U++5mfOUQBksgK/okgpEw7L7HnQd/04tYpsDR xUMXfGGOTNlcyaDG5pk5ijfulwfeqzMZelwnBwOdCDP/syI00p0D12fvArXogl5GmA6uUmzvKki HRyH6r6c9j7buprmiJQr2FXw7MlyAW6ugKp/V5e6qzqJXynJvSiQuTusYvq9D9qI+tL8vz3X9pC EOADwZQ8mt8R9DCmrXOyiaAQYsLNYhAKIjq3VXrqwGy8DjH4XckcptcMNiKW77XaLz5I37y30h8 gP0tTqffFGzPQZF2eeXoTfDWWsosbEtxA2vvV5rxuGQJy5zgiFGqnWCelHlV2yzmjsWN+EpXUdP ySS6r6sYpNINhZ1u+eA== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-05_04,2026-08-04_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 clxscore=1015 suspectscore=0 spamscore=0 phishscore=0 adultscore=0 malwarescore=0 lowpriorityscore=0 priorityscore=1501 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608050105 On 8/4/2026 5:05 AM, Christian Loehle wrote: > SystemMemory GAS entries may describe a field within a wider access > unit, so cpc_write() reads the access unit before updating the field to > preserve the surrounding bits. It also does this when the field covers > the complete access unit. > > When the bit offset is zero and the register bit width equals the > resolved access width, the previous value cannot affect the result. Skip > the MMIO read and mask operation in that case. Retain rmw_lock because > another entry in the same _CPC package may share the access unit. > > Signed-off-by: Christian Loehle Nice optimization. Looks good to me. Reviewed-by: Zhongqiu Han > --- > drivers/acpi/cppc_acpi.c | 43 ++++++++++++++++++++++++---------------- > 1 file changed, 26 insertions(+), 17 deletions(-) > > diff --git a/drivers/acpi/cppc_acpi.c b/drivers/acpi/cppc_acpi.c > index 53d09ca98f06..9b8d68b44ea9 100644 > --- a/drivers/acpi/cppc_acpi.c > +++ b/drivers/acpi/cppc_acpi.c > @@ -1162,25 +1162,34 @@ static int cpc_write(int cpu, struct cpc_register_resource *reg_res, u64 val) > return -ENODEV; > } > > + /* > + * Only partial fields need the previous contents to preserve bits > + * outside the field. Keep serializing full-width writes because > + * another _CPC entry may share the access unit and require RMW. > + */ > raw_spin_lock_irqsave(&cpc_desc->rmw_lock, flags); > - switch (size) { > - case 8: > - prev_val = readb_relaxed(vaddr); > - break; > - case 16: > - prev_val = readw_relaxed(vaddr); > - break; > - case 32: > - prev_val = readl_relaxed(vaddr); > - break; > - case 64: > - prev_val = readq_relaxed(vaddr); > - break; > - default: > - raw_spin_unlock_irqrestore(&cpc_desc->rmw_lock, flags); > - return -EFAULT; > + > + if (reg->bit_offset || reg->bit_width != size) { > + switch (size) { > + case 8: > + prev_val = readb_relaxed(vaddr); > + break; > + case 16: > + prev_val = readw_relaxed(vaddr); > + break; > + case 32: > + prev_val = readl_relaxed(vaddr); > + break; > + case 64: > + prev_val = readq_relaxed(vaddr); > + break; > + default: > + raw_spin_unlock_irqrestore(&cpc_desc->rmw_lock, > + flags); > + return -EFAULT; > + } > + val = MASK_VAL_WRITE(reg, prev_val, val); > } > - val = MASK_VAL_WRITE(reg, prev_val, val); > } > > switch (size) { -- Thx and BRs, Zhongqiu Han