* [PATCH v4 01/19] firmware: turris-mox-rwtm: Do not complete if there are no waiters
2024-07-15 10:47 [PATCH v4 00/19] Updates for turris-mox-rwtm driver Marek Behún
@ 2024-07-15 10:47 ` Marek Behún
2024-07-15 10:47 ` [PATCH v4 02/19] firmware: turris-mox-rwtm: Fix checking return value of wait_for_completion_timeout() Marek Behún
` (19 subsequent siblings)
20 siblings, 0 replies; 22+ messages in thread
From: Marek Behún @ 2024-07-15 10:47 UTC (permalink / raw)
To: Gregory CLEMENT, Andrew Lunn, Arnd Bergmann, soc, arm,
Andy Shevchenko, Hans de Goede, Ilpo Järvinen
Cc: Marek Behún
Do not complete the "command done" completion if there are no waiters.
This can happen if a wait_for_completion() timed out or was interrupted.
Fixes: 389711b37493 ("firmware: Add Turris Mox rWTM firmware driver")
Signed-off-by: Marek Behún <kabel@kernel.org>
Reviewed-by: Andy Shevchenko <andy@kernel.org>
---
drivers/firmware/turris-mox-rwtm.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/firmware/turris-mox-rwtm.c b/drivers/firmware/turris-mox-rwtm.c
index 31d962cdd6eb..f1f9160c4195 100644
--- a/drivers/firmware/turris-mox-rwtm.c
+++ b/drivers/firmware/turris-mox-rwtm.c
@@ -2,7 +2,7 @@
/*
* Turris Mox rWTM firmware driver
*
- * Copyright (C) 2019 Marek Behún <kabel@kernel.org>
+ * Copyright (C) 2019, 2024 Marek Behún <kabel@kernel.org>
*/
#include <linux/armada-37xx-rwtm-mailbox.h>
@@ -174,6 +174,9 @@ static void mox_rwtm_rx_callback(struct mbox_client *cl, void *data)
struct mox_rwtm *rwtm = dev_get_drvdata(cl->dev);
struct armada_37xx_rwtm_rx_msg *msg = data;
+ if (completion_done(&rwtm->cmd_done))
+ return;
+
rwtm->reply = *msg;
complete(&rwtm->cmd_done);
}
--
2.44.2
^ permalink raw reply related [flat|nested] 22+ messages in thread* [PATCH v4 02/19] firmware: turris-mox-rwtm: Fix checking return value of wait_for_completion_timeout()
2024-07-15 10:47 [PATCH v4 00/19] Updates for turris-mox-rwtm driver Marek Behún
2024-07-15 10:47 ` [PATCH v4 01/19] firmware: turris-mox-rwtm: Do not complete if there are no waiters Marek Behún
@ 2024-07-15 10:47 ` Marek Behún
2024-07-15 10:47 ` [PATCH v4 03/19] firmware: turris-mox-rwtm: Use macro constant instead of hardcoded 4096 Marek Behún
` (18 subsequent siblings)
20 siblings, 0 replies; 22+ messages in thread
From: Marek Behún @ 2024-07-15 10:47 UTC (permalink / raw)
To: Gregory CLEMENT, Andrew Lunn, Arnd Bergmann, soc, arm,
Andy Shevchenko, Hans de Goede, Ilpo Järvinen
Cc: Marek Behún
The wait_for_completion_timeout() function returns 0 if timed out, and a
positive value if completed. Fix the usage of this function.
Fixes: 389711b37493 ("firmware: Add Turris Mox rWTM firmware driver")
Fixes: 2eab59cf0d20 ("firmware: turris-mox-rwtm: fail probing when firmware does not support hwrng")
Signed-off-by: Marek Behún <kabel@kernel.org>
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Reviewed-by: Andy Shevchenko <andy@kernel.org>
---
drivers/firmware/turris-mox-rwtm.c | 15 ++++++---------
1 file changed, 6 insertions(+), 9 deletions(-)
diff --git a/drivers/firmware/turris-mox-rwtm.c b/drivers/firmware/turris-mox-rwtm.c
index f1f9160c4195..3f4758e03c81 100644
--- a/drivers/firmware/turris-mox-rwtm.c
+++ b/drivers/firmware/turris-mox-rwtm.c
@@ -202,9 +202,8 @@ static int mox_get_board_info(struct mox_rwtm *rwtm)
if (ret < 0)
return ret;
- ret = wait_for_completion_timeout(&rwtm->cmd_done, HZ / 2);
- if (ret < 0)
- return ret;
+ if (!wait_for_completion_timeout(&rwtm->cmd_done, HZ / 2))
+ return -ETIMEDOUT;
ret = mox_get_status(MBOX_CMD_BOARD_INFO, reply->retval);
if (ret == -ENODATA) {
@@ -238,9 +237,8 @@ static int mox_get_board_info(struct mox_rwtm *rwtm)
if (ret < 0)
return ret;
- ret = wait_for_completion_timeout(&rwtm->cmd_done, HZ / 2);
- if (ret < 0)
- return ret;
+ if (!wait_for_completion_timeout(&rwtm->cmd_done, HZ / 2))
+ return -ETIMEDOUT;
ret = mox_get_status(MBOX_CMD_ECDSA_PUB_KEY, reply->retval);
if (ret == -ENODATA) {
@@ -277,9 +275,8 @@ static int check_get_random_support(struct mox_rwtm *rwtm)
if (ret < 0)
return ret;
- ret = wait_for_completion_timeout(&rwtm->cmd_done, HZ / 2);
- if (ret < 0)
- return ret;
+ if (!wait_for_completion_timeout(&rwtm->cmd_done, HZ / 2))
+ return -ETIMEDOUT;
return mox_get_status(MBOX_CMD_GET_RANDOM, rwtm->reply.retval);
}
--
2.44.2
^ permalink raw reply related [flat|nested] 22+ messages in thread* [PATCH v4 03/19] firmware: turris-mox-rwtm: Use macro constant instead of hardcoded 4096
2024-07-15 10:47 [PATCH v4 00/19] Updates for turris-mox-rwtm driver Marek Behún
2024-07-15 10:47 ` [PATCH v4 01/19] firmware: turris-mox-rwtm: Do not complete if there are no waiters Marek Behún
2024-07-15 10:47 ` [PATCH v4 02/19] firmware: turris-mox-rwtm: Fix checking return value of wait_for_completion_timeout() Marek Behún
@ 2024-07-15 10:47 ` Marek Behún
2024-07-15 10:47 ` [PATCH v4 04/19] firmware: turris-mox-rwtm: Use ETH_ALEN instead of hardcoded 6 Marek Behún
` (17 subsequent siblings)
20 siblings, 0 replies; 22+ messages in thread
From: Marek Behún @ 2024-07-15 10:47 UTC (permalink / raw)
To: Gregory CLEMENT, Andrew Lunn, Arnd Bergmann, soc, arm,
Andy Shevchenko, Hans de Goede, Ilpo Järvinen
Cc: Marek Behún
The 4096 bytes limit in mox_hwrng_read() is due to the DMA buffer being
allocated to one PAGE_SIZE bytes. Use new local macro constant
RWTM_DMA_BUFFER_SIZE at allocation time and when used in mox_hwrng_read().
Use SZ_4K instead of PAGE_SIZE. Although PAGE_SIZE is never set to a
larger value on Armada 3720, it theoretically could, and this would be a
waste of space.
Signed-off-by: Marek Behún <kabel@kernel.org>
Reviewed-by: Andy Shevchenko <andy@kernel.org>
---
drivers/firmware/turris-mox-rwtm.c | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/drivers/firmware/turris-mox-rwtm.c b/drivers/firmware/turris-mox-rwtm.c
index 3f4758e03c81..aafd747543f6 100644
--- a/drivers/firmware/turris-mox-rwtm.c
+++ b/drivers/firmware/turris-mox-rwtm.c
@@ -11,14 +11,18 @@
#include <linux/dma-mapping.h>
#include <linux/hw_random.h>
#include <linux/mailbox_client.h>
+#include <linux/minmax.h>
#include <linux/module.h>
#include <linux/mutex.h>
#include <linux/of.h>
#include <linux/platform_device.h>
+#include <linux/sizes.h>
#include <linux/slab.h>
#define DRIVER_NAME "turris-mox-rwtm"
+#define RWTM_DMA_BUFFER_SIZE SZ_4K
+
/*
* The macros and constants below come from Turris Mox's rWTM firmware code.
* This firmware is open source and it's sources can be found at
@@ -287,8 +291,7 @@ static int mox_hwrng_read(struct hwrng *rng, void *data, size_t max, bool wait)
struct armada_37xx_rwtm_tx_msg msg;
int ret;
- if (max > 4096)
- max = 4096;
+ max = min(max, RWTM_DMA_BUFFER_SIZE);
msg.command = MBOX_CMD_GET_RANDOM;
msg.args[0] = 1;
@@ -479,8 +482,8 @@ static int turris_mox_rwtm_probe(struct platform_device *pdev)
return -ENOMEM;
rwtm->dev = dev;
- rwtm->buf = dmam_alloc_coherent(dev, PAGE_SIZE, &rwtm->buf_phys,
- GFP_KERNEL);
+ rwtm->buf = dmam_alloc_coherent(dev, RWTM_DMA_BUFFER_SIZE,
+ &rwtm->buf_phys, GFP_KERNEL);
if (!rwtm->buf)
return -ENOMEM;
--
2.44.2
^ permalink raw reply related [flat|nested] 22+ messages in thread* [PATCH v4 04/19] firmware: turris-mox-rwtm: Use ETH_ALEN instead of hardcoded 6
2024-07-15 10:47 [PATCH v4 00/19] Updates for turris-mox-rwtm driver Marek Behún
` (2 preceding siblings ...)
2024-07-15 10:47 ` [PATCH v4 03/19] firmware: turris-mox-rwtm: Use macro constant instead of hardcoded 4096 Marek Behún
@ 2024-07-15 10:47 ` Marek Behún
2024-07-15 10:47 ` [PATCH v4 05/19] firmware: turris-mox-rwtm: Use the boolean type where appropriate Marek Behún
` (16 subsequent siblings)
20 siblings, 0 replies; 22+ messages in thread
From: Marek Behún @ 2024-07-15 10:47 UTC (permalink / raw)
To: Gregory CLEMENT, Andrew Lunn, Arnd Bergmann, soc, arm,
Andy Shevchenko, Hans de Goede, Ilpo Järvinen
Cc: Marek Behún
Use the ETH_ALEN macro instead of hardcoded 6 for MAC address length.
Signed-off-by: Marek Behún <kabel@kernel.org>
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Reviewed-by: Andy Shevchenko <andy@kernel.org>
---
drivers/firmware/turris-mox-rwtm.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/firmware/turris-mox-rwtm.c b/drivers/firmware/turris-mox-rwtm.c
index aafd747543f6..f7f9859b8f61 100644
--- a/drivers/firmware/turris-mox-rwtm.c
+++ b/drivers/firmware/turris-mox-rwtm.c
@@ -10,6 +10,7 @@
#include <linux/debugfs.h>
#include <linux/dma-mapping.h>
#include <linux/hw_random.h>
+#include <linux/if_ether.h>
#include <linux/mailbox_client.h>
#include <linux/minmax.h>
#include <linux/module.h>
@@ -69,7 +70,7 @@ struct mox_rwtm {
int has_board_info;
u64 serial_number;
int board_version, ram_size;
- u8 mac_address1[6], mac_address2[6];
+ u8 mac_address1[ETH_ALEN], mac_address2[ETH_ALEN];
/* public key burned in eFuse */
int has_pubkey;
--
2.44.2
^ permalink raw reply related [flat|nested] 22+ messages in thread* [PATCH v4 05/19] firmware: turris-mox-rwtm: Use the boolean type where appropriate
2024-07-15 10:47 [PATCH v4 00/19] Updates for turris-mox-rwtm driver Marek Behún
` (3 preceding siblings ...)
2024-07-15 10:47 ` [PATCH v4 04/19] firmware: turris-mox-rwtm: Use ETH_ALEN instead of hardcoded 6 Marek Behún
@ 2024-07-15 10:47 ` Marek Behún
2024-07-15 10:47 ` [PATCH v4 06/19] firmware: turris-mox-rwtm: Hide signature related constants behind macros Marek Behún
` (15 subsequent siblings)
20 siblings, 0 replies; 22+ messages in thread
From: Marek Behún @ 2024-07-15 10:47 UTC (permalink / raw)
To: Gregory CLEMENT, Andrew Lunn, Arnd Bergmann, soc, arm,
Andy Shevchenko, Hans de Goede, Ilpo Järvinen
Cc: Marek Behún
Use the boolean type for has_board_info, has_pubkey and last_sig_done
members of the driver's private structure.
Signed-off-by: Marek Behún <kabel@kernel.org>
Reviewed-by: Andy Shevchenko <andy@kernel.org>
---
drivers/firmware/turris-mox-rwtm.c | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/drivers/firmware/turris-mox-rwtm.c b/drivers/firmware/turris-mox-rwtm.c
index f7f9859b8f61..5ed480ac5146 100644
--- a/drivers/firmware/turris-mox-rwtm.c
+++ b/drivers/firmware/turris-mox-rwtm.c
@@ -19,6 +19,7 @@
#include <linux/platform_device.h>
#include <linux/sizes.h>
#include <linux/slab.h>
+#include <linux/types.h>
#define DRIVER_NAME "turris-mox-rwtm"
@@ -67,13 +68,13 @@ struct mox_rwtm {
struct completion cmd_done;
/* board information */
- int has_board_info;
+ bool has_board_info;
u64 serial_number;
int board_version, ram_size;
u8 mac_address1[ETH_ALEN], mac_address2[ETH_ALEN];
/* public key burned in eFuse */
- int has_pubkey;
+ bool has_pubkey;
u8 pubkey[135];
#ifdef CONFIG_DEBUG_FS
@@ -85,7 +86,7 @@ struct mox_rwtm {
*/
struct dentry *debugfs_root;
u32 last_sig[34];
- int last_sig_done;
+ bool last_sig_done;
#endif
};
@@ -229,7 +230,7 @@ static int mox_get_board_info(struct mox_rwtm *rwtm)
reply->status[5]);
reply_to_mac_addr(rwtm->mac_address2, reply->status[6],
reply->status[7]);
- rwtm->has_board_info = 1;
+ rwtm->has_board_info = true;
pr_info("Turris Mox serial number %016llX\n",
rwtm->serial_number);
@@ -256,7 +257,7 @@ static int mox_get_board_info(struct mox_rwtm *rwtm)
} else {
u32 *s = reply->status;
- rwtm->has_pubkey = 1;
+ rwtm->has_pubkey = true;
sprintf(rwtm->pubkey,
"%06x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x",
ret, s[0], s[1], s[2], s[3], s[4], s[5], s[6], s[7],
@@ -352,7 +353,7 @@ static ssize_t do_sign_read(struct file *file, char __user *buf, size_t len,
/* 2 arrays of 17 32-bit words are 136 bytes */
ret = simple_read_from_buffer(buf, len, ppos, rwtm->last_sig, 136);
- rwtm->last_sig_done = 0;
+ rwtm->last_sig_done = false;
return ret;
}
@@ -418,7 +419,7 @@ static ssize_t do_sign_write(struct file *file, const char __user *buf,
*/
memcpy(rwtm->last_sig, rwtm->buf + 68, 136);
cpu_to_be32_array(rwtm->last_sig, rwtm->last_sig, 34);
- rwtm->last_sig_done = 1;
+ rwtm->last_sig_done = true;
mutex_unlock(&rwtm->busy);
return len;
--
2.44.2
^ permalink raw reply related [flat|nested] 22+ messages in thread* [PATCH v4 06/19] firmware: turris-mox-rwtm: Hide signature related constants behind macros
2024-07-15 10:47 [PATCH v4 00/19] Updates for turris-mox-rwtm driver Marek Behún
` (4 preceding siblings ...)
2024-07-15 10:47 ` [PATCH v4 05/19] firmware: turris-mox-rwtm: Use the boolean type where appropriate Marek Behún
@ 2024-07-15 10:47 ` Marek Behún
2024-07-15 10:47 ` [PATCH v4 07/19] firmware: turris-mox-rwtm: Fix driver includes Marek Behún
` (14 subsequent siblings)
20 siblings, 0 replies; 22+ messages in thread
From: Marek Behún @ 2024-07-15 10:47 UTC (permalink / raw)
To: Gregory CLEMENT, Andrew Lunn, Arnd Bergmann, soc, arm,
Andy Shevchenko, Hans de Goede, Ilpo Järvinen
Cc: Marek Behún
Hide signature generation related constants behind macros instead of
hardcoding the values.
Use SHA512_DIGEST_SIZE from crypto/sha2.h instead of hardcoded 64 as the
message size.
Signed-off-by: Marek Behún <kabel@kernel.org>
Reviewed-by: Andy Shevchenko <andy@kernel.org>
---
drivers/firmware/turris-mox-rwtm.c | 36 ++++++++++++++++++------------
1 file changed, 22 insertions(+), 14 deletions(-)
diff --git a/drivers/firmware/turris-mox-rwtm.c b/drivers/firmware/turris-mox-rwtm.c
index 5ed480ac5146..0ae5b2086113 100644
--- a/drivers/firmware/turris-mox-rwtm.c
+++ b/drivers/firmware/turris-mox-rwtm.c
@@ -5,6 +5,7 @@
* Copyright (C) 2019, 2024 Marek Behún <kabel@kernel.org>
*/
+#include <crypto/sha2.h>
#include <linux/armada-37xx-rwtm-mailbox.h>
#include <linux/completion.h>
#include <linux/debugfs.h>
@@ -31,6 +32,11 @@
* https://gitlab.labs.nic.cz/turris/mox-boot-builder/tree/master/wtmi.
*/
+#define MOX_ECC_NUMBER_WORDS 17
+#define MOX_ECC_NUMBER_LEN (MOX_ECC_NUMBER_WORDS * sizeof(u32))
+
+#define MOX_ECC_SIGNATURE_WORDS (2 * MOX_ECC_NUMBER_WORDS)
+
#define MBOX_STS_SUCCESS (0 << 30)
#define MBOX_STS_FAIL (1 << 30)
#define MBOX_STS_BADCMD (2 << 30)
@@ -85,7 +91,7 @@ struct mox_rwtm {
* from userspace.
*/
struct dentry *debugfs_root;
- u32 last_sig[34];
+ u32 last_sig[MOX_ECC_SIGNATURE_WORDS];
bool last_sig_done;
#endif
};
@@ -341,18 +347,18 @@ static ssize_t do_sign_read(struct file *file, char __user *buf, size_t len,
struct mox_rwtm *rwtm = file->private_data;
ssize_t ret;
- /* only allow one read, of 136 bytes, from position 0 */
+ /* only allow one read, of whole signature, from position 0 */
if (*ppos != 0)
return 0;
- if (len < 136)
+ if (len < sizeof(rwtm->last_sig))
return -EINVAL;
if (!rwtm->last_sig_done)
return -ENODATA;
- /* 2 arrays of 17 32-bit words are 136 bytes */
- ret = simple_read_from_buffer(buf, len, ppos, rwtm->last_sig, 136);
+ ret = simple_read_from_buffer(buf, len, ppos, rwtm->last_sig,
+ sizeof(rwtm->last_sig));
rwtm->last_sig_done = false;
return ret;
@@ -367,8 +373,7 @@ static ssize_t do_sign_write(struct file *file, const char __user *buf,
loff_t dummy = 0;
ssize_t ret;
- /* the input is a SHA-512 hash, so exactly 64 bytes have to be read */
- if (len != 64)
+ if (len != SHA512_DIGEST_SIZE)
return -EINVAL;
/* if last result is not zero user has not read that information yet */
@@ -389,17 +394,18 @@ static ssize_t do_sign_write(struct file *file, const char __user *buf,
* 3. Address of the buffer where ECDSA signature value S shall be
* stored by the rWTM firmware.
*/
- memset(rwtm->buf, 0, 4);
- ret = simple_write_to_buffer(rwtm->buf + 4, 64, &dummy, buf, len);
+ memset(rwtm->buf, 0, sizeof(u32));
+ ret = simple_write_to_buffer(rwtm->buf + sizeof(u32),
+ SHA512_DIGEST_SIZE, &dummy, buf, len);
if (ret < 0)
goto unlock_mutex;
- be32_to_cpu_array(rwtm->buf, rwtm->buf, 17);
+ be32_to_cpu_array(rwtm->buf, rwtm->buf, MOX_ECC_NUMBER_WORDS);
msg.command = MBOX_CMD_SIGN;
msg.args[0] = 1;
msg.args[1] = rwtm->buf_phys;
- msg.args[2] = rwtm->buf_phys + 68;
- msg.args[3] = rwtm->buf_phys + 2 * 68;
+ msg.args[2] = rwtm->buf_phys + MOX_ECC_NUMBER_LEN;
+ msg.args[3] = rwtm->buf_phys + 2 * MOX_ECC_NUMBER_LEN;
ret = mbox_send_message(rwtm->mbox, &msg);
if (ret < 0)
goto unlock_mutex;
@@ -417,8 +423,10 @@ static ssize_t do_sign_write(struct file *file, const char __user *buf,
* computed by the rWTM firmware and convert their words from
* LE to BE.
*/
- memcpy(rwtm->last_sig, rwtm->buf + 68, 136);
- cpu_to_be32_array(rwtm->last_sig, rwtm->last_sig, 34);
+ memcpy(rwtm->last_sig, rwtm->buf + MOX_ECC_NUMBER_LEN,
+ sizeof(rwtm->last_sig));
+ cpu_to_be32_array(rwtm->last_sig, rwtm->last_sig,
+ MOX_ECC_SIGNATURE_WORDS);
rwtm->last_sig_done = true;
mutex_unlock(&rwtm->busy);
--
2.44.2
^ permalink raw reply related [flat|nested] 22+ messages in thread* [PATCH v4 07/19] firmware: turris-mox-rwtm: Fix driver includes
2024-07-15 10:47 [PATCH v4 00/19] Updates for turris-mox-rwtm driver Marek Behún
` (5 preceding siblings ...)
2024-07-15 10:47 ` [PATCH v4 06/19] firmware: turris-mox-rwtm: Hide signature related constants behind macros Marek Behún
@ 2024-07-15 10:47 ` Marek Behún
2024-07-15 10:47 ` [PATCH v4 08/19] firmware: turris-mox-rwtm: Use sysfs_emit() instead of sprintf() Marek Behún
` (13 subsequent siblings)
20 siblings, 0 replies; 22+ messages in thread
From: Marek Behún @ 2024-07-15 10:47 UTC (permalink / raw)
To: Gregory CLEMENT, Andrew Lunn, Arnd Bergmann, soc, arm,
Andy Shevchenko, Hans de Goede, Ilpo Järvinen
Cc: Marek Behún
Drop including of.h, include several other headers that are used but not
included directly.
Signed-off-by: Marek Behún <kabel@kernel.org>
Reviewed-by: Andy Shevchenko <andy@kernel.org>
---
drivers/firmware/turris-mox-rwtm.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/drivers/firmware/turris-mox-rwtm.c b/drivers/firmware/turris-mox-rwtm.c
index 0ae5b2086113..0da40f55c750 100644
--- a/drivers/firmware/turris-mox-rwtm.c
+++ b/drivers/firmware/turris-mox-rwtm.c
@@ -8,18 +8,23 @@
#include <crypto/sha2.h>
#include <linux/armada-37xx-rwtm-mailbox.h>
#include <linux/completion.h>
+#include <linux/container_of.h>
#include <linux/debugfs.h>
+#include <linux/device.h>
#include <linux/dma-mapping.h>
+#include <linux/err.h>
+#include <linux/fs.h>
#include <linux/hw_random.h>
#include <linux/if_ether.h>
+#include <linux/kobject.h>
#include <linux/mailbox_client.h>
#include <linux/minmax.h>
#include <linux/module.h>
#include <linux/mutex.h>
-#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/sizes.h>
#include <linux/slab.h>
+#include <linux/sysfs.h>
#include <linux/types.h>
#define DRIVER_NAME "turris-mox-rwtm"
--
2.44.2
^ permalink raw reply related [flat|nested] 22+ messages in thread* [PATCH v4 08/19] firmware: turris-mox-rwtm: Use sysfs_emit() instead of sprintf()
2024-07-15 10:47 [PATCH v4 00/19] Updates for turris-mox-rwtm driver Marek Behún
` (6 preceding siblings ...)
2024-07-15 10:47 ` [PATCH v4 07/19] firmware: turris-mox-rwtm: Fix driver includes Marek Behún
@ 2024-07-15 10:47 ` Marek Behún
2024-07-15 10:47 ` [PATCH v4 09/19] firmware: turris-mox-rwtm: Don't create own kobject type Marek Behún
` (12 subsequent siblings)
20 siblings, 0 replies; 22+ messages in thread
From: Marek Behún @ 2024-07-15 10:47 UTC (permalink / raw)
To: Gregory CLEMENT, Andrew Lunn, Arnd Bergmann, soc, arm,
Andy Shevchenko, Hans de Goede, Ilpo Järvinen
Cc: Marek Behún
Use sysfs_emit() instead of sprintf() in sysfs attribute .show()
method.
Signed-off-by: Marek Behún <kabel@kernel.org>
---
drivers/firmware/turris-mox-rwtm.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/firmware/turris-mox-rwtm.c b/drivers/firmware/turris-mox-rwtm.c
index 0da40f55c750..e3e209247e68 100644
--- a/drivers/firmware/turris-mox-rwtm.c
+++ b/drivers/firmware/turris-mox-rwtm.c
@@ -151,7 +151,7 @@ name##_show(struct kobject *kobj, struct kobj_attribute *a, \
struct mox_rwtm *rwtm = to_rwtm(kobj); \
if (!rwtm->has_##cat) \
return -ENODATA; \
- return sprintf(buf, format, rwtm->name); \
+ return sysfs_emit(buf, format, rwtm->name); \
} \
static struct kobj_attribute mox_attr_##name = __ATTR_RO(name)
--
2.44.2
^ permalink raw reply related [flat|nested] 22+ messages in thread* [PATCH v4 09/19] firmware: turris-mox-rwtm: Don't create own kobject type
2024-07-15 10:47 [PATCH v4 00/19] Updates for turris-mox-rwtm driver Marek Behún
` (7 preceding siblings ...)
2024-07-15 10:47 ` [PATCH v4 08/19] firmware: turris-mox-rwtm: Use sysfs_emit() instead of sprintf() Marek Behún
@ 2024-07-15 10:47 ` Marek Behún
2024-07-15 10:47 ` [PATCH v4 10/19] firmware: turris-mox-rwtm: Simplify debugfs code Marek Behún
` (11 subsequent siblings)
20 siblings, 0 replies; 22+ messages in thread
From: Marek Behún @ 2024-07-15 10:47 UTC (permalink / raw)
To: Gregory CLEMENT, Andrew Lunn, Arnd Bergmann, soc, arm,
Andy Shevchenko, Hans de Goede, Ilpo Järvinen
Cc: Marek Behún
In order to create attribute files in /sys/firmware/turris-mox-rwtm,
this driver creates it's own kobject type.
Simplify this by dropping this own kobject creation, and instead
creating standard device attribute files.
For backwards compatibility with sysfs ABI, create a symlink
/sys/firmware/turris-mox-rwtm, pointing to this device's sysfs
directory.
Signed-off-by: Marek Behún <kabel@kernel.org>
Reviewed-by: Andy Shevchenko <andy@kernel.org>
---
drivers/firmware/turris-mox-rwtm.c | 108 ++++++++---------------------
1 file changed, 30 insertions(+), 78 deletions(-)
diff --git a/drivers/firmware/turris-mox-rwtm.c b/drivers/firmware/turris-mox-rwtm.c
index e3e209247e68..ca70a07b4dee 100644
--- a/drivers/firmware/turris-mox-rwtm.c
+++ b/drivers/firmware/turris-mox-rwtm.c
@@ -23,7 +23,6 @@
#include <linux/mutex.h>
#include <linux/platform_device.h>
#include <linux/sizes.h>
-#include <linux/slab.h>
#include <linux/sysfs.h>
#include <linux/types.h>
@@ -61,13 +60,10 @@ enum mbox_cmd {
MBOX_CMD_OTP_WRITE = 8,
};
-struct mox_kobject;
-
struct mox_rwtm {
struct device *dev;
struct mbox_client mbox_client;
struct mbox_chan *mbox;
- struct mox_kobject *kobj;
struct hwrng hwrng;
struct armada_37xx_rwtm_rx_msg reply;
@@ -101,59 +97,17 @@ struct mox_rwtm {
#endif
};
-struct mox_kobject {
- struct kobject kobj;
- struct mox_rwtm *rwtm;
-};
-
-static inline struct kobject *rwtm_to_kobj(struct mox_rwtm *rwtm)
-{
- return &rwtm->kobj->kobj;
-}
-
-static inline struct mox_rwtm *to_rwtm(struct kobject *kobj)
-{
- return container_of(kobj, struct mox_kobject, kobj)->rwtm;
-}
-
-static void mox_kobj_release(struct kobject *kobj)
-{
- kfree(to_rwtm(kobj)->kobj);
-}
-
-static const struct kobj_type mox_kobj_ktype = {
- .release = mox_kobj_release,
- .sysfs_ops = &kobj_sysfs_ops,
-};
-
-static int mox_kobj_create(struct mox_rwtm *rwtm)
-{
- rwtm->kobj = kzalloc(sizeof(*rwtm->kobj), GFP_KERNEL);
- if (!rwtm->kobj)
- return -ENOMEM;
-
- kobject_init(rwtm_to_kobj(rwtm), &mox_kobj_ktype);
- if (kobject_add(rwtm_to_kobj(rwtm), firmware_kobj, "turris-mox-rwtm")) {
- kobject_put(rwtm_to_kobj(rwtm));
- return -ENXIO;
- }
-
- rwtm->kobj->rwtm = rwtm;
-
- return 0;
-}
-
#define MOX_ATTR_RO(name, format, cat) \
static ssize_t \
-name##_show(struct kobject *kobj, struct kobj_attribute *a, \
+name##_show(struct device *dev, struct device_attribute *a, \
char *buf) \
{ \
- struct mox_rwtm *rwtm = to_rwtm(kobj); \
+ struct mox_rwtm *rwtm = dev_get_drvdata(dev); \
if (!rwtm->has_##cat) \
return -ENODATA; \
return sysfs_emit(buf, format, rwtm->name); \
} \
-static struct kobj_attribute mox_attr_##name = __ATTR_RO(name)
+static DEVICE_ATTR_RO(name)
MOX_ATTR_RO(serial_number, "%016llX\n", board_info);
MOX_ATTR_RO(board_version, "%i\n", board_info);
@@ -162,6 +116,17 @@ MOX_ATTR_RO(mac_address1, "%pM\n", board_info);
MOX_ATTR_RO(mac_address2, "%pM\n", board_info);
MOX_ATTR_RO(pubkey, "%s\n", pubkey);
+static struct attribute *turris_mox_rwtm_attrs[] = {
+ &dev_attr_serial_number.attr,
+ &dev_attr_board_version.attr,
+ &dev_attr_ram_size.attr,
+ &dev_attr_mac_address1.attr,
+ &dev_attr_mac_address2.attr,
+ &dev_attr_pubkey.attr,
+ NULL
+};
+ATTRIBUTE_GROUPS(turris_mox_rwtm);
+
static int mox_get_status(enum mbox_cmd cmd, u32 retval)
{
if (MBOX_STS_CMD(retval) != cmd)
@@ -176,16 +141,6 @@ static int mox_get_status(enum mbox_cmd cmd, u32 retval)
return MBOX_STS_VALUE(retval);
}
-static const struct attribute *mox_rwtm_attrs[] = {
- &mox_attr_serial_number.attr,
- &mox_attr_board_version.attr,
- &mox_attr_ram_size.attr,
- &mox_attr_mac_address1.attr,
- &mox_attr_mac_address2.attr,
- &mox_attr_pubkey.attr,
- NULL
-};
-
static void mox_rwtm_rx_callback(struct mbox_client *cl, void *data)
{
struct mox_rwtm *rwtm = dev_get_drvdata(cl->dev);
@@ -486,6 +441,11 @@ static inline void rwtm_unregister_debugfs(struct mox_rwtm *rwtm)
}
#endif
+static void rwtm_firmware_symlink_drop(void *parent)
+{
+ sysfs_remove_link(parent, DRIVER_NAME);
+}
+
static int turris_mox_rwtm_probe(struct platform_device *pdev)
{
struct mox_rwtm *rwtm;
@@ -502,18 +462,6 @@ static int turris_mox_rwtm_probe(struct platform_device *pdev)
if (!rwtm->buf)
return -ENOMEM;
- ret = mox_kobj_create(rwtm);
- if (ret < 0) {
- dev_err(dev, "Cannot create turris-mox-rwtm kobject!\n");
- return ret;
- }
-
- ret = sysfs_create_files(rwtm_to_kobj(rwtm), mox_rwtm_attrs);
- if (ret < 0) {
- dev_err(dev, "Cannot create sysfs files!\n");
- goto put_kobj;
- }
-
platform_set_drvdata(pdev, rwtm);
mutex_init(&rwtm->busy);
@@ -527,7 +475,7 @@ static int turris_mox_rwtm_probe(struct platform_device *pdev)
if (ret != -EPROBE_DEFER)
dev_err(dev, "Cannot request mailbox channel: %i\n",
ret);
- goto remove_files;
+ return ret;
}
init_completion(&rwtm->cmd_done);
@@ -561,14 +509,19 @@ static int turris_mox_rwtm_probe(struct platform_device *pdev)
dev_info(dev, "HWRNG successfully registered\n");
+ /*
+ * For sysfs ABI compatibility, create symlink
+ * /sys/firmware/turris-mox-rwtm to this device's sysfs directory.
+ */
+ ret = sysfs_create_link(firmware_kobj, &dev->kobj, DRIVER_NAME);
+ if (!ret)
+ devm_add_action_or_reset(dev, rwtm_firmware_symlink_drop,
+ firmware_kobj);
+
return 0;
free_channel:
mbox_free_channel(rwtm->mbox);
-remove_files:
- sysfs_remove_files(rwtm_to_kobj(rwtm), mox_rwtm_attrs);
-put_kobj:
- kobject_put(rwtm_to_kobj(rwtm));
return ret;
}
@@ -577,8 +530,6 @@ static void turris_mox_rwtm_remove(struct platform_device *pdev)
struct mox_rwtm *rwtm = platform_get_drvdata(pdev);
rwtm_unregister_debugfs(rwtm);
- sysfs_remove_files(rwtm_to_kobj(rwtm), mox_rwtm_attrs);
- kobject_put(rwtm_to_kobj(rwtm));
mbox_free_channel(rwtm->mbox);
}
@@ -596,6 +547,7 @@ static struct platform_driver turris_mox_rwtm_driver = {
.driver = {
.name = DRIVER_NAME,
.of_match_table = turris_mox_rwtm_match,
+ .dev_groups = turris_mox_rwtm_groups,
},
};
module_platform_driver(turris_mox_rwtm_driver);
--
2.44.2
^ permalink raw reply related [flat|nested] 22+ messages in thread* [PATCH v4 10/19] firmware: turris-mox-rwtm: Simplify debugfs code
2024-07-15 10:47 [PATCH v4 00/19] Updates for turris-mox-rwtm driver Marek Behún
` (8 preceding siblings ...)
2024-07-15 10:47 ` [PATCH v4 09/19] firmware: turris-mox-rwtm: Don't create own kobject type Marek Behún
@ 2024-07-15 10:47 ` Marek Behún
2024-07-15 10:47 ` [PATCH v4 11/19] firmware: turris-mox-rwtm: Convert rest to devm_* and get rid of driver .remove() Marek Behún
` (10 subsequent siblings)
20 siblings, 0 replies; 22+ messages in thread
From: Marek Behún @ 2024-07-15 10:47 UTC (permalink / raw)
To: Gregory CLEMENT, Andrew Lunn, Arnd Bergmann, soc, arm,
Andy Shevchenko, Hans de Goede, Ilpo Järvinen
Cc: Marek Behún
Simplify debugfs code: do not check for errors, as debugfs errors should
be ignored, and use devm action for dropping the debugfs directory.
Signed-off-by: Marek Behún <kabel@kernel.org>
Reviewed-by: Andy Shevchenko <andy@kernel.org>
---
drivers/firmware/turris-mox-rwtm.c | 44 ++++++++----------------------
1 file changed, 11 insertions(+), 33 deletions(-)
diff --git a/drivers/firmware/turris-mox-rwtm.c b/drivers/firmware/turris-mox-rwtm.c
index ca70a07b4dee..f95e77cc4716 100644
--- a/drivers/firmware/turris-mox-rwtm.c
+++ b/drivers/firmware/turris-mox-rwtm.c
@@ -91,7 +91,6 @@ struct mox_rwtm {
* It should be rewritten via crypto API once akcipher API is available
* from userspace.
*/
- struct dentry *debugfs_root;
u32 last_sig[MOX_ECC_SIGNATURE_WORDS];
bool last_sig_done;
#endif
@@ -404,39 +403,23 @@ static const struct file_operations do_sign_fops = {
.llseek = no_llseek,
};
-static int rwtm_register_debugfs(struct mox_rwtm *rwtm)
+static void rwtm_debugfs_release(void *root)
{
- struct dentry *root, *entry;
-
- root = debugfs_create_dir("turris-mox-rwtm", NULL);
-
- if (IS_ERR(root))
- return PTR_ERR(root);
-
- entry = debugfs_create_file_unsafe("do_sign", 0600, root, rwtm,
- &do_sign_fops);
- if (IS_ERR(entry))
- goto err_remove;
-
- rwtm->debugfs_root = root;
-
- return 0;
-err_remove:
debugfs_remove_recursive(root);
- return PTR_ERR(entry);
}
-static void rwtm_unregister_debugfs(struct mox_rwtm *rwtm)
+static void rwtm_register_debugfs(struct mox_rwtm *rwtm)
{
- debugfs_remove_recursive(rwtm->debugfs_root);
+ struct dentry *root;
+
+ root = debugfs_create_dir("turris-mox-rwtm", NULL);
+
+ debugfs_create_file_unsafe("do_sign", 0600, root, rwtm, &do_sign_fops);
+
+ devm_add_action_or_reset(rwtm->dev, rwtm_debugfs_release, root);
}
#else
-static inline int rwtm_register_debugfs(struct mox_rwtm *rwtm)
-{
- return 0;
-}
-
-static inline void rwtm_unregister_debugfs(struct mox_rwtm *rwtm)
+static inline void rwtm_register_debugfs(struct mox_rwtm *rwtm)
{
}
#endif
@@ -501,11 +484,7 @@ static int turris_mox_rwtm_probe(struct platform_device *pdev)
goto free_channel;
}
- ret = rwtm_register_debugfs(rwtm);
- if (ret < 0) {
- dev_err(dev, "Failed creating debugfs entries: %i\n", ret);
- goto free_channel;
- }
+ rwtm_register_debugfs(rwtm);
dev_info(dev, "HWRNG successfully registered\n");
@@ -529,7 +508,6 @@ static void turris_mox_rwtm_remove(struct platform_device *pdev)
{
struct mox_rwtm *rwtm = platform_get_drvdata(pdev);
- rwtm_unregister_debugfs(rwtm);
mbox_free_channel(rwtm->mbox);
}
--
2.44.2
^ permalink raw reply related [flat|nested] 22+ messages in thread* [PATCH v4 11/19] firmware: turris-mox-rwtm: Convert rest to devm_* and get rid of driver .remove()
2024-07-15 10:47 [PATCH v4 00/19] Updates for turris-mox-rwtm driver Marek Behún
` (9 preceding siblings ...)
2024-07-15 10:47 ` [PATCH v4 10/19] firmware: turris-mox-rwtm: Simplify debugfs code Marek Behún
@ 2024-07-15 10:47 ` Marek Behún
2024-07-15 10:47 ` [PATCH v4 12/19] firmware: turris-mox-rwtm: Use dev_err_probe() where possible Marek Behún
` (9 subsequent siblings)
20 siblings, 0 replies; 22+ messages in thread
From: Marek Behún @ 2024-07-15 10:47 UTC (permalink / raw)
To: Gregory CLEMENT, Andrew Lunn, Arnd Bergmann, soc, arm,
Andy Shevchenko, Hans de Goede, Ilpo Järvinen
Cc: Marek Behún
Use devm resource management for driver's mailbox. This allows us to get
rid of the driver's .remove() method and the gotos in .probe().
Signed-off-by: Marek Behún <kabel@kernel.org>
Reviewed-by: Andy Shevchenko <andy@kernel.org>
---
drivers/firmware/turris-mox-rwtm.c | 25 +++++++++++--------------
1 file changed, 11 insertions(+), 14 deletions(-)
diff --git a/drivers/firmware/turris-mox-rwtm.c b/drivers/firmware/turris-mox-rwtm.c
index f95e77cc4716..5f44fece33f2 100644
--- a/drivers/firmware/turris-mox-rwtm.c
+++ b/drivers/firmware/turris-mox-rwtm.c
@@ -424,6 +424,11 @@ static inline void rwtm_register_debugfs(struct mox_rwtm *rwtm)
}
#endif
+static void rwtm_devm_mbox_release(void *mbox)
+{
+ mbox_free_channel(mbox);
+}
+
static void rwtm_firmware_symlink_drop(void *parent)
{
sysfs_remove_link(parent, DRIVER_NAME);
@@ -461,6 +466,10 @@ static int turris_mox_rwtm_probe(struct platform_device *pdev)
return ret;
}
+ ret = devm_add_action_or_reset(dev, rwtm_devm_mbox_release, rwtm->mbox);
+ if (ret)
+ return ret;
+
init_completion(&rwtm->cmd_done);
ret = mox_get_board_info(rwtm);
@@ -471,7 +480,7 @@ static int turris_mox_rwtm_probe(struct platform_device *pdev)
if (ret < 0) {
dev_notice(dev,
"Firmware does not support the GET_RANDOM command\n");
- goto free_channel;
+ return ret;
}
rwtm->hwrng.name = DRIVER_NAME "_hwrng";
@@ -481,7 +490,7 @@ static int turris_mox_rwtm_probe(struct platform_device *pdev)
ret = devm_hwrng_register(dev, &rwtm->hwrng);
if (ret < 0) {
dev_err(dev, "Cannot register HWRNG: %i\n", ret);
- goto free_channel;
+ return ret;
}
rwtm_register_debugfs(rwtm);
@@ -498,17 +507,6 @@ static int turris_mox_rwtm_probe(struct platform_device *pdev)
firmware_kobj);
return 0;
-
-free_channel:
- mbox_free_channel(rwtm->mbox);
- return ret;
-}
-
-static void turris_mox_rwtm_remove(struct platform_device *pdev)
-{
- struct mox_rwtm *rwtm = platform_get_drvdata(pdev);
-
- mbox_free_channel(rwtm->mbox);
}
static const struct of_device_id turris_mox_rwtm_match[] = {
@@ -521,7 +519,6 @@ MODULE_DEVICE_TABLE(of, turris_mox_rwtm_match);
static struct platform_driver turris_mox_rwtm_driver = {
.probe = turris_mox_rwtm_probe,
- .remove_new = turris_mox_rwtm_remove,
.driver = {
.name = DRIVER_NAME,
.of_match_table = turris_mox_rwtm_match,
--
2.44.2
^ permalink raw reply related [flat|nested] 22+ messages in thread* [PATCH v4 12/19] firmware: turris-mox-rwtm: Use dev_err_probe() where possible
2024-07-15 10:47 [PATCH v4 00/19] Updates for turris-mox-rwtm driver Marek Behún
` (10 preceding siblings ...)
2024-07-15 10:47 ` [PATCH v4 11/19] firmware: turris-mox-rwtm: Convert rest to devm_* and get rid of driver .remove() Marek Behún
@ 2024-07-15 10:47 ` Marek Behún
2024-07-15 10:47 ` [PATCH v4 13/19] firmware: turris-mox-rwtm: Initialize completion before mailbox Marek Behún
` (8 subsequent siblings)
20 siblings, 0 replies; 22+ messages in thread
From: Marek Behún @ 2024-07-15 10:47 UTC (permalink / raw)
To: Gregory CLEMENT, Andrew Lunn, Arnd Bergmann, soc, arm,
Andy Shevchenko, Hans de Goede, Ilpo Järvinen
Cc: Marek Behún
Use dev_err_probe() where possible in the driver's .probe() method.
Signed-off-by: Marek Behún <kabel@kernel.org>
Reviewed-by: Andy Shevchenko <andy@kernel.org>
---
drivers/firmware/turris-mox-rwtm.c | 16 +++++-----------
1 file changed, 5 insertions(+), 11 deletions(-)
diff --git a/drivers/firmware/turris-mox-rwtm.c b/drivers/firmware/turris-mox-rwtm.c
index 5f44fece33f2..30c124e664d9 100644
--- a/drivers/firmware/turris-mox-rwtm.c
+++ b/drivers/firmware/turris-mox-rwtm.c
@@ -458,13 +458,9 @@ static int turris_mox_rwtm_probe(struct platform_device *pdev)
rwtm->mbox_client.rx_callback = mox_rwtm_rx_callback;
rwtm->mbox = mbox_request_channel(&rwtm->mbox_client, 0);
- if (IS_ERR(rwtm->mbox)) {
- ret = PTR_ERR(rwtm->mbox);
- if (ret != -EPROBE_DEFER)
- dev_err(dev, "Cannot request mailbox channel: %i\n",
- ret);
- return ret;
- }
+ if (IS_ERR(rwtm->mbox))
+ return dev_err_probe(dev, PTR_ERR(rwtm->mbox),
+ "Cannot request mailbox channel!\n");
ret = devm_add_action_or_reset(dev, rwtm_devm_mbox_release, rwtm->mbox);
if (ret)
@@ -488,10 +484,8 @@ static int turris_mox_rwtm_probe(struct platform_device *pdev)
rwtm->hwrng.priv = (unsigned long) rwtm;
ret = devm_hwrng_register(dev, &rwtm->hwrng);
- if (ret < 0) {
- dev_err(dev, "Cannot register HWRNG: %i\n", ret);
- return ret;
- }
+ if (ret)
+ return dev_err_probe(dev, ret, "Cannot register HWRNG!\n");
rwtm_register_debugfs(rwtm);
--
2.44.2
^ permalink raw reply related [flat|nested] 22+ messages in thread* [PATCH v4 13/19] firmware: turris-mox-rwtm: Initialize completion before mailbox
2024-07-15 10:47 [PATCH v4 00/19] Updates for turris-mox-rwtm driver Marek Behún
` (11 preceding siblings ...)
2024-07-15 10:47 ` [PATCH v4 12/19] firmware: turris-mox-rwtm: Use dev_err_probe() where possible Marek Behún
@ 2024-07-15 10:47 ` Marek Behún
2024-07-15 10:47 ` [PATCH v4 14/19] firmware: turris-mox-rwtm: Drop redundant device pointer Marek Behún
` (7 subsequent siblings)
20 siblings, 0 replies; 22+ messages in thread
From: Marek Behún @ 2024-07-15 10:47 UTC (permalink / raw)
To: Gregory CLEMENT, Andrew Lunn, Arnd Bergmann, soc, arm,
Andy Shevchenko, Hans de Goede, Ilpo Järvinen
Cc: Marek Behún
Initialize the completion before the mailbox channel is requested.
Fixes: 389711b37493 ("firmware: Add Turris Mox rWTM firmware driver")
Signed-off-by: Marek Behún <kabel@kernel.org>
Reviewed-by: Andy Shevchenko <andy@kernel.org>
---
drivers/firmware/turris-mox-rwtm.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/firmware/turris-mox-rwtm.c b/drivers/firmware/turris-mox-rwtm.c
index 30c124e664d9..f291df9a72ff 100644
--- a/drivers/firmware/turris-mox-rwtm.c
+++ b/drivers/firmware/turris-mox-rwtm.c
@@ -453,6 +453,7 @@ static int turris_mox_rwtm_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, rwtm);
mutex_init(&rwtm->busy);
+ init_completion(&rwtm->cmd_done);
rwtm->mbox_client.dev = dev;
rwtm->mbox_client.rx_callback = mox_rwtm_rx_callback;
@@ -466,8 +467,6 @@ static int turris_mox_rwtm_probe(struct platform_device *pdev)
if (ret)
return ret;
- init_completion(&rwtm->cmd_done);
-
ret = mox_get_board_info(rwtm);
if (ret < 0)
dev_warn(dev, "Cannot read board information: %i\n", ret);
--
2.44.2
^ permalink raw reply related [flat|nested] 22+ messages in thread* [PATCH v4 14/19] firmware: turris-mox-rwtm: Drop redundant device pointer
2024-07-15 10:47 [PATCH v4 00/19] Updates for turris-mox-rwtm driver Marek Behún
` (12 preceding siblings ...)
2024-07-15 10:47 ` [PATCH v4 13/19] firmware: turris-mox-rwtm: Initialize completion before mailbox Marek Behún
@ 2024-07-15 10:47 ` Marek Behún
2024-07-15 10:47 ` [PATCH v4 15/19] firmware: turris-mox-rwtm: Use devm_mutex_init() instead of mutex_init() Marek Behún
` (6 subsequent siblings)
20 siblings, 0 replies; 22+ messages in thread
From: Marek Behún @ 2024-07-15 10:47 UTC (permalink / raw)
To: Gregory CLEMENT, Andrew Lunn, Arnd Bergmann, soc, arm,
Andy Shevchenko, Hans de Goede, Ilpo Järvinen
Cc: Marek Behún
Drop redundant device pointer from driver's private structure.
Signed-off-by: Marek Behún <kabel@kernel.org>
Reviewed-by: Andy Shevchenko <andy@kernel.org>
---
drivers/firmware/turris-mox-rwtm.c | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)
diff --git a/drivers/firmware/turris-mox-rwtm.c b/drivers/firmware/turris-mox-rwtm.c
index f291df9a72ff..d12e29625022 100644
--- a/drivers/firmware/turris-mox-rwtm.c
+++ b/drivers/firmware/turris-mox-rwtm.c
@@ -61,7 +61,6 @@ enum mbox_cmd {
};
struct mox_rwtm {
- struct device *dev;
struct mbox_client mbox_client;
struct mbox_chan *mbox;
struct hwrng hwrng;
@@ -96,6 +95,11 @@ struct mox_rwtm {
#endif
};
+static inline struct device *rwtm_dev(struct mox_rwtm *rwtm)
+{
+ return rwtm->mbox_client.dev;
+}
+
#define MOX_ATTR_RO(name, format, cat) \
static ssize_t \
name##_show(struct device *dev, struct device_attribute *a, \
@@ -164,6 +168,7 @@ static void reply_to_mac_addr(u8 *mac, u32 t1, u32 t2)
static int mox_get_board_info(struct mox_rwtm *rwtm)
{
+ struct device *dev = rwtm_dev(rwtm);
struct armada_37xx_rwtm_tx_msg msg;
struct armada_37xx_rwtm_rx_msg *reply = &rwtm->reply;
int ret;
@@ -178,10 +183,10 @@ static int mox_get_board_info(struct mox_rwtm *rwtm)
ret = mox_get_status(MBOX_CMD_BOARD_INFO, reply->retval);
if (ret == -ENODATA) {
- dev_warn(rwtm->dev,
+ dev_warn(dev,
"Board does not have manufacturing information burned!\n");
} else if (ret == -ENOSYS) {
- dev_notice(rwtm->dev,
+ dev_notice(dev,
"Firmware does not support the BOARD_INFO command\n");
} else if (ret < 0) {
return ret;
@@ -213,9 +218,9 @@ static int mox_get_board_info(struct mox_rwtm *rwtm)
ret = mox_get_status(MBOX_CMD_ECDSA_PUB_KEY, reply->retval);
if (ret == -ENODATA) {
- dev_warn(rwtm->dev, "Board has no public key burned!\n");
+ dev_warn(dev, "Board has no public key burned!\n");
} else if (ret == -ENOSYS) {
- dev_notice(rwtm->dev,
+ dev_notice(dev,
"Firmware does not support the ECDSA_PUB_KEY command\n");
} else if (ret < 0) {
return ret;
@@ -416,7 +421,7 @@ static void rwtm_register_debugfs(struct mox_rwtm *rwtm)
debugfs_create_file_unsafe("do_sign", 0600, root, rwtm, &do_sign_fops);
- devm_add_action_or_reset(rwtm->dev, rwtm_debugfs_release, root);
+ devm_add_action_or_reset(rwtm_dev(rwtm), rwtm_debugfs_release, root);
}
#else
static inline void rwtm_register_debugfs(struct mox_rwtm *rwtm)
@@ -444,7 +449,6 @@ static int turris_mox_rwtm_probe(struct platform_device *pdev)
if (!rwtm)
return -ENOMEM;
- rwtm->dev = dev;
rwtm->buf = dmam_alloc_coherent(dev, RWTM_DMA_BUFFER_SIZE,
&rwtm->buf_phys, GFP_KERNEL);
if (!rwtm->buf)
--
2.44.2
^ permalink raw reply related [flat|nested] 22+ messages in thread* [PATCH v4 15/19] firmware: turris-mox-rwtm: Use devm_mutex_init() instead of mutex_init()
2024-07-15 10:47 [PATCH v4 00/19] Updates for turris-mox-rwtm driver Marek Behún
` (13 preceding siblings ...)
2024-07-15 10:47 ` [PATCH v4 14/19] firmware: turris-mox-rwtm: Drop redundant device pointer Marek Behún
@ 2024-07-15 10:47 ` Marek Behún
2024-07-15 10:47 ` [PATCH v4 16/19] firmware: turris-mox-rwtm: Use container_of() instead of hwrng .priv member Marek Behún
` (5 subsequent siblings)
20 siblings, 0 replies; 22+ messages in thread
From: Marek Behún @ 2024-07-15 10:47 UTC (permalink / raw)
To: Gregory CLEMENT, Andrew Lunn, Arnd Bergmann, soc, arm,
Andy Shevchenko, Hans de Goede, Ilpo Järvinen
Cc: Marek Behún
Use devm_mutex_init() instead of mutex_init(), to properly call
mutex_destroy() on probe failure / driver unbind.
Signed-off-by: Marek Behún <kabel@kernel.org>
Reviewed-by: Andy Shevchenko <andy@kernel.org>
---
drivers/firmware/turris-mox-rwtm.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/firmware/turris-mox-rwtm.c b/drivers/firmware/turris-mox-rwtm.c
index d12e29625022..9f6bda969943 100644
--- a/drivers/firmware/turris-mox-rwtm.c
+++ b/drivers/firmware/turris-mox-rwtm.c
@@ -456,7 +456,10 @@ static int turris_mox_rwtm_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, rwtm);
- mutex_init(&rwtm->busy);
+ ret = devm_mutex_init(dev, &rwtm->busy);
+ if (ret)
+ return ret;
+
init_completion(&rwtm->cmd_done);
rwtm->mbox_client.dev = dev;
--
2.44.2
^ permalink raw reply related [flat|nested] 22+ messages in thread* [PATCH v4 16/19] firmware: turris-mox-rwtm: Use container_of() instead of hwrng .priv member
2024-07-15 10:47 [PATCH v4 00/19] Updates for turris-mox-rwtm driver Marek Behún
` (14 preceding siblings ...)
2024-07-15 10:47 ` [PATCH v4 15/19] firmware: turris-mox-rwtm: Use devm_mutex_init() instead of mutex_init() Marek Behún
@ 2024-07-15 10:47 ` Marek Behún
2024-07-15 10:47 ` [PATCH v4 17/19] firmware: turris-mox-rwtm: Use EOPNOTSUPP instead of ENOSYS Marek Behún
` (4 subsequent siblings)
20 siblings, 0 replies; 22+ messages in thread
From: Marek Behún @ 2024-07-15 10:47 UTC (permalink / raw)
To: Gregory CLEMENT, Andrew Lunn, Arnd Bergmann, soc, arm,
Andy Shevchenko, Hans de Goede, Ilpo Järvinen
Cc: Marek Behún
Use container_of() to get driver private structure from hwnrg structure,
instead of the hwrng's .priv member, as suggested by Herbert for another
driver.
Link: https://lore.kernel.org/soc/ZmLhQBdmg613KdET@gondor.apana.org.au/
Signed-off-by: Marek Behún <kabel@kernel.org>
Reviewed-by: Andy Shevchenko <andy@kernel.org>
---
drivers/firmware/turris-mox-rwtm.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/firmware/turris-mox-rwtm.c b/drivers/firmware/turris-mox-rwtm.c
index 9f6bda969943..52f97235c3a6 100644
--- a/drivers/firmware/turris-mox-rwtm.c
+++ b/drivers/firmware/turris-mox-rwtm.c
@@ -259,7 +259,7 @@ static int check_get_random_support(struct mox_rwtm *rwtm)
static int mox_hwrng_read(struct hwrng *rng, void *data, size_t max, bool wait)
{
- struct mox_rwtm *rwtm = (struct mox_rwtm *) rng->priv;
+ struct mox_rwtm *rwtm = container_of(rng, struct mox_rwtm, hwrng);
struct armada_37xx_rwtm_tx_msg msg;
int ret;
@@ -487,7 +487,6 @@ static int turris_mox_rwtm_probe(struct platform_device *pdev)
rwtm->hwrng.name = DRIVER_NAME "_hwrng";
rwtm->hwrng.read = mox_hwrng_read;
- rwtm->hwrng.priv = (unsigned long) rwtm;
ret = devm_hwrng_register(dev, &rwtm->hwrng);
if (ret)
--
2.44.2
^ permalink raw reply related [flat|nested] 22+ messages in thread* [PATCH v4 17/19] firmware: turris-mox-rwtm: Use EOPNOTSUPP instead of ENOSYS
2024-07-15 10:47 [PATCH v4 00/19] Updates for turris-mox-rwtm driver Marek Behún
` (15 preceding siblings ...)
2024-07-15 10:47 ` [PATCH v4 16/19] firmware: turris-mox-rwtm: Use container_of() instead of hwrng .priv member Marek Behún
@ 2024-07-15 10:47 ` Marek Behún
2024-07-15 10:47 ` [PATCH v4 18/19] firmware: turris-mox-rwtm: Use ALIGN() instead of hardcoding Marek Behún
` (3 subsequent siblings)
20 siblings, 0 replies; 22+ messages in thread
From: Marek Behún @ 2024-07-15 10:47 UTC (permalink / raw)
To: Gregory CLEMENT, Andrew Lunn, Arnd Bergmann, soc, arm,
Andy Shevchenko, Hans de Goede, Ilpo Järvinen
Cc: Marek Behún
Checkpatch warns agains -ENOSYS:
WARNING: ENOSYS means 'invalid syscall nr' and nothing else
Use EOPNOTSUPP instead.
Signed-off-by: Marek Behún <kabel@kernel.org>
Reviewed-by: Andy Shevchenko <andy@kernel.org>
---
drivers/firmware/turris-mox-rwtm.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/firmware/turris-mox-rwtm.c b/drivers/firmware/turris-mox-rwtm.c
index 52f97235c3a6..a9391705f5b4 100644
--- a/drivers/firmware/turris-mox-rwtm.c
+++ b/drivers/firmware/turris-mox-rwtm.c
@@ -137,7 +137,7 @@ static int mox_get_status(enum mbox_cmd cmd, u32 retval)
else if (MBOX_STS_ERROR(retval) == MBOX_STS_FAIL)
return -(int)MBOX_STS_VALUE(retval);
else if (MBOX_STS_ERROR(retval) == MBOX_STS_BADCMD)
- return -ENOSYS;
+ return -EOPNOTSUPP;
else if (MBOX_STS_ERROR(retval) != MBOX_STS_SUCCESS)
return -EIO;
else
@@ -185,7 +185,7 @@ static int mox_get_board_info(struct mox_rwtm *rwtm)
if (ret == -ENODATA) {
dev_warn(dev,
"Board does not have manufacturing information burned!\n");
- } else if (ret == -ENOSYS) {
+ } else if (ret == -EOPNOTSUPP) {
dev_notice(dev,
"Firmware does not support the BOARD_INFO command\n");
} else if (ret < 0) {
@@ -219,7 +219,7 @@ static int mox_get_board_info(struct mox_rwtm *rwtm)
ret = mox_get_status(MBOX_CMD_ECDSA_PUB_KEY, reply->retval);
if (ret == -ENODATA) {
dev_warn(dev, "Board has no public key burned!\n");
- } else if (ret == -ENOSYS) {
+ } else if (ret == -EOPNOTSUPP) {
dev_notice(dev,
"Firmware does not support the ECDSA_PUB_KEY command\n");
} else if (ret < 0) {
--
2.44.2
^ permalink raw reply related [flat|nested] 22+ messages in thread* [PATCH v4 18/19] firmware: turris-mox-rwtm: Use ALIGN() instead of hardcoding
2024-07-15 10:47 [PATCH v4 00/19] Updates for turris-mox-rwtm driver Marek Behún
` (16 preceding siblings ...)
2024-07-15 10:47 ` [PATCH v4 17/19] firmware: turris-mox-rwtm: Use EOPNOTSUPP instead of ENOSYS Marek Behún
@ 2024-07-15 10:47 ` Marek Behún
2024-07-15 10:47 ` [PATCH v4 19/19] firmware: turris-mox-rwtm: Deduplicate command execution code Marek Behún
` (2 subsequent siblings)
20 siblings, 0 replies; 22+ messages in thread
From: Marek Behún @ 2024-07-15 10:47 UTC (permalink / raw)
To: Gregory CLEMENT, Andrew Lunn, Arnd Bergmann, soc, arm,
Andy Shevchenko, Hans de Goede, Ilpo Järvinen
Cc: Marek Behún
Use ALIGN(max, 4) instead of hardcoding ((max + 3) & ~3).
Signed-off-by: Marek Behún <kabel@kernel.org>
---
drivers/firmware/turris-mox-rwtm.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/firmware/turris-mox-rwtm.c b/drivers/firmware/turris-mox-rwtm.c
index a9391705f5b4..0c7d8c96ea17 100644
--- a/drivers/firmware/turris-mox-rwtm.c
+++ b/drivers/firmware/turris-mox-rwtm.c
@@ -6,6 +6,7 @@
*/
#include <crypto/sha2.h>
+#include <linux/align.h>
#include <linux/armada-37xx-rwtm-mailbox.h>
#include <linux/completion.h>
#include <linux/container_of.h>
@@ -268,7 +269,7 @@ static int mox_hwrng_read(struct hwrng *rng, void *data, size_t max, bool wait)
msg.command = MBOX_CMD_GET_RANDOM;
msg.args[0] = 1;
msg.args[1] = rwtm->buf_phys;
- msg.args[2] = (max + 3) & ~3;
+ msg.args[2] = ALIGN(max, 4);
if (!wait) {
if (!mutex_trylock(&rwtm->busy))
--
2.44.2
^ permalink raw reply related [flat|nested] 22+ messages in thread* [PATCH v4 19/19] firmware: turris-mox-rwtm: Deduplicate command execution code
2024-07-15 10:47 [PATCH v4 00/19] Updates for turris-mox-rwtm driver Marek Behún
` (17 preceding siblings ...)
2024-07-15 10:47 ` [PATCH v4 18/19] firmware: turris-mox-rwtm: Use ALIGN() instead of hardcoding Marek Behún
@ 2024-07-15 10:47 ` Marek Behún
2024-07-15 11:11 ` [PATCH v4 00/19] Updates for turris-mox-rwtm driver Arnd Bergmann
2024-08-06 20:08 ` patchwork-bot+linux-soc
20 siblings, 0 replies; 22+ messages in thread
From: Marek Behún @ 2024-07-15 10:47 UTC (permalink / raw)
To: Gregory CLEMENT, Andrew Lunn, Arnd Bergmann, soc, arm,
Andy Shevchenko, Hans de Goede, Ilpo Järvinen
Cc: Marek Behún
Deduplicate rWTM command execution calls
mbox_send_message()
wait_for_completion()
mox_get_status()
to one function
mox_rwtm_exec()
Signed-off-by: Marek Behún <kabel@kernel.org>
Reviewed-by: Andy Shevchenko <andy@kernel.org>
---
drivers/firmware/turris-mox-rwtm.c | 98 ++++++++++++------------------
1 file changed, 39 insertions(+), 59 deletions(-)
diff --git a/drivers/firmware/turris-mox-rwtm.c b/drivers/firmware/turris-mox-rwtm.c
index 0c7d8c96ea17..525ebdc7ded5 100644
--- a/drivers/firmware/turris-mox-rwtm.c
+++ b/drivers/firmware/turris-mox-rwtm.c
@@ -157,6 +157,34 @@ static void mox_rwtm_rx_callback(struct mbox_client *cl, void *data)
complete(&rwtm->cmd_done);
}
+static int mox_rwtm_exec(struct mox_rwtm *rwtm, enum mbox_cmd cmd,
+ struct armada_37xx_rwtm_tx_msg *msg,
+ bool interruptible)
+{
+ struct armada_37xx_rwtm_tx_msg _msg = {};
+ int ret;
+
+ if (!msg)
+ msg = &_msg;
+
+ msg->command = cmd;
+
+ ret = mbox_send_message(rwtm->mbox, msg);
+ if (ret < 0)
+ return ret;
+
+ if (interruptible) {
+ ret = wait_for_completion_interruptible(&rwtm->cmd_done);
+ if (ret < 0)
+ return ret;
+ } else {
+ if (!wait_for_completion_timeout(&rwtm->cmd_done, HZ / 2))
+ return -ETIMEDOUT;
+ }
+
+ return mox_get_status(cmd, rwtm->reply.retval);
+}
+
static void reply_to_mac_addr(u8 *mac, u32 t1, u32 t2)
{
mac[0] = t1 >> 8;
@@ -170,19 +198,10 @@ static void reply_to_mac_addr(u8 *mac, u32 t1, u32 t2)
static int mox_get_board_info(struct mox_rwtm *rwtm)
{
struct device *dev = rwtm_dev(rwtm);
- struct armada_37xx_rwtm_tx_msg msg;
struct armada_37xx_rwtm_rx_msg *reply = &rwtm->reply;
int ret;
- msg.command = MBOX_CMD_BOARD_INFO;
- ret = mbox_send_message(rwtm->mbox, &msg);
- if (ret < 0)
- return ret;
-
- if (!wait_for_completion_timeout(&rwtm->cmd_done, HZ / 2))
- return -ETIMEDOUT;
-
- ret = mox_get_status(MBOX_CMD_BOARD_INFO, reply->retval);
+ ret = mox_rwtm_exec(rwtm, MBOX_CMD_BOARD_INFO, NULL, false);
if (ret == -ENODATA) {
dev_warn(dev,
"Board does not have manufacturing information burned!\n");
@@ -209,15 +228,7 @@ static int mox_get_board_info(struct mox_rwtm *rwtm)
pr_info(" burned RAM size %i MiB\n", rwtm->ram_size);
}
- msg.command = MBOX_CMD_ECDSA_PUB_KEY;
- ret = mbox_send_message(rwtm->mbox, &msg);
- if (ret < 0)
- return ret;
-
- if (!wait_for_completion_timeout(&rwtm->cmd_done, HZ / 2))
- return -ETIMEDOUT;
-
- ret = mox_get_status(MBOX_CMD_ECDSA_PUB_KEY, reply->retval);
+ ret = mox_rwtm_exec(rwtm, MBOX_CMD_ECDSA_PUB_KEY, NULL, false);
if (ret == -ENODATA) {
dev_warn(dev, "Board has no public key burned!\n");
} else if (ret == -EOPNOTSUPP) {
@@ -240,37 +251,23 @@ static int mox_get_board_info(struct mox_rwtm *rwtm)
static int check_get_random_support(struct mox_rwtm *rwtm)
{
- struct armada_37xx_rwtm_tx_msg msg;
- int ret;
-
- msg.command = MBOX_CMD_GET_RANDOM;
- msg.args[0] = 1;
- msg.args[1] = rwtm->buf_phys;
- msg.args[2] = 4;
-
- ret = mbox_send_message(rwtm->mbox, &msg);
- if (ret < 0)
- return ret;
-
- if (!wait_for_completion_timeout(&rwtm->cmd_done, HZ / 2))
- return -ETIMEDOUT;
+ struct armada_37xx_rwtm_tx_msg msg = {
+ .args = { 1, rwtm->buf_phys, 4 },
+ };
- return mox_get_status(MBOX_CMD_GET_RANDOM, rwtm->reply.retval);
+ return mox_rwtm_exec(rwtm, MBOX_CMD_GET_RANDOM, &msg, false);
}
static int mox_hwrng_read(struct hwrng *rng, void *data, size_t max, bool wait)
{
struct mox_rwtm *rwtm = container_of(rng, struct mox_rwtm, hwrng);
- struct armada_37xx_rwtm_tx_msg msg;
+ struct armada_37xx_rwtm_tx_msg msg = {
+ .args = { 1, rwtm->buf_phys, ALIGN(max, 4) },
+ };
int ret;
max = min(max, RWTM_DMA_BUFFER_SIZE);
- msg.command = MBOX_CMD_GET_RANDOM;
- msg.args[0] = 1;
- msg.args[1] = rwtm->buf_phys;
- msg.args[2] = ALIGN(max, 4);
-
if (!wait) {
if (!mutex_trylock(&rwtm->busy))
return -EBUSY;
@@ -278,15 +275,7 @@ static int mox_hwrng_read(struct hwrng *rng, void *data, size_t max, bool wait)
mutex_lock(&rwtm->busy);
}
- ret = mbox_send_message(rwtm->mbox, &msg);
- if (ret < 0)
- goto unlock_mutex;
-
- ret = wait_for_completion_interruptible(&rwtm->cmd_done);
- if (ret < 0)
- goto unlock_mutex;
-
- ret = mox_get_status(MBOX_CMD_GET_RANDOM, rwtm->reply.retval);
+ ret = mox_rwtm_exec(rwtm, MBOX_CMD_GET_RANDOM, &msg, true);
if (ret < 0)
goto unlock_mutex;
@@ -333,7 +322,6 @@ static ssize_t do_sign_write(struct file *file, const char __user *buf,
size_t len, loff_t *ppos)
{
struct mox_rwtm *rwtm = file->private_data;
- struct armada_37xx_rwtm_rx_msg *reply = &rwtm->reply;
struct armada_37xx_rwtm_tx_msg msg;
loff_t dummy = 0;
ssize_t ret;
@@ -366,23 +354,15 @@ static ssize_t do_sign_write(struct file *file, const char __user *buf,
goto unlock_mutex;
be32_to_cpu_array(rwtm->buf, rwtm->buf, MOX_ECC_NUMBER_WORDS);
- msg.command = MBOX_CMD_SIGN;
msg.args[0] = 1;
msg.args[1] = rwtm->buf_phys;
msg.args[2] = rwtm->buf_phys + MOX_ECC_NUMBER_LEN;
msg.args[3] = rwtm->buf_phys + 2 * MOX_ECC_NUMBER_LEN;
- ret = mbox_send_message(rwtm->mbox, &msg);
- if (ret < 0)
- goto unlock_mutex;
- ret = wait_for_completion_interruptible(&rwtm->cmd_done);
+ ret = mox_rwtm_exec(rwtm, MBOX_CMD_SIGN, &msg, true);
if (ret < 0)
goto unlock_mutex;
- ret = MBOX_STS_VALUE(reply->retval);
- if (MBOX_STS_ERROR(reply->retval) != MBOX_STS_SUCCESS)
- goto unlock_mutex;
-
/*
* Here we read the R and S values of the ECDSA signature
* computed by the rWTM firmware and convert their words from
--
2.44.2
^ permalink raw reply related [flat|nested] 22+ messages in thread* Re: [PATCH v4 00/19] Updates for turris-mox-rwtm driver
2024-07-15 10:47 [PATCH v4 00/19] Updates for turris-mox-rwtm driver Marek Behún
` (18 preceding siblings ...)
2024-07-15 10:47 ` [PATCH v4 19/19] firmware: turris-mox-rwtm: Deduplicate command execution code Marek Behún
@ 2024-07-15 11:11 ` Arnd Bergmann
2024-08-06 20:08 ` patchwork-bot+linux-soc
20 siblings, 0 replies; 22+ messages in thread
From: Arnd Bergmann @ 2024-07-15 11:11 UTC (permalink / raw)
To: Marek Behún, Gregory Clement, Andrew Lunn, soc, arm,
Andy Shevchenko, Hans de Goede, Ilpo Järvinen
On Mon, Jul 15, 2024, at 12:47, Marek Behún wrote:
> Hi Arnd, Andy, Gregory et al.
>
> this is v4 of series of fixes, refactors and cleanups for the
> turris-mox-rwtm driver.
>
> Changes since v3:
> - addressed Andy's recommendations. Some of them resulted in 2 new
> patches (08/19 and 18/19). Im patch 10/19 I did not address Andy's
> comment
> "Actually you may do that without devm. There is a lookup method
> or so in debugfs APIs that can be used. Can be amended later on,
> though."
> since I do not see how to use the debugfs_lookup_and_remove()
> function without devm and get rid of the driver's .remove() method
> at the same time...
>
Hi Marek,
The 6.11 merge window is now open, so I am not applying the
cleanup and refactoring patches for this release.
Can you separate the two and resend just the bugfixes so I can
apply them into a branch for 6.11-rc1? After -rc1 is out
with those fixes, please rebase the rest and send that got
inclusion in 6.12.
Arnd
^ permalink raw reply [flat|nested] 22+ messages in thread* Re: [PATCH v4 00/19] Updates for turris-mox-rwtm driver
2024-07-15 10:47 [PATCH v4 00/19] Updates for turris-mox-rwtm driver Marek Behún
` (19 preceding siblings ...)
2024-07-15 11:11 ` [PATCH v4 00/19] Updates for turris-mox-rwtm driver Arnd Bergmann
@ 2024-08-06 20:08 ` patchwork-bot+linux-soc
20 siblings, 0 replies; 22+ messages in thread
From: patchwork-bot+linux-soc @ 2024-08-06 20:08 UTC (permalink / raw)
To: =?utf-8?q?Marek_Beh=C3=BAn_=3Ckabel=40kernel=2Eorg=3E?=; +Cc: soc
Hello:
This series was applied to soc/soc.git (arm/fixes)
by Arnd Bergmann <arnd@arndb.de>:
On Mon, 15 Jul 2024 12:47:04 +0200 you wrote:
> Hi Arnd, Andy, Gregory et al.
>
> this is v4 of series of fixes, refactors and cleanups for the
> turris-mox-rwtm driver.
>
> Changes since v3:
> - addressed Andy's recommendations. Some of them resulted in 2 new
> patches (08/19 and 18/19). Im patch 10/19 I did not address Andy's
> comment
> "Actually you may do that without devm. There is a lookup method
> or so in debugfs APIs that can be used. Can be amended later on,
> though."
> since I do not see how to use the debugfs_lookup_and_remove()
> function without devm and get rid of the driver's .remove() method
> at the same time...
>
> [...]
Here is the summary with links:
- [v4,01/19] firmware: turris-mox-rwtm: Do not complete if there are no waiters
https://git.kernel.org/soc/soc/c/0bafb172b111
- [v4,02/19] firmware: turris-mox-rwtm: Fix checking return value of wait_for_completion_timeout()
https://git.kernel.org/soc/soc/c/8467cfe821ac
- [v4,03/19] firmware: turris-mox-rwtm: Use macro constant instead of hardcoded 4096
(no matching commit)
- [v4,04/19] firmware: turris-mox-rwtm: Use ETH_ALEN instead of hardcoded 6
(no matching commit)
- [v4,05/19] firmware: turris-mox-rwtm: Use the boolean type where appropriate
(no matching commit)
- [v4,06/19] firmware: turris-mox-rwtm: Hide signature related constants behind macros
(no matching commit)
- [v4,07/19] firmware: turris-mox-rwtm: Fix driver includes
(no matching commit)
- [v4,08/19] firmware: turris-mox-rwtm: Use sysfs_emit() instead of sprintf()
(no matching commit)
- [v4,09/19] firmware: turris-mox-rwtm: Don't create own kobject type
(no matching commit)
- [v4,10/19] firmware: turris-mox-rwtm: Simplify debugfs code
(no matching commit)
- [v4,11/19] firmware: turris-mox-rwtm: Convert rest to devm_* and get rid of driver .remove()
(no matching commit)
- [v4,12/19] firmware: turris-mox-rwtm: Use dev_err_probe() where possible
(no matching commit)
- [v4,13/19] firmware: turris-mox-rwtm: Initialize completion before mailbox
(no matching commit)
- [v4,14/19] firmware: turris-mox-rwtm: Drop redundant device pointer
(no matching commit)
- [v4,15/19] firmware: turris-mox-rwtm: Use devm_mutex_init() instead of mutex_init()
(no matching commit)
- [v4,16/19] firmware: turris-mox-rwtm: Use container_of() instead of hwrng .priv member
(no matching commit)
- [v4,17/19] firmware: turris-mox-rwtm: Use EOPNOTSUPP instead of ENOSYS
(no matching commit)
- [v4,18/19] firmware: turris-mox-rwtm: Use ALIGN() instead of hardcoding
(no matching commit)
- [v4,19/19] firmware: turris-mox-rwtm: Deduplicate command execution code
(no matching commit)
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 22+ messages in thread