[PATCH] OCC: FSI and hwmon: Add sequence numbering

Andrew Jeffery andrew at aj.id.au
Thu Jul 4 10:14:10 AEST 2019



On Thu, 4 Jul 2019, at 00:36, Eddie James wrote:
> 
> On 7/2/19 7:31 PM, Andrew Jeffery wrote:
> > On Wed, 12 Jun 2019, at 06:31, Eddie James wrote:
> >> Sequence numbering of the commands submitted to the OCC is required by
> >> the OCC interface specification. Add sequence numbering and check for
> >> the correct sequence number on the response.
> >>
> >> Signed-off-by: Eddie James <eajames at linux.ibm.com>
> >> ---
> >>   drivers/fsi/fsi-occ.c      | 15 ++++++++++++---
> >>   drivers/hwmon/occ/common.c |  4 ++--
> >>   drivers/hwmon/occ/common.h |  1 +
> >>   3 files changed, 15 insertions(+), 5 deletions(-)
> >>
> >> diff --git a/drivers/fsi/fsi-occ.c b/drivers/fsi/fsi-occ.c
> >> index a2301ce..7da9c81 100644
> >> --- a/drivers/fsi/fsi-occ.c
> >> +++ b/drivers/fsi/fsi-occ.c
> >> @@ -412,6 +412,7 @@ int fsi_occ_submit(struct device *dev, const void
> >> *request, size_t req_len,
> >>   		msecs_to_jiffies(OCC_CMD_IN_PRG_WAIT_MS);
> >>   	struct occ *occ = dev_get_drvdata(dev);
> >>   	struct occ_response *resp = response;
> >> +	u8 seq_no;
> >>   	u16 resp_data_length;
> >>   	unsigned long start;
> >>   	int rc;
> >> @@ -426,6 +427,8 @@ int fsi_occ_submit(struct device *dev, const void
> >> *request, size_t req_len,
> >>   
> >>   	mutex_lock(&occ->occ_lock);
> >>   
> >> +	/* Extract the seq_no from the command (first byte) */
> >> +	seq_no = *(const u8 *)request;
> > The fact that your doing this says to me that the fsi_occ_submit() interface
> > is wrong.
> >
> > We already have `struct occ_response` in drivers/hwmon/occ/common.h.
> > I think we should add an equivalent `struct occ_request` and pass a
> > typed pointer through fsi_occ_submit(), that way we can access the
> > sequence number by name rather than through dodgy casts.
> 
> 
> I don't think it's too bad. The first byte is always simply the sequence 
> number.

Sure, but the readability isn't great and the code suggests to the reader
(me?) that the interface is either being abused or wasn't thought through.
The lack of  `struct occ_request` also has an impact on readability at the
call-sites where we're manually stuffing the bytes into a buffer, some of
which are multi-byte where we need to deal with endianness.

> The worst that can happen is a user doesn't write a request 
> correctly and we have a "wrong" sequence number, but in that case the 
> request most likely won't work anyway.

Except it's worked so far even though we were always sending zero?

> I think ideally it would be like 
> you say, but it's also not ideal to change the interfaces at this stage.

What do you mean? It's an internal kernel API, not userspace API/ABI.
We can change it if we feel the need.

> 
> 
> >
> > Also why is this sent just to the OpenBMC list? Any reason it's not on
> > upstream lists?
> 
> 
> It was... it's been accepted.
> 

Yeah I missed that :/

Andrew


More information about the openbmc mailing list