Commit beed8bea authored by Bo Jiao's avatar Bo Jiao Committed by Felix Fietkau
Browse files

mt76: mt7915: add mt7916 calibrated data support



Adjust proper eeprom size and add default calibrated data support
for mt7916.

Co-developed-by: default avatarShayne Chen <shayne.chen@mediatek.com>
Signed-off-by: default avatarShayne Chen <shayne.chen@mediatek.com>
Co-developed-by: default avatarSujuan Chen <sujuan.chen@mediatek.com>
Signed-off-by: default avatarSujuan Chen <sujuan.chen@mediatek.com>
Signed-off-by: default avatarBo Jiao <Bo.Jiao@mediatek.com>
Reviewed-by: default avatarRyder Lee <ryder.lee@mediatek.com>
Signed-off-by: default avatarFelix Fietkau <nbd@nbd.name>
parent 417a4534
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ static int mt7915_check_eeprom(struct mt7915_dev *dev)

	switch (val) {
	case 0x7915:
	case 0x7916:
		return 0;
	default:
		return -EINVAL;
@@ -52,6 +53,9 @@ mt7915_eeprom_load_default(struct mt7915_dev *dev)
	if (dev->dbdc_support)
		default_bin = MT7915_EEPROM_DEFAULT_DBDC;

	if (!is_mt7915(&dev->mt76))
		default_bin = MT7916_EEPROM_DEFAULT;

	ret = request_firmware(&fw, default_bin, dev->mt76.dev);
	if (ret)
		return ret;
@@ -62,7 +66,7 @@ mt7915_eeprom_load_default(struct mt7915_dev *dev)
		goto out;
	}

	memcpy(eeprom, fw->data, MT7915_EEPROM_SIZE);
	memcpy(eeprom, fw->data, mt7915_eeprom_size(dev));
	dev->flash_mode = true;

out:
@@ -74,8 +78,9 @@ mt7915_eeprom_load_default(struct mt7915_dev *dev)
static int mt7915_eeprom_load(struct mt7915_dev *dev)
{
	int ret;
	u16 eeprom_size = mt7915_eeprom_size(dev);

	ret = mt76_eeprom_init(&dev->mt76, MT7915_EEPROM_SIZE);
	ret = mt76_eeprom_init(&dev->mt76, eeprom_size);
	if (ret < 0)
		return ret;

@@ -91,7 +96,7 @@ static int mt7915_eeprom_load(struct mt7915_dev *dev)
			return -EINVAL;

		/* read eeprom data from efuse */
		block_num = DIV_ROUND_UP(MT7915_EEPROM_SIZE,
		block_num = DIV_ROUND_UP(eeprom_size,
					 MT7915_EEPROM_BLOCK_SIZE);
		for (i = 0; i < block_num; i++)
			mt7915_mcu_get_eeprom(dev,
+4 −3
Original line number Diff line number Diff line
@@ -3574,7 +3574,8 @@ static int mt7915_mcu_set_eeprom_flash(struct mt7915_dev *dev)
#define PAGE_IDX_MASK		GENMASK(4, 2)
#define PER_PAGE_SIZE		0x400
	struct mt7915_mcu_eeprom req = { .buffer_mode = EE_MODE_BUFFER };
	u8 total = DIV_ROUND_UP(MT7915_EEPROM_SIZE, PER_PAGE_SIZE);
	u16 eeprom_size = mt7915_eeprom_size(dev);
	u8 total = DIV_ROUND_UP(eeprom_size, PER_PAGE_SIZE);
	u8 *eep = (u8 *)dev->mt76.eeprom.data;
	int eep_len;
	int i;
@@ -3583,8 +3584,8 @@ static int mt7915_mcu_set_eeprom_flash(struct mt7915_dev *dev)
		struct sk_buff *skb;
		int ret;

		if (i == total - 1 && !!(MT7915_EEPROM_SIZE % PER_PAGE_SIZE))
			eep_len = MT7915_EEPROM_SIZE % PER_PAGE_SIZE;
		if (i == total - 1 && !!(eeprom_size % PER_PAGE_SIZE))
			eep_len = eeprom_size % PER_PAGE_SIZE;
		else
			eep_len = PER_PAGE_SIZE;

+8 −0
Original line number Diff line number Diff line
@@ -37,8 +37,11 @@

#define MT7915_EEPROM_DEFAULT		"mediatek/mt7915_eeprom.bin"
#define MT7915_EEPROM_DEFAULT_DBDC	"mediatek/mt7915_eeprom_dbdc.bin"
#define MT7916_EEPROM_DEFAULT		"mediatek/mt7916_eeprom.bin"

#define MT7915_EEPROM_SIZE		3584
#define MT7916_EEPROM_SIZE		4096

#define MT7915_EEPROM_BLOCK_SIZE	16
#define MT7915_TOKEN_SIZE		8192

@@ -486,6 +489,11 @@ static inline u16 mt7915_wtbl_size(struct mt7915_dev *dev)
	return is_mt7915(&dev->mt76) ? MT7915_WTBL_SIZE : MT7916_WTBL_SIZE;
}

static inline u16 mt7915_eeprom_size(struct mt7915_dev *dev)
{
	return is_mt7915(&dev->mt76) ? MT7915_EEPROM_SIZE : MT7916_EEPROM_SIZE;
}

void mt7915_dual_hif_set_irq_mask(struct mt7915_dev *dev, bool write_reg,
				  u32 clear, u32 set);