Home | History | Annotate | only in /src/sys/arch/mips/cavium
History log of /src/sys/arch/mips/cavium
RevisionDateAuthorComments
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file autoconf.h was added on branch tls-maxphys on 2017-12-03 11:36:26 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file autoconf.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.11 06-Sep-2025  thorpej Re-factor the console-related code into fdt_console.[ch]
 1.10 06-Sep-2021  jmcneill Instead of requiring drivers to be explicit about their device memory
mapping requirements, move this decision into the fdt layer. This
introduces a new MD function, fdtbus_bus_tag_create, which is responsible
for returning per-node bus_space handles.
 1.9 07-Aug-2021  thorpej Merge thorpej-cfargs2.
 1.8 10-May-2021  thorpej branches: 1.8.4;
Specify the "fdt" interface attribute when configuring via FDT, since
mainbus also carries the "mainbus" interface attribute.
 1.7 24-Apr-2021  thorpej branches: 1.7.2; 1.7.4;
Merge thorpej-cfargs branch:

Simplify and make extensible the config_search() / config_found() /
config_attach() interfaces: rather than having different variants for
which arguments you want pass along, just have a single call that
takes a variadic list of tag-value arguments.

Adjust all call sites:
- Simplify wherever possible; don't pass along arguments that aren't
actually needed.
- Don't be explicit about what interface attribute is attaching if
the device only has one. (More simplification.)
- Add a config_probe() function to be used in indirect configuiration
situations, making is visibly easier to see when indirect config is
in play, and allowing for future change in semantics. (As of now,
this is just a wrapper around config_match(), but that is an
implementation detail.)

Remove unnecessary or redundant interface attributes where they're not
needed.

There are currently 5 "cfargs" defined:
- CFARG_SUBMATCH (submatch function for direct config)
- CFARG_SEARCH (search function for indirect config)
- CFARG_IATTR (interface attribte)
- CFARG_LOCATORS (locators array)
- CFARG_DEVHANDLE (devhandle_t - wraps OFW, ACPI, etc. handles)

...and a sentinel value CFARG_EOL.

Add some extra sanity checking to ensure that interface attributes
aren't ambiguous.

Use CFARG_DEVHANDLE in MI FDT, OFW, and ACPI code, and macppc and shark
ports to associate those device handles with device_t instance. This
will trickle trough to more places over time (need back-end for pre-OFW
Sun OBP; any others?).
 1.6 28-Sep-2020  jmcneill branches: 1.6.4;
faa_a4x_bst is gone
 1.5 18-Aug-2020  simonb We don't need to call the POW and FGA bootstrap functions from the FDT
mainbus attach, the iobus attach code does this already and is called
for both iobus-only and FDT cases anyway.

After discussion with jmcneill@.
 1.4 17-Aug-2020  jmcneill Attach an iobus with octrnm even if using devicetree (there is no
corresponding node for this device in the DT).
 1.3 16-Jul-2020  jmcneill Initialize FDT console device
 1.2 16-Jul-2020  jmcneill FDT support for Cavium OCTEON MIPS SoCs. WIP.
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file mainbus.c was added on branch tls-maxphys on 2017-12-03 11:36:26 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file mainbus.c was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.6.4.2 22-Mar-2021  thorpej Mechanical conversion of config_found_sm_loc() -> config_found().
CFARG_IATTR usage needs to be audited.
 1.6.4.1 21-Mar-2021  thorpej Give config_found() the same variadic arguments treatment as
config_search(). This commit only adds the CFARG_EOL sentinel
to the existing config_found() calls. Conversion of config_found_sm_loc()
and config_found_ia() call sites will be in subsequent commits.
 1.7.4.1 31-May-2021  cjep sync with head
 1.7.2.1 13-May-2021  thorpej Sync with HEAD.
 1.8.4.1 04-Aug-2021  thorpej Adapt to CFARGS().
 1.2 01-Jun-2015  matt branches: 1.2.2; 1.2.18;
Rework cavium support in preparation for MULTIPROCESSOR support
 1.1 29-Apr-2015  hikaru Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.2.18.2 03-Dec-2017  jdolecek update from HEAD
 1.2.18.1 01-Jun-2015  jdolecek file mainbus_octeon1p.c was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.2.2.2 06-Jun-2015  skrll Sync with HEAD
 1.2.2.1 01-Jun-2015  skrll file mainbus_octeon1p.c was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.6 17-Aug-2020  jmcneill Attach an iobus with octrnm even if using devicetree (there is no
corresponding node for this device in the DT).
 1.5 23-Jun-2020  simonb Redo cnmac attachments - cnmacM @ gmxN @ pip0 @ iobus
 1.4 31-May-2020  simonb Finish rename of all Cavium Octeon device driver functions, structs etc from
"octeon_foo" to "octfoo" (missed octeon_uart + entries in iobus config).
 1.3 31-May-2020  simonb Clean up Cavium Octeon device names. Rename devices from "octeon_foo"
to "octfoo" - this follows the naming conventions used by many other
MIPS CPUs.
 1.2 01-May-2015  hikaru branches: 1.2.2; 1.2.18;
Use dwc2 instead of octeon_usbc, and unify octeon_usbn to new octeon_dwctwo.
Internal USB memory stick of EdgeRouter Lite works now.
 1.1 29-Apr-2015  hikaru Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.2.18.2 03-Dec-2017  jdolecek update from HEAD
 1.2.18.1 01-May-2015  jdolecek file octeon1p_iobus.c was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.2.2.2 06-Jun-2015  skrll Sync with HEAD
 1.2.2.1 01-May-2015  skrll file octeon1p_iobus.c was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.3 07-Aug-2021  thorpej Merge thorpej-cfargs2.
 1.2 24-Apr-2021  thorpej branches: 1.2.8;
Merge thorpej-cfargs branch:

Simplify and make extensible the config_search() / config_found() /
config_attach() interfaces: rather than having different variants for
which arguments you want pass along, just have a single call that
takes a variadic list of tag-value arguments.

Adjust all call sites:
- Simplify wherever possible; don't pass along arguments that aren't
actually needed.
- Don't be explicit about what interface attribute is attaching if
the device only has one. (More simplification.)
- Add a config_probe() function to be used in indirect configuiration
situations, making is visibly easier to see when indirect config is
in play, and allowing for future change in semantics. (As of now,
this is just a wrapper around config_match(), but that is an
implementation detail.)

Remove unnecessary or redundant interface attributes where they're not
needed.

There are currently 5 "cfargs" defined:
- CFARG_SUBMATCH (submatch function for direct config)
- CFARG_SEARCH (search function for indirect config)
- CFARG_IATTR (interface attribte)
- CFARG_LOCATORS (locators array)
- CFARG_DEVHANDLE (devhandle_t - wraps OFW, ACPI, etc. handles)

...and a sentinel value CFARG_EOL.

Add some extra sanity checking to ensure that interface attributes
aren't ambiguous.

Use CFARG_DEVHANDLE in MI FDT, OFW, and ACPI code, and macppc and shark
ports to associate those device handles with device_t instance. This
will trickle trough to more places over time (need back-end for pre-OFW
Sun OBP; any others?).
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18; 1.1.36;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.36.2 22-Mar-2021  thorpej Audit CFARG_IATTR in config_found() calls, and remove it in situations
where the interface attribute is not ambiguous.
 1.1.36.1 22-Mar-2021  thorpej Mechanical conversion of config_found_sm_loc() -> config_found().
CFARG_IATTR usage needs to be audited.
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_bootbus.c was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_bootbus.c was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.2.8.1 04-Aug-2021  thorpej Adapt to CFARGS().
 1.22 03-Mar-2022  riastradh mips: Carefully use device_set_private for cpuN.

But don't do it in cpu_attach_common because the callers aren't set
up right -- instead leave a comment about what's wrong, to be dealt
with later.
 1.21 07-Aug-2021  thorpej Merge thorpej-cfargs2.
 1.20 03-Aug-2021  andvar Fix various typos in comments. Also add missing NetBSD RCS Id in some of these files.
 1.19 24-Apr-2021  thorpej branches: 1.19.8;
Merge thorpej-cfargs branch:

Simplify and make extensible the config_search() / config_found() /
config_attach() interfaces: rather than having different variants for
which arguments you want pass along, just have a single call that
takes a variadic list of tag-value arguments.

Adjust all call sites:
- Simplify wherever possible; don't pass along arguments that aren't
actually needed.
- Don't be explicit about what interface attribute is attaching if
the device only has one. (More simplification.)
- Add a config_probe() function to be used in indirect configuiration
situations, making is visibly easier to see when indirect config is
in play, and allowing for future change in semantics. (As of now,
this is just a wrapper around config_match(), but that is an
implementation detail.)

Remove unnecessary or redundant interface attributes where they're not
needed.

There are currently 5 "cfargs" defined:
- CFARG_SUBMATCH (submatch function for direct config)
- CFARG_SEARCH (search function for indirect config)
- CFARG_IATTR (interface attribte)
- CFARG_LOCATORS (locators array)
- CFARG_DEVHANDLE (devhandle_t - wraps OFW, ACPI, etc. handles)

...and a sentinel value CFARG_EOL.

Add some extra sanity checking to ensure that interface attributes
aren't ambiguous.

Use CFARG_DEVHANDLE in MI FDT, OFW, and ACPI code, and macppc and shark
ports to associate those device handles with device_t instance. This
will trickle trough to more places over time (need back-end for pre-OFW
Sun OBP; any others?).
 1.18 28-Jul-2020  simonb branches: 1.18.4;
Change cpus_booted back to a simple variable instead of a kcpuset.
octeon_cpu_spinup() was trying to set CPU status immediately on kernel
startup _well_ before the kcpuset was initialised.
 1.17 22-Jul-2020  jmcneill Initialize PageMask and Wired registers on secondary processors.
 1.16 21-Jul-2020  simonb Support "boot -1" to start an MP kernel in uniprocessor mode.
Sort sys/* includes while here.
 1.15 19-Jul-2020  simonb KNF whitespace nits.
 1.14 17-Jul-2020  jmcneill Remove 2 CPU limit in OCTEON interrupt controller driver.
 1.13 23-Jun-2020  simonb Minor tweaks and cleanup.
 1.12 23-Jan-2018  maya if 0 out unused code which is currently breaking my local builds
 1.11 22-Jan-2018  maya Fix RCSID (hopefully)
 1.10 19-Aug-2016  skrll branches: 1.10.14;
Fix insn #2 printf in octeon_fixup_cpu_info_references
 1.9 19-Aug-2016  skrll Remove useless cast
 1.8 19-Aug-2016  martin Typo in #ifdef - the per cpu wdog softint wasn't initialized.
 1.7 11-Jul-2016  matt Change MIPS to use the common pmap code.
Switch to 8KB pages on CPUs with a R4K MMU.
Simplify cache code.
Merge in most of changes from matt-mips64 branch
 1.6 11-Jul-2016  skrll Fix an aprint_normal
 1.5 10-Jun-2015  matt Transition from __cpuset_t to kcpuset_t *. This brings the local pmap one
step closer to uvm/pmap, its eventual replacement. Tested on ERLITE MP kernel.
 1.4 09-Jun-2015  martin Reenable preemption before returning an error when trying to set the
watchdog to an invalid period.
 1.3 06-Jun-2015  matt Use ci_nmi_stack
 1.2 06-Jun-2015  matt Add wdog support
cleanup IPI and MP support
Add NMI support.
 1.1 01-Jun-2015  matt branches: 1.1.2;
Rework cavium support in preparation for MULTIPROCESSOR support
 1.1.2.4 05-Oct-2016  skrll Sync with HEAD
 1.1.2.3 22-Sep-2015  skrll Sync with HEAD
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 01-Jun-2015  skrll file octeon_cpunode.c was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.10.14.2 03-Dec-2017  jdolecek update from HEAD
 1.10.14.1 19-Aug-2016  jdolecek file octeon_cpunode.c was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.18.4.1 21-Mar-2021  thorpej Give config_found() the same variadic arguments treatment as
config_search(). This commit only adds the CFARG_EOL sentinel
to the existing config_found() calls. Conversion of config_found_sm_loc()
and config_found_ia() call sites will be in subsequent commits.
 1.19.8.1 04-Aug-2021  thorpej Adapt to CFARGS().
 1.3 15-Dec-2019  tsutsui Remove clause 3 and 4 leftovers from TNF licenses in more sources.

Confirmed by martin@ in PR/54760.
 1.2 11-Jul-2016  matt branches: 1.2.16; 1.2.20; 1.2.24;
Change MIPS to use the common pmap code.
Switch to 8KB pages on CPUs with a R4K MMU.
Simplify cache code.
Merge in most of changes from matt-mips64 branch
 1.1 29-Apr-2015  hikaru branches: 1.1.2;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.2.3 05-Oct-2016  skrll Sync with HEAD
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_dma.c was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.2.24.1 18-Dec-2019  martin Pull up following revision(s) (requested by tsutsui in ticket #570):

sys/compat/netbsd32/netbsd32_compat_50_sysv.c: revision 1.3
sys/dev/raidframe/rf_compat50.h: revision 1.6
sys/arch/emips/emips/bus_space.c: revision 1.3
sys/compat/net/if.h: revision 1.5
sys/arch/emips/stand/common/bootinfo.c: revision 1.2
sys/compat/common/sysv_msg_50.c: revision 1.5
sys/compat/common/kern_time_30.c: revision 1.8
sys/arch/emips/stand/common/bootinfo.h: revision 1.2
sys/arch/ia64/include/bus.h: revision 1.4
sys/arch/ia64/ia64/bus_space.c: revision 1.2
sys/compat/common/sysv_shm_50.c: revision 1.5
sys/dev/ic/adw.h: revision 1.15
sys/compat/common/uipc_syscalls_50.c: revision 1.10
sys/arch/emips/ebus/flash_ebus.c: revision 1.22
sys/dev/ic/adv.h: revision 1.15
sys/dev/ic/adwmcode.c: revision 1.18
sys/dev/ic/advlib.c: revision 1.29
sys/arch/hpcarm/include/kloader.h: revision 1.3
sys/dev/usb/uberry.c: revision 1.16
sys/compat/common/sysv_sem_50.c: revision 1.5
sys/compat/netbsd32/netbsd32_compat_50.c: revision 1.43
sys/dev/ic/advlib.h: revision 1.21
sys/dev/ic/adv.c: revision 1.50
sys/compat/netinet6/in6_var.h: revision 1.5
sys/arch/hpc/stand/hpcboot/arm/arm_sa1100_asm.asm: revision 1.2
sys/arch/emips/include/loadfile_machdep.h: revision 1.3
sys/arch/emips/stand/common/prom_iface.c: revision 1.7
sys/dev/ic/adw.c: revision 1.56
sys/dev/ic/adwmcode.h: revision 1.12
sys/dev/ic/advmcode.c: revision 1.10
sys/arch/emips/ebus/ace_ebus.c: revision 1.22
sys/compat/netbsd32/netbsd32_compat_60.c: revision 1.5
sys/dev/raidframe/rf_compat50.c: revision 1.13
sys/arch/x68k/dev/intiovar.h: revision 1.15
sys/dev/usb/uipad.c: revision 1.8
sys/arch/zaurus/include/kloader.h: revision 1.3
sys/arch/emips/stand/common/bootxx.c: revision 1.2
sys/dev/ic/adwlib.h: revision 1.23
sys/dev/ic/adwlib.c: revision 1.44
sys/compat/netbsd32/netbsd32_compat_16.c: revision 1.3
sys/arch/amigappc/include/intr.h: revision 1.27
sys/arch/x68k/dev/mfp.c: revision 1.27
sys/arch/arm/at91/at91dbgu.c: revision 1.17
sys/dev/ic/advmcode.h: revision 1.7
sys/compat/ultrix/ultrix_exec.h: revision 1.7
sys/compat/common/vfs_syscalls_50.c: revision 1.24
sys/arch/mips/cavium/octeon_dma.c: revision 1.3
sys/arch/hpc/stand/hpcboot/arm/arm_pxa2x0_asm.asm: revision 1.2

Remove clause 3 and 4 from TNF licenses.
Ok'ed by martin@ in PR/54760.

Remove clause 3 and 4 leftovers from TNF licenses in more sources.
Confirmed by martin@ in PR/54760.
 1.2.20.1 08-Apr-2020  martin Merge changes from current as of 20200406
 1.2.16.2 03-Dec-2017  jdolecek update from HEAD
 1.2.16.1 11-Jul-2016  jdolecek file octeon_dma.c was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.27 09-Apr-2022  riastradh mips/cavium: Insert appropriate membars around IPIs.
 1.26 26-Mar-2022  riastradh mips/cavium: Simplify membars around interrupt establishment.

Previously I used xc_barrier to ensure the initialization of the
struct octeon_intrhand was witnessed on all CPUs before publishing
it, in order to avoid needing any barrier on the usage side to be
issued by the interrupt handler.

But there's no need to avoid atomic_load_consume at time of
interrupt: on MIPS it's the same as atomic_load_relaxed anyway, so
there's no additional memory barrier cost here.
 1.25 23-Mar-2022  riastradh mips/cavium: Fix membars around establishing interrupt handlers.
 1.24 18-Aug-2020  skrll Fix MULTIPROCESSOR build
 1.23 17-Aug-2020  jmcneill IPI_SHOOTDOWN needs to be IPL_SCHED. Spotted by nick.
 1.22 05-Aug-2020  simonb Apply some static to some symbols.
 1.21 05-Aug-2020  simonb Target all device interrupts to cpu0.

Patch from skrll@. Code is conditional, hopefully not needed long term.
 1.20 20-Jul-2020  jmcneill Simplify IPI handling even more for now and run everything at IPL_HIGH.
 1.19 20-Jul-2020  jmcneill Fix confusion between ipi bitmask and mbox register bit assignments.
 1.18 17-Jul-2020  jmcneill Remove 2 CPU limit in OCTEON interrupt controller driver.
 1.17 17-Jul-2020  jmcneill Simplify IPI handling and change IPLs of IPI_HALT, IPI_XCALL, and
IPI_GENERIC from IPL_SCHED to IPL_HIGH.
 1.16 17-Jul-2020  jmcneill Cleanup handling of multiple banks.
 1.15 16-Jul-2020  jmcneill Support 128 IRQs instead of 64. This is icky and needs to be cleaned up.
 1.14 23-Jun-2020  simonb Don't include "opt_octeon.h" any more.
 1.13 20-Jun-2020  riastradh Nix trailing whitespace.
 1.12 19-Jun-2020  simonb Simplify interrupt definition: remove mostly unused masks and just
configure everything using interrupt numbers.
 1.11 31-May-2020  simonb Rename all Cavium Octeon device driver functions, structs etc from
"octeon_foo" to "octfoo", except "octeon_eth" becomes "cnmac".
 1.10 30-Mar-2017  skrll branches: 1.10.12;
Indentation
 1.9 28-Nov-2016  mrg branches: 1.9.2;
fix non-DIAG builds.
 1.8 31-Oct-2016  skrll Fixup IPI interrupt delivery and splsched mask so that
sys/uvm/pmap/pmap_tlb.c

541 KASSERTMSG(ci->ci_cpl >= IPL_SCHED,
542 "%s: cpl (%d) < IPL_SCHED (%d)",
543 __func__, ci->ci_cpl, IPL_SCHED);

doesn't fire.
 1.7 20-Aug-2016  skrll Need to set ci_request_ipis otherwise they won't get delivered.

Correct the test for the IPL_HIGH ipis
 1.6 12-Jul-2016  skrll branches: 1.6.2;
#include "opt_multiprocessor.h" as this file has #ifdef MULTIPROCESSOR
 1.5 11-Jul-2016  matt Change MIPS to use the common pmap code.
Switch to 8KB pages on CPUs with a R4K MMU.
Simplify cache code.
Merge in most of changes from matt-mips64 branch
 1.4 06-Jun-2015  matt Add wdog support
cleanup IPI and MP support
Add NMI support.
 1.3 01-Jun-2015  matt branches: 1.3.2;
Rework cavium support in preparation for MULTIPROCESSOR support
 1.2 19-May-2015  matt Add per irq evcnt's
 1.1 29-Apr-2015  hikaru Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.3.2.6 28-Aug-2017  skrll Sync with HEAD
 1.3.2.5 05-Dec-2016  skrll Sync with HEAD
 1.3.2.4 05-Oct-2016  skrll Sync with HEAD
 1.3.2.3 22-Sep-2015  skrll Sync with HEAD
 1.3.2.2 06-Jun-2015  skrll Sync with HEAD
 1.3.2.1 01-Jun-2015  skrll file octeon_intr.c was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.6.2.3 26-Apr-2017  pgoyette Sync with HEAD
 1.6.2.2 07-Jan-2017  pgoyette Sync with HEAD. (Note that most of these changes are simply $NetBSD$
tag issues.)
 1.6.2.1 04-Nov-2016  pgoyette Sync with HEAD
 1.9.2.1 21-Apr-2017  bouyer Sync with HEAD
 1.10.12.2 03-Dec-2017  jdolecek update from HEAD
 1.10.12.1 30-Mar-2017  jdolecek file octeon_intr.c was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.7 07-Aug-2021  thorpej Merge thorpej-cfargs2.
 1.6 24-Apr-2021  thorpej branches: 1.6.8;
Merge thorpej-cfargs branch:

Simplify and make extensible the config_search() / config_found() /
config_attach() interfaces: rather than having different variants for
which arguments you want pass along, just have a single call that
takes a variadic list of tag-value arguments.

Adjust all call sites:
- Simplify wherever possible; don't pass along arguments that aren't
actually needed.
- Don't be explicit about what interface attribute is attaching if
the device only has one. (More simplification.)
- Add a config_probe() function to be used in indirect configuiration
situations, making is visibly easier to see when indirect config is
in play, and allowing for future change in semantics. (As of now,
this is just a wrapper around config_match(), but that is an
implementation detail.)

Remove unnecessary or redundant interface attributes where they're not
needed.

There are currently 5 "cfargs" defined:
- CFARG_SUBMATCH (submatch function for direct config)
- CFARG_SEARCH (search function for indirect config)
- CFARG_IATTR (interface attribte)
- CFARG_LOCATORS (locators array)
- CFARG_DEVHANDLE (devhandle_t - wraps OFW, ACPI, etc. handles)

...and a sentinel value CFARG_EOL.

Add some extra sanity checking to ensure that interface attributes
aren't ambiguous.

Use CFARG_DEVHANDLE in MI FDT, OFW, and ACPI code, and macppc and shark
ports to associate those device handles with device_t instance. This
will trickle trough to more places over time (need back-end for pre-OFW
Sun OBP; any others?).
 1.5 17-Aug-2020  jmcneill branches: 1.5.4;
Attach an iobus with octrnm even if using devicetree (there is no
corresponding node for this device in the DT).
 1.4 23-Jun-2020  simonb Minor tweaks and cleanup.
 1.3 31-May-2020  simonb Rename all Cavium Octeon device driver functions, structs etc from
"octeon_foo" to "octfoo", except "octeon_eth" becomes "cnmac".
 1.2 01-Jun-2015  matt branches: 1.2.2; 1.2.18;
Rework cavium support in preparation for MULTIPROCESSOR support
 1.1 29-Apr-2015  hikaru Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.2.18.2 03-Dec-2017  jdolecek update from HEAD
 1.2.18.1 01-Jun-2015  jdolecek file octeon_iobus.c was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.2.2.2 06-Jun-2015  skrll Sync with HEAD
 1.2.2.1 01-Jun-2015  skrll file octeon_iobus.c was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.5.4.2 22-Mar-2021  thorpej Audit CFARG_IATTR in config_found() calls, and remove it in situations
where the interface attribute is not ambiguous.
 1.5.4.1 22-Mar-2021  thorpej Mechanical conversion of config_found_sm_loc() -> config_found().
CFARG_IATTR usage needs to be audited.
 1.6.8.1 04-Aug-2021  thorpej Adapt to CFARGS().
 1.2 06-Feb-2022  andvar fix various typos in comments, log messages and documentation.
mainly s/aparently/apparently/ and s/implmented/implemented/.
 1.1 15-Jun-2020  simonb Finish CPU core support for Octeon Cavium CN70XX:
- decode actual CPU name
- per CPU core reset logic (partially adapted from OpenBSD)
- handle Octeon 3 ioclock rate differences to other cores (from OpenBSD)
 1.2 18-Jun-2020  simonb General code cleanup:
- use generic macros for building IO and IOBDMA addresses instead
of many different variations of the same theme.
- use #define's for CVMSEG addresses instead of magic numbers.
- use __BIT/__BITS/__SHIFTIN/__SHIFTOUT in most places, instead of
foo_SHIFT defines or (worse) shifting by magic numbers.

No functional changes.
 1.1 15-Jun-2020  simonb Finish CPU core support for Octeon Cavium CN70XX:
- decode actual CPU name
- per CPU core reset logic (partially adapted from OpenBSD)
- handle Octeon 3 ioclock rate differences to other cores (from OpenBSD)
 1.18 26-Jan-2022  andvar remove double t from targeted, add missing r to arbitrary
And fix few more typos along the way in comments and man pages.
 1.17 28-Jul-2020  simonb Change cpus_booted back to a simple variable instead of a kcpuset.
octeon_cpu_spinup() was trying to set CPU status immediately on kernel
startup _well_ before the kcpuset was initialised.
 1.16 17-Jul-2020  jmcneill Remove 2 CPU limit in OCTEON interrupt controller driver.
 1.15 17-Jul-2020  jmcneill Cleanup handling of multiple banks.
 1.14 16-Jul-2020  jmcneill Support 128 IRQs instead of 64. This is icky and needs to be cleaned up.
 1.13 23-Jun-2020  simonb Cleanup - mostly removing unused code and defines.
 1.12 22-Jun-2020  simonb Remove unmaintained CNMAC_DEBUG debug code.
 1.11 18-Jun-2020  simonb General code cleanup:
- use generic macros for building IO and IOBDMA addresses instead
of many different variations of the same theme.
- use #define's for CVMSEG addresses instead of magic numbers.
- use __BIT/__BITS/__SHIFTIN/__SHIFTOUT in most places, instead of
foo_SHIFT defines or (worse) shifting by magic numbers.

No functional changes.
 1.10 15-Jun-2020  simonb Finish CPU core support for Octeon Cavium CN70XX:
- decode actual CPU name
- per CPU core reset logic (partially adapted from OpenBSD)
- handle Octeon 3 ioclock rate differences to other cores (from OpenBSD)
 1.9 05-Jun-2020  simonb 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.
 1.8 31-May-2020  simonb Rename all Cavium Octeon device driver functions, structs etc from
"octeon_foo" to "octfoo", except "octeon_eth" becomes "cnmac".
 1.7 13-May-2020  riastradh Rework octeon_rnm(4) random number generator driver.

- Do a little on-line self-test for fun.
- Draw raw samples from the ring oscillators.
- Draw substantially more samples:
=> early RO samples seem to have considerably lower entropy
=> consecutive RO samples are not independent
- Make sure to use rnd_add_data_sync in the callback.
=> not technically needed in HEAD, but would be needed for pullup
 1.6 19-Apr-2018  christos branches: 1.6.6;
s/static inline/static __inline/g for consistency.
 1.5 11-Jul-2016  matt branches: 1.5.16; 1.5.18;
Change MIPS to use the common pmap code.
Switch to 8KB pages on CPUs with a R4K MMU.
Simplify cache code.
Merge in most of changes from matt-mips64 branch
 1.4 10-Jun-2015  matt Transition from __cpuset_t to kcpuset_t *. This brings the local pmap one
step closer to uvm/pmap, its eventual replacement. Tested on ERLITE MP kernel.
 1.3 06-Jun-2015  matt Add wdog support
cleanup IPI and MP support
Add NMI support.
 1.2 01-Jun-2015  matt branches: 1.2.2;
Rework cavium support in preparation for MULTIPROCESSOR support
 1.1 29-Apr-2015  hikaru Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.2.2.4 05-Oct-2016  skrll Sync with HEAD
 1.2.2.3 22-Sep-2015  skrll Sync with HEAD
 1.2.2.2 06-Jun-2015  skrll Sync with HEAD
 1.2.2.1 01-Jun-2015  skrll file octeonvar.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.5.18.1 22-Apr-2018  pgoyette Sync with HEAD
 1.5.16.2 03-Dec-2017  jdolecek update from HEAD
 1.5.16.1 11-Jul-2016  jdolecek file octeonvar.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.6.6.1 19-May-2020  martin Pull up following revision(s) (requested by simonb in ticket #918):

sys/arch/mips/cavium/dev/octeon_rnm.c: revision 1.3
sys/arch/mips/cavium/dev/octeon_rnm.c: revision 1.4
sys/arch/mips/cavium/dev/octeon_rnm.c: revision 1.5
sys/arch/mips/cavium/dev/octeon_rnm.c: revision 1.6 (+ patch)
sys/arch/mips/cavium/dev/octeon_rnmreg.h: revision 1.2
sys/arch/mips/cavium/dev/octeon_rnmreg.h: revision 1.3
sys/arch/mips/cavium/octeonvar.h: revision 1.7

Add a few more bits.
XXX convert to __BITS.
--
If bus_space_map fails, just don't attach the driver instead of panicing.
Check RNG built in self test, don't attach if that fails too.
--
Oceton RNG/RNM driver modernisation to fit new entropy world order by
riastradh@, with some tweaks to get working in RNG mode.
XXX TODO: work out how to get raw entropy mode working.
--
Rework octeon_rnm(4) random number generator driver.
- Do a little on-line self-test for fun.
- Draw raw samples from the ring oscillators.
- Draw substantially more samples:
=3D> early RO samples seem to have considerably lower entropy
=3D> consecutive RO samples are not independent
- Make sure to use rnd_add_data_sync in the callback.
=3D> not technically needed in HEAD, but would be needed for pullup
--
Adjust entropy estimate for the Octeon.
We are hedging in serial and in parallel, and more conservative than
the Linux driver from Cavium seems to be, so although I don't know
exactly what the thermal jitter of the device is, this seems like a
reasonable compromise.
 1.30 04-Oct-2025  thorpej Add a shared function to query the common properties used for configuring
an Ethernet address.
 1.29 29-Sep-2022  skrll Remove unnecessary include of <sys/malloc.h>.
 1.28 29-Sep-2022  skrll Trailing whitespace
 1.27 18-Sep-2022  thorpej Eliminate use of IFF_OACTIVE.
 1.26 27-May-2021  simonb Move the send queue checking to a new function, and also call this
in the rx interrupt path. Measureable improvement on a NFS "create
small files" test.
 1.25 27-May-2021  simonb Schedule the send cleanup function for next tick in cnmac_start(). In
the send cleanup function, schedule for the next tick instead of waiting
for HZ ticks if there are still send requests outstanding. Greatly
increases NFS throughput, perhaps other types of network traffic.

Use callout_setfunc() after callout_init() instead of callout_reset().
 1.24 23-Jun-2020  simonb branches: 1.24.6; 1.24.8;
Redo cnmac attachments - cnmacM @ gmxN @ pip0 @ iobus
Support SGMII mode used on CN70XX.
Most functional changes from OpenBSD octeon port. Still more to come from
the OpenBSD driver.
 1.23 22-Jun-2020  simonb Remove unmaintained CNMAC_DEBUG debug code.
 1.22 18-Jun-2020  simonb General code cleanup:
- use generic macros for building IO and IOBDMA addresses instead
of many different variations of the same theme.
- use #define's for CVMSEG addresses instead of magic numbers.
- use __BIT/__BITS/__SHIFTIN/__SHIFTOUT in most places, instead of
foo_SHIFT defines or (worse) shifting by magic numbers.

No functional changes.
 1.21 10-Jun-2020  simonb Update for proplib(3) API changes.
 1.20 05-Jun-2020  simonb 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.
 1.19 31-May-2020  simonb Rename all Cavium Octeon device driver functions, structs etc from
"octeon_foo" to "octfoo", except "octeon_eth" becomes "cnmac".
 1.18 24-Apr-2020  mrg fetch properties in attach rather than every re-init.

this avoids a rwlock while spinlock held problem likely introduced
with MII locking rework, as fetching a property takes an rwlock,
and prior to the rework, only kernel lock would have been held.


ok skrll@.
 1.17 18-Feb-2020  thorpej branches: 1.17.4;
- Use ether_mediachange().
- Don't call the media change function directly from the init
function; bounce through mii_ifmedia_change().
 1.16 29-Jan-2020  thorpej Adopt <net/if_stats.h>.
 1.15 28-Dec-2019  gutteridge branches: 1.15.2;
Fix typos in comments.
 1.14 07-Jun-2019  martin Delay setting of the filters at attach time a bit to avoid using an
unitialized mutex. From msaitoh@.
 1.13 29-May-2019  msaitoh - Simplify MII structure initialization and reference.
- Use the common path of SIOCGIFMEDIA in sys/net/if_ethersubr.c
 1.12 26-Apr-2019  msaitoh No functional change:
- u_int_{8,16,32}_t -> uint_{8,16,32}_t
- KNF.
- Tabify.
- Remove extra space.
 1.11 22-Jan-2019  msaitoh Change MII PHY read/write API from:

int (*mii_readreg_t)(device_t, int, int);
void (*mii_writereg_t)(device_t, int, int, int);
to:

int (*mii_readreg_t)(device_t, int, int, uint16_t *);
int (*mii_writereg_t)(device_t, int, int, uint16_t);

Now we can test if a read/write operation failed or not by the return value.

In 802.3 spec says that the PHY shall not respond to read/write transaction
to the unimplemented register(22.2.4.3). Detecting timeout can be used to
check whether a register is implemented or not (if the register conforms to
the spec). ukphy(4) can be used this for MII_MMDACR and MII_MMDAADR.

Note that I noticed that the following code do infinite loop in the
read/wirte function. If it accesses unimplemented PHY register, it will hang.
It should be fixed:

arm/at91/at91emac.c
arm/ep93xx/epe.c
arm/omap/omapl1x_emac.c
mips/ralink/ralink_eth.c
arch/powerpc/booke/dev/pq3etsec.c(read)
dev/cadence/if_cemac.c <- hkenken
dev/ic/lan9118.c


Tested with the following device:

axe+ukphy
axe+rgephy
axen+rgephy (tested by Andrius V)
wm+atphy
wm+ukphy
wm+igphy
wm+ihphy
wm+makphy
sk+makphy
sk+brgphy
sk+gentbi
msk+makphy
sip+icsphy
sip+ukphy
re+rgephy
bge+brgphy
bnx+brgphy
gsip+gphyter
rtk+rlphy
fxp+inphy (tested by Andrius V)
tlp+acphy
ex+exphy
epic+qsphy
vge+ciphy (tested by Andrius V)
vr+ukphy (tested by Andrius V)
vte+ukphy (tested by Andrius V)

Not tested (MAC):
arm:at91emac
arm:cemac
arm:epe
arm:geminigmac
arm:enet
arm:cpsw
arm:emac(omac)
arm:emac(sunxi)
arm:npe
evbppc:temac
macppc:bm
macppc:gm
mips:aumac
mips:ae
mips:cnmac
mips:reth
mips:sbmac
playstation2:smap
powerpc:tsec
powerpc:emac(ibm4xx)
sgimips:mec
sparc:be
sf
ne(ax88190, dl10019)
awge
ep
gem
hme
smsh
mtd
sm
age
alc
ale
bce
cas
et
jme
lii
nfe
pcn
ste
stge
tl
xi
aue
mue
smsc
udav
url

Not tested (PHY):
amhphy
bmtphy
dmphy
etphy
glxtphy
ikphy
iophy
lxtphy
nsphyter
pnaphy
rdcphy
sqphy
tlphy
tqphy
urlphy
 1.10 03-Sep-2018  riastradh Rename min/max -> uimin/uimax for better honesty.

These functions are defined on unsigned int. The generic name
min/max should not silently truncate to 32 bits on 64-bit systems.
This is purely a name change -- no functional change intended.

HOWEVER! Some subsystems have

#define min(a, b) ((a) < (b) ? (a) : (b))
#define max(a, b) ((a) > (b) ? (a) : (b))

even though our standard name for that is MIN/MAX. Although these
may invite multiple evaluation bugs, these do _not_ cause integer
truncation.

To avoid `fixing' these cases, I first changed the name in libkern,
and then compile-tested every file where min/max occurred in order to
confirm that it failed -- and thus confirm that nothing shadowed
min/max -- before changing it.

I have left a handful of bootloaders that are too annoying to
compile-test, and some dead code:

cobalt ews4800mips hp300 hppa ia64 luna68k vax
acorn32/if_ie.c (not included in any kernels)
macppc/if_gm.c (superseded by gem(4))

It should be easy to fix the fallout once identified -- this way of
doing things fails safe, and the goal here, after all, is to _avoid_
silent integer truncations, not introduce them.

Maybe one day we can reintroduce min/max as type-generic things that
never silently truncate. But we should avoid doing that for a while,
so that existing code has a chance to be detected by the compiler for
conversion to uimin/uimax without changing the semantics until we can
properly audit it all. (Who knows, maybe in some cases integer
truncation is actually intended!)
 1.9 26-Jun-2018  msaitoh branches: 1.9.2;
Implement the BPF direction filter (BIOC[GS]DIRECTION). It provides backward
compatibility with BIOC[GS]SEESENT ioctl. The userland interface is the same
as FreeBSD.

This change also fixes a bug that the direction is misunderstand on some
environment by passing the direction to bpf_mtap*() instead of checking
m->m_pkthdr.rcvif.
 1.8 01-Jan-2018  jmcneill branches: 1.8.2;
Set and clear IFF_OACTIVE as necessary, and add support for queueing
multiple packets before performing a PKO doorbell write.
 1.7 26-Nov-2017  jmcneill branches: 1.7.2;
Set ETHERCAP_VLAN_MTU capability flag.
 1.6 22-Aug-2017  maya Reword warning message
 1.5 15-Dec-2016  ozaki-r branches: 1.5.8;
Move bpf_mtap and if_ipackets++ on Rx of each driver to percpuq if_input

The benefits of the change are:
- We can reduce codes
- We can provide the same behavior between drivers
- Where/When if_ipackets is counted up
- Note that some drivers still update packet statistics in their own
way (periodical update)
- Moved bpf_mtap run in softint
- This makes it easy to MP-ify bpf

Proposed on tech-kern and tech-net
 1.4 11-Jul-2016  matt branches: 1.4.2;
Change MIPS to use the common pmap code.
Switch to 8KB pages on CPUs with a R4K MMU.
Simplify cache code.
Merge in most of changes from matt-mips64 branch
 1.3 10-Jun-2016  ozaki-r Introduce m_set_rcvif and m_reset_rcvif

The API is used to set (or reset) a received interface of a mbuf.
They are counterpart of m_get_rcvif, which will come in another
commit, hide internal of rcvif operation, and reduce the diff of
the upcoming change.

No functional change.
 1.2 09-Feb-2016  ozaki-r Introduce softint-based if_input

This change intends to run the whole network stack in softint context
(or normal LWP), not hardware interrupt context. Note that the work is
still incomplete by this change; to that end, we also have to softint-ify
if_link_state_change (and bpf) which can still run in hardware interrupt.

This change softint-ifies at ifp->if_input that is called from
each device driver (and ieee80211_input) to ensure Layer 2 runs
in softint (e.g., ether_input and bridge_input). To this end,
we provide a framework (called percpuq) that utlizes softint(9)
and percpu ifqueues. With this patch, rxintr of most drivers just
queues received packets and schedules a softint, and the softint
dequeues packets and does rest packet processing.

To minimize changes to each driver, percpuq is allocated in struct
ifnet for now and that is initialized by default (in if_attach).
We probably have to move percpuq to softc of each driver, but it's
future work. At this point, only wm(4) has percpuq in its softc
as a reference implementation.

Additional information including performance numbers can be found
in the thread at tech-kern@ and tech-net@:
http://mail-index.netbsd.org/tech-kern/2016/01/14/msg019997.html

Acknowledgment: riastradh@ greatly helped this work.
Thank you very much!
 1.1 29-Apr-2015  hikaru branches: 1.1.2;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.2.7 28-Aug-2017  skrll Sync with HEAD
 1.1.2.6 05-Feb-2017  skrll Sync with HEAD
 1.1.2.5 05-Oct-2016  skrll Sync with HEAD
 1.1.2.4 09-Jul-2016  skrll Sync with HEAD
 1.1.2.3 19-Mar-2016  skrll Sync with HEAD
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file if_cnmac.c was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.4.2.1 07-Jan-2017  pgoyette Sync with HEAD. (Note that most of these changes are simply $NetBSD$
tag issues.)
 1.5.8.1 27-Nov-2017  martin Pull up following revision(s) (requested by jmcneill in ticket #397):
sys/arch/mips/cavium/dev/if_cnmac.c: revision 1.7
Set ETHERCAP_VLAN_MTU capability flag.
 1.7.2.2 03-Dec-2017  jdolecek update from HEAD
 1.7.2.1 26-Nov-2017  jdolecek file if_cnmac.c was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.8.2.3 26-Jan-2019  pgoyette Sync with HEAD
 1.8.2.2 06-Sep-2018  pgoyette Sync with HEAD

Resolve a couple of conflicts (result of the uimin/uimax changes)
 1.8.2.1 28-Jul-2018  pgoyette Sync with HEAD
 1.9.2.2 08-Apr-2020  martin Merge changes from current as of 20200406
 1.9.2.1 10-Jun-2019  christos Sync with HEAD
 1.15.2.1 29-Feb-2020  ad Sync with head.
 1.17.4.1 25-Apr-2020  bouyer Sync with bouyer-xenpvh-base2 (HEAD)
 1.24.8.1 31-May-2021  cjep sync with head
 1.24.6.1 17-Jun-2021  thorpej Sync w/ HEAD.
 1.5 18-Sep-2022  thorpej Eliminate use of IFF_OACTIVE.
 1.4 23-Jun-2020  simonb Redo cnmac attachments - cnmacM @ gmxN @ pip0 @ iobus
Support SGMII mode used on CN70XX.
Most functional changes from OpenBSD octeon port. Still more to come from
the OpenBSD driver.
 1.3 22-Jun-2020  simonb Remove unmaintained CNMAC_DEBUG debug code.
 1.2 31-May-2020  simonb Rename all Cavium Octeon device driver functions, structs etc from
"octeon_foo" to "octfoo", except "octeon_eth" becomes "cnmac".
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file if_cnmacvar.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file if_cnmacvar.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.5 04-Jan-2021  thorpej malloc(9) -> kmem(9)
 1.4 23-Jun-2020  simonb branches: 1.4.2;
Minor tweaks and cleanup.
 1.3 22-Jun-2020  simonb Remove unmaintained CNMAC_DEBUG debug code.
 1.2 31-May-2020  simonb Rename all Cavium Octeon device driver functions, structs etc from
"octeon_foo" to "octfoo", except "octeon_eth" becomes "cnmac".
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_asx.c was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_asx.c was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.4.2.1 03-Apr-2021  thorpej Sync with HEAD.
 1.2 22-Jun-2020  simonb Remove unused snprintb format strings.
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_asxreg.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_asxreg.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.4 22-Jun-2020  simonb Remove unmaintained CNMAC_DEBUG debug code.
 1.3 18-Jun-2020  simonb General code cleanup:
- use generic macros for building IO and IOBDMA addresses instead
of many different variations of the same theme.
- use #define's for CVMSEG addresses instead of magic numbers.
- use __BIT/__BITS/__SHIFTIN/__SHIFTOUT in most places, instead of
foo_SHIFT defines or (worse) shifting by magic numbers.

No functional changes.
 1.2 31-May-2020  simonb Rename all Cavium Octeon device driver functions, structs etc from
"octeon_foo" to "octfoo", except "octeon_eth" becomes "cnmac".
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_asxvar.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_asxvar.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.3 22-Jun-2020  simonb Remove more snprintb _BITS bits.
 1.2 22-Jun-2020  simonb Remove unused snprintb format strings.
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_bootbusreg.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_bootbusreg.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.7 05-May-2021  simonb Sprinkle some static.
 1.6 27-Jan-2021  thorpej branches: 1.6.4;
Rename of_match_compat_data() to of_compatible_match(). Similarly,
rename of_search_compatible() to of_compatible_lookup().

Standardize on of_compatible_match() for driver matching, and adapt
all call sites.
 1.5 27-Jan-2021  thorpej Use DEVICE_COMPAT_EOL.
 1.4 25-Jan-2021  thorpej Since we're using designated initialisers for compat data, we should
use a completely empty initializer for the sentinel.
 1.3 18-Jan-2021  thorpej Remove "struct of_compat_data" and replace its usage with
"struct device_compatible_entry"; they are ABI-compatible.

Fix several "loses const qualifier" bugs encountered during
this conversion.
 1.2 15-Jan-2021  jmcneill Add 'const char *xname' arg to fdtbus_interrupt_controller_func .establish
 1.1 16-Jul-2020  jmcneill branches: 1.1.2;
Add driver for Cavium Interrupt Bus.
 1.1.2.1 03-Apr-2021  thorpej Sync with HEAD.
 1.6.4.1 13-May-2021  thorpej Sync with HEAD.
 1.5 29-Sep-2022  skrll Remove unnecessary include of <sys/malloc.h>.
 1.4 23-Jun-2020  simonb Minor tweaks and cleanup.
 1.3 22-Jun-2020  simonb Remove unmaintained CNMAC_DEBUG debug code.
 1.2 31-May-2020  simonb Rename all Cavium Octeon device driver functions, structs etc from
"octeon_foo" to "octfoo", except "octeon_eth" becomes "cnmac".
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_ciu.c was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_ciu.c was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.11 20-Jul-2020  jmcneill Fix coreX/IP4 summary register offsets
 1.10 17-Jul-2020  jmcneill Remove 2 CPU limit in OCTEON interrupt controller driver.
 1.9 22-Jun-2020  simonb Remove more snprintb _BITS bits.
 1.8 22-Jun-2020  simonb Remove unused snprintb format strings.
 1.7 19-Jun-2020  simonb Simplify interrupt definition: remove mostly unused masks and just
configure everything using interrupt numbers.
 1.6 02-Jun-2020  simonb Add a missing entry, clean up a few other incorrect entries.
 1.5 20-Aug-2016  skrll branches: 1.5.14;
Fix a couple of (unsed) definitions
 1.4 06-Jun-2015  matt Add CIU_BASE
 1.3 06-Jun-2015  matt branches: 1.3.2;
Fix CUI_MBOX_{SET,CLR}1 values
 1.2 01-Jun-2015  matt Rework cavium support in preparation for MULTIPROCESSOR support
 1.1 29-Apr-2015  hikaru Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.3.2.4 05-Oct-2016  skrll Sync with HEAD
 1.3.2.3 22-Sep-2015  skrll Sync with HEAD
 1.3.2.2 06-Jun-2015  skrll Sync with HEAD
 1.3.2.1 06-Jun-2015  skrll file octeon_ciureg.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.5.14.2 03-Dec-2017  jdolecek update from HEAD
 1.5.14.1 20-Aug-2016  jdolecek file octeon_ciureg.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.2 18-Jun-2020  simonb General code cleanup:
- use generic macros for building IO and IOBDMA addresses instead
of many different variations of the same theme.
- use #define's for CVMSEG addresses instead of magic numbers.
- use __BIT/__BITS/__SHIFTIN/__SHIFTOUT in most places, instead of
foo_SHIFT defines or (worse) shifting by magic numbers.

No functional changes.
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_cop2reg.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_cop2reg.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.2 18-Jun-2020  simonb General code cleanup:
- use generic macros for building IO and IOBDMA addresses instead
of many different variations of the same theme.
- use #define's for CVMSEG addresses instead of magic numbers.
- use __BIT/__BITS/__SHIFTIN/__SHIFTOUT in most places, instead of
foo_SHIFT defines or (worse) shifting by magic numbers.

No functional changes.
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_cop2var.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_cop2var.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.5 04-Aug-2020  simonb Add some CvmCtl bits from newer cnMIPS cores.
 1.4 26-Jul-2020  simonb Remove mostly duplicate MIPS spec CP0 regs from octeon_corereg.h, move
the Cavium specific CP0 regs to <mips/cpuregs.h> as done for other core
specific regs.
 1.3 22-Jun-2020  simonb Remove unused snprintb format strings.
 1.2 01-Jun-2015  matt branches: 1.2.2; 1.2.18;
Rework cavium support in preparation for MULTIPROCESSOR support
 1.1 29-Apr-2015  hikaru Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.2.18.2 03-Dec-2017  jdolecek update from HEAD
 1.2.18.1 01-Jun-2015  jdolecek file octeon_corereg.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.2.2.2 06-Jun-2015  skrll Sync with HEAD
 1.2.2.1 01-Jun-2015  skrll file octeon_corereg.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.15 07-Aug-2021  thorpej Merge thorpej-cfargs2.
 1.14 24-Apr-2021  thorpej branches: 1.14.8;
Merge thorpej-cfargs branch:

Simplify and make extensible the config_search() / config_found() /
config_attach() interfaces: rather than having different variants for
which arguments you want pass along, just have a single call that
takes a variadic list of tag-value arguments.

Adjust all call sites:
- Simplify wherever possible; don't pass along arguments that aren't
actually needed.
- Don't be explicit about what interface attribute is attaching if
the device only has one. (More simplification.)
- Add a config_probe() function to be used in indirect configuiration
situations, making is visibly easier to see when indirect config is
in play, and allowing for future change in semantics. (As of now,
this is just a wrapper around config_match(), but that is an
implementation detail.)

Remove unnecessary or redundant interface attributes where they're not
needed.

There are currently 5 "cfargs" defined:
- CFARG_SUBMATCH (submatch function for direct config)
- CFARG_SEARCH (search function for indirect config)
- CFARG_IATTR (interface attribte)
- CFARG_LOCATORS (locators array)
- CFARG_DEVHANDLE (devhandle_t - wraps OFW, ACPI, etc. handles)

...and a sentinel value CFARG_EOL.

Add some extra sanity checking to ensure that interface attributes
aren't ambiguous.

Use CFARG_DEVHANDLE in MI FDT, OFW, and ACPI code, and macppc and shark
ports to associate those device handles with device_t instance. This
will trickle trough to more places over time (need back-end for pre-OFW
Sun OBP; any others?).
 1.13 23-Jun-2020  simonb branches: 1.13.4;
Make sure we only attach to CN3xxx/CN5xxx.
Cleanup - mostly removing unused code.
 1.12 23-Jun-2020  simonb Remove unused octeon*usb*var*h includes.
 1.11 19-Jun-2020  simonb Simplify interrupt definition: remove mostly unused masks and just
configure everything using interrupt numbers.
 1.10 31-May-2020  simonb Clean up Cavium Octeon device names. Rename devices from "octeon_foo"
to "octfoo" - this follows the naming conventions used by many other
MIPS CPUs.
 1.9 12-Jul-2016  matt branches: 1.9.16;
Use mips_lwu
 1.8 11-Jul-2016  matt Change MIPS to use the common pmap code.
Switch to 8KB pages on CPUs with a R4K MMU.
Simplify cache code.
Merge in most of changes from matt-mips64 branch
 1.7 26-Apr-2016  skrll Adapt to nick-nhusb merge
 1.6 30-Aug-2015  skrll Update for latest dwc2
 1.5 30-Jul-2015  skrll Use IPL_VM for dwc2_intr and mark as MP safe where possible.
 1.4 22-Jul-2015  skrll Trailing whitespace.
 1.3 07-Jun-2015  matt assembly no longer include <machine/cpu.h>. Instead MIPS_CURLWP is gotten
from regdef.h and everything else from assym.h. <mips/mips_param.h> no
longer include <machine/cpu.h>
 1.2 01-Jun-2015  matt branches: 1.2.2;
Rework cavium support in preparation for MULTIPROCESSOR support
 1.1 01-May-2015  hikaru Use dwc2 instead of octeon_usbc, and unify octeon_usbn to new octeon_dwctwo.
Internal USB memory stick of EdgeRouter Lite works now.
 1.2.2.5 05-Oct-2016  skrll Sync with HEAD
 1.2.2.4 29-May-2016  skrll Sync with HEAD
 1.2.2.3 22-Sep-2015  skrll Sync with HEAD
 1.2.2.2 06-Jun-2015  skrll Sync with HEAD
 1.2.2.1 01-Jun-2015  skrll file octeon_dwctwo.c was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.9.16.2 03-Dec-2017  jdolecek update from HEAD
 1.9.16.1 12-Jul-2016  jdolecek file octeon_dwctwo.c was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.13.4.1 21-Mar-2021  thorpej Give config_found() the same variadic arguments treatment as
config_search(). This commit only adds the CFARG_EOL sentinel
to the existing config_found() calls. Conversion of config_found_sm_loc()
and config_found_ia() call sites will be in subsequent commits.
 1.14.8.1 04-Aug-2021  thorpej Adapt to CFARGS().
 1.4 23-Jun-2020  simonb Minor tweaks and cleanup.
 1.3 18-Jun-2020  simonb General code cleanup:
- use generic macros for building IO and IOBDMA addresses instead
of many different variations of the same theme.
- use #define's for CVMSEG addresses instead of magic numbers.
- use __BIT/__BITS/__SHIFTIN/__SHIFTOUT in most places, instead of
foo_SHIFT defines or (worse) shifting by magic numbers.

No functional changes.
 1.2 31-May-2020  simonb Rename all Cavium Octeon device driver functions, structs etc from
"octeon_foo" to "octfoo", except "octeon_eth" becomes "cnmac".
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_fau.c was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_fau.c was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.2 18-Jun-2020  simonb General code cleanup:
- use generic macros for building IO and IOBDMA addresses instead
of many different variations of the same theme.
- use #define's for CVMSEG addresses instead of magic numbers.
- use __BIT/__BITS/__SHIFTIN/__SHIFTOUT in most places, instead of
foo_SHIFT defines or (worse) shifting by magic numbers.

No functional changes.
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_faureg.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_faureg.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.4 23-Jun-2020  simonb Minor tweaks and cleanup.
 1.3 18-Jun-2020  simonb General code cleanup:
- use generic macros for building IO and IOBDMA addresses instead
of many different variations of the same theme.
- use #define's for CVMSEG addresses instead of magic numbers.
- use __BIT/__BITS/__SHIFTIN/__SHIFTOUT in most places, instead of
foo_SHIFT defines or (worse) shifting by magic numbers.

No functional changes.
 1.2 31-May-2020  simonb Rename all Cavium Octeon device driver functions, structs etc from
"octeon_foo" to "octfoo", except "octeon_eth" becomes "cnmac".
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_fauvar.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_fauvar.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.10 24-Mar-2021  simonb Remove somewhat dubious empty octfpa_desc structure.
 1.9 04-Jan-2021  thorpej branches: 1.9.2;
malloc(9) -> kmem(9)
 1.8 23-Jun-2020  simonb branches: 1.8.2;
Minor tweaks and cleanup.
 1.7 22-Jun-2020  simonb Remove unmaintained CNMAC_DEBUG debug code.
 1.6 18-Jun-2020  simonb General code cleanup:
- use generic macros for building IO and IOBDMA addresses instead
of many different variations of the same theme.
- use #define's for CVMSEG addresses instead of magic numbers.
- use __BIT/__BITS/__SHIFTIN/__SHIFTOUT in most places, instead of
foo_SHIFT defines or (worse) shifting by magic numbers.

No functional changes.
 1.5 31-May-2020  simonb Rename all Cavium Octeon device driver functions, structs etc from
"octeon_foo" to "octfoo", except "octeon_eth" becomes "cnmac".
 1.4 27-Jan-2019  dholland Restore accidentally-dropped opt_octeon.h.
(or at least it really looks like it was accidental)
 1.3 27-Jan-2019  pgoyette Merge the [pgoyette-compat] branch
 1.2 04-Oct-2018  skrll Remove duplicate #include
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18; 1.1.20; 1.1.22;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.22.1 10-Jun-2019  christos Sync with HEAD
 1.1.20.1 20-Oct-2018  pgoyette Sync with head
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_fpa.c was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_fpa.c was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.8.2.1 03-Apr-2021  thorpej Sync with HEAD.
 1.9.2.1 03-Apr-2021  thorpej Sync with HEAD.
 1.5 23-Jun-2020  simonb Minor tweaks and cleanup.
 1.4 22-Jun-2020  simonb Remove more snprintb _BITS bits.
 1.3 22-Jun-2020  simonb Remove unused snprintb format strings.
 1.2 18-Jun-2020  simonb General code cleanup:
- use generic macros for building IO and IOBDMA addresses instead
of many different variations of the same theme.
- use #define's for CVMSEG addresses instead of magic numbers.
- use __BIT/__BITS/__SHIFTIN/__SHIFTOUT in most places, instead of
foo_SHIFT defines or (worse) shifting by magic numbers.

No functional changes.
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_fpareg.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_fpareg.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.7 23-Jun-2020  simonb Minor tweaks and cleanup.
 1.6 22-Jun-2020  simonb Remove unmaintained CNMAC_DEBUG debug code.
 1.5 18-Jun-2020  simonb General code cleanup:
- use generic macros for building IO and IOBDMA addresses instead
of many different variations of the same theme.
- use #define's for CVMSEG addresses instead of magic numbers.
- use __BIT/__BITS/__SHIFTIN/__SHIFTOUT in most places, instead of
foo_SHIFT defines or (worse) shifting by magic numbers.

No functional changes.
 1.4 31-May-2020  simonb Rename all Cavium Octeon device driver functions, structs etc from
"octeon_foo" to "octfoo", except "octeon_eth" becomes "cnmac".
 1.3 28-May-2019  msaitoh s/recieve/receive/
 1.2 19-Apr-2018  christos branches: 1.2.2;
s/static inline/static __inline/g for consistency.
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18; 1.1.20;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.20.1 22-Apr-2018  pgoyette Sync with HEAD
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_fpavar.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_fpavar.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.2.2.1 10-Jun-2019  christos Sync with HEAD
 1.25 24-Feb-2025  andvar fix various typos in comments.
 1.24 29-Jun-2024  riastradh branches: 1.24.2;
if_stats(9): Add ifp argument to if_stat..._ref.

This will enable us to pass the ifp through to a dtrace probe inside.

No functional change intended in this change, but this is an API
change visible to modules so it shouldn't be pulled up.

PR kern/58377
 1.23 20-Jul-2023  gutteridge octeon_gmx.c: fix spelling in (default disabled) error messages
 1.22 03-Jun-2022  andvar fix folloing->following typos in more files.
also s/begginning/beginning/.
 1.21 04-May-2022  andvar s/entires/entries/
 1.20 07-Aug-2021  thorpej Merge thorpej-cfargs2.
 1.19 14-May-2021  simonb branches: 1.19.4;
Fix a missed bitmask to __SHIFTOUT conversion in rev 1.12.

Fixes negotiation problems on non-gige switches. Problem discovered and
tested by riastradh@.
 1.18 05-May-2021  simonb branches: 1.18.2;
Sprinkle some static.
 1.17 24-Apr-2021  thorpej branches: 1.17.2;
Merge thorpej-cfargs branch:

Simplify and make extensible the config_search() / config_found() /
config_attach() interfaces: rather than having different variants for
which arguments you want pass along, just have a single call that
takes a variadic list of tag-value arguments.

Adjust all call sites:
- Simplify wherever possible; don't pass along arguments that aren't
actually needed.
- Don't be explicit about what interface attribute is attaching if
the device only has one. (More simplification.)
- Add a config_probe() function to be used in indirect configuiration
situations, making is visibly easier to see when indirect config is
in play, and allowing for future change in semantics. (As of now,
this is just a wrapper around config_match(), but that is an
implementation detail.)

Remove unnecessary or redundant interface attributes where they're not
needed.

There are currently 5 "cfargs" defined:
- CFARG_SUBMATCH (submatch function for direct config)
- CFARG_SEARCH (search function for indirect config)
- CFARG_IATTR (interface attribte)
- CFARG_LOCATORS (locators array)
- CFARG_DEVHANDLE (devhandle_t - wraps OFW, ACPI, etc. handles)

...and a sentinel value CFARG_EOL.

Add some extra sanity checking to ensure that interface attributes
aren't ambiguous.

Use CFARG_DEVHANDLE in MI FDT, OFW, and ACPI code, and macppc and shark
ports to associate those device handles with device_t instance. This
will trickle trough to more places over time (need back-end for pre-OFW
Sun OBP; any others?).
 1.16 04-Jan-2021  thorpej branches: 1.16.2;
malloc(9) -> kmem(9)
 1.15 23-Jun-2020  simonb branches: 1.15.2;
Redo cnmac attachments - cnmacM @ gmxN @ pip0 @ iobus
Support SGMII mode used on CN70XX.
Most functional changes from OpenBSD octeon port. Still more to come from
the OpenBSD driver.
 1.14 22-Jun-2020  simonb Remove unmaintained CNMAC_DEBUG debug code.
 1.13 19-Jun-2020  simonb Simplify interrupt definition: remove mostly unused masks and just
configure everything using interrupt numbers.
 1.12 18-Jun-2020  simonb General code cleanup:
- use generic macros for building IO and IOBDMA addresses instead
of many different variations of the same theme.
- use #define's for CVMSEG addresses instead of magic numbers.
- use __BIT/__BITS/__SHIFTIN/__SHIFTOUT in most places, instead of
foo_SHIFT defines or (worse) shifting by magic numbers.

No functional changes.
 1.11 31-May-2020  simonb Rename all Cavium Octeon device driver functions, structs etc from
"octeon_foo" to "octfoo", except "octeon_eth" becomes "cnmac".
 1.10 31-May-2020  simonb Clean up Cavium Octeon device names. Rename devices from "octeon_foo"
to "octfoo" - this follows the naming conventions used by many other
MIPS CPUs.
 1.9 24-Apr-2020  mrg fetch properties in attach rather than every re-init.

this avoids a rwlock while spinlock held problem likely introduced
with MII locking rework, as fetching a property takes an rwlock,
and prior to the rework, only kernel lock would have been held.


ok skrll@.
 1.8 29-Jan-2020  thorpej branches: 1.8.4;
Adopt <net/if_stats.h>.
 1.7 25-Jan-2020  thorpej Remove the IFETHER_DOT3STATS stuff in this driver. ifi_dot3stats does
not exist in NetBSD's "struct if_data", and what this driver does with
it is incompatible with upcoming network stack changes.
 1.6 10-Nov-2019  chs branches: 1.6.2;
in many device attach paths, allocate memory with M_WAITOK instead of M_NOWAIT
and remove code to handle failures that can no longer happen.
 1.5 28-May-2019  msaitoh Fix compile error.
 1.4 28-May-2019  msaitoh Use ETHER_LOCK()/ETHER_UNLOCK() for all ethernet drivers to protect ec_multi*.
 1.3 20-Aug-2017  maxv branches: 1.3.2; 1.3.6;
as the xxx implicitly points out, there's a division by zero here, so
panic right away; found by mootja
 1.2 01-Jun-2015  matt branches: 1.2.2;
Rework cavium support in preparation for MULTIPROCESSOR support
 1.1 29-Apr-2015  hikaru Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.2.2.3 28-Aug-2017  skrll Sync with HEAD
 1.2.2.2 06-Jun-2015  skrll Sync with HEAD
 1.2.2.1 01-Jun-2015  skrll file octeon_gmx.c was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.3.6.3 13-Apr-2020  martin Mostly merge changes from HEAD upto 20200411
 1.3.6.2 08-Apr-2020  martin Merge changes from current as of 20200406
 1.3.6.1 10-Jun-2019  christos Sync with HEAD
 1.3.2.2 03-Dec-2017  jdolecek update from HEAD
 1.3.2.1 20-Aug-2017  jdolecek file octeon_gmx.c was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.6.2.2 29-Feb-2020  ad Sync with head.
 1.6.2.1 25-Jan-2020  ad Sync with head.
 1.8.4.1 25-Apr-2020  bouyer Sync with bouyer-xenpvh-base2 (HEAD)
 1.15.2.1 03-Apr-2021  thorpej Sync with HEAD.
 1.16.2.1 21-Mar-2021  thorpej Give config_found() the same variadic arguments treatment as
config_search(). This commit only adds the CFARG_EOL sentinel
to the existing config_found() calls. Conversion of config_found_sm_loc()
and config_found_ia() call sites will be in subsequent commits.
 1.17.2.2 17-Jun-2021  thorpej Sync w/ HEAD.
 1.17.2.1 13-May-2021  thorpej Sync with HEAD.
 1.18.2.1 31-May-2021  cjep sync with head
 1.19.4.1 04-Aug-2021  thorpej Adapt to CFARGS().
 1.24.2.1 02-Aug-2025  perseant Sync with HEAD
 1.7 23-May-2022  andvar s/controll/control/ in comments.
 1.6 17-Apr-2022  andvar fix various typos in comments.
 1.5 23-Jun-2020  simonb Redo cnmac attachments - cnmacM @ gmxN @ pip0 @ iobus
Support SGMII mode used on CN70XX.
Most functional changes from OpenBSD octeon port. Still more to come from
the OpenBSD driver.
 1.4 22-Jun-2020  simonb Remove more snprintb _BITS bits.
 1.3 22-Jun-2020  simonb Remove unused snprintb format strings.
 1.2 18-Jun-2020  simonb General code cleanup:
- use generic macros for building IO and IOBDMA addresses instead
of many different variations of the same theme.
- use #define's for CVMSEG addresses instead of magic numbers.
- use __BIT/__BITS/__SHIFTIN/__SHIFTOUT in most places, instead of
foo_SHIFT defines or (worse) shifting by magic numbers.

No functional changes.
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_gmxreg.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_gmxreg.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.7 23-Jun-2020  simonb Redo cnmac attachments - cnmacM @ gmxN @ pip0 @ iobus
Support SGMII mode used on CN70XX.
Most functional changes from OpenBSD octeon port. Still more to come from
the OpenBSD driver.
 1.6 22-Jun-2020  simonb Remove unmaintained CNMAC_DEBUG debug code.
 1.5 18-Jun-2020  simonb General code cleanup:
- use generic macros for building IO and IOBDMA addresses instead
of many different variations of the same theme.
- use #define's for CVMSEG addresses instead of magic numbers.
- use __BIT/__BITS/__SHIFTIN/__SHIFTOUT in most places, instead of
foo_SHIFT defines or (worse) shifting by magic numbers.

No functional changes.
 1.4 31-May-2020  simonb Rename all Cavium Octeon device driver functions, structs etc from
"octeon_foo" to "octfoo", except "octeon_eth" becomes "cnmac".
 1.3 24-Apr-2020  mrg fetch properties in attach rather than every re-init.

this avoids a rwlock while spinlock held problem likely introduced
with MII locking rework, as fetching a property takes an rwlock,
and prior to the rework, only kernel lock would have been held.


ok skrll@.
 1.2 19-Apr-2018  christos branches: 1.2.12;
s/static inline/static __inline/g for consistency.
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18; 1.1.20;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.20.1 22-Apr-2018  pgoyette Sync with HEAD
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_gmxvar.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_gmxvar.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.2.12.1 25-Apr-2020  bouyer Sync with bouyer-xenpvh-base2 (HEAD)
 1.2 22-Jun-2020  simonb Remove unused snprintb format strings.
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_gpioreg.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_gpioreg.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.7 05-May-2021  simonb Sprinkle some static.
 1.6 27-Jan-2021  thorpej branches: 1.6.4;
Rename of_match_compat_data() to of_compatible_match(). Similarly,
rename of_search_compatible() to of_compatible_lookup().

Standardize on of_compatible_match() for driver matching, and adapt
all call sites.
 1.5 27-Jan-2021  thorpej Use DEVICE_COMPAT_EOL.
 1.4 25-Jan-2021  thorpej Since we're using designated initialisers for compat data, we should
use a completely empty initializer for the sentinel.
 1.3 18-Jan-2021  thorpej Remove "struct of_compat_data" and replace its usage with
"struct device_compatible_entry"; they are ABI-compatible.

Fix several "loses const qualifier" bugs encountered during
this conversion.
 1.2 15-Jan-2021  jmcneill Add 'const char *xname' arg to fdtbus_interrupt_controller_func .establish
 1.1 16-Jul-2020  jmcneill branches: 1.1.2;
FDT support for Cavium OCTEON MIPS SoCs. WIP.
 1.1.2.1 03-Apr-2021  thorpej Sync with HEAD.
 1.6.4.1 13-May-2021  thorpej Sync with HEAD.
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_iobreg.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_iobreg.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.8 04-Jan-2021  thorpej malloc(9) -> kmem(9)
 1.7 23-Jun-2020  simonb branches: 1.7.2;
Cleanup - mostly removing unused code and defines.
 1.6 22-Jun-2020  simonb Remove unmaintained CNMAC_DEBUG debug code.
 1.5 19-Jun-2020  simonb Simplify interrupt definition: remove mostly unused masks and just
configure everything using interrupt numbers.
 1.4 18-Jun-2020  simonb General code cleanup:
- use generic macros for building IO and IOBDMA addresses instead
of many different variations of the same theme.
- use #define's for CVMSEG addresses instead of magic numbers.
- use __BIT/__BITS/__SHIFTIN/__SHIFTOUT in most places, instead of
foo_SHIFT defines or (worse) shifting by magic numbers.

No functional changes.
 1.3 31-May-2020  simonb Rename all Cavium Octeon device driver functions, structs etc from
"octeon_foo" to "octfoo", except "octeon_eth" becomes "cnmac".
 1.2 01-Jun-2015  matt branches: 1.2.2; 1.2.18;
Rework cavium support in preparation for MULTIPROCESSOR support
 1.1 29-Apr-2015  hikaru Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.2.18.2 03-Dec-2017  jdolecek update from HEAD
 1.2.18.1 01-Jun-2015  jdolecek file octeon_ipd.c was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.2.2.2 06-Jun-2015  skrll Sync with HEAD
 1.2.2.1 01-Jun-2015  skrll file octeon_ipd.c was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.7.2.1 03-Apr-2021  thorpej Sync with HEAD.
 1.3 22-Jun-2020  simonb Remove unused snprintb format strings.
 1.2 18-Jun-2020  simonb General code cleanup:
- use generic macros for building IO and IOBDMA addresses instead
of many different variations of the same theme.
- use #define's for CVMSEG addresses instead of magic numbers.
- use __BIT/__BITS/__SHIFTIN/__SHIFTOUT in most places, instead of
foo_SHIFT defines or (worse) shifting by magic numbers.

No functional changes.
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_ipdreg.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_ipdreg.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.5 23-Jun-2020  simonb Cleanup - mostly removing unused code and defines.
 1.4 22-Jun-2020  simonb Remove unmaintained CNMAC_DEBUG debug code.
 1.3 18-Jun-2020  simonb General code cleanup:
- use generic macros for building IO and IOBDMA addresses instead
of many different variations of the same theme.
- use #define's for CVMSEG addresses instead of magic numbers.
- use __BIT/__BITS/__SHIFTIN/__SHIFTOUT in most places, instead of
foo_SHIFT defines or (worse) shifting by magic numbers.

No functional changes.
 1.2 31-May-2020  simonb Rename all Cavium Octeon device driver functions, structs etc from
"octeon_foo" to "octfoo", except "octeon_eth" becomes "cnmac".
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_ipdvar.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_ipdvar.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.2 18-Jun-2020  simonb General code cleanup:
- use generic macros for building IO and IOBDMA addresses instead
of many different variations of the same theme.
- use #define's for CVMSEG addresses instead of magic numbers.
- use __BIT/__BITS/__SHIFTIN/__SHIFTOUT in most places, instead of
foo_SHIFT defines or (worse) shifting by magic numbers.

No functional changes.
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_l2creg.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_l2creg.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.7 07-Aug-2021  thorpej Merge thorpej-cfargs2.
 1.6 24-Apr-2021  thorpej branches: 1.6.8;
Merge thorpej-cfargs branch:

Simplify and make extensible the config_search() / config_found() /
config_attach() interfaces: rather than having different variants for
which arguments you want pass along, just have a single call that
takes a variadic list of tag-value arguments.

Adjust all call sites:
- Simplify wherever possible; don't pass along arguments that aren't
actually needed.
- Don't be explicit about what interface attribute is attaching if
the device only has one. (More simplification.)
- Add a config_probe() function to be used in indirect configuiration
situations, making is visibly easier to see when indirect config is
in play, and allowing for future change in semantics. (As of now,
this is just a wrapper around config_match(), but that is an
implementation detail.)

Remove unnecessary or redundant interface attributes where they're not
needed.

There are currently 5 "cfargs" defined:
- CFARG_SUBMATCH (submatch function for direct config)
- CFARG_SEARCH (search function for indirect config)
- CFARG_IATTR (interface attribte)
- CFARG_LOCATORS (locators array)
- CFARG_DEVHANDLE (devhandle_t - wraps OFW, ACPI, etc. handles)

...and a sentinel value CFARG_EOL.

Add some extra sanity checking to ensure that interface attributes
aren't ambiguous.

Use CFARG_DEVHANDLE in MI FDT, OFW, and ACPI code, and macppc and shark
ports to associate those device handles with device_t instance. This
will trickle trough to more places over time (need back-end for pre-OFW
Sun OBP; any others?).
 1.5 19-Jun-2020  simonb branches: 1.5.4;
Simplify interrupt definition: remove mostly unused masks and just
configure everything using interrupt numbers.
 1.4 31-May-2020  simonb Rename all Cavium Octeon device driver functions, structs etc from
"octeon_foo" to "octfoo", except "octeon_eth" becomes "cnmac".
 1.3 31-May-2020  simonb Clean up Cavium Octeon device names. Rename devices from "octeon_foo"
to "octfoo" - this follows the naming conventions used by many other
MIPS CPUs.
 1.2 01-Jun-2015  matt branches: 1.2.2; 1.2.18;
Rework cavium support in preparation for MULTIPROCESSOR support
 1.1 29-Apr-2015  hikaru Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.2.18.2 03-Dec-2017  jdolecek update from HEAD
 1.2.18.1 01-Jun-2015  jdolecek file octeon_mpi.c was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.2.2.2 06-Jun-2015  skrll Sync with HEAD
 1.2.2.1 01-Jun-2015  skrll file octeon_mpi.c was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.5.4.1 02-Apr-2021  thorpej config_found_ia() -> config_found() w/ CFARG_IATTR.
 1.6.8.1 04-Aug-2021  thorpej Adapt to CFARGS().
 1.3 22-Jun-2020  simonb Remove unused snprintb format strings.
 1.2 18-Jun-2020  simonb General code cleanup:
- use generic macros for building IO and IOBDMA addresses instead
of many different variations of the same theme.
- use #define's for CVMSEG addresses instead of magic numbers.
- use __BIT/__BITS/__SHIFTIN/__SHIFTOUT in most places, instead of
foo_SHIFT defines or (worse) shifting by magic numbers.

No functional changes.
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_mpireg.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_mpireg.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.2 31-May-2020  simonb Rename all Cavium Octeon device driver functions, structs etc from
"octeon_foo" to "octfoo", except "octeon_eth" becomes "cnmac".
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_mpivar.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_mpivar.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_npireg.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_npireg.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.5 22-Jun-2020  simonb Remove unmaintained CNMAC_DEBUG debug code.
 1.4 19-Jun-2020  simonb Simplify interrupt definition: remove mostly unused masks and just
configure everything using interrupt numbers.
 1.3 31-May-2020  simonb Rename all Cavium Octeon device driver functions, structs etc from
"octeon_foo" to "octfoo", except "octeon_eth" becomes "cnmac".
 1.2 01-Jun-2015  matt branches: 1.2.2; 1.2.18;
Rework cavium support in preparation for MULTIPROCESSOR support
 1.1 29-Apr-2015  hikaru Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.2.18.2 03-Dec-2017  jdolecek update from HEAD
 1.2.18.1 01-Jun-2015  jdolecek file octeon_pci.c was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.2.2.2 06-Jun-2015  skrll Sync with HEAD
 1.2.2.1 01-Jun-2015  skrll file octeon_pci.c was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_pcmreg.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_pcmreg.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.14 05-Dec-2021  msaitoh s/multple/multiple/ in comment.
 1.13 07-Aug-2021  thorpej Merge thorpej-cfargs2.
 1.12 24-Apr-2021  thorpej branches: 1.12.8;
Merge thorpej-cfargs branch:

Simplify and make extensible the config_search() / config_found() /
config_attach() interfaces: rather than having different variants for
which arguments you want pass along, just have a single call that
takes a variadic list of tag-value arguments.

Adjust all call sites:
- Simplify wherever possible; don't pass along arguments that aren't
actually needed.
- Don't be explicit about what interface attribute is attaching if
the device only has one. (More simplification.)
- Add a config_probe() function to be used in indirect configuiration
situations, making is visibly easier to see when indirect config is
in play, and allowing for future change in semantics. (As of now,
this is just a wrapper around config_match(), but that is an
implementation detail.)

Remove unnecessary or redundant interface attributes where they're not
needed.

There are currently 5 "cfargs" defined:
- CFARG_SUBMATCH (submatch function for direct config)
- CFARG_SEARCH (search function for indirect config)
- CFARG_IATTR (interface attribte)
- CFARG_LOCATORS (locators array)
- CFARG_DEVHANDLE (devhandle_t - wraps OFW, ACPI, etc. handles)

...and a sentinel value CFARG_EOL.

Add some extra sanity checking to ensure that interface attributes
aren't ambiguous.

Use CFARG_DEVHANDLE in MI FDT, OFW, and ACPI code, and macppc and shark
ports to associate those device handles with device_t instance. This
will trickle trough to more places over time (need back-end for pre-OFW
Sun OBP; any others?).
 1.11 27-Jan-2021  thorpej branches: 1.11.2;
Rename of_match_compat_data() to of_compatible_match(). Similarly,
rename of_search_compatible() to of_compatible_lookup().

Standardize on of_compatible_match() for driver matching, and adapt
all call sites.
 1.10 04-Jan-2021  thorpej malloc(9) -> kmem(9)
 1.9 16-Jul-2020  jmcneill branches: 1.9.2;
FDT support for Cavium OCTEON MIPS SoCs. WIP.
 1.8 23-Jun-2020  simonb Redo cnmac attachments - cnmacM @ gmxN @ pip0 @ iobus
 1.7 22-Jun-2020  simonb Remove unused snprintb format strings.
 1.6 22-Jun-2020  simonb Remove unmaintained CNMAC_DEBUG debug code.
 1.5 18-Jun-2020  simonb General code cleanup:
- use generic macros for building IO and IOBDMA addresses instead
of many different variations of the same theme.
- use #define's for CVMSEG addresses instead of magic numbers.
- use __BIT/__BITS/__SHIFTIN/__SHIFTOUT in most places, instead of
foo_SHIFT defines or (worse) shifting by magic numbers.

No functional changes.
 1.4 31-May-2020  simonb Rename all Cavium Octeon device driver functions, structs etc from
"octeon_foo" to "octfoo", except "octeon_eth" becomes "cnmac".
 1.3 29-Jan-2020  thorpej Adopt <net/if_stats.h>.
 1.2 06-Feb-2018  mrg branches: 1.2.4; 1.2.10;
update for GCC 6:

hide octeon_pip_dump_regs_[] under OCTEON_ETH_DEBUG, the only user.
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_pip.c was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_pip.c was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.2.10.1 29-Feb-2020  ad Sync with head.
 1.2.4.1 08-Apr-2020  martin Merge changes from current as of 20200406
 1.9.2.1 03-Apr-2021  thorpej Sync with HEAD.
 1.11.2.1 21-Mar-2021  thorpej Give config_found() the same variadic arguments treatment as
config_search(). This commit only adds the CFARG_EOL sentinel
to the existing config_found() calls. Conversion of config_found_sm_loc()
and config_found_ia() call sites will be in subsequent commits.
 1.12.8.1 04-Aug-2021  thorpej Adapt to CFARGS().
 1.5 23-Jun-2020  simonb Redo cnmac attachments - cnmacM @ gmxN @ pip0 @ iobus
 1.4 22-Jun-2020  simonb Remove more snprintb _BITS bits.
 1.3 22-Jun-2020  simonb Remove unused snprintb format strings.
 1.2 18-Jun-2020  simonb General code cleanup:
- use generic macros for building IO and IOBDMA addresses instead
of many different variations of the same theme.
- use #define's for CVMSEG addresses instead of magic numbers.
- use __BIT/__BITS/__SHIFTIN/__SHIFTOUT in most places, instead of
foo_SHIFT defines or (worse) shifting by magic numbers.

No functional changes.
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_pipreg.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_pipreg.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.5 23-Jun-2020  simonb Redo cnmac attachments - cnmacM @ gmxN @ pip0 @ iobus
 1.4 22-Jun-2020  simonb Remove unmaintained CNMAC_DEBUG debug code.
 1.3 18-Jun-2020  simonb General code cleanup:
- use generic macros for building IO and IOBDMA addresses instead
of many different variations of the same theme.
- use #define's for CVMSEG addresses instead of magic numbers.
- use __BIT/__BITS/__SHIFTIN/__SHIFTOUT in most places, instead of
foo_SHIFT defines or (worse) shifting by magic numbers.

No functional changes.
 1.2 31-May-2020  simonb Rename all Cavium Octeon device driver functions, structs etc from
"octeon_foo" to "octfoo", except "octeon_eth" becomes "cnmac".
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_pipvar.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_pipvar.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.7 17-Sep-2021  andvar some love to double letters (in comments).
 1.6 04-Jan-2021  thorpej malloc(9) -> kmem(9)
 1.5 23-Jun-2020  simonb branches: 1.5.2;
Cleanup - mostly removing unused code and defines.
 1.4 22-Jun-2020  simonb Remove unmaintained CNMAC_DEBUG debug code.
 1.3 18-Jun-2020  simonb General code cleanup:
- use generic macros for building IO and IOBDMA addresses instead
of many different variations of the same theme.
- use #define's for CVMSEG addresses instead of magic numbers.
- use __BIT/__BITS/__SHIFTIN/__SHIFTOUT in most places, instead of
foo_SHIFT defines or (worse) shifting by magic numbers.

No functional changes.
 1.2 31-May-2020  simonb Rename all Cavium Octeon device driver functions, structs etc from
"octeon_foo" to "octfoo", except "octeon_eth" becomes "cnmac".
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_pko.c was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_pko.c was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.5.2.1 03-Apr-2021  thorpej Sync with HEAD.
 1.2 18-Jun-2020  simonb General code cleanup:
- use generic macros for building IO and IOBDMA addresses instead
of many different variations of the same theme.
- use #define's for CVMSEG addresses instead of magic numbers.
- use __BIT/__BITS/__SHIFTIN/__SHIFTOUT in most places, instead of
foo_SHIFT defines or (worse) shifting by magic numbers.

No functional changes.
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_pkoreg.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_pkoreg.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.6 23-Jun-2020  simonb Cleanup - mostly removing unused code and defines.
 1.5 22-Jun-2020  simonb Remove unmaintained CNMAC_DEBUG debug code.
 1.4 18-Jun-2020  simonb General code cleanup:
- use generic macros for building IO and IOBDMA addresses instead
of many different variations of the same theme.
- use #define's for CVMSEG addresses instead of magic numbers.
- use __BIT/__BITS/__SHIFTIN/__SHIFTOUT in most places, instead of
foo_SHIFT defines or (worse) shifting by magic numbers.

No functional changes.
 1.3 31-May-2020  simonb Rename all Cavium Octeon device driver functions, structs etc from
"octeon_foo" to "octfoo", except "octeon_eth" becomes "cnmac".
 1.2 19-Apr-2018  christos s/static inline/static __inline/g for consistency.
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18; 1.1.20;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.20.1 22-Apr-2018  pgoyette Sync with HEAD
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_pkovar.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_pkovar.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.10 23-Jun-2020  simonb Cleanup - mostly removing unused code and defines.
 1.9 22-Jun-2020  simonb Remove unmaintained CNMAC_DEBUG debug code.
 1.8 19-Jun-2020  simonb Simplify interrupt definition: remove mostly unused masks and just
configure everything using interrupt numbers.
 1.7 18-Jun-2020  simonb General code cleanup:
- use generic macros for building IO and IOBDMA addresses instead
of many different variations of the same theme.
- use #define's for CVMSEG addresses instead of magic numbers.
- use __BIT/__BITS/__SHIFTIN/__SHIFTOUT in most places, instead of
foo_SHIFT defines or (worse) shifting by magic numbers.

No functional changes.
 1.6 31-May-2020  simonb Rename all Cavium Octeon device driver functions, structs etc from
"octeon_foo" to "octfoo", except "octeon_eth" becomes "cnmac".
 1.5 10-Nov-2019  chs in many device attach paths, allocate memory with M_WAITOK instead of M_NOWAIT
and remove code to handle failures that can no longer happen.
 1.4 28-May-2019  msaitoh s/recieve/receive/
 1.3 11-Apr-2019  kamil Fix CVS Id

NFCI
 1.2 01-Jun-2015  matt branches: 1.2.2; 1.2.18; 1.2.22;
Rework cavium support in preparation for MULTIPROCESSOR support
 1.1 29-Apr-2015  hikaru Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.2.22.2 13-Apr-2020  martin Mostly merge changes from HEAD upto 20200411
 1.2.22.1 10-Jun-2019  christos Sync with HEAD
 1.2.18.2 03-Dec-2017  jdolecek update from HEAD
 1.2.18.1 01-Jun-2015  jdolecek file octeon_pow.c was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.2.2.2 06-Jun-2015  skrll Sync with HEAD
 1.2.2.1 01-Jun-2015  skrll file octeon_pow.c was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.5 23-Jun-2020  simonb Cleanup - mostly removing unused code and defines.
 1.4 22-Jun-2020  simonb Remove more snprintb _BITS bits.
 1.3 22-Jun-2020  simonb Remove unused snprintb format strings.
 1.2 18-Jun-2020  simonb General code cleanup:
- use generic macros for building IO and IOBDMA addresses instead
of many different variations of the same theme.
- use #define's for CVMSEG addresses instead of magic numbers.
- use __BIT/__BITS/__SHIFTIN/__SHIFTOUT in most places, instead of
foo_SHIFT defines or (worse) shifting by magic numbers.

No functional changes.
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_powreg.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_powreg.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.7 23-Jun-2020  simonb Cleanup - mostly removing unused code and defines.
 1.6 22-Jun-2020  simonb Remove unmaintained CNMAC_DEBUG debug code.
 1.5 18-Jun-2020  simonb General code cleanup:
- use generic macros for building IO and IOBDMA addresses instead
of many different variations of the same theme.
- use #define's for CVMSEG addresses instead of magic numbers.
- use __BIT/__BITS/__SHIFTIN/__SHIFTOUT in most places, instead of
foo_SHIFT defines or (worse) shifting by magic numbers.

No functional changes.
 1.4 31-May-2020  simonb Rename all Cavium Octeon device driver functions, structs etc from
"octeon_foo" to "octfoo", except "octeon_eth" becomes "cnmac".
 1.3 19-Apr-2018  christos s/static inline/static __inline/g for consistency.
 1.2 11-Jul-2016  matt branches: 1.2.16; 1.2.18;
Change MIPS to use the common pmap code.
Switch to 8KB pages on CPUs with a R4K MMU.
Simplify cache code.
Merge in most of changes from matt-mips64 branch
 1.1 29-Apr-2015  hikaru branches: 1.1.2;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.2.3 05-Oct-2016  skrll Sync with HEAD
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_powvar.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.2.18.1 22-Apr-2018  pgoyette Sync with HEAD
 1.2.16.2 03-Dec-2017  jdolecek update from HEAD
 1.2.16.1 11-Jul-2016  jdolecek file octeon_powvar.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.17 30-Jan-2025  gutteridge octeon_rnm.c: minor code formatting and grammar tweaks (NFC)
 1.16 21-Mar-2023  riastradh branches: 1.16.6;
octrnm(4): Raise delay on startup.

According to CN50XX-HRM-V0.99E and CN78XX-HM-0.99E:

The entropy is provided by the jitter of 125 of 128 free-running
oscillators XORed into a 128-bit LFSR. The LFSR accumulates entropy
over 81 cycles, after which it is fed into a SHA-1 engine.
[...]
The SHA-1 engine runs once every 81 cycles.
[...]
The hardware produces new 64-bit random number every 81 cycles.

The last sentence means that we only need to wait 81 cycles _between_
consecutive SHA-1 outputs (which isn't relevant anyway because we
reconfigure it into raw mode later), but the first two quotes might
mean that we need to wait 81+81 cycles for the _first_ output to be
produced on boot when running the self-test.

Now, in this case, the self-test is run with the LFSR unhooked, by
clearing the RNM_CTL_STATUS[ENT_EN] bit, so that SHA-1 is computed
from a known input -- this is really just paranoia to make sure that
_some_ functions of the device (which is conjured out of thin air at
a fixed virtual address, with no firmware bindings to guide us)
behave as we expect.

And it's not clear if it really does take 81+81 cycles for the first
SHA-1 output to appear when the LFSR isn't feeding into it anyway.
But experimentally, delay of 81+81 cycles seems to work whereas a
delay of only 81 cycles crashes.

PR kern/57280

XXX pullup-10
XXX pullup-9
 1.15 19-Mar-2022  riastradh branches: 1.15.4;
rnd(9): Omit needless locks in various HWRNG drivers.

Now that the rnd(9) API guarantees serial callbacks, we can simplify
everything a bit more.

(Some drivers like hifn(4) and sun8icrypto(4) still use locks to
coordinate with other parts of the driver to submit requests to and
process responses from the device.)
 1.14 19-Mar-2022  riastradh rnd(9): Adjust IPL of locks used by rndsource callbacks.

These no longer ever run from hard interrupt context or with a spin
lock held, so there is no longer any need to have them at IPL_VM to
block hard interrupts. Instead, lower them to IPL_SOFTSERIAL.
 1.13 28-Dec-2021  riastradh sys: Use preempt_point and preempt_needed, not open-coded versions.
 1.12 18-Jun-2020  simonb General code cleanup:
- use generic macros for building IO and IOBDMA addresses instead
of many different variations of the same theme.
- use #define's for CVMSEG addresses instead of magic numbers.
- use __BIT/__BITS/__SHIFTIN/__SHIFTOUT in most places, instead of
foo_SHIFT defines or (worse) shifting by magic numbers.

No functional changes.
 1.11 08-Jun-2020  simonb Fix tyop in a comment. Thanks riastradh@.
 1.10 05-Jun-2020  simonb 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.
 1.9 31-May-2020  simonb Rename all Cavium Octeon device driver functions, structs etc from
"octeon_foo" to "octfoo", except "octeon_eth" becomes "cnmac".
 1.8 31-May-2020  simonb Clean up Cavium Octeon device names. Rename devices from "octeon_foo"
to "octfoo" - this follows the naming conventions used by many other
MIPS CPUs.
 1.7 30-May-2020  simonb CN70XX iobdma limit appears to be 128 words, so gather that many samples
as a time.
Gather the full 512 bytes of samples and process in a single call to
rnd_add_data_sync() - about 10% faster than 4 calls to rnd_add_data_sync().
Put sample buffer in the softc to save some stack usage.
 1.6 18-May-2020  riastradh Adjust entropy estimate for the Octeon.

We are hedging in serial and in parallel, and more conservative than
the Linux driver from Cavium seems to be, so although I don't know
exactly what the thermal jitter of the device is, this seems like a
reasonable compromise.
 1.5 13-May-2020  riastradh Rework octeon_rnm(4) random number generator driver.

- Do a little on-line self-test for fun.
- Draw raw samples from the ring oscillators.
- Draw substantially more samples:
=> early RO samples seem to have considerably lower entropy
=> consecutive RO samples are not independent
- Make sure to use rnd_add_data_sync in the callback.
=> not technically needed in HEAD, but would be needed for pullup
 1.4 12-May-2020  simonb Oceton RNG/RNM driver modernisation to fit new entropy world order by
riastradh@, with some tweaks to get working in RNG mode.

XXX TODO: work out how to get raw entropy mode working.
 1.3 12-May-2020  simonb If bus_space_map fails, just don't attach the driver instead of panicing.
Check RNG built in self test, don't attach if that fails too.
 1.2 08-Jan-2019  jdolecek branches: 1.2.4;
no need to include <machine/param.h> if <sys/param.h> already included
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18; 1.1.20; 1.1.22;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.22.1 10-Jun-2019  christos Sync with HEAD
 1.1.20.1 18-Jan-2019  pgoyette Synch with HEAD
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_rnm.c was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_rnm.c was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.2.4.3 30-Jul-2023  martin Pull up following revision(s) (requested by gutteridge in ticket #256):

sys/arch/mips/cavium/dev/octeon_rnm.c: revision 1.16 (patch)

octrnm(4): Raise delay on startup.

According to CN50XX-HRM-V0.99E and CN78XX-HM-0.99E:
The entropy is provided by the jitter of 125 of 128 free-running
oscillators XORed into a 128-bit LFSR. The LFSR accumulates entropy
over 81 cycles, after which it is fed into a SHA-1 engine.
[...]
The SHA-1 engine runs once every 81 cycles.
[...]
The hardware produces new 64-bit random number every 81 cycles.

The last sentence means that we only need to wait 81 cycles _between_
consecutive SHA-1 outputs (which isn't relevant anyway because we
reconfigure it into raw mode later), but the first two quotes might
mean that we need to wait 81+81 cycles for the _first_ output to be
produced on boot when running the self-test.

Now, in this case, the self-test is run with the LFSR unhooked, by
clearing the RNM_CTL_STATUS[ENT_EN] bit, so that SHA-1 is computed
from a known input -- this is really just paranoia to make sure that
_some_ functions of the device (which is conjured out of thin air at
a fixed virtual address, with no firmware bindings to guide us)
behave as we expect.

And it's not clear if it really does take 81+81 cycles for the first
SHA-1 output to appear when the LFSR isn't feeding into it anyway.

But experimentally, delay of 81+81 cycles seems to work whereas a
delay of only 81 cycles crashes.
PR kern/57280
 1.2.4.2 19-May-2020  martin Apply patch, requested by simonb in ticket #918:

the updated octeon_rnm(4) driver fails a bogus randomness
test in the netbsd-9 rnd(9) driver for RND_TYPE_RNG type devices so
uses the RND_TYPE_UNKNOWN type. This approach is used by other drivers
on the netbsd-9 branch.
 1.2.4.1 19-May-2020  martin Pull up following revision(s) (requested by simonb in ticket #918):

sys/arch/mips/cavium/dev/octeon_rnm.c: revision 1.3
sys/arch/mips/cavium/dev/octeon_rnm.c: revision 1.4
sys/arch/mips/cavium/dev/octeon_rnm.c: revision 1.5
sys/arch/mips/cavium/dev/octeon_rnm.c: revision 1.6 (+ patch)
sys/arch/mips/cavium/dev/octeon_rnmreg.h: revision 1.2
sys/arch/mips/cavium/dev/octeon_rnmreg.h: revision 1.3
sys/arch/mips/cavium/octeonvar.h: revision 1.7

Add a few more bits.
XXX convert to __BITS.
--
If bus_space_map fails, just don't attach the driver instead of panicing.
Check RNG built in self test, don't attach if that fails too.
--
Oceton RNG/RNM driver modernisation to fit new entropy world order by
riastradh@, with some tweaks to get working in RNG mode.
XXX TODO: work out how to get raw entropy mode working.
--
Rework octeon_rnm(4) random number generator driver.
- Do a little on-line self-test for fun.
- Draw raw samples from the ring oscillators.
- Draw substantially more samples:
=3D> early RO samples seem to have considerably lower entropy
=3D> consecutive RO samples are not independent
- Make sure to use rnd_add_data_sync in the callback.
=3D> not technically needed in HEAD, but would be needed for pullup
--
Adjust entropy estimate for the Octeon.
We are hedging in serial and in parallel, and more conservative than
the Linux driver from Cavium seems to be, so although I don't know
exactly what the thermal jitter of the device is, this seems like a
reasonable compromise.
 1.15.4.1 30-Jul-2023  martin Pull up following revision(s) (requested by gutteridge in ticket #256):

sys/arch/mips/cavium/dev/octeon_rnm.c: revision 1.16

octrnm(4): Raise delay on startup.

According to CN50XX-HRM-V0.99E and CN78XX-HM-0.99E:
The entropy is provided by the jitter of 125 of 128 free-running
oscillators XORed into a 128-bit LFSR. The LFSR accumulates entropy
over 81 cycles, after which it is fed into a SHA-1 engine.
[...]
The SHA-1 engine runs once every 81 cycles.
[...]
The hardware produces new 64-bit random number every 81 cycles.

The last sentence means that we only need to wait 81 cycles _between_
consecutive SHA-1 outputs (which isn't relevant anyway because we
reconfigure it into raw mode later), but the first two quotes might
mean that we need to wait 81+81 cycles for the _first_ output to be
produced on boot when running the self-test.

Now, in this case, the self-test is run with the LFSR unhooked, by
clearing the RNM_CTL_STATUS[ENT_EN] bit, so that SHA-1 is computed
from a known input -- this is really just paranoia to make sure that
_some_ functions of the device (which is conjured out of thin air at
a fixed virtual address, with no firmware bindings to guide us)
behave as we expect.

And it's not clear if it really does take 81+81 cycles for the first
SHA-1 output to appear when the LFSR isn't feeding into it anyway.

But experimentally, delay of 81+81 cycles seems to work whereas a
delay of only 81 cycles crashes.
PR kern/57280
 1.16.6.1 02-Aug-2025  perseant Sync with HEAD
 1.5 22-Jun-2020  simonb Remove unused snprintb format strings.
 1.4 18-Jun-2020  simonb General code cleanup:
- use generic macros for building IO and IOBDMA addresses instead
of many different variations of the same theme.
- use #define's for CVMSEG addresses instead of magic numbers.
- use __BIT/__BITS/__SHIFTIN/__SHIFTOUT in most places, instead of
foo_SHIFT defines or (worse) shifting by magic numbers.

No functional changes.
 1.3 13-May-2020  riastradh Rework octeon_rnm(4) random number generator driver.

- Do a little on-line self-test for fun.
- Draw raw samples from the ring oscillators.
- Draw substantially more samples:
=> early RO samples seem to have considerably lower entropy
=> consecutive RO samples are not independent
- Make sure to use rnd_add_data_sync in the callback.
=> not technically needed in HEAD, but would be needed for pullup
 1.2 12-May-2020  simonb Add a few more bits.
XXX convert to __BITS.
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18; 1.1.26;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.26.1 19-May-2020  martin Pull up following revision(s) (requested by simonb in ticket #918):

sys/arch/mips/cavium/dev/octeon_rnm.c: revision 1.3
sys/arch/mips/cavium/dev/octeon_rnm.c: revision 1.4
sys/arch/mips/cavium/dev/octeon_rnm.c: revision 1.5
sys/arch/mips/cavium/dev/octeon_rnm.c: revision 1.6 (+ patch)
sys/arch/mips/cavium/dev/octeon_rnmreg.h: revision 1.2
sys/arch/mips/cavium/dev/octeon_rnmreg.h: revision 1.3
sys/arch/mips/cavium/octeonvar.h: revision 1.7

Add a few more bits.
XXX convert to __BITS.
--
If bus_space_map fails, just don't attach the driver instead of panicing.
Check RNG built in self test, don't attach if that fails too.
--
Oceton RNG/RNM driver modernisation to fit new entropy world order by
riastradh@, with some tweaks to get working in RNG mode.
XXX TODO: work out how to get raw entropy mode working.
--
Rework octeon_rnm(4) random number generator driver.
- Do a little on-line self-test for fun.
- Draw raw samples from the ring oscillators.
- Draw substantially more samples:
=3D> early RO samples seem to have considerably lower entropy
=3D> consecutive RO samples are not independent
- Make sure to use rnd_add_data_sync in the callback.
=3D> not technically needed in HEAD, but would be needed for pullup
--
Adjust entropy estimate for the Octeon.
We are hedging in serial and in parallel, and more conservative than
the Linux driver from Cavium seems to be, so although I don't know
exactly what the thermal jitter of the device is, this seems like a
reasonable compromise.
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_rnmreg.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_rnmreg.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.9 29-Sep-2022  skrll Remove unnecessary include of <sys/malloc.h>.
 1.8 29-Sep-2022  skrll Trailing whitespace
 1.7 27-Jan-2021  thorpej Rename of_match_compat_data() to of_compatible_match(). Similarly,
rename of_search_compatible() to of_compatible_lookup().

Standardize on of_compatible_match() for driver matching, and adapt
all call sites.
 1.6 16-Jul-2020  jmcneill branches: 1.6.2;
FDT support for Cavium OCTEON MIPS SoCs. WIP.
 1.5 23-Jun-2020  simonb Redo cnmac attachments - cnmacM @ gmxN @ pip0 @ iobus
 1.4 18-Jun-2020  simonb General code cleanup:
- use generic macros for building IO and IOBDMA addresses instead
of many different variations of the same theme.
- use #define's for CVMSEG addresses instead of magic numbers.
- use __BIT/__BITS/__SHIFTIN/__SHIFTOUT in most places, instead of
foo_SHIFT defines or (worse) shifting by magic numbers.

No functional changes.
 1.3 31-May-2020  simonb Rename all Cavium Octeon device driver functions, structs etc from
"octeon_foo" to "octfoo", except "octeon_eth" becomes "cnmac".
 1.2 22-Jan-2019  msaitoh Change MII PHY read/write API from:

int (*mii_readreg_t)(device_t, int, int);
void (*mii_writereg_t)(device_t, int, int, int);
to:

int (*mii_readreg_t)(device_t, int, int, uint16_t *);
int (*mii_writereg_t)(device_t, int, int, uint16_t);

Now we can test if a read/write operation failed or not by the return value.

In 802.3 spec says that the PHY shall not respond to read/write transaction
to the unimplemented register(22.2.4.3). Detecting timeout can be used to
check whether a register is implemented or not (if the register conforms to
the spec). ukphy(4) can be used this for MII_MMDACR and MII_MMDAADR.

Note that I noticed that the following code do infinite loop in the
read/wirte function. If it accesses unimplemented PHY register, it will hang.
It should be fixed:

arm/at91/at91emac.c
arm/ep93xx/epe.c
arm/omap/omapl1x_emac.c
mips/ralink/ralink_eth.c
arch/powerpc/booke/dev/pq3etsec.c(read)
dev/cadence/if_cemac.c <- hkenken
dev/ic/lan9118.c


Tested with the following device:

axe+ukphy
axe+rgephy
axen+rgephy (tested by Andrius V)
wm+atphy
wm+ukphy
wm+igphy
wm+ihphy
wm+makphy
sk+makphy
sk+brgphy
sk+gentbi
msk+makphy
sip+icsphy
sip+ukphy
re+rgephy
bge+brgphy
bnx+brgphy
gsip+gphyter
rtk+rlphy
fxp+inphy (tested by Andrius V)
tlp+acphy
ex+exphy
epic+qsphy
vge+ciphy (tested by Andrius V)
vr+ukphy (tested by Andrius V)
vte+ukphy (tested by Andrius V)

Not tested (MAC):
arm:at91emac
arm:cemac
arm:epe
arm:geminigmac
arm:enet
arm:cpsw
arm:emac(omac)
arm:emac(sunxi)
arm:npe
evbppc:temac
macppc:bm
macppc:gm
mips:aumac
mips:ae
mips:cnmac
mips:reth
mips:sbmac
playstation2:smap
powerpc:tsec
powerpc:emac(ibm4xx)
sgimips:mec
sparc:be
sf
ne(ax88190, dl10019)
awge
ep
gem
hme
smsh
mtd
sm
age
alc
ale
bce
cas
et
jme
lii
nfe
pcn
ste
stge
tl
xi
aue
mue
smsc
udav
url

Not tested (PHY):
amhphy
bmtphy
dmphy
etphy
glxtphy
ikphy
iophy
lxtphy
nsphyter
pnaphy
rdcphy
sqphy
tlphy
tqphy
urlphy
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18; 1.1.20; 1.1.22;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.22.1 10-Jun-2019  christos Sync with HEAD
 1.1.20.1 26-Jan-2019  pgoyette Sync with HEAD
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_smi.c was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_smi.c was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.6.2.1 03-Apr-2021  thorpej Sync with HEAD.
 1.3 23-Jun-2020  simonb Redo cnmac attachments - cnmacM @ gmxN @ pip0 @ iobus
 1.2 18-Jun-2020  simonb General code cleanup:
- use generic macros for building IO and IOBDMA addresses instead
of many different variations of the same theme.
- use #define's for CVMSEG addresses instead of magic numbers.
- use __BIT/__BITS/__SHIFTIN/__SHIFTOUT in most places, instead of
foo_SHIFT defines or (worse) shifting by magic numbers.

No functional changes.
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_smireg.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_smireg.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.6 23-Jun-2020  simonb Redo cnmac attachments - cnmacM @ gmxN @ pip0 @ iobus
 1.5 18-Jun-2020  simonb General code cleanup:
- use generic macros for building IO and IOBDMA addresses instead
of many different variations of the same theme.
- use #define's for CVMSEG addresses instead of magic numbers.
- use __BIT/__BITS/__SHIFTIN/__SHIFTOUT in most places, instead of
foo_SHIFT defines or (worse) shifting by magic numbers.

No functional changes.
 1.4 31-May-2020  simonb Rename all Cavium Octeon device driver functions, structs etc from
"octeon_foo" to "octfoo", except "octeon_eth" becomes "cnmac".
 1.3 22-Jan-2019  msaitoh Change MII PHY read/write API from:

int (*mii_readreg_t)(device_t, int, int);
void (*mii_writereg_t)(device_t, int, int, int);
to:

int (*mii_readreg_t)(device_t, int, int, uint16_t *);
int (*mii_writereg_t)(device_t, int, int, uint16_t);

Now we can test if a read/write operation failed or not by the return value.

In 802.3 spec says that the PHY shall not respond to read/write transaction
to the unimplemented register(22.2.4.3). Detecting timeout can be used to
check whether a register is implemented or not (if the register conforms to
the spec). ukphy(4) can be used this for MII_MMDACR and MII_MMDAADR.

Note that I noticed that the following code do infinite loop in the
read/wirte function. If it accesses unimplemented PHY register, it will hang.
It should be fixed:

arm/at91/at91emac.c
arm/ep93xx/epe.c
arm/omap/omapl1x_emac.c
mips/ralink/ralink_eth.c
arch/powerpc/booke/dev/pq3etsec.c(read)
dev/cadence/if_cemac.c <- hkenken
dev/ic/lan9118.c


Tested with the following device:

axe+ukphy
axe+rgephy
axen+rgephy (tested by Andrius V)
wm+atphy
wm+ukphy
wm+igphy
wm+ihphy
wm+makphy
sk+makphy
sk+brgphy
sk+gentbi
msk+makphy
sip+icsphy
sip+ukphy
re+rgephy
bge+brgphy
bnx+brgphy
gsip+gphyter
rtk+rlphy
fxp+inphy (tested by Andrius V)
tlp+acphy
ex+exphy
epic+qsphy
vge+ciphy (tested by Andrius V)
vr+ukphy (tested by Andrius V)
vte+ukphy (tested by Andrius V)

Not tested (MAC):
arm:at91emac
arm:cemac
arm:epe
arm:geminigmac
arm:enet
arm:cpsw
arm:emac(omac)
arm:emac(sunxi)
arm:npe
evbppc:temac
macppc:bm
macppc:gm
mips:aumac
mips:ae
mips:cnmac
mips:reth
mips:sbmac
playstation2:smap
powerpc:tsec
powerpc:emac(ibm4xx)
sgimips:mec
sparc:be
sf
ne(ax88190, dl10019)
awge
ep
gem
hme
smsh
mtd
sm
age
alc
ale
bce
cas
et
jme
lii
nfe
pcn
ste
stge
tl
xi
aue
mue
smsc
udav
url

Not tested (PHY):
amhphy
bmtphy
dmphy
etphy
glxtphy
ikphy
iophy
lxtphy
nsphyter
pnaphy
rdcphy
sqphy
tlphy
tqphy
urlphy
 1.2 10-Jan-2019  msaitoh KNF. No functional change.
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18; 1.1.20; 1.1.22;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.22.1 10-Jun-2019  christos Sync with HEAD
 1.1.20.2 26-Jan-2019  pgoyette Sync with HEAD
 1.1.20.1 18-Jan-2019  pgoyette Synch with HEAD
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_smivar.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_smivar.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.2 31-May-2020  simonb Remove unused Timer Unit register definitions and stubs. Can be
resurrected from the attic in the unlikely event we'll ever have
a driver for this device.
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_tim.c was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_tim.c was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.2 31-May-2020  simonb Remove unused Timer Unit register definitions and stubs. Can be
resurrected from the attic in the unlikely event we'll ever have
a driver for this device.
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_timreg.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_timreg.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.2 18-Jun-2020  simonb General code cleanup:
- use generic macros for building IO and IOBDMA addresses instead
of many different variations of the same theme.
- use #define's for CVMSEG addresses instead of magic numbers.
- use __BIT/__BITS/__SHIFTIN/__SHIFTOUT in most places, instead of
foo_SHIFT defines or (worse) shifting by magic numbers.

No functional changes.
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_twsi.c was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_twsi.c was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.3 22-Jun-2020  simonb Remove unused snprintb format strings.
 1.2 18-Jun-2020  simonb General code cleanup:
- use generic macros for building IO and IOBDMA addresses instead
of many different variations of the same theme.
- use #define's for CVMSEG addresses instead of magic numbers.
- use __BIT/__BITS/__SHIFTIN/__SHIFTOUT in most places, instead of
foo_SHIFT defines or (worse) shifting by magic numbers.

No functional changes.
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_twsireg.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_twsireg.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.10 26-Jan-2022  martin Fix initialization of the register map by using the com_init_regs()
helper function. Pointed out by jmcneill.
 1.9 23-Jun-2020  simonb Add support for a very simple output-only console so early printf() can work.
Minor tweaks, remove some unused code.
 1.8 19-Jun-2020  simonb Simplify interrupt definition: remove mostly unused masks and just
configure everything using interrupt numbers.
 1.7 18-Jun-2020  simonb General code cleanup:
- use generic macros for building IO and IOBDMA addresses instead
of many different variations of the same theme.
- use #define's for CVMSEG addresses instead of magic numbers.
- use __BIT/__BITS/__SHIFTIN/__SHIFTOUT in most places, instead of
foo_SHIFT defines or (worse) shifting by magic numbers.

No functional changes.
 1.6 15-Jun-2020  simonb Finish CPU core support for Octeon Cavium CN70XX:
- decode actual CPU name
- per CPU core reset logic (partially adapted from OpenBSD)
- handle Octeon 3 ioclock rate differences to other cores (from OpenBSD)
 1.5 31-May-2020  simonb Finish rename of all Cavium Octeon device driver functions, structs etc from
"octeon_foo" to "octfoo" (missed octeon_uart + entries in iobus config).
 1.4 31-May-2020  simonb Clean up Cavium Octeon device names. Rename devices from "octeon_foo"
to "octfoo" - this follows the naming conventions used by many other
MIPS CPUs.
 1.3 02-Jun-2015  matt branches: 1.3.2; 1.3.18;
Use structure copy instead of memcpy.
 1.2 01-Jun-2015  matt Rework cavium support in preparation for MULTIPROCESSOR support
 1.1 29-Apr-2015  hikaru Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.3.18.2 03-Dec-2017  jdolecek update from HEAD
 1.3.18.1 02-Jun-2015  jdolecek file octeon_uart.c was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.3.2.2 06-Jun-2015  skrll Sync with HEAD
 1.3.2.1 02-Jun-2015  skrll file octeon_uart.c was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.2 11-Apr-2019  kamil Fix CVS Id

NFCI
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18; 1.1.22;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.22.1 10-Jun-2019  christos Sync with HEAD
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_uartreg.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_uartreg.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.1 27-Jun-2020  simonb Add new file containing a couple of UART prototypes.

Missing file pointed out by rin@. Thanks!
 1.2 01-May-2015  hikaru Use dwc2 instead of octeon_usbc, and unify octeon_usbn to new octeon_dwctwo.
Internal USB memory stick of EdgeRouter Lite works now.
 1.1 29-Apr-2015  hikaru Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.4 23-Jun-2020  simonb Remove USB controller register definitions, these match dwc2 core and
weren't used anyway.
 1.3 22-Jun-2020  simonb Remove more snprintb _BITS bits.
 1.2 22-Jun-2020  simonb Remove unused snprintb format strings.
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_usbcreg.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_usbcreg.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.7 23-Jun-2020  simonb Remove unused include files.
 1.6 18-Nov-2018  skrll Remove unused struct member (usbd_xfer now has a struct usb_task)
 1.5 18-Nov-2018  skrll Whitespace
 1.4 09-Apr-2018  jakllsch branches: 1.4.2;
Stop potential misuse of vendor names and USB vendor IDs in root hub
device and string descriptors.

Firstly: Few vendors have identical PCI-SIG vendor IDs and USB-IF vendor
IDs. As such, using the PCI vendor ID as a USB vendor ID may trample
on whomever is allocated that USB vendor ID.

Secondly: The vendor of the host controller hardware implementation has
little to nothing to do with our usbroothub implementation. Thus we
should not potentially associate any problems therewith to such third
party.

This change will result in root hubs being identified by USB Vendor ID
0x0000. Root hub vendor string will now be "NetBSD" (or, specifically:
ostype). Product ID (0x0000) and product strings remain unchanged.
 1.3 26-Apr-2016  skrll branches: 1.3.16; 1.3.18;
g/c usb_dma_reserve
 1.2 26-Apr-2016  skrll s/usbd_xfer_handle/struct usbd_xfer */
 1.1 29-Apr-2015  hikaru branches: 1.1.2;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.2.3 29-May-2016  skrll Sync with HEAD
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_usbcvar.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.3.18.2 26-Nov-2018  pgoyette Sync with HEAD, resolve a couple of conflicts
 1.3.18.1 16-Apr-2018  pgoyette Sync with HEAD, resolve some conflicts
 1.3.16.2 03-Dec-2017  jdolecek update from HEAD
 1.3.16.1 26-Apr-2016  jdolecek file octeon_usbcvar.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.4.2.1 10-Jun-2019  christos Sync with HEAD
 1.2 01-May-2015  hikaru Use dwc2 instead of octeon_usbc, and unify octeon_usbn to new octeon_dwctwo.
Internal USB memory stick of EdgeRouter Lite works now.
 1.1 29-Apr-2015  hikaru Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.3 23-Jun-2020  simonb Minor tweaks and cleanup.
 1.2 22-Jun-2020  simonb Remove unused snprintb format strings.
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_usbnreg.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_usbnreg.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.2 23-Jun-2020  simonb Remove unused include files.
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file octeon_usbnvar.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file octeon_usbnvar.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.9 29-Sep-2022  skrll Remove unnecessary include of <sys/malloc.h>.
 1.8 29-Sep-2022  skrll Trailing whitespace
 1.7 10-Nov-2021  msaitoh s/endianess/endianness/
 1.6 07-Aug-2021  thorpej Merge thorpej-cfargs2.
 1.5 24-Apr-2021  thorpej branches: 1.5.8;
Merge thorpej-cfargs branch:

Simplify and make extensible the config_search() / config_found() /
config_attach() interfaces: rather than having different variants for
which arguments you want pass along, just have a single call that
takes a variadic list of tag-value arguments.

Adjust all call sites:
- Simplify wherever possible; don't pass along arguments that aren't
actually needed.
- Don't be explicit about what interface attribute is attaching if
the device only has one. (More simplification.)
- Add a config_probe() function to be used in indirect configuiration
situations, making is visibly easier to see when indirect config is
in play, and allowing for future change in semantics. (As of now,
this is just a wrapper around config_match(), but that is an
implementation detail.)

Remove unnecessary or redundant interface attributes where they're not
needed.

There are currently 5 "cfargs" defined:
- CFARG_SUBMATCH (submatch function for direct config)
- CFARG_SEARCH (search function for indirect config)
- CFARG_IATTR (interface attribte)
- CFARG_LOCATORS (locators array)
- CFARG_DEVHANDLE (devhandle_t - wraps OFW, ACPI, etc. handles)

...and a sentinel value CFARG_EOL.

Add some extra sanity checking to ensure that interface attributes
aren't ambiguous.

Use CFARG_DEVHANDLE in MI FDT, OFW, and ACPI code, and macppc and shark
ports to associate those device handles with device_t instance. This
will trickle trough to more places over time (need back-end for pre-OFW
Sun OBP; any others?).
 1.4 27-Jan-2021  thorpej branches: 1.4.2;
Rename of_match_compat_data() to of_compatible_match(). Similarly,
rename of_search_compatible() to of_compatible_lookup().

Standardize on of_compatible_match() for driver matching, and adapt
all call sites.
 1.3 15-Oct-2020  jmcneill branches: 1.3.2;
Initialise xhci_softc sc_ios
 1.2 17-Jul-2020  simonb Don't use a reserved value for the USB endian CSR selects and
enable octxhci_uctl_init(). Between these, USB works without
needing a "usb start" from u-boot.

XXX: Note the port power enable goop is still disabled until
we get a GPIO driver.
 1.1 16-Jul-2020  jmcneill Add USB3 support.
 1.3.2.1 03-Apr-2021  thorpej Sync with HEAD.
 1.4.2.1 21-Mar-2021  thorpej Give config_found() the same variadic arguments treatment as
config_search(). This commit only adds the CFARG_EOL sentinel
to the existing config_found() calls. Conversion of config_found_sm_loc()
and config_found_ia() call sites will be in subsequent commits.
 1.5.8.1 04-Aug-2021  thorpej Adapt to CFARGS().
 1.2 17-Jul-2020  simonb Don't use a reserved value for the USB endian CSR selects and
enable octxhci_uctl_init(). Between these, USB works without
needing a "usb start" from u-boot.

XXX: Note the port power enable goop is still disabled until
we get a GPIO driver.
 1.1 16-Jul-2020  jmcneill Add USB3 support.
 1.2 04-Jun-2015  matt branches: 1.2.2; 1.2.18;
minor constification
 1.1 29-Apr-2015  hikaru Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.2.18.2 03-Dec-2017  jdolecek update from HEAD
 1.2.18.1 04-Jun-2015  jdolecek file bootbusvar.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.2.2.2 06-Jun-2015  skrll Sync with HEAD
 1.2.2.1 04-Jun-2015  skrll file bootbusvar.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.2 17-Aug-2020  jmcneill Attach an iobus with octrnm even if using devicetree (there is no
corresponding node for this device in the DT).
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file iobusvar.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file iobusvar.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000
 1.1 29-Apr-2015  hikaru branches: 1.1.2; 1.1.18;
Initial import of Cavium Octeon and Octeon Plus SoC and
specifically Ubiquiti Networks EdgeRouter LITE support.
Currently the ethernet and uart are worked.
This support was contributed by Internet Initiative Japan Inc.
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 29-Apr-2015  jdolecek file mainbusvar.h was added on branch tls-maxphys on 2017-12-03 11:36:27 +0000
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 29-Apr-2015  skrll file mainbusvar.h was added on branch nick-nhusb on 2015-06-06 14:40:01 +0000

RSS XML Feed