From: Paul Cercueil <paul@crapouillou.net>
To: "H. Nikolaus Schaller" <hns@goldelico.com>
Cc: "Andrew Lunn" <andrew@lunn.ch>,
"David S. Miller" <davem@davemloft.net>,
"Petr Štetiar" <ynezz@true.cz>,
"Richard Fontana" <rfontana@redhat.com>,
"Thomas Gleixner" <tglx@linutronix.de>,
"Heiner Kallweit" <hkallweit1@gmail.com>,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
letux-kernel@openphoenux.org, kernel@pyra-handheld.com
Subject: Re: [PATCH v2] net: davicom: dm9000: allow to pass MAC address through mac_addr module parameter
Date: Fri, 14 Feb 2020 15:47:28 -0300 [thread overview]
Message-ID: <1581706048.3.3@crapouillou.net> (raw)
In-Reply-To: <0d6b4d383bb29ed5d4710e9706e5ad6c7f92d9da.1581696454.git.hns@goldelico.com>
Hi Nikolaus,
What I'd suggest is to write a NVMEM driver for the efuse and retrieve
the MAC address cleanly with nvmem_get_mac_address().
It shouldn't be hard to do (there's already code for it in the
non-upstream 3.18 kernel for the CI20) and you remove the dependency on
uboot.
-Paul
Le ven., févr. 14, 2020 at 17:07, H. Nikolaus Schaller
<hns@goldelico.com> a écrit :
> The MIPS Ingenic CI20 board is shipped with a quite old u-boot
> (ci20-v2013.10 see https://elinux.org/CI20_Dev_Zone). This passes
> the MAC address through dm9000.mac_addr=xx:xx:xx:xx:xx:xx
> kernel module parameter to give the board a fixed MAC address.
>
> This is not processed by the dm9000 driver which assigns a random
> MAC address on each boot, making DHCP assign a new IP address
> each time.
>
> So we add a check for the mac_addr module parameter as a last
> resort before assigning a random one. This mechanism can also
> be used outside of u-boot to provide a value through modprobe
> config.
>
> To parse the MAC address in a new function get_mac_addr() we
> use an copy adapted from the ksz884x.c driver which provides
> the same functionality.
>
> Signed-off-by: H. Nikolaus Schaller <hns@goldelico.com>
> ---
> drivers/net/ethernet/davicom/dm9000.c | 42
> +++++++++++++++++++++++++++
> 1 file changed, 42 insertions(+)
>
> diff --git a/drivers/net/ethernet/davicom/dm9000.c
> b/drivers/net/ethernet/davicom/dm9000.c
> index 1ea3372775e6..7402030b0352 100644
> --- a/drivers/net/ethernet/davicom/dm9000.c
> +++ b/drivers/net/ethernet/davicom/dm9000.c
> @@ -1409,6 +1409,43 @@ static struct dm9000_plat_data
> *dm9000_parse_dt(struct device *dev)
> return pdata;
> }
>
> +static char *mac_addr = ":";
> +module_param(mac_addr, charp, 0);
> +MODULE_PARM_DESC(mac_addr, "MAC address");
> +
> +static void get_mac_addr(struct net_device *ndev, char *macaddr)
> +{
> + int i = 0;
> + int j = 0;
> + int got_num = 0;
> + int num = 0;
> +
> + while (j < ETH_ALEN) {
> + if (macaddr[i]) {
> + int digit;
> +
> + got_num = 1;
> + digit = hex_to_bin(macaddr[i]);
> + if (digit >= 0)
> + num = num * 16 + digit;
> + else if (':' == macaddr[i])
> + got_num = 2;
> + else
> + break;
> + } else if (got_num) {
> + got_num = 2;
> + } else {
> + break;
> + }
> + if (got_num == 2) {
> + ndev->dev_addr[j++] = (u8)num;
> + num = 0;
> + got_num = 0;
> + }
> + i++;
> + }
> +}
> +
> /*
> * Search DM9000 board, allocate space and register it
> */
> @@ -1679,6 +1716,11 @@ dm9000_probe(struct platform_device *pdev)
> ndev->dev_addr[i] = ior(db, i+DM9000_PAR);
> }
>
> + if (!is_valid_ether_addr(ndev->dev_addr)) {
> + mac_src = "param";
> + get_mac_addr(ndev, mac_addr);
> + }
> +
> if (!is_valid_ether_addr(ndev->dev_addr)) {
> inv_mac_addr = true;
> eth_hw_addr_random(ndev);
> --
> 2.23.0
>
next prev parent reply other threads:[~2020-02-14 18:47 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-14 16:07 [PATCH v2] net: davicom: dm9000: allow to pass MAC address through mac_addr module parameter H. Nikolaus Schaller
2020-02-14 16:32 ` Andrew Lunn
2020-02-14 17:51 ` David Miller
2020-02-14 18:47 ` Paul Cercueil [this message]
2020-02-14 19:24 ` H. Nikolaus Schaller
2020-02-14 19:38 ` [Letux-kernel] " H. Nikolaus Schaller
2020-02-14 19:57 ` Paul Cercueil
2020-02-14 20:05 ` H. Nikolaus Schaller
2020-02-14 20:17 ` Paul Cercueil
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1581706048.3.3@crapouillou.net \
--to=paul@crapouillou.net \
--cc=andrew@lunn.ch \
--cc=davem@davemloft.net \
--cc=hkallweit1@gmail.com \
--cc=hns@goldelico.com \
--cc=kernel@pyra-handheld.com \
--cc=letux-kernel@openphoenux.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=rfontana@redhat.com \
--cc=tglx@linutronix.de \
--cc=ynezz@true.cz \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.