Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch/arm/sociox update register definition. from UEFI so...



details:   https://anonhg.NetBSD.org/src/rev/beca0e0cec02
branches:  trunk
changeset: 746258:beca0e0cec02
user:      nisimura <nisimura%NetBSD.org@localhost>
date:      Thu Mar 26 10:38:16 2020 +0000

description:
update register definition. from UEFI source code.

diffstat:

 sys/arch/arm/sociox/if_scx.c |  43 ++++++++++++++++++++++---------------------
 1 files changed, 22 insertions(+), 21 deletions(-)

diffs (136 lines):

diff -r 4b236cd64a87 -r beca0e0cec02 sys/arch/arm/sociox/if_scx.c
--- a/sys/arch/arm/sociox/if_scx.c      Thu Mar 26 08:28:50 2020 +0000
+++ b/sys/arch/arm/sociox/if_scx.c      Thu Mar 26 10:38:16 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: if_scx.c,v 1.16 2020/03/26 08:28:50 nisimura Exp $     */
+/*     $NetBSD: if_scx.c,v 1.17 2020/03/26 10:38:16 nisimura Exp $     */
 
 /*-
  * Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -40,14 +40,14 @@
  *   to designify ring number from which to arrive or to which go.
  * - memory mapped EEPROM to hold MAC address. The rest of the area is
  *   occupied by a set of ucode for two DMA engines and one packet engine.
- * - The size of frame address filter is unknown. Might be 16 or even 128.
+ * - The size of frame address filter is 16 plus 32.
  * - The first slot is my own station address. Always enabled to perform
  *   to identify oneself.
  * - 1~16 are for supplimental MAC addresses. Independently enabled for
  *   use. Good to catch multicast. Byte-wise selective match available.
  *   Use the mask to catch { 0x01, 0x00, 0x00 } and/or { 0x33, 0x33 }.
- * - 16~128 might be exact match without byte-mask.
- * - The size of multicast hash filter store is unknown. Might be 256 bit.
+ * - 16~32 might be exact match without byte-mask.
+ * - The size of multicast hash filter store is 64 bit.
  * - Socionext/Linaro "NetSec" code makes many cut shorts. Some constants
  *   are left unexplained. The values should be handled via external
  *   controls like FDT descriptions. Fortunately, Intel/Altera CycloneV PDFs
@@ -57,7 +57,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_scx.c,v 1.16 2020/03/26 08:28:50 nisimura Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_scx.c,v 1.17 2020/03/26 10:38:16 nisimura Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -86,6 +86,8 @@
 
 /* SC2A11 register block */
 #define SWRESET                0x104
+#define MACADRH                0x10c
+#define MACADRL                0x110
 #define COMINIT                0x120
 #define INTRST         0x200
 #define  IRQ_RX                (1U<<1)
@@ -115,8 +117,8 @@
 #define H2MENG         0x210           /* DMAC host2media ucode port */
 #define M2HENG         0x21c           /* DMAC media2host ucode port */
 #define PKTENG         0x0d0           /* packet engine ucode port */
-#define HWVER0         0x22c
-#define HWVER1         0x230
+#define MCVER          0x22c           /* micro controller version */
+#define HWVER          0x230           /* hardware version */
 
 #define MACSTAT                0x1024          /* gmac status */
 #define MACDATA                0x11c0          /* gmac rd/wr data */
@@ -154,8 +156,8 @@
 #define  AFR_UHTE      (1U<<1)         /* use additional MAC addresses */
 #define  AFR_PM                (1U<<0)         /* run promisc mode */
 #define  _AFR          0x80000001      /* XXX TBD */
-#define GMACMHTH       0x0008          /* XXX multicast hash table 63:32 */
-#define GMACMHTL       0x000c          /* XXX multicast hash table 31:0 */
+#define GMACMHTH       0x0008          /* multicast hash table 63:32 */
+#define GMACMHTL       0x000c          /* multicast hash table 31:0 */
 #define GMACGAR                0x0010          /* MDIO operation */
 #define  GAR_PHY       (11)            /* mii phy 15:11 */
 #define  GAR_REG       (6)             /* mii reg 10:6 */
@@ -180,13 +182,13 @@
                                         *      2 125Mhz (1000Mbps)
                                         *  1   full duplex detected */
 
-#define GMACMHT0       0x0500          /* multicast hash table 0 - 7 */
+#define GMACMHT0       0x0500          /* XXX multicast hash table 0 - 7 */
 #define GMACMHT(i)     ((i)*4+0x500)
 #define GMACVHT                0x0588          /* VLAN tag hash */
-#define GMACAMAH(i)    ((i)*8+0x800)   /* supplimental MAC addr 16-127 */
+#define GMACAMAH(i)    ((i)*8+0x800)   /* supplimental MAC addr 16-31 */
 #define GMACAMAL(i)    ((i)*8+0x804)
+#define GMACEVCTL      0x0100          /* event counter control */
 #define GMACEVCNT(i)   ((i)*4+0x114)   /* event counter 0x114~284 */
-#define GMACEVCTL      0x0100          /* clear event counter registers */
 
 #define GMACBMR                0x1000          /* DMA bus mode control
                                         * 24    4PBL
@@ -613,7 +615,7 @@
        uint32_t csr;
        int i, nseg, error = 0;
 
-       hwver = CSR_READ(sc, HWVER1);   /* Socionext HW */
+       hwver = CSR_READ(sc, HWVER);    /* Socionext HW */
        /* stored in big endian order */
        csr = bus_space_read_4(sc->sc_st, sc->sc_eesh, 0);
        enaddr[0] = csr >> 24;
@@ -953,7 +955,7 @@
        struct ifnet * const ifp = &ec->ec_if;
        struct ether_multistep step;
        struct ether_multi *enm;
-       uint32_t mchash[8];     /* 8x 32 = 256 bit */
+       uint32_t mchash[2];     /* 2x 32 = 64 bit */
        uint32_t csr, crc;
        int i;
 
@@ -972,9 +974,8 @@
        /* clear 15 entry supplimental perfect match filter */
        for (i = 1; i < 16; i++)
                 mac_write(sc, GMACMAH(i), 0);
-       /* build 256 bit multicast hash filter */
-       memset(mchash, 0, sizeof(mchash));
-       crc = 0;
+       /* build 64 bit multicast hash filter */
+       crc = mchash[1] = mchash[0] = 0;
 
        ETHER_FIRST_MULTI(step, ec, enm);
        i = 1; /* slot 0 is occupied */
@@ -1006,8 +1007,8 @@
                        /* use hash table when too many */
                        /* bit_reserve_32(~crc) !? */
                        crc = ether_crc32_le(enm->enm_addrlo, ETHER_ADDR_LEN);
-                       /* 3(31:29) 5(28:24) bit sampling */
-                       mchash[crc >> 29] |= 1 << ((crc >> 24) & 0x1f);
+                       /* 1(31) 5(30:26) bit sampling */
+                       mchash[crc >> 31] |= 1 << ((crc >> 26) & 0x1f);
                }
                ETHER_NEXT_MULTI(step, enm);
                i++;
@@ -1016,8 +1017,8 @@
 
        if (crc)
                csr |= AFR_MHTE;
-       for (i = 0; i < __arraycount(mchash); i++)
-               mac_write(sc, GMACMHT(i), mchash[i]);
+       mac_write(sc, GMACMHTH, mchash[1]);
+       mac_write(sc, GMACMHTL, mchash[0]);
        mac_write(sc, GMACAFR, csr);
        return;
 



Home | Main Index | Thread Index | Old Index