Thanks Dan and Larry for looking into it. I also don't have much understanding of the underlying hardware, please do let me know of your tests on big-endin machine. > On little-endian systems, both are no-ops, thus it does not matter Does it mean that the patch is not required and the original implementation is okay? On Tue, Jan 10, 2023 at 11:00:35AM -0600, Larry Finger wrote: > On 1/10/23 08:17, Dan Carpenter wrote: > > On Tue, Jan 10, 2023 at 07:20:58PM +0530, Gaurav Pathak wrote: > > > - Changed 2nd argument from __le16 to u16 to fix sparse warning > > > "warning: incorrect type in argument 2 (different base types)" > > > - Removed le16_to_cpu() in staging/r8188eu/hal/rtl8188e_cmd.c > > > > > > Signed-off-by: Gaurav Pathak <gauravpathak129@xxxxxxxxx> > > > --- > > > drivers/staging/r8188eu/hal/rtl8188e_cmd.c | 4 ++-- > > > drivers/staging/r8188eu/include/rtl8188e_cmd.h | 2 +- > > > 2 files changed, 3 insertions(+), 3 deletions(-) > > > > > > diff --git a/drivers/staging/r8188eu/hal/rtl8188e_cmd.c b/drivers/staging/r8188eu/hal/rtl8188e_cmd.c > > > index 8310d7f53982..a055e71d30ae 100644 > > > --- a/drivers/staging/r8188eu/hal/rtl8188e_cmd.c > > > +++ b/drivers/staging/r8188eu/hal/rtl8188e_cmd.c > > > @@ -193,9 +193,9 @@ void rtl8188e_set_FwPwrMode_cmd(struct adapter *adapt, u8 Mode) > > > } > > > -void rtl8188e_set_FwMediaStatus_cmd(struct adapter *adapt, __le16 mstatus_rpt) > > > +void rtl8188e_set_FwMediaStatus_cmd(struct adapter *adapt, u16 mstatus_rpt) > > > { > > > - u16 mst_rpt = le16_to_cpu(mstatus_rpt); > > > + u16 mst_rpt = mstatus_rpt; > > > > You are changing the behavior of the code here for big endian systems. > > Either the change is good or bad. TLDR; I suspect the change is bad but > > I don't know. > > > > The mstatus_rpt is CPU endian. It is the one of two things for connect > > or disconnect: > > > > connect: (psta->mac_id << 8) | 1 > > disconnect: (psta->mac_id << 8) | 0 > > > > So the question is in FillH2CCmd_88E() should the connect/disconnect > > come before the mac_id as it currently does or should it only work that > > way on little endian systems and be reversed on big endian systems? > > My feeling is that the second option makes no sense so this patch is not > > correct. > > > > Instead what should happen is: > > > > -void rtl8188e_set_FwMediaStatus_cmd(struct adapter *adapt, __le16 mstatus_rpt) > > +void rtl8188e_set_FwMediaStatus_cmd(struct adapter *adapt, u16 mstatus_rpt) > > { > > - u16 mst_rpt = le16_to_cpu(mstatus_rpt); > > + __le16 mst_rpt = cpu_to_le16(mstatus_rpt); > > > > But this is just my intuition and I don't know this hardware. > > I agree with Dan. This patch was attacking the symptom, not the cause. The > original Realtek driver confuses cpu_to_le16() with le16_to_cpu() in many > places. Apparently, I missed this one. On little-endian systems, both are > no-ops, thus it does not matter. > > I have a big-endian system (PowerBook G4) and will test later today. > > Larry > >