All of lore.kernel.org
 help / color / mirror / Atom feed
From: Fabien Chouteau <chouteau@adacore.com>
To: Scott Wood <scottwood@freescale.com>
Cc: qemu-ppc@nongnu.org, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [Qemu-ppc] [PATCH 2/2] Add Enhanced Three-Speed Ethernet Controller (eTSEC)
Date: Wed, 17 Jul 2013 12:17:06 +0200	[thread overview]
Message-ID: <51E66F22.6030202@adacore.com> (raw)
In-Reply-To: <1373997013.8183.332@snotra>

On 07/16/2013 07:50 PM, Scott Wood wrote:
> On 07/16/2013 10:28:28 AM, Fabien Chouteau wrote:
>> On 07/16/2013 04:06 AM, Scott Wood wrote:
>> > On 07/10/2013 12:10:02 PM, Fabien Chouteau wrote:
>> >> +obj-$(CONFIG_ETSEC) += etsec.o etsec_registers.o etsec_rings.o etsec_miim.o
>> >
>> > Maybe an fsl_etsec directory?
>> >
>>
>> Is it really necessary?
> 
> Not strictly necessary, but it would help keep things tidy.
> 

I will try :)

>> >> +DeviceState *etsec_create(hwaddr         base,
>> >> +                          MemoryRegion * mr,
>> >> +                          NICInfo      * nd,
>> >> +                          qemu_irq       tx_irq,
>> >> +                          qemu_irq       rx_irq,
>> >> +                          qemu_irq       err_irq)
>> >>
>> > Do you plan to update hw/ppc/e500.c (or maybe some other platform?) to
>> > call this?
>> >
>>
>> No I don't, not for the moment. I use it in one of our machine (that is not in mainstream).
> 
> Someone should, so we can test this without your out-of-tree code.
> 
>> e500.c would require PCI support I think.
> 
> e500.c has PCI support, but how is that relevant to eTSEC?

I guess it's not. We would have to remove:

    if (pci_bus) {
        /* Register network interfaces. */
        for (i = 0; i < nb_nics; i++) {
            pci_nic_init_nofail(&nd_table[i], pci_bus, "virtio", NULL);
        }
    }

> 
>> >> +    if (*size == etsec->rx_padding) {
>> >> +        /* The remaining bytes are for padding which is not actually allocated
>> >> +           in the buffer */
>> >> +
>> >> +        rem = MIN(etsec->regs[MRBLR].value - bd->length, etsec->rx_padding);
>> >> +
>> >> +        if (rem > 0) {
>> >> +            memset(padd, 0x0, sizeof(padd));
>> >> +            etsec->rx_padding -= rem;
>> >> +            *size             -= rem;
>> >> +            bd->length        += rem;
>> >> +            cpu_physical_memory_write(bufptr, padd, rem);
>> >> +        }
>> >> +    }
>> >
>> > What if *size > 0 && *size < etsec->rx_padding?
>>
>> I don't think it's possible...
> 
> Maybe throw in an assertion, then?
> 
> I can see how it might not be possible if rx_padding is being used for padding a short frame, since MRBLR must be a multiple of 64, but what if it's 4 bytes for CRC?
> 

Can you explain a possible error scenario?

>> >> +static void rx_init_frame(eTSEC *etsec, const uint8_t *buf, size_t size)
>> >> +{
>> >> +    uint32_t fcb_size = 0;
>> >> +    uint8_t  prsdep   = (etsec->regs[RCTRL].value >> RCTRL_PRSDEP_OFFSET)
>> >> +        & RCTRL_PRSDEP_MASK;
>> >> +
>> >> +    if (prsdep != 0) {
>> >> +        /* Prepend FCB */
>> >> +        fcb_size = 8 + 2;          /* FCB size + align */
>> >> +        /* I can't find this 2 bytes alignement in fsl documentation but VxWorks
>> >> +           expects them */
>> >
>> > Could these 2 bytes be from RCTRL[PAD], which you seem to ignore?
>>
>> Did you mean RCTRL[PAL]? It could be that.
> 
> Yes, sorry.
> 

Thanks for pointing it ;)

>> >> +    etsec->rx_padding    = 4;
>>
>> CRC.
>>
>> >> +    if (size < 60) {
>> >> +        etsec->rx_padding += 60 - size;
>> >> +    }
>> >
>> > Could you explain what you're doing with rx_padding?
>>
>> Avoiding short frames. I'll add a comments.
> 
> This is for when RCTRL[RSF] is set, to accept short frames?  Is it documented anywhere that these frames are zero-padded to 64 bytes on rx?  If not, is this the observed behavior of real hardware?
> 
> In any case, please add some comments.
> 

Actually, this might be obsolete. At the time QEMU was sending short
frames, but vxWorks drop them, so I made this change to always have 64B
frames. Now I have another patch to fix this and I will remove this hack
and implement RCTRL[RSF].


>> >> +    /* ring_base = (etsec->regs[RBASEH].value & 0xF) << 32; */
>> >> +    ring_base     += etsec->regs[RBASE0 + ring_nbr].value & ~0x7;
>> >> +    start_bd_addr  = bd_addr = etsec->regs[RBPTR0 + ring_nbr].value & ~0x7;
>> >
>> > What about RBDBPH (upper bits of physical address)?  Likewise for TX.
>> >
>>
>> I'm only interested in 32bits address spaces, so RBASEH, TBASEH, RBDBPH or TBDBPH.
>
> When adding code to mainline, it's about more than what you're personally interested in...
>

If I'm not "personally" interested, I will not have time to develop or
test a feature. If someone wants to do 36bit addressing, feel free to do
it, that's why I send the patch on QEMU-devel, but I won't implement
full support of eTSEC myself...

> Could you at least have a way to diagnose when the guest OS tries to
> use some functionality that you don't support, rather than silently
> doing the wrong thing?
>

This device is so complex, detecting unsupported features would take too
much work.

Regards,

-- 
Fabien Chouteau

  reply	other threads:[~2013-07-17 10:17 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-10 17:10 [Qemu-devel] [PATCH 0/2] Enhanced Three Speed Ethernet Controller (eTSEC) Fabien Chouteau
2013-07-10 17:10 ` [Qemu-devel] [PATCH 1/2] Add be16_to_cpupu function Fabien Chouteau
2013-07-10 17:25   ` Peter Maydell
2013-07-12  9:57     ` Fabien Chouteau
2013-07-10 17:10 ` [Qemu-devel] [PATCH 2/2] Add Enhanced Three-Speed Ethernet Controller (eTSEC) Fabien Chouteau
     [not found]   ` <201307110955092430409@cn.fujitsu.com>
2013-07-15  1:25     ` [Qemu-devel] Fw: [PATCH 2/2] Add Enhanced Three-Speed EthernetController (eTSEC) Yao Xingtao
2013-07-15 10:19       ` Fabien Chouteau
2013-07-15  2:00   ` [Qemu-devel] [PATCH 2/2] Add Enhanced Three-Speed Ethernet Controller (eTSEC) Peter Crosthwaite
2013-07-15 14:23     ` Fabien Chouteau
2013-07-16  1:06       ` Peter Crosthwaite
2013-07-16  8:35         ` Fabien Chouteau
2013-07-16  2:06   ` [Qemu-devel] [Qemu-ppc] " Scott Wood
2013-07-16 15:28     ` Fabien Chouteau
2013-07-16 15:37       ` Alexander Graf
2013-07-16 16:15         ` Fabien Chouteau
2013-07-16 16:54           ` Scott Wood
2013-07-17  8:24             ` Fabien Chouteau
2013-07-17  8:29               ` Alexander Graf
2013-07-17 10:27                 ` Fabien Chouteau
2013-07-16 17:50       ` Scott Wood
2013-07-17 10:17         ` Fabien Chouteau [this message]
2013-07-17 10:22           ` Alexander Graf
2013-07-17 10:43             ` Fabien Chouteau
2013-07-17 21:02           ` Scott Wood
2013-07-18  9:27             ` Fabien Chouteau
2013-07-18 20:37               ` Scott Wood
2013-07-19  9:22                 ` Fabien Chouteau
2013-07-19 17:19                   ` Scott Wood
2013-07-22  9:00                     ` Fabien Chouteau

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=51E66F22.6030202@adacore.com \
    --to=chouteau@adacore.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    --cc=scottwood@freescale.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.