Re: [PATCH v4 1/5] mfd: Add support for Intel LJCA device

Ye, Xiang
2023-03-09T17:42:59Z

On Thu, Mar 09, 2023 at 04:58:45PM +0100, Greg Kroah-Hartman wrote:
> On Thu, Mar 09, 2023 at 11:45:51PM +0800, Ye, Xiang wrote:
> > On Thu, Mar 09, 2023 at 11:06:25AM +0100, Andi Shyti wrote:
> > > On Thu, Mar 09, 2023 at 10:41:05AM +0100, Greg Kroah-Hartman wrote:
> > > > On Thu, Mar 09, 2023 at 05:31:44PM +0800, Ye, Xiang wrote:
> > > > > On Thu, Mar 09, 2023 at 08:52:24AM +0100, Greg Kroah-Hartman wrote:
> > > > > > On Thu, Mar 09, 2023 at 03:10:56PM +0800, Ye Xiang wrote:
> > > > > > > +static int ljca_mng_get_version(struct ljca_stub *stub, char *buf)
> > > > > > > +{
> > > > > > > + struct fw_version version = {};
> > > > > > > + unsigned int len = sizeof(version);
> > > > > > > + int ret;
> > > > > > > +
> > > > > > > + ret = ljca_stub_write(stub, LJCA_MNG_GET_VERSION, NULL, 0, &version, &len, true,
> > > > > > > + LJCA_USB_WRITE_ACK_TIMEOUT_MS);
> > > > > > > + if (ret)
> > > > > > > + return ret;
> > > > > > > +
> > > > > > > + if (len != sizeof(version)) {
> > > > > > > + dev_err(&stub->intf->dev, "get version failed, len:%d\n", len);
> > > > > > > + return -EINVAL;
> > > > > > > + }
> > > > > > > +
> > > > > > > + return sysfs_emit(buf, "%d.%d.%d.%d\n", version.major, version.minor,
> > > > > > > + le16_to_cpu(version.patch), le16_to_cpu(version.build));
> > > > > > > +}
> > > > > >
> > > > > > You have sysfs files, yet no Documentation/ABI/ entries? That's not
> > > > > > allowed, you know this :(
> > > > > The Documentation/ABI/ entries is added for the sysfs on patch 5 of this series.
> > > > > https://patchwork.kernel.org/project/linux-usb/patch/20230309071100.2856899-6-xiang.ye@intel.com/
> > > >
> > > > Ah, missed that, sorry.
> > > >
> > > > > >
> > > > > > > +static ssize_t cmd_store(struct device *dev, struct device_attribute *attr, const char *buf,
> > > > > > > + size_t count)
> > > > > > > +{
> > > > > > > + struct usb_interface *intf = to_usb_interface(dev);
> > > > > > > + struct ljca_dev *ljca_dev = usb_get_intfdata(intf);
> > > > > > > + struct ljca_stub *mng_stub = ljca_stub_find(ljca_dev, LJCA_MNG_STUB);
> > > > > > > + struct ljca_stub *diag_stub = ljca_stub_find(ljca_dev, LJCA_DIAG_STUB);
> > > > > > > +
> > > > > > > + if (sysfs_streq(buf, "dfu"))
> > > > > > > + ljca_mng_set_dfu_mode(mng_stub);
> > > > > > > + else if (sysfs_streq(buf, "debug"))
> > > > > > > + ljca_diag_set_trace_level(diag_stub, 3);
> > > > > >
> > > > > > Sorry, but no, you can't do this in a sysfs file.
> > > > > Do you mean that we can't use sysfs to send "debug" command to device?
> > > >
> > > > That is correct, use the kernel-wide debugging facilities that we have
> > > > for this NEVER create your own custom interface just for one tiny
> > > > driver, that is not allowed.
> > > >
> > > > > Could you provide some detail or hints?
> > > >
> > > > dev_dbg().
> > But, this command is sent to SET LJCA Firmware logging level.
>
> What command?
ljca_diag_set_trace_level send LJCA_DIAG_SET_TRACE_LEVEL command to LJCA
FW to set FW log level.
>
> This isn't documented at all, sorry, I don't understand what you are
> trying to do here.
Sorry for the doc missing. will try to add more details on comments and
Documentation/ABI/ entries.

>
> > > I'm not sure this is the same thing, though, as it's not a drvier
> > > to user debug message.
> > >
> > > Ye, can you please explain better what this command does? You are
> > > sending a LJCA_DIAG_SET_TRACE_LEVEL command to the device with a
> > > parameter "3" which has a meaining only for you :)
> > Sure, the LJCA_DIAG_SET_TRACE_LEVEL command is used to set LJCA FW
> > logging level. 3 means debug level for FW. It is used for LJCA FW
> > debugging: when FW got some issue, we can send debug level to FW
> > to make FW print degging log for analysis.
>
> And where is that printed? In the kernel log? Somewhere else? What
> does the firmware have to do with any of this?
The firmware log was printed through UART port of LJCA device to another
computer just for debugging purposes. After sending LJCA_DIAG_SET_TRACE_LEVEL
command to LJCA device, it will print logging according to the log level sent
before.

--
Thanks
Ye Xiang