Re: [ath9k-devel] [PATCH] ath9k: add phy.c
On Fri, May 15, 2015 at 4:38 PM, Julian Calaby julian.cal...@gmail.com wrote: Hi Oleksij, On Fri, May 15, 2015 at 10:35 PM, Oleksij Rempel li...@rempel-privat.de wrote: ... and move dup code from ar5008_phy.c and ar9002_phy.c to phy.c A better subject might be: ath9k: consolidate common phy functions phy.c doesn't really mean anything to people outside the developers of this particular driver. Jupp. Is a consolidation also possible/wise/doable also for phy.h? ( I see this snippet in your new phy.c file... ) ... +#include phy.h +#include ar9002_phy.h ... IOW, can ar9002_phy.h move into phy.h? - sed@ - ___ ath9k-devel mailing list ath9k-devel@lists.ath9k.org https://lists.ath9k.org/mailman/listinfo/ath9k-devel
Re: [ath9k-devel] [PATCH] ath9k: add phy.c
Hi Oleksij, On Fri, May 15, 2015 at 10:35 PM, Oleksij Rempel li...@rempel-privat.de wrote: ... and move dup code from ar5008_phy.c and ar9002_phy.c to phy.c A better subject might be: ath9k: consolidate common phy functions phy.c doesn't really mean anything to people outside the developers of this particular driver. Thanks, -- Julian Calaby Email: julian.cal...@gmail.com Profile: http://www.google.com/profiles/julian.calaby/ ___ ath9k-devel mailing list ath9k-devel@lists.ath9k.org https://lists.ath9k.org/mailman/listinfo/ath9k-devel
Re: [ath9k-devel] [PATCH] ath9k: add phy.c
Am 16.05.2015 um 07:36 schrieb Joe Perches: On Sat, 2015-05-16 at 07:27 +0200, Oleksij Rempel wrote: Am 15.05.2015 um 20:35 schrieb Joe Perches: On Fri, 2015-05-15 at 14:35 +0200, Oleksij Rempel wrote: ... and move dup code from ar5008_phy.c and ar9002_phy.c to phy.c [] diff --git a/drivers/net/wireless/ath/ath9k/phy.c b/drivers/net/wireless/ath/ath9k/phy.c +void phy_hw_spur_mitigate(struct ath_hw *ah, +struct ath9k_channel *chan, int bin) +{ [] + static int inc[4] = { 0, 100, 0, 0 }; static const This is cleanup patch, no fixes optimisations or regressions should be introduced. Hello Oleksij. One of the old compilation units (ar9002_phy.c) had const on all those arrays, the other did not. ok, thanks. changed to const version. const should be used here. If you see some problems in this code, you are welcome to provide a patch on top of this one :) I think you should take comments on the patches you submit. What do you mean? -- Regards, Oleksij signature.asc Description: OpenPGP digital signature ___ ath9k-devel mailing list ath9k-devel@lists.ath9k.org https://lists.ath9k.org/mailman/listinfo/ath9k-devel
Re: [ath9k-devel] [PATCH] ath9k: add phy.c
On Sat, 2015-05-16 at 07:27 +0200, Oleksij Rempel wrote: Am 15.05.2015 um 20:35 schrieb Joe Perches: On Fri, 2015-05-15 at 14:35 +0200, Oleksij Rempel wrote: ... and move dup code from ar5008_phy.c and ar9002_phy.c to phy.c [] diff --git a/drivers/net/wireless/ath/ath9k/phy.c b/drivers/net/wireless/ath/ath9k/phy.c +void phy_hw_spur_mitigate(struct ath_hw *ah, +struct ath9k_channel *chan, int bin) +{ [] + static int inc[4] = { 0, 100, 0, 0 }; static const This is cleanup patch, no fixes optimisations or regressions should be introduced. Hello Oleksij. One of the old compilation units (ar9002_phy.c) had const on all those arrays, the other did not. const should be used here. If you see some problems in this code, you are welcome to provide a patch on top of this one :) I think you should take comments on the patches you submit. ___ ath9k-devel mailing list ath9k-devel@lists.ath9k.org https://lists.ath9k.org/mailman/listinfo/ath9k-devel
Re: [ath9k-devel] [PATCH] ath9k: add phy.c
Am 15.05.2015 um 20:35 schrieb Joe Perches: On Fri, 2015-05-15 at 14:35 +0200, Oleksij Rempel wrote: ... and move dup code from ar5008_phy.c and ar9002_phy.c to phy.c [] diff --git a/drivers/net/wireless/ath/ath9k/phy.c b/drivers/net/wireless/ath/ath9k/phy.c +void phy_hw_spur_mitigate(struct ath_hw *ah, + struct ath9k_channel *chan, int bin) +{ +int cur_bin; +int upper, lower, cur_vit_mask; +int i; +int8_t mask_m[123]; +int8_t mask_p[123]; Looking at this code, I'm not sure if mask_m and mask_p are always completely initialized by the loop below. Perhaps use {} on declaration. +int8_t mask_amt; These int8_t could be s8 +int tmp_mask; +static int pilot_mask_reg[4] = { +AR_PHY_TIMING7, AR_PHY_TIMING8, +AR_PHY_PILOT_MASK_01_30, AR_PHY_PILOT_MASK_31_60 +}; +static int chan_mask_reg[4] = { +AR_PHY_TIMING9, AR_PHY_TIMING10, +AR_PHY_CHANNEL_MASK_01_30, AR_PHY_CHANNEL_MASK_31_60 +}; +static int inc[4] = { 0, 100, 0, 0 }; static const +cur_vit_mask = 6100; +upper = bin + 120; +lower = bin - 120; + Is this loop guaranteed to always initialize all the mask_p and mask_m indexes used in the or statements below it? The 123 for -61 and 0 and +61 array indexes is a bit obscure. +for (i = 0; i 123; i++) { +if ((cur_vit_mask lower) (cur_vit_mask upper)) { +/* workaround for gcc bug #37014 */ +volatile int tmp_v = abs(cur_vit_mask - bin); + +if (tmp_v 75) +mask_amt = 1; +else +mask_amt = 0; +if (cur_vit_mask 0) +mask_m[abs(cur_vit_mask / 100)] = mask_amt; +else +mask_p[cur_vit_mask / 100] = mask_amt; +} +cur_vit_mask -= 100; +} + +tmp_mask = (mask_m[46] 30) | (mask_m[47] 28) +| (mask_m[48] 26) | (mask_m[49] 24) +| (mask_m[50] 22) | (mask_m[51] 20) +| (mask_m[52] 18) | (mask_m[53] 16) +| (mask_m[54] 14) | (mask_m[55] 12) +| (mask_m[56] 10) | (mask_m[57] 8) +| (mask_m[58] 6) | (mask_m[59] 4) +| (mask_m[60] 2) | (mask_m[61] 0); +REG_WRITE(ah, AR_PHY_BIN_MASK_1, tmp_mask); +REG_WRITE(ah, AR_PHY_VIT_MASK2_M_46_61, tmp_mask); + +tmp_mask = (mask_m[31] 28) +| (mask_m[32] 26) | (mask_m[33] 24) +| (mask_m[34] 22) | (mask_m[35] 20) +| (mask_m[36] 18) | (mask_m[37] 16) +| (mask_m[48] 14) | (mask_m[39] 12) +| (mask_m[40] 10) | (mask_m[41] 8) +| (mask_m[42] 6) | (mask_m[43] 4) +| (mask_m[44] 2) | (mask_m[45] 0); +REG_WRITE(ah, AR_PHY_BIN_MASK_2, tmp_mask); +REG_WRITE(ah, AR_PHY_MASK2_M_31_45, tmp_mask); + +tmp_mask = (mask_m[16] 30) | (mask_m[16] 28) +| (mask_m[18] 26) | (mask_m[18] 24) +| (mask_m[20] 22) | (mask_m[20] 20) +| (mask_m[22] 18) | (mask_m[22] 16) +| (mask_m[24] 14) | (mask_m[24] 12) +| (mask_m[25] 10) | (mask_m[26] 8) +| (mask_m[27] 6) | (mask_m[28] 4) +| (mask_m[29] 2) | (mask_m[30] 0); +REG_WRITE(ah, AR_PHY_BIN_MASK_3, tmp_mask); +REG_WRITE(ah, AR_PHY_MASK2_M_16_30, tmp_mask); + +tmp_mask = (mask_m[0] 30) | (mask_m[1] 28) +| (mask_m[2] 26) | (mask_m[3] 24) +| (mask_m[4] 22) | (mask_m[5] 20) +| (mask_m[6] 18) | (mask_m[7] 16) +| (mask_m[8] 14) | (mask_m[9] 12) +| (mask_m[10] 10) | (mask_m[11] 8) +| (mask_m[12] 6) | (mask_m[13] 4) +| (mask_m[14] 2) | (mask_m[15] 0); +REG_WRITE(ah, AR_PHY_MASK_CTL, tmp_mask); +REG_WRITE(ah, AR_PHY_MASK2_M_00_15, tmp_mask); + +tmp_mask = (mask_p[15] 28) +| (mask_p[14] 26) | (mask_p[13] 24) +| (mask_p[12] 22) | (mask_p[11] 20) +| (mask_p[10] 18) | (mask_p[9] 16) +| (mask_p[8] 14) | (mask_p[7] 12) +| (mask_p[6] 10) | (mask_p[5] 8) +| (mask_p[4] 6) | (mask_p[3] 4) +| (mask_p[2] 2) | (mask_p[1] 0); +REG_WRITE(ah, AR_PHY_BIN_MASK2_1, tmp_mask); +REG_WRITE(ah, AR_PHY_MASK2_P_15_01, tmp_mask); + +tmp_mask = (mask_p[30] 28) +| (mask_p[29] 26) | (mask_p[28] 24) +| (mask_p[27] 22) | (mask_p[26] 20) +| (mask_p[25] 18) | (mask_p[24] 16) +| (mask_p[23] 14) | (mask_p[22] 12) +| (mask_p[21] 10) | (mask_p[20] 8) +| (mask_p[19] 6) | (mask_p[18] 4) +| (mask_p[17] 2) | (mask_p[16] 0); +REG_WRITE(ah, AR_PHY_BIN_MASK2_2,
Re: [ath9k-devel] [PATCH] ath9k: add phy.c
Am 15.05.2015 um 21:34 schrieb Felix Fietkau: On 2015-05-15 14:35, Oleksij Rempel wrote: ... and move dup code from ar5008_phy.c and ar9002_phy.c to phy.c Signed-off-by: Oleksij Rempel li...@rempel-privat.de We already have base functionality for AR5008-AR9002 provided in some ar5008_phy.c, and ar5008_hw_attach_phy_ops is called for those chipsets as well. Please keep the de-duplicated code there instead of adding a new phy.c, because AR9003+ uses a completely different codepath. - Felix ok, thanks. Currently i celled this function phy_hw_spur_mitigate(), is it ok or there is some better name for this code? -- Regards, Oleksij ___ ath9k-devel mailing list ath9k-devel@lists.ath9k.org https://lists.ath9k.org/mailman/listinfo/ath9k-devel
Re: [ath9k-devel] [PATCH] ath9k: add phy.c
On 2015-05-16 07:24, Oleksij Rempel wrote: Am 15.05.2015 um 21:34 schrieb Felix Fietkau: On 2015-05-15 14:35, Oleksij Rempel wrote: ... and move dup code from ar5008_phy.c and ar9002_phy.c to phy.c Signed-off-by: Oleksij Rempel li...@rempel-privat.de We already have base functionality for AR5008-AR9002 provided in some ar5008_phy.c, and ar5008_hw_attach_phy_ops is called for those chipsets as well. Please keep the de-duplicated code there instead of adding a new phy.c, because AR9003+ uses a completely different codepath. - Felix ok, thanks. Currently i celled this function phy_hw_spur_mitigate(), is it ok or there is some better name for this code? Just use the ar5008 prefix like in the other functions. - Felix ___ ath9k-devel mailing list ath9k-devel@lists.ath9k.org https://lists.ath9k.org/mailman/listinfo/ath9k-devel
Re: [ath9k-devel] [PATCH] ath9k: add phy.c
On 2015-05-15 14:35, Oleksij Rempel wrote: ... and move dup code from ar5008_phy.c and ar9002_phy.c to phy.c Signed-off-by: Oleksij Rempel li...@rempel-privat.de We already have base functionality for AR5008-AR9002 provided in some ar5008_phy.c, and ar5008_hw_attach_phy_ops is called for those chipsets as well. Please keep the de-duplicated code there instead of adding a new phy.c, because AR9003+ uses a completely different codepath. - Felix ___ ath9k-devel mailing list ath9k-devel@lists.ath9k.org https://lists.ath9k.org/mailman/listinfo/ath9k-devel
Re: [ath9k-devel] [PATCH] ath9k: add phy.c
On Fri, 2015-05-15 at 14:35 +0200, Oleksij Rempel wrote: ... and move dup code from ar5008_phy.c and ar9002_phy.c to phy.c [] diff --git a/drivers/net/wireless/ath/ath9k/phy.c b/drivers/net/wireless/ath/ath9k/phy.c +void phy_hw_spur_mitigate(struct ath_hw *ah, + struct ath9k_channel *chan, int bin) +{ + int cur_bin; + int upper, lower, cur_vit_mask; + int i; + int8_t mask_m[123]; + int8_t mask_p[123]; Looking at this code, I'm not sure if mask_m and mask_p are always completely initialized by the loop below. Perhaps use {} on declaration. + int8_t mask_amt; These int8_t could be s8 + int tmp_mask; + static int pilot_mask_reg[4] = { + AR_PHY_TIMING7, AR_PHY_TIMING8, + AR_PHY_PILOT_MASK_01_30, AR_PHY_PILOT_MASK_31_60 + }; + static int chan_mask_reg[4] = { + AR_PHY_TIMING9, AR_PHY_TIMING10, + AR_PHY_CHANNEL_MASK_01_30, AR_PHY_CHANNEL_MASK_31_60 + }; + static int inc[4] = { 0, 100, 0, 0 }; static const + cur_vit_mask = 6100; + upper = bin + 120; + lower = bin - 120; + Is this loop guaranteed to always initialize all the mask_p and mask_m indexes used in the or statements below it? The 123 for -61 and 0 and +61 array indexes is a bit obscure. + for (i = 0; i 123; i++) { + if ((cur_vit_mask lower) (cur_vit_mask upper)) { + /* workaround for gcc bug #37014 */ + volatile int tmp_v = abs(cur_vit_mask - bin); + + if (tmp_v 75) + mask_amt = 1; + else + mask_amt = 0; + if (cur_vit_mask 0) + mask_m[abs(cur_vit_mask / 100)] = mask_amt; + else + mask_p[cur_vit_mask / 100] = mask_amt; + } + cur_vit_mask -= 100; + } + + tmp_mask = (mask_m[46] 30) | (mask_m[47] 28) + | (mask_m[48] 26) | (mask_m[49] 24) + | (mask_m[50] 22) | (mask_m[51] 20) + | (mask_m[52] 18) | (mask_m[53] 16) + | (mask_m[54] 14) | (mask_m[55] 12) + | (mask_m[56] 10) | (mask_m[57] 8) + | (mask_m[58] 6) | (mask_m[59] 4) + | (mask_m[60] 2) | (mask_m[61] 0); + REG_WRITE(ah, AR_PHY_BIN_MASK_1, tmp_mask); + REG_WRITE(ah, AR_PHY_VIT_MASK2_M_46_61, tmp_mask); + + tmp_mask = (mask_m[31] 28) + | (mask_m[32] 26) | (mask_m[33] 24) + | (mask_m[34] 22) | (mask_m[35] 20) + | (mask_m[36] 18) | (mask_m[37] 16) + | (mask_m[48] 14) | (mask_m[39] 12) + | (mask_m[40] 10) | (mask_m[41] 8) + | (mask_m[42] 6) | (mask_m[43] 4) + | (mask_m[44] 2) | (mask_m[45] 0); + REG_WRITE(ah, AR_PHY_BIN_MASK_2, tmp_mask); + REG_WRITE(ah, AR_PHY_MASK2_M_31_45, tmp_mask); + + tmp_mask = (mask_m[16] 30) | (mask_m[16] 28) + | (mask_m[18] 26) | (mask_m[18] 24) + | (mask_m[20] 22) | (mask_m[20] 20) + | (mask_m[22] 18) | (mask_m[22] 16) + | (mask_m[24] 14) | (mask_m[24] 12) + | (mask_m[25] 10) | (mask_m[26] 8) + | (mask_m[27] 6) | (mask_m[28] 4) + | (mask_m[29] 2) | (mask_m[30] 0); + REG_WRITE(ah, AR_PHY_BIN_MASK_3, tmp_mask); + REG_WRITE(ah, AR_PHY_MASK2_M_16_30, tmp_mask); + + tmp_mask = (mask_m[0] 30) | (mask_m[1] 28) + | (mask_m[2] 26) | (mask_m[3] 24) + | (mask_m[4] 22) | (mask_m[5] 20) + | (mask_m[6] 18) | (mask_m[7] 16) + | (mask_m[8] 14) | (mask_m[9] 12) + | (mask_m[10] 10) | (mask_m[11] 8) + | (mask_m[12] 6) | (mask_m[13] 4) + | (mask_m[14] 2) | (mask_m[15] 0); + REG_WRITE(ah, AR_PHY_MASK_CTL, tmp_mask); + REG_WRITE(ah, AR_PHY_MASK2_M_00_15, tmp_mask); + + tmp_mask = (mask_p[15] 28) + | (mask_p[14] 26) | (mask_p[13] 24) + | (mask_p[12] 22) | (mask_p[11] 20) + | (mask_p[10] 18) | (mask_p[9] 16) + | (mask_p[8] 14) | (mask_p[7] 12) + | (mask_p[6] 10) | (mask_p[5] 8) + | (mask_p[4] 6) | (mask_p[3] 4) + | (mask_p[2] 2) | (mask_p[1] 0); + REG_WRITE(ah, AR_PHY_BIN_MASK2_1, tmp_mask); + REG_WRITE(ah, AR_PHY_MASK2_P_15_01, tmp_mask); + + tmp_mask = (mask_p[30] 28) + | (mask_p[29] 26) | (mask_p[28] 24) + | (mask_p[27] 22) | (mask_p[26] 20) + | (mask_p[25] 18) | (mask_p[24] 16) + | (mask_p[23] 14) | (mask_p[22] 12) + | (mask_p[21] 10) | (mask_p[20] 8) + | (mask_p[19] 6) | (mask_p[18] 4) + | (mask_p[17] 2) | (mask_p[16] 0); +