* RE: [PATCH net-next 1/3] net: ethernet: mediatek: get the chip id by ETHDMASYS registers
@ 2016-10-04 12:12 Nelson Chang
2016-10-04 12:14 ` John Crispin
0 siblings, 1 reply; 4+ messages in thread
From: Nelson Chang @ 2016-10-04 12:12 UTC (permalink / raw)
To: john, davem; +Cc: nbd, netdev, linux-mediatek, nelsonch.tw
Hi John,
Thanks for your review!
I will modify that as below. Would you think it is okay?
static int mtk_get_chip_id(struct mtk_eth *eth, u32 *chip_id)
{
u32 val[2], id[4];
regmap_read(eth->ethsys, ETHSYS_CHIPID0_3, &val[0]);
regmap_read(eth->ethsys, ETHSYS_CHIPID4_7, &val[1]);
id[3] = ((val[0] >> 16) & 0xff) - '0';
id[2] = ((val[0] >> 24) & 0xff) - '0';
id[1] = (val[1] & 0xff) - '0';
id[0] = ((val[1] >> 8) & 0xff) - '0';
*chip_id = (id[3] * 1000) + (id[2] * 100) +
(id[1] * 10) + id[0];
if (!(*chip_id)) {
dev_err(eth->dev, "failed to get chip id\n");
return -ENODEV;
}
dev_info(eth->dev, "chip id = %d\n", *chip_id);
return 0;
}
...
static int mtk_probe(struct platform_device *pdev)
{
...
err = mtk_get_chip_id(eth, ð->chip_id);
if (err)
return err;
...
}
Nelson
-----Original Message-----
From: John Crispin [mailto:john@phrozen.org]
Sent: Tuesday, October 04, 2016 3:17 AM
To: Nelson Chang (張家祥); davem@davemloft.net
Cc: nbd@openwrt.org; netdev@vger.kernel.org;
linux-mediatek@lists.infradead.org; nelsonch.tw@gmail.com
Subject: Re: [PATCH net-next 1/3] net: ethernet: mediatek: get the chip
id by ETHDMASYS registers
Hi Nelson,
comments inline
On 03/10/2016 09:18, Nelson Chang wrote:
> The driver gets the chip id by ETHSYS_CHIPID0_3/ETHSYS_CHIPID4_7
> registers in mtk_probe().
>
> Signed-off-by: Nelson Chang <nelson.chang@mediatek.com>
> ---
> drivers/net/ethernet/mediatek/mtk_eth_soc.c | 27
> +++++++++++++++++++++++++++
> drivers/net/ethernet/mediatek/mtk_eth_soc.h | 5 +++++
> 2 files changed, 32 insertions(+)
>
> diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
> b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
> index ad4ab97..a3e4ae6 100644
> --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
> +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
> @@ -2323,6 +2323,27 @@ free_netdev:
> return err;
> }
>
> +static u32 mtk_get_chip_id(struct mtk_eth *eth) {
> + u32 val[2], id[4];
> + u32 chip_id;
> +
> + regmap_read(eth->ethsys, ETHSYS_CHIPID0_3, &val[0]);
> + regmap_read(eth->ethsys, ETHSYS_CHIPID4_7, &val[1]);
> +
> + id[3] = ((val[0] >> 16) & 0xff) - '0';
> + id[2] = ((val[0] >> 24) & 0xff) - '0';
> + id[1] = (val[1] & 0xff) - '0';
> + id[0] = ((val[1] >> 8) & 0xff) - '0';
> +
> + chip_id = (id[3] * 1000) + (id[2] * 100) +
> + (id[1] * 10) + id[0];
> +
> + dev_info(eth->dev, "chip id = %d\n", chip_id);
the chip id is printed here
> + return chip_id;
> +}
> +
> static int mtk_probe(struct platform_device *pdev) {
> struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM,
> 0); @@ -2388,6 +2409,12 @@ static int mtk_probe(struct platform_device
*pdev)
> if (err)
> return err;
>
> + eth->chip_id = mtk_get_chip_id(eth);
> + if (!eth->chip_id) {
> + dev_err(&pdev->dev, "failed to get chip id\n");
> + return -ENODEV;
> + }
> +
and the error check happens here. maybe you could move the dev_err to
the above function.
John
> for_each_child_of_node(pdev->dev.of_node, mac_np) {
> if (!of_device_is_compatible(mac_np,
> "mediatek,eth-mac"))
> diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
> b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
> index 3003195..a5b422b 100644
> --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
> +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
> @@ -342,6 +342,10 @@
> #define GPIO_BIAS_CTRL 0xed0
> #define GPIO_DRV_SEL10 0xf00
>
> +/* ethernet subsystem chip id register */
> +#define ETHSYS_CHIPID0_3 0x0
> +#define ETHSYS_CHIPID4_7 0x4
> +
> /* ethernet subsystem config register */
> #define ETHSYS_SYSCFG0 0x14
> #define SYSCFG0_GE_MASK 0x3
> @@ -534,6 +538,7 @@ struct mtk_eth {
> unsigned long sysclk;
> struct regmap *ethsys;
> struct regmap *pctl;
> + u32 chip_id;
> bool hwlro;
> atomic_t dma_refcnt;
> struct mtk_tx_ring tx_ring;
>
^ permalink raw reply [flat|nested] 4+ messages in thread* Re: [PATCH net-next 1/3] net: ethernet: mediatek: get the chip id by ETHDMASYS registers
2016-10-04 12:12 [PATCH net-next 1/3] net: ethernet: mediatek: get the chip id by ETHDMASYS registers Nelson Chang
@ 2016-10-04 12:14 ` John Crispin
0 siblings, 0 replies; 4+ messages in thread
From: John Crispin @ 2016-10-04 12:14 UTC (permalink / raw)
To: Nelson Chang, davem; +Cc: nbd, netdev, linux-mediatek, nelsonch.tw
On 04/10/2016 14:12, Nelson Chang wrote:
> Hi John,
>
> Thanks for your review!
> I will modify that as below. Would you think it is okay?
>
> static int mtk_get_chip_id(struct mtk_eth *eth, u32 *chip_id)
> {
> u32 val[2], id[4];
>
> regmap_read(eth->ethsys, ETHSYS_CHIPID0_3, &val[0]);
> regmap_read(eth->ethsys, ETHSYS_CHIPID4_7, &val[1]);
>
> id[3] = ((val[0] >> 16) & 0xff) - '0';
> id[2] = ((val[0] >> 24) & 0xff) - '0';
> id[1] = (val[1] & 0xff) - '0';
> id[0] = ((val[1] >> 8) & 0xff) - '0';
>
> *chip_id = (id[3] * 1000) + (id[2] * 100) +
> (id[1] * 10) + id[0];
>
> if (!(*chip_id)) {
> dev_err(eth->dev, "failed to get chip id\n");
> return -ENODEV;
> }
>
> dev_info(eth->dev, "chip id = %d\n", *chip_id);
>
> return 0;
> }
> ...
> static int mtk_probe(struct platform_device *pdev)
> {
> ...
> err = mtk_get_chip_id(eth, ð->chip_id);
> if (err)
> return err;
> ...
> }
>
>
> Nelson
Hi Nelson,
I think that looks nicer, thanks !
John
>
> -----Original Message-----
> From: John Crispin [mailto:john@phrozen.org]
> Sent: Tuesday, October 04, 2016 3:17 AM
> To: Nelson Chang (張家祥); davem@davemloft.net
> Cc: nbd@openwrt.org; netdev@vger.kernel.org;
> linux-mediatek@lists.infradead.org; nelsonch.tw@gmail.com
> Subject: Re: [PATCH net-next 1/3] net: ethernet: mediatek: get the chip
> id by ETHDMASYS registers
>
> Hi Nelson,
>
> comments inline
>
> On 03/10/2016 09:18, Nelson Chang wrote:
>> The driver gets the chip id by ETHSYS_CHIPID0_3/ETHSYS_CHIPID4_7
>> registers in mtk_probe().
>>
>> Signed-off-by: Nelson Chang <nelson.chang@mediatek.com>
>> ---
>> drivers/net/ethernet/mediatek/mtk_eth_soc.c | 27
>> +++++++++++++++++++++++++++
>> drivers/net/ethernet/mediatek/mtk_eth_soc.h | 5 +++++
>> 2 files changed, 32 insertions(+)
>>
>> diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
>> b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
>> index ad4ab97..a3e4ae6 100644
>> --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
>> +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
>> @@ -2323,6 +2323,27 @@ free_netdev:
>> return err;
>> }
>>
>> +static u32 mtk_get_chip_id(struct mtk_eth *eth) {
>> + u32 val[2], id[4];
>> + u32 chip_id;
>> +
>> + regmap_read(eth->ethsys, ETHSYS_CHIPID0_3, &val[0]);
>> + regmap_read(eth->ethsys, ETHSYS_CHIPID4_7, &val[1]);
>> +
>> + id[3] = ((val[0] >> 16) & 0xff) - '0';
>> + id[2] = ((val[0] >> 24) & 0xff) - '0';
>> + id[1] = (val[1] & 0xff) - '0';
>> + id[0] = ((val[1] >> 8) & 0xff) - '0';
>> +
>> + chip_id = (id[3] * 1000) + (id[2] * 100) +
>> + (id[1] * 10) + id[0];
>> +
>> + dev_info(eth->dev, "chip id = %d\n", chip_id);
>
> the chip id is printed here
>
>> + return chip_id;
>> +}
>> +
>> static int mtk_probe(struct platform_device *pdev) {
>> struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM,
>> 0); @@ -2388,6 +2409,12 @@ static int mtk_probe(struct platform_device
> *pdev)
>> if (err)
>> return err;
>>
>> + eth->chip_id = mtk_get_chip_id(eth);
>> + if (!eth->chip_id) {
>> + dev_err(&pdev->dev, "failed to get chip id\n");
>> + return -ENODEV;
>> + }
>> +
>
> and the error check happens here. maybe you could move the dev_err to
> the above function.
>
> John
>
>> for_each_child_of_node(pdev->dev.of_node, mac_np) {
>> if (!of_device_is_compatible(mac_np,
>> "mediatek,eth-mac"))
>> diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
>> b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
>> index 3003195..a5b422b 100644
>> --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
>> +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
>> @@ -342,6 +342,10 @@
>> #define GPIO_BIAS_CTRL 0xed0
>> #define GPIO_DRV_SEL10 0xf00
>>
>> +/* ethernet subsystem chip id register */
>> +#define ETHSYS_CHIPID0_3 0x0
>> +#define ETHSYS_CHIPID4_7 0x4
>> +
>> /* ethernet subsystem config register */
>> #define ETHSYS_SYSCFG0 0x14
>> #define SYSCFG0_GE_MASK 0x3
>> @@ -534,6 +538,7 @@ struct mtk_eth {
>> unsigned long sysclk;
>> struct regmap *ethsys;
>> struct regmap *pctl;
>> + u32 chip_id;
>> bool hwlro;
>> atomic_t dma_refcnt;
>> struct mtk_tx_ring tx_ring;
>>
>
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH net-next 0/3] net: ethernet: mediatek: check the hw lro capability by the chip id instead of the dtsi
@ 2016-10-03 7:18 Nelson Chang
2016-10-03 7:18 ` [PATCH net-next 1/3] net: ethernet: mediatek: get the chip id by ETHDMASYS registers Nelson Chang
0 siblings, 1 reply; 4+ messages in thread
From: Nelson Chang @ 2016-10-03 7:18 UTC (permalink / raw)
To: john, davem; +Cc: nbd, netdev, linux-mediatek, nelsonch.tw, Nelson Chang
The series modify to check if hw lro is supported by the chip id.
Because hw lro started to be supported from MT7623, the proper way to check if
the feature is capable is to judge by the chip id instead of by the dtsi.
Nelson Chang (3):
net: ethernet: mediatek: get the chip id by ETHDMASYS registers
net: ethernet: mediatek: get hw lro capability by the chip id instead
of by the dtsi
net: ethernet: mediatek: remove hwlro property in the device tree
.../devicetree/bindings/net/mediatek-net.txt | 2 --
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 39 ++++++++++++++++++++--
drivers/net/ethernet/mediatek/mtk_eth_soc.h | 6 ++++
3 files changed, 43 insertions(+), 4 deletions(-)
--
1.9.1
^ permalink raw reply [flat|nested] 4+ messages in thread* [PATCH net-next 1/3] net: ethernet: mediatek: get the chip id by ETHDMASYS registers
2016-10-03 7:18 [PATCH net-next 0/3] net: ethernet: mediatek: check the hw lro capability by the chip id instead of the dtsi Nelson Chang
@ 2016-10-03 7:18 ` Nelson Chang
2016-10-03 19:17 ` John Crispin
0 siblings, 1 reply; 4+ messages in thread
From: Nelson Chang @ 2016-10-03 7:18 UTC (permalink / raw)
To: john, davem; +Cc: nbd, netdev, linux-mediatek, nelsonch.tw, Nelson Chang
The driver gets the chip id by ETHSYS_CHIPID0_3/ETHSYS_CHIPID4_7 registers
in mtk_probe().
Signed-off-by: Nelson Chang <nelson.chang@mediatek.com>
---
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 27 +++++++++++++++++++++++++++
drivers/net/ethernet/mediatek/mtk_eth_soc.h | 5 +++++
2 files changed, 32 insertions(+)
diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
index ad4ab97..a3e4ae6 100644
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -2323,6 +2323,27 @@ free_netdev:
return err;
}
+static u32 mtk_get_chip_id(struct mtk_eth *eth)
+{
+ u32 val[2], id[4];
+ u32 chip_id;
+
+ regmap_read(eth->ethsys, ETHSYS_CHIPID0_3, &val[0]);
+ regmap_read(eth->ethsys, ETHSYS_CHIPID4_7, &val[1]);
+
+ id[3] = ((val[0] >> 16) & 0xff) - '0';
+ id[2] = ((val[0] >> 24) & 0xff) - '0';
+ id[1] = (val[1] & 0xff) - '0';
+ id[0] = ((val[1] >> 8) & 0xff) - '0';
+
+ chip_id = (id[3] * 1000) + (id[2] * 100) +
+ (id[1] * 10) + id[0];
+
+ dev_info(eth->dev, "chip id = %d\n", chip_id);
+
+ return chip_id;
+}
+
static int mtk_probe(struct platform_device *pdev)
{
struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
@@ -2388,6 +2409,12 @@ static int mtk_probe(struct platform_device *pdev)
if (err)
return err;
+ eth->chip_id = mtk_get_chip_id(eth);
+ if (!eth->chip_id) {
+ dev_err(&pdev->dev, "failed to get chip id\n");
+ return -ENODEV;
+ }
+
for_each_child_of_node(pdev->dev.of_node, mac_np) {
if (!of_device_is_compatible(mac_np,
"mediatek,eth-mac"))
diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.h b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
index 3003195..a5b422b 100644
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
@@ -342,6 +342,10 @@
#define GPIO_BIAS_CTRL 0xed0
#define GPIO_DRV_SEL10 0xf00
+/* ethernet subsystem chip id register */
+#define ETHSYS_CHIPID0_3 0x0
+#define ETHSYS_CHIPID4_7 0x4
+
/* ethernet subsystem config register */
#define ETHSYS_SYSCFG0 0x14
#define SYSCFG0_GE_MASK 0x3
@@ -534,6 +538,7 @@ struct mtk_eth {
unsigned long sysclk;
struct regmap *ethsys;
struct regmap *pctl;
+ u32 chip_id;
bool hwlro;
atomic_t dma_refcnt;
struct mtk_tx_ring tx_ring;
--
1.9.1
^ permalink raw reply related [flat|nested] 4+ messages in thread* Re: [PATCH net-next 1/3] net: ethernet: mediatek: get the chip id by ETHDMASYS registers
2016-10-03 7:18 ` [PATCH net-next 1/3] net: ethernet: mediatek: get the chip id by ETHDMASYS registers Nelson Chang
@ 2016-10-03 19:17 ` John Crispin
0 siblings, 0 replies; 4+ messages in thread
From: John Crispin @ 2016-10-03 19:17 UTC (permalink / raw)
To: Nelson Chang, davem; +Cc: nbd, netdev, linux-mediatek, nelsonch.tw
Hi Nelson,
comments inline
On 03/10/2016 09:18, Nelson Chang wrote:
> The driver gets the chip id by ETHSYS_CHIPID0_3/ETHSYS_CHIPID4_7 registers
> in mtk_probe().
>
> Signed-off-by: Nelson Chang <nelson.chang@mediatek.com>
> ---
> drivers/net/ethernet/mediatek/mtk_eth_soc.c | 27 +++++++++++++++++++++++++++
> drivers/net/ethernet/mediatek/mtk_eth_soc.h | 5 +++++
> 2 files changed, 32 insertions(+)
>
> diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
> index ad4ab97..a3e4ae6 100644
> --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
> +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
> @@ -2323,6 +2323,27 @@ free_netdev:
> return err;
> }
>
> +static u32 mtk_get_chip_id(struct mtk_eth *eth)
> +{
> + u32 val[2], id[4];
> + u32 chip_id;
> +
> + regmap_read(eth->ethsys, ETHSYS_CHIPID0_3, &val[0]);
> + regmap_read(eth->ethsys, ETHSYS_CHIPID4_7, &val[1]);
> +
> + id[3] = ((val[0] >> 16) & 0xff) - '0';
> + id[2] = ((val[0] >> 24) & 0xff) - '0';
> + id[1] = (val[1] & 0xff) - '0';
> + id[0] = ((val[1] >> 8) & 0xff) - '0';
> +
> + chip_id = (id[3] * 1000) + (id[2] * 100) +
> + (id[1] * 10) + id[0];
> +
> + dev_info(eth->dev, "chip id = %d\n", chip_id);
the chip id is printed here
> + return chip_id;
> +}
> +
> static int mtk_probe(struct platform_device *pdev)
> {
> struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> @@ -2388,6 +2409,12 @@ static int mtk_probe(struct platform_device *pdev)
> if (err)
> return err;
>
> + eth->chip_id = mtk_get_chip_id(eth);
> + if (!eth->chip_id) {
> + dev_err(&pdev->dev, "failed to get chip id\n");
> + return -ENODEV;
> + }
> +
and the error check happens here. maybe you could move the dev_err to
the above function.
John
> for_each_child_of_node(pdev->dev.of_node, mac_np) {
> if (!of_device_is_compatible(mac_np,
> "mediatek,eth-mac"))
> diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.h b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
> index 3003195..a5b422b 100644
> --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
> +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
> @@ -342,6 +342,10 @@
> #define GPIO_BIAS_CTRL 0xed0
> #define GPIO_DRV_SEL10 0xf00
>
> +/* ethernet subsystem chip id register */
> +#define ETHSYS_CHIPID0_3 0x0
> +#define ETHSYS_CHIPID4_7 0x4
> +
> /* ethernet subsystem config register */
> #define ETHSYS_SYSCFG0 0x14
> #define SYSCFG0_GE_MASK 0x3
> @@ -534,6 +538,7 @@ struct mtk_eth {
> unsigned long sysclk;
> struct regmap *ethsys;
> struct regmap *pctl;
> + u32 chip_id;
> bool hwlro;
> atomic_t dma_refcnt;
> struct mtk_tx_ring tx_ring;
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2016-10-04 12:14 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-10-04 12:12 [PATCH net-next 1/3] net: ethernet: mediatek: get the chip id by ETHDMASYS registers Nelson Chang
2016-10-04 12:14 ` John Crispin
-- strict thread matches above, loose matches on Subject: below --
2016-10-03 7:18 [PATCH net-next 0/3] net: ethernet: mediatek: check the hw lro capability by the chip id instead of the dtsi Nelson Chang
2016-10-03 7:18 ` [PATCH net-next 1/3] net: ethernet: mediatek: get the chip id by ETHDMASYS registers Nelson Chang
2016-10-03 19:17 ` John Crispin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox