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 improve SC2A11 hardware register descrip...



details:   https://anonhg.NetBSD.org/src/rev/df0b881cb218
branches:  trunk
changeset: 1027702:df0b881cb218
user:      nisimura <nisimura%NetBSD.org@localhost>
date:      Thu Dec 16 11:32:22 2021 +0000

description:
improve SC2A11 hardware register description.

diffstat:

 sys/arch/arm/sociox/if_scx.c |  241 ++++++++++++++++++++++++------------------
 1 files changed, 137 insertions(+), 104 deletions(-)

diffs (truncated from 367 to 300 lines):

diff -r 6cf3d1ac4f81 -r df0b881cb218 sys/arch/arm/sociox/if_scx.c
--- a/sys/arch/arm/sociox/if_scx.c      Thu Dec 16 11:00:15 2021 +0000
+++ b/sys/arch/arm/sociox/if_scx.c      Thu Dec 16 11:32:22 2021 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: if_scx.c,v 1.25 2021/08/02 12:56:22 andvar Exp $       */
+/*     $NetBSD: if_scx.c,v 1.26 2021/12/16 11:32:22 nisimura Exp $     */
 
 /*-
  * Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -46,7 +46,7 @@
 #define NOT_MP_SAFE    0
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_scx.c,v 1.25 2021/08/02 12:56:22 andvar Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_scx.c,v 1.26 2021/12/16 11:32:22 nisimura Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -73,7 +73,7 @@
 #include <dev/acpi/acpivar.h>
 #include <dev/acpi/acpi_intr.h>
 
-/* Socionext SC2A11 descriptor format */
+/* SC2A11 GbE 64-bit paddr descriptor */
 struct tdes {
        uint32_t t0, t1, t2, t3;
 };
@@ -84,103 +84,131 @@
 
 #define T0_OWN         (1U<<31)        /* desc is ready to Tx */
 #define T0_EOD         (1U<<30)        /* end of descriptor array */
-#define T0_DRID                (24)            /* 29:24 D-RID */
-#define T0_PT          (1U<<21)        /* 23:21 PT */
-#define T0_TRID                (16)            /* 20:16 T-RID */
+#define T0_DRID                (24)            /* 29:24 desc ring id */
+#define T0_PT          (1U<<21)        /* 23:21 "pass-through" */
+#define T0_TDRID       (16)            /* 20:16 target desc ring id: GMAC=15 */
 #define T0_FS          (1U<<9)         /* first segment of frame */
 #define T0_LS          (1U<<8)         /* last segment of frame */
 #define T0_CSUM                (1U<<7)         /* enable check sum offload */
-#define T0_SGOL                (1U<<6)         /* enable TCP segment offload */
-#define T0_TRS         (1U<<4)         /* 5:4 TRS */
-#define T0_IOC         (0)             /* XXX TBD interrupt when completed */
-/* T1 segment address 63:32 */
-/* T2 segment address 31:0 */
-/* T3 31:16 TCP segment length, 15:0 segment length to transmit */
+#define T0_TSO         (1U<<6)         /* enable TCP segment offload */
+#define T0_TRS         (1U<<4)         /* 5:4 "TRS" */
+/* T1 frame segment address 63:32 */
+/* T2 frame segment address 31:0 */
+/* T3 31:16 TCP segment length, 15:0 frame segment length to transmit */
 
 #define R0_OWN         (1U<<31)        /* desc is empty */
 #define R0_EOD         (1U<<30)        /* end of descriptor array */
-#define R0_SRID                (24)            /* 29:24 S-RID */
-#define R0_FR          (1U<<23)        /* FR */
+#define R0_SDRID       (24)            /* 29:24 source desc ring id */
+#define R0_FR          (1U<<23)        /* found fragmented */
 #define R0_ER          (1U<<21)        /* Rx error indication */
 #define R0_ERR         (3U<<16)        /* 18:16 receive error code */
-#define R0_TDRID       (14)            /* 15:14 TD-RID */
+#define R0_TDRID       (12)            /* 15:12 target desc ring id */
 #define R0_FS          (1U<<9)         /* first segment of frame */
 #define R0_LS          (1U<<8)         /* last segment of frame */
 #define R0_CSUM                (3U<<6)         /* 7:6 checksum status */
-#define R0_CERR                (2U<<6)         /* 0 (undone), 1 (found ok), 2 (bad) */
+#define R0_CERR                (2U<<6)         /* 0: undone, 1: found ok, 2: bad */
 /* R1 frame address 63:32 */
 /* R2 frame address 31:0 */
 /* R3 31:16 received frame length, 15:0 buffer length to receive */
 
 /*
- * SC2A11 NetSec registers. 0x100 - 1204
+ * SC2A11 registers. 0x100 - 1204
  */
 #define SWRESET                0x104
+#define  SRST_RUN      (1U<<31)        /* instruct start, 0 to stop */
 #define COMINIT                0x120
+#define  INIT_DB       (1U<<2)         /* ???; self clear when done */
+#define  INIT_CLS      (1U<<1)         /* ???; self clear when done */
+#define PKTCTRL                0x140           /* pkt engine control */
+#define  MODENRM       (1U<<28)        /* change mode to normal */
+#define  ENJUMBO       (1U<<27)        /* allow jumbo frame */
+#define  RPTCSUMERR    (1U<<3)         /* log Rx checksum error */
+#define  RPTHDCOMP     (1U<<2)         /* log HD imcomplete condition */
+#define  RPTHDERR      (1U<<1)         /* log HD error */
+#define  DROPNOMATCH   (1U<<0)         /* drop no match frames */
 #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  IRQ_UCODE     (1U<<20)        /* ucode load completed */
 #define xINTAEN                0x204           /* INT_A enable */
-#define xINTA_SET      0x234           /* bit to set */
-#define xINTA_CLR      0x238           /* bit to clr */
+#define xINTAE_SET     0x234           /* bit to set */
+#define xINTAE_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 */
-/* 0x00c - 048 */                      /* 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 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)
-#define TXTIMER                0x41c
-#define RXTIMER                0x45c
-#define TXCOUNT                0x410
-#define RXCOUNT                0x454
-#define H2MENG         0x210           /* DMAC host2media ucode port */
-#define M2HENG         0x21c           /* DMAC media2host ucode port */
-#define PKTENG         0x0d0           /* packet engine ucode port */
+#define xINTBE_SET     0x240           /* bit to set */
+#define xINTBE_CLR     0x244           /* bit to clr */
+#define TXISR          0x400           /* transmit status */
+#define TXIEN          0x404           /* tx interrupt enable */
+#define TXIE_SET       0x428           /* bit to set */
+#define TXIE_CLR       0x42c           /* bit to clr */
+#define  TXI_NTOWNR    (1U<<17)        /* ready desc got empty */
+#define  TXI_TR_ERR    (1U<<16)        /* tx error */
+#define  TXI_TXDONE    (1U<<15)        /* tx completed */
+#define  TXI_TMREXP    (1U<<14)        /* coalesce timer expired */
+#define RXISR          0x440           /* receipt status */
+#define RXIEN          0x444           /* rx interrupt enable */
+#define RXIE_SET       0x468           /* bit to set */
+#define RXIE_CLR       0x46c           /* bit to clr */
+#define  RXI_RC_ERR    (1U<<16)        /* rx error */
+#define  RXI_PKTCNT    (1U<<15)        /* rx counter has new value report */
+#define  RXI_TMREXP    (1U<<14)        /* coalesce timer expired */
+#define TDBA_LO                0x408           /* tdes array base addr 31:0 */
+#define TDBA_HI                0x434           /* tdes array base addr 63:32 */
+#define RDBA_LO                0x448           /* rdes array base addr 31:0 */
+#define RDBA_HI                0x474           /* rdes array base addr 63:32 */
+/* 13 pairs of special purpose desc array address registers exit */
+#define TXCONF         0x430
+#define RXCONF         0x470
+#define  DESCNF_UP     (1U<<31)        /* up-and-running */
+#define  DESCNF_CHRST  (1U<<30)        /* channel reset */
+#define  DESCNF_TMR    (1U<<4)         /* coalesce timer mode select */
+#define  DESCNF_LE     (1)             /* little endian desc format */
+#define TXCOLMAX       0x410           /* tx intr coalesce upper bound */
+#define RXCOLMAX       0x454           /* rx intr coalesce upper bound */
+#define TXITIMER       0x420           /* coalesce timer usec, MSB to use */
+#define RXITIMER       0x460           /* coalesce timer usec, MSB to use */
+#define TXDONECNT      0x424           /* tx completion report, auto-clear */
+#define RXDONECNT      0x458           /* rx completion report, auto-clear */
+#define UCODE_H2M      0x210           /* host2media engine ucode port */
+#define UCODE_M2H      0x21c           /* media2host engine ucode port */
+#define CORESTAT       0x218           /* engine run state */
+#define  PKTSTOP       (1U<<2)
+#define  M2HSTOP       (1U<<1)
+#define  H2MSTOP       (1U<<0)
+#define DMACTL_H2M     0x214           /* host2media engine control */
+#define DMACTL_M2H     0x220           /* media2host engine control */
+#define  DMACTL_STOP   (1U<<0)         /* instruct stop; self-clear */
+#define UCODE_PKT      0x0d0           /* packet engine ucode port */
 #define CLKEN          0x100           /* clock distribution enable */
-#define  CLK_G         (1U<<5)
-#define  CLK_ALL       0x13            /* 0x24 ??? */
+#define  CLK_G         (1U<<5)         /* feed clk domain E */
+#define  CLK_C         (1U<<1)         /* feed clk domain C */
+#define  CLK_D         (1U<<0)         /* feed clk domain D */
+#define  CLK_ALL       0x23            /* all above; 0x24 ??? 0x3f ??? */
+
+/* GMAC register indirect access. thru MACCMD/MACDATA operation */
+#define MACDATA                0x11c0          /* gmac register rd/wr data */
+#define MACCMD         0x11c4          /* gmac register operation */
+#define  CMD_IOWR      (1U<<28)        /* write op */
+#define  CMD_BUSY      (1U<<31)        /* busy bit */
+#define MACSTAT                0x1024          /* gmac status; ??? */
+#define MACINTE                0x1028          /* interrupt enable; ??? */
+
+#define FLOWTHR                0x11cc          /* flow control threshold */
+/* 31:16 pause threshold, 15:0 resume threshold */
+#define INTF_SEL       0x11d4          /* ??? */
+
+#define DESC_INIT      0x11fc          /* write 1 for desc init, SC */
+#define DESC_SRST      0x1204          /* write 1 for desc sw reset, SC */
+#define MODE_TRANS     0x500           /* mode change completion status */
+#define  N2T_DONE      (1U<<20)        /* normal->taiki change completed */
+#define  T2N_DONE      (1U<<19)        /* taiki->normal change completed */
 #define MACADRH                0x10c           /* ??? */
 #define MACADRL                0x110           /* ??? */
 #define MCVER          0x22c           /* micro controller version */
 #define HWVER          0x230           /* hardware version */
 
-/* 0x800 */            /* dec Tx  SR/EN/SET/CLR */
-/* 0x840 */            /* enc Rx  SR/EN/SET/CLR */
-/* 0x880 */            /* enc TLS Tx  SR/IE/SET/CLR */
-/* 0x8c0 */            /* dec TLS Tx  SR/IE/SET/CLR */
-/* 0x900 */            /* enc TLS Rx  SR/IE/SET/CLR */
-/* 0x940 */            /* dec TLS Rx  SR/IE/SET/CLR */
-/* 0x980 */            /* enc RAW Tx  SR/IE/SET/CLR */
-/* 0x9c0 */            /* dec RAW Tx  SR/IE/SET/CLR */
-/* 0xA00 */            /* enc RAW Rx  SR/IE/SET/CLR */
-/* 0xA40 */            /* dec RAW Rx  SR/IE/SET/CLR */
-
-/* indirect GMAC registers. accessed thru MACCMD/MACDATA operation */
-#define MACCMD         0x11c4          /* gmac operation */
-#define  CMD_IOWR      (1U<<28)        /* write op */
-#define  CMD_BUSY      (1U<<31)        /* busy bit */
-#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 registers. not memory mapped, but handled by indirect access.
- * Mostly identical to Synopsys DesignWare Core Ethernet.
+ * GMAC registers are mostly identical to Synopsys DesignWare Core
+ * Ethernet. These must be handled by indirect access.
  */
 #define GMACMCR                0x0000          /* MAC configuration */
 #define  MCR_IBN       (1U<<30)        /* ??? */
@@ -191,8 +219,8 @@
 #define  MCR_DRCS      (1U<<16)        /* ignore (G)MII HDX Tx error */
 #define  MCR_USEMII    (1U<<15)        /* 1: RMII/MII, 0: RGMII (_PS) */
 #define  MCR_SPD100    (1U<<14)        /* force speed 100 (_FES) */
-#define  MCR_DO                (1U<<13)        /* */
-#define  MCR_LOOP      (1U<<12)        /* */
+#define  MCR_DO                (1U<<13)        /* ??? don't receive my own Tx frames */
+#define  MCR_LOOP      (1U<<12)        /* run loop back */
 #define  MCR_USEFDX    (1U<<11)        /* force full duplex */
 #define  MCR_IPCEN     (1U<<10)        /* handle checksum */
 #define  MCR_ACS       (1U<<7)         /* auto pad strip CRC */
@@ -206,7 +234,7 @@
 #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       (2U<<6)         /* */
+#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 */
@@ -214,20 +242,26 @@
 #define  AFR_UHTE      (1U<<1)         /* use hash table for unicast */
 #define  AFR_PR                (1U<<0)         /* run promisc mode */
 #define GMACGAR                0x0010          /* MDIO operation */
-#define  GAR_PHY       (11)            /* mii phy 15:11 */
-#define  GAR_REG       (6)             /* mii reg 10:6 */
-#define  GAR_CTL       (2)             /* control 5:2 */
+#define  GAR_PHY       (11)            /* 15:11 mii phy */
+#define  GAR_REG       (6)             /* 10:6 mii reg */
+#define  GAR_CLK       (2)             /* 5:2 mdio clock tick ratio */
 #define  GAR_IOWR      (1U<<1)         /* MDIO write op */
-#define  GAR_BUSY      (1U)            /* busy bit */
+#define  GAR_BUSY      (1U<<0)         /* busy bit */
+#define  GAR_MDIO_25_35MHZ     2
+#define  GAR_MDIO_35_60MHZ     3
+#define  GAR_MDIO_60_100MHZ    0
+#define  GAR_MDIO_100_150MHZ   1
+#define  GAR_MDIO_150_250MHZ   4
+#define  GAR_MDIO_250_300MHZ   5
 #define GMACGDR                0x0014          /* MDIO rd/wr data */
 #define GMACFCR                0x0018          /* 802.3x flowcontrol */
-/* 31:16 pause timer value, 5:4 pause timer threthold */
+/* 31:16 pause timer value, 5:4 pause timer threshold */
 #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 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  ISR_TS                (1U<<9)         /* time stamp operation detected */
@@ -257,15 +291,15 @@
 /* 24    4PBL 8???
  * 23    USP
  * 22:17 RPBL
- * 16    fixed burst, or undefined b.
+ * 16    fixed burst
  * 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 packet burst len
+ * 13:8  PBL possible DMA burst length
  *  7    alternative des8
- *  0    reset op. (SC)
+ *  0    GMAC reset op. self-clear
  */
 #define  _BMR          0x00412080      /* XXX TBD */
 #define  _BMR0         0x00020181      /* XXX TBD */
@@ -274,47 +308,46 @@
 #define GMACRPD                0x1008          /* write any to resume rdes */



Home | Main Index | Thread Index | Old Index