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

Commit 3ac61578 authored by Siva Rebbagondla's avatar Siva Rebbagondla Committed by Kalle Valo
Browse files

rsi: move common part of firmware load to separate function



Till software bootloader ready state, communication with device is common
for 9113 and 9116. Hence moved that part of firmware loading to separate
function rsi_prepare_fw_load(). Also LMAC_VER_OFFSET is different for 9113
and 9116, so renamed existing macro to LMAC_VER_OFFSET_9113

Signed-off-by: default avatarSiva Rebbagondla <siva8118@gmail.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent 54fdb318
Loading
Loading
Loading
Loading
+35 −19
Original line number Diff line number Diff line
@@ -829,21 +829,18 @@ static int auto_fw_upgrade(struct rsi_hw *adapter, u8 *flash_content,
	return 0;
}

static int rsi_load_firmware(struct rsi_hw *adapter)
static int rsi_hal_prepare_fwload(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;
	u16 tmp_regout_val = 0;
	struct ta_metadata *metadata_p;
	u32 regout_val = 0;
	int status;

	bl_start_cmd_timer(adapter, BL_CMD_TIMEOUT);

	while (!adapter->blcmd_timer_expired) {
		status = hif_ops->master_reg_read(adapter, SWBL_REGOUT,
					      &regout_val, 2);
						  &regout_val,
						  RSI_COMMON_REG_SIZE);
		if (status < 0) {
			rsi_dbg(ERR_ZONE,
				"%s: REGOUT read failed\n", __func__);
@@ -865,13 +862,26 @@ static int rsi_load_firmware(struct rsi_hw *adapter)
		(regout_val & 0xff));

	status = hif_ops->master_reg_write(adapter, SWBL_REGOUT,
					(REGOUT_INVALID | REGOUT_INVALID << 8),
					2);
	if (status < 0) {
					   (REGOUT_INVALID |
					    REGOUT_INVALID << 8),
					   RSI_COMMON_REG_SIZE);
	if (status < 0)
		rsi_dbg(ERR_ZONE, "%s: REGOUT writing failed..\n", __func__);
	else
		rsi_dbg(INFO_ZONE,
			"===> Device is ready to load firmware <===\n");

	return status;
}
	mdelay(1);

static int rsi_load_9113_firmware(struct rsi_hw *adapter)
{
	struct rsi_common *common = adapter->priv;
	const struct firmware *fw_entry = NULL;
	u32 content_size;
	u16 tmp_regout_val = 0;
	struct ta_metadata *metadata_p;
	int status;

	status = bl_cmd(adapter, CONFIG_AUTO_READ_MODE, CMD_PASS,
			"AUTO_READ_CMD");
@@ -902,13 +912,15 @@ static int rsi_load_firmware(struct rsi_hw *adapter)

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

@@ -980,10 +992,14 @@ static int rsi_load_firmware(struct rsi_hw *adapter)
int rsi_hal_device_init(struct rsi_hw *adapter)
{
	struct rsi_common *common = adapter->priv;
	int status;

	switch (adapter->device_model) {
	case RSI_DEV_9113:
		if (rsi_load_firmware(adapter)) {
		status = rsi_hal_prepare_fwload(adapter);
		if (status < 0)
			return status;
		if (rsi_load_9113_firmware(adapter)) {
			rsi_dbg(ERR_ZONE,
				"%s: Failed to load TA instructions\n",
				__func__);
+1 −1
Original line number Diff line number Diff line
@@ -113,7 +113,7 @@
#define BBP_INFO_40MHZ 0x6

#define FW_FLASH_OFFSET			0x820
#define LMAC_VER_OFFSET			(FW_FLASH_OFFSET + 0x200)
#define LMAC_VER_OFFSET_9113		(FW_FLASH_OFFSET + 0x200)
#define MAX_DWORD_ALIGN_BYTES		64
#define RSI_COMMON_REG_SIZE		2