Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 192524a4 authored by Pavani Muthyala's avatar Pavani Muthyala Committed by Kalle Valo
Browse files

rsi: add version information



We will dump information about firmware version, firmware file
name and operating mode during initialization.

Signed-off-by: default avatarPavani Muthyala <pavani.muthyala@redpinesignals.com>
Signed-off-by: default avatarAmitkumar Karwar <amit.karwar@redpinesignals.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent 7dfb0ebd
Loading
Loading
Loading
Loading
+6 −13
Original line number Diff line number Diff line
@@ -83,19 +83,12 @@ static int rsi_version_read(struct seq_file *seq, void *data)
{
	struct rsi_common *common = seq->private;

	common->driver_ver.major = 0;
	common->driver_ver.minor = 1;
	common->driver_ver.release_num = 0;
	common->driver_ver.patch_num = 0;
	seq_printf(seq, "Driver : %x.%d.%d.%d\nLMAC   : %d.%d.%d.%d\n",
		   common->driver_ver.major,
		   common->driver_ver.minor,
		   common->driver_ver.release_num,
		   common->driver_ver.patch_num,
		   common->fw_ver.major,
		   common->fw_ver.minor,
		   common->fw_ver.release_num,
		   common->fw_ver.patch_num);
	seq_printf(seq, "LMAC   : %d.%d.%d.%d\n",
		   common->lmac_ver.major,
		   common->lmac_ver.minor,
		   common->lmac_ver.release_num,
		   common->lmac_ver.patch_num);

	return 0;
}

+13 −0
Original line number Diff line number Diff line
@@ -769,6 +769,7 @@ static int auto_fw_upgrade(struct rsi_hw *adapter, u8 *flash_content,

static int rsi_load_firmware(struct rsi_hw *adapter)
{
	struct rsi_common *common = adapter->priv;
	struct rsi_host_intf_ops *hif_ops = adapter->host_intf_ops;
	const struct firmware *fw_entry = NULL;
	u32 regout_val = 0, content_size;
@@ -844,6 +845,18 @@ static int rsi_load_firmware(struct rsi_hw *adapter)
	content_size = fw_entry->size;
	rsi_dbg(INFO_ZONE, "FW Length = %d bytes\n", content_size);

	/* Get the firmware version */
	common->lmac_ver.ver.info.fw_ver[0] =
		flash_content[LMAC_VER_OFFSET] & 0xFF;
	common->lmac_ver.ver.info.fw_ver[1] =
		flash_content[LMAC_VER_OFFSET + 1] & 0xFF;
	common->lmac_ver.major = flash_content[LMAC_VER_OFFSET + 2] & 0xFF;
	common->lmac_ver.release_num =
		flash_content[LMAC_VER_OFFSET + 3] & 0xFF;
	common->lmac_ver.minor = flash_content[LMAC_VER_OFFSET + 4] & 0xFF;
	common->lmac_ver.patch_num = 0;
	rsi_print_version(common);

	status = bl_write_header(adapter, flash_content, content_size);
	if (status) {
		rsi_dbg(ERR_ZONE,
+25 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@
#include <linux/firmware.h>
#include "rsi_mgmt.h"
#include "rsi_common.h"
#include "rsi_hal.h"

u32 rsi_zone_enabled = /* INFO_ZONE |
			INIT_ZONE |
@@ -56,6 +57,30 @@ void rsi_dbg(u32 zone, const char *fmt, ...)
}
EXPORT_SYMBOL_GPL(rsi_dbg);

static char *opmode_str(int oper_mode)
{
	switch (oper_mode) {
	case RSI_DEV_OPMODE_WIFI_ALONE:
		return "Wi-Fi alone";
	}

	return "Unknown";
}

void rsi_print_version(struct rsi_common *common)
{
	rsi_dbg(ERR_ZONE, "================================================\n");
	rsi_dbg(ERR_ZONE, "================ RSI Version Info ==============\n");
	rsi_dbg(ERR_ZONE, "================================================\n");
	rsi_dbg(ERR_ZONE, "FW Version\t: %d.%d.%d\n",
		common->lmac_ver.major, common->lmac_ver.minor,
		common->lmac_ver.release_num);
	rsi_dbg(ERR_ZONE, "Operating mode\t: %d [%s]",
		common->oper_mode, opmode_str(common->oper_mode));
	rsi_dbg(ERR_ZONE, "Firmware file\t: %s", common->priv->fw_file_name);
	rsi_dbg(ERR_ZONE, "================================================\n");
}

/**
 * rsi_prepare_skb() - This function prepares the skb.
 * @common: Pointer to the driver private structure.
+3 −0
Original line number Diff line number Diff line
@@ -101,6 +101,9 @@

#define BBP_INFO_40MHZ 0x6

#define FW_FLASH_OFFSET			0x820
#define LMAC_VER_OFFSET			(FW_FLASH_OFFSET + 0x200)

struct bl_header {
	__le32 flags;
	__le32 image_no;
+10 −4
Original line number Diff line number Diff line
@@ -113,8 +113,13 @@ extern __printf(2, 3) void rsi_dbg(u32 zone, const char *fmt, ...);
struct version_info {
	u16 major;
	u16 minor;
	u16 release_num;
	u16 patch_num;
	u8 release_num;
	u8 patch_num;
	union {
		struct {
			u8 fw_ver[8];
		} info;
	} ver;
} __packed;

struct skb_info {
@@ -199,8 +204,7 @@ struct rsi_common {
	struct vif_priv vif_info[RSI_MAX_VIFS];

	bool mgmt_q_block;
	struct version_info driver_ver;
	struct version_info fw_ver;
	struct version_info lmac_ver;

	struct rsi_thread tx_thread;
	struct sk_buff_head tx_queue[NUM_EDCA_QUEUES + 2];
@@ -334,6 +338,8 @@ struct rsi_hw {
	int (*determine_event_timeout)(struct rsi_hw *adapter);
};

void rsi_print_version(struct rsi_common *common);

struct rsi_host_intf_ops {
	int (*read_pkt)(struct rsi_hw *adapter, u8 *pkt, u32 len);
	int (*write_pkt)(struct rsi_hw *adapter, u8 *pkt, u32 len);