All of lore.kernel.org
 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 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.