[PATCH linux v3 15/18] drivers/fsi: Revisions to existing patch set
christopher.lee.bostic at gmail.com
christopher.lee.bostic at gmail.com
Wed Oct 12 08:40:00 AEDT 2016
From: Chris Bostic <cbostic at us.ibm.com>
Changes recommended to the patch set so far as supplied by
Jeremy Kerr. Moved some CFAM specific details to a new cfam header
Signed-off-by: Chris Bostic <cbostic at us.ibm.com>
Changes in V2:
- Removed the renaming of slave to cfam
---
drivers/fsi/fsi-cfam.h | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++
drivers/fsi/fsi-core.c | 22 ++++--------------
2 files changed, 68 insertions(+), 17 deletions(-)
create mode 100644 drivers/fsi/fsi-cfam.h
diff --git a/drivers/fsi/fsi-cfam.h b/drivers/fsi/fsi-cfam.h
new file mode 100644
index 0000000..ddb03cd
--- /dev/null
+++ b/drivers/fsi/fsi-cfam.h
@@ -0,0 +1,63 @@
+/*
+ * FSI CFAM definitions
+ *
+ * Copyright (C) IBM Corporation 2016
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#ifndef DRIVERS_FSI_CFAM_H
+#define DRIVERS_FSI_CFAM_H
+
+#include <linux/device.h>
+
+#include "fsi-master.h"
+
+#define FSI_SLAVE_ENG_ID 2
+
+#define FSI_MAX_CFAMS_PER_LINK 4
+#define FSI_CFAM_SIZE (FSI_LINK_SIZE / FSI_MAX_CFAMS_PER_LINK)
+#define FSI_PEEK_BASE 0x410
+#define FSI_SLAVE_BASE 0x800
+
+/* Config space decoding */
+#define FSI_CFG_NEXT_MASK 0x80000000
+#define FSI_CFG_SLOT_MASK 0x00ff0000
+#define FSI_CFG_SLOT_SHIFT 16
+#define FSI_CFG_VERS_MASK 0x0000f000
+#define FSI_CFG_VERS_SHIFT 12
+#define FSI_CFG_TYPE_MASK 0x00000ff0
+#define FSI_CFG_TYPE_SHIFT 4
+
+/*
+ * Return number of slots in the configuration word
+ */
+static inline uint8_t fsi_cfg_slot(uint32_t x)
+{
+ return (x & FSI_CFG_SLOT_MASK) >> FSI_CFG_SLOT_SHIFT;
+}
+
+/*
+ * Return version in the configuration word
+ */
+static inline uint8_t fsi_cfg_version(uint32_t x)
+{
+ return (x & FSI_CFG_VERS_MASK) >> FSI_CFG_VERS_SHIFT;
+}
+
+/*
+ * Return type field in the configuration word
+ */
+static inline uint8_t fsi_cfg_type(uint32_t x)
+{
+ return (x & FSI_CFG_TYPE_MASK) >> FSI_CFG_TYPE_SHIFT;
+}
+
+#endif /* DRIVERS_FSI_CFAM_H */
diff --git a/drivers/fsi/fsi-core.c b/drivers/fsi/fsi-core.c
index a3a860a..0da8cf0 100644
--- a/drivers/fsi/fsi-core.c
+++ b/drivers/fsi/fsi-core.c
@@ -21,19 +21,10 @@
#include <linux/slab.h>
#include "fsi-master.h"
+#include "fsi-cfam.h"
#define FSI_N_SLAVES 4
-#define FSI_SLAVE_CONF_NEXT_MASK 0x80000000
-#define FSI_SLAVE_CONF_SLOTS_MASK 0x00ff0000
-#define FSI_SLAVE_CONF_SLOTS_SHIFT 16
-#define FSI_SLAVE_CONF_VERSION_MASK 0x0000f000
-#define FSI_SLAVE_CONF_VERSION_SHIFT 12
-#define FSI_SLAVE_CONF_TYPE_MASK 0x00000ff0
-#define FSI_SLAVE_CONF_TYPE_SHIFT 4
-
-#define FSI_PEEK_BASE 0x410
-
static const int engine_page_size = 0x400;
static atomic_t master_idx = ATOMIC_INIT(-1);
@@ -179,12 +170,9 @@ static int fsi_slave_scan(struct fsi_slave *slave)
return -1;
}
- slots = (conf & FSI_SLAVE_CONF_SLOTS_MASK)
- >> FSI_SLAVE_CONF_SLOTS_SHIFT;
- version = (conf & FSI_SLAVE_CONF_VERSION_MASK)
- >> FSI_SLAVE_CONF_VERSION_SHIFT;
- type = (conf & FSI_SLAVE_CONF_TYPE_MASK)
- >> FSI_SLAVE_CONF_TYPE_SHIFT;
+ slots = fsi_cfg_slot(conf);
+ version = fsi_cfg_version(conf);
+ type = fsi_cfg_type(conf);
/*
* Unused address areas are marked by a zero type value; this
@@ -222,7 +210,7 @@ static int fsi_slave_scan(struct fsi_slave *slave)
engine_addr += slots * engine_page_size;
- if (!(conf & FSI_SLAVE_CONF_NEXT_MASK))
+ if (!(conf & FSI_CFG_NEXT_MASK))
break;
}
--
1.8.2.2
More information about the openbmc
mailing list