[{"id":3676308,"web_url":"http://patchwork.ozlabs.org/comment/3676308/","msgid":"<CA+X=5XgN7oH=POtFbTGgiWnNCaX4z7ET4K60-FM02SDpqUyT6Q@mail.gmail.com>","list_archive_url":null,"date":"2026-04-12T15:35:57","subject":"Re: [PATCH] hw/net/fsl_etsec: implement RCTRL[CFA] FCS stripping on\n receive","submitter":{"id":93121,"url":"http://patchwork.ozlabs.org/api/people/93121/","name":"Vivien LEGER","email":"vivien.leger@gmail.com"},"content":"Please disregard the previous patch, it was incorrect.\nAfter further investigation, QEMU's fsl_etsec already includes the 4-byte\nFCS in bd->length, which is the correct hardware behaviour.\nThe Linux gianfar driver confirms this by unconditionally subtracting\nETH_FCS_LEN from bd->length on receive.\n Additionally, The RCTRL register has no FCS strip control bit. The actual\nissue was in my RTEMS lwIP driver which was not subtracting the FCS from\nbd->length before passing frames to the stack, causing ARP replies to fail\nlength validation.\nThat is a driver bug, not a QEMU bug. Sorry\n\nOn Sun, Apr 12, 2026 at 3:46 PM Vivien LEGER <vivien.leger@gmail.com> wrote:\n\n> Please disregard the previous patch.\n> The RCTRL[CFA] bit reference was incorrect; CFA appears in the DFVLAN\n> register context, not RCTRL.\n> The patch needs further research before resubmission.\n> Sorry for the noise.\n>\n> On Sun, Apr 12, 2026 at 3:40 PM Vivien LEGER <vivien.leger@gmail.com>\n> wrote:\n>\n>> The eTSEC hardware strips the 4-byte FCS from received frames by\n>> default (RCTRL[CFA]=0). When CFA=1, FCS is copied to the application\n>> buffer and bd->length includes it.\n>>\n>> Previously QEMU always included FCS in bd->length regardless of CFA,\n>> causing guests using the default RCTRL to receive 4 extra bytes per\n>> frame, breaking protocols that validate frame length (e.g. ARP).\n>>\n>> Fix by subtracting 4 from bd->length when RCTRL[CFA]=0 (default).\n>>\n>> Signed-off-by: Vivien LEGER <vivien.leger@gmail.com>\n>> ---\n>>  hw/net/fsl_etsec/registers.h |  1 +\n>>  hw/net/fsl_etsec/rings.c     | 10 ++++++++++\n>>  2 files changed, 11 insertions(+)\n>>\n>> diff --git a/hw/net/fsl_etsec/registers.h b/hw/net/fsl_etsec/registers.h\n>> index f085537ecd..1766e39a1a 100644\n>> --- a/hw/net/fsl_etsec/registers.h\n>> +++ b/hw/net/fsl_etsec/registers.h\n>> @@ -103,6 +103,7 @@ extern const eTSEC_Register_Definition\n>> eTSEC_registers_def[];\n>>  #define RCTRL_PRSDEP_MASK   (0x3)\n>>  #define RCTRL_PRSDEP_OFFSET (6)\n>>  #define RCTRL_RSF           (1 << 2)\n>> +#define RCTRL_CFA           (1 << 11)  /* Copy FCS to application */\n>>\n>>  /* Index of each register */\n>>\n>> diff --git a/hw/net/fsl_etsec/rings.c b/hw/net/fsl_etsec/rings.c\n>> index 22660c32b8..38e27ad6d8 100644\n>> --- a/hw/net/fsl_etsec/rings.c\n>> +++ b/hw/net/fsl_etsec/rings.c\n>> @@ -442,6 +442,16 @@ static void fill_rx_bd(eTSEC          *etsec,\n>>              cpu_physical_memory_write(bufptr, padd, rem);\n>>          }\n>>      }\n>> +\n>> +    /* Strip FCS unless RCTRL[CFA] requests copy to application.\n>> +     * Per FSL eTSEC architecture (RCTRL field descriptions):\n>> +     * CFA=0 (reset default): FCS is checked and discarded by hardware,\n>> +     *   bd->length should not include the 4-byte FCS.\n>> +     * CFA=1: FCS is copied to the application buffer, bd->length\n>> includes FCS.\n>> +     */\n>> +    if (!(etsec->regs[RCTRL].value & RCTRL_CFA) && bd->length >= 4) {\n>> +        bd->length -= 4;\n>> +    }\n>>  }\n>>\n>>  static void rx_init_frame(eTSEC *etsec, const uint8_t *buf, size_t size)\n>> --\n>> 2.53.0\n>>\n>>","headers":{"Return-Path":"<qemu-ppc-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256\n header.s=20251104 header.b=i1LEPfcB;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists1p.gnu.org;\n envelope-from=qemu-ppc-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)"],"Received":["from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4ftvlb3tR6z1xtJ\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 13 Apr 2026 01:36:25 +1000 (AEST)","from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists1p.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-ppc-bounces@nongnu.org>)\n\tid 1wBwrE-00010A-Bz; Sun, 12 Apr 2026 11:36:21 -0400","from eggs.gnu.org ([2001:470:142:3::10])\n by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <vivien.leger@gmail.com>)\n id 1wBwr7-0000zh-NM\n for qemu-ppc@nongnu.org; Sun, 12 Apr 2026 11:36:15 -0400","from mail-yx1-xb12c.google.com ([2607:f8b0:4864:20::b12c])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)\n (Exim 4.90_1) (envelope-from <vivien.leger@gmail.com>)\n id 1wBwr5-0005or-IT\n for qemu-ppc@nongnu.org; Sun, 12 Apr 2026 11:36:13 -0400","by mail-yx1-xb12c.google.com with SMTP id\n 956f58d0204a3-65005a8840dso3307521d50.0\n for <qemu-ppc@nongnu.org>; Sun, 12 Apr 2026 08:36:11 -0700 (PDT)"],"ARC-Seal":"i=1; a=rsa-sha256; t=1776008170; cv=none;\n d=google.com; s=arc-20240605;\n b=QM6CbfZD7QgKtEe3sCHhFx96ARWYiE1c4Mcjq3zIsqELdMrcLE7S7V855OymvTFs6d\n 0/z/UULONCWrUUtIOz6P88wdPA3QwcIZXKiEhBIUfcRTpUG0REpzlj22PHvy/iCbKndT\n +FhV/9N1xsbc68KerExn6PtPs4XSjABfOappYVZsx9j+yFbY7f+pf4pfJIUDFjvsMF8l\n 8SgrJ3+o+uAAzcrGRJUHgyQkftQ/m8gAtC5vFvVSzn+i57Rl4IukGGoGoNVfarEnm4ws\n UboomxNn7sN1yY0noQjDq9RE3TXbOEtZ9+2ToPwrWD/Fh3oRuiDzkat1M0tWEasS12OU\n 9kJA==","ARC-Message-Signature":"i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com;\n s=arc-20240605;\n h=to:subject:message-id:date:from:in-reply-to:references:mime-version\n :dkim-signature;\n bh=1FbVwvPyEEAFjoYY74tKXk7KQf5day3P7taSU8O3DYQ=;\n fh=vHWaW2lNYLu+/O6ZQI3ufLnCCwyseXkvs9jiaN2Oh10=;\n b=Zs1/XoomwXh+W7anoR2lbS7F18mvoq+iQ5/y0m11f9z2JIvL7kaf4gfoQ2HDCCtUHZ\n K8495uZ8i81bA/re7kqVkR5gpcMnHHRWbVYYv1gxb7IT9blL0nY0ybs6hiYw2llu6g61\n 0PJ3nf6vAE/7Dn3Q6cXcE9XhKUXHPt3P2VlcIayYFRvG9nUE7a9Z59Ytp5VM0QrSy5HA\n 4+bCMg8SXYFyYIeWcwxza3UkYHJYtPYI/jApVkTC8KT7qhzlSR9tRRDFDc/4T/lMw1ON\n mw9CHl8URWz27qciZEYQHqJ+8sN+kHKO/B8Je16NmsZmU5h98/C84RdJRRz8A1tavTvA\n iZTQ==; darn=nongnu.org","ARC-Authentication-Results":"i=1; mx.google.com; arc=none","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=gmail.com; s=20251104; t=1776008170; x=1776612970; darn=nongnu.org;\n h=to:subject:message-id:date:from:in-reply-to:references:mime-version\n :from:to:cc:subject:date:message-id:reply-to;\n bh=1FbVwvPyEEAFjoYY74tKXk7KQf5day3P7taSU8O3DYQ=;\n b=i1LEPfcB9UM/5Bj2mq28pNLwbpFHTAoBvW3AC0rsS2UCrpiAZIR2Iy8hzmfQi3RveH\n O2Y2NYcY1n93f1qVlEZvGdAsmntLB1hdMs0HlvAHriUtAPzP6eYZGk7hqOZOH2I1yvAT\n vulcjKrw/++EK+XCqcUp6yuakhMYiDjLoDCebZoBTtoi+OAeV13yzXEAKWHB4MDIrZa7\n AmzWZdKTYACr3s8cTCsZbL9okNIa8YzdsAZSifLufSnWQhqF+AzTkppYz6n/RKuxPJfe\n VDSY+xIxldLPcI+3MLiGu4KtAhjyj0RKoz9QHLAR/pQjBxR420t9d+JXN9dBe/HQXeZt\n yBXw==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1776008170; x=1776612970;\n h=to:subject:message-id:date:from:in-reply-to:references:mime-version\n :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id\n :reply-to;\n bh=1FbVwvPyEEAFjoYY74tKXk7KQf5day3P7taSU8O3DYQ=;\n b=exaseBcGa75zHA4jWLvmRmEpRM3OantG1GDdhgXJeEFv8WIp2csI6FXqLGxydk3sZP\n ggI0qNvxpUUUYExxUwJ6LoqOKf521Bq/eGDDE+cQQgmk/Cjz450TgKwjuBYF0a/WuT4L\n tJV3NCt7tj04mERPi1ArqLCrr8thVI2bBxJTIAN6K3wEZ0LiEoUOxPJA+Avvnii2SsEO\n /P4JfD+x7WIJUA6ewJF/rOh/KcugxWfJj8sKVaFBGNk3xCS17Z6W6TotV3ZGdPfth/UC\n kSr35aSEwp5UdpIpiVecZ/UrWwUDxTbwNgStpaFGNkYczo2b16agVBVUbQAezRLusi/N\n Nsww==","X-Gm-Message-State":"AOJu0YxTzJs8mnP/upuK35f+/NN1+O30Hg1PiezypzwOvFlHD/C3Dsq0\n 1TYv4VgD6aMo1EBcvDdojrGwxPy8dZruKdHKLnfpY8T3SA//U5uWGEEbcBEw6Vv4thlFi7NE+EJ\n 8iUeS5qTQ6vDnt2qO4m541rbpROYKgB/3visLafI=","X-Gm-Gg":"AeBDiesRh/euugpszHycgyzIyN9SoJbGVyF4ywJXQVMHVUlQUYkaIdSWPIdFLvZwJDH\n N3J+YUY2xrytJhR5L1ZZxadH//Kel6Kc4REGFoAb56NANWlecfGrQoW/GtxiNBDXUanYuOV8G0i\n ZRBpbFRl35Fy0ldCgGpOyVOXVFDk6hFhxrYTwkAR+MRNdjGCvjgkX1V5BdiwTUveDYXXwpmRi+R\n EqfqZ5KCACeOu7iFyUwMskFA5/2HY5w1dLRbLkIzTrP7LbfVrZyFTY52KKs86/xNbGVeh+5CVkq\n nqJQxWrDi8rV4go/bJug47X0gg9wqabJiXIWa4kbD0ho2KS6LibpKTnZNl9e2HNdCoact24=","X-Received":"by 2002:a05:690e:12c4:b0:650:2ff9:d65c with SMTP id\n 956f58d0204a3-65198add024mr9951341d50.18.1776008170114; Sun, 12 Apr 2026\n 08:36:10 -0700 (PDT)","MIME-Version":"1.0","References":"<20260412134016.1640882-1-vivien.leger@gmail.com>\n <CA+X=5Xj=MLSMnpKqfOMQFw7uRrHpTdgC3c2S1wt5VpWtaJ-X6Q@mail.gmail.com>","In-Reply-To":"\n <CA+X=5Xj=MLSMnpKqfOMQFw7uRrHpTdgC3c2S1wt5VpWtaJ-X6Q@mail.gmail.com>","From":"Vivien LEGER <vivien.leger@gmail.com>","Date":"Sun, 12 Apr 2026 17:35:57 +0200","X-Gm-Features":"AQROBzD3fcPTkgOLrNnf1kMY65xRihrVEOs6s_BwfTOfHjn6K4Q39YzOEqQ6UXk","Message-ID":"\n <CA+X=5XgN7oH=POtFbTGgiWnNCaX4z7ET4K60-FM02SDpqUyT6Q@mail.gmail.com>","Subject":"Re: [PATCH] hw/net/fsl_etsec: implement RCTRL[CFA] FCS stripping on\n receive","To":"qemu-ppc@nongnu.org","Content-Type":"multipart/alternative; boundary=\"0000000000001911df064f45207f\"","Received-SPF":"pass client-ip=2607:f8b0:4864:20::b12c;\n envelope-from=vivien.leger@gmail.com; helo=mail-yx1-xb12c.google.com","X-Spam_score_int":"-20","X-Spam_score":"-2.1","X-Spam_bar":"--","X-Spam_report":"(-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001,\n HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,\n SPF_PASS=-0.001 autolearn=ham autolearn_force=no","X-Spam_action":"no action","X-BeenThere":"qemu-ppc@nongnu.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<qemu-ppc.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-ppc>,\n <mailto:qemu-ppc-request@nongnu.org?subject=unsubscribe>","List-Archive":"<https://lists.nongnu.org/archive/html/qemu-ppc>","List-Post":"<mailto:qemu-ppc@nongnu.org>","List-Help":"<mailto:qemu-ppc-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-ppc>,\n <mailto:qemu-ppc-request@nongnu.org?subject=subscribe>","Errors-To":"qemu-ppc-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"qemu-ppc-bounces+incoming=patchwork.ozlabs.org@nongnu.org"}}]