From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
To: Naman Jain <quic_namajain@quicinc.com>,
Bjorn Andersson <andersson@kernel.org>,
Andy Gross <agross@kernel.org>,
Konrad Dybcio <konrad.dybcio@somainline.org>
Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org,
quic_pkondeti@quicinc.com
Subject: Re: [PATCH 2/2] soc: qcom: socinfo: Add sysfs attributes for fields in v2-v6
Date: Thu, 12 Jan 2023 01:19:25 +0200 [thread overview]
Message-ID: <08ffedc3-3104-18fc-4813-287eccd1fdca@linaro.org> (raw)
In-Reply-To: <20230111082141.18109-3-quic_namajain@quicinc.com>
On 11/01/2023 10:21, Naman Jain wrote:
> Add support in sysfs custom attributes for fields in socinfo version
> v2-v6. This is to support SoC based operations in userland scripts
> and test scripts. Also, add name mappings for hw-platform type to
> make the sysfs information more descriptive.
Please include a patch documenting your additions to
Documentation/ABI/testing/sysfs-devices-soc. Please describe usecases
for new attributes and their applicability to non-Qualcomm boards.
Note, that testing scripts can access debugfs entries without any issues.
>
> Signed-off-by: Naman Jain <quic_namajain@quicinc.com>
> ---
> drivers/soc/qcom/socinfo.c | 181 +++++++++++++++++++++++++++++++++++++
> 1 file changed, 181 insertions(+)
>
> diff --git a/drivers/soc/qcom/socinfo.c b/drivers/soc/qcom/socinfo.c
> index 251c0fd94962..ff92064c2246 100644
> --- a/drivers/soc/qcom/socinfo.c
> +++ b/drivers/soc/qcom/socinfo.c
> @@ -41,6 +41,52 @@
> */
> #define SMEM_HW_SW_BUILD_ID 137
>
> +enum {
> + HW_PLATFORM_UNKNOWN = 0,
> + HW_PLATFORM_SURF = 1,
> + HW_PLATFORM_FFA = 2,
> + HW_PLATFORM_FLUID = 3,
> + HW_PLATFORM_SVLTE_FFA = 4,
> + HW_PLATFORM_SVLTE_SURF = 5,
> + HW_PLATFORM_MTP_MDM = 7,
> + HW_PLATFORM_MTP = 8,
> + HW_PLATFORM_LIQUID = 9,
> + HW_PLATFORM_DRAGON = 10,
> + HW_PLATFORM_QRD = 11,
> + HW_PLATFORM_HRD = 13,
> + HW_PLATFORM_DTV = 14,
> + HW_PLATFORM_RCM = 21,
> + HW_PLATFORM_STP = 23,
> + HW_PLATFORM_SBC = 24,
> + HW_PLATFORM_HDK = 31,
> + HW_PLATFORM_ATP = 33,
> + HW_PLATFORM_IDP = 34,
> + HW_PLATFORM_INVALID
> +};
> +
> +static const char * const hw_platform[] = {
> + [HW_PLATFORM_UNKNOWN] = "Unknown",
> + [HW_PLATFORM_SURF] = "Surf",
> + [HW_PLATFORM_FFA] = "FFA",
> + [HW_PLATFORM_FLUID] = "Fluid",
> + [HW_PLATFORM_SVLTE_FFA] = "SVLTE_FFA",
> + [HW_PLATFORM_SVLTE_SURF] = "SLVTE_SURF",
> + [HW_PLATFORM_MTP_MDM] = "MDM_MTP_NO_DISPLAY",
> + [HW_PLATFORM_MTP] = "MTP",
> + [HW_PLATFORM_RCM] = "RCM",
> + [HW_PLATFORM_LIQUID] = "Liquid",
> + [HW_PLATFORM_DRAGON] = "Dragon",
> + [HW_PLATFORM_QRD] = "QRD",
> + [HW_PLATFORM_HRD] = "HRD",
> + [HW_PLATFORM_DTV] = "DTV",
> + [HW_PLATFORM_STP] = "STP",
> + [HW_PLATFORM_SBC] = "SBC",
> + [HW_PLATFORM_HDK] = "HDK",
> + [HW_PLATFORM_ATP] = "ATP",
> + [HW_PLATFORM_IDP] = "IDP",
> + [HW_PLATFORM_INVALID] = "Invalid",
> +};
This is not a property of the SoC. It is a property of the device. As
such it should not be part of /sys/bus/soc devices.
You can find board description in /sys/firmware/devicetree/base/model
> +
> #ifdef CONFIG_DEBUG_FS
> #define SMEM_IMAGE_VERSION_BLOCKS_COUNT 32
> #define SMEM_IMAGE_VERSION_SIZE 4096
> @@ -368,6 +414,140 @@ static const struct soc_id soc_id[] = {
> { qcom_board_id(QRU1062) },
> };
>
> +/* sysfs attributes */
> +#define ATTR_DEFINE(param) \
> + static DEVICE_ATTR(param, 0644, qcom_get_##param, NULL)
> +
> +/* Version 2 */
> +static ssize_t
> +qcom_get_raw_id(struct device *dev,
> + struct device_attribute *attr,
> + char *buf)
> +{
> + return scnprintf(buf, PAGE_SIZE, "%u\n",
> + le32_to_cpu(soc_info->raw_id));
> +}
> +ATTR_DEFINE(raw_id);
> +
> +static ssize_t
> +qcom_get_raw_version(struct device *dev,
> + struct device_attribute *attr,
> + char *buf)
> +{
> + return scnprintf(buf, PAGE_SIZE, "%u\n",
> + le32_to_cpu(soc_info->raw_ver));
> +}
> +ATTR_DEFINE(raw_version);
Why are they raw? can you unraw them?
Whose version and id are these attributes referring to?
> +
> +/* Version 3 */
> +static ssize_t
> +qcom_get_hw_platform(struct device *dev,
> + struct device_attribute *attr,
> + char *buf)
> +{
> + uint32_t hw_plat = le32_to_cpu(soc_info->hw_plat);
> +
> + hw_plat = (hw_plat >= HW_PLATFORM_INVALID) ? HW_PLATFORM_INVALID : hw_plat;
> + return scnprintf(buf, PAGE_SIZE, "%-.32s\n",
> + hw_platform[hw_plat]);
> +}
> +ATTR_DEFINE(hw_platform);
> +
> +/* Version 4 */
> +static ssize_t
> +qcom_get_platform_version(struct device *dev,
> + struct device_attribute *attr,
> + char *buf)
> +{
> + return scnprintf(buf, PAGE_SIZE, "%u\n",
> + le32_to_cpu(soc_info->plat_ver));
> +}
> +ATTR_DEFINE(platform_version);
> +
> +/* Version 5 */
> +static ssize_t
> +qcom_get_accessory_chip(struct device *dev,
> + struct device_attribute *attr,
> + char *buf)
> +{
> + return scnprintf(buf, PAGE_SIZE, "%u\n",
> + le32_to_cpu(soc_info->accessory_chip));
> +}
> +ATTR_DEFINE(accessory_chip);
If this an _accessory_ chip, there should be a separate soc device
describing it, rather than stuffing information into the soc0.
> +
> +/* Version 6 */
> +static ssize_t
> +qcom_get_platform_subtype_id(struct device *dev,
> + struct device_attribute *attr,
> + char *buf)
> +{
> + return scnprintf(buf, PAGE_SIZE, "%u\n",
> + le32_to_cpu(soc_info->hw_plat_subtype));
> +}
> +ATTR_DEFINE(platform_subtype_id);
Again, this is the board property, not an SoC one.
> +
> +static struct attribute *qcom_custom_socinfo_attrs[7];
> +
> +static const struct attribute_group custom_soc_attr_group = {
> + .attrs = qcom_custom_socinfo_attrs,
> +};
> +
> +static void qcom_socinfo_populate_sysfs(struct qcom_socinfo *qcom_socinfo)
> +{
> + int i = 0, socinfo_format = le32_to_cpu(soc_info->fmt);
> +
> + /* Note: qcom_custom_socinfo_attrs[] size needs to be in sync with attributes added here. */
> + switch (socinfo_format) {
> + case SOCINFO_VERSION(0, 16):
> + fallthrough;
> + case SOCINFO_VERSION(0, 15):
> + fallthrough;
> + case SOCINFO_VERSION(0, 14):
> + fallthrough;
> + case SOCINFO_VERSION(0, 13):
> + fallthrough;
> + case SOCINFO_VERSION(0, 12):
> + fallthrough;
> + case SOCINFO_VERSION(0, 11):
> + fallthrough;
> + case SOCINFO_VERSION(0, 10):
> + fallthrough;
> + case SOCINFO_VERSION(0, 9):
> + fallthrough;
> + case SOCINFO_VERSION(0, 8):
> + fallthrough;
> + case SOCINFO_VERSION(0, 7):
> + fallthrough;
> + case SOCINFO_VERSION(0, 6):
> + qcom_custom_socinfo_attrs[i++] =
> + &dev_attr_platform_subtype_id.attr;
> + fallthrough;
> + case SOCINFO_VERSION(0, 5):
> + qcom_custom_socinfo_attrs[i++] = &dev_attr_accessory_chip.attr;
> + fallthrough;
> + case SOCINFO_VERSION(0, 4):
> + qcom_custom_socinfo_attrs[i++] = &dev_attr_platform_version.attr;
> + fallthrough;
> + case SOCINFO_VERSION(0, 3):
> + qcom_custom_socinfo_attrs[i++] = &dev_attr_hw_platform.attr;
> + fallthrough;
> + case SOCINFO_VERSION(0, 2):
> + qcom_custom_socinfo_attrs[i++] = &dev_attr_raw_id.attr;
> + qcom_custom_socinfo_attrs[i++] = &dev_attr_raw_version.attr;
> + fallthrough;
> + case SOCINFO_VERSION(0, 1):
> + break;
> + default:
> + pr_err("Unknown socinfo format: v%u.%u\n",
> + SOCINFO_MAJOR(socinfo_format),
> + SOCINFO_MINOR(socinfo_format));
> + break;
> + }
> +
> + qcom_custom_socinfo_attrs[i] = NULL;
> + qcom_socinfo->attr.custom_attr_group = &custom_soc_attr_group;
> +}
> +
> static const char *socinfo_machine(struct device *dev, unsigned int id)
> {
> int idx;
> @@ -696,6 +876,7 @@ static int qcom_socinfo_probe(struct platform_device *pdev)
> "%u",
> le32_to_cpu(soc_info->serial_num));
>
> + qcom_socinfo_populate_sysfs(qs);
> qs->soc_dev = soc_device_register(&qs->attr);
> if (IS_ERR(qs->soc_dev))
> return PTR_ERR(qs->soc_dev);
--
With best wishes
Dmitry
next prev parent reply other threads:[~2023-01-11 23:19 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-11 8:21 [PATCH 0/2] soc: qcom: socinfo: Add fields in sysfs custom attributes Naman Jain
2023-01-11 8:21 ` [PATCH 1/2] soc: qcom: socinfo: Change socinfo variable name and scope Naman Jain
2023-01-11 21:37 ` Trilok Soni
2023-01-19 9:33 ` Naman Jain
2023-01-11 8:21 ` [PATCH 2/2] soc: qcom: socinfo: Add sysfs attributes for fields in v2-v6 Naman Jain
2023-01-11 23:19 ` Dmitry Baryshkov [this message]
2023-01-11 23:58 ` Trilok Soni
2023-01-19 9:35 ` Naman Jain
2023-01-19 9:39 ` Naman Jain
2023-01-19 10:59 ` Dmitry Baryshkov
2023-01-20 10:15 ` Naman Jain
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=08ffedc3-3104-18fc-4813-287eccd1fdca@linaro.org \
--to=dmitry.baryshkov@linaro.org \
--cc=agross@kernel.org \
--cc=andersson@kernel.org \
--cc=konrad.dybcio@somainline.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=quic_namajain@quicinc.com \
--cc=quic_pkondeti@quicinc.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®