Hi Ryan, On Thu, Nov 12, 2015 at 5:21 AM, Ryan Hsu <ryanhsu@xxxxxxxxxxxxxxxx> wrote: > 'Commit a70587b3389a ("ath10k: configure copy engine 5 for HTT messages")' > Introduces to use the unused CE5 for target to host message. > > For the device like QCA6174, CE5 already assigned for other feature. > So for QCA6174, override the CE5 configuration and use the CE1 instead. > > This patch is based on Rajkumar's earlier patch. > > Fixes: a70587b3389a ("ath10k: configure copy engine 5 for HTT messages") > Signed-off-by: Rajkumar Manoharan <rmanohar@xxxxxxxxxxxxxxxx> > Signed-off-by: Ryan Hsu <ryanhsu@xxxxxxxxxxxxxxxx> > --- > drivers/net/wireless/ath/ath10k/pci.c | 32 +++++++++++++++++++++++++++++--- > 1 file changed, 29 insertions(+), 3 deletions(-) > > diff --git a/drivers/net/wireless/ath/ath10k/pci.c b/drivers/net/wireless/ath/ath10k/pci.c > index 5c91a67..2a48376 100644 > --- a/drivers/net/wireless/ath/ath10k/pci.c > +++ b/drivers/net/wireless/ath/ath10k/pci.c > @@ -113,7 +113,7 @@ static void ath10k_pci_htt_tx_cb(struct ath10k_ce_pipe *ce_state); > static void ath10k_pci_htt_rx_cb(struct ath10k_ce_pipe *ce_state); > static void ath10k_pci_pktlog_rx_cb(struct ath10k_ce_pipe *ce_state); > > -static const struct ce_attr host_ce_config_wlan[] = { > +static struct ce_attr host_ce_config_wlan[] = { > /* CE0: host->target HTC control and raw streams */ > { > .flags = CE_ATTR_FLAGS, > @@ -219,7 +219,7 @@ static const struct ce_attr host_ce_config_wlan[] = { > }; > > /* Target firmware's Copy Engine configuration. */ > -static const struct ce_pipe_config target_ce_config_wlan[] = { > +static struct ce_pipe_config target_ce_config_wlan[] = { > /* CE0: host->target HTC control and raw streams */ > { > .pipenum = __cpu_to_le32(0), > @@ -332,7 +332,7 @@ static const struct ce_pipe_config target_ce_config_wlan[] = { > * This table is derived from the CE_PCI TABLE, above. > * It is passed to the Target at startup for use by firmware. > */ > -static const struct service_to_pipe target_service_to_ce_map_wlan[] = { > +static struct service_to_pipe target_service_to_ce_map_wlan[] = { > { > __cpu_to_le32(ATH10K_HTC_SVC_ID_WMI_DATA_VO), > __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */ > @@ -2038,6 +2038,29 @@ static int ath10k_pci_init_config(struct ath10k *ar) > return 0; > } > > +static void ath10k_pci_override_ce_config(struct ath10k *ar) > +{ > + struct ce_attr *attr; > + struct ce_pipe_config *config; > + > + /* For QCA6174 we're overriding the Copy Engine 5 configuration, > + * since it is currently used for other feature. > + */ > + > + /* Override Host's Copy Engine 5 configuration */ > + attr = &host_ce_config_wlan[5]; > + attr->src_sz_max = 0; > + attr->dest_nentries = 0; > + > + /* Override Target firmware's Copy Engine configuration */ > + config = &target_ce_config_wlan[5]; > + config->pipedir = __cpu_to_le32(PIPEDIR_OUT); > + config->nbytes_max = __cpu_to_le32(2048); > + > + /* Map from service/endpoint to Copy Engine */ > + target_service_to_ce_map_wlan[15].pipenum = __cpu_to_le32(1); > +} > + Stupid question: Why not have two different versions of each struct? One for QCA6174 and one for everyone else, and choose the appropriate one when they're uploaded to the firmware / used? I believe there's a struct full of part specific data, it could potentially go in there. Thanks, -- Julian Calaby Email: julian.calaby@xxxxxxxxx Profile: http://www.google.com/profiles/julian.calaby/ -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html