2016-07-01 07:00:43

by Tamizh Chelvam Raja

[permalink] [raw]
Subject: [PATCHv3 1/3] ath10k: move firmware_swap_code_seg_info to ath10k_fw_file

From: Tamizh chelvam <[email protected]>

Preparation to make use of firmware_swap_code_seg_info for UTF binary.

Signed-off-by: Tamizh chelvam <[email protected]>
---
drivers/net/wireless/ath/ath10k/core.c | 6 +++---
drivers/net/wireless/ath/ath10k/core.h | 6 ++----
drivers/net/wireless/ath/ath10k/swap.c | 26 ++++++++++++++------------
drivers/net/wireless/ath/ath10k/swap.h | 11 ++++++++---
4 files changed, 27 insertions(+), 22 deletions(-)

diff --git a/drivers/net/wireless/ath/ath10k/core.c b/drivers/net/wireless/ath/ath10k/core.c
index dfb3db0..0a1946b 100644
--- a/drivers/net/wireless/ath/ath10k/core.c
+++ b/drivers/net/wireless/ath/ath10k/core.c
@@ -723,7 +723,7 @@ static int ath10k_download_fw(struct ath10k *ar)
data = ar->running_fw->fw_file.firmware_data;
data_len = ar->running_fw->fw_file.firmware_len;

- ret = ath10k_swap_code_seg_configure(ar);
+ ret = ath10k_swap_code_seg_configure(ar, &ar->running_fw->fw_file);
if (ret) {
ath10k_err(ar, "failed to configure fw code swap: %d\n",
ret);
@@ -765,7 +765,7 @@ static void ath10k_core_free_firmware_files(struct ath10k *ar)
if (!IS_ERR(ar->pre_cal_file))
release_firmware(ar->pre_cal_file);

- ath10k_swap_code_seg_release(ar);
+ ath10k_swap_code_seg_release(ar, &ar->normal_mode_fw.fw_file);

ar->normal_mode_fw.fw_file.otp_data = NULL;
ar->normal_mode_fw.fw_file.otp_len = 0;
@@ -2009,7 +2009,7 @@ static int ath10k_core_probe_fw(struct ath10k *ar)
goto err_free_firmware_files;
}

- ret = ath10k_swap_code_seg_init(ar);
+ ret = ath10k_swap_code_seg_init(ar, &ar->normal_mode_fw.fw_file);
if (ret) {
ath10k_err(ar, "failed to initialize code swap segment: %d\n",
ret);
diff --git a/drivers/net/wireless/ath/ath10k/core.h b/drivers/net/wireless/ath/ath10k/core.h
index 3da18c9..e69e7e7 100644
--- a/drivers/net/wireless/ath/ath10k/core.h
+++ b/drivers/net/wireless/ath/ath10k/core.h
@@ -654,6 +654,8 @@ struct ath10k_fw_file {

const void *codeswap_data;
size_t codeswap_len;
+ /* FIXME: add a comment */
+ struct ath10k_swap_code_seg_info *firmware_swap_code_seg_info;
};

struct ath10k_fw_components {
@@ -765,10 +767,6 @@ struct ath10k {
const struct firmware *cal_file;

struct {
- struct ath10k_swap_code_seg_info *firmware_swap_code_seg_info;
- } swap;
-
- struct {
u32 vendor;
u32 device;
u32 subsystem_vendor;
diff --git a/drivers/net/wireless/ath/ath10k/swap.c b/drivers/net/wireless/ath/ath10k/swap.c
index 0c5f586..adf4592 100644
--- a/drivers/net/wireless/ath/ath10k/swap.c
+++ b/drivers/net/wireless/ath/ath10k/swap.c
@@ -134,17 +134,18 @@ ath10k_swap_code_seg_alloc(struct ath10k *ar, size_t swap_bin_len)
return seg_info;
}

-int ath10k_swap_code_seg_configure(struct ath10k *ar)
+int ath10k_swap_code_seg_configure(struct ath10k *ar,
+ const struct ath10k_fw_file *fw_file)
{
int ret;
struct ath10k_swap_code_seg_info *seg_info = NULL;

- if (!ar->swap.firmware_swap_code_seg_info)
+ if (!fw_file->firmware_swap_code_seg_info)
return 0;

ath10k_dbg(ar, ATH10K_DBG_BOOT, "boot found firmware code swap binary\n");

- seg_info = ar->swap.firmware_swap_code_seg_info;
+ seg_info = fw_file->firmware_swap_code_seg_info;

ret = ath10k_bmi_write_memory(ar, seg_info->target_addr,
&seg_info->seg_hw_info,
@@ -158,28 +159,29 @@ int ath10k_swap_code_seg_configure(struct ath10k *ar)
return 0;
}

-void ath10k_swap_code_seg_release(struct ath10k *ar)
+void ath10k_swap_code_seg_release(struct ath10k *ar,
+ struct ath10k_fw_file *fw_file)
{
- ath10k_swap_code_seg_free(ar, ar->swap.firmware_swap_code_seg_info);
+ ath10k_swap_code_seg_free(ar, fw_file->firmware_swap_code_seg_info);

/* FIXME: these two assignments look to bein wrong place! Shouldn't
* they be in ath10k_core_free_firmware_files() like the rest?
*/
- ar->normal_mode_fw.fw_file.codeswap_data = NULL;
- ar->normal_mode_fw.fw_file.codeswap_len = 0;
+ fw_file->codeswap_data = NULL;
+ fw_file->codeswap_len = 0;

- ar->swap.firmware_swap_code_seg_info = NULL;
+ fw_file->firmware_swap_code_seg_info = NULL;
}

-int ath10k_swap_code_seg_init(struct ath10k *ar)
+int ath10k_swap_code_seg_init(struct ath10k *ar, struct ath10k_fw_file *fw_file)
{
int ret;
struct ath10k_swap_code_seg_info *seg_info;
const void *codeswap_data;
size_t codeswap_len;

- codeswap_data = ar->normal_mode_fw.fw_file.codeswap_data;
- codeswap_len = ar->normal_mode_fw.fw_file.codeswap_len;
+ codeswap_data = fw_file->codeswap_data;
+ codeswap_len = fw_file->codeswap_len;

if (!codeswap_len || !codeswap_data)
return 0;
@@ -200,7 +202,7 @@ int ath10k_swap_code_seg_init(struct ath10k *ar)
return ret;
}

- ar->swap.firmware_swap_code_seg_info = seg_info;
+ fw_file->firmware_swap_code_seg_info = seg_info;

return 0;
}
diff --git a/drivers/net/wireless/ath/ath10k/swap.h b/drivers/net/wireless/ath/ath10k/swap.h
index 36991c7..f5dc047 100644
--- a/drivers/net/wireless/ath/ath10k/swap.h
+++ b/drivers/net/wireless/ath/ath10k/swap.h
@@ -23,6 +23,8 @@
/* Currently only one swap segment is supported */
#define ATH10K_SWAP_CODE_SEG_NUM_SUPPORTED 1

+struct ath10k_fw_file;
+
struct ath10k_swap_code_seg_tlv {
__le32 address;
__le32 length;
@@ -58,8 +60,11 @@ struct ath10k_swap_code_seg_info {
dma_addr_t paddr[ATH10K_SWAP_CODE_SEG_NUM_SUPPORTED];
};

-int ath10k_swap_code_seg_configure(struct ath10k *ar);
-void ath10k_swap_code_seg_release(struct ath10k *ar);
-int ath10k_swap_code_seg_init(struct ath10k *ar);
+int ath10k_swap_code_seg_configure(struct ath10k *ar,
+ const struct ath10k_fw_file *fw_file);
+void ath10k_swap_code_seg_release(struct ath10k *ar,
+ struct ath10k_fw_file *fw_file);
+int ath10k_swap_code_seg_init(struct ath10k *ar,
+ struct ath10k_fw_file *fw_file);

#endif
--
1.7.9.5



2016-07-04 00:50:16

by Julian Calaby

[permalink] [raw]
Subject: Re: [PATCHv3 1/3] ath10k: move firmware_swap_code_seg_info to ath10k_fw_file

Hi Tamizh,

On Fri, Jul 1, 2016 at 5:06 PM, <[email protected]> wrote:
> From: Tamizh chelvam <[email protected]>
>
> Preparation to make use of firmware_swap_code_seg_info for UTF binary.
>
> Signed-off-by: Tamizh chelvam <[email protected]>
> ---
> drivers/net/wireless/ath/ath10k/core.c | 6 +++---
> drivers/net/wireless/ath/ath10k/core.h | 6 ++----
> drivers/net/wireless/ath/ath10k/swap.c | 26 ++++++++++++++------------
> drivers/net/wireless/ath/ath10k/swap.h | 11 ++++++++---
> 4 files changed, 27 insertions(+), 22 deletions(-)
>
> diff --git a/drivers/net/wireless/ath/ath10k/core.h b/drivers/net/wireless/ath/ath10k/core.h
> index 3da18c9..e69e7e7 100644
> --- a/drivers/net/wireless/ath/ath10k/core.h
> +++ b/drivers/net/wireless/ath/ath10k/core.h
> @@ -654,6 +654,8 @@ struct ath10k_fw_file {
>
> const void *codeswap_data;
> size_t codeswap_len;
> + /* FIXME: add a comment */
> + struct ath10k_swap_code_seg_info *firmware_swap_code_seg_info;

Why not just add a comment? Adding FIXMEs makes the patch look incomplete to me.

Thanks,

--
Julian Calaby

Email: [email protected]
Profile: http://www.google.com/profiles/julian.calaby/

2016-08-31 07:20:03

by Kalle Valo

[permalink] [raw]
Subject: Re: [PATCHv3, 1/3] ath10k: move firmware_swap_code_seg_info to ath10k_fw_file

[email protected] wrote:
> From: Tamizh chelvam <[email protected]>
>
> Preparation to make use of firmware_swap_code_seg_info for UTF binary.
>
> Signed-off-by: Tamizh chelvam <[email protected]>

Thanks, 3 patches applied to ath-next branch of ath.git:

5459c5d47608 ath10k: move firmware_swap_code_seg_info to ath10k_fw_file
d912fc094bc4 ath10k: handle testmode events for 10.2 and 10.4 based firmware
ebce1a5e3a0e ath10k: add testmode support for 10.4 firmware

--
Sent by pwcli
https://patchwork.kernel.org/patch/9209331/

2016-08-31 07:04:54

by Kalle Valo

[permalink] [raw]
Subject: Re: [PATCHv3 1/3] ath10k: move firmware_swap_code_seg_info to ath10k_fw_file

Julian Calaby <[email protected]> writes:

> Hi Tamizh,
>
> On Fri, Jul 1, 2016 at 5:06 PM, <[email protected]> wrote:
>> From: Tamizh chelvam <[email protected]>
>>
>> Preparation to make use of firmware_swap_code_seg_info for UTF binary.
>>
>> Signed-off-by: Tamizh chelvam <[email protected]>
>> ---
>> drivers/net/wireless/ath/ath10k/core.c | 6 +++---
>> drivers/net/wireless/ath/ath10k/core.h | 6 ++----
>> drivers/net/wireless/ath/ath10k/swap.c | 26 ++++++++++++++-----------=
-
>> drivers/net/wireless/ath/ath10k/swap.h | 11 ++++++++---
>> 4 files changed, 27 insertions(+), 22 deletions(-)
>>
>> diff --git a/drivers/net/wireless/ath/ath10k/core.h b/drivers/net/wirele=
ss/ath/ath10k/core.h
>> index 3da18c9..e69e7e7 100644
>> --- a/drivers/net/wireless/ath/ath10k/core.h
>> +++ b/drivers/net/wireless/ath/ath10k/core.h
>> @@ -654,6 +654,8 @@ struct ath10k_fw_file {
>>
>> const void *codeswap_data;
>> size_t codeswap_len;
>> + /* FIXME: add a comment */
>> + struct ath10k_swap_code_seg_info *firmware_swap_code_seg_info;
>
> Why not just add a comment? Adding FIXMEs makes the patch look incomplete=
to me.

Actually I'm here to blame, I asked Tamizh to add the fixme so I can add
a proper comment. I did it now:

--- a/drivers/net/wireless/ath/ath10k/core.h
+++ b/drivers/net/wireless/ath/ath10k/core.h
@@ -663,7 +663,14 @@ struct ath10k_fw_file {
=20
const void *codeswap_data;
size_t codeswap_len;
- /* FIXME: add a comment */
+
+ /* The original idea of struct ath10k_fw_file was that it only
+ * contains struct firmware and pointers to various parts (actual
+ * firmware binary, otp, metadata etc) of the file. This seg_info
+ * is actually created separate but as this is used similarly as
+ * the other firmware components it's more convenient to have it
+ * here.
+ */
struct ath10k_swap_code_seg_info *firmware_swap_code_seg_info;
};

--=20
Kalle Valo=