Source-Changes-HG archive

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

[src/trunk]: src/sys/arch/mips/cavium Rework CVMSEG LM usage a litte:



details:   https://anonhg.NetBSD.org/src/rev/a3d1b40c835a
branches:  trunk
changeset: 934051:a3d1b40c835a
user:      simonb <simonb%NetBSD.org@localhost>
date:      Fri Jun 05 09:18:35 2020 +0000

description:
Rework CVMSEG LM usage a litte:
 - remove unused LM slots
 - use #defines for defining the size of CVMSEG LM users

XXX: Need to dynamically set CVMMEMCTL[LMEMSZ] during startup so we can
     both adapt to any future increase in CVMSEG LM usage and not waste
     any more L2 that we need to.
XXX: Still need to move general IOBDMA conf to a different (new?) header.

diffstat:

 sys/arch/mips/cavium/dev/if_cnmac.c   |  14 ++++++++++++--
 sys/arch/mips/cavium/dev/octeon_rnm.c |   8 ++++----
 sys/arch/mips/cavium/octeonvar.h      |  22 +++++++---------------
 3 files changed, 23 insertions(+), 21 deletions(-)

diffs (102 lines):

diff -r b48c58b2e90e -r a3d1b40c835a sys/arch/mips/cavium/dev/if_cnmac.c
--- a/sys/arch/mips/cavium/dev/if_cnmac.c       Fri Jun 05 08:02:32 2020 +0000
+++ b/sys/arch/mips/cavium/dev/if_cnmac.c       Fri Jun 05 09:18:35 2020 +0000
@@ -1,8 +1,8 @@
-/*     $NetBSD: if_cnmac.c,v 1.19 2020/05/31 06:27:06 simonb Exp $     */
+/*     $NetBSD: if_cnmac.c,v 1.20 2020/06/05 09:18:35 simonb Exp $     */
 
 #include <sys/cdefs.h>
 #if 0
-__KERNEL_RCSID(0, "$NetBSD: if_cnmac.c,v 1.19 2020/05/31 06:27:06 simonb Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_cnmac.c,v 1.20 2020/06/05 09:18:35 simonb Exp $");
 #endif
 
 #include "opt_octeon.h"
@@ -295,6 +295,16 @@
        sc->sc_gmx = ga->ga_gmx;
        sc->sc_gmx_port = ga->ga_gmx_port;
 
+       if (sc->sc_port >= CVMSEG_LM_ETHER_COUNT) {
+               /*
+                * If we got here, increase CVMSEG_LM_ETHER_COUNT
+                * in octeonvar.h .
+                */
+               printf("%s: ERROR out of CVMSEG LM buffers\n",
+                   device_xname(self));
+               return;
+       }
+
        sc->sc_init_flag = 0;
        /*
         * XXXUEBAYASI
diff -r b48c58b2e90e -r a3d1b40c835a sys/arch/mips/cavium/dev/octeon_rnm.c
--- a/sys/arch/mips/cavium/dev/octeon_rnm.c     Fri Jun 05 08:02:32 2020 +0000
+++ b/sys/arch/mips/cavium/dev/octeon_rnm.c     Fri Jun 05 09:18:35 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: octeon_rnm.c,v 1.9 2020/05/31 06:27:06 simonb Exp $    */
+/*     $NetBSD: octeon_rnm.c,v 1.10 2020/06/05 09:18:35 simonb Exp $   */
 
 /*
  * Copyright (c) 2007 Internet Initiative Japan, Inc.
@@ -99,7 +99,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: octeon_rnm.c,v 1.9 2020/05/31 06:27:06 simonb Exp $");
+__KERNEL_RCSID(0, "$NetBSD: octeon_rnm.c,v 1.10 2020/06/05 09:18:35 simonb Exp $");
 
 #include <sys/param.h>
 #include <sys/device.h>
@@ -368,8 +368,8 @@
            __SHIFTIN(RNM_IOBDMA_MAJORDID, IOBDMA_MAJORDID) |
            __SHIFTIN(RNM_IOBDMA_SUBDID, IOBDMA_SUBDID);
 
-       KASSERT(nwords < 128);  /* iobdma address restriction */
-       KASSERT(nwords <= 32);  /* octeon_cvmseg_map limitation */
+       KASSERT(nwords < 128);                  /* iobdma address restriction */
+       KASSERT(nwords <= CVMSEG_LM_RNM_SIZE);  /* size of CVMSEM LM buffer */
 
        octeon_iobdma_write_8(iobdma);
        OCTEON_SYNCIOBDMA;
diff -r b48c58b2e90e -r a3d1b40c835a sys/arch/mips/cavium/octeonvar.h
--- a/sys/arch/mips/cavium/octeonvar.h  Fri Jun 05 08:02:32 2020 +0000
+++ b/sys/arch/mips/cavium/octeonvar.h  Fri Jun 05 09:18:35 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: octeonvar.h,v 1.8 2020/05/31 06:27:06 simonb Exp $     */
+/*     $NetBSD: octeonvar.h,v 1.9 2020/06/05 09:18:35 simonb Exp $     */
 
 /*-
  * Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -148,26 +148,18 @@
 /*
  * CVMSEG (``scratch'') memory map
  */
+
+#define CVMSEG_LM_RNM_SIZE     16      /* limited by CN70XX hardware (why?) */
+#define CVMSEG_LM_ETHER_COUNT  4       /* limits number of cnmac devices */
+
 struct octeon_cvmseg_map {
-       /* 0-3 */
-       uint64_t                csm_xxx_0;
-       uint64_t                csm_xxx_1;
-       uint64_t                csm_xxx_2;
        uint64_t                csm_pow_intr;
 
-       /* 4-19 */
        struct octeon_cvmseg_ether_map {
-               uint64_t        csm_ether_fau_req;
                uint64_t        csm_ether_fau_done;
-               uint64_t        csm_ether_fau_cmdptr;
-               uint64_t        csm_ether_xxx_3;
-       } csm_ether[4/* XXX */];
+       } csm_ether[CVMSEG_LM_ETHER_COUNT];
 
-       /* 20-31 */
-       uint64_t        xxx_20_32[32 - 20];
-
-       /* 32-63 */
-       uint64_t        csm_rnm[32];
+       uint64_t        csm_rnm[CVMSEG_LM_RNM_SIZE];
 } __packed;
 #define        OCTEON_CVMSEG_OFFSET(entry) \
        offsetof(struct octeon_cvmseg_map, entry)



Home | Main Index | Thread Index | Old Index