From c7577e7c0c00532de4c3aac99b11d96fc178ca43 Mon Sep 17 00:00:00 2001
From: StanleyYP Wang <StanleyYP.Wang@mediatek.com>
Date: Thu, 7 Jul 2022 11:09:59 +0800
Subject: [PATCH 1020/1033] wifi: mt76: mt7915: implement bin file mode

Signed-off-by: StanleyYP Wang <StanleyYP.Wang@mediatek.com>
Signed-off-by: Shayne Chen <shayne.chen@mediatek.com>
---
 eeprom.c             | 20 ++++++++++++++++++++
 mt76.h               |  3 +++
 mt7915/eeprom.c      | 36 +++++++++++++++++++++++++++++++++---
 mt7915/eeprom.h      |  7 +++++++
 mt7915/mt7915.h      |  3 +++
 mt7915/mtk_debugfs.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
 6 files changed, 110 insertions(+), 3 deletions(-)

diff --git a/eeprom.c b/eeprom.c
index aa88925..412740f 100644
--- a/eeprom.c
+++ b/eeprom.c
@@ -104,6 +104,26 @@ out_put_node:
 }
 EXPORT_SYMBOL_GPL(mt76_get_of_eeprom);
 
+bool mt76_check_bin_file_mode(struct mt76_dev *dev)
+{
+	struct device_node *np = dev->dev->of_node;
+	const char *bin_file_name = NULL;
+
+	if (!np)
+		return false;
+
+	of_property_read_string(np, "bin_file_name", &bin_file_name);
+
+	dev->bin_file_name = bin_file_name;
+	if (dev->bin_file_name)
+		dev_info(dev->dev, "Using bin file %s\n", dev->bin_file_name);
+
+	of_node_put(np);
+
+	return dev->bin_file_name ? true : false;
+}
+EXPORT_SYMBOL_GPL(mt76_check_bin_file_mode);
+
 void
 mt76_eeprom_override(struct mt76_phy *phy)
 {
diff --git a/mt76.h b/mt76.h
index 8e679a1..668ab2b 100644
--- a/mt76.h
+++ b/mt76.h
@@ -906,9 +906,11 @@ struct mt76_dev {
 		struct mt76_sdio sdio;
 	};
 
+	/* for mtk internal */
 	struct mt76_connac2_patch_hdr *patch_hdr;
 	struct mt76_connac2_fw_trailer *wm_hdr;
 	struct mt76_connac2_fw_trailer *wa_hdr;
+	const char *bin_file_name;
 };
 
 struct mt76_power_limits {
@@ -1045,6 +1047,7 @@ void mt76_seq_puts_array(struct seq_file *file, const char *str,
 int mt76_eeprom_init(struct mt76_dev *dev, int len);
 void mt76_eeprom_override(struct mt76_phy *phy);
 int mt76_get_of_eeprom(struct mt76_dev *dev, void *data, int offset, int len);
+bool mt76_check_bin_file_mode(struct mt76_dev *dev);
 
 struct mt76_queue *
 mt76_init_queue(struct mt76_dev *dev, int qid, int idx, int n_desc,
diff --git a/mt7915/eeprom.c b/mt7915/eeprom.c
index a5c99a5..fd08d42 100644
--- a/mt7915/eeprom.c
+++ b/mt7915/eeprom.c
@@ -47,8 +47,11 @@ static int mt7915_check_eeprom(struct mt7915_dev *dev)
 	}
 }
 
-static char *mt7915_eeprom_name(struct mt7915_dev *dev)
+const char *mt7915_eeprom_name(struct mt7915_dev *dev)
 {
+	if (dev->bin_file_mode)
+		return dev->mt76.bin_file_name;
+
 	switch (mt76_chip(&dev->mt76)) {
 	case 0x7915:
 		return dev->dbdc_support ?
@@ -89,7 +92,10 @@ mt7915_eeprom_load_default(struct mt7915_dev *dev)
 		return ret;
 
 	if (!fw || !fw->data) {
-		dev_err(dev->mt76.dev, "Invalid default bin\n");
+		if (dev->bin_file_mode)
+			dev_err(dev->mt76.dev, "Invalid bin (bin file mode)\n");
+		else
+			dev_err(dev->mt76.dev, "Invalid default bin\n");
 		ret = -EINVAL;
 		goto out;
 	}
@@ -114,6 +120,7 @@ static int mt7915_eeprom_load(struct mt7915_dev *dev)
 
 	if (ret) {
 		dev->flash_mode = true;
+		dev->eeprom_mode = FLASH_MODE;
 	} else {
 		u8 free_block_num;
 		u32 block_num, i;
@@ -134,6 +141,8 @@ static int mt7915_eeprom_load(struct mt7915_dev *dev)
 			if (ret < 0)
 				return ret;
 		}
+
+		dev->eeprom_mode = EFUSE_MODE;
 	}
 
 	return mt7915_check_eeprom(dev);
@@ -239,12 +248,33 @@ int mt7915_eeprom_init(struct mt7915_dev *dev)
 {
 	int ret;
 
-	ret = mt7915_eeprom_load(dev);
+	dev->bin_file_mode = mt76_check_bin_file_mode(&dev->mt76);
+	if (dev->bin_file_mode) {
+		dev->mt76.eeprom.size = mt7915_eeprom_size(dev);
+		dev->mt76.eeprom.data = devm_kzalloc(dev->mt76.dev, dev->mt76.eeprom.size,
+						     GFP_KERNEL);
+		if (!dev->mt76.eeprom.data)
+			return -ENOMEM;
+		ret = mt7915_eeprom_load_default(dev);
+		if (ret)
+			return ret;
+
+		ret = mt7915_check_eeprom(dev);
+		if (ret)
+			return ret;
+		dev->eeprom_mode = BIN_FILE_MODE;
+	} else {
+		ret = mt7915_eeprom_load(dev);
+	}
+
 	if (ret < 0) {
 		if (ret != -EINVAL)
 			return ret;
 
 		dev_warn(dev->mt76.dev, "eeprom load fail, use default bin\n");
+		dev->bin_file_mode = false;
+		dev->eeprom_mode = DEFAULT_BIN_MODE;
+
 		ret = mt7915_eeprom_load_default(dev);
 		if (ret)
 			return ret;
diff --git a/mt7915/eeprom.h b/mt7915/eeprom.h
index fdae347..9056d78 100644
--- a/mt7915/eeprom.h
+++ b/mt7915/eeprom.h
@@ -108,6 +108,13 @@ enum mt7915_sku_rate_group {
 	MAX_SKU_RATE_GROUP_NUM,
 };
 
+enum mt7915_eeprom_mode {
+	DEFAULT_BIN_MODE,
+	EFUSE_MODE,
+	FLASH_MODE,
+	BIN_FILE_MODE,
+};
+
 static inline int
 mt7915_get_channel_group_5g(int channel, bool is_7976)
 {
diff --git a/mt7915/mt7915.h b/mt7915/mt7915.h
index 2409bf5..25f92e1 100644
--- a/mt7915/mt7915.h
+++ b/mt7915/mt7915.h
@@ -400,6 +400,8 @@ struct mt7915_dev {
 
 	bool dbdc_support;
 	bool flash_mode;
+	bool bin_file_mode;
+	u8 eeprom_mode;
 	bool muru_debug;
 	bool ibf;
 
@@ -775,6 +777,7 @@ void mt7915_dump_tmac_info(u8 *tmac_info);
 int mt7915_mcu_set_txpower_level(struct mt7915_phy *phy, u8 drop_level);
 void mt7915_packet_log_to_host(struct mt7915_dev *dev, const void *data, int len, int type, int des_len);
 int mt7915_mcu_set_amsdu_algo(struct mt7915_dev *dev, u16 wcid, u8 enable);
+const char *mt7915_eeprom_name(struct mt7915_dev *dev);
 
 #define PKT_BIN_DEBUG_MAGIC	0xc8763123
 enum {
diff --git a/mt7915/mtk_debugfs.c b/mt7915/mtk_debugfs.c
index 20133a4..2cccebe 100644
--- a/mt7915/mtk_debugfs.c
+++ b/mt7915/mtk_debugfs.c
@@ -3,6 +3,7 @@
 #include "mt7915_debug.h"
 #include "mac.h"
 #include "mcu.h"
+#include "eeprom.h"
 
 #ifdef MTK_DEBUG
 #define LWTBL_IDX2BASE_ID		GENMASK(14, 8)
@@ -3602,6 +3603,47 @@ static int mt7915_fw_wm_info_read(struct seq_file *s, void *data)
 	return 0;
 }
 
+static int mt7915_show_eeprom_mode(struct seq_file *s, void *data)
+{
+	struct mt7915_dev *dev = dev_get_drvdata(s->private);
+	struct mt76_dev *mdev = &dev->mt76;
+	u8 free_block_num = 0;
+#ifdef CONFIG_NL80211_TESTMODE
+	const char *mtd_name = mdev->test_mtd.name;
+	u32 mtd_offset = mdev->test_mtd.offset;
+#else
+	const char *mtd_name = NULL;
+	u32 mtd_offset;
+#endif
+
+	seq_printf(s, "Current eeprom mode:\n");
+
+	switch (dev->eeprom_mode) {
+	case DEFAULT_BIN_MODE:
+		seq_printf(s, "   default bin mode\n   filename = %s\n", mt7915_eeprom_name(dev));
+		break;
+	case EFUSE_MODE:
+		seq_printf(s, "   efuse mode\n");
+		mt7915_mcu_get_eeprom_free_block(dev, &free_block_num);
+		seq_printf(s, "   free block number = %d\n", free_block_num);
+		break;
+	case FLASH_MODE:
+		if (mtd_name)
+			seq_printf(s, "   flash mode\n   mtd name = %s\n   flash offset = 0x%x\n",
+				   mtd_name, mtd_offset);
+		else
+			seq_printf(s, "   flash mode\n");
+		break;
+	case BIN_FILE_MODE:
+		seq_printf(s, "   bin file mode\n   filename = %s\n", mt7915_eeprom_name(dev));
+		break;
+	default:
+		break;
+	}
+
+	return 0;
+}
+
 int mt7915_mtk_init_debugfs(struct mt7915_phy *phy, struct dentry *dir)
 {
 	struct mt7915_dev *dev = phy->dev;
@@ -3689,6 +3731,8 @@ int mt7915_mtk_init_debugfs(struct mt7915_phy *phy, struct dentry *dir)
 	debugfs_create_devm_seqfile(dev->mt76.dev, "fw_version", dir,
 				    mt7915_dump_version);
 
+	debugfs_create_devm_seqfile(dev->mt76.dev, "eeprom_mode", dir,
+				    mt7915_show_eeprom_mode);
 	return 0;
 }
 #endif
-- 
2.18.0

