All of lore.kernel.org
 help / color / mirror / Atom feed
From: Wen Congyang <wency@cn.fujitsu.com>
To: William Dauchy <wdauchy@gmail.com>
Cc: blauwirbel@gmail.com, qemu-devel@nongnu.org
Subject: [Qemu-devel] Re: [PATCH] moving eeprom initialization
Date: Mon, 07 Mar 2011 10:38:47 +0800	[thread overview]
Message-ID: <4D744537.6050300@cn.fujitsu.com> (raw)
In-Reply-To: <1299446838-8689-1-git-send-email-wdauchy@gmail.com>

At 03/07/2011 05:27 AM, William Dauchy Write:
> The initialization should not be only on reset but also when initializing
> the device.
> It resolves a bug when hot plugging a pci network device: the mac address
> was always null.
> 
> Signed-off-by: William Dauchy <wdauchy@gmail.com>
> Signed-off-by: Wen Congyang <wency@cn.fujitsu.com>

Thanks for merging AMD fix.
This patch works fine to me.

> ---
>  hw/pcnet.c   |   59 +++++++++++++++++++++++++++++----------------------------
>  hw/rtl8139.c |   23 ++++++++++-----------
>  2 files changed, 41 insertions(+), 41 deletions(-)
> 
> diff --git a/hw/pcnet.c b/hw/pcnet.c
> index 6dfdcc4..d3d5661 100644
> --- a/hw/pcnet.c
> +++ b/hw/pcnet.c
> @@ -1557,35 +1557,6 @@ uint32_t pcnet_bcr_readw(PCNetState *s, uint32_t rap)
>  void pcnet_h_reset(void *opaque)
>  {
>      PCNetState *s = opaque;
> -    int i;
> -    uint16_t checksum;
> -
> -    /* Initialize the PROM */
> -
> -    /*
> -      Datasheet: http://pdfdata.datasheetsite.com/web/24528/AM79C970A.pdf
> -      page 95
> -    */
> -    memcpy(s->prom, s->conf.macaddr.a, 6);
> -    /* Reserved Location: must be 00h */
> -    s->prom[6] = s->prom[7] = 0x00;
> -    /* Reserved Location: must be 00h */
> -    s->prom[8] = 0x00;
> -    /* Hardware ID: must be 11h if compatibility to AMD drivers is desired */
> -    s->prom[9] = 0x11;
> -    /* User programmable space, init with 0 */
> -    s->prom[10] = s->prom[11] = 0x00;
> -    /* LSByte of two-byte checksum, which is the sum of bytes 00h-0Bh
> -       and bytes 0Eh and 0Fh, must therefore be initialized with 0! */
> -    s->prom[12] = s->prom[13] = 0x00;
> -    /* Must be ASCII W (57h) if compatibility to AMD
> -       driver software is desired */
> -    s->prom[14] = s->prom[15] = 0x57;
> -
> -    for (i = 0,checksum = 0; i < 16; i++)
> -        checksum += s->prom[i];
> -    *(uint16_t *)&s->prom[12] = cpu_to_le16(checksum);
> -
>  
>      s->bcr[BCR_MSRDA] = 0x0005;
>      s->bcr[BCR_MSWRA] = 0x0005;
> @@ -1752,6 +1723,9 @@ void pcnet_common_cleanup(PCNetState *d)
>  
>  int pcnet_common_init(DeviceState *dev, PCNetState *s, NetClientInfo *info)
>  {
> +    int i;
> +    uint16_t checksum;
> +
>      s->poll_timer = qemu_new_timer(vm_clock, pcnet_poll_timer, s);
>  
>      qemu_macaddr_default_if_unset(&s->conf.macaddr);
> @@ -1760,5 +1734,32 @@ int pcnet_common_init(DeviceState *dev, PCNetState *s, NetClientInfo *info)
>  
>      add_boot_device_path(s->conf.bootindex, dev, "/ethernet-phy@0");
>  
> +    /* Initialize the PROM */
> +
> +    /*
> +      Datasheet: http://pdfdata.datasheetsite.com/web/24528/AM79C970A.pdf
> +      page 95
> +    */
> +    memcpy(s->prom, s->conf.macaddr.a, 6);
> +    /* Reserved Location: must be 00h */
> +    s->prom[6] = s->prom[7] = 0x00;
> +    /* Reserved Location: must be 00h */
> +    s->prom[8] = 0x00;
> +    /* Hardware ID: must be 11h if compatibility to AMD drivers is desired */
> +    s->prom[9] = 0x11;
> +    /* User programmable space, init with 0 */
> +    s->prom[10] = s->prom[11] = 0x00;
> +    /* LSByte of two-byte checksum, which is the sum of bytes 00h-0Bh
> +       and bytes 0Eh and 0Fh, must therefore be initialized with 0! */
> +    s->prom[12] = s->prom[13] = 0x00;
> +    /* Must be ASCII W (57h) if compatibility to AMD
> +       driver software is desired */
> +    s->prom[14] = s->prom[15] = 0x57;
> +
> +    for (i = 0, checksum = 0; i < 16; i++) {
> +        checksum += s->prom[i];
> +    }
> +    *(uint16_t *)&s->prom[12] = cpu_to_le16(checksum);
> +
>      return 0;
>  }
> diff --git a/hw/rtl8139.c b/hw/rtl8139.c
> index a22530c..7a87522 100644
> --- a/hw/rtl8139.c
> +++ b/hw/rtl8139.c
> @@ -1189,18 +1189,6 @@ static void rtl8139_reset(DeviceState *d)
>  
>      rtl8139_update_irq(s);
>  
> -    /* prepare eeprom */
> -    s->eeprom.contents[0] = 0x8129;
> -#if 1
> -    // PCI vendor and device ID should be mirrored here
> -    s->eeprom.contents[1] = PCI_VENDOR_ID_REALTEK;
> -    s->eeprom.contents[2] = PCI_DEVICE_ID_REALTEK_8139;
> -#endif
> -
> -    s->eeprom.contents[7] = s->conf.macaddr.a[0] | s->conf.macaddr.a[1] << 8;
> -    s->eeprom.contents[8] = s->conf.macaddr.a[2] | s->conf.macaddr.a[3] << 8;
> -    s->eeprom.contents[9] = s->conf.macaddr.a[4] | s->conf.macaddr.a[5] << 8;
> -
>      /* mark all status registers as owned by host */
>      for (i = 0; i < 4; ++i)
>      {
> @@ -3392,6 +3380,17 @@ static int pci_rtl8139_init(PCIDevice *dev)
>  
>      qemu_macaddr_default_if_unset(&s->conf.macaddr);
>  
> +    /* prepare eeprom */
> +    s->eeprom.contents[0] = 0x8129;
> +#if 1
> +    /* PCI vendor and device ID should be mirrored here */
> +    s->eeprom.contents[1] = PCI_VENDOR_ID_REALTEK;
> +    s->eeprom.contents[2] = PCI_DEVICE_ID_REALTEK_8139;
> +#endif
> +    s->eeprom.contents[7] = s->conf.macaddr.a[0] | s->conf.macaddr.a[1] << 8;
> +    s->eeprom.contents[8] = s->conf.macaddr.a[2] | s->conf.macaddr.a[3] << 8;
> +    s->eeprom.contents[9] = s->conf.macaddr.a[4] | s->conf.macaddr.a[5] << 8;
> +
>      s->nic = qemu_new_nic(&net_rtl8139_info, &s->conf,
>                            dev->qdev.info->name, dev->qdev.id, s);
>      qemu_format_nic_info_str(&s->nic->nc, s->conf.macaddr.a);

  reply	other threads:[~2011-03-07  2:40 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-02-24 14:40 [Qemu-devel] null mac address William Dauchy
2011-02-25  1:32 ` Wen Congyang
2011-02-25  2:55 ` Wen Congyang
2011-02-25 18:15   ` Blue Swirl
2011-02-28  2:09     ` [Qemu-devel] [PATCH v2] move eeprom init from reset function to init function Wen Congyang
2011-03-02 13:36     ` [Qemu-devel] [PATCH] moving eeprom initialization William Dauchy
2011-03-02 15:25       ` [Qemu-devel] " William Dauchy
2011-03-02 18:28         ` Gerhard Wiesinger
2011-03-02 20:54           ` William Dauchy
2011-03-05 12:15       ` Blue Swirl
2011-03-06 19:23         ` [Qemu-devel] " William Dauchy
2011-03-06 20:38           ` Gerhard Wiesinger
2011-03-06 21:12             ` William Dauchy
2011-03-06 21:27         ` William Dauchy
2011-03-07  2:38           ` Wen Congyang [this message]
2011-03-13 13:33           ` [Qemu-devel] " Blue Swirl

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=4D744537.6050300@cn.fujitsu.com \
    --to=wency@cn.fujitsu.com \
    --cc=blauwirbel@gmail.com \
    --cc=qemu-devel@nongnu.org \
    --cc=wdauchy@gmail.com \
    /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.