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 register definition mashed. from UEFI an...



details:   https://anonhg.NetBSD.org/src/rev/95a58b21f7bc
branches:  trunk
changeset: 746286:95a58b21f7bc
user:      nisimura <nisimura%NetBSD.org@localhost>
date:      Fri Mar 27 06:32:49 2020 +0000

description:
register definition mashed. from UEFI and CycloneV PDF

diffstat:

 sys/arch/arm/sociox/if_scx.c |  176 ++++++++++++++++++++++++++----------------
 1 files changed, 108 insertions(+), 68 deletions(-)

diffs (truncated from 366 to 300 lines):

diff -r 4fdfddd50981 -r 95a58b21f7bc sys/arch/arm/sociox/if_scx.c
--- a/sys/arch/arm/sociox/if_scx.c      Fri Mar 27 04:31:18 2020 +0000
+++ b/sys/arch/arm/sociox/if_scx.c      Fri Mar 27 06:32:49 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: if_scx.c,v 1.17 2020/03/26 10:38:16 nisimura Exp $     */
+/*     $NetBSD: if_scx.c,v 1.18 2020/03/27 06:32:49 nisimura Exp $     */
 
 /*-
  * Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -57,7 +57,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_scx.c,v 1.17 2020/03/26 10:38:16 nisimura Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_scx.c,v 1.18 2020/03/27 06:32:49 nisimura Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -84,29 +84,31 @@
 #include <dev/acpi/acpivar.h>
 #include <dev/acpi/acpi_intr.h>
 
-/* SC2A11 register block */
+/* SC2A11 register block 0x100-0x1204? */
 #define SWRESET                0x104
-#define MACADRH                0x10c
-#define MACADRL                0x110
 #define COMINIT                0x120
-#define INTRST         0x200
-#define  IRQ_RX                (1U<<1)
-#define  IRQ_TX                (1U<<0)
-#define INTREN         0x204
-#define INTR_SET       0x234
-#define INTR_CLR       0x238
-#define TXINTST                0x400
-#define TXINTEN                0x404
-#define TXINT_SET      0x428
-#define TXINT_CLR      0x42c
+#define xINTSR         0x200           /* aggregated interrupt status report */
+#define  IRQ_RX                (1U<<1)         /* top level Rx interrupt */
+#define  IRQ_TX                (1U<<0)         /* top level Rx interrupt */
+#define xINTAEN                0x204           /* INT_A enable */
+#define xINTA_SET      0x234           /* bit to set */
+#define xINTA_CLR      0x238           /* bit to clr */
+#define xINTBEN                0x23c           /* INT_B enable */
+#define xINTB_SET      0x240           /* bit to set */
+#define xINTB_CLR      0x244           /* bit to clr */
+/* 0x0c-48 */                          /* pkt,tls,s0,s1 SR/IE/SET/CLR */
+#define TXISR          0x400
+#define TXIEN          0x404
+#define TXI_SET                0x428
+#define TXI_CLR                0x42c
 #define  TXI_NTOWNR    (1U<<17)
 #define  TXI_TR_ERR    (1U<<16)
 #define  TXI_TXDONE    (1U<<15)
 #define  TXI_TMREXP    (1U<<14)
-#define RXINTST                0x440
-#define RXINTEN                0x444
-#define RXINT_SET      0x468
-#define RXINT_CLR      0x46c
+#define RXISR          0x440
+#define RXIEN          0x444
+#define RXI_SET                0x468
+#define RXI_CLR                0x46c
 #define  RXI_RC_ERR    (1U<<16)
 #define  RXI_PKTCNT    (1U<<15)
 #define  RXI_TMREXP    (1U<<14)
@@ -117,16 +119,22 @@
 #define H2MENG         0x210           /* DMAC host2media ucode port */
 #define M2HENG         0x21c           /* DMAC media2host ucode port */
 #define PKTENG         0x0d0           /* packet engine ucode port */
+#define CLKEN          0x100           /* clock distribution enable */
+#define  CLK_G         (1U<<5)
+#define  CLK_ALL       0x24
+#define MACADRH                0x10c           /* ??? */
+#define MACADRL                0x110           /* ??? */
 #define MCVER          0x22c           /* micro controller version */
 #define HWVER          0x230           /* hardware version */
 
-#define MACSTAT                0x1024          /* gmac status */
-#define MACDATA                0x11c0          /* gmac rd/wr data */
 #define MACCMD         0x11c4          /* gmac operation */
 #define  CMD_IOWR      (1U<<28)        /* write op */
 #define  CMD_BUSY      (1U<<31)        /* busy bit */
-#define DESCENG_INIT   0x11fc
-#define DESCENG_SRST   0x1204
+#define MACSTAT                0x1024          /* gmac status */
+#define MACDATA                0x11c0          /* gmac rd/wr data */
+#define MACINTE                0x1028          /* interrupt enable */
+#define DESC_INIT      0x11fc          /* desc engine init */
+#define DESC_SRST      0x1204          /* desc engine sw reset */
 
 /* GMAC register block. use mac_write()/mac_read() to handle */
 #define GMACMCR                0x0000          /* MAC configuration */
@@ -134,8 +142,8 @@
 #define  MCR_CST       (1U<<25)        /* strip CRC */
 #define  MCR_TC                (1U<<24)        /* keep RGMII PHY notified */
 #define  MCR_JE                (1U<<20)        /* ignore oversized >9018 condition */
-#define  MCR_USEMII    (1U<<15)        /* 1: RMII/MII, 0: RGMII */
-#define  MCR_SPD100    (1U<<14)        /* force speed 100 */
+#define  MCR_USEMII    (1U<<15)        /* 1: RMII/MII, 0: RGMII (_PS) */
+#define  MCR_SPD100    (1U<<14)        /* force speed 100 (_FES) */
 #define  MCR_USEFDX    (1U<<11)        /* force full duplex */
 #define  MCR_IPCKEN    (1U<<10)        /* handle checksum */
 #define  MCR_ACS       (1U<<7)         /* auto pad strip CRC */
@@ -145,19 +153,19 @@
 #define  _MCR_HDX      0x0001a00c      /* XXX TBD */
 #define GMACAFR                0x0004          /* frame DA/SA address filter */
 #define  AFR_RA                (1U<<31)        /* receive block all on */
-#define  AFR_HPF       (1U<<10)        /* activate hash or perfect filter */
+#define  AFR_HPF       (1U<<10)        /* hash+perfect filter, or hash only */
 #define  AFR_SAF       (1U<<9)         /* source address filter */
 #define  AFR_SAIF      (1U<<8)         /* SA inverse filtering */
-#define  AFR_PCF       (3U<<6)         /* */
-#define  AFR_RB                (1U<<5)         /* reject broadcast frame */
-#define  AFR_AM                (1U<<4)         /* accept all multicast frame */
+#define  AFR_PCF       (2U<<6)         /* */
+#define  AFR_DBF       (1U<<5)         /* reject broadcast frame */
+#define  AFR_PM                (1U<<4)         /* accept all multicast frame */
 #define  AFR_DAIF      (1U<<3)         /* DA inverse filtering */
 #define  AFR_MHTE      (1U<<2)         /* use multicast hash table */
 #define  AFR_UHTE      (1U<<1)         /* use additional MAC addresses */
-#define  AFR_PM                (1U<<0)         /* run promisc mode */
+#define  AFR_PR                (1U<<0)         /* run promisc mode */
 #define  _AFR          0x80000001      /* XXX TBD */
-#define GMACMHTH       0x0008          /* multicast hash table 63:32 */
-#define GMACMHTL       0x000c          /* multicast hash table 31:0 */
+#define GMACMHTH       0x0008          /* 64bit multicast hash table 63:32 */
+#define GMACMHTL       0x000c          /* 64bit 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 */
@@ -166,10 +174,16 @@
 #define  GAR_BUSY      (1U)            /* busy bit */
 #define GMACGDR                0x0014          /* MDIO rd/wr data */
 #define GMACFCR                0x0018          /* 802.3x flowcontrol */
+                                       /* 31:16 pause timer value */
+                                       /* 5:4 pause timer threthold */
 #define  FCR_RFE       (1U<<2)         /* accept PAUSE to throttle Tx */
 #define  FCR_TFE       (1U<<1)         /* generate PAUSE to moderate Rx lvl */
 #define GMACVTAG       0x001c          /* VLAN tag control */
 #define GMACIMPL       0x0020          /* implementation number XX.YY */
+#define GMACLPIS       0x0030          /* AXI LPI control */
+#define GMACLPIC       0x0034          /* AXI LPI control */
+#define GMACISR                0x0038          /* interrupt status, clear when read */
+#define GMACIMR                0x003c          /* interrupt enable */
 #define GMACMAH0       0x0040          /* MAC address 0 47:32 */
 #define GMACMAL0       0x0044          /* MAC address 0 31:0 */
 #define GMACMAH(i)     ((i)*8+0x40)    /* supplimental MAC addr 1 - 15 */
@@ -181,39 +195,55 @@
                                         *      1 25Mhz  (100Mbps)
                                         *      2 125Mhz (1000Mbps)
                                         *  1   full duplex detected */
-
-#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-31 */
-#define GMACAMAL(i)    ((i)*8+0x804)
 #define GMACEVCTL      0x0100          /* event counter control */
 #define GMACEVCNT(i)   ((i)*4+0x114)   /* event counter 0x114~284 */
 
+#define GMACMHT0       0x0500          /* 256bit multicast hash table 0 - 7 */
+#define GMACMHT(i)     ((i)*4+0x500)
+#define GMACVHT                0x0588          /* VLAN tag hash */
+
+/* 0x0700-0734 */
+#define GMACAMAH(i)    ((i)*8+0x800)   /* supplimental MAC addr 16-31 */
+#define GMACAMAL(i)    ((i)*8+0x804)
+
 #define GMACBMR                0x1000          /* DMA bus mode control
-                                        * 24    4PBL
+                                        * 24    4PBL 8?
+                                        * 23    USP
                                         * 22:17 RPBL
-                                        * 16    fix burst
+                                        * 16    fixed burst, or undefined b.
                                         * 15:14 priority between Rx and Tx
                                         *  3    rxtx ratio 41
                                         *  2    rxtx ratio 31
                                         *  1    rxtx ratio 21
                                         *  0    rxtx ratio 11
                                         * 13:8  PBL possible DMA burst len
+                                        *  7    alternative des8
                                         *  0    reset op. self clear
                                         */
 #define  _BMR          0x00412080      /* XXX TBD */
 #define  _BMR0         0x00020181      /* XXX TBD */
 #define  BMR_RST       (1)             /* reset op. self clear when done */
-#define GMACTDS                0x1004          /* write any to resume tdes */
-#define GMACRDS                0x1008          /* write any to resume rdes */
-#define GMACRDLAR      0x100c          /* rdes base address 32bit paddr */
-#define  _RDLAR                0x18000         /* XXX TBD system SRAM with CC ? */
-#define GMACTDLAR      0x1010          /* tdes base address 32bit paddr */
-#define  _TDLAR                0x1c000         /* XXX TBD system SRAM with CC ? */
+#define GMACTPD                0x1004          /* write any to resume tdes */
+#define GMACRPD                0x1008          /* write any to resume rdes */
+#define GMACRDLA       0x100c          /* rdes base address 32bit paddr */
+#define GMACTDLA       0x1010          /* tdes base address 32bit paddr */
+#define  _RDLA         0x18000         /* XXX TBD system SRAM with CC ? */
+#define  _TDLA         0x1c000         /* XXX TBD system SRAM with CC ? */
+#define GMACDSR                0x1014          /* DMA status detail report; W1C */
 #define GMACOMR                0x1018          /* DMA operation */
-#define  OMR_TXE       (1U<<13)        /* start Tx DMA engine, 0 to stop */
-#define  OMR_RXE       (1U<<1)         /* start Rx DMA engine, 0 to stop */
+#define  OMR_TSF       (1U<<25)        /* 1: Tx store&forword, 0: immed. */
+#define  OMR_RSF       (1U<<21)        /* 1: Rx store&forward, 0: immed. */
+#define  OMR_ST                (1U<<13)        /* run Tx DMA engine, 0 to stop */
+#define  OMR_EFC       (1U<<8)         /* transmit PAUSE to throttle Rx lvl. */
+#define  OMR_FEF       (1U<<7)         /* allow to receive error frames */
+#define  OMR_RS                (1U<<1)         /* run Rx DMA engine, 0 to stop */
+#define GMACIE         0x101c          /* interrupt enable */
+#define GMACEVCS       0x1020          /* missed frame or ovf detected */
+#define GMACRWDT       0x1024          /* receive watchdog timer count */
+#define GMACAXIB       0x1028          /* AXI bus mode control */
+#define GMACAXIS       0x102c          /* AXI status report */
+/* 0x1048-1054 */                      /* descriptor and buffer cur. address */
+#define HWFEA          0x1058          /* feature report */
 
 /* descriptor format definition */
 struct tdes {
@@ -482,9 +512,9 @@
        phy_mode = fdtbus_get_string(phandle, "phy-mode");
        if (phy_mode == NULL)
                aprint_error(": missing 'phy-mode' property\n");
-       sc->sc_100mii = (phy_mode != NULL && strcmp(phy_mode, "rgmii") != 0);
+       sc->sc_100mii = (phy_mode  && strcmp(phy_mode, "rgmii") != 0);
 sc->sc_phy_id = 7; /* XXX */
-sc->sc_freq = 250 * 1000 * 1000; /* XXX */
+sc->sc_freq = 125 * 1000 * 1000; /* XXX */
 aprint_normal_dev(self,
 "phy mode %s, phy id %d, freq %ld\n", phy_mode, sc->sc_phy_id, sc->sc_freq);
 
@@ -635,7 +665,7 @@
 
 sc->sc_phy_id = MII_PHY_ANY;
        sc->sc_mdclk = get_mdioclk(sc->sc_freq); /* 5:2 clk control */
-sc->sc_mdclk = 0; /* XXX */
+sc->sc_mdclk = 5; /* XXX */
 aprint_normal_dev(sc->sc_dev, "using %d for mdclk\n", sc->sc_mdclk);
 sc->sc_mdclk <<= 2;
 
@@ -782,17 +812,21 @@
 {
        int loop = 0, busy;
 
-       mac_write(sc, GMACBMR, _BMR0); /* may take for a while */
+       mac_write(sc, GMACOMR, 0);
+       mac_write(sc, GMACBMR, BMR_RST); /* may take for a while */
        do {
                DELAY(10);
                busy = mac_read(sc, GMACBMR) & BMR_RST;
        } while (++loop < 3000 && busy);
-printf("reset done with %d loop\n", loop);
-
-       CSR_WRITE(sc, DESCENG_SRST, 1);
-       CSR_WRITE(sc, DESCENG_INIT, 1);
+printf("BMR reset done with %d loop\n", loop);
        mac_write(sc, GMACBMR, _BMR);
        mac_write(sc, GMACEVCTL, 1);
+
+       CSR_WRITE(sc, CLKEN, CLK_ALL);
+
+       CSR_WRITE(sc, SWRESET, 0);      /* reset operation */
+       CSR_WRITE(sc, SWRESET, 1U<<31); /* manifest run */
+       CSR_WRITE(sc, COMINIT, 3);      /* DB|CLS*/
 }
 
 static int
@@ -813,7 +847,7 @@
        csr = (ea[3] << 24) | (ea[2] << 16) | (ea[1] << 8) |  ea[0];
        mac_write(sc, GMACMAL0, csr);
        csr = (ea[5] << 8) | ea[4];
-       mac_write(sc, GMACMAH0, csr | 1U<<31); /* always valid? */
+       mac_write(sc, GMACMAH0, csr);
 
        /* accept multicast frame or run promisc mode */
        scx_set_rcvfilt(sc);
@@ -839,14 +873,14 @@
        sc->sc_rxptr = 0;
 
        /* XXX 32 bit paddr XXX hand Tx/Rx rings to HW XXX */
-       mac_write(sc, GMACTDLAR, SCX_CDTXADDR(sc, 0));
-       mac_write(sc, GMACRDLAR, SCX_CDRXADDR(sc, 0));
+       mac_write(sc, GMACTDLA, SCX_CDTXADDR(sc, 0));
+       mac_write(sc, GMACRDLA, SCX_CDRXADDR(sc, 0));
 
        /* kick to start GMAC engine */
-       CSR_WRITE(sc, RXINT_CLR, ~0);
-       CSR_WRITE(sc, TXINT_CLR, ~0);
+       CSR_WRITE(sc, RXI_CLR, ~0);
+       CSR_WRITE(sc, TXI_CLR, ~0);
        csr = mac_read(sc, GMACOMR);
-       mac_write(sc, GMACOMR, csr | OMR_RXE | OMR_TXE);
+       mac_write(sc, GMACOMR, csr | OMR_RS | OMR_ST);
 
        ifp->if_flags |= IFF_RUNNING;
        ifp->if_flags &= ~IFF_OACTIVE;
@@ -960,7 +994,7 @@
        int i;



Home | Main Index | Thread Index | Old Index