linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/3] firmware: arm_scpi: remove default for get_scpi_ops if not reachable
@ 2017-10-09 18:49 Heiner Kallweit
  2017-10-09 18:52 ` [PATCH 2/3] firmware: arm_scpi: remove struct sensor_capabilities Heiner Kallweit
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Heiner Kallweit @ 2017-10-09 18:49 UTC (permalink / raw)
  To: linux-arm-kernel

All callers of get_scpi_ops() depend on the result and therefore have
a Kconfig dependency on ARM_SCPI_PROTOCOL. Means that ARM_SCPI_PROTOCOL
being a module and caller being built-in can't occur.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
---
 include/linux/scpi_protocol.h | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/include/linux/scpi_protocol.h b/include/linux/scpi_protocol.h
index 327d6566..d5eba00d 100644
--- a/include/linux/scpi_protocol.h
+++ b/include/linux/scpi_protocol.h
@@ -77,8 +77,4 @@ struct scpi_ops {
 	int (*device_set_power_state)(u16, u8);
 };
 
-#if IS_REACHABLE(CONFIG_ARM_SCPI_PROTOCOL)
 struct scpi_ops *get_scpi_ops(void);
-#else
-static inline struct scpi_ops *get_scpi_ops(void) { return NULL; }
-#endif
-- 
2.14.2

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

* [PATCH 2/3] firmware: arm_scpi: remove struct sensor_capabilities
  2017-10-09 18:49 [PATCH 1/3] firmware: arm_scpi: remove default for get_scpi_ops if not reachable Heiner Kallweit
@ 2017-10-09 18:52 ` Heiner Kallweit
  2017-10-09 18:57 ` [PATCH 3/3] firmware: arm_scpi: use FIELD_GET/_PREP to simplify macro definitions Heiner Kallweit
  2017-10-10 10:18 ` [PATCH 1/3] firmware: arm_scpi: remove default for get_scpi_ops if not reachable Sudeep Holla
  2 siblings, 0 replies; 4+ messages in thread
From: Heiner Kallweit @ 2017-10-09 18:52 UTC (permalink / raw)
  To: linux-arm-kernel

One more single-element struct was left, remove it.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
---
 drivers/firmware/arm_scpi.c | 12 ++++--------
 1 file changed, 4 insertions(+), 8 deletions(-)

diff --git a/drivers/firmware/arm_scpi.c b/drivers/firmware/arm_scpi.c
index dfb373c8..579941d5 100644
--- a/drivers/firmware/arm_scpi.c
+++ b/drivers/firmware/arm_scpi.c
@@ -331,10 +331,6 @@ struct dvfs_set {
 	u8 index;
 } __packed;
 
-struct sensor_capabilities {
-	__le16 sensors;
-} __packed;
-
 struct _scpi_sensor_info {
 	__le16 sensor_id;
 	u8 class;
@@ -738,13 +734,13 @@ static int scpi_dvfs_add_opps_to_device(struct device *dev)
 
 static int scpi_sensor_get_capability(u16 *sensors)
 {
-	struct sensor_capabilities cap_buf;
+	__le16 cap;
 	int ret;
 
-	ret = scpi_send_message(CMD_SENSOR_CAPABILITIES, NULL, 0, &cap_buf,
-				sizeof(cap_buf));
+	ret = scpi_send_message(CMD_SENSOR_CAPABILITIES, NULL, 0, &cap,
+				sizeof(cap));
 	if (!ret)
-		*sensors = le16_to_cpu(cap_buf.sensors);
+		*sensors = le16_to_cpu(cap);
 
 	return ret;
 }
-- 
2.14.2

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

* [PATCH 3/3] firmware: arm_scpi: use FIELD_GET/_PREP to simplify macro definitions
  2017-10-09 18:49 [PATCH 1/3] firmware: arm_scpi: remove default for get_scpi_ops if not reachable Heiner Kallweit
  2017-10-09 18:52 ` [PATCH 2/3] firmware: arm_scpi: remove struct sensor_capabilities Heiner Kallweit
@ 2017-10-09 18:57 ` Heiner Kallweit
  2017-10-10 10:18 ` [PATCH 1/3] firmware: arm_scpi: remove default for get_scpi_ops if not reachable Sudeep Holla
  2 siblings, 0 replies; 4+ messages in thread
From: Heiner Kallweit @ 2017-10-09 18:57 UTC (permalink / raw)
  To: linux-arm-kernel

Macro definitions can be simplified by making use of the FIELD_GET/_PREP
bitfield macros.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
---
 drivers/firmware/arm_scpi.c | 38 +++++++++++++++-----------------------
 1 file changed, 15 insertions(+), 23 deletions(-)

diff --git a/drivers/firmware/arm_scpi.c b/drivers/firmware/arm_scpi.c
index 579941d5..fc868d66 100644
--- a/drivers/firmware/arm_scpi.c
+++ b/drivers/firmware/arm_scpi.c
@@ -46,27 +46,19 @@
 #include <linux/sort.h>
 #include <linux/spinlock.h>
 
-#define CMD_ID_SHIFT		0
-#define CMD_ID_MASK		0x7f
-#define CMD_TOKEN_ID_SHIFT	8
-#define CMD_TOKEN_ID_MASK	0xff
-#define CMD_DATA_SIZE_SHIFT	16
-#define CMD_DATA_SIZE_MASK	0x1ff
-#define CMD_LEGACY_DATA_SIZE_SHIFT	20
-#define CMD_LEGACY_DATA_SIZE_MASK	0x1ff
-#define PACK_SCPI_CMD(cmd_id, tx_sz)			\
-	((((cmd_id) & CMD_ID_MASK) << CMD_ID_SHIFT) |	\
-	(((tx_sz) & CMD_DATA_SIZE_MASK) << CMD_DATA_SIZE_SHIFT))
-#define ADD_SCPI_TOKEN(cmd, token)			\
-	((cmd) |= (((token) & CMD_TOKEN_ID_MASK) << CMD_TOKEN_ID_SHIFT))
-#define PACK_LEGACY_SCPI_CMD(cmd_id, tx_sz)				\
-	((((cmd_id) & CMD_ID_MASK) << CMD_ID_SHIFT) |			       \
-	(((tx_sz) & CMD_LEGACY_DATA_SIZE_MASK) << CMD_LEGACY_DATA_SIZE_SHIFT))
-
-#define CMD_SIZE(cmd)	(((cmd) >> CMD_DATA_SIZE_SHIFT) & CMD_DATA_SIZE_MASK)
-#define CMD_LEGACY_SIZE(cmd)	(((cmd) >> CMD_LEGACY_DATA_SIZE_SHIFT) & \
-					CMD_LEGACY_DATA_SIZE_MASK)
-#define CMD_UNIQ_MASK	(CMD_TOKEN_ID_MASK << CMD_TOKEN_ID_SHIFT | CMD_ID_MASK)
+#define CMD_ID_MASK		GENMASK(6, 0)
+#define CMD_TOKEN_ID_MASK	GENMASK(15, 8)
+#define CMD_DATA_SIZE_MASK	GENMASK(24, 16)
+#define CMD_LEGACY_DATA_SIZE_MASK	GENMASK(28, 20)
+#define PACK_SCPI_CMD(cmd_id, tx_sz)		\
+	(FIELD_PREP(CMD_ID_MASK, cmd_id) |	\
+	FIELD_PREP(CMD_DATA_SIZE_MASK, tx_sz))
+#define PACK_LEGACY_SCPI_CMD(cmd_id, tx_sz)	\
+	(FIELD_PREP(CMD_ID_MASK, cmd_id) |	\
+	FIELD_PREP(CMD_LEGACY_DATA_SIZE_MASK, tx_sz))
+
+#define CMD_SIZE(cmd)	FIELD_GET(CMD_DATA_SIZE_MASK, cmd)
+#define CMD_UNIQ_MASK	(CMD_TOKEN_ID_MASK | CMD_ID_MASK)
 #define CMD_XTRACT_UNIQ(cmd)	((cmd) & CMD_UNIQ_MASK)
 
 #define SCPI_SLOT		0
@@ -412,7 +404,7 @@ static void scpi_process_cmd(struct scpi_chan *ch, u32 cmd)
 		} else {
 			struct scpi_shared_mem __iomem *mem = ch->rx_payload;
 
-			len = min(match->rx_len, CMD_SIZE(cmd));
+			len = min_t(unsigned int, match->rx_len, CMD_SIZE(cmd));
 
 			match->status = ioread32(&mem->status);
 			memcpy_fromio(match->rx_buf, mem->payload, len);
@@ -454,7 +446,7 @@ static void scpi_tx_prepare(struct mbox_client *c, void *msg)
 	if (t->rx_buf) {
 		if (!(++ch->token))
 			++ch->token;
-		ADD_SCPI_TOKEN(t->cmd, ch->token);
+		t->cmd |= FIELD_PREP(CMD_TOKEN_ID_MASK, ch->token);
 		spin_lock_irqsave(&ch->rx_lock, flags);
 		list_add_tail(&t->node, &ch->rx_pending);
 		spin_unlock_irqrestore(&ch->rx_lock, flags);
-- 
2.14.2

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

* [PATCH 1/3] firmware: arm_scpi: remove default for get_scpi_ops if not reachable
  2017-10-09 18:49 [PATCH 1/3] firmware: arm_scpi: remove default for get_scpi_ops if not reachable Heiner Kallweit
  2017-10-09 18:52 ` [PATCH 2/3] firmware: arm_scpi: remove struct sensor_capabilities Heiner Kallweit
  2017-10-09 18:57 ` [PATCH 3/3] firmware: arm_scpi: use FIELD_GET/_PREP to simplify macro definitions Heiner Kallweit
@ 2017-10-10 10:18 ` Sudeep Holla
  2 siblings, 0 replies; 4+ messages in thread
From: Sudeep Holla @ 2017-10-10 10:18 UTC (permalink / raw)
  To: linux-arm-kernel



On 09/10/17 19:49, Heiner Kallweit wrote:
> All callers of get_scpi_ops() depend on the result and therefore have
> a Kconfig dependency on ARM_SCPI_PROTOCOL. Means that ARM_SCPI_PROTOCOL
> being a module and caller being built-in can't occur.
> 

I just sent PR for v4.15 yesterday, so this needs to wait until v4.16. I
will take a look this before that.
-- 
Regards,
Sudeep

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

end of thread, other threads:[~2017-10-10 10:18 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-10-09 18:49 [PATCH 1/3] firmware: arm_scpi: remove default for get_scpi_ops if not reachable Heiner Kallweit
2017-10-09 18:52 ` [PATCH 2/3] firmware: arm_scpi: remove struct sensor_capabilities Heiner Kallweit
2017-10-09 18:57 ` [PATCH 3/3] firmware: arm_scpi: use FIELD_GET/_PREP to simplify macro definitions Heiner Kallweit
2017-10-10 10:18 ` [PATCH 1/3] firmware: arm_scpi: remove default for get_scpi_ops if not reachable Sudeep Holla

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).