From nobody Mon Feb 9 10:20:47 2026 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 6ED5E23D29F for ; Fri, 26 Dec 2025 18:56:43 +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=1766775406; cv=none; b=I/bCF+vBfl3Va3e6MqENdCXmzStfUcDUt4j4I/l+UFvEnIVK4uzoy5sCQMkYdLVKBMjD8bXITOX8KI6hhBkuRADsa/JOX8c39YDcYmm19KGCLMzlH65paM9h828rSEmU7rS5xszHU6GZ5MGoevTLZ0CfCpDD2m6zcT+o4gPL+os= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766775406; c=relaxed/simple; bh=VbqIQMroIlq6JMMANB+DTWjTL1f1TuzU3o0hZWDdc+U=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=PGuhz3B0emvYh0kpneON8kavkXtBxK/MZ/eSsw7eDr+smeMKos8UN/Z7ELq3ErIqLvMgBkxy54JX/06+sNAhF1+tBEDUDCHMAdX5HDM0gPW6zm4NIjOoTzkMRooNSECmInl0pbIysw5ZY+9WQDGSMVMcRv5KMaAe06JdxVuMfq0= 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=lHhhSnoM; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=TxJaYJuu; 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="lHhhSnoM"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="TxJaYJuu" Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5BQ8bcvu2454362 for ; Fri, 26 Dec 2025 18:56:43 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= maLQn0/g6TQ0tBQyQOJF0vW4h969wzxQrbt5sqlv9hw=; b=lHhhSnoMJYdVHeZl PpIZjGnobDA0orpmLSNWu5yRdrBXr9oszi3rQDyEv+lQOTJjaVbfOPVML8xvikU1 D+LZJwJXWh7+r5QvfglSw8rePqNVjSOZdaqKLsjrSsJLIz1++52kTlKM9Rhw9Nul 3SH3uGD4iTA4/5eNrW0zMSeQouW7f1766xlQyrVy5nKMfnsq1wxkMmtHp2j0EIYu aSvpRcyT4PA9r61UsQyphtoAZqljP63+jKymcFStM0Uf9F+dGuGDx9K5WRGc9BHX QWk5G3zgawnMXT7qfErrOa7XtufXFCOxyDH2dCrKLSE19uQpeHbW4H3iP4d44cr3 nwWEIw== Received: from mail-pf1-f200.google.com (mail-pf1-f200.google.com [209.85.210.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4b8hwe4vbx-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 26 Dec 2025 18:56:42 +0000 (GMT) Received: by mail-pf1-f200.google.com with SMTP id d2e1a72fcca58-7bad1cef9bcso15455092b3a.1 for ; Fri, 26 Dec 2025 10:56:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1766775402; x=1767380202; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=maLQn0/g6TQ0tBQyQOJF0vW4h969wzxQrbt5sqlv9hw=; b=TxJaYJuuWbbNvQxrDhQyw0ruwSk7fchj8xe+/WOWxND0fkA45R/MgS3YB0miQJ6nTO IupxwIE7IQW7u7NkFEe7WhZQkB5NulQ5oO68fpUuufShrTM8/Ib3f39vfMugyAYgH0vq fJm7XubyRCyj+0V/o2u4s1KKDtN/RKxANKp749vsy10AMR0rzs1KkLFLYoDzAdwbHJnL E27ZQdOUzZYWBotQq2tq+IoPfRpiykkCAxZFB0grOjlLyIW/2FW0hdJZJmdViJk0WD2M Z3S0uccdFZQnX3xS+30pyg3Xu2Jwtv4kGFUqgVKXyrEIcjJ8RBzUbH6ZB7U6lEACZ2gs ebhg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766775402; x=1767380202; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=maLQn0/g6TQ0tBQyQOJF0vW4h969wzxQrbt5sqlv9hw=; b=JYuAXWKWYcKUJ7946bjZfBqs4VZa5X4f8uMFBBBfUdlv1MRlE8o3rvCR1FnyI2+RzA 7O4RU/xv+XseDoOlal0vDl1ElpeYk1WwHZkaWtbZKg4vEbdcYG9IuRuc/V6Q/pu9K4T3 HXTtrHW4X4igPAWGNxlnGRkyTcgciua77y/rxaR4Xpdve6Vfq8QVwJlIcRYDBnFhK7aA aD1y1YB9ys1t9GoLL182xoZ9ADyv4t9uPSMYHuFsQomikzhEE5BaugeA61hVCohssO40 EXce2pXuXFsVhaWAopupM2mMqOJHgufPsPOISuhDgAigMVKAoYfm+TstcI7RYaqUSbXw ufxg== X-Gm-Message-State: AOJu0YwkoW2jOhHAiA/sOksAzLtyDNuFURLzXy19XCAZpkC/yhiJiYj4 gP6r8A4l/wtay1m/0/uH9imwdLdW97QxwXhQLFeL19qMSUhTi+aMI+sgyZRxOYv+GLspMWygA6C rPxPjpEAv07jZEiUYUTRiHYosCYmCYDYRqD+7NDUI0feDhb8PCk5tQ06/wUI5cPhCquc= X-Gm-Gg: AY/fxX5hz5M7YI4xIIjWHrJNNfZVxVwCWx/p6eYgmbNUmXpo1DusrpcZgwpXBWxCkyF yRl9m17Zng5pRDSmppZ5fz2DMo/qVT1ROfm0Mmeslxx3p8Zeexop0hCdglKbJxK2H5p8qUkL37R 1cLTVs3/8/1Jcag8RjuMumUjrkr1G2AdREHJvKYCg9JQ87jr24Apc7wuG5R1TXBrrSVumBhr+uS XvvOw/kVIlWc+Hgt80eg/j+NjU2AfdGCHgg4vWNTcqBe+RLNP2jengR47RFXhpZY78t7b98BUt3 +GRaPwsnnwTmUvveHE0lG03Mz5Q6v/xWUmzepcbpb6Hai3tv0eJrgdHDTEpbqgkmVJFh/rZg5uC tljnD3ZfhYDaNO0KWWD6/4JF/CqN/zjHPZh6/oIpwT4cRSg== X-Received: by 2002:a05:6a00:1d27:b0:7f7:1857:8456 with SMTP id d2e1a72fcca58-7ff6667cdb2mr20548010b3a.55.1766775402137; Fri, 26 Dec 2025 10:56:42 -0800 (PST) X-Google-Smtp-Source: AGHT+IERWjkBwyqqrCPa7tb3AVg5b/stcMwi80y4amP/imcusyJfTWAvkM8b4jFCAfc7rNtZDEIG3g== X-Received: by 2002:a05:6a00:1d27:b0:7f7:1857:8456 with SMTP id d2e1a72fcca58-7ff6667cdb2mr20547997b3a.55.1766775401707; Fri, 26 Dec 2025 10:56:41 -0800 (PST) Received: from hu-spratap-hyd.qualcomm.com ([202.46.22.19]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7ff7e88cd71sm22638187b3a.64.2025.12.26.10.56.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Dec 2025 10:56:41 -0800 (PST) From: Shivendra Pratap Date: Sat, 27 Dec 2025 00:26:33 +0530 Subject: [PATCH v22 1/2] Documentation: ABI: Add sysfs-class-reboot-mode-reboot_modes Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251227-next-15nov_expose_sysfs-v22-1-2d153438ba19@oss.qualcomm.com> References: <20251227-next-15nov_expose_sysfs-v22-0-2d153438ba19@oss.qualcomm.com> In-Reply-To: <20251227-next-15nov_expose_sysfs-v22-0-2d153438ba19@oss.qualcomm.com> To: Sebastian Reichel , Bartosz Golaszewski , Bjorn Andersson Cc: linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-pm@vger.kernel.org, Bartosz Golaszewski , Shivendra Pratap , Bartosz Golaszewski , Sebastian Reichel X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1766775395; l=2330; i=shivendra.pratap@oss.qualcomm.com; s=20250710; h=from:subject:message-id; bh=VbqIQMroIlq6JMMANB+DTWjTL1f1TuzU3o0hZWDdc+U=; b=YwXhOppQlqYvmBBf4fFNIoB7tI3zaKTtQvQ09Aq2dEY2KHHMWL6LPmNCn4iulQmTqKnjZWxr2 IWYEMyCGav/BcyUaB38KPl+ey2tvAJPHkVy/02G+lZ3f2HmvJJSDVPl X-Developer-Key: i=shivendra.pratap@oss.qualcomm.com; a=ed25519; pk=CpsuL7yZ8NReDPhGgq6Xn/SRoa59mAvzWOW0QZoo4gw= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI2MDE3NyBTYWx0ZWRfX2nn+zW2tCM3h 3MP/A3Sd9uBUZJQxw9VewuNUz9d5QbsIsWJw9E0Oihp5nknBvlerFCyImFkkqB4h0NBN0Qe8uEi 4P82KnzoRE5Crc9MzE+Ablnm6IvfRNulNeikBXEj7h30e87ZhGAUSwIrA56Z6vwyuVT/pCtOVr9 pzDwTjIqFihCWZYXPZj7H93+VO1nxwX8Z0WGAhgpvew5HX9n/kAs0A6duqX27+jigSwrfTAczqf R1FlrvNz8Pps6kPrNhCuUVF7VuyTAbFng/M0SFKlG5pyy8/9Dw3/In/JxgXQzeVxV4bAaNy09T7 CEk0ZyUaN270H5BsMH9B6eQrGOePEDXIw+ND+6bi+Jt5rfSz5JyGOU38spQ/RCYt0iz12bhp8PY gcbjY0SVTO7lBMhUYNymPDDrQCvEGx7jORO4Bm9WB12J4HJRAC+bg9XLXnIUsp/gY+ReMr31GKi 5DtSelR1YrFxGnoCaJg== X-Proofpoint-GUID: _KFcn6Zy1ToLxbVN5tkWoQ7hsgGX_Taj X-Proofpoint-ORIG-GUID: _KFcn6Zy1ToLxbVN5tkWoQ7hsgGX_Taj X-Authority-Analysis: v=2.4 cv=P9c3RyAu c=1 sm=1 tr=0 ts=694eda6a cx=c_pps a=mDZGXZTwRPZaeRUbqKGCBw==:117 a=fChuTYTh2wq5r3m49p7fHw==:17 a=IkcTkHD0fZMA:10 a=wP3pNCr1ah4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=VwQbUJbxAAAA:8 a=QX4gbG5DAAAA:8 a=EUspDBNiAAAA:8 a=LKyF0dicRlewKW4vAhwA:9 a=QEXdDO2ut3YA:10 a=zc0IvFSfCIW2DFIPzwfm:22 a=AbAUZ8qAyYyZVLSsDulk:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-26_05,2025-12-26_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 phishscore=0 lowpriorityscore=0 impostorscore=0 malwarescore=0 bulkscore=0 clxscore=1015 priorityscore=1501 spamscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2512260177 Add ABI documentation for /sys/class/reboot-mode/*/reboot_modes, a read-only sysfs attribute exposing the list of supported reboot-mode arguments. This file is created by reboot-mode framework and provides a user-readable interface to query available reboot-mode arguments. Reviewed-by: Bartosz Golaszewski Reviewed-by: Sebastian Reichel Signed-off-by: Shivendra Pratap --- .../testing/sysfs-class-reboot-mode-reboot_modes | 36 ++++++++++++++++++= ++++ 1 file changed, 36 insertions(+) diff --git a/Documentation/ABI/testing/sysfs-class-reboot-mode-reboot_modes= b/Documentation/ABI/testing/sysfs-class-reboot-mode-reboot_modes new file mode 100644 index 0000000000000000000000000000000000000000..dc27cb4e698eebc99e72821225e= 8bf3bbe7cc7e6 --- /dev/null +++ b/Documentation/ABI/testing/sysfs-class-reboot-mode-reboot_modes @@ -0,0 +1,36 @@ +What: /sys/class/reboot-mode//reboot_modes +Date: December 2025 +KernelVersion: 6.19-rc1 +Contact: linux-pm@vger.kernel.org + Description: + This interface exposes the reboot-mode arguments + registered with the reboot-mode framework. It is + a read-only interface and provides a space + separated list of reboot-mode arguments supported + on the current platform. + Example: + recovery fastboot bootloader + + The exact sysfs path may vary depending on the + name of the driver that registers the arguments. + Example: + /sys/class/reboot-mode/nvmem-reboot-mode/reboot_modes + /sys/class/reboot-mode/syscon-reboot-mode/reboot_modes + /sys/class/reboot-mode/qcom-pon/reboot_modes + + The supported arguments can be used by userspace to + invoke device reset using the standard reboot() system + call interface, with the "argument" as string to "*arg" + parameter along with LINUX_REBOOT_CMD_RESTART2. + + A driver can expose the supported arguments by + registering them with the reboot-mode framework + using the property names that follow the + mode- format. + Example: + mode-bootloader, mode-recovery. + + This attribute is useful for scripts or initramfs + logic that need to programmatically determine + which reboot-mode arguments are valid before + triggering a reboot. --=20 2.34.1 From nobody Mon Feb 9 10:20:47 2026 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 51606283FDB for ; Fri, 26 Dec 2025 18:56:46 +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=1766775409; cv=none; b=PaZhpJYOnPTcO44nHoUFRFCi7qg5tixrt2fOssjqu0hOrujlw8zaLm2O0OZMYk+EhrHMHC/o0ze3mR3oIQlezLhCQ/wPWKb1EbQu9ymAssqB33zf/0/AQSAi+I13lPrXy3Qd0+kqgaqThelzbpwIU7snRxkpV1vY+9BgeeEfG/w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766775409; c=relaxed/simple; bh=wPXe6SW3yPWML0XHCTsiC3JvUhngTfoBSWSCPop8FdM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=RzaULQRxTtwbBKXTtaDizYBI8azzDTqRZZrHmIE1QnmzIZdgff7GkEXvNCRVEpNG+vmC5h56YTbcX9dYQ6o69W/+5A3WQVQmMH+A6jnGfDPb52rcUfRw92F/t1WLzZ2fLMQECMdsijDg1NbYCg48eRnqWtTS/8Q5xV0w5fLfSLA= 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=kidUAE2w; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Co99KKmm; 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="kidUAE2w"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Co99KKmm" Received: from pps.filterd (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5BQ94LhX176980 for ; Fri, 26 Dec 2025 18:56:45 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= zJ4utG9reyisAFKwQHOylIbjjaGeNr2J4MMS4CXniCY=; b=kidUAE2wiBwi0LFr UbegkFSfM5QkDcbBQOfD1U1ufU6eNNKrTnxydFyFBlR/LvTShGsAjux4GymGnxqs VdaK+gaKafa4j0hP6jgy+98Nc9QFpmbXthuvmTQZIc3vNUiLmK3Xcx65kJTFuK1Y sidB2p/V1yoiIF5aon3j7fwkFmBzwkM/BHBJv9X99Cs7y+mMtR/RZ12c0TsTbMc3 UW7EWAGOjAN3pYtXUW4f+V0tjpLJXUNt3CmwyHi6npJUKMfdr1LspojHzcNFN7wN 9HghqBX9LyccMxqA3wNZRuo+wv8+nGByY6A2HfNV+QhXp75JQRFoRiUPGYEcOsTG Z3FLqA== Received: from mail-pf1-f197.google.com (mail-pf1-f197.google.com [209.85.210.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4b9qdk922r-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 26 Dec 2025 18:56:45 +0000 (GMT) Received: by mail-pf1-f197.google.com with SMTP id d2e1a72fcca58-804c73088daso3351344b3a.0 for ; Fri, 26 Dec 2025 10:56:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1766775405; x=1767380205; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=zJ4utG9reyisAFKwQHOylIbjjaGeNr2J4MMS4CXniCY=; b=Co99KKmmlv76j3DGRPDfhCioSwDIqR4lbF/VtVD90XGcM5BExjuGysKdPAhptI26ZH MHhBLdQQaEjdif8wN6R3XTFT0UIla3nEMGP0pavRxMI2XRKc/lzjUOREWEFWUsJgaPIr +/NQDvUtpk35FdwGAulXoRgS6BrtBwwrn4MsP8kiTgv5HDDanJBRn03y7H0c06bMErto m8d5eyeLCCLuGt5awYXThHd9h8MPfdTnxBbkxRLZqTFn8/RWjKZl+iNi9KHXursGebaw PwvCVUIzNhG1xqK4iP/QzasqlpVzREDlDl2d2AmEMDBMkVeOHdFQ1WATvTA0uWzHExVE 4H3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766775405; x=1767380205; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=zJ4utG9reyisAFKwQHOylIbjjaGeNr2J4MMS4CXniCY=; b=O9+lhIdmLj6cjwQD+xeJA3wNxAZKMJWqR9pk9wsjiBoBKAEE5LdwFZpdxo23v2VdJt iwVkukctdEdQtpwaZu95e7vfGZcRC292YhgkExn2OFKUmwrPmLJgzsShNeM/e0XX1Kod wcGI8KOnjJf9CBUGaQN1aAyD1+AeO4DGyjODWEg97qZpP0yji9d8xkWdpPmUDpcdOPoo yvAGMCJSkIz/bR246WSwWAONzYY0acL5gZjXoyl3XBzUqMhET21V97ZPIer61wZW7IZp 82oMzvN9iEPq64oTciBddgIF9qdjdf8ZCeS224P3m0qx8fEXFklNUPys9UGEDZ162gct Kqfw== X-Gm-Message-State: AOJu0YzRQ/RXev0BUV50I5YoDWjquvLF3gUXcJmwJch+M9UI+rwrmFn7 SJtdi30kjUX2bBq3GnRE3cKXf67ijXYAO+cdLTGvO6Z8CKTEoFJV+eh8qAJcy2pUVlqCCTbvOIK I3a9Bi0i+pLPComaOfkFmF9b8FEVlJfYncBQpk5sNNHDJ1IbEuXoNkiYkW5wK58z8rL0= X-Gm-Gg: AY/fxX4Ji670/zi4H1tpeSjsM9+D4PZHeYc3ZB7FJc6kfImgUoaTZsJ9EL18sIvPjsN TSnSYAXHoapcL0pofET63mWtTMjp/L4oMBV9rvcoAzb6iMzxhiW4rqVIfcnftbTWdXvNPpQZY7g FkrmfWe039hUlkTcyohzgOef/kgXTBXLLzl6hGVjjo82U5qLj7fLL+cUV8J8bS1bbKV2kx/X1t+ E7GTlrSQhNhM44Wxqhyp6Tg90Ia2E2pBckmV/GHpYWJZkBna2wry5CwUjCYwt09MDLh4H3zqYzY cN6PDaCthkyTN+rT8Rb3A4xqdXQK5NiwbuoFxYm4/8QC7YhKwJ0mawgeFn3x/V1JHxXz0PiQ5xg yQ4HQ0h6N6gAxRDjoKLOudGvYBMITbyeXXpBlGgqA/uNwHg== X-Received: by 2002:a05:6a00:451c:b0:7e8:3fcb:bc46 with SMTP id d2e1a72fcca58-7ff54c01878mr23601829b3a.27.1766775404843; Fri, 26 Dec 2025 10:56:44 -0800 (PST) X-Google-Smtp-Source: AGHT+IG5LYf5gwF5Mw0rW6Bn0JmyCVj1YI+U4fm5OEfHUcNrtUU/4RUIo0u+RAgSisIwlBGpKyyHLg== X-Received: by 2002:a05:6a00:451c:b0:7e8:3fcb:bc46 with SMTP id d2e1a72fcca58-7ff54c01878mr23601806b3a.27.1766775404326; Fri, 26 Dec 2025 10:56:44 -0800 (PST) Received: from hu-spratap-hyd.qualcomm.com ([202.46.22.19]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7ff7e88cd71sm22638187b3a.64.2025.12.26.10.56.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Dec 2025 10:56:44 -0800 (PST) From: Shivendra Pratap Date: Sat, 27 Dec 2025 00:26:34 +0530 Subject: [PATCH v22 2/2] power: reset: reboot-mode: Expose sysfs for registered reboot_modes Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251227-next-15nov_expose_sysfs-v22-2-2d153438ba19@oss.qualcomm.com> References: <20251227-next-15nov_expose_sysfs-v22-0-2d153438ba19@oss.qualcomm.com> In-Reply-To: <20251227-next-15nov_expose_sysfs-v22-0-2d153438ba19@oss.qualcomm.com> To: Sebastian Reichel , Bartosz Golaszewski , Bjorn Andersson Cc: linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-pm@vger.kernel.org, Bartosz Golaszewski , Shivendra Pratap X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1766775395; l=6599; i=shivendra.pratap@oss.qualcomm.com; s=20250710; h=from:subject:message-id; bh=wPXe6SW3yPWML0XHCTsiC3JvUhngTfoBSWSCPop8FdM=; b=zQNhHrh6qDreTMfLnbSSuMfTnxTaPWa6u0uL6c1Ld3NUDWM/Th0uvKnrtp+iGX8On2hpd6fAZ nSE1e5cqdxWA0AT+enICXrvwj6384uLTTyazYp/J+2XjnOwrAZDp+bM X-Developer-Key: i=shivendra.pratap@oss.qualcomm.com; a=ed25519; pk=CpsuL7yZ8NReDPhGgq6Xn/SRoa59mAvzWOW0QZoo4gw= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI2MDE3NyBTYWx0ZWRfX36ltxJSpdC7Y WQFhlrsqnWaliE/0KJol7k3Nfe2q/WyrlTGIg9vKkI6Aj6019RVfQU9YPTD8tqmCeVi+TX+kPKr E/7OY2+HtgprKjvcwBlBSHPUqxxvY4nGflndz0Vouqj5mzKF21THXH0uymFZUPtmoh0Yc+5YtVx 0AB1A6ZmkWI0Pan6gWUntb30GtjWa58MyKVgAGahdTwLWXG64vAoAG2cZit4HDvw/AimOIKMKV9 gLSgBOJNq7vBtWqLea7C1Z1mbIiOQSsSO2FTXbflf486zewdZaKyGN2bdohv1eLMwK0ilFxRxP8 Jpx6/0MWI26KWDlAOBkTuhuzcfMCaXgOcvtOyMH2u3XlxOsifm4TMJMmslq6aHUlMwV2WiZieF+ TSVuBvCUk5jYSHB3WgqdR+iwyvfLjsRxF00V0oDC+/78+cK+TOFhZZRs6mg3JxQoQYAeeZIwE3T Z2nPCmQUwuOZ6ivFdJw== X-Proofpoint-GUID: HBWSjV_FWqnM46QE6u9mNtN_1JuA7NuC X-Authority-Analysis: v=2.4 cv=br9BxUai c=1 sm=1 tr=0 ts=694eda6d cx=c_pps a=rEQLjTOiSrHUhVqRoksmgQ==:117 a=fChuTYTh2wq5r3m49p7fHw==:17 a=IkcTkHD0fZMA:10 a=wP3pNCr1ah4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=s8YR1HE3AAAA:8 a=PEngcyRGguBFGVBpi14A:9 a=QEXdDO2ut3YA:10 a=2VI0MkxyNR6bbpdq8BZq:22 a=jGH_LyMDp9YhSvY-UuyI:22 X-Proofpoint-ORIG-GUID: HBWSjV_FWqnM46QE6u9mNtN_1JuA7NuC X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-26_05,2025-12-26_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 priorityscore=1501 spamscore=0 adultscore=0 clxscore=1015 bulkscore=0 suspectscore=0 impostorscore=0 phishscore=0 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2512260177 Currently, there is no standardized mechanism for userspace to discover which reboot-modes are supported on a given platform. This limitation forces tools and scripts to rely on hardcoded assumptions about the supported reboot-modes. Create a class 'reboot-mode' and a device under it to expose a sysfs interface to show the available reboot mode arguments to userspace. Use the driver_name field of the struct reboot_mode_driver to create the device. For device-based drivers, configure the device driver name as driver_name. This results in the creation of: /sys/class/reboot-mode//reboot_modes This read-only sysfs file will exposes the list of supported reboot modes arguments provided by the driver, enabling userspace to query the list of arguments. Signed-off-by: Shivendra Pratap --- drivers/power/reset/reboot-mode.c | 139 ++++++++++++++++++++++++++++++++++= +++- include/linux/reboot-mode.h | 1 + 2 files changed, 137 insertions(+), 3 deletions(-) diff --git a/drivers/power/reset/reboot-mode.c b/drivers/power/reset/reboot= -mode.c index fba53f638da04655e756b5f8b7d2d666d1379535..96d0201697a539c6d048dac021d= b97e4e3063366 100644 --- a/drivers/power/reset/reboot-mode.c +++ b/drivers/power/reset/reboot-mode.c @@ -6,10 +6,12 @@ #include #include #include +#include #include #include #include #include +#include =20 #define PREFIX "mode-" =20 @@ -19,6 +21,42 @@ struct mode_info { struct list_head list; }; =20 +struct sysfs_data { + const char *mode; + struct list_head list; +}; + +static ssize_t reboot_modes_show(struct device *dev, struct device_attribu= te *attr, char *buf) +{ + struct sysfs_data *sysfs_info; + struct list_head *head; + ssize_t size =3D 0; + + head =3D dev_get_drvdata(dev); + if (!head) + return -ENODATA; + + list_for_each_entry(sysfs_info, head, list) + size +=3D sysfs_emit_at(buf, size, "%s ", sysfs_info->mode); + + if (!size) + return -ENODATA; + + return size + sysfs_emit_at(buf, size - 1, "\n"); +} +static DEVICE_ATTR_RO(reboot_modes); + +static struct attribute *reboot_mode_attrs[] =3D { + &dev_attr_reboot_modes.attr, + NULL, +}; +ATTRIBUTE_GROUPS(reboot_mode); + +static const struct class reboot_mode_class =3D { + .name =3D "reboot-mode", + .dev_groups =3D reboot_mode_groups, +}; + static unsigned int get_reboot_mode_magic(struct reboot_mode_driver *reboo= t, const char *cmd) { @@ -62,6 +100,61 @@ static int reboot_mode_notify(struct notifier_block *th= is, return NOTIFY_DONE; } =20 +static int reboot_mode_create_device(struct reboot_mode_driver *reboot) +{ + struct sysfs_data *sysfs_info; + struct sysfs_data *next; + struct list_head *head; + struct mode_info *info; + int ret; + + head =3D kzalloc(sizeof(*head), GFP_KERNEL); + if (!head) { + ret =3D -ENOMEM; + goto error; + } + + INIT_LIST_HEAD(head); + + list_for_each_entry(info, &reboot->head, list) { + sysfs_info =3D kzalloc(sizeof(*sysfs_info), GFP_KERNEL); + if (!sysfs_info) { + ret =3D -ENOMEM; + goto error; + } + + sysfs_info->mode =3D kstrdup_const(info->mode, GFP_KERNEL); + if (!sysfs_info->mode) { + kfree(sysfs_info); + ret =3D -ENOMEM; + goto error; + } + + list_add_tail(&sysfs_info->list, head); + } + + reboot->reboot_mode_device =3D device_create(&reboot_mode_class, NULL, 0, + (void *)head, reboot->dev->driver->name); + + if (IS_ERR(reboot->reboot_mode_device)) { + ret =3D PTR_ERR(reboot->reboot_mode_device); + goto error; + } + + return 0; + +error: + list_for_each_entry_safe(sysfs_info, next, head, list) { + list_del(&sysfs_info->list); + kfree_const(sysfs_info->mode); + kfree(sysfs_info); + } + + kfree(head); + reboot->reboot_mode_device =3D NULL; + return ret; +} + /** * reboot_mode_register - register a reboot mode driver * @reboot: reboot mode driver @@ -113,16 +206,39 @@ int reboot_mode_register(struct reboot_mode_driver *r= eboot) reboot->reboot_notifier.notifier_call =3D reboot_mode_notify; register_reboot_notifier(&reboot->reboot_notifier); =20 + ret =3D reboot_mode_create_device(reboot); + if (ret) + goto error; + return 0; =20 error: - list_for_each_entry(info, &reboot->head, list) - kfree_const(info->mode); - + reboot_mode_unregister(reboot); return ret; } EXPORT_SYMBOL_GPL(reboot_mode_register); =20 +static inline void reboot_mode_unregister_device(struct reboot_mode_driver= *reboot) +{ + struct sysfs_data *sysfs_info; + struct sysfs_data *next; + struct list_head *head; + + head =3D dev_get_drvdata(reboot->reboot_mode_device); + device_unregister(reboot->reboot_mode_device); + reboot->reboot_mode_device =3D NULL; + + if (head) { + list_for_each_entry_safe(sysfs_info, next, head, list) { + list_del(&sysfs_info->list); + kfree_const(sysfs_info->mode); + kfree(sysfs_info); + } + } + + kfree(head); +} + /** * reboot_mode_unregister - unregister a reboot mode driver * @reboot: reboot mode driver @@ -131,7 +247,11 @@ int reboot_mode_unregister(struct reboot_mode_driver *= reboot) { struct mode_info *info; =20 + if (!reboot->reboot_mode_device) + return -ENODEV; + unregister_reboot_notifier(&reboot->reboot_notifier); + reboot_mode_unregister_device(reboot); =20 list_for_each_entry(info, &reboot->head, list) kfree_const(info->mode); @@ -199,6 +319,19 @@ void devm_reboot_mode_unregister(struct device *dev, } EXPORT_SYMBOL_GPL(devm_reboot_mode_unregister); =20 +static int __init reboot_mode_init(void) +{ + return class_register(&reboot_mode_class); +} + +static void __exit reboot_mode_exit(void) +{ + class_unregister(&reboot_mode_class); +} + +subsys_initcall(reboot_mode_init); +module_exit(reboot_mode_exit); + MODULE_AUTHOR("Andy Yan "); MODULE_DESCRIPTION("System reboot mode core library"); MODULE_LICENSE("GPL v2"); diff --git a/include/linux/reboot-mode.h b/include/linux/reboot-mode.h index 4a2abb38d1d612ec0fdf05eb18c98b210f631b7f..b56783c32068096325f92445b95= 30d1856c4826c 100644 --- a/include/linux/reboot-mode.h +++ b/include/linux/reboot-mode.h @@ -5,6 +5,7 @@ struct reboot_mode_driver { struct device *dev; struct list_head head; + struct device *reboot_mode_device; int (*write)(struct reboot_mode_driver *reboot, unsigned int magic); struct notifier_block reboot_notifier; }; --=20 2.34.1