From nobody Mon Feb 9 14:35:49 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of _spf.google.com designates 209.85.128.54 as permitted sender) client-ip=209.85.128.54; envelope-from=philippe.mathieu.daude@gmail.com; helo=mail-wm1-f54.google.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.128.54 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1625321998; cv=none; d=zohomail.com; s=zohoarc; b=WvHjUXu971dBQcDNw7hKzXDVbZju3jrl4yJiIR6LnqUTbrOUcTMWWulFpd29ZNjlxJIqta00EzWeKOwhFYlNXXxQav1MgCm/DTAA7yQPRt4VyUGzpXxqAK4oA4vSNnpJ0FiCkZ0wF5jg7g0M4ZWtVwH5hJrYjgRrgVFUI9P5R38= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1625321998; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Sender:Subject:To; bh=xzjbO+5jo6pD19SRnGaYYtwqZATAxg4quF6D0X5U33M=; b=n6C/mFbmlWBiZYigx2YCe6wlU85ZncoZqyx7D98asM0HUQSDJEcBIyhEfy5TCfT+GDavZuY4BxO5NFabpXJps0ckuCsdpArCYAXrPinu+p08BAsA1DWwCxFa3wEkJ/QZL//9LRZIujAX1MPbTHu92ZWjyFMw8pHfkl2pcvq/lO4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.128.54 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com Received: from mail-wm1-f54.google.com (mail-wm1-f54.google.com [209.85.128.54]) by mx.zohomail.com with SMTPS id 1625321998582752.319257916912; Sat, 3 Jul 2021 07:19:58 -0700 (PDT) Received: by mail-wm1-f54.google.com with SMTP id g8-20020a1c9d080000b02901f13dd1672aso7124837wme.0 for ; Sat, 03 Jul 2021 07:19:58 -0700 (PDT) Return-Path: Return-Path: Received: from x1w.. (184.red-95-127-187.staticip.rima-tde.net. [95.127.187.184]) by smtp.gmail.com with ESMTPSA id b11sm6834846wrf.43.2021.07.03.07.19.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 03 Jul 2021 07:19:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=xzjbO+5jo6pD19SRnGaYYtwqZATAxg4quF6D0X5U33M=; b=ZywkxyBShV2Xh2f2XAB0qHxYfsyCR+4cYbbO4KPLOBhZNUi5N8IUvHmXXpLLLpGYDG x7mFmR8mBLBYpFBr6Tx+K7xb5lqcjpAkn89I3ge2zcY877LN4gBJpmJO73xycGDmlgKn ONVLlbpuRcFmYqLXgl8ZwU78sBufGkCKENjZipjabfMyb2m7U90PNLJM71/tIrMlwiFN 2Fu8VS0H0Haq1cyl109SCnImPB184vyNQhiB+HV9XNF440E8yAGc4IAEtsXcCVovfOb3 6f/XaidcTGIZCG1HwXvHVgcLYXvFCYt8MWPl+HQbu4TbU/IyShljbiyX6D8rX2NLMOms mAig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=xzjbO+5jo6pD19SRnGaYYtwqZATAxg4quF6D0X5U33M=; b=Wzur8HEswlte0ImgwP9wf49zs9PvuNH4BJWDuhmJpqw5YDOXvHuWzDmte0Ck0WA4NS w5R357w8qvmCcM7eeybpzfhAzueHY+J7eSHq6dkyNtfYqXTZIR6DLbnG1Jcp8yvdcnAC wlVBOj6jskmsA3MeX98fDCKZu4pLAq0x7OZw81KnObP7AzdgUVXvrYsXJye7VQKAWa1l d0rwiM0KgJxsLuBhse9ALi8AD/xULoSFbpKXy7ArHY7CQRCJ3ffV4/o75RpfkZJXgdAt SfHxYCvhaafozjNoXb1ZmzZx9C2rUrmGtBgfcaOQ9yrrouNxt72/YTz/r8xgkXIRoQ1W UVhQ== X-Gm-Message-State: AOAM532Fvo5t81OybSCta3PLolHXt+6e8luLLg7vlIhwGWiBWUjFtlbs Roh7OpmK4TyNYTpN5j6YwEM= X-Google-Smtp-Source: ABdhPJy7PtXVjwTaet10N95+lFYVk4voZCHYcvSrbN/m08WflyH56XrQYXbTJJerB73XMdv+YWRDqQ== X-Received: by 2002:a1c:b403:: with SMTP id d3mr5012554wmf.79.1625321996887; Sat, 03 Jul 2021 07:19:56 -0700 (PDT) Sender: =?UTF-8?Q?Philippe_Mathieu=2DDaud=C3=A9?= From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Cc: Laurent Vivier , Jason Wang , Finn Thain , Mark Cave-Ayland , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH 1/6] dp8393x: fix CAM descriptor entry index Date: Sat, 3 Jul 2021 16:19:42 +0200 Message-Id: <20210703141947.352295-2-f4bug@amsat.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210703141947.352295-1-f4bug@amsat.org> References: <20210703141947.352295-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1625322000341100001 From: Mark Cave-Ayland Currently when a LOAD CAM command is executed the entries are loaded into t= he CAM from memory in order which is incorrect. According to the datasheet the first entry in the CAM descriptor is the entry index which means that each descriptor may update any single entry in the CAM rather than the Nth entry. Decode the CAM entry index and use it store the descriptor in the appropria= te slot in the CAM. This fixes the issue where the MacOS toolbox loads a single CAM descriptor into the final slot in order to perform a loopback test which must succeed before the Ethernet port is enabled. Signed-off-by: Mark Cave-Ayland Tested-by: Finn Thain Reviewed-by: Philippe Mathieu-Daud=C3=A9 Message-Id: <20210625065401.30170-10-mark.cave-ayland@ilande.co.uk> Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- hw/net/dp8393x.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hw/net/dp8393x.c b/hw/net/dp8393x.c index 252c0a26641..11810c9b600 100644 --- a/hw/net/dp8393x.c +++ b/hw/net/dp8393x.c @@ -270,7 +270,7 @@ static void dp8393x_update_irq(dp8393xState *s) static void dp8393x_do_load_cam(dp8393xState *s) { int width, size; - uint16_t index =3D 0; + uint16_t index; =20 width =3D (s->regs[SONIC_DCR] & SONIC_DCR_DW) ? 2 : 1; size =3D sizeof(uint16_t) * 4 * width; @@ -279,6 +279,7 @@ static void dp8393x_do_load_cam(dp8393xState *s) /* Fill current entry */ address_space_read(&s->as, dp8393x_cdp(s), MEMTXATTRS_UNSPECIFIED, s->data, size); + index =3D dp8393x_get(s, width, 0) & 0xf; s->cam[index][0] =3D dp8393x_get(s, width, 1) & 0xff; s->cam[index][1] =3D dp8393x_get(s, width, 1) >> 8; s->cam[index][2] =3D dp8393x_get(s, width, 2) & 0xff; @@ -291,7 +292,6 @@ static void dp8393x_do_load_cam(dp8393xState *s) /* Move to next entry */ s->regs[SONIC_CDC]--; s->regs[SONIC_CDP] +=3D size; - index++; } =20 /* Read CAM enable */ --=20 2.31.1 From nobody Mon Feb 9 14:35:49 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of _spf.google.com designates 209.85.221.43 as permitted sender) client-ip=209.85.221.43; envelope-from=philippe.mathieu.daude@gmail.com; helo=mail-wr1-f43.google.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.221.43 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1625322005; cv=none; d=zohomail.com; s=zohoarc; b=WYLqKgdcshuqejoFy3OxMS+r613Pj5MM73t6aEW0xkj7gy9fDjPcUvFcAvjxHl/vpjJTy1OAxFgl5MdAtIcNLxrz0lAEHO7V90iI4JG+LQFFpMOt8cOH/owTjLzFNTEisSkIpRGq96T6wTG2bUQdTRUB34WQ+nCfVYRt8kkbUmU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1625322005; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Sender:Subject:To; bh=aq9RhqFMdHMQ/C3FaLLzkrpqAo3tTe9bTGzjaDhxHgI=; b=GgpUATJhAgKr9hAo5ddkii+rRGmesgv3thBSsJgfnAArtDfHBHagcSucteQ09NoksH5oyJagJuo4g9qx+u/wMD4Tlo1lG2DL8e24LzZp/MdZe2wHFejzPQfszt+RSeelxsNCj2ASGjM+f973OEsZymKSV6ibNTjwaHLbVwt0Ts0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.221.43 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com Received: from mail-wr1-f43.google.com (mail-wr1-f43.google.com [209.85.221.43]) by mx.zohomail.com with SMTPS id 1625322005607498.46969447343645; Sat, 3 Jul 2021 07:20:05 -0700 (PDT) Received: by mail-wr1-f43.google.com with SMTP id f14so15765336wrs.6 for ; Sat, 03 Jul 2021 07:20:05 -0700 (PDT) Return-Path: Return-Path: Received: from x1w.. (184.red-95-127-187.staticip.rima-tde.net. [95.127.187.184]) by smtp.gmail.com with ESMTPSA id o20sm15819840wms.3.2021.07.03.07.20.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 03 Jul 2021 07:20:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=aq9RhqFMdHMQ/C3FaLLzkrpqAo3tTe9bTGzjaDhxHgI=; b=P5ZupiFxF+IHegamNDa9uuorSXlXUoZlbGKxWdLv92Ows+zztTCr4lCEbqlW/o/jVC ySra7+RRoHjoJs2NJEhWhrjuy1WRx/jQ84Eh5JRozv6jEpk2f64wkq3ycLEBwsC+H8Xi 2quOKkQV2rgSBVC2kGsu2EhqWWAsW5v6plI+hI4xcbPzT1Ddri3cnk7YYOgtf5L/jyQM hlpgdHLLGJlm7EvCMDqfgCs3dKp6CZ+Qg/Y9n5NSb9mYruvcCtqkFeJIC3Ej+uyQA/Sv /8gZ6RdalgexVr0MS+4acbdU6xTMSUeQ1TQYFBeof6LdhLoargelSrdFURmw4g9v1A4+ bG3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=aq9RhqFMdHMQ/C3FaLLzkrpqAo3tTe9bTGzjaDhxHgI=; b=QajE+Vc0xsdG62MjPZi9+onUV258Yt2p3oEhpOVpZaeyew5AzIMrhrwiv1r8+b4ZGb tuVYYsgHI2bolX7UD1d74XdLCwuE0hXuvgERe2qsZBvyrwzoS1W97kKN8x/Hwn/Je2s0 VQmGDIyZ7XD1eNVIL9xmL8aNT3pwuMJ7qQvUMHPpIL/QRbOLSg5+vXN1rpYxz182wtAT 4UrESiQmgtnFKUtFiN4FIh7SLJTzRJnbG/KTsMKfKHu8h2qt9nd/bD9fMLkoBiO/BwCx myFNVBxAn0GHLAWl3sj2B5ecy9SFMoCCY6EuM17dhqeAI86QW+xB4HZzcKNrgItQ7NDO iyPg== X-Gm-Message-State: AOAM5314NGg65UhWfpkLwdAN1uIg1CTX0TAiZJakXb5izJ/ipChHwrPQ 4TqD5/OIbZZ0CvDmVh4nQpM= X-Google-Smtp-Source: ABdhPJxYi1nPg0GvkF38gRbVvdP2jA0L09d9vtdxjZrIHSguTqiIrCYsTQuMM3eyZAVEGBJij4qw1w== X-Received: by 2002:adf:cf09:: with SMTP id o9mr5732970wrj.40.1625322003716; Sat, 03 Jul 2021 07:20:03 -0700 (PDT) Sender: =?UTF-8?Q?Philippe_Mathieu=2DDaud=C3=A9?= From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Cc: Laurent Vivier , Jason Wang , Finn Thain , Mark Cave-Ayland , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH 2/6] dp8393x: don't force 32-bit register access Date: Sat, 3 Jul 2021 16:19:43 +0200 Message-Id: <20210703141947.352295-3-f4bug@amsat.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210703141947.352295-1-f4bug@amsat.org> References: <20210703141947.352295-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1625322008634100001 From: Mark Cave-Ayland Commit 3fe9a838ec "dp8393x: Always use 32-bit accesses" assumed that all ac= cesses to the registers were 32-bit but this is actually not the case. The access = size is determined by the CPU instruction used and not the number of physical addre= ss lines. The big_endian workaround applied to the register read/writes was actually = caused by forcing the access size to 32-bit when the guest OS was using a 16-bit a= ccess. Since the registers are 16-bit then we can simply set .impl.min_access to 2= and then the memory API will automatically do the right thing for both 16-bit a= ccesses used by Linux and 32-bit accesses used by the MacOS toolbox ROM. Signed-off-by: Mark Cave-Ayland Fixes: 3fe9a838ec ("dp8393x: Always use 32-bit accesses") Tested-by: Finn Thain Message-Id: <20210625065401.30170-9-mark.cave-ayland@ilande.co.uk> [PMD: dp8393x_ops.impl.max_access_size 4 -> 2] Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- hw/net/dp8393x.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/hw/net/dp8393x.c b/hw/net/dp8393x.c index 11810c9b600..d16ade2b198 100644 --- a/hw/net/dp8393x.c +++ b/hw/net/dp8393x.c @@ -602,15 +602,14 @@ static uint64_t dp8393x_read(void *opaque, hwaddr add= r, unsigned int size) =20 trace_dp8393x_read(reg, reg_names[reg], val, size); =20 - return s->big_endian ? val << 16 : val; + return val; } =20 -static void dp8393x_write(void *opaque, hwaddr addr, uint64_t data, +static void dp8393x_write(void *opaque, hwaddr addr, uint64_t val, unsigned int size) { dp8393xState *s =3D opaque; int reg =3D addr >> s->it_shift; - uint32_t val =3D s->big_endian ? data >> 16 : data; =20 trace_dp8393x_write(reg, reg_names[reg], val, size); =20 @@ -694,8 +693,8 @@ static void dp8393x_write(void *opaque, hwaddr addr, ui= nt64_t data, static const MemoryRegionOps dp8393x_ops =3D { .read =3D dp8393x_read, .write =3D dp8393x_write, - .impl.min_access_size =3D 4, - .impl.max_access_size =3D 4, + .impl.min_access_size =3D 2, + .impl.max_access_size =3D 2, .endianness =3D DEVICE_NATIVE_ENDIAN, }; =20 --=20 2.31.1 From nobody Mon Feb 9 14:35:49 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of _spf.google.com designates 209.85.128.43 as permitted sender) client-ip=209.85.128.43; envelope-from=philippe.mathieu.daude@gmail.com; helo=mail-wm1-f43.google.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.128.43 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1625322011; cv=none; d=zohomail.com; s=zohoarc; b=Ew9HwOrdQPK1cyU8al4+THuXpeUE95Dxxp2GBliuwTi7IULEQ0mi/E28vmy6fyFy2DKDd7vCehHtDrHwwiod732wfsCYF9SiSuxx7+KWpB9qhNx0HalWBQJ08FD4bGDNQonx39x5iM+J7b+p/AhSaq5Sblpvq5JY6UaszVOBC9A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1625322011; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Em2fgVP5QhNPdopIzF7iM8J887QSPYAiCh7SUQHMHl8=; b=Omywm39A+ConmH2VO0vUxhO9oGp5mTvzzkGLeINTJuP/E0e2qoNpw6B32SnBPuxzLiK5xI2siAuJPd1xCchRQyOKJrjtScc+9Ly7dDCPLsQpWD2q3SNtY3hRFIAhtWfsPSsfVn0LNRGoqsgExZJQIX3F+rLQLoG3+8xfZjXHQEA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.128.43 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com Received: from mail-wm1-f43.google.com (mail-wm1-f43.google.com [209.85.128.43]) by mx.zohomail.com with SMTPS id 1625322011301128.93419613143897; Sat, 3 Jul 2021 07:20:11 -0700 (PDT) Received: by mail-wm1-f43.google.com with SMTP id n33so895399wms.1 for ; Sat, 03 Jul 2021 07:20:10 -0700 (PDT) Return-Path: Return-Path: Received: from x1w.. (184.red-95-127-187.staticip.rima-tde.net. [95.127.187.184]) by smtp.gmail.com with ESMTPSA id l16sm16664993wmj.47.2021.07.03.07.20.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 03 Jul 2021 07:20:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Em2fgVP5QhNPdopIzF7iM8J887QSPYAiCh7SUQHMHl8=; b=HkVaSweBPW4Dpr+P/I9JhMIL/XOyEyVJ6HuJ8+oYntHpNbbUIrMJ8toKynQazGVpjP 0YWbukBQoFYHcNfPMSYUb3FS3EiTTbUG2ml0z4XAXSjsopQ9/uMkzf91/t3dpLXmhgz+ /vJkMN/59UMcfwxh09G1yDijm+6l1+r2mZEIhKeUq2YHHV8MMYq2zdmsMl7M/xKN7NnV VSBK9/UZ+Nev7fSZS5B/iHZIP+KyGpxGrvzdmp58wzomi6md//R3zaQBUQW1TCDLPaHt RYlgt3r1eLj4Hog0Y/qDjb8I+y7s+/YZHaFHCJGbVm30aBEV9Bw3lhGnDdE0gTl+IiNe H9hw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=Em2fgVP5QhNPdopIzF7iM8J887QSPYAiCh7SUQHMHl8=; b=DxPiRog4X3itBTxcU9gnxcVlJFibdkrsBR8PklgDvtAJrQQAmqaRP5ctLqsgzMgHfv CafXa9YS0XL9B+KNr1nHpckx13/pLS4qI/jkgvrmUN8e1GrJ5YOvwVK3EOnXZVI0uees mWxvMlmcGBmnfnd/14n5CvC1kpOlxLL3IfNy5gzERWOnovso15faUdI60j3LjQcyoMXm Dm/ikRF4kpE6avqUDhMpwjWPP406xNaRHIdfzv9XMba2zZpKXA07wcffVt/RYcyu+Gfh BmfZJMCH3GRdh1/SRdNdoMjOCAJiW3zqVAaPWWnAvK2dV+ksJ+BUj41b8R1jnVGCQHZA n4eg== X-Gm-Message-State: AOAM531LxOHhom9Red6uqTxXe4ocViRr9e2rqB4TzQMWMR9FeRwB62t/ 89F6i4O/RgGsA90hE6pgc+c= X-Google-Smtp-Source: ABdhPJyHnPSv4yprU/GCWAhZjdpuJyNIUH2i2TtH5dyR53QSePZULbHh6CcSsaKtg6lc+3ENLgu7Lg== X-Received: by 2002:a05:600c:2215:: with SMTP id z21mr5080651wml.92.1625322009571; Sat, 03 Jul 2021 07:20:09 -0700 (PDT) Sender: =?UTF-8?Q?Philippe_Mathieu=2DDaud=C3=A9?= From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Cc: Laurent Vivier , Jason Wang , Finn Thain , Mark Cave-Ayland , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [RFC PATCH 3/6] dp8393x: Restrict bus access to 16/32-bit operations Date: Sat, 3 Jul 2021 16:19:44 +0200 Message-Id: <20210703141947.352295-4-f4bug@amsat.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210703141947.352295-1-f4bug@amsat.org> References: <20210703141947.352295-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1625322012837100001 Per the DP83932C datasheet from July 1995: 1. Functional Description 1.3 DATA WIDTH AND BYTE ORDERING The SONIC can be programmed to operate with either 32-bit or 16-bit wide memory. Restrict the memory bus to reject 8/64-bit accesses. Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- hw/net/dp8393x.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hw/net/dp8393x.c b/hw/net/dp8393x.c index d16ade2b198..c9b478c127c 100644 --- a/hw/net/dp8393x.c +++ b/hw/net/dp8393x.c @@ -695,6 +695,8 @@ static const MemoryRegionOps dp8393x_ops =3D { .write =3D dp8393x_write, .impl.min_access_size =3D 2, .impl.max_access_size =3D 2, + .valid.min_access_size =3D 2, + .valid.max_access_size =3D 4, .endianness =3D DEVICE_NATIVE_ENDIAN, }; =20 --=20 2.31.1 From nobody Mon Feb 9 14:35:49 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of _spf.google.com designates 209.85.128.46 as permitted sender) client-ip=209.85.128.46; envelope-from=philippe.mathieu.daude@gmail.com; helo=mail-wm1-f46.google.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.128.46 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1625322017; cv=none; d=zohomail.com; s=zohoarc; b=j54mzEZM10dxOC60nWW207Ow02wrCauSwqxkJuSKbH1TsRLS5oafdgz74J+eil4ZmO68v8ai4zE5F4xKAixrNTchPIhO3a1Un0hbH9UqAaF4z2cwr1YJm4ib3m1T4yc3CIoEaIDIYcftYBZ1Tc+MIR8Zo5wldHgaoED8fkKVA7c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1625322017; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Sender:Subject:To; bh=BBcm2+wolkRxeEQOcXfgwJq5vFDQEScUBa14FBrpn3k=; b=f6rEqY2uTEXBwsZw2u3nuxxzvL/s+66KE8oyhhTvNvja+opnAMYMETU9ghhJPoo1l9ySc2JXIp255ugvdm2WZWtlaSQqAgLsrPNs84VFCvzuIJuXJ759Hh7QBvHLg8v692yzd9Wh9RIvhVuPZiDSOxshUHmlYyei0boyu6iNIjM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.128.46 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.46]) by mx.zohomail.com with SMTPS id 162532201727877.83176417917957; Sat, 3 Jul 2021 07:20:17 -0700 (PDT) Received: by mail-wm1-f46.google.com with SMTP id o33-20020a05600c5121b02901e360c98c08so10913755wms.5 for ; Sat, 03 Jul 2021 07:20:16 -0700 (PDT) Return-Path: Return-Path: Received: from x1w.. (184.red-95-127-187.staticip.rima-tde.net. [95.127.187.184]) by smtp.gmail.com with ESMTPSA id q5sm6445998wrx.57.2021.07.03.07.20.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 03 Jul 2021 07:20:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=BBcm2+wolkRxeEQOcXfgwJq5vFDQEScUBa14FBrpn3k=; b=Ae+hrxsI1VSH7L+2I1trurB0AO6G23kUV4BogxdwP5XYzy0o8itrEvdLaKz5T01xh9 TW/KLds9aAx1QmAMnhp8BXm96RvuiMnARs1t1LTS5GDD6BqR5wNfYlkYSBr8MsX8Yu9H 2mLNheO7LIfYmlQ2cO+byEE0Ncrlgp6FCpghQYPbDn2lfkBA6WOldrfD7s/cSg8U+f18 eYg9HgHU2RTVm8f0V+Fjm6rWE8OsGXIgxaZv4UpipDb4X/Y2J1kFazK/9p/j149eSo9t 7jtXsLmAN4mdrnqZzBroK/4ljoew2/UUZmoFf0Gt3WK1BbJo9hK5pebL/cDq9mJ2Aof1 GSzg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=BBcm2+wolkRxeEQOcXfgwJq5vFDQEScUBa14FBrpn3k=; b=bNBk75HQ6BAx9ssCFlvmWMGYCKirG+zZxmkdYnouOnmQkTBovvMPCHXTMR5W8+Z4G/ FjLZEOmYWVk1bXZokzw1S7zAIj2ZV/2HIP4NcO3k9sYpT4AVxzPmILhjYIJqwB155CbL DiTbbBGSGeOAYD3S/AlZGnr1Ha+L5zIduLdJr6H6RLrf/2pzbBMwgym2lDTPRbC05Dv/ GpjZq8KnYiQnWB/4cAPvoyHSbymljSWNaDnOogf6d1lAgYDqMXOJcVWovUOm0UbcfZPl DFL5/r0eIchJXQpc87Bd43rf3X3lfsIuYdg+eYb5AA8613D/qi6DaDaIr4YEdGthh/c5 bqNg== X-Gm-Message-State: AOAM532bRrjnCWzAPVGsQql1f7VCWBDZs46tK09bLM31qB9OOi8hTF/H 57T9sLhoOy5GfjzF7ZQUbcE= X-Google-Smtp-Source: ABdhPJxUB+YnD2kavDllvKLJe5nPqx0ujN+2pJ5uQm3RYTh4qI+RY7juayefUvc5a+v9HvES1B3FAw== X-Received: by 2002:a05:600c:21da:: with SMTP id x26mr5221843wmj.141.1625322015568; Sat, 03 Jul 2021 07:20:15 -0700 (PDT) Sender: =?UTF-8?Q?Philippe_Mathieu=2DDaud=C3=A9?= From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Cc: Laurent Vivier , Jason Wang , Finn Thain , Mark Cave-Ayland , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [RFC PATCH 4/6] dp8393x: Store CAM registers as 16-bit Date: Sat, 3 Jul 2021 16:19:45 +0200 Message-Id: <20210703141947.352295-5-f4bug@amsat.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210703141947.352295-1-f4bug@amsat.org> References: <20210703141947.352295-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1625322018519100001 Per the DP83932C datasheet from July 1995: 4.0 SONIC Registers 4.1 THE CAM UNIT The Content Addressable Memory (CAM) consists of sixteen 48-bit entries for complete address filtering of network packets. Each entry corresponds to a 48-bit destination address that is user programmable and can contain any combination of Multicast or Physical addresses. Each entry is partitioned into three 16-bit CAM cells accessible through CAM Address Ports (CAP 2, CAP 1 and CAP 0) with CAP0 corresponding to the least significant 16 bits of the Destination Address and CAP2 corresponding to the most significant bits. Store the CAM registers as 16-bit as it simplifies the code. There is no change in the migration stream. Signed-off-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Mark Cave-Ayland Tested-by: Mark Cave-Ayland --- hw/net/dp8393x.c | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/hw/net/dp8393x.c b/hw/net/dp8393x.c index c9b478c127c..e0055b178b1 100644 --- a/hw/net/dp8393x.c +++ b/hw/net/dp8393x.c @@ -157,7 +157,7 @@ struct dp8393xState { MemoryRegion mmio; =20 /* Registers */ - uint8_t cam[16][6]; + uint16_t cam[16][3]; uint16_t regs[0x40]; =20 /* Temporaries */ @@ -280,15 +280,13 @@ static void dp8393x_do_load_cam(dp8393xState *s) address_space_read(&s->as, dp8393x_cdp(s), MEMTXATTRS_UNSPECIFIED, s->data, size); index =3D dp8393x_get(s, width, 0) & 0xf; - s->cam[index][0] =3D dp8393x_get(s, width, 1) & 0xff; - s->cam[index][1] =3D dp8393x_get(s, width, 1) >> 8; - s->cam[index][2] =3D dp8393x_get(s, width, 2) & 0xff; - s->cam[index][3] =3D dp8393x_get(s, width, 2) >> 8; - s->cam[index][4] =3D dp8393x_get(s, width, 3) & 0xff; - s->cam[index][5] =3D dp8393x_get(s, width, 3) >> 8; - trace_dp8393x_load_cam(index, s->cam[index][0], s->cam[index][1], - s->cam[index][2], s->cam[index][3], - s->cam[index][4], s->cam[index][5]); + s->cam[index][0] =3D dp8393x_get(s, width, 1); + s->cam[index][1] =3D dp8393x_get(s, width, 2); + s->cam[index][2] =3D dp8393x_get(s, width, 3); + trace_dp8393x_load_cam(index, + s->cam[index][0] >> 8, s->cam[index][0] & 0= xff, + s->cam[index][1] >> 8, s->cam[index][1] & 0= xff, + s->cam[index][2] >> 8, s->cam[index][2] & 0= xff); /* Move to next entry */ s->regs[SONIC_CDC]--; s->regs[SONIC_CDP] +=3D size; @@ -591,8 +589,7 @@ static uint64_t dp8393x_read(void *opaque, hwaddr addr,= unsigned int size) case SONIC_CAP1: case SONIC_CAP0: if (s->regs[SONIC_CR] & SONIC_CR_RST) { - val =3D s->cam[s->regs[SONIC_CEP] & 0xf][2 * (SONIC_CAP0 - reg= ) + 1] << 8; - val |=3D s->cam[s->regs[SONIC_CEP] & 0xf][2 * (SONIC_CAP0 - re= g)]; + val =3D s->cam[s->regs[SONIC_CEP] & 0xf][2 * (SONIC_CAP0 - reg= )]; } break; /* All other registers have no special contraints */ @@ -987,7 +984,7 @@ static const VMStateDescription vmstate_dp8393x =3D { .version_id =3D 0, .minimum_version_id =3D 0, .fields =3D (VMStateField []) { - VMSTATE_BUFFER_UNSAFE(cam, dp8393xState, 0, 16 * 6), + VMSTATE_BUFFER_UNSAFE(cam, dp8393xState, 0, 16 * 3 * 2), VMSTATE_UINT16_ARRAY(regs, dp8393xState, 0x40), VMSTATE_END_OF_LIST() } --=20 2.31.1 From nobody Mon Feb 9 14:35:49 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of _spf.google.com designates 209.85.128.48 as permitted sender) client-ip=209.85.128.48; envelope-from=philippe.mathieu.daude@gmail.com; helo=mail-wm1-f48.google.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.128.48 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1625322023; cv=none; d=zohomail.com; s=zohoarc; b=Y6qorn3UJy5OndOKS619OyP7wJrO8UbZ4pAM2hKutRVFrgKi1bZ1CqTgFx7k+p5OhHM0sJMDRgubXuskcMzAaRivtxh82rY9uORgZc3pbqW8s11XQmyrgzPA6aB8KVI5OWosAjIbaEtln94l5pF0kLRiPo2GzfMTK4lBgVYZgmQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1625322023; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Sender:Subject:To; bh=gGNpFpQ65DTmvgJho/8X8gH0JzWqfLCEmto+spU07GY=; b=VaQJsJ/3Bm5RMagTqk5j/jyla+xsTqUaw0fZsqUqFOZPzLuTaXx+smuZuHGQ7fMwAIgEccfwM7+Y36nG3300XrgWz48YK6Q4tKL27cyoIe8L9fdL+kzE0UQJp7ZgJ28XT4d1aU1h3PDRi1jTtTaHK0Jd/9abgmonRwpnz5eegRQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.128.48 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.48]) by mx.zohomail.com with SMTPS id 1625322023318617.1336866820308; Sat, 3 Jul 2021 07:20:23 -0700 (PDT) Received: by mail-wm1-f48.google.com with SMTP id j39-20020a05600c1c27b029020028e48b8fso2569659wms.0 for ; Sat, 03 Jul 2021 07:20:22 -0700 (PDT) Return-Path: Return-Path: Received: from x1w.. (184.red-95-127-187.staticip.rima-tde.net. [95.127.187.184]) by smtp.gmail.com with ESMTPSA id q6sm15930403wma.16.2021.07.03.07.20.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 03 Jul 2021 07:20:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=gGNpFpQ65DTmvgJho/8X8gH0JzWqfLCEmto+spU07GY=; b=fT7aQ1X2kIFi/OXIQ/P74DKNbB9xVXJtWKIFyIGkB2RSPWAOxEY99xJ1AUx6SDm1fa zt7RSr2IJ4yV29+el/4oqZmFWVmCEOzFuDvWUcf24VBbiFSBrXWLM/9CRwiEUgD2R5cy /2dx4RxCbFDawZTIh+grLaTsgr1T4OpfC9OXNBWpMYzsqNqH8gnzc71rdeq252zifhbM UriSSr/yIrIFeHU5cJv6T9wA78bxAcLQ/AwEQILcn0qzzikfPSVMC5G8Xxoo6I40Ka/h VeAIKFyk/hdJH+1mbRiIGrznTmc9EHoJ2AfCl1uGUGhT91fkzQ/37kqpLdepWMwnaYXu z0fw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=gGNpFpQ65DTmvgJho/8X8gH0JzWqfLCEmto+spU07GY=; b=gC0uwuR7jLib/7lsZC98m08sEThvJmbuIsmTquAuti4jFqG1H5eO2r83hKanr9D7QX f98N8MsJwUJQXlTUEXlXTGcw3BpX/N98viAZbPYpG3u3GKNFZSxS2GJkctELGXnqL9kP JiAl2/2yPGcooIcm6GwfZVSvlDRMdWStvpmEIj5f5bqtwNc/AjnUFDavrbL4zM4GiT4/ /gB8ScmK4llfrICptdQYyu11jVlbbcZn2UpPlD2ogYTpAzkIljzpF7NpMei0lhJrmxhP XhpsJtBFIvLmzaepbmyWmwkbIJE1CUKxhvX4F6WgwCMadFqa7/7DwPAtU0geclAfu9fZ U9zQ== X-Gm-Message-State: AOAM5304mMSZ2CUxKlu7WFAWxtVJuAhcL/uPnxyidJttTLQkPN1TsvKm f/tUTGOe/sMv9nqxt6IpIFs= X-Google-Smtp-Source: ABdhPJzEoIqFs2tcbEZQgbzyyt22QqHrY/fr3RZqKAOn3GtlgoAWJbELkWdTU8gZyt8QTTUQKVOJZA== X-Received: by 2002:a1c:1d07:: with SMTP id d7mr5427366wmd.180.1625322021553; Sat, 03 Jul 2021 07:20:21 -0700 (PDT) Sender: =?UTF-8?Q?Philippe_Mathieu=2DDaud=C3=A9?= From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Cc: Laurent Vivier , Jason Wang , Finn Thain , Mark Cave-Ayland , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH 5/6] dp8393x: Replace address_space_rw(is_write=1) by address_space_write() Date: Sat, 3 Jul 2021 16:19:46 +0200 Message-Id: <20210703141947.352295-6-f4bug@amsat.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210703141947.352295-1-f4bug@amsat.org> References: <20210703141947.352295-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1625322024972100001 Signed-off-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Mark Cave-Ayland Tested-by: Mark Cave-Ayland --- hw/net/dp8393x.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/hw/net/dp8393x.c b/hw/net/dp8393x.c index e0055b178b1..bbe241ef9db 100644 --- a/hw/net/dp8393x.c +++ b/hw/net/dp8393x.c @@ -814,8 +814,8 @@ static ssize_t dp8393x_receive(NetClientState *nc, cons= t uint8_t * buf, size =3D sizeof(uint16_t) * width; address =3D dp8393x_crda(s) + sizeof(uint16_t) * 6 * width; dp8393x_put(s, width, 0, 0); - address_space_rw(&s->as, address, MEMTXATTRS_UNSPECIFIED, - (uint8_t *)s->data, size, 1); + address_space_write(&s->as, address, MEMTXATTRS_UNSPECIFIED, + (uint8_t *)s->data, size); =20 /* Move to next descriptor */ s->regs[SONIC_CRDA] =3D s->regs[SONIC_LLFA]; @@ -844,8 +844,8 @@ static ssize_t dp8393x_receive(NetClientState *nc, cons= t uint8_t * buf, /* Pad short packets to keep pointers aligned */ if (rx_len < padded_len) { size =3D padded_len - rx_len; - address_space_rw(&s->as, address, MEMTXATTRS_UNSPECIFIED, - (uint8_t *)"\xFF\xFF\xFF", size, 1); + address_space_write(&s->as, address, MEMTXATTRS_UNSPECIFIED, + (uint8_t *)"\xFF\xFF\xFF", size); address +=3D size; } =20 --=20 2.31.1 From nobody Mon Feb 9 14:35:49 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of _spf.google.com designates 209.85.128.49 as permitted sender) client-ip=209.85.128.49; envelope-from=philippe.mathieu.daude@gmail.com; helo=mail-wm1-f49.google.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.128.49 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1625322029; cv=none; d=zohomail.com; s=zohoarc; b=AnSrEIdw1Azo8jhl9Ovc6YjYU8Lpj2MwqJyOyV2aXSTluQ3k44KpelQVnFBh1tgkd+3iYi2wzjaQ9Sw/TgQjdlqUK0m6DOHRiGVDebKNMmOWkK0PFq/o9ysIM00/Pw3iTmCntFsarxOYyWSuI18rWyqog/Phjl5F5ZOUIH8EIzc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1625322029; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Sender:Subject:To; bh=DpIkyfAuyEzLWW94MpBDpRoPQ4tAnNvYPvY7veMTLbs=; b=F9Wg7Yn8dVPW0BX64Sg66YHVpYfphtsVZ9HvJRY76hcqfSfE2A2FnP225RQDpWupLrmHvSjkb9OvDH0TYkG/8ILo+Nq2bQTq0sLpIW/yBOOakvSl0ZNkjqHJ+NGkvANt+sUJgjlSFKOBmWRFU2AZ8+YWdO8TXYAXAZ5bp6t+6Gc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.128.49 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com Received: from mail-wm1-f49.google.com (mail-wm1-f49.google.com [209.85.128.49]) by mx.zohomail.com with SMTPS id 1625322029718123.08210600924929; Sat, 3 Jul 2021 07:20:29 -0700 (PDT) Received: by mail-wm1-f49.google.com with SMTP id b14-20020a1c1b0e0000b02901fc3a62af78so4364092wmb.3 for ; Sat, 03 Jul 2021 07:20:29 -0700 (PDT) Return-Path: Return-Path: Received: from x1w.. (184.red-95-127-187.staticip.rima-tde.net. [95.127.187.184]) by smtp.gmail.com with ESMTPSA id z7sm6283638wmp.34.2021.07.03.07.20.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 03 Jul 2021 07:20:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=DpIkyfAuyEzLWW94MpBDpRoPQ4tAnNvYPvY7veMTLbs=; b=XYLFAlt7V9RZNo0iRjURDxfhqkLypLi4KCCJwMiPPj/6XjFYkGwfESsx8zSZq+oj1R aVK6MNrm0Wb0HZNvrfhQ1IFQvc0w2QwnR5XpQUY8lhwKpbJenjzZfWSNi+Pxpmtf7p0+ tbYkrB+0KM0TX7Af9Fi/AYXjUyVh634Hk0FJG8DA7jO/ySWPP+ZEnrJ+tnoaxLvvFQcX Xpnm1IjJa5xiPavLAYmfDqsTZbS+70aYk9nzXCUWfEawWR6QD2ndsNDyOhH8kPh6ZXKn 3hsoZ+u6T7mtZmKmw19GYk9FT/dfwxQU1iRj/xp+933nE/wgBqXr9bf2R4w+9WXIB7i3 yS0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=DpIkyfAuyEzLWW94MpBDpRoPQ4tAnNvYPvY7veMTLbs=; b=Z23KRaqWYNlJh2nTTrfLLEe7fyBqy1F89IGyA2xv6rVC6CSbXRJ38DIq8WahogpSyz q3h0sisusORa7ryJOzj7M0e5FqMoq5LIteuo5Lq7BhK4CEgUf2Wgj5FoL5KgPyK+9mRW 2RzlXyL6/U80OmKXWAQyhqvYzStdilzw9OHq8vxvh+FMWK5P3igJVigUl+LVX6KHxxV0 HzY7U924Wl1Cl/CekF5TxiCwsxprPYdACqObvwv1mZvJ9chWU5FCa88+bkSl+Lxpp1Iu nuNhLybwxxGclB0tmOkde2hzvVSZNcrJStHBhN2l00dxMtT5BMj3EXdvgzGiP05kDzhk ZYzA== X-Gm-Message-State: AOAM5339dWWRQVoWF83iApAKtoIJaER/KhglVUcRRhX6kMRdQQ+S+tCz 9jD0jXKiX6+nRu0Tzi043qg= X-Google-Smtp-Source: ABdhPJwyuDo+Aq+uKNzchHrrWGyNdxWyj5eBdl7/rwsCdaK7PKasNXW3JbEamCD6vufhCmh4vjjpyg== X-Received: by 2002:a7b:cbc5:: with SMTP id n5mr5461710wmi.39.1625322027914; Sat, 03 Jul 2021 07:20:27 -0700 (PDT) Sender: =?UTF-8?Q?Philippe_Mathieu=2DDaud=C3=A9?= From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Cc: Laurent Vivier , Jason Wang , Finn Thain , Mark Cave-Ayland , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [RFC PATCH 6/6] dp8393x: Rewrite dp8393x_get() / dp8393x_put() Date: Sat, 3 Jul 2021 16:19:47 +0200 Message-Id: <20210703141947.352295-7-f4bug@amsat.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210703141947.352295-1-f4bug@amsat.org> References: <20210703141947.352295-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1625322031316100001 Instead of accessing N registers via a single address_space API call using a temporary buffer (stored in the device state) and updating each register, move the address_space call in the register put/get. The load/store and word size checks are moved to put/get too. This simplifies a bit, making the code easier to read. Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- hw/net/dp8393x.c | 157 ++++++++++++++++++----------------------------- 1 file changed, 60 insertions(+), 97 deletions(-) diff --git a/hw/net/dp8393x.c b/hw/net/dp8393x.c index bbe241ef9db..db9cfd786f5 100644 --- a/hw/net/dp8393x.c +++ b/hw/net/dp8393x.c @@ -162,7 +162,6 @@ struct dp8393xState { =20 /* Temporaries */ uint8_t tx_buffer[0x10000]; - uint16_t data[12]; int loopback_packet; =20 /* Memory access */ @@ -219,34 +218,48 @@ static uint32_t dp8393x_wt(dp8393xState *s) return s->regs[SONIC_WT1] << 16 | s->regs[SONIC_WT0]; } =20 -static uint16_t dp8393x_get(dp8393xState *s, int width, int offset) +static uint16_t dp8393x_get(dp8393xState *s, hwaddr addr, unsigned ofs16) { + const MemTxAttrs attrs =3D MEMTXATTRS_UNSPECIFIED; uint16_t val; =20 - if (s->big_endian) { - val =3D be16_to_cpu(s->data[offset * width + width - 1]); + if (s->regs[SONIC_DCR] & SONIC_DCR_DW) { + addr +=3D 2 * ofs16; + if (s->big_endian) { + val =3D address_space_ldl_be(&s->as, addr, attrs, NULL); + } else { + val =3D address_space_ldl_le(&s->as, addr, attrs, NULL); + } } else { - val =3D le16_to_cpu(s->data[offset * width]); + addr +=3D 1 * ofs16; + if (s->big_endian) { + val =3D address_space_lduw_be(&s->as, addr, attrs, NULL); + } else { + val =3D address_space_lduw_le(&s->as, addr, attrs, NULL); + } } + return val; } =20 -static void dp8393x_put(dp8393xState *s, int width, int offset, - uint16_t val) +static void dp8393x_put(dp8393xState *s, + hwaddr addr, unsigned ofs16, uint16_t val) { - if (s->big_endian) { - if (width =3D=3D 2) { - s->data[offset * 2] =3D 0; - s->data[offset * 2 + 1] =3D cpu_to_be16(val); + const MemTxAttrs attrs =3D MEMTXATTRS_UNSPECIFIED; + + if (s->regs[SONIC_DCR] & SONIC_DCR_DW) { + addr +=3D 2 * ofs16; + if (s->big_endian) { + address_space_stl_be(&s->as, addr, val, attrs, NULL); } else { - s->data[offset] =3D cpu_to_be16(val); + address_space_stl_le(&s->as, addr, val, attrs, NULL); } } else { - if (width =3D=3D 2) { - s->data[offset * 2] =3D cpu_to_le16(val); - s->data[offset * 2 + 1] =3D 0; + addr +=3D 1 * ofs16; + if (s->big_endian) { + address_space_stw_be(&s->as, addr, val, attrs, NULL); } else { - s->data[offset] =3D cpu_to_le16(val); + address_space_stw_le(&s->as, addr, val, attrs, NULL); } } } @@ -277,12 +290,10 @@ static void dp8393x_do_load_cam(dp8393xState *s) =20 while (s->regs[SONIC_CDC] & 0x1f) { /* Fill current entry */ - address_space_read(&s->as, dp8393x_cdp(s), - MEMTXATTRS_UNSPECIFIED, s->data, size); - index =3D dp8393x_get(s, width, 0) & 0xf; - s->cam[index][0] =3D dp8393x_get(s, width, 1); - s->cam[index][1] =3D dp8393x_get(s, width, 2); - s->cam[index][2] =3D dp8393x_get(s, width, 3); + index =3D dp8393x_get(s, dp8393x_cdp(s), 0) & 0xf; + s->cam[index][0] =3D dp8393x_get(s, dp8393x_cdp(s), 1); + s->cam[index][1] =3D dp8393x_get(s, dp8393x_cdp(s), 2); + s->cam[index][2] =3D dp8393x_get(s, dp8393x_cdp(s), 3); trace_dp8393x_load_cam(index, s->cam[index][0] >> 8, s->cam[index][0] & 0= xff, s->cam[index][1] >> 8, s->cam[index][1] & 0= xff, @@ -293,9 +304,7 @@ static void dp8393x_do_load_cam(dp8393xState *s) } =20 /* Read CAM enable */ - address_space_read(&s->as, dp8393x_cdp(s), - MEMTXATTRS_UNSPECIFIED, s->data, size); - s->regs[SONIC_CE] =3D dp8393x_get(s, width, 0); + s->regs[SONIC_CE] =3D dp8393x_get(s, dp8393x_cdp(s), 0); trace_dp8393x_load_cam_done(s->regs[SONIC_CE]); =20 /* Done */ @@ -311,14 +320,12 @@ static void dp8393x_do_read_rra(dp8393xState *s) /* Read memory */ width =3D (s->regs[SONIC_DCR] & SONIC_DCR_DW) ? 2 : 1; size =3D sizeof(uint16_t) * 4 * width; - address_space_read(&s->as, dp8393x_rrp(s), - MEMTXATTRS_UNSPECIFIED, s->data, size); =20 /* Update SONIC registers */ - s->regs[SONIC_CRBA0] =3D dp8393x_get(s, width, 0); - s->regs[SONIC_CRBA1] =3D dp8393x_get(s, width, 1); - s->regs[SONIC_RBWC0] =3D dp8393x_get(s, width, 2); - s->regs[SONIC_RBWC1] =3D dp8393x_get(s, width, 3); + s->regs[SONIC_CRBA0] =3D dp8393x_get(s, dp8393x_rrp(s), 0); + s->regs[SONIC_CRBA1] =3D dp8393x_get(s, dp8393x_rrp(s), 1); + s->regs[SONIC_RBWC0] =3D dp8393x_get(s, dp8393x_rrp(s), 2); + s->regs[SONIC_RBWC1] =3D dp8393x_get(s, dp8393x_rrp(s), 3); trace_dp8393x_read_rra_regs(s->regs[SONIC_CRBA0], s->regs[SONIC_CRBA1], s->regs[SONIC_RBWC0], s->regs[SONIC_RBWC1]= ); =20 @@ -414,28 +421,22 @@ static void dp8393x_do_receiver_disable(dp8393xState = *s) static void dp8393x_do_transmit_packets(dp8393xState *s) { NetClientState *nc =3D qemu_get_queue(s->nic); - int width, size; int tx_len, len; uint16_t i; =20 - width =3D (s->regs[SONIC_DCR] & SONIC_DCR_DW) ? 2 : 1; - while (1) { /* Read memory */ - size =3D sizeof(uint16_t) * 6 * width; s->regs[SONIC_TTDA] =3D s->regs[SONIC_CTDA]; trace_dp8393x_transmit_packet(dp8393x_ttda(s)); - address_space_read(&s->as, dp8393x_ttda(s) + sizeof(uint16_t) * wi= dth, - MEMTXATTRS_UNSPECIFIED, s->data, size); tx_len =3D 0; =20 /* Update registers */ - s->regs[SONIC_TCR] =3D dp8393x_get(s, width, 0) & 0xf000; - s->regs[SONIC_TPS] =3D dp8393x_get(s, width, 1); - s->regs[SONIC_TFC] =3D dp8393x_get(s, width, 2); - s->regs[SONIC_TSA0] =3D dp8393x_get(s, width, 3); - s->regs[SONIC_TSA1] =3D dp8393x_get(s, width, 4); - s->regs[SONIC_TFS] =3D dp8393x_get(s, width, 5); + s->regs[SONIC_TCR] =3D dp8393x_get(s, dp8393x_ttda(s), 0) & 0xf000; + s->regs[SONIC_TPS] =3D dp8393x_get(s, dp8393x_ttda(s), 1); + s->regs[SONIC_TFC] =3D dp8393x_get(s, dp8393x_ttda(s), 2); + s->regs[SONIC_TSA0] =3D dp8393x_get(s, dp8393x_ttda(s), 3); + s->regs[SONIC_TSA1] =3D dp8393x_get(s, dp8393x_ttda(s), 4); + s->regs[SONIC_TFS] =3D dp8393x_get(s, dp8393x_ttda(s), 5); =20 /* Handle programmable interrupt */ if (s->regs[SONIC_TCR] & SONIC_TCR_PINT) { @@ -457,15 +458,9 @@ static void dp8393x_do_transmit_packets(dp8393xState *= s) i++; if (i !=3D s->regs[SONIC_TFC]) { /* Read next fragment details */ - size =3D sizeof(uint16_t) * 3 * width; - address_space_read(&s->as, - dp8393x_ttda(s) - + sizeof(uint16_t) * width * (4 + 3 * i= ), - MEMTXATTRS_UNSPECIFIED, s->data, - size); - s->regs[SONIC_TSA0] =3D dp8393x_get(s, width, 0); - s->regs[SONIC_TSA1] =3D dp8393x_get(s, width, 1); - s->regs[SONIC_TFS] =3D dp8393x_get(s, width, 2); + s->regs[SONIC_TSA0] =3D dp8393x_get(s, dp8393x_ttda(s), 0); + s->regs[SONIC_TSA1] =3D dp8393x_get(s, dp8393x_ttda(s), 1); + s->regs[SONIC_TFS] =3D dp8393x_get(s, dp8393x_ttda(s), 2); } } =20 @@ -498,22 +493,12 @@ static void dp8393x_do_transmit_packets(dp8393xState = *s) s->regs[SONIC_TCR] |=3D SONIC_TCR_PTX; =20 /* Write status */ - dp8393x_put(s, width, 0, - s->regs[SONIC_TCR] & 0x0fff); /* status */ - size =3D sizeof(uint16_t) * width; - address_space_write(&s->as, dp8393x_ttda(s), - MEMTXATTRS_UNSPECIFIED, s->data, size); + dp8393x_put(s, dp8393x_ttda(s), 0, s->regs[SONIC_TCR] & 0x0fff); =20 if (!(s->regs[SONIC_CR] & SONIC_CR_HTX)) { /* Read footer of packet */ - size =3D sizeof(uint16_t) * width; - address_space_read(&s->as, - dp8393x_ttda(s) - + sizeof(uint16_t) * width - * (4 + 3 * s->regs[SONIC_TFC]), - MEMTXATTRS_UNSPECIFIED, s->data, - size); - s->regs[SONIC_CTDA] =3D dp8393x_get(s, width, 0); + s->regs[SONIC_CTDA] =3D dp8393x_get(s, dp8393x_ttda(s), + 4 + 3 * s->regs[SONIC_TFC]); if (s->regs[SONIC_CTDA] & SONIC_DESC_EOL) { /* EOL detected */ break; @@ -762,7 +747,7 @@ static ssize_t dp8393x_receive(NetClientState *nc, cons= t uint8_t * buf, dp8393xState *s =3D qemu_get_nic_opaque(nc); int packet_type; uint32_t available, address; - int width, rx_len, padded_len; + int rx_len, padded_len; uint32_t checksum; int size; =20 @@ -775,10 +760,8 @@ static ssize_t dp8393x_receive(NetClientState *nc, con= st uint8_t * buf, =20 rx_len =3D pkt_size + sizeof(checksum); if (s->regs[SONIC_DCR] & SONIC_DCR_DW) { - width =3D 2; padded_len =3D ((rx_len - 1) | 3) + 1; } else { - width =3D 1; padded_len =3D ((rx_len - 1) | 1) + 1; } =20 @@ -799,11 +782,7 @@ static ssize_t dp8393x_receive(NetClientState *nc, con= st uint8_t * buf, /* Check for EOL */ if (s->regs[SONIC_LLFA] & SONIC_DESC_EOL) { /* Are we still in resource exhaustion? */ - size =3D sizeof(uint16_t) * 1 * width; - address =3D dp8393x_crda(s) + sizeof(uint16_t) * 5 * width; - address_space_read(&s->as, address, MEMTXATTRS_UNSPECIFIED, - s->data, size); - s->regs[SONIC_LLFA] =3D dp8393x_get(s, width, 0); + s->regs[SONIC_LLFA] =3D dp8393x_get(s, dp8393x_crda(s), 5); if (s->regs[SONIC_LLFA] & SONIC_DESC_EOL) { /* Still EOL ; stop reception */ return -1; @@ -811,11 +790,7 @@ static ssize_t dp8393x_receive(NetClientState *nc, con= st uint8_t * buf, /* Link has been updated by host */ =20 /* Clear in_use */ - size =3D sizeof(uint16_t) * width; - address =3D dp8393x_crda(s) + sizeof(uint16_t) * 6 * width; - dp8393x_put(s, width, 0, 0); - address_space_write(&s->as, address, MEMTXATTRS_UNSPECIFIED, - (uint8_t *)s->data, size); + dp8393x_put(s, dp8393x_crda(s), 6, 0x0000); =20 /* Move to next descriptor */ s->regs[SONIC_CRDA] =3D s->regs[SONIC_LLFA]; @@ -869,32 +844,20 @@ static ssize_t dp8393x_receive(NetClientState *nc, co= nst uint8_t * buf, =20 /* Write status to memory */ trace_dp8393x_receive_write_status(dp8393x_crda(s)); - dp8393x_put(s, width, 0, s->regs[SONIC_RCR]); /* status */ - dp8393x_put(s, width, 1, rx_len); /* byte count */ - dp8393x_put(s, width, 2, s->regs[SONIC_TRBA0]); /* pkt_ptr0 */ - dp8393x_put(s, width, 3, s->regs[SONIC_TRBA1]); /* pkt_ptr1 */ - dp8393x_put(s, width, 4, s->regs[SONIC_RSC]); /* seq_no */ - size =3D sizeof(uint16_t) * 5 * width; - address_space_write(&s->as, dp8393x_crda(s), - MEMTXATTRS_UNSPECIFIED, - s->data, size); + dp8393x_put(s, dp8393x_crda(s), 0, s->regs[SONIC_RCR]); /* status */ + dp8393x_put(s, dp8393x_crda(s), 1, rx_len); /* byte count */ + dp8393x_put(s, dp8393x_crda(s), 2, s->regs[SONIC_TRBA0]); /* pkt_ptr0 = */ + dp8393x_put(s, dp8393x_crda(s), 3, s->regs[SONIC_TRBA1]); /* pkt_ptr1 = */ + dp8393x_put(s, dp8393x_crda(s), 4, s->regs[SONIC_RSC]); /* seq_no */ =20 /* Check link field */ - size =3D sizeof(uint16_t) * width; - address_space_read(&s->as, - dp8393x_crda(s) + sizeof(uint16_t) * 5 * width, - MEMTXATTRS_UNSPECIFIED, s->data, size); - s->regs[SONIC_LLFA] =3D dp8393x_get(s, width, 0); + s->regs[SONIC_LLFA] =3D dp8393x_get(s, dp8393x_crda(s), 5); if (s->regs[SONIC_LLFA] & SONIC_DESC_EOL) { /* EOL detected */ s->regs[SONIC_ISR] |=3D SONIC_ISR_RDE; } else { /* Clear in_use */ - size =3D sizeof(uint16_t) * width; - address =3D dp8393x_crda(s) + sizeof(uint16_t) * 6 * width; - dp8393x_put(s, width, 0, 0); - address_space_write(&s->as, address, MEMTXATTRS_UNSPECIFIED, - s->data, size); + dp8393x_put(s, dp8393x_crda(s), 6, 0x0000); =20 /* Move to next descriptor */ s->regs[SONIC_CRDA] =3D s->regs[SONIC_LLFA]; --=20 2.31.1