Message ID | 20200826232044.6799-1-greearb@candelatech.com (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | Kalle Valo |
Headers | show |
Series | ath11k: Support loading ELF board files. | expand |
greearb@candelatech.com writes: > From: Ben Greear <greearb@candelatech.com> > > The QCA6390 board I have, model 8291M-PR comes with an ELF board > file. To get this to at least somewhat work, I renamed bdwlan.e04 > to 'board.bin' and then added this patch to check for .ELF as > starting bytes of the board file. If that is found, use type > ELF. After this the driver loads. > > Signed-off-by: Ben Greear <greearb@candelatech.com> > --- > > This is on top of recent kvallo ath tree. > > drivers/net/wireless/ath/ath11k/qmi.c | 12 +++++++++++- > 1 file changed, 11 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/wireless/ath/ath11k/qmi.c b/drivers/net/wireless/ath/ath11k/qmi.c > index 91134510364c..f87f1d1564f4 100644 > --- a/drivers/net/wireless/ath/ath11k/qmi.c > +++ b/drivers/net/wireless/ath/ath11k/qmi.c > @@ -1992,6 +1992,7 @@ static int ath11k_qmi_load_bdf_qmi(struct ath11k_base *ab) > struct qmi_txn txn = {}; > int ret; > const u8 *temp; > + int bdf_type = ATH11K_QMI_BDF_TYPE_BIN; > > req = kzalloc(sizeof(*req), GFP_KERNEL); > if (!req) > @@ -2008,6 +2009,15 @@ static int ath11k_qmi_load_bdf_qmi(struct ath11k_base *ab) > temp = bd.data; > remaining = bd.len; > > + if (bd.len >= 4) { > + char* edata = (char*)(temp); > + if (edata[1] == 'E' && > + edata[2] == 'L' && > + edata[3] == 'F') { > + bdf_type = ATH11K_QMI_BDF_TYPE_ELF; > + } > + } Thanks, looks good. Expect that the ELF magic check can be simplified to: strncmp(edata, ELFMAG, SELFMAG) But I can send v2, I'll soon send some more QCA6390 patches and I'll include this to the set.
diff --git a/drivers/net/wireless/ath/ath11k/qmi.c b/drivers/net/wireless/ath/ath11k/qmi.c index 91134510364c..f87f1d1564f4 100644 --- a/drivers/net/wireless/ath/ath11k/qmi.c +++ b/drivers/net/wireless/ath/ath11k/qmi.c @@ -1992,6 +1992,7 @@ static int ath11k_qmi_load_bdf_qmi(struct ath11k_base *ab) struct qmi_txn txn = {}; int ret; const u8 *temp; + int bdf_type = ATH11K_QMI_BDF_TYPE_BIN; req = kzalloc(sizeof(*req), GFP_KERNEL); if (!req) @@ -2008,6 +2009,15 @@ static int ath11k_qmi_load_bdf_qmi(struct ath11k_base *ab) temp = bd.data; remaining = bd.len; + if (bd.len >= 4) { + char* edata = (char*)(temp); + if (edata[1] == 'E' && + edata[2] == 'L' && + edata[3] == 'F') { + bdf_type = ATH11K_QMI_BDF_TYPE_ELF; + } + } + while (remaining) { req->valid = 1; req->file_id_valid = 1; @@ -2017,7 +2027,7 @@ static int ath11k_qmi_load_bdf_qmi(struct ath11k_base *ab) req->seg_id_valid = 1; req->data_valid = 1; req->data_len = ATH11K_QMI_MAX_BDF_FILE_NAME_SIZE; - req->bdf_type = ATH11K_QMI_BDF_TYPE_BIN; + req->bdf_type = bdf_type; req->bdf_type_valid = 1; req->end_valid = 1; req->end = 0;