All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net-next 0/2] enetc: Clean endianness warnings up
@ 2020-11-17 18:20 Claudiu Manoil
  2020-11-17 18:20 ` [PATCH net-next 1/2] enetc: Fix endianness issues for enetc_ethtool Claudiu Manoil
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Claudiu Manoil @ 2020-11-17 18:20 UTC (permalink / raw)
  To: netdev; +Cc: Jakub Kicinski, David S . Miller

Cleanup patches to address the outstanding endianness issues
in the driver reported by sparse.

Claudiu Manoil (2):
  enetc: Fix endianness issues for enetc_ethtool
  enetc: Fix endianness issues for enetc_qos

 .../net/ethernet/freescale/enetc/enetc_hw.h   |  8 +-
 .../net/ethernet/freescale/enetc/enetc_qos.c  | 84 +++++++++----------
 2 files changed, 43 insertions(+), 49 deletions(-)

-- 
2.17.1


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH net-next 1/2] enetc: Fix endianness issues for enetc_ethtool
  2020-11-17 18:20 [PATCH net-next 0/2] enetc: Clean endianness warnings up Claudiu Manoil
@ 2020-11-17 18:20 ` Claudiu Manoil
  2020-11-17 18:20 ` [PATCH net-next 2/2] enetc: Fix endianness issues for enetc_qos Claudiu Manoil
  2020-11-18 17:52 ` [PATCH net-next 0/2] enetc: Clean endianness warnings up Jakub Kicinski
  2 siblings, 0 replies; 7+ messages in thread
From: Claudiu Manoil @ 2020-11-17 18:20 UTC (permalink / raw)
  To: netdev; +Cc: Jakub Kicinski, David S . Miller

These particular fields are specified in the H/W reference
manual as having network byte order format, so enforce big
endian annotation for them and clear the related sparse
warnings in the process.

Signed-off-by: Claudiu Manoil <claudiu.manoil@nxp.com>
---
 drivers/net/ethernet/freescale/enetc/enetc_hw.h | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/freescale/enetc/enetc_hw.h b/drivers/net/ethernet/freescale/enetc/enetc_hw.h
index 68ef4f959982..04efccd11162 100644
--- a/drivers/net/ethernet/freescale/enetc/enetc_hw.h
+++ b/drivers/net/ethernet/freescale/enetc/enetc_hw.h
@@ -472,10 +472,10 @@ struct enetc_cmd_rfse {
 	u8 smac_m[6];
 	u8 dmac_h[6];
 	u8 dmac_m[6];
-	u32 sip_h[4];
-	u32 sip_m[4];
-	u32 dip_h[4];
-	u32 dip_m[4];
+	__be32 sip_h[4];
+	__be32 sip_m[4];
+	__be32 dip_h[4];
+	__be32 dip_m[4];
 	u16 ethtype_h;
 	u16 ethtype_m;
 	u16 ethtype4_h;
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH net-next 2/2] enetc: Fix endianness issues for enetc_qos
  2020-11-17 18:20 [PATCH net-next 0/2] enetc: Clean endianness warnings up Claudiu Manoil
  2020-11-17 18:20 ` [PATCH net-next 1/2] enetc: Fix endianness issues for enetc_ethtool Claudiu Manoil
@ 2020-11-17 18:20 ` Claudiu Manoil
  2020-11-18 17:52 ` [PATCH net-next 0/2] enetc: Clean endianness warnings up Jakub Kicinski
  2 siblings, 0 replies; 7+ messages in thread
From: Claudiu Manoil @ 2020-11-17 18:20 UTC (permalink / raw)
  To: netdev; +Cc: Jakub Kicinski, David S . Miller

Currently the control buffer descriptor (cbd) fields have endianness
restrictions while the commands passed into the control buffers
don't (with one exception). This patch fixes offending code,
by adding endianness accessors for cbd fields and removing the
unnecessary ones in case of data buffer fields. Currently there's
no need to convert all commands to little endian format, the patch
only focuses on fixing current endianness issues reported by sparse.

Signed-off-by: Claudiu Manoil <claudiu.manoil@nxp.com>
---
 .../net/ethernet/freescale/enetc/enetc_qos.c  | 84 +++++++++----------
 1 file changed, 39 insertions(+), 45 deletions(-)

diff --git a/drivers/net/ethernet/freescale/enetc/enetc_qos.c b/drivers/net/ethernet/freescale/enetc/enetc_qos.c
index 827f74e86d34..aeb21dc48099 100644
--- a/drivers/net/ethernet/freescale/enetc/enetc_qos.c
+++ b/drivers/net/ethernet/freescale/enetc/enetc_qos.c
@@ -128,8 +128,8 @@ static int enetc_setup_taprio(struct net_device *ndev,
 		return -ENOMEM;
 	}
 
-	cbd.addr[0] = lower_32_bits(dma);
-	cbd.addr[1] = upper_32_bits(dma);
+	cbd.addr[0] = cpu_to_le32(lower_32_bits(dma));
+	cbd.addr[1] = cpu_to_le32(upper_32_bits(dma));
 	cbd.cls = BDCR_CMD_PORT_GCL;
 	cbd.status_flags = 0;
 
@@ -506,16 +506,15 @@ static int enetc_streamid_hw_set(struct enetc_ndev_priv *priv,
 		return -ENOMEM;
 	}
 
-	cbd.addr[0] = lower_32_bits(dma);
-	cbd.addr[1] = upper_32_bits(dma);
+	cbd.addr[0] = cpu_to_le32(lower_32_bits(dma));
+	cbd.addr[1] = cpu_to_le32(upper_32_bits(dma));
 	eth_broadcast_addr(si_data->dmac);
-	si_data->vid_vidm_tg =
-		cpu_to_le16(ENETC_CBDR_SID_VID_MASK
-			    + ((0x3 << 14) | ENETC_CBDR_SID_VIDM));
+	si_data->vid_vidm_tg = (ENETC_CBDR_SID_VID_MASK
+			       + ((0x3 << 14) | ENETC_CBDR_SID_VIDM));
 
 	si_conf = &cbd.sid_set;
 	/* Only one port supported for one entry, set itself */
-	si_conf->iports = 1 << enetc_get_port(priv);
+	si_conf->iports = cpu_to_le32(1 << enetc_get_port(priv));
 	si_conf->id_type = 1;
 	si_conf->oui[2] = 0x0;
 	si_conf->oui[1] = 0x80;
@@ -540,7 +539,7 @@ static int enetc_streamid_hw_set(struct enetc_ndev_priv *priv,
 
 	si_conf->en = 0x80;
 	si_conf->stream_handle = cpu_to_le32(sid->handle);
-	si_conf->iports = 1 << enetc_get_port(priv);
+	si_conf->iports = cpu_to_le32(1 << enetc_get_port(priv));
 	si_conf->id_type = sid->filtertype;
 	si_conf->oui[2] = 0x0;
 	si_conf->oui[1] = 0x80;
@@ -550,8 +549,8 @@ static int enetc_streamid_hw_set(struct enetc_ndev_priv *priv,
 
 	cbd.length = cpu_to_le16(data_size);
 
-	cbd.addr[0] = lower_32_bits(dma);
-	cbd.addr[1] = upper_32_bits(dma);
+	cbd.addr[0] = cpu_to_le32(lower_32_bits(dma));
+	cbd.addr[1] = cpu_to_le32(upper_32_bits(dma));
 
 	/* VIDM default to be 1.
 	 * VID Match. If set (b1) then the VID must match, otherwise
@@ -560,16 +559,14 @@ static int enetc_streamid_hw_set(struct enetc_ndev_priv *priv,
 	 */
 	if (si_conf->id_type == STREAMID_TYPE_NULL) {
 		ether_addr_copy(si_data->dmac, sid->dst_mac);
-		si_data->vid_vidm_tg =
-		cpu_to_le16((sid->vid & ENETC_CBDR_SID_VID_MASK) +
-			    ((((u16)(sid->tagged) & 0x3) << 14)
-			     | ENETC_CBDR_SID_VIDM));
+		si_data->vid_vidm_tg = (sid->vid & ENETC_CBDR_SID_VID_MASK) +
+				       ((((u16)(sid->tagged) & 0x3) << 14)
+				       | ENETC_CBDR_SID_VIDM);
 	} else if (si_conf->id_type == STREAMID_TYPE_SMAC) {
 		ether_addr_copy(si_data->smac, sid->src_mac);
-		si_data->vid_vidm_tg =
-		cpu_to_le16((sid->vid & ENETC_CBDR_SID_VID_MASK) +
-			    ((((u16)(sid->tagged) & 0x3) << 14)
-			     | ENETC_CBDR_SID_VIDM));
+		si_data->vid_vidm_tg = (sid->vid & ENETC_CBDR_SID_VID_MASK) +
+				       ((((u16)(sid->tagged) & 0x3) << 14)
+				       | ENETC_CBDR_SID_VIDM);
 	}
 
 	err = enetc_send_cmd(priv->si, &cbd);
@@ -604,7 +601,7 @@ static int enetc_streamfilter_hw_set(struct enetc_ndev_priv *priv,
 	}
 
 	sfi_config->sg_inst_table_index = cpu_to_le16(sfi->gate_id);
-	sfi_config->input_ports = 1 << enetc_get_port(priv);
+	sfi_config->input_ports = cpu_to_le32(1 << enetc_get_port(priv));
 
 	/* The priority value which may be matched against the
 	 * frame’s priority value to determine a match for this entry.
@@ -658,8 +655,8 @@ static int enetc_streamcounter_hw_get(struct enetc_ndev_priv *priv,
 		err = -ENOMEM;
 		goto exit;
 	}
-	cbd.addr[0] = lower_32_bits(dma);
-	cbd.addr[1] = upper_32_bits(dma);
+	cbd.addr[0] = cpu_to_le32(lower_32_bits(dma));
+	cbd.addr[1] = cpu_to_le32(upper_32_bits(dma));
 
 	cbd.length = cpu_to_le16(data_size);
 
@@ -667,28 +664,25 @@ static int enetc_streamcounter_hw_get(struct enetc_ndev_priv *priv,
 	if (err)
 		goto exit;
 
-	cnt->matching_frames_count =
-			((u64)le32_to_cpu(data_buf->matchh) << 32)
-			+ data_buf->matchl;
+	cnt->matching_frames_count = ((u64)data_buf->matchh << 32) +
+				     data_buf->matchl;
 
-	cnt->not_passing_sdu_count =
-			((u64)le32_to_cpu(data_buf->msdu_droph) << 32)
-			+ data_buf->msdu_dropl;
+	cnt->not_passing_sdu_count = ((u64)data_buf->msdu_droph << 32) +
+				     data_buf->msdu_dropl;
 
 	cnt->passing_sdu_count = cnt->matching_frames_count
 				- cnt->not_passing_sdu_count;
 
 	cnt->not_passing_frames_count =
-		((u64)le32_to_cpu(data_buf->stream_gate_droph) << 32)
-		+ le32_to_cpu(data_buf->stream_gate_dropl);
+				((u64)data_buf->stream_gate_droph << 32) +
+				data_buf->stream_gate_dropl;
 
-	cnt->passing_frames_count = cnt->matching_frames_count
-				- cnt->not_passing_sdu_count
-				- cnt->not_passing_frames_count;
+	cnt->passing_frames_count = cnt->matching_frames_count -
+				    cnt->not_passing_sdu_count -
+				    cnt->not_passing_frames_count;
 
-	cnt->red_frames_count =
-		((u64)le32_to_cpu(data_buf->flow_meter_droph) << 32)
-		+ le32_to_cpu(data_buf->flow_meter_dropl);
+	cnt->red_frames_count =	((u64)data_buf->flow_meter_droph << 32)	+
+				data_buf->flow_meter_dropl;
 
 exit:
 	kfree(data_buf);
@@ -795,15 +789,15 @@ static int enetc_streamgate_hw_set(struct enetc_ndev_priv *priv,
 		return -ENOMEM;
 	}
 
-	cbd.addr[0] = lower_32_bits(dma);
-	cbd.addr[1] = upper_32_bits(dma);
+	cbd.addr[0] = cpu_to_le32(lower_32_bits(dma));
+	cbd.addr[1] = cpu_to_le32(upper_32_bits(dma));
 
 	sgce = &sgcl_data->sgcl[0];
 
 	sgcl_config->agtst = 0x80;
 
-	sgcl_data->ct = cpu_to_le32(sgi->cycletime);
-	sgcl_data->cte = cpu_to_le32(sgi->cycletimext);
+	sgcl_data->ct = sgi->cycletime;
+	sgcl_data->cte = sgi->cycletimext;
 
 	if (sgi->init_ipv >= 0)
 		sgcl_config->aipv = (sgi->init_ipv & 0x7) | 0x8;
@@ -825,7 +819,7 @@ static int enetc_streamgate_hw_set(struct enetc_ndev_priv *priv,
 			to->msdu[2] = (from->maxoctets >> 16) & 0xFF;
 		}
 
-		to->interval = cpu_to_le32(from->interval);
+		to->interval = from->interval;
 	}
 
 	/* If basetime is less than now, calculate start time */
@@ -837,15 +831,15 @@ static int enetc_streamgate_hw_set(struct enetc_ndev_priv *priv,
 		err = get_start_ns(now, sgi->cycletime, &start);
 		if (err)
 			goto exit;
-		sgcl_data->btl = cpu_to_le32(lower_32_bits(start));
-		sgcl_data->bth = cpu_to_le32(upper_32_bits(start));
+		sgcl_data->btl = lower_32_bits(start);
+		sgcl_data->bth = upper_32_bits(start);
 	} else {
 		u32 hi, lo;
 
 		hi = upper_32_bits(sgi->basetime);
 		lo = lower_32_bits(sgi->basetime);
-		sgcl_data->bth = cpu_to_le32(hi);
-		sgcl_data->btl = cpu_to_le32(lo);
+		sgcl_data->bth = hi;
+		sgcl_data->btl = lo;
 	}
 
 	err = enetc_send_cmd(priv->si, &cbd);
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH net-next 0/2] enetc: Clean endianness warnings up
  2020-11-17 18:20 [PATCH net-next 0/2] enetc: Clean endianness warnings up Claudiu Manoil
  2020-11-17 18:20 ` [PATCH net-next 1/2] enetc: Fix endianness issues for enetc_ethtool Claudiu Manoil
  2020-11-17 18:20 ` [PATCH net-next 2/2] enetc: Fix endianness issues for enetc_qos Claudiu Manoil
@ 2020-11-18 17:52 ` Jakub Kicinski
  2020-11-18 17:54   ` Jakub Kicinski
  2 siblings, 1 reply; 7+ messages in thread
From: Jakub Kicinski @ 2020-11-18 17:52 UTC (permalink / raw)
  To: Claudiu Manoil; +Cc: netdev, David S . Miller

On Tue, 17 Nov 2020 20:20:02 +0200 Claudiu Manoil wrote:
> Cleanup patches to address the outstanding endianness issues
> in the driver reported by sparse.

Build bot says this doesn't apply to net-next, could you double check?

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH net-next 0/2] enetc: Clean endianness warnings up
  2020-11-18 17:52 ` [PATCH net-next 0/2] enetc: Clean endianness warnings up Jakub Kicinski
@ 2020-11-18 17:54   ` Jakub Kicinski
  2020-11-19 10:18     ` Claudiu Manoil
  2020-11-25 22:55     ` Jakub Kicinski
  0 siblings, 2 replies; 7+ messages in thread
From: Jakub Kicinski @ 2020-11-18 17:54 UTC (permalink / raw)
  To: Claudiu Manoil; +Cc: netdev, David S . Miller

On Wed, 18 Nov 2020 09:52:58 -0800 Jakub Kicinski wrote:
> On Tue, 17 Nov 2020 20:20:02 +0200 Claudiu Manoil wrote:
> > Cleanup patches to address the outstanding endianness issues
> > in the driver reported by sparse.  
> 
> Build bot says this doesn't apply to net-next, could you double check?

Hm, not sure what happened there, it does seem to apply now.

Could you resend regardless? Would be good to get this build tested.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* RE: [PATCH net-next 0/2] enetc: Clean endianness warnings up
  2020-11-18 17:54   ` Jakub Kicinski
@ 2020-11-19 10:18     ` Claudiu Manoil
  2020-11-25 22:55     ` Jakub Kicinski
  1 sibling, 0 replies; 7+ messages in thread
From: Claudiu Manoil @ 2020-11-19 10:18 UTC (permalink / raw)
  To: Jakub Kicinski; +Cc: netdev, David S . Miller

>-----Original Message-----
>From: Jakub Kicinski <kuba@kernel.org>
[...]
>Subject: Re: [PATCH net-next 0/2] enetc: Clean endianness warnings up
>
>On Wed, 18 Nov 2020 09:52:58 -0800 Jakub Kicinski wrote:
>> On Tue, 17 Nov 2020 20:20:02 +0200 Claudiu Manoil wrote:
>> > Cleanup patches to address the outstanding endianness issues
>> > in the driver reported by sparse.
>>
>> Build bot says this doesn't apply to net-next, could you double check?
>
>Hm, not sure what happened there, it does seem to apply now.
>
>Could you resend regardless? Would be good to get this build tested.

Reformatted and resent patches.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH net-next 0/2] enetc: Clean endianness warnings up
  2020-11-18 17:54   ` Jakub Kicinski
  2020-11-19 10:18     ` Claudiu Manoil
@ 2020-11-25 22:55     ` Jakub Kicinski
  1 sibling, 0 replies; 7+ messages in thread
From: Jakub Kicinski @ 2020-11-25 22:55 UTC (permalink / raw)
  To: Claudiu Manoil; +Cc: netdev, David S . Miller

On Wed, 18 Nov 2020 09:54:35 -0800 Jakub Kicinski wrote:
> On Wed, 18 Nov 2020 09:52:58 -0800 Jakub Kicinski wrote:
> > On Tue, 17 Nov 2020 20:20:02 +0200 Claudiu Manoil wrote:  
> > > Cleanup patches to address the outstanding endianness issues
> > > in the driver reported by sparse.    
> > 
> > Build bot says this doesn't apply to net-next, could you double check?  
> 
> Hm, not sure what happened there, it does seem to apply now.

Ah, I figured it out now. Apparently Patchwork orders the patches by
date / its own patch ID (assigned at arrival time).

When mbox for the series is downloaded things work correctly, but build
bot tries to fetch patches one by one, and there if patches arrived at
the mailing list out of order - they don't apply.

This wasn't as evident here with just two patches seemingly in the
right order but Randy just posted a 10 patch series which has the same
issue.

I reported it upstream [1] and tried to work around it in the bot.

Fingers crossed.

[1] https://github.com/getpatchwork/patchwork/issues/386

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2020-11-25 22:55 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-11-17 18:20 [PATCH net-next 0/2] enetc: Clean endianness warnings up Claudiu Manoil
2020-11-17 18:20 ` [PATCH net-next 1/2] enetc: Fix endianness issues for enetc_ethtool Claudiu Manoil
2020-11-17 18:20 ` [PATCH net-next 2/2] enetc: Fix endianness issues for enetc_qos Claudiu Manoil
2020-11-18 17:52 ` [PATCH net-next 0/2] enetc: Clean endianness warnings up Jakub Kicinski
2020-11-18 17:54   ` Jakub Kicinski
2020-11-19 10:18     ` Claudiu Manoil
2020-11-25 22:55     ` Jakub Kicinski

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.