On Tue, 2019-08-20 at 18:47 +0300, Kalle Valo wrote:
> 
> +static const struct service_to_pipe target_service_to_ce_map_wlan[] = {
> +     {
> +             __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VO),
> +             __cpu_to_le32(PIPEDIR_OUT),     /* out = UL = host -> target */
> +             __cpu_to_le32(3),
> +     },

this might be nicer as C99 initializers as well? It's a struct of some
sort, after all.

> +     { /* must be last */
> +             __cpu_to_le32(0),
> +             __cpu_to_le32(0),
> +             __cpu_to_le32(0),
> +     },

You don't need endian conversion for 0, even sparse will not complain,
but I'd argue it should anyway be something like

        { /* terminator entry */ }

since that's why it's there I guess?

> +#define ATH11K_TX_RING_MASK_3 0x0

You have a LOT of masks here that are 0, that seems odd?

> +/* enum ext_irq_num - irq nubers that can be used by external modules

typo ("numbers")

> +inline u32 ath11k_ahb_read32(struct ath11k_base *ab, u32 offset)
> +{
> +     return ioread32(ab->mem + offset);
> +}
> +
> +inline void ath11k_ahb_write32(struct ath11k_base *ab, u32 offset, u32 value)
> +{
> +     iowrite32(value, ab->mem + offset);
> +}

Just "inline" doesn't seem to make that much sense? If it's only used
here then I guess it should be static, otherwise not inline? Or maybe
you want it to be inlined *in this file* but available out-of-line
otherwise? I'm not sure that actually is guaranteed to work right in C?

> +             val = ath11k_ahb_read32(ab, CE_HOST_IE_ADDRESS);
> +             val |= BIT(ce_id);
> +             ath11k_ahb_write32(ab, CE_HOST_IE_ADDRESS, val);

You could perhaps benefit from ath11k_ahb_setbit32() or something like
that, this repeats a few times?

> +     if (__le32_to_cpu(ce_config->pipedir) & PIPEDIR_OUT) {
> +             val = ath11k_ahb_read32(ab, CE_HOST_IE_ADDRESS);
> +             val &= ~BIT(ce_id);
> +             ath11k_ahb_write32(ab, CE_HOST_IE_ADDRESS, val);

and clearbit32() maybe. Dunno, I saw only 3 instances of each here I
guess, but still, feels repetitive.

> +int ath11k_ahb_start(struct ath11k_base *ab)
> +{
> +     ath11k_ahb_ce_irqs_enable(ab);
> +     ath11k_ce_rx_post_buf(ab);
> +
> +     /* Bring up other components as appropriate */

Hmm. What would be appropriate? It's not really doing anything else?

> +void ath11k_ahb_stop(struct ath11k_base *ab)
> +{
> +     if (!test_bit(ATH11K_FLAG_CRASH_FLUSH, &ab->dev_flags))
> +             ath11k_ahb_ce_irqs_disable(ab);
> +     ath11k_ahb_sync_ce_irqs(ab);
> +     ath11k_ahb_kill_tasklets(ab);
> +     del_timer_sync(&ab->rx_replenish_retry);
> +     ath11k_ce_cleanup_pipes(ab);
> +     /* Shutdown other components as appropriate */

likewise, it's not doing anything else?

johannes

Reply via email to