linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Bjorn Andersson <bjorn.andersson@linaro.org>
To: Rob Herring <robh@kernel.org>
Cc: Imran Khan <kimran@codeaurora.org>,
	Stephen Boyd <sboyd@codeaurora.org>,
	Andy Gross <agross@codeaurora.org>,
	linux-arm-msm <linux-arm-msm@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"open list:ARM/QUALCOMM SUPPORT" <linux-soc@vger.kernel.org>
Subject: Re: [v10, 2/2] Documentation/ABI: Add ABI information for QCOM socinfo driver
Date: Mon, 24 Apr 2017 16:05:30 -0700	[thread overview]
Message-ID: <20170424230530.GN15143@minitux> (raw)
In-Reply-To: <CAL_JsqJta+S7d6zC3KYiqm7BDY-WtV+HmCKh5kdfSSE5WFv57w@mail.gmail.com>

On Mon 24 Apr 09:27 PDT 2017, Rob Herring wrote:

> On Mon, Apr 24, 2017 at 11:00 AM, Imran Khan <kimran@codeaurora.org> wrote:
> > On 4/18/2017 7:53 PM, Imran Khan wrote:
> > Hi Rob,
> > Could you please provide some feedback so that this discussion can move forward
> > and ABI document can be finalized?
> > Without the ABI document we are not able to get the corresponding driver
> > finalized and get merged.
> >
> > Thanks again for your time,
> > Imran
> >> Hi Rob,
> >>
> >> On 3/6/2017 12:19 PM, Imran Khan wrote:
> >>> On 2/22/2017 7:34 PM, Rob Herring wrote:
> >>>> On Mon, Feb 20, 2017 at 10:17:15PM +0530, Khan, Imran wrote:
> >>>>> The socinfo ABI document describes the information provided
> >>>>> by socinfo driver and the corresponding attributes to access
> >>>>> that information.
> >>>>>
> >>>>> Signed-off-by: Imran Khan <kimran@codeaurora.org>
> >>>>> ---
> >>>>>  .../ABI/testing/sysfs-driver-qcom_socinfo          | 171 +++++++++++++++++++++
> >>>>>  1 file changed, 171 insertions(+)
> >>>>>  create mode 100644 Documentation/ABI/testing/sysfs-driver-qcom_socinfo
> >>>>
> >>>> Sorry to comment late on this (blame LWM), but I think creating this ABI
> >>>> is a mistake. The biggest issue I have is this doesn't scale if every
> >>>> SoC does its own thing. We should have a common interface so for example
> >>>> userspace can retrieve the serial number from any SoC in the same way.
> >>>> Yes, we can have custom attributes, but there should be common base.
> >>>>
> >>>
> >>> Yeah, I agree about the scalability part. Could you please suggest some way to
> >>> implement a common base for the custom attributes. Like for serial number I think
> >>> we can put it in generic soc_device_attribute but for custom attributes like accessory_chip,
> >>> hw_platform etc., how can we implement a common base. Can we have a private pointer within
> >>> generic soc_device_attribute structure and this private pointer can point to custom attributes.
> >>> Or if you have some other suggestion to implement this common interface, please let me know.
> >>
> >> Could you please provide some feedback regarding this?
> 
> Splitting things between common and private seems like a good direction.
> 

But the pattern of amending the common attributes with vendor or
platform-specific ones is how its done in other drivers, e.g.
integrator.

Why should we for the Qualcomm case make up some other pattern?

Or am I misunderstanding your suggestion?

> >>>>> diff --git a/Documentation/ABI/testing/sysfs-driver-qcom_socinfo b/Documentation/ABI/testing/sysfs-driver-qcom_socinfo
> >>>>> new file mode 100644
> >>>>> index 0000000..cce611f
> >>>>> --- /dev/null
> >>>>> +++ b/Documentation/ABI/testing/sysfs-driver-qcom_socinfo
> >>>>> @@ -0,0 +1,171 @@
> >>>>> +What:             /sys/devices/soc0/accessory_chip
> >>>>> +Date:             January 2017
> >>>>> +Contact:  linux-arm-msm@vger.kernel.org
> >>>>> +Description:
> >>>>> +          This file shows the id of the accessory chip.
> >>>>> +
> >>>>> +What:             /sys/devices/soc0/adsp_image_crm
> >>>>> +What:             /sys/devices/soc0/adsp_image_variant
> >>>>> +What:             /sys/devices/soc0/adsp_image_version
> >>>>> +Date:             January 2017
> >>>>> +Contact:  linux-arm-msm@vger.kernel.org
> >>>>> +Description:
> >>>>> +          These files respectively show the crm version, variant and
> >>>>> +          version of the ADSP image.
> >>>>
> >>>> Shouldn't this be part of the ADSP driver?
> >>>>
> >>> Yes, It can be but I wanted to keep the image information at a central location,
> >>> rather than pushing it back to each driver. For image information we basically
> >>> read the same item from SMEM but use different offsets within it for different images,
> >>> so the idea was to read this information ( get SMEM handler) just once, rather than
> >>> doing it for each driver.
> >>> But if this idea does not look correct, I can remove it from socinfo driver.
> >>>
> >>
> >> Could you please provide some feedback regarding this?
> 
> I don't think parsing things once will save you much.
> 

Defining the struct in some shared header file and implementing the
"parsing" throughout various drivers would probably work out fine.

What I do not fancy is where these "parsers" would be implemented and
where the information would end up in sysfs.

"The ADSP driver" has to refer to the remoteproc driver for the adsp and
it would be reasonable to have version information of the firmware
available for a running piece of remoteproc. The same would work out for
modem and wireless.

The v4l driver is responsible for controlling the venus core, so it
could provide the version attribute - which would show up somewhere in
the /sys/bus/platform hierarchy.

We have a mfd-like driver for communicating with the RPM, so perhaps we
could shoehorn in an attribute there. But the sysfs path will be
completely different, depending on platform and system configuration.

There is no driver representing the boot code.


So, when Android goes belly up and we want to produce a bugreport that
describes all the pieces of the system we will have to all over sysfs to
figure out the versions of the firmware...

> >>
> >>>>> +
> >>>>> +What:             /sys/devices/soc0/apps_image_crm
> >>>>> +What:             /sys/devices/soc0/apps_image_variant
> >>>>> +What:             /sys/devices/soc0/apps_image_version
> >>>>> +Date:             January 2017
> >>>>> +Contact:  linux-arm-msm@vger.kernel.org
> >>>>> +Description:
> >>>>> +          These files respectively show the crm version, variant and
> >>>>> +          version of the APPS(Linux kernel, rootfs) image.
> >>>>
> >>>> Assuming that the kernel and rootfs are the same image and updated
> >>>> together?
> >>>>
> >>>
> >>> Yes. The kernel and rootfs are same image and they are updated together.
> 
> Maybe for you, but generally those are separate pieces.
> 

This attribute is special in that it is populated from user space, so
any tool running on apps should be able to fetch it directly anyways
(e.g. from Android properties).

Imran, is there any users of this information outside the apps context?
E.g. does your tools for analysing memory-dumps depend on this
information being available in SMEM?

> >>>
> >>>>> +
> >>>>> +What:             /sys/devices/soc0/boot_image_crm
> >>>>> +What:             /sys/devices/soc0/boot_image_variant
> >>>>> +What:             /sys/devices/soc0/boot_image_version
> >>>>> +Date:             January 2017
> >>>>> +Contact:  linux-arm-msm@vger.kernel.org
> >>>>> +Description:
> >>>>> +          These files respectively show the crm version, variant and
> >>>>> +          version of the Boot(bootloader) image.
> >>>>> +
> >>>>> +What:             /sys/devices/soc0/build_id
> >>>>> +Date:             January 2017
> >>>>> +Contact:  linux-arm-msm@vger.kernel.org
> >>>>> +Description:
> >>>>> +          This file shows the unique id of current build being used on
> >>>>> +          the system.
> >>>>
> >>>> Build of what? The kernel already has a build version.
> >>>>
> >>> This is not build id of the kernel. This is build ID of complete meta image.
> 
> That's assuming everything is built together which generally isn't
> true.

Not necessarily compiled together, but packaged up in something that
gets a "release number" - which I presume is quite common for any type
of embedded products.

E.g. we do give the Linaro releases version numbers such as "16.09".

> It doesn't seem like that is information the kernel should
> provide.
> 

I used to say that we could just store this information in a file in
/etc (or in build.prop), then I started doing post-build composition and
realized that you really do want a new system-version if you change e.g.
the version of the boot firmware - without having to regenerate the
rootfs.

So while I agree that this is none of the kernel's business I'm not sure
how you would get this information from SMEM to a user space process for
e.g. bugreport generation purposes.

> >>>
> >>>>> +
> >>>>> +What:             /sys/devices/soc0/cnss_image_crm
> >>>>> +What:             /sys/devices/soc0/cnss_image_variant
> >>>>> +What:             /sys/devices/soc0/cnss_image_version
> >>>>> +Date:             January 2017
> >>>>> +Contact:  linux-arm-msm@vger.kernel.org
> >>>>> +Description:
> >>>>> +          These files respectively show the crm version, variant and
> >>>>> +          version of the CNSS image.
> >>>>> +
> >>>>> +What:             /sys/devices/soc0/family
> >>>>> +Date:             January 2017
> >>>>> +Contact:  linux-arm-msm@vger.kernel.org
> >>>>> +Description:
> >>>>> +          This file shows the family(e.g Snapdragon) of the SoC.
> >>>>
> >>>> Sounds like a standard attr.
> >>>>
> >>> Yeah. This is standard attribute. Will remove this from Documentation here.
> >>>
> >>>>> +
> >>>>> +What:             /sys/devices/soc0/foundry_id
> >>>>> +Date:             January 2017
> >>>>> +Contact:  linux-arm-msm@vger.kernel.org
> >>>>> +Description:
> >>>>> +          This file shows the id of the foundry, where soc was
> >>>>> +          manufactured.
> >>>>
> >>>> I don't see how userspace should care...
> >>>>
> >>> Yeah, usually user space would not care for such information. But sometimes we have
> >>> come across h/w issues that were seen only on set of chips from a particular
> >>> foundry. Under such situations we use this information to confirm if a certain h/w
> >>> issue is specific to a batch from a particular foundry or not.
> >>>
> >> Could you please provide some feedback regarding this?
> 
> The qcom compatible string format already provides this. I don't think
> we need 2 ABIs that are both vendor specific to expose this. Now if
> there's other vendors wanting to expose the foundry, then a common
> attr would make sense.
> 
> compatible = "qcom,<SoC>[-<soc_version>][-<foundry_id>]-<board>[/<subtype>][-<board_version>]"
> 

For userspace to be able to parse out this information from
/proc/device-tree/compatible we need to improve that expression quite a
bit! What's the foundry_id of <"acme,phone-a","qcom,platform-b-c">?

> >>
> >>>>> +
> >>>>> +What:             /sys/devices/soc0/hw_platform
> >>>>> +Date:             January 2017
> >>>>> +Contact:  linux-arm-msm@vger.kernel.org
> >>>>> +Description:
> >>>>> +          This file shows the type of hardware platform
> >>>>> +          (e.g MTP, QRD etc) where SoC is being used.
> >>>>
> >>>> What's a platform?
> >>>>
> >>> We may use same soc on different type of platforms. For example for QCOM we have
> >>> MTP (board with which a debug board can be connected), QRD (no debug connection available).
> >>> Similarly other ODMs may have different kind of platforms based on same soc.
> >>> hw_paltform indicates numeric id for different kind of such platforms.
> 
> As above, I believe /compatible already provides that information.
> 

I believe this is what OMAP calls "type", in a custom attribute on the
side of the common ones.

But as far as I can see this information should be trivial to derive
from the compatible of the board. Imran, what is this data used for?

Regards,
Bjorn

  reply	other threads:[~2017-04-24 23:05 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-02-20 16:47 [PATCH v10 0/2] soc: qcom: Add SoC info driver Imran Khan
2017-02-20 16:47 ` [PATCH v10 1/2] " Imran Khan
2017-02-20 16:47 ` [PATCH v10 2/2] Documentation/ABI: Add ABI information for QCOM socinfo driver Imran Khan
2017-02-22 14:04   ` [v10, " Rob Herring
2017-03-06  6:49     ` Imran Khan
2017-04-18 14:23       ` Imran Khan
2017-04-24 16:00         ` Imran Khan
2017-04-24 16:27           ` Rob Herring
2017-04-24 23:05             ` Bjorn Andersson [this message]
2017-04-25  7:35               ` Imran Khan
2017-04-25 17:13               ` Rob Herring
2017-04-25 23:08                 ` Bjorn Andersson
2017-05-01 13:07                   ` Imran Khan
2017-05-01 22:47                     ` Bjorn Andersson
2017-05-03 12:51                       ` Imran Khan

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=20170424230530.GN15143@minitux \
    --to=bjorn.andersson@linaro.org \
    --cc=agross@codeaurora.org \
    --cc=kimran@codeaurora.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-soc@vger.kernel.org \
    --cc=robh@kernel.org \
    --cc=sboyd@codeaurora.org \
    /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;
as well as URLs for NNTP newsgroup(s).