Module Name:    src
Committed By:   simonb
Date:           Tue Jun 23 05:15:33 UTC 2020

Modified Files:
        src/sys/arch/mips/cavium: octeonvar.h
        src/sys/arch/mips/cavium/dev: octeon_ipd.c octeon_ipdvar.h octeon_pko.c
            octeon_pkovar.h octeon_pow.c octeon_powreg.h octeon_powvar.h

Log Message:
Cleanup - mostly removing unused code and defines.


To generate a diff of this commit:
cvs rdiff -u -r1.12 -r1.13 src/sys/arch/mips/cavium/octeonvar.h
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/mips/cavium/dev/octeon_ipd.c \
    src/sys/arch/mips/cavium/dev/octeon_powvar.h
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/mips/cavium/dev/octeon_ipdvar.h \
    src/sys/arch/mips/cavium/dev/octeon_pko.c \
    src/sys/arch/mips/cavium/dev/octeon_powreg.h
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/mips/cavium/dev/octeon_pkovar.h
cvs rdiff -u -r1.9 -r1.10 src/sys/arch/mips/cavium/dev/octeon_pow.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/mips/cavium/octeonvar.h
diff -u src/sys/arch/mips/cavium/octeonvar.h:1.12 src/sys/arch/mips/cavium/octeonvar.h:1.13
--- src/sys/arch/mips/cavium/octeonvar.h:1.12	Mon Jun 22 02:26:19 2020
+++ src/sys/arch/mips/cavium/octeonvar.h	Tue Jun 23 05:15:33 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: octeonvar.h,v 1.12 2020/06/22 02:26:19 simonb Exp $	*/
+/*	$NetBSD: octeonvar.h,v 1.13 2020/06/23 05:15:33 simonb Exp $	*/
 
 /*-
  * Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -52,18 +52,6 @@
 		"	.set arch=octeon		\n"
 #define	_ASM_EPILOGUE \
 		"	.set pop			\n"
-/*
- * subbits = __BITS64_GET(XXX, bits);
- * bits = __BITS64_SET(XXX, subbits);
- */
-#ifndef	__BITS64_GET
-#define	__BITS64_GET(name, bits)	\
-	    (((uint64_t)(bits) & name) >> name##_SHIFT)
-#endif
-#ifndef	__BITS64_SET
-#define	__BITS64_SET(name, subbits)	\
-	    (((uint64_t)(subbits) << name##_SHIFT) & name)
-#endif
 
 #ifdef _KERNEL
 extern int	octeon_core_ver;
@@ -211,22 +199,7 @@ struct octfau_map {
 #define	OCTEON_POW_QOS_XXX_6		6
 #define	OCTEON_POW_QOS_XXX_7		7
 
-#define	OCTEON_POW_GROUP_PIP		0
-#define	OCTEON_POW_GROUP_XXX_1		1
-#define	OCTEON_POW_GROUP_XXX_2		2
-#define	OCTEON_POW_GROUP_XXX_3		3
-#define	OCTEON_POW_GROUP_XXX_4		4
-#define	OCTEON_POW_GROUP_XXX_5		5
-#define	OCTEON_POW_GROUP_XXX_6		6
-#define	OCTEON_POW_GROUP_CORE1_SEND	7
-#define	OCTEON_POW_GROUP_CORE1_TASK_0	8
-#define	OCTEON_POW_GROUP_CORE1_TASK_1	9
-#define	OCTEON_POW_GROUP_CORE1_TASK_2	10
-#define	OCTEON_POW_GROUP_CORE1_TASK_3	11
-#define	OCTEON_POW_GROUP_CORE1_TASK_4	12
-#define	OCTEON_POW_GROUP_CORE1_TASK_5	13
-#define	OCTEON_POW_GROUP_CORE1_TASK_6	14
-#define	OCTEON_POW_GROUP_CORE1_TASK_7	15
+#define	OCTEON_POW_GROUP_MAX		16
 
 #ifdef _KERNEL
 extern struct octeon_config	octeon_configuration;
@@ -305,14 +278,6 @@ void		mips_cp0_cvmctl_write(uint64_t);
 #define OCTEON_SYNC		OCTEON_SYNCCOMMON(sync)
 #define OCTEON_SYNCWS		OCTEON_SYNCCOMMON(syncws)
 #define OCTEON_SYNCS		OCTEON_SYNCCOMMON(syncs)
-/* XXX backward compatibility */
-#if 1
-#define	OCT_SYNCIOBDMA		OCTEON_SYNCIOBDMA
-#define	OCT_SYNCW		OCTEON_SYNCW
-#define	OCT_SYNC		OCTEON_SYNC
-#define	OCT_SYNCWS		OCTEON_SYNCWS
-#define	OCT_SYNCS		OCTEON_SYNCS
-#endif
 
 /* octeon core does not use cca to determine cacheability */
 #define OCTEON_CCA_NONE UINT64_C(0)
@@ -329,14 +294,6 @@ octeon_xkphys_write_8(paddr_t address, u
 	mips3_sd(MIPS_PHYS_TO_XKPHYS(OCTEON_CCA_NONE, address), value);
 }
 
-/* XXX backward compatibility */
-#if 1
-#define octeon_read_csr(address) \
-	octeon_xkphys_read_8(address)
-#define octeon_write_csr(address, value) \
-	octeon_xkphys_write_8(address, value)
-#endif
-
 static __inline void
 octeon_iobdma_write_8(uint64_t value)
 {
@@ -347,72 +304,15 @@ octeon_iobdma_write_8(uint64_t value)
 static __inline uint64_t
 octeon_cvmseg_read_8(size_t offset)
 {
+
 	return octeon_xkphys_read_8(OCTEON_CVMSEG_LM + offset);
 }
 
 static __inline void
 octeon_cvmseg_write_8(size_t offset, uint64_t value)
 {
-	octeon_xkphys_write_8(OCTEON_CVMSEG_LM + offset, value);
-}
-
-/* XXX */
-static __inline uint32_t
-octeon_disable_interrupt(uint32_t *new)
-{
-	uint32_t s, tmp;
-        
-	__asm __volatile (
-		_ASM_PROLOGUE
-		"	mfc0	%[s], $12		\n"
-		"	and	%[tmp], %[s], ~1	\n"
-		"	mtc0	%[tmp], $12		\n"
-		_ASM_EPILOGUE
-		: [s]"=&r"(s), [tmp]"=&r"(tmp));
-	if (new)
-		*new = tmp;
-	return s;
-}
-
-/* XXX */
-static __inline void
-octeon_restore_status(uint32_t s)
-{
-	__asm __volatile (
-		_ASM_PROLOGUE
-		"	mtc0	%[s], $12		\n"
-		_ASM_EPILOGUE
-		:: [s]"r"(s));
-}
 
-static __inline uint64_t
-octeon_get_cycles(void)
-{ 
-#if defined(__mips_o32)
-	uint32_t s, lo, hi;
-  
-	s = octeon_disable_interrupt((void *)0);
-	__asm __volatile (
-		_ASM_PROLOGUE_MIPS64
-		"	dmfc0	%[lo], $9, 6		\n"
-		"	add	%[hi], %[lo], $0	\n"
-		"	srl	%[hi], 32		\n"
-		"	sll	%[lo], 32		\n"
-		"	srl	%[lo], 32		\n"
-		_ASM_EPILOGUE
-		: [lo]"=&r"(lo), [hi]"=&r"(hi));
-	octeon_restore_status(s);
-	return ((uint64_t)hi << 32) + (uint64_t)lo;
-#else
-	uint64_t tmp;
-
-	__asm __volatile (
-		_ASM_PROLOGUE_MIPS64
-		"	dmfc0	%[tmp], $9, 6		\n"
-		_ASM_EPILOGUE
-		: [tmp]"=&r"(tmp));
-	return tmp;
-#endif
+	octeon_xkphys_write_8(OCTEON_CVMSEG_LM + offset, value);
 }
 
 #endif	/* _MIPS_OCTEON_OCTEONVAR_H_ */

Index: src/sys/arch/mips/cavium/dev/octeon_ipd.c
diff -u src/sys/arch/mips/cavium/dev/octeon_ipd.c:1.6 src/sys/arch/mips/cavium/dev/octeon_ipd.c:1.7
--- src/sys/arch/mips/cavium/dev/octeon_ipd.c:1.6	Mon Jun 22 02:26:20 2020
+++ src/sys/arch/mips/cavium/dev/octeon_ipd.c	Tue Jun 23 05:15:33 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: octeon_ipd.c,v 1.6 2020/06/22 02:26:20 simonb Exp $	*/
+/*	$NetBSD: octeon_ipd.c,v 1.7 2020/06/23 05:15:33 simonb Exp $	*/
 
 /*
  * Copyright (c) 2007 Internet Initiative Japan, Inc.
@@ -27,11 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: octeon_ipd.c,v 1.6 2020/06/22 02:26:20 simonb Exp $");
-
-#include "opt_octeon.h"
-
-#include "opt_octeon.h"
+__KERNEL_RCSID(0, "$NetBSD: octeon_ipd.c,v 1.7 2020/06/23 05:15:33 simonb Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -208,55 +204,6 @@ octipd_offload(uint64_t word2, void *dat
 	*rcflags = cflags;
 }
 
-int
-octipd_red(struct octipd_softc *sc, uint64_t pass_thr, uint64_t drop_thr)
-{
-#if defined(CNMAC_IPD_RED)
-	/*
-	 * no receive problem workaround.
-	 * if not set IPD RED pramaters,
-	 * may become unable to receive packet
-	 * on media mismatch environment
-	 * of self media 100-half duplex.
-	 */
-	uint64_t red_marks;
-	uint64_t red_param;
-	uint64_t red_port;
-
-        red_marks = drop_thr << 32 /* XXX */ | pass_thr;
-        _IPD_WR8(sc, IPD_QOS0_RED_MARKS_OFFSET, red_marks);
-        _IPD_WR8(sc, IPD_QOS1_RED_MARKS_OFFSET, red_marks);
-        _IPD_WR8(sc, IPD_QOS2_RED_MARKS_OFFSET, red_marks);
-        _IPD_WR8(sc, IPD_QOS3_RED_MARKS_OFFSET, red_marks);
-        _IPD_WR8(sc, IPD_QOS4_RED_MARKS_OFFSET, red_marks);
-        _IPD_WR8(sc, IPD_QOS5_RED_MARKS_OFFSET, red_marks);
-        _IPD_WR8(sc, IPD_QOS6_RED_MARKS_OFFSET, red_marks);
-        _IPD_WR8(sc, IPD_QOS7_RED_MARKS_OFFSET, red_marks);
-        red_param = 
-            ((255ull << 24 /* XXX */) / (pass_thr - drop_thr)) |
-            1ull << 32 /* XXX */ |
-            255ull << 40 /* XXX */ |
-            1ull << 48 /* XXX */;
-        _IPD_WR8(sc, IPD_RED_QUE0_PARAM_OFFSET, red_param);
-        _IPD_WR8(sc, IPD_RED_QUE1_PARAM_OFFSET, red_param);
-        _IPD_WR8(sc, IPD_RED_QUE2_PARAM_OFFSET, red_param);
-        _IPD_WR8(sc, IPD_RED_QUE3_PARAM_OFFSET, red_param);
-        _IPD_WR8(sc, IPD_RED_QUE4_PARAM_OFFSET, red_param);
-        _IPD_WR8(sc, IPD_RED_QUE5_PARAM_OFFSET, red_param);
-        _IPD_WR8(sc, IPD_RED_QUE6_PARAM_OFFSET, red_param);
-        _IPD_WR8(sc, IPD_RED_QUE7_PARAM_OFFSET, red_param);
-
-        _IPD_WR8(sc, IPD_BP_PRT_RED_END_OFFSET, 0);
-
-        red_port = 0xfffffffffull |
-            10000ull << 36 /* XXX */ |
-            10000ull << 50 /* XXX */;
-        _IPD_WR8(sc, IPD_RED_PORT_ENABLE_OFFSET, red_port);
-#endif
-
-	return 0;
-}
-
 void
 octipd_sub_port_fcs(struct octipd_softc *sc, int enable)
 {
@@ -264,8 +211,8 @@ octipd_sub_port_fcs(struct octipd_softc 
 
 	sub_port_fcs = _IPD_RD8(sc, IPD_SUB_PORT_FCS_OFFSET);
 	if (enable == 0)
-		CLR(sub_port_fcs, 1 << sc->sc_port);
+		CLR(sub_port_fcs, __BIT(sc->sc_port));
 	else
-		SET(sub_port_fcs, 1 << sc->sc_port);
+		SET(sub_port_fcs, __BIT(sc->sc_port));
 	_IPD_WR8(sc, IPD_SUB_PORT_FCS_OFFSET, sub_port_fcs);
 }
Index: src/sys/arch/mips/cavium/dev/octeon_powvar.h
diff -u src/sys/arch/mips/cavium/dev/octeon_powvar.h:1.6 src/sys/arch/mips/cavium/dev/octeon_powvar.h:1.7
--- src/sys/arch/mips/cavium/dev/octeon_powvar.h:1.6	Mon Jun 22 02:26:20 2020
+++ src/sys/arch/mips/cavium/dev/octeon_powvar.h	Tue Jun 23 05:15:33 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: octeon_powvar.h,v 1.6 2020/06/22 02:26:20 simonb Exp $	*/
+/*	$NetBSD: octeon_powvar.h,v 1.7 2020/06/23 05:15:33 simonb Exp $	*/
 
 /*
  * Copyright (c) 2007 Internet Initiative Japan, Inc.
@@ -50,6 +50,8 @@
 #define POW_WAIT	1
 #define POW_NO_WAIT	0
 
+#define	POW_WORKQ_IRQ(group)		(group)
+
 /* XXX */
 struct octpow_softc {
 	device_t		sc_dev;
@@ -65,17 +67,13 @@ struct octpow_attach_args {
 	bus_space_tag_t		aa_regt;
 };
 
-void			octpow_config(struct octpow_softc *, int);
-void			*octpow_intr_establish(int, int,
-			    void (*)(void *, uint64_t *),
-			    void (*)(int *, int *, uint64_t, void *),
-			    void *);
-void			octpow_error_int_enable(void *, int);
-uint64_t		octpow_error_int_summary(void *);
-int			octpow_ring_reduce(void *);
-int			octpow_ring_grow(void *);
-int			octpow_ring_size(void);
-int			octpow_ring_intr(void);
+void		octpow_config(struct octpow_softc *, int);
+void		octpow_error_int_enable(void *, int);
+uint64_t	octpow_error_int_summary(void *);
+int		octpow_ring_reduce(void *);
+int		octpow_ring_grow(void *);
+int		octpow_ring_size(void);
+int		octpow_ring_intr(void);
 
 #define	_POW_RD8(sc, off) \
 	bus_space_read_8((sc)->sc_regt, (sc)->sc_regh, (off))
@@ -107,91 +105,6 @@ octpow_ops_get_work_load(
 	return octeon_xkphys_read_8(ptr);
 }
 
-/* POW Status Loads */
-
-/*
- * a) get_cur == 0, get_wqp == 0 (pend_tag)
- * b) get_cur == 0, get_wqp == 1 (pend_wqp)
- * c) get_cur == 1, get_wqp == 0, get_rev == 0 (cur_tag_next)
- * d) get_cur == 1, get_wqp == 0, get_rev == 1 (cur_tag_prev)
- * e) get_cur == 1, get_wqp == 1, get_rev == 0 (cur_wqp_next)
- * f) get_cur == 1, get_wqp == 1, get_rev == 1 (cur_wqp_prev)
- */
-
-static __inline uint64_t
-octpow_ops_pow_status(
-	int coreid,			/* 0-15 */
-	int get_rev,			/* 0-1 */
-	int get_cur,			/* 0-1 */
-	int get_wqp)			/* 0-1 */
-{
-	uint64_t ptr =
-	    OCTEON_ADDR_IO_DID(POW_MAJOR_DID, POW_OP_SUBDID_STATUS_LOAD) |
-	    __SHIFTIN(coreid, POW_STATUS_LOAD_COREID) |
-	    __SHIFTIN(get_rev, POW_STATUS_LOAD_GET_REV) |
-	    __SHIFTIN(get_cur, POW_STATUS_LOAD_GET_CUR) |
-	    __SHIFTIN(get_wqp, POW_STATUS_LOAD_GET_WQP);
-
-	return octeon_xkphys_read_8(ptr);
-}
-
-/* POW Memory Loads */
-
-/*
- * a) get_des == 0, get_wqp == 0 (tag)
- * b) get_des == 0, get_wqp == 1 (wqe)
- * c) get_des == 1 (desched)
- */
-
-static __inline uint64_t
-octpow_ops_pow_memory(
-	int index,			/* 0-2047 */
-	int get_des,			/* 0-1 */
-	int get_wqp)			/* 0-1 */
-{
-	uint64_t ptr =
-	    OCTEON_ADDR_IO_DID(POW_MAJOR_DID, POW_OP_SUBDID_MEMORY_LOAD) |
-	    __SHIFTIN(index, POW_MEMORY_LOAD_INDEX) |
-	    __SHIFTIN(get_des, POW_MEMORY_LOAD_GET_DES) |
-	    __SHIFTIN(get_wqp, POW_MEMORY_LOAD_GET_WQP);
-
-	return octeon_xkphys_read_8(ptr);
-}
-
-/* POW Index/Pointer Loads */
-
-/*
- * a) get_rmt == 0, get_des_get_tail == 0
- * b) get_rmt == 0, get_des_get_tail == 1
- * c) get_rmt == 1, get_des_get_tail == 0
- * d) get_rmt == 1, get_des_get_tail == 1
- */
-
-static __inline uint64_t
-octpow_ops_pow_idxptr(
-	int qosgrp,			/* 0-7 */
-	int get_des_get_tail,		/* 0-1 */
-	int get_rmt)			/* 0-1 */
-{
-	uint64_t ptr =
-	    OCTEON_ADDR_IO_DID(POW_MAJOR_DID, POW_OP_SUBDID_IDXPTR_LOAD) |
-	    __SHIFTIN(qosgrp, POW_IDXPTR_LOAD_QOSGRP) |
-	    __SHIFTIN(get_des_get_tail, POW_IDXPTR_LOAD_GET_DES_GET_TAIL) |
-	    __SHIFTIN(get_rmt, POW_IDXPTR_LOAD_GET_RMT);
-
-	return octeon_xkphys_read_8(ptr);
-}
-
-/* NULL_RD Loads */
-
-static __inline uint64_t
-octpow_ops_null_rd_load(void)
-{
-	uint64_t ptr = OCTEON_ADDR_IO_DID(POW_MAJOR_DID, POW_OP_SUBDID_NULL_RD);
- 
-	return octeon_xkphys_read_8(ptr);
-}
-
 /* IOBDMA Operations */
 
 /* ``subdid'' values are inverted between ``get_work_addr'' and ``null_read_id'' */
@@ -406,6 +319,40 @@ octpow_ops_nop(void)
 		0);			/* tag (not used for NOP) */
 }
 
+/*
+ * Check if there is a pending POW tag switch.
+ */
+static __inline int
+octpow_tag_sw_pending(void)
+{
+	int result;
+
+	/*
+	 * "RDHWR rt, $30" returns:
+	 *	0 => pending bit is set
+	 *	1 => pending bit is clear
+	 */
+
+	__asm volatile (
+		"	.set	push\n"
+		"	.set	noreorder\n"
+		"	.set	arch=mips64r2\n"
+		"	rdhwr	%0, $30\n"
+		"	.set	pop\n"
+		: "=r" (result));
+	return result == 0;
+}
+
+/*
+ * Wait until there is no pending POW tag switch.
+ */
+static inline void
+octpow_tag_sw_wait(void)
+{
+	while (octpow_tag_sw_pending())
+		continue;
+}
+
 /* -------------------------------------------------------------------------- */
 
 /*
@@ -432,8 +379,7 @@ octpow_work_response_async(uint64_t scra
 	    return NULL;
 #ifdef __mips_n32
 	KASSERT(addr < MIPS_PHYS_MASK);
-	//if (addr < MIPS_PHYS_MASK)
-		return (uint64_t *)MIPS_PHYS_TO_KSEG0(addr);
+	return (uint64_t *)MIPS_PHYS_TO_KSEG0(addr);
 #else
 	return (uint64_t *)MIPS_PHYS_TO_XKPHYS_CACHED(addr);
 #endif
@@ -463,19 +409,4 @@ octpow_config_int_pc_rate(struct octpow_
 	octpow_config_int_pc(sc, sc->sc_int_pc_base / rate);
 }
 
-/* wait until ready */
-static __inline void
-octpow_tag_sw_wait(void)
-{
-	__asm __volatile (
-		"	.set	push		\n"
-		"	.set	noreorder	\n"
-		"	.set	arch=octeon	\n"
-		"1:	rdhwr	$2, $30		\n"
-		"	beqz	$2, 1b		\n"
-		"	 nop			\n"
-		"	.set	pop		\n"
-	);
-}
-
-#endif /* _OCTEON_POWVAR_H_ */
+#endif /* !_OCTEON_POWVAR_H_ */

Index: src/sys/arch/mips/cavium/dev/octeon_ipdvar.h
diff -u src/sys/arch/mips/cavium/dev/octeon_ipdvar.h:1.4 src/sys/arch/mips/cavium/dev/octeon_ipdvar.h:1.5
--- src/sys/arch/mips/cavium/dev/octeon_ipdvar.h:1.4	Mon Jun 22 02:26:20 2020
+++ src/sys/arch/mips/cavium/dev/octeon_ipdvar.h	Tue Jun 23 05:15:33 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: octeon_ipdvar.h,v 1.4 2020/06/22 02:26:20 simonb Exp $	*/
+/*	$NetBSD: octeon_ipdvar.h,v 1.5 2020/06/23 05:15:33 simonb Exp $	*/
 
 /*
  * Copyright (c) 2007 Internet Initiative Japan, Inc.
@@ -49,7 +49,6 @@ struct octipd_attach_args {
 void	octipd_init(struct octipd_attach_args *, struct octipd_softc **);
 int	octipd_enable(struct octipd_softc *);
 int	octipd_config(struct octipd_softc *);
-int	octipd_red(struct octipd_softc *, uint64_t, uint64_t);
 void	octipd_sub_port_fcs(struct octipd_softc *, int);
 void	octipd_offload(uint64_t, void *, int *);
 
Index: src/sys/arch/mips/cavium/dev/octeon_pko.c
diff -u src/sys/arch/mips/cavium/dev/octeon_pko.c:1.4 src/sys/arch/mips/cavium/dev/octeon_pko.c:1.5
--- src/sys/arch/mips/cavium/dev/octeon_pko.c:1.4	Mon Jun 22 02:26:20 2020
+++ src/sys/arch/mips/cavium/dev/octeon_pko.c	Tue Jun 23 05:15:33 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: octeon_pko.c,v 1.4 2020/06/22 02:26:20 simonb Exp $	*/
+/*	$NetBSD: octeon_pko.c,v 1.5 2020/06/23 05:15:33 simonb Exp $	*/
 
 /*
  * Copyright (c) 2007 Internet Initiative Japan, Inc.
@@ -27,9 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: octeon_pko.c,v 1.4 2020/06/22 02:26:20 simonb Exp $");
-
-#include "opt_octeon.h"
+__KERNEL_RCSID(0, "$NetBSD: octeon_pko.c,v 1.5 2020/06/23 05:15:33 simonb Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -42,6 +40,8 @@ __KERNEL_RCSID(0, "$NetBSD: octeon_pko.c
 #include <mips/cavium/dev/octeon_pkoreg.h>
 #include <mips/cavium/dev/octeon_pkovar.h>
 
+static inline void	octpko_op_store(uint64_t, uint64_t);
+
 #define	_PKO_RD8(sc, off) \
 	bus_space_read_8((sc)->sc_regt, (sc)->sc_regh, (off))
 #define	_PKO_WR8(sc, off, v) \
@@ -91,25 +91,13 @@ octpko_enable(struct octpko_softc *sc)
 	return 0;
 }
 
-#if 0
-void
-octpko_reset(octpko_softc *sc)
-{
-	uint64_t reg_flags;
-
-	reg_flags = _PKO_RD8(sc, PKO_REG_FLAGS_OFFSET);
-	SET(reg_flags, PKO_REG_FLAGS_RESET);
-	_PKO_WR8(sc, PKO_REG_FLAGS_OFFSET, reg_flags);
-}
-#endif
-
 void
 octpko_config(struct octpko_softc *sc)
 {
 	uint64_t reg_cmd_buf = 0;
 
-	SET(reg_cmd_buf, (sc->sc_cmd_buf_pool << 20) & PKO_REG_CMD_BUF_POOL);
-	SET(reg_cmd_buf, sc->sc_cmd_buf_size & PKO_REG_CMD_BUF_SIZE);
+	SET(reg_cmd_buf, __SHIFTIN(sc->sc_cmd_buf_pool, PKO_REG_CMD_BUF_POOL));
+	SET(reg_cmd_buf, __SHIFTIN(sc->sc_cmd_buf_size, PKO_REG_CMD_BUF_SIZE));
 	_PKO_WR8(sc, PKO_REG_CMD_BUF_OFFSET, reg_cmd_buf);
 }
 
@@ -125,10 +113,9 @@ octpko_port_enable(struct octpko_softc *
 	/* XXX assume one queue maped one port */
 	/* Enable packet output by enabling all queues for this port */
 	mem_queue_qos = 0;
-	SET(mem_queue_qos, ((uint64_t)sc->sc_port << 7) & PKO_MEM_QUEUE_QOS_PID);
-	SET(mem_queue_qos, sc->sc_port & PKO_MEM_QUEUE_QOS_QID);
-	SET(mem_queue_qos, ((enable ? 0xffULL : 0x00ULL) << 53) &
-	    PKO_MEM_QUEUE_QOS_QOS_MASK);
+	SET(mem_queue_qos, __SHIFTIN(sc->sc_port, PKO_MEM_QUEUE_QOS_PID));
+	SET(mem_queue_qos, __SHIFTIN(sc->sc_port, PKO_MEM_QUEUE_QOS_QID));
+	SET(mem_queue_qos, enable ? PKO_MEM_QUEUE_QOS_QOS_MASK : 0);
 
 	_PKO_WR8(sc, PKO_REG_READ_IDX_OFFSET, reg_read_idx);
 	_PKO_WR8(sc, PKO_MEM_QUEUE_QOS_OFFSET, mem_queue_qos);
@@ -155,11 +142,11 @@ octpko_port_config(struct octpko_softc *
 	/* assume one queue maped one port */
 	mem_queue_ptrs = 0;
 	SET(mem_queue_ptrs, PKO_MEM_QUEUE_PTRS_TAIL);
-	SET(mem_queue_ptrs, ((uint64_t)0 << 13) & PKO_MEM_QUEUE_PTRS_IDX);
-	SET(mem_queue_ptrs, ((uint64_t)sc->sc_port << 7) & PKO_MEM_QUEUE_PTRS_PID);
-	SET(mem_queue_ptrs, sc->sc_port & PKO_MEM_QUEUE_PTRS_QID);
-	SET(mem_queue_ptrs, ((uint64_t)0xff << 53) & PKO_MEM_QUEUE_PTRS_QOS_MASK);
-	SET(mem_queue_ptrs, ((uint64_t)buf_ptr << 17) & PKO_MEM_QUEUE_PTRS_BUF_PTR);
+	SET(mem_queue_ptrs, __SHIFTIN(0, PKO_MEM_QUEUE_PTRS_IDX));
+	SET(mem_queue_ptrs, __SHIFTIN(sc->sc_port, PKO_MEM_QUEUE_PTRS_PID));
+	SET(mem_queue_ptrs, __SHIFTIN(sc->sc_port, PKO_MEM_QUEUE_PTRS_QID));
+	SET(mem_queue_ptrs, __SHIFTIN(0xff, PKO_MEM_QUEUE_PTRS_QOS_MASK));
+	SET(mem_queue_ptrs, __SHIFTIN(buf_ptr, PKO_MEM_QUEUE_PTRS_BUF_PTR));
 	OCTEON_SYNCW;
 	_PKO_WR8(sc, PKO_MEM_QUEUE_PTRS_OFFSET, mem_queue_ptrs);
 
Index: src/sys/arch/mips/cavium/dev/octeon_powreg.h
diff -u src/sys/arch/mips/cavium/dev/octeon_powreg.h:1.4 src/sys/arch/mips/cavium/dev/octeon_powreg.h:1.5
--- src/sys/arch/mips/cavium/dev/octeon_powreg.h:1.4	Mon Jun 22 12:26:11 2020
+++ src/sys/arch/mips/cavium/dev/octeon_powreg.h	Tue Jun 23 05:15:33 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: octeon_powreg.h,v 1.4 2020/06/22 12:26:11 simonb Exp $	*/
+/*	$NetBSD: octeon_powreg.h,v 1.5 2020/06/23 05:15:33 simonb Exp $	*/
 
 /*
  * Copyright (c) 2007 Internet Initiative Japan, Inc.
@@ -35,8 +35,7 @@
 
 /* ---- register addresses */
 
-#define	POW_PP_GRP_MSK0				UINT64_C(0x0001670000000000)
-#define	POW_PP_GRP_MSK1				UINT64_C(0x0001670000000008)
+#define	POW_PP_GRP_MSK(core)			(UINT64_C(0x0001670000000000) + (core) * 8)
 #define	POW_WQ_INT_THR0				UINT64_C(0x0001670000000080)
 #define	POW_WQ_INT_THR1				UINT64_C(0x0001670000000088)
 #define	POW_WQ_INT_THR2				UINT64_C(0x0001670000000090)
@@ -131,8 +130,7 @@
 #define POW_BASE				UINT64_C(0x0001670000000000)
 #define POW_SIZE				UINT64_C(0x400)
 
-#define	POW_PP_GRP_MSK0_OFFSET			UINT64_C(0x0)
-#define	POW_PP_GRP_MSK1_OFFSET			UINT64_C(0x8)
+#define	POW_PP_GRP_MSK_OFFSET(core)		(UINT64_C(0) + (core) * 8)
 #define	POW_WQ_INT_THR0_OFFSET			UINT64_C(0x80)
 #define	POW_WQ_INT_THR1_OFFSET			UINT64_C(0x88)
 #define	POW_WQ_INT_THR2_OFFSET			UINT64_C(0x90)

Index: src/sys/arch/mips/cavium/dev/octeon_pkovar.h
diff -u src/sys/arch/mips/cavium/dev/octeon_pkovar.h:1.5 src/sys/arch/mips/cavium/dev/octeon_pkovar.h:1.6
--- src/sys/arch/mips/cavium/dev/octeon_pkovar.h:1.5	Mon Jun 22 02:26:20 2020
+++ src/sys/arch/mips/cavium/dev/octeon_pkovar.h	Tue Jun 23 05:15:33 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: octeon_pkovar.h,v 1.5 2020/06/22 02:26:20 simonb Exp $	*/
+/*	$NetBSD: octeon_pkovar.h,v 1.6 2020/06/23 05:15:33 simonb Exp $	*/
 
 /*
  * Copyright (c) 2007 Internet Initiative Japan, Inc.
@@ -138,7 +138,7 @@ octpko_op_store(uint64_t args, uint64_t 
 	addr = OCTEON_ADDR_IO_DID(PKO_MAJOR_DID, PKO_SUB_DID) | args;
 	/* XXX */
 	OCTEON_SYNCW;
-	octeon_write_csr(addr, value);
+	octeon_xkphys_write_8(addr, value);
 }
 
 static __inline void

Index: src/sys/arch/mips/cavium/dev/octeon_pow.c
diff -u src/sys/arch/mips/cavium/dev/octeon_pow.c:1.9 src/sys/arch/mips/cavium/dev/octeon_pow.c:1.10
--- src/sys/arch/mips/cavium/dev/octeon_pow.c:1.9	Mon Jun 22 02:26:20 2020
+++ src/sys/arch/mips/cavium/dev/octeon_pow.c	Tue Jun 23 05:15:33 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: octeon_pow.c,v 1.9 2020/06/22 02:26:20 simonb Exp $	*/
+/*	$NetBSD: octeon_pow.c,v 1.10 2020/06/23 05:15:33 simonb Exp $	*/
 
 /*
  * Copyright (c) 2007 Internet Initiative Japan, Inc.
@@ -27,195 +27,26 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: octeon_pow.c,v 1.9 2020/06/22 02:26:20 simonb Exp $");
-
-#include "opt_octeon.h"	/* CNMAC_DEBUG */
+__KERNEL_RCSID(0, "$NetBSD: octeon_pow.c,v 1.10 2020/06/23 05:15:33 simonb Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
-#include <sys/types.h>
-#include <sys/kernel.h>				/* hz */
-#include <sys/malloc.h>
-#include <sys/device.h>				/* evcnt */
-#include <sys/syslog.h>				/* evcnt */
-
-#include <sys/bus.h>
 
 #include <mips/include/locore.h>
 #include <mips/cavium/octeonvar.h>
 #include <mips/cavium/include/iobusvar.h>
-#include <mips/cavium/dev/octeon_ciureg.h>	/* XXX */
 #include <mips/cavium/dev/octeon_powreg.h>
 #include <mips/cavium/dev/octeon_powvar.h>
 
-/* XXX ensure assertion */
-#if !defined(DIAGNOSTIC)
-#define DIAGNOSTIC
-#endif
-
-extern int ipflow_fastforward_disable_flags;
-
-struct octpow_intr_handle {
-	void				*pi_ih;
-	struct octpow_softc		*pi_sc;
-	int				pi_group;
-	void				(*pi_cb)(void *, uint64_t *);
-	void				*pi_data;
-};
-
 void			octpow_bootstrap(struct octeon_config *);
 
 static void		octpow_init(struct octpow_softc *);
 static void		octpow_init_regs(struct octpow_softc *);
-static inline int	octpow_tag_sw_poll(void) __unused;
-static inline void	octpow_tag_sw_wait(void);
-static inline void	octpow_config_int_pc(struct octpow_softc *, int);
-static inline void      octpow_config_int(struct octpow_softc *, int, uint64_t,
-			    uint64_t, uint64_t);
-static inline void	octpow_intr_work(struct octpow_softc *,
-			    struct octpow_intr_handle *, int);
-static int		octpow_intr(void *);
+static inline void      octpow_config_int(struct octpow_softc *, int,
+			    uint64_t, uint64_t, uint64_t);
 
-/* XXX */
 struct octpow_softc	octpow_softc;
 
-/*
- * XXX: parameter tuning is needed: see files.octeon
- */
-#ifndef CNMAC_RING_MAX
-#define CNMAC_RING_MAX 512
-#endif
-#ifndef CNMAC_RING_MIN
-#define CNMAC_RING_MIN 1
-#endif
-
-#ifdef CNMAC_INTR_FEEDBACK_RING
-int max_recv_cnt = CNMAC_RING_MAX;
-int min_recv_cnt = CNMAC_RING_MIN;
-int recv_cnt = CNMAC_RING_MIN;
-int int_rate = 1;
-#endif
-
-/* -------------------------------------------------------------------------- */
-
-/* ---- utility functions */
-
-
-/* ---- status by coreid */
-
-static inline uint64_t
-octpow_status_by_coreid_pend_tag(int coreid)
-{
-	return octpow_ops_pow_status(coreid, 0, 0, 0);
-}
-
-static inline uint64_t
-octpow_status_by_coreid_pend_wqp(int coreid)
-{
-	return octpow_ops_pow_status(coreid, 0, 0, 1);
-}
-
-static inline uint64_t
-octpow_status_by_coreid_cur_tag_next(int coreid)
-{
-	return octpow_ops_pow_status(coreid, 0, 1, 0);
-}
-
-static inline uint64_t
-octpow_status_by_coreid_cur_tag_prev(int coreid)
-{
-	return octpow_ops_pow_status(coreid, 1, 1, 0);
-}
-
-static inline uint64_t
-octpow_status_by_coreid_cur_wqp_next(int coreid)
-{
-	return octpow_ops_pow_status(coreid, 0, 1, 1);
-}
-
-static inline uint64_t
-octpow_status_by_coreid_cur_wqp_prev(int coreid)
-{
-	return octpow_ops_pow_status(coreid, 1, 1, 1);
-}
-
-/* ---- status by index */
-
-static inline uint64_t
-octpow_status_by_index_tag(int index)
-{
-	return octpow_ops_pow_memory(index, 0, 0);
-}
-
-static inline uint64_t
-octpow_status_by_index_wqp(int index)
-{
-	return octpow_ops_pow_memory(index, 0, 1);
-}
-
-static inline uint64_t
-octpow_status_by_index_desched(int index)
-{
-	return octpow_ops_pow_memory(index, 1, 0);
-}
-
-/* ---- status by qos level */
-
-static inline uint64_t
-octpow_status_by_qos_free_loc(int qos)
-{
-	return octpow_ops_pow_idxptr(qos, 0, 0);
-}
-
-/* ---- status by desched group */
-
-static inline uint64_t
-octpow_status_by_grp_nosched_des(int grp)
-{
-	return octpow_ops_pow_idxptr(grp, 0, 1);
-}
-
-/* ---- status by memory input queue */
-
-static inline uint64_t
-octpow_status_by_queue_remote_head(int queue)
-{
-	return octpow_ops_pow_idxptr(queue, 1, 0);
-}
-
-static inline uint64_t
-octpow_status_by_queue_remote_tail(int queue)
-{
-	return octpow_ops_pow_idxptr(queue, 1, 0);
-}
-
-/* ---- tag switch */
-
-/*
- * "RDHWR rt, $30" returns:
- *	0 => pending bit is set
- *	1 => pending bit is clear
- */
-
-/* return 1 if pending bit is clear (ready) */
-static inline int
-octpow_tag_sw_poll(void)
-{
-	uint64_t result;
-
-	/* XXX O32 */
-	__asm __volatile (
-		"	.set	push		\n"
-		"	.set	noreorder	\n"
-		"	.set	arch=octeon	\n"
-		"	rdhwr	%[result], $30	\n"
-		"	 .set	pop		\n"
-		: [result]"=r"(result)
-	);
-	/* XXX O32 */
-	return (int)result;
-}
-
 /* -------------------------------------------------------------------------- */
 
 /* ---- initialization and configuration */
@@ -266,30 +97,6 @@ octpow_config(struct octpow_softc *sc, i
 	    0x00);		/* IQ */
 }
 
-void *
-octpow_intr_establish(int group, int level, void (*cb)(void *, uint64_t *),
-    void (*fcb)(int*, int *, uint64_t, void *), void *data)
-{
-	struct octpow_intr_handle *pow_ih;
-
-	KASSERT(group >= 0);
-	KASSERT(group < 16);
-
-	pow_ih = malloc(sizeof(*pow_ih), M_DEVBUF, M_WAITOK);
-	pow_ih->pi_ih = octeon_intr_establish(
-	    CIU_INT_WORKQ_0 + group,
-	    level,
-	    octpow_intr, pow_ih);
-	KASSERT(pow_ih->pi_ih != NULL);
-
-	pow_ih->pi_sc = &octpow_softc;	/* XXX */
-	pow_ih->pi_group = group;
-	pow_ih->pi_cb = cb;
-	pow_ih->pi_data = data;
-
-	return pow_ih;
-}
-
 void
 octpow_init(struct octpow_softc *sc)
 {
@@ -309,158 +116,3 @@ octpow_init_regs(struct octpow_softc *sc
 	if (status != 0)
 		panic("can't map %s space", "pow register");
 }
-
-/* -------------------------------------------------------------------------- */
-
-/* ---- interrupt handling */
-
-/*
- * Interrupt handling by fixed count, following Cavium's SDK code.
- *
- * XXX the fixed count (MAX_RX_CNT) could be changed dynamically?
- *
- * XXX this does not utilize "tag switch" very well
- */
-/*
- * usually all packet receive
- */
-#define MAX_RX_CNT 0x7fffffff 
-
-static inline void
-octpow_intr_work(struct octpow_softc *sc, struct octpow_intr_handle *pow_ih,
-    int recv_limit)
-{
-	uint64_t *work;
-	uint64_t count = 0;
-
-	_POW_WR8(sc, POW_PP_GRP_MSK0_OFFSET, __BIT(pow_ih->pi_group));
-
-	for (count = 0; count < recv_limit; count++) {
-		octpow_tag_sw_wait();
-		octpow_work_request_async(
-		    OCTEON_CVMSEG_OFFSET(csm_pow_intr), POW_NO_WAIT);
-		work = (uint64_t *)octpow_work_response_async(
-		    OCTEON_CVMSEG_OFFSET(csm_pow_intr));
-		if (work == NULL)
-			break;
-		(*pow_ih->pi_cb)(pow_ih->pi_data, work);
-	}
-}
-
-static int
-octpow_intr(void *data)
-{
-	struct octpow_intr_handle *pow_ih = data;
-	struct octpow_softc *sc = pow_ih->pi_sc;
-	uint64_t wq_int_mask = __BIT(pow_ih->pi_group);
-
-#ifdef CNMAC_INTR_FEEDBACK_RING
-	octpow_intr_work(sc, pow_ih, recv_cnt);
-#else
-	octpow_intr_work(sc, pow_ih, INT_MAX);
-#endif /* CNMAC_INTR_FEEDBACK_RING */
-
-	_POW_WR8(sc, POW_WQ_INT_OFFSET,
-	    __SHIFTIN(wq_int_mask, POW_WQ_INT_WQ_INT));
-	return 1;
-}
-
-#ifdef CNMAC_INTR_FEEDBACK_RING
-int
-octpow_ring_reduce(void *arg)
-{
-	struct octpow_softc *sc = arg;
-	int new, newi;
-	int s;
-
-#if 0
-	if (ipflow_fastforward_disable_flags == 0) {
-		newi = int_rate = 1;
-		octpow_config_int_pc_rate(sc, int_rate);
-		return recv_cnt;
-	}
-#endif
-
-	new = recv_cnt / 2;
-	if (new < min_recv_cnt) {
-		newi = int_rate << 1;
-		if (newi > 128) {
-			newi = 128;
-#ifdef POW_DEBUG
-			log(LOG_DEBUG,
-				"Min intr rate.\n");
-#endif
-			new = min_recv_cnt;
-		}
-		else {
-			log(LOG_DEBUG,
-				"pow interrupt rate optimized %d->%d.\n",
-				int_rate, newi);
-			int_rate = newi;
-			octpow_config_int_pc_rate(sc, int_rate);
-			new = max_recv_cnt;
-		}
-	}
-
-	s = splhigh(); /* XXX */
-	recv_cnt = new;
-	splx(s);
-
-	return new;
-}
-
-int
-octpow_ring_grow(void *arg)
-{
-	struct octpow_softc *sc = arg;
-	int new, newi;
-	int s;
-
-#if 0
-	if (ipflow_fastforward_disable_flags == 0) {
-		newi = int_rate = 1;
-		octpow_config_int_pc_rate(sc, int_rate);
-		return recv_cnt;
-	}
-#endif
-
-	new = recv_cnt + 1;
-	if (new > max_recv_cnt) {
-		newi = int_rate >> 1;
-		if (newi <= 0) {
-			newi = 1;
-#ifdef POW_DEBUG
-			log(LOG_DEBUG,
-				"Max intr rate.\n");
-#endif
-			new = max_recv_cnt;
-		}
-		else {
-			log(LOG_DEBUG,
-				"pow interrupt rate optimized %d->%d.\n",
-				int_rate, newi);
-			int_rate = newi;
-			octpow_config_int_pc_rate(sc, int_rate);
-			new = min_recv_cnt;
-		}
-	}
-
-	s = splhigh(); /* XXX */
-	recv_cnt = new;
-	splx(s);
-
-	return new;
-}
-
-int
-octpow_ring_size(void)
-{
-	return recv_cnt;
-}
-
-int
-octpow_ring_intr(void)
-{
-	return int_rate;
-}
-#endif /* CNMAC_INTR_FEEDBACK_RING */

Reply via email to