[PATCHv2 1/2] firmware: stratix10-rsu: fix 32-bit compilation

Rosen Penev posted 2 patches 2 months, 4 weeks ago
[PATCHv2 1/2] firmware: stratix10-rsu: fix 32-bit compilation
Posted by Rosen Penev 2 months, 4 weeks ago
The code uses long which is changes depending on CONFIG settings.
However, these longs should really be 64-bit. Fixes at least the
following errors:

drivers/firmware/stratix10-rsu.c: In function ‘rsu_get_spt_callback’:
drivers/firmware/stratix10-rsu.c:285:28: error: left shift count >=
width of type [-Werror=shift-count-overflow]
  285 |         priv->spt0_address <<= 32;
      |                            ^~~
drivers/firmware/stratix10-rsu.c:289:28: error: left shift count >=
width of type [-Werror=shift-count-overflow]
  289 |         priv->spt1_address <<= 32;
      |                            ^~~
In file included from <command-line>:
drivers/firmware/stratix10-rsu.c: In function ‘rsu_status_callback’:
././include/linux/compiler_types.h:597:45: error: call to
‘__compiletime_assert_377’ declared with attribute error: FIELD_GET:
type of reg too small for mask
  597 |         _compiletime_assert(condition, msg,
__compiletime_assert_, __COUNTER__)
      |                                             ^
././include/linux/compiler_types.h:578:25: note: in definition of
macro ‘__compiletime_assert’
  578 |                         prefix ## suffix();
         \
      |                         ^~~~~~
././include/linux/compiler_types.h:597:9: note: in expansion of macro
‘_compiletime_assert’
  597 |         _compiletime_assert(condition, msg,
__compiletime_assert_, __COUNTER__)
      |         ^~~~~~~~~~~~~~~~~~~
./include/linux/build_bug.h:39:37: note: in expansion of macro
‘compiletime_assert’
   39 | #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
      |                                     ^~~~~~~~~~~~~~~~~~
./include/linux/bitfield.h:72:17: note: in expansion of macro ‘BUILD_BUG_ON_MSG’
   72 |                 BUILD_BUG_ON_MSG(__bf_cast_unsigned(_mask,
_mask) >     \
      |                 ^~~~~~~~~~~~~~~~
./include/linux/bitfield.h:155:17: note: in expansion of macro
‘__BF_FIELD_CHECK’
  155 |                 __BF_FIELD_CHECK(_mask, _reg, 0U, "FIELD_GET:
");       \
      |                 ^~~~~~~~~~~~~~~~
drivers/firmware/stratix10-rsu.c:122:40: note: in expansion of macro ‘FIELD_GET’
  122 |                 priv->status.version = FIELD_GET(RSU_VERSION_MASK,
      |                                        ^~~~~~~~~

Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
 drivers/firmware/stratix10-rsu.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/firmware/stratix10-rsu.c b/drivers/firmware/stratix10-rsu.c
index 1ea39a0a76c7..2b8ad04679f7 100644
--- a/drivers/firmware/stratix10-rsu.c
+++ b/drivers/firmware/stratix10-rsu.c
@@ -97,8 +97,8 @@ struct stratix10_rsu_priv {
 	unsigned int retry_counter;
 	unsigned int max_retry;
 
-	unsigned long spt0_address;
-	unsigned long spt1_address;
+	u64	     spt0_address;
+	u64	     spt1_address;
 
 	unsigned int *get_spt_response_buf;
 };
@@ -120,14 +120,14 @@ static void rsu_status_callback(struct stratix10_svc_client *client,
 
 	if (data->status == BIT(SVC_STATUS_OK)) {
 		priv->status.version = FIELD_GET(RSU_VERSION_MASK,
-						 res->a2);
+						 (u64) res->a2);
 		priv->status.state = FIELD_GET(RSU_STATE_MASK, res->a2);
 		priv->status.fail_image = res->a1;
 		priv->status.current_image = res->a0;
 		priv->status.error_location =
 			FIELD_GET(RSU_ERROR_LOCATION_MASK, res->a3);
 		priv->status.error_details =
-			FIELD_GET(RSU_ERROR_DETAIL_MASK, res->a3);
+			FIELD_GET(RSU_ERROR_DETAIL_MASK, (u64) res->a3);
 	} else {
 		dev_err(client->dev, "COMMAND_RSU_STATUS returned 0x%lX\n",
 			res->a0);
@@ -632,7 +632,7 @@ static ssize_t spt0_address_show(struct device *dev,
 	if (priv->spt0_address == INVALID_SPT_ADDRESS)
 		return -EIO;
 
-	return scnprintf(buf, PAGE_SIZE, "0x%08lx\n", priv->spt0_address);
+	return scnprintf(buf, PAGE_SIZE, "0x%08llx\n", priv->spt0_address);
 }
 
 static ssize_t spt1_address_show(struct device *dev,
@@ -646,7 +646,7 @@ static ssize_t spt1_address_show(struct device *dev,
 	if (priv->spt1_address == INVALID_SPT_ADDRESS)
 		return -EIO;
 
-	return scnprintf(buf, PAGE_SIZE, "0x%08lx\n", priv->spt1_address);
+	return scnprintf(buf, PAGE_SIZE, "0x%08llx\n", priv->spt1_address);
 }
 
 static DEVICE_ATTR_RO(current_image);
-- 
2.51.2

Re: [PATCHv2 1/2] firmware: stratix10-rsu: fix 32-bit compilation
Posted by Dinh Nguyen 2 months, 3 weeks ago
Hi Rosen,

On 11/12/25 00:30, Rosen Penev wrote:
> The code uses long which is changes depending on CONFIG settings.
> However, these longs should really be 64-bit. Fixes at least the
> following errors:
> 
> drivers/firmware/stratix10-rsu.c: In function ‘rsu_get_spt_callback’:
Could you respin this series based on linux-next? There was a couple of 
patches that was recently merged.

Thanks,

Dinh
Re: [PATCHv2 1/2] firmware: stratix10-rsu: fix 32-bit compilation
Posted by Rosen Penev 2 months, 3 weeks ago
On Mon, Nov 17, 2025 at 7:33 PM Dinh Nguyen <dinguyen@kernel.org> wrote:
>
> Hi Rosen,
>
> On 11/12/25 00:30, Rosen Penev wrote:
> > The code uses long which is changes depending on CONFIG settings.
> > However, these longs should really be 64-bit. Fixes at least the
> > following errors:
> >
> > drivers/firmware/stratix10-rsu.c: In function ‘rsu_get_spt_callback’:
> Could you respin this series based on linux-next? There was a couple of
> patches that was recently merged.
Yeah I'm not sure about this anymore.

So compilation works on x86 and arm, both 32 and 64 bit, but kbuild
complained about the build failing on s390x. I need to think about how
to handle this.
>
> Thanks,
>
> Dinh