History log of /freebsd-current/sys/conf/files.powerpc
Revision Date Author Comments
(<<< Hide modified files)
(Show modified files >>>)
# 76832996 12-Feb-2024 Eric Joyner <erj@FreeBSD.org>

ice_ddp: Update package to 1.3.36.0

This is intended to be used with the upcoming ice 1.39.13-k
driver update, but is still backwards compatible with
previous versions of the driver.

Signed-off-by: Eric Joyner <erj@FreeBSD.org>

MFC after: 3 days
Sponsored by: Intel Corporation


# 7c569caa 19-Sep-2023 Emmanuel Vadot <manu@FreeBSD.org>

iicbus: Move i2c sensors drivers into new sensor subdirectory

No reason that they should live directly under iicbus

Sponsored by: Beckhoff Automation GmbH & Co. KG
Differential Revision: https://reviews.freebsd.org/D41913


# 06589d6e 19-Sep-2023 Emmanuel Vadot <manu@FreeBSD.org>

iicbus: Move ADC drivers into a new adc subfolder

No reason that they should live directly under iicbus

Sponsored by: Beckhoff Automation GmbH & Co. KG
Differential Revision: https://reviews.freebsd.org/D41911


# 22d7dd83 19-Sep-2023 Emmanuel Vadot <manu@FreeBSD.org>

iicbus: Move adm1030 and adt746x to new pwm subdirectory

Those are (mainly) pwm controller so move it under a new subdirectory.

Sponsored by: Beckhoff Automation GmbH & Co. KG
Differential Revision: https://reviews.freebsd.org/D41910


# e04c4b4a 21-Aug-2023 Eric Joyner <erj@FreeBSD.org>

ice_ddp: Update to 1.3.35.0

This is intended to be used with the upcoming updated ice(4) version
1.38.16-k.

Signed-off-by: Eric Joyner <erj@FreeBSD.org>

MFC after: 3 days
Sponsored by: Intel Corporation


# 031beb4e 16-Aug-2023 Warner Losh <imp@FreeBSD.org>

sys: Remove $FreeBSD$: one-line sh pattern

Remove /^\s*#[#!]?\s*\$FreeBSD\$.*$\n/


# a8926207 06-Jul-2023 Mitchell Horne <mhorne@FreeBSD.org>

Consistently provide ffs/fls using builtins

Use of compiler builtin ffs/ctz functions will result in optimized
instruction sequences when possible, and fall back to calling a function
provided by the compiler run-time library. We have slowly shifted our
platforms to take advantage of these builtins in 60645781d613 (arm64),
1c76d3a9fbef (arm), 9e319462a03a (powerpc, partial).

Some platforms still rely on the libkern implementations of these
functions provided by libkern, namely riscv, powerpc (ffs*, flsll), and
i386 (ffsll and flsll). These routines are slow, as they perform a
linear search for the bit in question. Even on platforms lacking
dedicated bit-search instructions, such as riscv, the compiler library
will provide better-optimized routines, e.g. by using binary search.

Consolidate all definitions of these functions (whether currently using
builtins or not) to libkern.h. This should result in equivalent or
better performing routines in all cases.

One wart in all of this is the existing HAVE_INLINE_F*** macros, which
we use in a few places to conditionally avoid the slow libkern routines.
These aren't easily removed in one commit. For now, provide these
defines unconditionally, but marked for removal after subsequent
cleanup.

Removal of the now unused libkern routines will follow in the next
commit.

Reviewed by: dougm, imp (previous version)
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D40698


# d4c78130 24-Apr-2023 Warner Losh <imp@FreeBSD.org>

powerpc: syscalls.c is standard

No need to add it here, much less make it optional on ktr.

Sponsored by: Netflix


# 2a58b312 03-Apr-2023 Martin Matuska <mm@FreeBSD.org>

zfs: merge openzfs/zfs@431083f75

Notable upstream pull request merges:
#12194 Fix short-lived txg caused by autotrim
#13368 ZFS_IOC_COUNT_FILLED does unnecessary txg_wait_synced()
#13392 Implementation of block cloning for ZFS
#13741 SHA2 reworking and API for iterating over multiple implementations
#14282 Sync thread should avoid holding the spa config write lock
when possible
#14283 txg_sync should handle write errors in ZIL
#14359 More adaptive ARC eviction
#14469 Fix NULL pointer dereference in zio_ready()
#14479 zfs redact fails when dnodesize=auto
#14496 improve error message of zfs redact
#14500 Skip memory allocation when compressing holes
#14501 FreeBSD: don't verify recycled vnode for zfs control directory
#14502 partially revert PR 14304 (eee9362a7)
#14509 Fix per-jail zfs.mount_snapshot setting
#14514 Fix data race between zil_commit() and zil_suspend()
#14516 System-wide speculative prefetch limit
#14517 Use rw_tryupgrade() in dmu_bonus_hold_by_dnode()
#14519 Do not hold spa_config in ZIL while blocked on IO
#14523 Move dmu_buf_rele() after dsl_dataset_sync_done()
#14524 Ignore too large stack in case of dsl_deadlist_merge
#14526 Use .section .rodata instead of .rodata on FreeBSD
#14528 ICP: AES-GCM: Refactor gcm_clear_ctx()
#14529 ICP: AES-GCM: Unify gcm_init_ctx() and gmac_init_ctx()
#14532 Handle unexpected errors in zil_lwb_commit() without ASSERT()
#14544 icp: Prevent compilers from optimizing away memset()
in gcm_clear_ctx()
#14546 Revert zfeature_active() to static
#14556 Remove bad kmem_free() oversight from previous zfsdev_state_list
patch
#14563 Optimize the is_l2cacheable functions
#14565 FreeBSD: zfs_znode_alloc: lock the vnode earlier
#14566 FreeBSD: fix false assert in cache_vop_rmdir when replaying ZIL
#14567 spl: Add cmn_err_once() to log a message only on the first call
#14568 Fix incremental receive silently failing for recursive sends
#14569 Restore ASMABI and other Unify work
#14576 Fix detection of IBM Power8 machines (ISA 2.07)
#14577 Better handling for future crypto parameters
#14600 zcommon: Refactor FPU state handling in fletcher4
#14603 Fix prefetching of indirect blocks while destroying
#14633 Fixes in persistent error log
#14639 FreeBSD: Remove extra arc_reduce_target_size() call
#14641 Additional limits on hole reporting
#14649 Drop lying to the compiler in the fletcher4 code
#14652 panic loop when removing slog device
#14653 Update vdev state for spare vdev
#14655 Fix cloning into already dirty dbufs
#14678 Revert "Do not hold spa_config in ZIL while blocked on IO"

Obtained from: OpenZFS
OpenZFS commit: 431083f75bdd3efaee992bdd672625ec7240d252


# 8923de59 13-Feb-2023 Piotr Kubaj <pkubaj@FreeBSD.org>

ice(4): Update to 1.37.7-k

Notable changes include:

- DSCP QoS Support (leveraging support added in
rG9c950139051298831ce19d01ea5fb33ec6ea7f89)
- Improved PFC handling and TC queue assignments (now all remaining
queues are assigned to TC 0 when more than one TC is enabled and the
number of available queues does not evenly divide between them)
- Support for dumping the internal FW state for additional debugging by
Intel support
- Support for allowing "No FEC" to be a valid state for the LESM to
negotiate when using non-standard compliant modules

Also includes various bug fixes and smaller enhancements, too.

Signed-off-by: Eric Joyner <erj@FreeBSD.org>

Reviewed by: erj@
Tested by: Jeff Pieper <jeffrey.pieper@intel.com>
MFC after: 3 days
Relnotes: yes
Sponsored by: Intel Corporation
Differential Revision: https://reviews.freebsd.org/D38109

# 2508da22 24-Jan-2023 Eric Joyner <erj@FreeBSD.org>

ice_ddp: Update package to 1.3.30.0

This updated DDP is intended to be used with the forthcoming ice(4)
driver update to 1.37.7-k. (But it will still work with the current
version.)

Co-authored-by: Piotr Kubaj <pkubaj@FreeBSD.org>
Signed-off-by: Eric Joyner <erj@FreeBSD.org>

MFC after: 1 week
Sponsored by: Intel Corporation

# 8c6e5d8c 07-Sep-2022 Andrew Turner <andrew@FreeBSD.org>

Import an optimized str{n}cmp on arm64

These are from the Arm Optimized Routines and don't use the VFP so are
safe to use in the kernel.

Sponsored by: The FreeBSD Foundation

# d1aefbc0 23-Jun-2022 Martin Matuska <mm@FreeBSD.org>

zfs: fix static module build broken in 1f1e2261e

# 8a13362d 01-Dec-2021 Eric Joyner <erj@FreeBSD.org>

ice(4): Add RDMA Client Interface

This allows the "irdma" driver to communicate with the ice(4)
driver to allow it access to the underlying device's hardware
resources as well as synchronize access to shared resources.

This interface already existed in the standalone out-of-tree
1.34.2 driver; this commit adds and enables it in the in-kernel
driver.

Note:

Adds hack to module Makefile to compile interface/.m files

These are required for the RDMA client interface, but they don't
build as-is like the normal .c files. The source directory doesn't
seem to be included by default, so add lines that specifically
add them as libraries so that ice_rdma.h can be found and the
interface files will compile.

Signed-off-by: Eric Joyner <erj@FreeBSD.org>

MFC after: 1 week
Sponsored by: Intel Corporation
Differential Revision: https://reviews.freebsd.org/D30889

# 56429dae 04-Mar-2022 Eric Joyner <erj@FreeBSD.org>

ice(4): Update to 1.34.2-k

- Adds FW logging support
- Once enabled, this lets the firmware print event and error messages
to the log, increasing the visibility into what the hardware is
doing; this is useful for debugging
- General bug fixes
- Adds inital DCB support to the driver
- Notably, this adds support for DCBX to the driver; now with the
fw_lldp sysctl set to 1, the driver and adapter will adopt a DCBX
configuration sent from a link partner
- Adds statistcs sysctls for priority flow control frames
- Adds new configuration sysctls for DCB-related features: (VLAN) user
priority to TC mapping; ETS bandwidth allocation; priority flow
control
- Remove unused SR-IOV files (until support gets added)

Signed-off-by: Eric Joyner <erj@FreeBSD.org>

Tested by: jeffrey.e.pieper@intel.com
MFC after: 3 days
MFC with: 213e91399b, e438f0a975
Relnotes: yes
Sponsored by: Intel Corporation
Differential Revision: https://reviews.freebsd.org/D34024

# 960ce3f7 20-Feb-2022 Michal Meloun <mmel@FreeBSD.org>

Fix a534b50e245d on powerpc.

MFC with: 1bd3e8ba696633ccd7525030d951b58ade167814

# e438f0a9 01-Dec-2021 Eric Joyner <erj@FreeBSD.org>

ice_ddp: Update to 1.3.27.0

This is intended to be used with forthcoming ice(4) driver version 1.34.2.

Signed-off-by: Eric Joyner <erj@FreeBSD.org>

Sponsored by: Intel Corporation

# a0f3abb0 20-Jan-2022 Piotr Kubaj <pkubaj@FreeBSD.org>

powerpc: enable ice in GENERIC64LE

Approved by: erj
Differential Revision: https://reviews.freebsd.org/D33974

# c583b025 23-Dec-2021 Brandon Bergren <bdragon@FreeBSD.org>

[PowerPC] PowerMac timebase sync for G4

Summary:
Disable timebase on (some) AIM platforms (tested on PowerMac G4) prior
to synchronization.

Some platforms use a GPIO to enable and disable timebase, while others
use a platform function.

This mirrors 0d69f00b on mpc85xx.

Todo:
* Implement various G5 timebase controls.
* Print out platform code on unknown G5s so we can collect it.
* Change API to be give/take pairs like Linux does so it's possible to
do a software sync protocol.

Reviewed By: #powerpc, jhibbits
Subscribers: mikael, markmi_dsl-only.net, luporl, alfredo
Tags: #powerpc
Differential Revision: https://reviews.freebsd.org/D29136

# ecbbe831 24-Nov-2021 Mark Johnston <markj@FreeBSD.org>

netinet: Deduplicate most in_cksum() implementations

in_cksum() and related routines are implemented separately for each
platform, but only i386 and arm have optimized versions. Other
platforms' copies of in_cksum.c are identical except for style
differences and support for big-endian CPUs.

Deduplicate the implementations for the rest of the platforms. This
will make it easier to implement in_cksum() for unmapped mbufs. On arm
and i386, define HAVE_MD_IN_CKSUM to mean that the MI implementation is
not to be compiled.

No functional change intended.

Reviewed by: kp, glebius
MFC after: 1 week
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D33095

# 451756d1 23-Aug-2021 Mateusz Guzik <mjg@FreeBSD.org>

powerpc: retire bcmp

Unused since ba96f37758412151 ("Use __builtin for various mem* and b* (e.g. bzero)
routines.")

Reviewed by: jhibbits
Sponsored by: Rubicon Communications, LLC ("Netgate")

# 24042910 19-May-2021 Marcin Wojtas <mw@FreeBSD.org>

Rename ofwpci.c to ofw_pcib.c

It's a class0 driver that implements some pcib methods and creates
a pci bus as its children.
The "ofw_pci" name will be used by a new driver that will be a subclass
of the pci bus.
No functional changes intended.

Submitted by: Kornel Duleba <mindal@semihalf.com>
Reviewed by: andrew
Obtained from: Semihalf
Sponsored by: Alstom Group
Differential Revision: https://reviews.freebsd.org/D30226

# 16e549eb 05-Apr-2021 Justin Hibbits <jhibbits@FreeBSD.org>

Merge the QorIQ GPIO drivers between arm and powerpc

Summary:
They're nearly identical, so don't use two copies. Merge the newer
driver into the older one, and move it to a common location.

Add the Semihalf and associated copyrights in addition to mine, since
it's a non-trivial amount of code merged.

Reviewed By: mw
Differential Revision: https://reviews.freebsd.org/D29520

# af366d35 08-Feb-2021 Mateusz Guzik <mjg@FreeBSD.org>

amd64: implement strlen in assembly

The C variant in libkern performs excessive branching to find the
non-zero byte instead of using the bsfq instruction. The same code
patched to use it is still slower than the routine implemented here
as the compiler keeps neglecting to perform certain optimizations
(like using leaq).

On top of that the routine can is a starting point for copyinstr
which operates on words instead of bytes.

Tested with glibc test suite.

Sample results (calls/s):

Haswell:
$(perl -e "print 'A' x 3"):
stock: 211198039
patched:338626619
asm: 465609618

$(perl -e "print 'A' x 100"):
stock: 83151997
patched: 98285919
asm: 120719888

AMD EPYC 7R32:
$(perl -e "print 'A' x 3"):
stock: 282523617
asm: 491498172

$(perl -e "print 'A' x 100"):
stock: 114857172
asm: 112082057

# 2e58ec01 18-Nov-2020 Mark Johnston <markj@FreeBSD.org>

Move kern_clocksource.c to sys/conf/files

Sponsored by: The FreeBSD Foundation

# 8b2133d4 06-Nov-2020 Leandro Lupori <luporl@FreeBSD.org>

Fix powerpc and LINT builds

Fix build errors introduced by r367417 and r367390:

- Guard label reached only by powerpc64
- Guard vm_reserv_level_iffullpop call, that is not defined on powerpc
variants that don't support superpages
- Add missing hwpmc file, for when hwpmc is built into kernel

# b75abea4 22-Sep-2020 Brandon Bergren <bdragon@FreeBSD.org>

[PowerPC64LE] Set up powerpc.powerpc64le architecture

This is the initial set up for PowerPC64LE.

The current plan is for this arch to remain experimental for FreeBSD 13.

This started as a weekend learning project for me and kinda snowballed from
there.

(More to follow momentarily.)

Reviewed by: imp (earlier version), emaste
Sponsored by: Tag1 Consulting, Inc.
Differential Revision: https://reviews.freebsd.org/D26399

# b4a7ce06 09-Jun-2020 Eric Joyner <erj@FreeBSD.org>

ixl(4): Add FW recovery mode support and other things

Update the iflib version of ixl driver based on the OOT version ixl-1.11.29.

Major changes:

- Extract iflib specific functions from ixl_pf_main.c to ixl_pf_iflib.c
to simplify code sharing between legacy and iflib version of driver

- Add support for most recent FW API version (1.10), which extends FW
LLDP Agent control by user to X722 devices

- Improve handling of device global reset

- Add support for the FW recovery mode

- Use virtchnl function to validate virtual channel messages instead of
using separate checks

- Fix MAC/VLAN filters accounting

Submitted by: Krzysztof Galazka <krzysztof.galazka@intel.com>
Reviewed by: erj@
Tested by: Jeffrey Pieper <jeffrey.e.pieper@intel.com>
MFC after: 1 week
Relnotes: yes
Sponsored by: Intel Corporation
Differential Revision: https://reviews.freebsd.org/D24564

# d3111144 05-Jun-2020 Justin Hibbits <jhibbits@FreeBSD.org>

powerpc: Use IFUNCs for copyin/copyout/etc

Summary:
Radix on AIM, and all of Book-E (currently), can do direct addressing of
user space, instead of needing to map user addresses into kernel space.
Take advantage of this to optimize the copy(9) functions for this
behavior, and avoid effectively NOP translations.

Test Plan: Tested on powerpcspe, powerpc64/booke, powerpc64/AIM

Reviewed by: bdragon
Differential Revision: https://reviews.freebsd.org/D25129

# 45b69dd6 26-May-2020 Justin Hibbits <jhibbits@FreeBSD.org>

powerpc/mmu: Convert PowerPC pmap drivers to ifunc from kobj

With IFUNC support in the kernel, we can finally get rid of our poor-man's
ifunc for pmap, utilizing kobj. Since moea64 uses a second tier kobj as
well, for its own private methods, this adds a second pmap install function
(pmap_mmu_init()) to perform pmap 'post-install pre-bootstrap'
initialization, before the IFUNCs get initialized.

Reviewed by: bdragon

# 852c303b 25-May-2020 Conrad Meyer <cem@FreeBSD.org>

copystr(9): Move to deprecate (attempt #2)

This reapplies logical r360944 and r360946 (reverting r360955), with fixed
copystr() stand-in replacement macro. Eventually the goal is to convert
consumers and kill the macro, but for a first step it helps if the macro is
correct.

Prior commit message:

Unlike the other copy*() functions, it does not serve to copy from one
address space to another or protect against potential faults. It's just
an older incarnation of the now-more-common strlcpy().

Add a coccinelle script to tools/ which can be used to mechanically
convert existing instances where replacement with strlcpy is trivial.
In the two cases which matched, fuse_vfsops.c and union_vfsops.c, the
code was further refactored manually to simplify.

Replace the declaration of copystr() in systm.h with a small macro
wrapper around strlcpy (with correction from brooks@ -- thanks).

Remove N redundant MI implementations of copystr. For MIPS, this
entailed inlining the assembler copystr into the only consumer,
copyinstr, and making the latter a leaf function.

Reviewed by: jhb (earlier version)
Discussed with: brooks (thanks!)
Differential Revision: https://reviews.freebsd.org/D24672

# 051fc58c 11-May-2020 Conrad Meyer <cem@FreeBSD.org>

Revert r360944 and r360946 until reported issues can be resolved

Reported by: cy

# 9cfae28e 11-May-2020 Conrad Meyer <cem@FreeBSD.org>

Remove deleted files from the build

Fix build break introduced in r360944.

Reported by: kevans

# 0e00c709 11-May-2020 John Baldwin <jhb@FreeBSD.org>

Remove support for DES and Triple DES from OCF.

It no longer has any in-kernel consumers via OCF. smbfs still uses
single DES directly, so sys/crypto/des remains for that use case.

Reviewed by: cem
Relnotes: yes
Sponsored by: Chelsio Communications
Differential Revision: https://reviews.freebsd.org/D24773

# 32075647 11-May-2020 John Baldwin <jhb@FreeBSD.org>

Remove support for the Blowfish algorithm from OCF.

It no longer has any in-kernel consumers.

Reviewed by: cem
Relnotes: yes
Sponsored by: Chelsio Communications
Differential Revision: https://reviews.freebsd.org/D24772

# 65bbba25 10-May-2020 Justin Hibbits <jhibbits@FreeBSD.org>

powerpc64: Implement Radix MMU for POWER9 CPUs

Summary:
POWER9 supports two MMU formats: traditional hashed page tables, and Radix
page tables, similar to what's presesnt on most other architectures. The
PowerISA also specifies a process table -- a table of page table pointers--
which on the POWER9 is only available with the Radix MMU, so we can take
advantage of it with the Radix MMU driver.

Written by Matt Macy.

Differential Revision: https://reviews.freebsd.org/D19516

# ccb1ebe0 03-Apr-2020 Justin Hibbits <jhibbits@FreeBSD.org>

powerpc/amigaone: Add CPLD driver for AmigaOne A1222 "Tabor"

Like the X5000, the main CPLD on the A1222 is the communication medium
between the CPU and the GPIO CPLD. It provides a mailbox communication
feature, along with dual-port RAM accessible from both the CPU and GPIO
CPLD, and 3 fan speed reporting registers.

# c5568ba0 11-Mar-2020 Leandro Lupori <luporl@FreeBSD.org>

Enable ixl device on PowerPC64

The ixl driver now works on PowerPC64 and may be compiled in-kernel and
as a module.

Reviewed by: alfredo, erj
Sponsored by: Eldorado Research Institute (eldorado.org.br)
Differential Revision: https://reviews.freebsd.org/D23974

# d8c51c6f 05-Mar-2020 Leandro Lupori <luporl@FreeBSD.org>

[aacraid] Port driver to big-endian

Port aacraid driver to big-endian (BE) hosts.

The immediate goal of this change is to make it possible to use the
aacraid driver on PowerPC64 machines that have Adaptec Series 8 SAS
controllers.

Adapters supported by this driver expect FIB contents in little-endian
(LE) byte order. All FIBs have a fixed header part as well as a data
part that depends on the command being issued to the controller.

In this way, on BE hosts, the FIB header and all FIB data structures
used in aacraid.c and aacraid_cam.c need to be converted to LE before
being sent to the adapter and converted to BE when coming from it.

The functions to convert each struct are on aacraid_endian.c.
For little-endian (LE) targets, they are macros that expand
to nothing.
In some cases, when only a few fields of a large structure are used,
the fields are converted inline, by the code using them.

PR: 237463
Reviewed by: jhibbits
Sponsored by: Eldorado Research Institute (eldorado.org.br)
Differential Revision: https://reviews.freebsd.org/D23887

# bb9c7e26 02-Feb-2020 Warner Losh <imp@FreeBSD.org>

Move font.h generation to conf/files from conf/files.*

Use ${SRCTOP} instead of /usr/share.
Prefer to depend on option sc_dflt_fnt instead of sc.
gc the 4 otherwise identical instances in the tree.
Platforms that don't need this won't included it.

# 2a05eb9f 19-Jan-2020 Justin Hibbits <jhibbits@FreeBSD.org>

PowerPC: Add CPLD driver for AmigaOne X5000

Summary:
The CPLD is the communications medium between the CPU and the XMOS
"Xena" event coprocessor. It provides a mailbox communication feature,
along with dual-port RAM to be used between the CPU and XMOS. Also, it
provides basic board stats as well, such as PCIe presence, JTAG signals,
and CPU fan speed reporting (in revolutions per second). Only fan speed
reading is handled, as a sysctl.

Reviewed by: bdragon
Differential Revision: https://reviews.freebsd.org/D23136

# 9aafc7c0 02-Jan-2020 Brandon Bergren <bdragon@FreeBSD.org>

[PowerPC] [MIPS] Implement 32-bit kernel emulation of atomic64 operations

This is a lock-based emulation of 64-bit atomics for kernel use, split off
from an earlier patch by jhibbits.

This is needed to unblock future improvements that reduce the need for
locking on 64-bit platforms by using atomic updates.

The implementation allows for future integration with userland atomic64,
but as that implies going through sysarch for every use, the current
status quo of userland doing its own locking may be for the best.

Submitted by: jhibbits (original patch), kevans (mips bits)
Reviewed by: jhibbits, jeff, kevans
Differential Revision: https://reviews.freebsd.org/D22976

# 1c8102d8 20-Dec-2019 Justin Hibbits <jhibbits@FreeBSD.org>

powerpc: Only build mpc85xx i2c driver for mpc85xx

No need to build it for every other platform.

# a16111e6 09-Dec-2019 Leandro Lupori <luporl@FreeBSD.org>

[PPC64] Enable opal console use as a GDB DBGPORT

This change makes it possible to use OPAL console as a GDB debug port.

Similar to uart and uart_phyp debug ports, it has to be enabled by
setting the hw.uart.dbgport variable to the serial console node
of the device tree.

Reviewed by: jhibbits
Differential Revision: https://reviews.freebsd.org/D22649

# 9e319462 07-Dec-2019 Justin Hibbits <jhibbits@FreeBSD.org>

powerpc: Use builtins for fls/flsl

Summary:
There's no need to use the fallback fls() and flsl() libkern functions
when the PowerISA includes instructions that already do the bulk of the
work. Take advantage of this through the GCC builtins __builtin_clz()
and __builtin_clzl().

Reviewed by: luporl
Differential Revision: https://reviews.freebsd.org/D22340

# 4ceaf951 25-Nov-2019 Leandro Lupori <luporl@FreeBSD.org>

[PPC64] Enable phyp vty use as a GDB DBGPORT

This change makes it possible to use a POWER Hypervisor virtual
terminal device (phyp vty) as a GDB debug port.

Similar to the uart debug port, it has to be enabled by setting
the hw.uart_phyp.dbgport variable to the vty node of the device
tree.

Reviewed by: jhibbits
Differential Revision: https://reviews.freebsd.org/D22205

# 34ed25a8 15-Oct-2019 Justin Hibbits <jhibbits@FreeBSD.org>

powerpc: Add AmigaOne platform, a subclass of MPC85xx

Summary:
The AmigaOne platform, encompassing the X5000 and A1222 at this time, is
based on the mpc85xx platform, but includes some things not listed in
the device tree. Some custom devices, like CPLD, could be added to the
device tree with an overlay, or other means. However, some cannot
easily be done, such as the power button interrupt.

The directory will also become a location to add AmigaOne platform drivers,
such as the aforementioned CPLD, and its children.

Reviewed by: bdragon
Differential Revision: https://reviews.freebsd.org/D21829

# 0ecc478b 14-Oct-2019 Leandro Lupori <luporl@FreeBSD.org>

[PPC64] Initial kernel minidump implementation

Based on POWER9BSD implementation, with all POWER9 specific code removed and
addition of new methods in PPC64 MMU interface, to isolate platform specific
code. Currently, the new methods are implemented on pseries and PowerNV
(D21643).

Reviewed by: jhibbits
Differential Revision: https://reviews.freebsd.org/D21551

# d0c0856f 10-Oct-2019 Andriy Gapon <avg@FreeBSD.org>

emulate illumos membar_producer with atomic_thread_fence_rel

membar_producer is supposed to be a store-store barrier.
Also, in the code that FreeBSD has ported from illumos membar_producer
is used only with regular stores to regular memory (with respect to
caching).

We do not have an MI primitive for the store-store barrier, so
atomic_thread_fence_rel is the closest we have as it provides
(load | store) -> store barrier.

Previously, membar_producer was an empty function call on all 32-bit
arm-s, 32-bit powerpc, riscv and all mips variants. I think that it was
inadequate.
On other platforms, such as amd64, arm64, i386, powerpc64, sparc64,
membar_producer was implemented using stronger primitives than required
for a store-store barrier with respect to regular memory access.
For example, it used sfence on amd64 and lock-ed nop in i386 (despite TSO).
On powerpc64 we now use recommended lwsync instead of eieio.
On sparc64 FreeBSD uses TSO mode.
On arm64/aarch64 we now use dmb sy instead of dmb ish. Not sure if this
is an improvement, actually.

After this change we can drop opensolaris_atomic.S for aarch64, amd64,
powerpc64 and sparc64 as all required atomic operations have either
direct or light-weight mapping to FreeBSD native atomic operations.

Discussed with: kib
MFC after: 4 weeks

# 1c56203b 13-Sep-2019 Justin Hibbits <jhibbits@FreeBSD.org>

powerpc64/powernv: Add opal NVRAM driver for PowerNV systems

Add a very basic NVRAM driver for OPAL which can be used by the IBM
powerpc-utils nvram utility, not to be confused with the base nvram utility,
which only operates on powermac_nvram.

The IBM utility handles all partitions itself, treating the nvram device as
a plain store.

An alternative would be to manage partitions in the kernel, and augment the
base nvram utility to deal with different backing stores, but that
complicates the driver significantly. Instead, present the same interface
IBM's utlity expects, and we get the usage for free.

Tested by: bdragon

# f5a95d9a 24-Jun-2019 Warner Losh <imp@FreeBSD.org>

Remove NAND and NANDFS support

NANDFS has been broken for years. Remove it. The NAND drivers that
remain are for ancient parts that are no longer relevant. They are
polled, have terrible performance and just for ancient arm
hardware. NAND parts have evolved significantly from this early work
and little to none of it would be relevant should someone need to
update to support raw nand. This code has been off by default for
years and has violated the vnode protocol leading to panics since it
was committed.

Numerous posts to arch@ and other locations have found no actual users
for this software.

Relnotes: Yes
No Objection From: arch@
Differential Revision: https://reviews.freebsd.org/D20745

# c363b16c 20-Jun-2019 Conrad Meyer <cem@FreeBSD.org>

sys: Remove DEV_RANDOM device option

Remove 'device random' from kernel configurations that reference it (most).
Replace perhaps mistaken 'nodevice random' in two MIPS configs with 'options
RANDOM_LOADABLE' instead. Document removal in UPDATING; update NOTES and
random.4.

Reviewed by: delphij, markm (previous version)
Approved by: secteam(delphij)
Differential Revision: https://reviews.freebsd.org/D19918

# 5ca5dfe9 31-May-2019 Conrad Meyer <cem@FreeBSD.org>

random(4): Fix RANDOM_LOADABLE build

I introduced an obvious compiler error in r346282, so this change fixes
that.

Unfortunately, RANDOM_LOADABLE isn't covered by our existing tinderbox, and
it seems like there were existing latent linking problems. I believe these
were introduced on accident in r338324 during reduction of the boolean
expression(s) adjacent to randomdev.c and hash.c. It seems the
RANDOM_LOADABLE build breakage has gone unnoticed for nine months.

This change correctly annotates randomdev.c and hash.c with !random_loadable
to match the pre-r338324 logic; and additionally updates the HWRNG drivers
in MD 'files.*', which depend on random_device symbols, with
!random_loadable (it is invalid for the kernel to depend on symbols from a
module).

(The expression for both randomdev.c and hash.c was the same, prior to
r338324: "optional random random_yarrow | random !random_yarrow
!random_loadable". I.e., "random && (yarrow || !loadable)." When Yarrow
was removed ("yarrow := False"), the expression was incorrectly reduced to
"optional random" when it should have retained "random && !loadable".)

Additionally, I discovered that virtio_random was missing a MODULE_DEPEND on
random_device, which breaks kld load/link of the driver on RANDOM_LOADABLE
kernels. Address that issue as well.

PR: 238223
Reported by: Eir Nym <eirnym AT gmail.com>
Reviewed by: delphij, markm
Approved by: secteam(delphij)
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D20466

# 9e774e53 17-May-2019 Brooks Davis <brooks@FreeBSD.org>

FCP-101: Remove bm(4).

Relnotes: yes
FCP: https://github.com/freebsd/fcp/blob/master/fcp-0101.md
Reviewed by: jhb, imp
Differential Revision: https://reviews.freebsd.org/D20230

# 50886464 29-Apr-2019 Leandro Lupori <luporl@FreeBSD.org>

[PPC64] Turn opal_flash.c into a device

This change makes it easier to enable/disable the inclusion of
OPAL flash in the kernel.

Reviewed by: jhibbits
Differential Revision: https://reviews.freebsd.org/D20098

# 8af4cc4d 22-Mar-2019 Justin Hibbits <jhibbits@FreeBSD.org>

powernv: Add Hypervisor Maintenance Interrupt handler

Attempting to build www/firefox on POWER9 resulted in a HMI exception being
thrown, a fatal trap currently. This is typically caused by timer facility
errors, but examination of the Hypervisor Maintenance Exception Register
(HMER) yielded only that an exception had recovered, with no information of
the actual exception cause.

When an HMI occurs, OPAL_HANDLE_HMI or OPAL_HANDLE_HMI2 must be called to
handle the exception at the firmware level. If the exception is handled, we
can continue.

This adds only the preliminary handler, enough to prevent package building
from panicking. An enhancement in the future is to use the flags returned
by OPAL_HANDLE_HMI2 to print more useful error messages, and log maintenance
events.

Reviewed by: luporl
MFC after: 1 week
Differential Revision: https://reviews.freebsd.org/D19634

# bc94b700 22-Mar-2019 Justin Hibbits <jhibbits@FreeBSD.org>

powerpc: Re-merge isa3 HPT with moea64 native HPT

r345402 fixed the bug that led to the split of the ISA 3.0 HPT handling from
the existing manager. The cause of the bug was gcc moving the register
holding VPN to a different register (not r0), which triggered bizarre
behaviors. With the fix, things work, so they can be re-merged. No
performance lost with the merge.

# 6775dfdf 28-Feb-2019 Justin Hibbits <jhibbits@FreeBSD.org>

powerpc/powernv: Add OPAL flash device driver

Firmware needed by petitboot, for example, GPU firmware, can be installed to
a partition in the flash filesystem. This driver exposes the full flash
given by the device tree, letting the user manage firmware, etc, from
FreeBSD.

To use the partitions provided by the flash module, the fdt_slicer module is
needed, but the module isn't needed for raw access, so there's no direct
dependency link in here.

MFC after: 2 weeks

# dac618a6 28-Feb-2019 Justin Hibbits <jhibbits@FreeBSD.org>

powerpc/powernv: Add asynchronous token management for powernv

The OPAL firmware only supports a finite number of in-flight asynchronous
operations. Rather than have each subsystem try to manage its own, use a
central management service to hand out tokens.

More work can be done to improve asynchronous behavior, such as funneling
things through a future OPAL heartbeat handler, but capabilities will be
added as needed.

Augment the existing consumers (i2c and sensors) to use this new API.

MFC after: 4 weeks

# 61ebc359 21-Feb-2019 Bruce Evans <bde@FreeBSD.org>

Move scterm_teken.c from 6 MD files lists to the MI files list so that it
is easier to configure. It is MI, unlike some of the other syscons files
already in the MI list.

Move scvtb.c similarly. It is needed whenever sc is configured, and is
more MI than most of the files already in the MI list.

This only changes the combined list for arm64 and mips. These arches
already cannot build sc or even NOTES.

# d49fc192 01-Feb-2019 Justin Hibbits <jhibbits@FreeBSD.org>

powerpc/powernv: Add a driver for the POWER9 XIVE interrupt controller

The XIVE (External Interrupt Virtualization Engine) is a new interrupt
controller present in IBM's POWER9 processor. It's a very powerful,
very complex device using queues and shared memory to improve interrupt
dispatch performance in a virtualized environment.

This yields a ~10% performance improvment over the XICS emulation mode,
measured in both buildworld, and 'dd' from nvme to /dev/null.

Currently, this only supports native access.

MFC after: 1 month

# 8763f217 14-Dec-2018 Justin Hibbits <jhibbits@FreeBSD.org>

powerpcspe: Don't require FPU_EMU for powerpcspe IEEE emulation

Build only the necessary fpu_emu files for supporting the SPE IEEE-754
emulation exception handler.

MFC after: 1 week

# a8e3f99e 27-Sep-2018 Mateusz Guzik <mjg@FreeBSD.org>

amd64: implement memcmp in assembly

Both the in-kernel C variant and libc asm variant have very poor performance.
The former compiles to a single byte comparison loop, which breaks down even
for small sizes. The latter uses rep cmpsq/b which turn out to have very poor
throughput and are slower than a hand-coded 32-byte comparison loop.

Depending on size this is about 3-4 times faster than the current routines.

Reviewed by: kib
Approved by: re (gjb)
Differential Revision: https://reviews.freebsd.org/D17328

# b14959da 16-Aug-2018 Justin Hibbits <jhibbits@FreeBSD.org>

random: Add PowerPC 'darn' instruction entropy source

Summary:
PowerISA 3.0 adds a 'darn' instruction to "deliver a random number". This
driver was modeled after (rather, copied and gutted of) the Ivy Bridge
rdrand driver.

This uses the "Conditional Random Number" behavior to remove input bias.

From the ISA reference the 'darn' instruction, and the random number
generator backing it, conforms to the NIST SP800-90B and SP800-90C
standards, compliant to the extent possible at the time the hardware was
designed, and guarantees a minimum 0.5 bits of entropy per bit returned.

Reviewed By: markm, secteam (delphij)
Approved by: secteam (delphij)
Differential Revision: https://reviews.freebsd.org/D16552

# 0bf0bb83 25-Jul-2018 Justin Hibbits <jhibbits@FreeBSD.org>

Support building IPMI as a module on powerpc64

This still only supports IPMI via OPAL on powerpc64, but now it can be tested
with a GENERIC kernel.

# 3ddc2cde 24-Jul-2018 Breno Leitao <leitao@FreeBSD.org>

ofw: Load initrd file

This is an OFW initrd module that would load the initrd from device tree
parameters and give the to the md driver.

With this patch, it is possible to pass a rootfs image through kexec in PowerNV
mode (powerpc64). In order to user it, you should set the MD_ROOT_MEM option in
your kernel configuration.

Reviewed by: jhibbits
Approved by: jhibbits (mentor)
Differential Revision: https://reviews.freebsd.org/D15705

# b99540b6 21-Jun-2018 Justin Hibbits <jhibbits@FreeBSD.org>

Add the rest of the files for r335481

Missed hooking PMCR cpufreq(4) to the build, and adding the SPR to the header.

# ebf95d96 14-Jun-2018 Justin Hibbits <jhibbits@FreeBSD.org>

Split the PowerISA 3.0 HPT implementation from historic

PowerISA 3.0 makes several changes to not only the format of the HPT but
also the behavior surrounding it. For instance, TLBIE no longer requires
serialization. Removing this lock cuts buildworld time in half on a
18-core/72-thread POWER9 system, demonstrating that this lock is highly
contended on such a system.

There was odd behavior observed trying to make this change in a
backwards-compatible manner in moea64_native.c, so the best option was to
fully split it, and largely revert the original changes adding POWER9
support to the original file.

Suggested by: nwhitehorn

# 1a3eaf6c 21-May-2018 Justin Hibbits <jhibbits@FreeBSD.org>

Add an IPMI attachment for PowerNV systems

IPMI access on PowerNV systems is done through the OPAL firmware. This adds a
simple attachment for communicating with the FSP/BMC on these machines. This
has been tested on a Talos POWER9 workstation, only in the bootup phase, noting
the successful attachment messages:

...
ipmi0: IPMI device rev. 0, firmware rev. 2.00, version 2.0, device support mask 0
ipmi0: Number of channels 2
...

The ipmi device has not been added to GENERIC64, but may be after further
testing. It may also eventually be added to the ipmi module at that point.

# 9c6ba29d 21-May-2018 Justin Hibbits <jhibbits@FreeBSD.org>

Basic OPAL sensor support for POWER9 platforms

Summary:
PowerNV architectures (in the test case POWER9) export sensors via the device
tree, which are accessed via OPAL calls. This adds sysctl nodes for each
device in a generic fashion. New sysctl nodes are:

dev.opal_sensor.N.sensor
dev.opal_sensor.N.sensor_min
dev.opal_sensor.N.sensor_max
dev.opal_sensor.N.type
dev.opal_sensor.N.label

These are rooted at a parent attachment under opal, called opalsens. This does
not add support for the "sensor groups" defined in the device tree.

Reviewed by: breno.leitao_gmail.com
Differential Revision: https://reviews.freebsd.org/D15362

# baaa3c4d 09-May-2018 Warner Losh <imp@FreeBSD.org>

Simplify things a little

Rather than include a copy for memmove to call bcopy to call memcpy
(which handles overlapping copies), make memmove a strong reference to
memcpy to save the two calls.

Differential Revision: https://reviews.freebsd.org/D15374

# 5aa07b05 09-May-2018 Warner Losh <imp@FreeBSD.org>

Move MI-ish bcopy routine to libkern

riscv and powerpc have nearly identical bcopy.c that's
supposed to be mostly MI. Move it to the MI libkern.

Differential Revision: https://reviews.freebsd.org/D15374

# 9c11d8d4 17-Apr-2018 Brooks Davis <brooks@FreeBSD.org>

Remove the unused fuwintr() and suiwintr() functions.

Half of implementations always failed (returned (-1)) and they were
previously used in only one place.

Reviewed by: kib, andrew
Obtained from: CheriBSD
Sponsored by: DARPA, AFRL
Differential Revision: https://reviews.freebsd.org/D15102

# 98b158d4 27-Mar-2018 Justin Hibbits <jhibbits@FreeBSD.org>

Fix another optional standard. Build openpic_ofw again.

# d9093074 15-Mar-2018 Wojciech Macek <wma@FreeBSD.org>

Reverting r330925 for now

# 7c95bf1e 14-Mar-2018 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Fix fat-fingering ("optional standard") and move all the OF code to
being marked "standard", which is less confusing than having it conditional
on AIM CPUs here, and then picked up through options FDT from conf/files
on Book-E.

Request by: jhibbits

# 94f513c8 14-Mar-2018 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

The expression (aim | fdt) is always true on PowerPC. The last PowerPC
platform that can run without a device tree (PS3) still uses the OF_*()
functions to check if one exists and OF_* is used unconditionally in
core parts of the system like powerpc/machdep.c. Reflect this reality
in files.powerpc, for example by changing occurrences of aim | fdt to
standard.

# 22eedd96 14-Mar-2018 Wojciech Macek <wma@FreeBSD.org>

PowerNV: Fix I2C to compile if FDT is disabled

Submitted by: Wojciech Macek <wma@semihalf.com>
Obtained from: Semihalf
Sponsored by: IBM, QCM Technologies

# 4ffd72e3 01-Mar-2018 Wojciech Macek <wma@FreeBSD.org>

PowerNV: Initial support for OPAL I2C transfers

Add I2C OPAL driver and a set of dummy-ones to allow
all I2C things on Power8 to attach.

TODO: better async token management

Submitted by: Wojciech Macek <wma@semihalf.com>
Obtained from: Semihalf
Sponsored by: IBM, QCM Technologies

# 6d13fd63 21-Feb-2018 Wojciech Macek <wma@FreeBSD.org>

PowerNV: Put processor to power-save state in idle thread

When processor enters power-save state it releases resources shared with other
cpu threads which makes other cores working much faster.

This patch also implements saving and restoring registers that might get
corrupted in power-save state.

Submitted by: Patryk Duda <pdk@semihalf.com>
Obtained from: Semihalf
Reviewed by: jhibbits, nwhitehorn, wma
Sponsored by: IBM, QCM Technologies
Differential revision: https://reviews.freebsd.org/D14330

# ed03d62a 12-Jan-2018 Justin Hibbits <jhibbits@FreeBSD.org>

Remove fdt fixups for powerpc, they are no longer needed.

If a fixup really is needed, it should be fixed in u-boot, not in FreeBSD.

Suggested by: nwhitehorn

# e9f96ff4 12-Jan-2018 Justin Hibbits <jhibbits@FreeBSD.org>

Enable L2 cache on supported PowerQUICC and QorIQ platforms

Some PowerQUICC and QorIQ platforms have a L2 cache managed via the
memory-mapped configuration registers, and appear as a node in the device
tree. This adds basic support to enable the cache.

# ac9b4325 12-Jan-2018 Wojciech Macek <wma@FreeBSD.org>

PowerNV: initial support for PCIe host controller

Provide initial support for PCIe host controller as
well as for IOMMU mapping. This commit allows proper
bus enumeration, but does not guarantee DMA operations
are working.

Created by: Nathan Whitehorn <nwhitehorn@freebsd.org>
Submitted by: Wojciech Macek <wma@semihalf.com>
Sponsored by: FreeBSD Foundation

# fb3855e0 11-Jan-2018 Wojciech Macek <wma@FreeBSD.org>

PowerNV: initial support for OPAL

OPAL is a dedicated firmware acting as a hypervisor.
Add generic functions to provide all access.

Created by: Nathan Whitehorn <nw@freebsd.org>
Submitted by: Wojciech Macek <wma@freebsd.org>

# 2ad33187 28-Dec-2017 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Remove ELF note for Open Firmware. It is marked optional in a single 1996
draft of a never-finalized standard (CHRP) and is irrelevant in practice
on FreeBSD since we load the kernel with loader(8) on Open Firmware
platforms anyway. Moreover, loader(8), which is directly loaded by Open
Firmware, has never had an equivalent note.

MFC after: 2 weeks

# 809cd50f 04-Nov-2017 Justin Hibbits <jhibbits@FreeBSD.org>

Add Freescale QorIQ SATA controller support.

The Freescale SATA controller has many similarities to AHCI controllers, so
this driver is a heavily modified AHCI driver. Currently it seems to only
do SATA 1.0 speeds (~100-150MB/s), so there is still room for improvement.

Still to be done:
* Address erratum SATA-A-006187 -- Spread Spectrum Support (intermittent
non-recoverable transient data integrity error seen when SSC enabled).
* Linux doesn't read the log page as it hangs on the P1022. See if that's
applicable to this, and address accordingly.
* Try to determine what's holding back performance, and address it.

MFC after: 3 weeks
Differential Revision: https://reviews.freebsd.org/D6071

# d99b73d8 20-Jul-2017 Justin Hibbits <jhibbits@FreeBSD.org>

Compile the atomic64 emulation for powerpcspe

With this, ZFS builds for and runs (not quite stablely) on powerpcspe.

# 452adeee 20-Jul-2017 Justin Hibbits <jhibbits@FreeBSD.org>

Add cpufreq support for P1022 and MPC8536

P1022 and MPC8536 include a 'jog' feature for clock control
(jog being a slower form of run mode). This is done by changing the
PLL multiplier, and cannot be done if any core is in doze or sleep mode.

# d139c624 01-Apr-2017 Justin Hibbits <jhibbits@FreeBSD.org>

Add Freescale eSPI driver found on QorIQ SoCs

# d9720179 19-Feb-2017 Justin Hibbits <jhibbits@FreeBSD.org>

Add a driver for the RouterBoard RB800 User LED

This may work on other RouterBoard PPC platforms, but I don't have any to test
with.

# fcf59617 06-Feb-2017 Andrey V. Elsukov <ae@FreeBSD.org>

Merge projects/ipsec into head/.

Small summary
-------------

o Almost all IPsec releated code was moved into sys/netipsec.
o New kernel modules added: ipsec.ko and tcpmd5.ko. New kernel
option IPSEC_SUPPORT added. It enables support for loading
and unloading of ipsec.ko and tcpmd5.ko kernel modules.
o IPSEC_NAT_T option was removed. Now NAT-T support is enabled by
default. The UDP_ENCAP_ESPINUDP_NON_IKE encapsulation type
support was removed. Added TCP/UDP checksum handling for
inbound packets that were decapsulated by transport mode SAs.
setkey(8) modified to show run-time NAT-T configuration of SA.
o New network pseudo interface if_ipsec(4) added. For now it is
build as part of ipsec.ko module (or with IPSEC kernel).
It implements IPsec virtual tunnels to create route-based VPNs.
o The network stack now invokes IPsec functions using special
methods. The only one header file <netipsec/ipsec_support.h>
should be included to declare all the needed things to work
with IPsec.
o All IPsec protocols handlers (ESP/AH/IPCOMP protosw) were removed.
Now these protocols are handled directly via IPsec methods.
o TCP_SIGNATURE support was reworked to be more close to RFC.
o PF_KEY SADB was reworked:
- now all security associations stored in the single SPI namespace,
and all SAs MUST have unique SPI.
- several hash tables added to speed up lookups in SADB.
- SADB now uses rmlock to protect access, and concurrent threads
can do SA lookups in the same time.
- many PF_KEY message handlers were reworked to reflect changes
in SADB.
- SADB_UPDATE message was extended to support new PF_KEY headers:
SADB_X_EXT_NEW_ADDRESS_SRC and SADB_X_EXT_NEW_ADDRESS_DST. They
can be used by IKE daemon to change SA addresses.
o ipsecrequest and secpolicy structures were cardinally changed to
avoid locking protection for ipsecrequest. Now we support
only limited number (4) of bundled SAs, but they are supported
for both INET and INET6.
o INPCB security policy cache was introduced. Each PCB now caches
used security policies to avoid SP lookup for each packet.
o For inbound security policies added the mode, when the kernel does
check for full history of applied IPsec transforms.
o References counting rules for security policies and security
associations were changed. The proper SA locking added into xform
code.
o xform code was also changed. Now it is possible to unregister xforms.
tdb_xxx structures were changed and renamed to reflect changes in
SADB/SPDB, and changed rules for locking and refcounting.

Reviewed by: gnn, wblock
Obtained from: Yandex LLC
Relnotes: yes
Sponsored by: Yandex LLC
Differential Revision: https://reviews.freebsd.org/D9352

# eecaab52 01-Nov-2016 Justin Hibbits <jhibbits@FreeBSD.org>

Merge i.MX and PowerPC SDHCI drivers

Summary:
i.MX5 and PowerPC use a very similar eSDHC controller, which is also
similar to the uSDHC controller used by i.MX6. The imx_sdhci driver works
almost completely with PowerPC, with some minor tweaks.

There is one caveat with this: reset currently does not work on PowerPC, so has
been #ifdef'd out until this can be tracked down and fixed. If resets are done
the controller will timeout all data transactions. Without a reset, it appears
to work just fine.

This is part 3, following up r308186 and r308187.

Test Plan:
This has been tested on a PowerPC QorIQ P1022 board. It has not been
tested on i.MX, but no regressions are expected.

Reviewed By: imp
Differential Revision: https://reviews.freebsd.org/D8407

# dc9b124d 21-Oct-2016 Justin Hibbits <jhibbits@FreeBSD.org>

Create a new MACHINE_ARCH for Freescale PowerPC e500v2

Summary:
The Freescale e500v2 PowerPC core does not use a standard FPU.
Instead, it uses a Signal Processing Engine (SPE)--a DSP-style vector processor
unit, which doubles as a FPU. The PowerPC SPE ABI is incompatible with the
stock powerpc ABI, so a new MACHINE_ARCH was created to deal with this.
Additionaly, the SPE opcodes overlap with Altivec, so these are mutually
exclusive. Taking advantage of this fact, a new file, powerpc/booke/spe.c, was
created with the same function set as in powerpc/powerpc/altivec.c, so it
becomes effectively a drop-in replacement. setjmp/longjmp were modified to save
the upper 32-bits of the now-64-bit GPRs (upper 32-bits are only accessible by
the SPE).

Note: This does _not_ support the SPE in the e500v1, as the e500v1 SPE does not
support double-precision floating point.

Also, without a new MACHINE_ARCH it would be impossible to provide binary
packages which utilize the SPE.

Additionally, no work has been done to support ports, work is needed for this.
This also means no newer gcc can yet be used. However, gcc's powerpc support
has been refactored which would make adding a powerpcspe-freebsd target very
easy.

Test Plan:
This was lightly tested on a RouterBoard RB800 and an AmigaOne A1222
(P1022-based) board, compiled against the new ABI. Base system utilities
(/bin/sh, /bin/ls, etc) still function appropriately, the system is able to boot
multiuser.

Reviewed By: bdrewery, imp
Relnotes: yes
Differential Revision: https://reviews.freebsd.org/D5683

# 1e6afa0e 26-Sep-2016 Justin Hibbits <jhibbits@FreeBSD.org>

Add NXP/Freescale DIU driver for PowerPC SoCs

Summary:
This enables some features of the DIU, using a static configuration,
specified either via a 'edid' property on the 'display' FDT node, or a
'video-mode' environment variable (bootarg). 'video-mode' was chosen because it
matches u-boot's naming, so it can be set with:

setenv bootargs video-mode=${video-mode}

at the u-boot CLI.

Mouse cursor is not supported currently, as a hardware cursor is not supported
by framebuffer VT yet. Currently it only supports a 32bpp ARGB (actually BGRA)
format, and only a single composite plane, at up to 1280x1024.

Differential Revision: https://reviews.freebsd.org/D8022

# 6cedae09 02-Aug-2016 Justin Hibbits <jhibbits@FreeBSD.org>

Merge MPC85XX and QorIQ config options

Summary:
MPC85XX and QorIQ are very similar. When the DPAA dTSEC driver was
added, QORIQ_DPAA was brought in as a config option to support the differences
in hardware register settings between QorIQ (e500mc-, e5500- based) SoCs and
QUICC (e500v1/e500v2-based) SoCs, particularly in the Local Access Window (LAW)
target settings.

Unify these settings using macros to hide details and ease porting, and use a
new function (mpc85xx_is_qoriq()) to distinguish between QorIQ and QUICC SoCs at
runtime.

An alternative to using the function could be to use a variable initialized at
platform attach time, which may incur less overhead at runtime. Since it's not
in the critical path once booted, this optimization doesn't seem necessary at
first pass.

Reviewed by: nwhitehorn
MFC after: 1 week
Differential Revision: https://reviews.freebsd.org/D7294

# 8ba8cb91 23-May-2016 Luiz Otavio O Souza <loos@FreeBSD.org>

Move the OFW iicbus code to dev/iicbus to stop polluting dev/ofw with
unrelated code.

Discussed with: nwhitehorn (a long time ago)

# d4faefae 01-Apr-2016 Zbigniew Bodek <zbb@FreeBSD.org>

Fix PowerPC LINT build after r297392

PowerPC has real Open Firmware and does not necessarily need FDT.
Make ofwpci.c only PCI dependent.

Pointed out by: emaste
Reviewed by: nwhitehorn
Obtained from: Semihalf

# c43a8674 29-Mar-2016 Zbigniew Bodek <zbb@FreeBSD.org>

Reduce OFW PCI code duplication - involves ARM, PPC and SPARC64

Import portions of the PowerPC OF PCI implementation into new file
"ofwpci.c", common for other platforms. The files ofw_pci.c and ofw_pci.h
from sys/powerpc/ofw no longer exist. All required declarations are moved
to sys/dev/ofw/ofwpci.h. This creates a new ofw_pci_write_ivar() function
and modifies some others methods. Most functions contain existing ppc
implementations in the majority unchanged. Now there is no need to have
multiple identical copies of methods for various architectures.

Requested by: jhibbits
Reviewed by: jhibbits, marius
Submitted by: Marcin Mazurek <mma@semihalf.com>
Obtained from: Semihalf
Sponsored by: Annapurna Labs
Differential Revision: https://reviews.freebsd.org/D4879

# bc7b9300 21-Dec-2015 Ian Lepore <ian@FreeBSD.org>

Implement OF_decode_addr() for arm. Move most of powerpc's implementation
into a new function that other platforms can share.

This creates a new ofw_reg_to_paddr() function (in a new ofw_subr.c file)
that contains most of the existing ppc implementation, mostly unchanged.
The ppc code now calls the new MI code from the MD code, then creates a
ppc-specific bus_space mapping from the results. The new arm implementation
does the same in an arm-specific way.

This also moves the declaration of OF_decode_addr() from ofw_machdep.h to
openfirm.h, except on sparc64 which uses a different function signature.

This will help all FDT platforms to set up early console access using
OF_decode_addr().

# 68a71d75 29-Nov-2015 Justin Hibbits <jhibbits@FreeBSD.org>

Add Freescale QorIQ GPIO driver.

Still missing interrupt support, to come later.

Sponsored by: Alex Perez/Inertial Computing

# 5d89896c 17-Nov-2015 Justin Hibbits <jhibbits@FreeBSD.org>

Add support for new LAW registers in QorIQ SoCs.

QorIQ SoCs (e5500 core, P5 family) have 2 BARs for local access windows, while
MPC85XX, and P1/P2 families use only a single BAR register.

This also adds the QORIQ_DPAA option, mutually exclusive to MPC85XX, to handle
this difference.

Obtained from: Semihalf
Sponsored by: Alex Perez/Inertial Computing

# 3d3e385e 22-Oct-2015 Conrad Meyer <cem@FreeBSD.org>

Add libkern ffsll() for parity with flsll()

Sponsored by: EMC / Isilon Storage Division
Differential Revision: https://reviews.freebsd.org/D3962

# 67da38c5 21-Sep-2015 Ed Maste <emaste@FreeBSD.org>

Move kbd.c to main sys/conf/files list

It is (optionally) used on all architectures.

Sponsored by: The FreeBSD Foundation

# 5d6961b0 26-Aug-2015 Justin Hibbits <jhibbits@FreeBSD.org>

Fix freescale sdhc driver, and add it to the files list.

Also, add it to the mmc DRIVER_MODULE attachment list.

# 6aabc119 21-Aug-2015 Justin Hibbits <jhibbits@FreeBSD.org>

Create a RouterBoard platform and use it to create a flash map

Summary:
The RouterBoard uses a predefined partition map which doesn't exist in the fdt.
This change allows overriding the fdt slicer with a custom slicer, and uses this
custom slicer to define the flash map on the RouterBoard RB800.
D3305 converts the mpc85xx platform into a base class, so that systems based on
the mpc85xx platform can add their own overrides. This change builds on D3305,
and creates a RouterBoard (RB800) platform to initialize the slicer override.

Reviewed By: nwhitehorn, imp
Differential Revision: https://reviews.freebsd.org/D3345

# 3f3cffed 05-Jul-2015 Justin Hibbits <jhibbits@FreeBSD.org>

Merge booke and aim interrupt.c files.

Summary:
Both booke and AIM interrupt.c files contain nearly identical code. This merges
the two files, to reduce duplication.

Reviewers: #powerpc, marcel

Reviewed By: marcel

Subscribers: imp

Differential Revision: https://reviews.freebsd.org/D2991

# 4f4d15f0 10-Jun-2015 Ruslan Bukin <br@FreeBSD.org>

Allow DTrace to be compiled-in to the kernel.
This will require for AArch64 as we dont have modules yet.

Sponsored by: HEIF5
Sponsored by: ARM Ltd.
Differential Revision: https://reviews.freebsd.org/D1997

# 809923ca 11-May-2015 Justin Hibbits <jhibbits@FreeBSD.org>

Add a PCI bridge for the Freescale PCIe Root Complex

Summary:
The Freescale PCIe Root Complex shows up as a Processor class device, PowerPC
subclass, so the generic PCI code ignores it for a bridge. This adds support
for it.

As part of this, update the Freescale PCI hostbridge driver, to allow probing
beyond the root complex, instead of only allowing "proper" PCI-PCI bridges.

Reviewers: #powerpc, marcel, nwhitehorn

Reviewed By: nwhitehorn

Subscribers: imp

Differential Revision: https://reviews.freebsd.org/D2442

Relnotes: yes

# 98be38e7 04-May-2015 Justin Hibbits <jhibbits@FreeBSD.org>

Implement a driver for the PowerPC-base RouterBoard (RB333/600/800/1100)

Summary:
This has been tested on the RB800, but should work on the RB333, RB600, and
RB1100 as well.

It's currently missing ECC support, but read and write are complete.

Reviewers: imp

Reviewed By: imp

Subscribers: imp

Differential Revision: https://reviews.freebsd.org/D2223

# f23bfc68 29-Apr-2015 Justin Hibbits <jhibbits@FreeBSD.org>

Also happened to miss this in r282264.

# a7452468 18-Apr-2015 Justin Hibbits <jhibbits@FreeBSD.org>

Implement hwpmc(4) for Freescale e500 core.

This supports e500v1, e500v2, and e500mc. Tested only on e500v2, but the
performance counters are identical across all, with e500mc having some
additional events.

Relnotes: Yes

# c4f9a741 04-Apr-2015 Justin Hibbits <jhibbits@FreeBSD.org>

Add file missed in r281096.

# a616b821 04-Apr-2015 Justin Hibbits <jhibbits@FreeBSD.org>

Fix whitespace.

# ca54502a 04-Apr-2015 Justin Hibbits <jhibbits@FreeBSD.org>

Add mpc85xx_gpio to the build conf.

Missed this in the previous commit.

# ecaecbc7 27-Mar-2015 Ian Lepore <ian@FreeBSD.org>

Make simplebus a base class of ofwbus. This allows the elimination of
duplicated code in the two classes, and also allows devices in FDT-based
systems to declare simplebus as their parent and still work correctly
when the FDT data describes the device at the root of the tree rather
than as a child of a simplebus (which is common for interrupt, clock,
and power controllers).

Differential Revision: https://reviews.freebsd.org/D1990
Submitted by: Michal Meloun

# 29d0137a 09-Feb-2015 Rui Paulo <rpaulo@FreeBSD.org>

Remove FreeBSD/wii.

This port failed to gain traction and probably only a couple Wii consoles
ran FreeBSD all the way to single user mode with an md(4). IPC
support was never implemented, so it was impossible to use any peripheral

Any further development, if any, will happen at https://github.com/rpaulo/wii.

Discussed with: nathanw (a long time ago), jhibbits

# 64b83a05 14-Jan-2015 Justin Hibbits <jhibbits@FreeBSD.org>

Add Altivec/VMX register support to ptrace.

MFC after: 2 weeks
Relnotes: yes

# 5cead939 14-Dec-2014 Rui Paulo <rpaulo@FreeBSD.org>

Move ofw_cpu.c to sys/dev/ofw so that it can be used by other
architectures.

Differential Revision: https://reviews.freebsd.org/D1307
Reviewed by: jhibbits

# e9152038 15-Oct-2014 Justin Hibbits <jhibbits@FreeBSD.org>

Move the adm1030 driver to the proper location, and rename it.

For compatibility, 'device windtunnel' is still supported, but one should use
'device adm1030' instead, and this has been updated in GENERIC and NOTES.

# c8d2ffd6 05-Aug-2014 Gleb Smirnoff <glebius@FreeBSD.org>

Merge all MD sf_buf allocators into one MI, residing in kern/subr_sfbuf.c
The MD allocators were very common, however there were some minor
differencies. These differencies were all consolidated in the MI allocator,
under ifdefs. The defines from machine/vmparam.h turn on features required
for a particular machine. For details look in the comment in sys/sf_buf.h.

As result no MD code left in sys/*/*/vm_machdep.c. Some arches still have
machine/sf_buf.h, which is usually quite small.

Tested by: glebius (i386), tuexen (arm32), kevlo (arm32)
Reviewed by: kib
Sponsored by: Netflix
Sponsored by: Nginx, Inc.

# 49588d0f 10-May-2014 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Move the PS3 framebuffer console to use vt instead of syscons and adjust
GENERIC64 for PowerPC to use vt with it.

Much to my chagrin, PS3 support seems to have bitrotted somewhat since the
last time I tried it. ehci panics on attach and interrupt handling seems
to be faulty. This should be fixed soon...

# f25e50cf 14-Feb-2014 Andriy Gapon <avg@FreeBSD.org>

provide fast versions of ffsl and flsl for i386; ffsll and flsll for amd64

Reviewed by: jhb
MFC after: 10 days
X-MFC note: consider thirdparty modules depending on these symbols
Sponsored by: HybridCluster

# 65d08437 05-Feb-2014 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Move Open Firmware device root on PowerPC, ARM, and MIPS systems to
a sub-node of nexus (ofwbus) rather than direct attach under nexus. This
fixes FDT on x86 and will make coexistence with ACPI on ARM systems easier.
SPARC is unchanged.

Reviewed by: imp, ian

# c017acc7 02-Feb-2014 Justin Hibbits <jhibbits@FreeBSD.org>

Add driver for the ADT7460/ADT7467 fan controller found in later PowerBooks
and iBooks. Original work by andreast.

MFC after: 1 month

# 169dd953 31-Jan-2014 Justin Hibbits <jhibbits@FreeBSD.org>

Add hwpmc(4) support for the PowerPC 970 class processors, direct events.
This also fixes asserts on removal of the module for the mpc74xx.

The PowerPC 970 processors have two different types of events: direct events
and indirect events. Thus far only direct events are supported. I included
some documentation in the driver on how indirect events work, but support is
for the future.

MFC after: 1 month

# e1c161e7 30-Jan-2014 Justin Hibbits <jhibbits@FreeBSD.org>

Unbreak non-SMP builds. This was broken by r259284. Also, reorganize the
code introduced in that revision a bit.

Reviewed by: nwhitehorn
MFC after: 3 weeks

# 4702d987 12-Dec-2013 Justin Hibbits <jhibbits@FreeBSD.org>

Add PMU-based CPU frequency scaling. This method is used on most Titanium
PowerBooks.

MFC after: 1 month

# 27cf7d04 05-Dec-2013 Aleksandr Rybalko <ray@FreeBSD.org>

Merge VT(9) project (a.k.a. newcons).

Reviewed by: nwhitehorn
MFC_to_10_after: re approval

Sponsored by: The FreeBSD Foundation

# 43fdca95 05-Dec-2013 John Baldwin <jhb@FreeBSD.org>

Fix debug printfs in FPU_EMU to compile on powerpc64 and enable it for
powerpc64. This fixes the LINT64 kernel config.

Approved by: nwhitehorn (the idea, not the actual patch)

# 49aba28a 01-Dec-2013 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Make uart_cpu_powerpc work on both FDT and OFW systems. This is the last
remaining modification required to build kernels that work with both on
PowerPC.

# debe4455 17-Nov-2013 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Split the function of the PCB_FPU flags into two: PCB_FPU now indicates that
the actual FPU is enabled, while PCB_FPREGS indicates that the FPU state
structure in the PCB is valid. This separation reflects the situation on
FPU-less systems in which the FP state is used by the emulator but we don't
actually want to try to turn on the non-existant FPU.

Use this flag to save and restore FP regs properly on both AIM and Book-E.
As a side effect, this sets up hard-FP and Altivec on Book-E CPUs with such
abilities except for a trap handler to call enable_fpu()/enable_altivec().

# 817ba5c0 12-Nov-2013 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Following the approach with ACPI DMAR on x86, split IOMMU handling into
a variant PCI bus instead of trying to shoehorn it into the PCI host bridge
adapter. Besides matching better the architecture on other platforms, this
also allows systems with multiple partitionable endpoints per PCI host
bridge to work correctly.

# e39c26a9 11-Nov-2013 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Use the same implementation of copyinout.c for both AIM and Book-E. This
fixes some bugs in both implementations related to validity checks on
mapping bounds.

# bdac4360 11-Nov-2013 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Follow up r223485, which made AIM use the ABI thread pointer instead of
PCPU fields for curthread, by doing the same to Book-E. This closes
some potential races switching between CPUs. As a side effect, it turns out
the AIM and Book-E swtch.S implementations were the same to within a few
registers, so move that to powerpc/powerpc.

MFC after: 3 months

# 302acc2e 11-Nov-2013 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Rename the "bare" platform "mpc85xx", which is what it actually is, and
add actual platform probing based on PVR. Still needs a little more work:
in particular, the CCRS setup should move here.

Also turn "bare" into a truly bare platform that doesn't pretend to know how
to do anything except get the memory map. This should also be enhanced to
process the FDT reserved memory list, but that is for another day.

# 629aa519 11-Nov-2013 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Make tsec work with the device tree present on the RB800. The previous code
assumed that the MDIO bus was a direct child of the Ethernet interface. It
may not be and indeed on many device trees is not. While here, add proper
locking for MII transactions, which may be on a bus shared by several MACs.

Hardware donated by: Benjamin Perrault

# 178cdf9a 25-Oct-2013 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Convert e500 PCI driver to use common PPC PCI bus glue. No functional
changes.

# a8126ae5 23-Oct-2013 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Factor out MI portions of the PowerPC nexus device into /sys/dev/ofw. The
sparc64 driver will be modified to use this shortly.

# 17593f86 22-Oct-2013 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Standards-conformance and code deduplication:
- Use bus reference phandles in place of FDT offsets as IRQ domain keys
- Unify the identical macio/fdt/mambo OpenPIC drivers into one
- Be more forgiving (following ePAPR) about what we need from the device
tree to identify an OpenPIC
- Correctly map all IRQs into an interrupt domain
- Set IRQ_*_CONFORM for interrupts on an unknown PIC type instead of
failing attachment for that device.

# e4cf0633 20-Oct-2013 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Since the PS3 port was committed, the AIM nexus device works perfectly fine
on all PowerPC platforms, whether or not they have Open Firmware. Remove
some more duplication and have there be only one nexus driver.

# 228f09b3 20-Oct-2013 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Replace the two almost-exactly-identical AIM and Book-E clock.c
implementations with a single one after the application of a very small
amount of #ifdef.

# 1cfdc971 20-Oct-2013 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Unify the AIM and Book-E vm_machdep.c implementations, which previously
differed only with respect to the AIM version not following style(9) and
some additional features for 64-bit systems and machines with direct maps
in the AIM implementation that are no-ops on Book-E (at least for now).

# 757e5b29 19-Oct-2013 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Add initial driver for POWER hypervisor interpartition ethernet. This is
sufficient to pass traffic but needs some more work before merging to
STABLE.

# 4f835517 02-Oct-2013 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Only build the POWER hypervisor UART driver if device uart is included in
the kernel config.

Approved by: re (gjb)

# 391dff86 28-Sep-2013 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Add driver for the PAPR VSCSI virtual SCSI controller. This lets FreeBSD
install directly into standard POWER LPARs, as found for example in
QEMU. The core of this device is the SCSI RDMA protocol as also found in
Infiniband. The SRP portions of the driver will be factored out and placed
/sys/cam in the future to allow them to be used for IB storage. Thanks to
Scott Long for a great deal of implementation help.

Reviewed by: scottl
Approved by: re (kib)

# 7a8d25c0 17-Sep-2013 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Merge in support for PAPR-compliant (Power Architecture Platform
Requirements) systems from the projects/pseries branch. This in principle
includes all IBM POWER hardware released in the last 15 years with the
exception of POWER3-based systems when run in 64-bit mode. The main
development target, however, has been the PAPR logical partition support
that is the default target in KVM on POWER and QEMU -- mileage may vary
on actual hardware at present. Much of the heavy lifting here was done
by Andreas Tobler.

Approved by: re (kib)

# 98fa0351 05-Sep-2013 Gleb Smirnoff <glebius@FreeBSD.org>

Fix build.

# 237abf0c 28-Jun-2013 Davide Italiano <davide@FreeBSD.org>

- Trim an unused and bogus Makefile for mount_smbfs.
- Reconnect with some minor modifications, in particular now selsocket()
internals are adapted to use sbintime units after recent'ish calloutng
switch.

# cb34ed44 20-May-2013 Marcel Moolenaar <marcel@FreeBSD.org>

Add basic support for FDT to i386 & amd64. This change includes:
1. Common headers for fdt.h and ofw_machdep.h under x86/include
with indirections under i386/include and amd64/include.
2. New modinfo for loader provided FDT blob.
3. Common x86_init_fdt() called from hammer_time() on amd64 and
init386() on i386.
4. Split-off FDT specific low-level console functions from FDT
bus methods for the uart(4) driver. The low-level console
logic has been moved to uart_cpu_fdt.c and is used for arm,
mips & powerpc only. The FDT bus methods are shared across
all architectures.
5. Add dev/fdt/fdt_x86.c to hold the fdt_fixup_table[] and the
fdt_pic_table[] arrays. Both are empty right now.

FDT addresses are I/O ports on x86. Since the core FDT code does
not handle different address spaces, adding support for both I/O
ports and memory addresses requires some thought and discussion.
It may be better to use a compile-time option that controls this.

Obtained from: Juniper Networks, Inc.

# b3caab66 30-Apr-2013 Brooks Davis <brooks@FreeBSD.org>

MFP4 changes 222065 and 222068:

Add a simplebus attachment for cfi(4)'s FDT support and move
cfi_bus_fdt.c to sys/conf/files so non-ppc architectures are supported.

Sponsored by: DARPA, AFRL

# 61e642bc 23-Apr-2013 Rui Paulo <rpaulo@FreeBSD.org>

wiigpio depends on options WII.

# d3576a3f 03-Nov-2012 Marcel Moolenaar <marcel@FreeBSD.org>

Add the bus attachment for the embedded EHCI HC.

# e3cdd5e1 24-Oct-2012 Warner Losh <imp@FreeBSD.org>

Hoist the MI compat_freebsd32 files up into files from files.*.

# 5d26cae7 24-Oct-2012 Warner Losh <imp@FreeBSD.org>

Move common fdt into files. Duplicate in files.powerpc the files
shared with aim. Config is smart enough to cope with multiple lines
of the same path with different options. This reduces the needless
duplication.

# 915f83e6 21-Oct-2012 Rui Paulo <rpaulo@FreeBSD.org>

Make the Wii GPIO driver a separate device.

# 2e564269 17-Oct-2012 Attilio Rao <attilio@FreeBSD.org>

Disconnect non-MPSAFE SMBFS from the build in preparation for dropping
GIANT from VFS. In addition, disconnect also netsmb, which is a base
requirement for SMBFS.

In the while SMBFS regular users can use FUSE interface and smbnetfs
port to work with their SMBFS partitions.

Also, there are ongoing efforts by vendor to support in-kernel smbfs,
so there are good chances that it will get relinked once properly locked.

This is not targeted for MFC.

# 31ec0f7a 21-Aug-2012 Adrian Chadd <adrian@FreeBSD.org>

Initial support for running FreeBSD on the Nintendo Wii. We're able to
reach single user mode using a memory disk device as the file system.

This port includes the framebuffer driver, the PIC driver, a platform
driver and the GPIO driver. The IPC driver (to talk to IOS kernels) is
not yet written but there's a placeholder for it.

There are still some MMU problems and to get a working system you need to
patch locore32.S. Since we haven't found the best way yet to address that
problem, we're not committing those changes yet. The problem is related to
the different BAT layout on the Wii and to the fact that the Homebrew
loader doesn't clean up the special registers (including the 8 BATs)
before passing control to us.

You'll need a Wii with Homebrew loader and a TV that can do NTSC (for now).

Submitted by: Margarida Gouveia

# 9c3fbfbd 19-Aug-2012 Andreas Tobler <andreast@FreeBSD.org>

Add a new sound driver for PowerMacs, found here on my Quad G5.
It allows simple playback and volume control like the other Mac drivers,
not more.

# a894f6a0 19-Aug-2012 Andreas Tobler <andreast@FreeBSD.org>

Add a new temperature driver for certain PowerMacs. Found here on my Quad G5.

# d0ec68d4 03-Aug-2012 Justin Hibbits <jhibbits@FreeBSD.org>

Add backlight support for nVidia-based PowerBooks/iBooks/iMacs.

Approved by: nwhitehorn (mentor)
MFC after: 9.1-RELEASE

# 7c45c9e4 02-Jul-2012 Marcel Moolenaar <marcel@FreeBSD.org>

Add a driver for the Freescale FCM module in the localbus controller.
This driver does not yet handle multiple chip selects properly.

Note that the NAND infrastructure does not perform full page
reads or writes, which means that this driver cannot make use
of the hardware ECC that is otherwise present.

# aea81038 22-Jun-2012 Konstantin Belousov <kib@FreeBSD.org>

Implement mechanism to export some kernel timekeeping data to
usermode, using shared page. The structures and functions have vdso
prefix, to indicate the intended location of the code in some future.

The versioned per-algorithm data is exported in the format of struct
vdso_timehands, which mostly repeats the content of in-kernel struct
timehands. Usermode reading of the structure can be lockless.
Compatibility export for 32bit processes on 64bit host is also
provided. Kernel also provides usermode with indication about
currently used timecounter, so that libc can fall back to syscall if
configured timecounter is unknown to usermode code.

The shared data updates are initiated both from the tc_windup(), where
a fast task is queued to do the update, and from sysctl handlers which
change timecounter. A manual override switch
kern.timecounter.fast_gettime allows to turn off the mechanism.

Only x86 architectures export the real algorithm data, and there, only
for tsc timecounter. HPET counters page could be exported as well, but
I prefer to not further glue the kernel and libc ABI there until
proper vdso-based solution is developed.

Minimal stubs neccessary for non-x86 architectures to still compile
are provided.

Discussed with: bde
Reviewed by: jhb
Tested by: flo
MFC after: 1 month

# aa6bc7dc 30-May-2012 Rafal Jaworowski <raj@FreeBSD.org>

Extract vendor specific Book-E pieces into separate files and have a common
skeleton (maybe we should kobj-tize this one day).

Note the PPC4xx bit is not connected to the build yet.

Obtained from: AppliedMicro, Semihalf.

# 17f4cae4 27-May-2012 Rafal Jaworowski <raj@FreeBSD.org>

Let us manage differences of Book-E PowerPC variations i.e. vendor /
implementation specific vs. the common architecture definition.

Bring PPC4XX defines (PSL, SPR, TLB). Note the new definitions under
BOOKE_PPC4XX are not used in the code yet.

This change set is not supposed to affect existing E500 support, it's just
another reorg step before bringing support for E500mc, E5500 and PPC465.

Obtained from: AppliedMicro, Freescale, Semihalf

# 0a67fa33 26-May-2012 Rafal Jaworowski <raj@FreeBSD.org>

Move OpenPIC FDT bus glue to a shared location, so that other PowerPC
platforms can use it, not only MPC85XX.

This is just reorg, no functional changes.

# a1f8f448 22-Apr-2012 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Remove dead code. The routines in atomic.S did not work properly anyway, and
were everywhere unused. If we turn out to need them, they should be
reimplemented.

MFC after: 2 weeks

# 88c7c434 27-Mar-2012 Peter Wemm <peter@FreeBSD.org>

Allow (with a license warning) "options ZFS" to work in static kernels.

The 'make depend' rules have to use custom -I paths for the special compat
includes for the opensolaris/zfs headers.

This option will pull in the couple of files that are shared with dtrace,
but they appear to correctly use the MODULE_VERSION/MODULE_DEPEND rules
so loader should do the right thing, as should kldload.

Reviewed by: pjd (glanced at)

# 3cc28bd9 26-Feb-2012 Justin Hibbits <jhibbits@FreeBSD.org>

Add backlight control to ATI-graphics PowerBooks and iBooks.

Approved by: nwhitehorn (mentor)
MFC after: 1 week

# b490f4d7 04-Feb-2012 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Missed file in r230993.

# b6faf3cf 16-Oct-2011 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Add support for special keys (volume/brightness/eject) on Apple laptops with
ADB keyboards.

Submitted by: Justin Hibbits <jrh29 at alumni dot cwru dot edu>
MFC after: 9.0-RELEASE

# 9f2c359f 13-Aug-2011 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Add support for the Blu-Ray drive found in the Sony Playstation 3 and fix
some realted minor bugs in PS3 internal storage support.

Submitted by: glevand <geoffrey.levand@mail.ru>
Approved by: re (bz)

# 9ba8a927 19-Jun-2011 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Add an OHCI driver to complement the EHCI one. The infrastructure to attach
both to the parent ps3bus was in r223313. This driver itself comes from the
ps3 project branch.

# 0d317057 19-Jun-2011 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Driver for PS3's internal hard disk. Hopefully this can be CAM-ified in
the future, but presents a set of simple block devices for now. With
(forthcoming) boot loader support or vfs.root.mountfrom, allows booting
PS3s from disk.

Submitted by: glevand <geoffrey.levand@mail.ru>

# 03c6aeca 04-Jun-2011 Andreas Tobler <andreast@FreeBSD.org>

Add new fan controller driver for the G4 MDD PowerMac. Submitted and tested
by Justin Hibbits.

Approved by: nwhitehorn (mentor)

# 0d7136ba 02-Jun-2011 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Missed file in r222613.

# d188174a 29-May-2011 Andreas Tobler <andreast@FreeBSD.org>

Add a new driver, the ad7417, to read temperatures and voltages on some
PowerMac's.

Approved by: nwhitehorn (mentor)

# 84d77676 28-May-2011 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Factor out the SMU fan management code into a new module (powermac_thermal)
that will connect all of the various sensors and fan control modules on
Apple hardware with software-controlled fans (e.g. all G5 systems).

MFC after: 1 month

# 70df4233 19-Apr-2011 Bjoern A. Zeeb <bz@FreeBSD.org>

Compile in in_cksum* implementations for both IPv6 and IPv6.
While in_pseudo() etc. is often used in offloading feature support,
in_cksum() is mostly used to fix some broken hardware.

Keeping both around for the moment allows us to compile NIC drivers
even in an IPv6 only environment without the need to mangle them
with #ifdef INETs in a way they are not prepared for. This will
leave some dead code paths that will not be exercised for IPv6.

Reviewed by: gnn
Sponsored by: The FreeBSD Foundation
Sponsored by: iXsystems
MFC after: 3 days

# 2fea6431 17-Jan-2011 Jung-uk Kim <jkim@FreeBSD.org>

Add reader/writer lock around mem_range_attr_get() and mem_range_attr_set().
Compile sys/dev/mem/memutil.c for all supported platforms and remove now
unnecessary dev_mem_md_init(). Consistently define mem_range_softc from
mem.c for all platforms. Add missing #include guards for machine/memdev.h
and sys/memrange.h. Clean up some nearby style(9) nits.

MFC after: 1 month

# 03479763 05-Jan-2011 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Import support for the Sony Playstation 3 using the OtherOS feature
available on firmwares 3.15 and earlier.

Caveats: Support for the internal SATA controller is currently missing,
as is support for framebuffer resolutions other than 720x480. These
deficiencies will be remedied soon.

Special thanks to Peter Grehan for providing the hardware that made this
port possible, and thanks to Geoff Levand of Sony Computer Entertainment
for advice on the LV1 hypervisor.

# bef5da7f 03-Dec-2010 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Add an abstraction layer to the 64-bit AIM MMU's page table manipulation
logic to support modifying the page table through a hypervisor. This
uses KOBJ inheritance to provide subclasses of the base 64-bit AIM MMU
class with additional methods for page table manipulation.

Many thanks to Peter Grehan for suggesting this design and implementing
the MMU KOBJ inheritance mechanism.

# e2326639 03-Dec-2010 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Provide a simple IOMMU framework on PowerPC, which is required to support
PPC hypervisors.

# fe3b4685 11-Nov-2010 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Remove use of a separate ofw_pmap on 32-bit CPUs. Many Open Firmware
mappings need to end up in the kernel anyway since the kernel begins
executing in OF context. Separating them adds needless complexity,
especially since the powerpc64 and mmu_oea64 code gave up on it a long
time ago.

As a side effect, the PPC ofw_machdep code is no longer AIM-specific,
so move it to powerpc/ofw.

# 50fd2a5b 31-Oct-2010 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Add a driver for the Apple Uninorth AGP host bridge found in all PowerPC
Macintoshes with an AGP bus.

# da89fa28 15-Oct-2010 Andreas Tobler <andreast@FreeBSD.org>

Add three new drivers for fan control and temperature reading on the
PowerMac7,2.

- The fcu driver lets us read and write the fan RPMs for all fans in the
PowerMac7,2. This driver is PowerMac specific.
- The ds1775 is a driver to read the temperature for the drive bay sensor.
- The max6690 is another driver to read temperatures. Here it is used to
read the inlet, the backside and the U3 heatsink temperature.

An additional driver, the ad7417, will follow later.

Thanks to nwhitehorn for guiding me through this driver development.

Approved by: nwhitehorn (mentor)

# eecadc70 03-Oct-2010 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Add a memory-range interface to /dev/mem on PowerPC using PAT attributes.
Unlike actual MTRR, this only controls the mapping attributes for
subsequent mmap() of /dev/mem. Nonetheless, the support is sufficiently
MTRR-like that Xorg can use it, which translates into an enormous increase
in graphics performance on PowerPC.

MFC after: 2 weeks

# 707c2fb9 10-Sep-2010 Alexander Motin <mav@FreeBSD.org>

Update PowerPC event timer code to use new event timers infrastructure.

Reviewed by: nwitehorn
Tested by: andreast
H/W donated by: Gheorghe Ardelean

# b2a237be 31-Aug-2010 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Restructure how reset and poweroff are handled on PowerPC systems, since
the existing code was very platform specific, and broken for SMP systems
trying to reboot from KDB.

- Add a new PLATFORM_RESET() method to the platform KOBJ interface, and
migrate existing reset functions into platform modules.
- Modify the OF_reboot() routine to submit the request by hand to avoid
the IPIs involved in the regular openfirmware() routine. This fixes
reboot from KDB on SMP machines.
- Move non-KDB reset and poweroff functions on the Powermac platform
into the relevant power control drivers (cuda, pmu, smu), instead of
using them through the Open Firmware backdoor.
- Rename platform_chrp to platform_powermac since it has become
increasingly Powermac specific. When we gain support for IBM systems,
we will grow a new platform_chrp.

# 895051e3 19-Aug-2010 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

FPU EMU is 32-bit only for now, so mark it as a powerpc-only feature.
This fixes powerpc64 LINT.

# 2c16c8d7 31-Jul-2010 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Add support for the IBM Full-System Simulator (Mambo). This code has been
developed against the 970 and Cell simulators.

# c3e289e1 12-Jul-2010 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

MFppc64:

Kernel sources for 64-bit PowerPC, along with build-system changes to keep
32-bit kernels compiling (build system changes for 64-bit kernels are
coming later). Existing 32-bit PowerPC kernel configurations must be
updated after this change to specify their architecture.

# cc81c44d 12-Jul-2010 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Unify ABI-related bits of the Book-E and AIM machdep routines
(exec_setregs, etc.) in order to simplify the addition of 64-bit support,
and possible future extension of the Book-E code to handle hard floating
point and Altivec.

MFC after: 1 month

# d1d3233e 11-Jul-2010 Rafal Jaworowski <raj@FreeBSD.org>

Convert Freescale PowerPC platforms to FDT convention.

The following systems are affected:

- MPC8555CDS
- MPC8572DS

This overhaul covers the following major changes:

- All integrated peripherals drivers for Freescale MPC85XX SoC, which are
currently in the FreeBSD source tree are reworked and adjusted so they
derive config data out of the device tree blob (instead of hard coded /
tabelarized values).

- This includes: LBC, PCI / PCI-Express, I2C, DS1553, OpenPIC, TSEC, SEC,
QUICC, UART, CFI.

- Thanks to the common FDT infrastrucutre (fdtbus, simplebus) we retire
ocpbus(4) driver, which was based on hard-coded config data.

Note that world for these platforms has to be built WITH_FDT.

Reviewed by: imp
Sponsored by: The FreeBSD Foundation

# 9efb0787 05-Jun-2010 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Add a driver for the CPU temperature sensors attached over I2C on the
PowerMac 11,2.

# ca2c1931 16-May-2010 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Add support for the U4 PCI-Express bridge chipset used in late-generation
Powermac G5 systems. MSI and several other things are not presently
supported.

The U3/U4 internal device support portions of this change were contributed
by Andreas Tobler.

MFC after: 1 week

# 9b934d09 03-Sep-2009 Ed Schouten <ed@FreeBSD.org>

Move libteken out of the syscons directory.

I initially committed libteken to sys/dev/syscons/teken, but now that
I'm working on a console driver myself, I noticed this was not a good
decision. Move it to sys/teken to make it easier for other drivers to
use a terminal emulator.

Also list teken.c in sys/conf/files, instead of listing it in all the
files.arch files separately.

# 1016f143 22-Jun-2009 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Add cpufreq support on the PowerPC G5, along with a skeleton SMU driver
in order to slew CPU voltage during frequency changes. The OpenBSD SMU
driver was an extremely helpful reference for this.

# f2396192 22-Jun-2009 Rafal Jaworowski <raj@FreeBSD.org>

Keep file list sorted.

# f07ef6e4 22-Jun-2009 Rafal Jaworowski <raj@FreeBSD.org>

DS1553 RTC module driver. On the MPC8555CDS system it hangs off of the LBC bus.

Obtained from: Semihalf

# 757cb6db 22-Jun-2009 Rafal Jaworowski <raj@FreeBSD.org>

Integrated I2C controller driver (found in MPC85xx and other SOC parts).

Obtained from: Freescale, Semihalf

# 02b553ca 06-Jun-2009 Rafal Jaworowski <raj@FreeBSD.org>

Initial version of the sec(4) driver for the integrated security engine found
in Freescale system-on-chip devices.

The following algorithms and schemes are currently supported:
- 3DES, AES, DES
- MD5, SHA1, SHA256, SHA384, SHA512

Reviewed by: philip
Obtained from: Freescale, Semihalf

# 9eb9db93 31-May-2009 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Introduce support for cpufreq on PowerPC with the dynamic frequency
switching capabilities of the MPC7447A and MPC7448.

# 28bb01e5 21-May-2009 Rafal Jaworowski <raj@FreeBSD.org>

Initial support for SMP on PowerPC MPC85xx.

Tested with Freescale dual-core MPC8572DS development system.

Obtained from: Freescale, Semihalf

# b40ce02a 13-May-2009 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Factor out platform dependent things unrelated to device drivers into a
new platform module. These are probed in early boot, and have the
responsibility of determining the layout of physical memory, determining
the CPU timebase frequency, and handling the zoo of SMP mechanisms
found on PowerPC.

Reviewed by: marcel, raj
Book-E parts by: raj

# ac741ae5 23-Apr-2009 Marcel Moolenaar <marcel@FreeBSD.org>

Add suppport for ISA and ISA interrupts to make the ATA
controller in the VIA southbridge functional in the CDS
(Configurable Development System) for MPC85XX.
The embedded USB controllers look operational but the
interrupt steering is still wrong.

# 8446b206 05-Apr-2009 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Add an Open Firmware access module for real-mode OF accesses to the PowerPC
build. This is required for the IBM Mambo simulator, as well as a variety
of non-Apple PowerPC hardware.

# 7bf5cfed 04-Apr-2009 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Modularize the Macintosh built-in ATA along the lines of the rest of the
ATA system as an optional atamacio device.

PR: powerpc/133161
Submitted by: Bruce Cran

# 27457a80 03-Apr-2009 Marcel Moolenaar <marcel@FreeBSD.org>

PowerPC, meet kernel core dumps. The support is based
on a generic dumper that creates an ELF core file and
uses PMAP functions to scan and iterate over memory
chunks, as well as handle memory mappings used during
dumping.
the PMAP layer can choose to return physical memory
chunks or virtual memory chunks. For minidumps, the
chunks should be virtual.

The default MMU I/F implementation for the scan_md()
method returns NULL. Thus, when a PMAP implementation
does not implement the required methods, an empty
core file is created. Here, empty means having an ELF
header only.

Obtained from: Juniper Networks

# 1c96bdd1 03-Apr-2009 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Add support for 64-bit PowerPC CPUs operating in the 64-bit bridge mode
provided, for example, on the PowerPC 970 (G5), as well as on related CPUs
like the POWER3 and POWER4.

This also adds support for various built-in hardware found on Apple G5
hardware (e.g. the IBM CPC925 northbridge).

Reviewed by: grehan

# 802cb57e 28-Feb-2009 Ed Schouten <ed@FreeBSD.org>

Add memmove() to the kernel, making the kernel compile with Clang.

When copying big structures, LLVM generates calls to memmove(), because
it may not be able to figure out whether structures overlap. This caused
linker errors to occur. memmove() is now implemented using bcopy().
Ideally it would be the other way around, but that can be solved in the
future. On ARM we don't do add anything, because it already has
memmove().

Discussed on: arch@
Reviewed by: rdivacky

# cd7a30c4 20-Feb-2009 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Include altivec.c, missed on previous commit r188860. This should unbreak the
build.

# 8486eb86 25-Jan-2009 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Add support for the I2S and davbus audio controllers found in Apple PowerPC
hardware.

Submitted by: Marco Trillo

# a9cade51 14-Jan-2009 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Driver for Apple Keywest I2C controllers found in MacIO ASICs. Used for
power and thermal control, as well as GPIOs on Xserves and controlling
sound codecs for Apple built-in audio.

Submitted by: Marco Trillo
Obtained from: NetBSD

# 3bb481ff 14-Jan-2009 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Import an Open Firmware I2C bus module. This attaches firmware device tree
indicated I2C devices, and provides an ofw_bus interface for driver probing.
This should be MI, but is currently provided only on PowerPC due to lack of
sparc64 hardware with an I2C controller.

Discussed on: freebsd-arch

# b2b734e7 13-Jan-2009 Rafal Jaworowski <raj@FreeBSD.org>

Rework BookE pmap towards multi-core support.

o Eliminate tlb0[] (a s/w copy of TLB0)
- The table contents cannot be maintained reliably in multiple MMU
environments, where asynchronous events (invalidations from other cores)
can change our local TLB0 contents underneath.
- Simplify and optimize TLB flushing: system wide invalidations are
performed using tlbivax instruction (propagates to other cores), for
local MMU invalidations a new optimized routine (assembly) is introduced.

o Improve and simplify TID allocation and management.
- Let each core keep track of its TID allocations.
- Simplify TID recycling, eliminate dead code.
- Drop the now unused powerpc/booke/support.S file.

o Improve page tables management logic.

o Simplify TLB1 manipulation routines.

o Other improvements and polishing.

Obtained from: Freescale, Semihalf

# b4b1c516 01-Jan-2009 Ed Schouten <ed@FreeBSD.org>

Replace syscons terminal renderer by a new renderer that uses libteken.

Some time ago I started working on a library called libteken, which is
terminal emulator. It does not buffer any screen contents, but only
keeps terminal state, such as cursor position, attributes, etc. It
should implement all escape sequences that are implemented by the
cons25 terminal emulator, but also a fair amount of sequences that are
present in VT100 and xterm.

A lot of random notes, which could be of interest to users/developers:

- Even though I'm leaving the terminal type set to `cons25', users can
do experiments with placing `xterm-color' in /etc/ttys. Because we
only implement a subset of features of xterm, this may cause
artifacts. We should consider extending libteken, because in my
opinion xterm is the way to go. Some missing features:

- Keypad application mode (DECKPAM)
- Character sets (SCS)

- libteken is filled with a fair amount of assertions, but unfortunately
we cannot go into the debugger anymore if we fail them. I've done
development of this library almost entirely in userspace. In
sys/dev/syscons/teken there are two applications that can be helpful
when debugging the code:

- teken_demo: a terminal emulator that can be started from a regular
xterm that emulates a terminal using libteken. This application can
be very useful to debug any rendering issues.

- teken_stress: a stress testing application that emulates random
terminal output. libteken has literally survived multiple terabytes
of random input.

- libteken also includes support for UTF-8, but unfortunately our input
layer and font renderer don't support this. If users want to
experiment with UTF-8 support, they can enable `TEKEN_UTF8' in
teken.h. If you recompile your kernel or the teken_demo application,
you can hold some nice experiments.

- I've left PC98 the way it is right now. The PC98 platform has a custom
syscons renderer, which supports some form of localised input. Maybe
we should port PC98 to libteken by the time syscons supports UTF-8?

- I've removed the `dumb' terminal emulator. It has been broken for
years. It hasn't survived the `struct proc' -> `struct thread'
conversion.

- To prevent confusion among people that want to hack on libteken:
unlike syscons, the state machines that parse the escape sequences are
machine generated. This means that if you want to add new escape
sequences, you have to add an entry to the `sequences' file. This will
cause new entries to be added to `teken_state.h'.

- Any rendering artifacts that didn't occur prior to this commit are by
accident. They should be reported to me, so I can fix them.

Discussed on: current@, hackers@
Discussed with: philip (at 25C3)

# 91416fb2 19-Dec-2008 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Modularize the Open Firmware client interface to allow run-time switching
of OFW access semantics, in order to allow future support for real-mode
OF access and flattened device frees. OF client interface modules are
implemented using KOBJ, in a similar way to the PPC PMAP modules.

Because we need Open Firmware to be available before mutexes can be used on
sparc64, changes are also included to allow KOBJ to be used very early in
the boot process by only using the mutex once we know it has been initialized.

Reviewed by: marius, grehan

# 33644623 01-Dec-2008 Sam Leffler <sam@FreeBSD.org>

Switch to ath hal source code. Note this removes the ath_hal
module; the ath module now brings in the hal support. Kernel
config files are almost backwards compatible; supplying

device ath_hal

gives you the same chip support that the binary hal did but you
must also include

options AH_SUPPORT_AR5416

to enable the extended format descriptors used by 11n parts.
It is now possible to control the chip support included in a
build by specifying exactly which chips are to be supported
in the config file; consult ath_hal(4) for information.

# b4dbc599 26-Oct-2008 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Add ADB support. This provides support for the external ADB bus on the PowerMac
G3 as well as the internal ADB keyboard and mice in PowerBooks and iBooks. This
also brings in Mac GPIO support, for which we should eventually have a better
interface.

Obtained from: NetBSD (CUDA and PMU drivers)

# e00251b7 25-Oct-2008 Marcel Moolenaar <marcel@FreeBSD.org>

Add a driver for flash memory that implements to the Common Flash
Memory Interface (CFI). The flash memory can be read and written
to through /dev/cfi# and an ioctl() exists so processes can read
the query information.
The driver supports the AMD and Intel command set, though only
the AMD command has been tested.

Obtained from: Juniper Networks, Inc.

# 08077f58 25-Oct-2008 Marcel Moolenaar <marcel@FreeBSD.org>

Add a driver for the Local Bus Controller.

Obtained from: Juniper Networks, Inc.

# 51d163d3 14-Oct-2008 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Convert PowerPC AIM PCI and nexus busses to standard OFW bus interface. This
simplifies certain device attachments (Kauai ATA, for instance), and makes
possible others on new hardware.

On G5 systems, there are several otherwise standard PCI devices
(Serverworks SATA) that will not allow their interrupt properties to be
written, so this information must be supplied directly from Open Firmware.

Obtained from: sparc64

# b7382e09 27-Sep-2008 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Add DMA support for Apple built-in ATA controllers.

Tested by: grehan, marcotrillo@gmail.com
MFC after: 1 month

# 321e12c8 26-Aug-2008 Rafal Jaworowski <raj@FreeBSD.org>

tsec: Refactor driver's structure.

Split the driver into the core functionality part (sys/dev/tsec/if_tsec.c) and
the bus attachment (sys/dev/tsec/if_tsec_ocp.c).

This lets better integrate and maintain the driver in other environments with
different attachment abstractions (there is at least one other FreeBSD port --
MPC83xx -- which uses this TSEC driver, but with different local bus model
i.e. some OF derivative). While there, clean up and fix minor cosmetics.

Obtained from: Semihalf

# cf99524a 07-Jun-2008 Marcel Moolenaar <marcel@FreeBSD.org>

Add support for the Apple Big Mac (BMAC) Ethernet controller,
found on various Apple G3 models.

Submitted by: Nathan Whitehorn

# 7d8ccad7 07-Jun-2008 Marcel Moolenaar <marcel@FreeBSD.org>

Add support for Apple's Descriptor-Based DMA (DBDMA) engine. The DMA
engine is usful to various existing drivers, such as ata(4) and scc(4),
and is used bhy the soon to be added bm(4).

Submitted by: Nathan Whitehorn

# 1c17588f 29-Apr-2008 Marcel Moolenaar <marcel@FreeBSD.org>

mp_machdep.c is only conditional upon smp, not aim. If booke grows
support for smp, mp_machdep.c needs to be included as well.

# 12640815 27-Apr-2008 Marcel Moolenaar <marcel@FreeBSD.org>

MFp4: SMP support

# a1cd472a 26-Apr-2008 Rafal Jaworowski <raj@FreeBSD.org>

Introduce a dedicated file for MPC85xx-specific routines. Move cpu_reset()
there, as it's not relevant to Book-E specification, but is an implementation
detail, directly dependent on the given SoC version.

# 321578e3 03-Mar-2008 Rafal Jaworowski <raj@FreeBSD.org>

Connect MPC85XX to the PowerPC build.

The kernel config file is KERNCONF=MPC85XX, so the usual procedure applies:

1. make buildworld TARGET_ARCH=powerpc
2. make buildkernel TARGET_ARCH=powerpc TARGET_CPUTYPE=e500 KERNCONF=MPC85XX

This default config uses kernel-level FPU emulation. For the soft-float world
approach:

1. make buildworld TARGET_ARCH=powerpc TARGET_CPUTYPE=e500
2. disable FPU_EMU option in sys/powerpc/conf/MPC85XX
3. make buildkernel TARGET_ARCH=powerpc TARGET_CPUTYPE=e500 KERNCONF=MPC85XX

Approved by: cognet (mentor)
MFp4: e500

# 4bbf0886 23-Feb-2008 Marcel Moolenaar <marcel@FreeBSD.org>

Hook-up the FPU emulator. It's optional upon FPU_EMU.

# 104954fe 30-Jan-2008 Peter Grehan <grehan@FreeBSD.org>

Enable ofwdump on powerpc (finally). Tested on G3 & G4 machines.

Submitted by: Dan Stekloff <dsteklof at c i s c o dot com>
Discussed with: marcel

# de2fa7b8 19-Dec-2007 Marcel Moolenaar <marcel@FreeBSD.org>

Redefine bus_space_tag_t on PowerPC from a 32-bit integral to
a pointer to struct bus_space. The structure contains function
pointers that do the actual bus space access.

The reason for this change is that previously all bus space
accesses were little endian (i.e. had an explicit byte-swap
for multi-byte accesses), because all busses on Macs are little
endian.
The upcoming support for Book E, and in particular the E500
core, requires support for big-endian busses because all
embedded peripherals are in the native byte-order.

With this change, there's no distinction between I/O port
space and memory mapped I/O. PowerPC doesn't have I/O port
space. Busses assign tags based on the byte-order only.
For that purpose, two global structures exist (bs_be_tag and
bs_le_tag), of which the address can be taken to get a valid
tag.

Obtained from: Juniper, Semihalf

# bd71bd37 15-Dec-2007 Marcel Moolenaar <marcel@FreeBSD.org>

Make files under src/sys/powerpc/aim, as well as Open Firmware related
files dependent upon option/cpu AIM. This is in preparation of adding
support for Book-E (e500) support.

Obtained from: Juniper, Semihalf

# dd3456c0 14-Dec-2007 Marcel Moolenaar <marcel@FreeBSD.org>

Sort.

# 47abecea 14-Dec-2007 Marcel Moolenaar <marcel@FreeBSD.org>

Update file list after repocopying select files from
src/sys/powerpc/powerpc to src/sys/powerpc/aim.

# 3c90d1ea 02-Dec-2007 Robert Watson <rwatson@FreeBSD.org>

Break out stack(9) from ddb(4):

- Introduce per-architecture stack_machdep.c to hold stack_save(9).
- Introduce per-architecture machine/stack.h to capture any common
definitions required between db_trace.c and stack_machdep.c.
- Add new kernel option "options STACK"; we will build in stack(9) if it is
defined, or also if "options DDB" is defined to provide compatibility
with existing users of stack(9).

Add new stack_save_td(9) function, which allows the capture of a stacktrace
of another thread rather than the current thread, which the existing
stack_save(9) was limited to. It requires that the thread be neither
swapped out nor running, which is the responsibility of the consumer to
enforce.

Update stack(9) man page.

Build tested: amd64, arm, i386, ia64, powerpc, sparc64, sun4v
Runtime tested: amd64 (rwatson), arm (cognet), i386 (rwatson)

# a9d185b2 25-Oct-2007 David E. O'Brien <obrien@FreeBSD.org>

Align.

# b2630c29 02-Jul-2007 George V. Neville-Neil <gnn@FreeBSD.org>

Commit the change from FAST_IPSEC to IPSEC. The FAST_IPSEC
option is now deprecated, as well as the KAME IPsec code.
What was FAST_IPSEC is now IPSEC.

Approved by: re
Sponsored by: Secure Computing

# 9f94082e 06-Apr-2007 Yoshihiro Takahashi <nyan@FreeBSD.org>

sort.

# 89c40e5f 05-Apr-2007 Alexander Kabaev <kan@FreeBSD.org>

Be more conservative and compile libkern/memset.c only on architectures
than need it. These are i386, amd64 and powerpc so far.

# 1d3aed33 07-Feb-2007 Marcel Moolenaar <marcel@FreeBSD.org>

Evolve the ctlreq interface added to geom_gpt into a generic
partitioning class that supports multiple schemes. Current
schemes supported are APM (Apple Partition Map) and GPT.
Change all GEOM_APPLE anf GEOM_GPT options into GEOM_PART_APM
and GEOM_PART_GPT (resp).

The ctlreq interface supports verbs to create and destroy
partitioning schemes on a disk; to add, delete and modify
partitions; and to commit or undo changes made.

# 2c298b17 17-Dec-2006 Matt Jacob <mjacob@FreeBSD.org>

opt_ah.h ends up copied into a kernelcompile directory in some
aches as a read-only file. In a number of cases this has led to
compiles failing- usually due to some strange NFS drift which thinks
that the opt_ah.h in the compile directory is out of date wrt the
source it is copied from. When the copy is executed again, it fails
because the target is read-only. Oops. Modify the compile hooks
avoid this.

Discussed with a while back with: Sam Leffler

# 663cf7fe 23-Oct-2006 Ruslan Ermilov <ru@FreeBSD.org>

Move MI parts of syscons into MI "files".

# 9302d5e0 24-Aug-2006 Peter Grehan <grehan@FreeBSD.org>

Remove file that snuck in accidentally in Marcel's gdb commit.

# 512b2fb1 24-Aug-2006 Marcel Moolenaar <marcel@FreeBSD.org>

Add skeletal support for GDB. In particular gdb_cpu_getreg() needs
implementing to make GDB support usable.

# e5d34218 01-Aug-2006 Maxim Sobolev <sobomax@FreeBSD.org>

Add device to access and modify Open Firmware NVRAM settings in
PowerPC-based Apple's machines and small utility to do it from
userland modelled after the similar utility in Darwin/OSX.

Only tested on 1.25GHz G4 Mac Mini.

MFC after: 1 month

# b895d145 26-Jul-2006 Marcel Moolenaar <marcel@FreeBSD.org>

Remove zs(4). It has been replaced by scc(4) & uart(4).

# cd320bc9 26-Jul-2006 Marcel Moolenaar <marcel@FreeBSD.org>

Replace sio_iobus.c with uart_iobus.c.

# 1773f778 08-Jun-2006 Sam Leffler <sam@FreeBSD.org>

add glue for ath_hal

MFC after: 1 month

# d94607de 24-Apr-2006 Marcel Moolenaar <marcel@FreeBSD.org>

Revert previous commit. It's not part of the ppc(4) changes.

# cea4d875 24-Apr-2006 Marcel Moolenaar <marcel@FreeBSD.org>

o Move ISA specific code from ppc.c to ppc_isa.c -- a bus front-
end for isa(4).
o Add a seperate bus frontend for acpi(4) and allow ISA DMA for
it when ISA is configured in the kernel. This allows acpi(4)
attachments in non-ISA configurations, as is possible for ia64.
o Add a seperate bus frontend for pci(4) and detect known single
port parallel cards.
o Merge PC98 specific changes under pc98/cbus into the MI driver.
The changes are minor enough for conditional compilation and
in this form invites better abstraction.
o Have ppc(4) usabled on all platforms, now that ISA specifics
are untangled enough.

# 2825701d 31-Mar-2006 Marcel Moolenaar <marcel@FreeBSD.org>

Add the MacIO attachment for scc(4).

# ce8f0013 30-Mar-2006 Marcel Moolenaar <marcel@FreeBSD.org>

Allow uart(4) to be built on PowerPC.

# 8d96e455 05-Mar-2006 Yaroslav Tykhiy <ytykhiy@gmail.com>

Retire NETSMBCRYPTO as a kernel option and make its functionality
enabled by default in NETSMB and smbfs.ko.

With the most of modern SMB providers requiring encryption by
default, there is little sense left in keeping the crypto part
of NETSMB optional at the build time.

This will also return smbfs.ko to its former properties users
are rather accustomed to.

Discussed with: freebsd-stable, re (scottl)
Not objected by: bp, tjr (silence)
MFC after: 5 days

# a8e06f2a 27-Nov-2005 Ruslan Ermilov <ru@FreeBSD.org>

Make config(8) understand ORed dependecies in "files*" and
improve tracking of known devices. Bump config(8) version.

# d03dab65 22-Nov-2005 Marius Strobl <marius@FreeBSD.org>

Move zs.c from files to files.powerpc as zs(4) by now is only supported
on powerpc (more or less...). That way people updating from FreeBSD 5 to
FreeBSD 6 and beyond on sparc64 will get an error from config(8) rather
than a mysterious compile error when they have a stale 'device zs' in
their kernel config file.

MFC after: 2 weeks

# bba6f0a9 22-Nov-2005 Marius Strobl <marius@FreeBSD.org>

- Add a new method ofw_bus_default_get_devinfo() that allows to retrieve
a newly introduced struct ofw_bus_devinfo which can hold the OFW info
of a device recallable via the ofw_bus KOBJ interface. Introduce a set
of functions ofw_bus_gen_get_*() which use ofw_bus_default_get_devinfo()
to provide generic subroutines for implementing the rest of the ofw_bus
KOBJ interface in a bus driver.
This is inspired by bus_get_resource_list() and bus_generic_rl_*_resource()
and allows to reduce code duplication in bus drivers as they only have
to provide an ofw_bus_default_get_devinfo() implementation in order to
provide the ofw_bus KOBJ interface via ofw_bus_gen_get_*().
- While here add a comment to ofw_bus_if.m describing the intention of
the ofw_bus KOBJ interface.

Reviewed by: marcel

# f9c702db 07-Nov-2005 Peter Grehan <grehan@FreeBSD.org>

Insert a layer of indirection to the pmap code, using a kobj for
the interface. This allows run-time selection of MMU code, based
on CPU-type detection, or tunable-overrides when testing new code.

Pre-requisite for G5 support.

conf/files.powerpc
- remove pmap.c
- add mmu_if.h, mmu_oea.c, pmap_dispatch.c

powerpc/include/mmuvar.h
- definitions for MMU implementations

powerpc/include/pmap.h
- remove pmap_pte_spill declaration
- add pmap_mmu_install declaration
- size the phys_avail array
- pmap_bootstrapped is now global-scope

powerpc/powerpc/machdep.c
- call kobj_machdep_init early in the boot sequence to allow
kobj usage prior to SI_SUB_LOCK
- install the OEA pmap code. This will be moved to CPU-specific
init code in the future.

powerpc/powerpc/mmu_if.m
- Kobj MMU interface definitions

powerpc/powerpc/pmap_dispatch.c
- central dispatch for pmap calls
- contains the global mmu kobj and the routine to locate the
the mmu implementation and init the kobj

# b16d349f 11-Jun-2005 Marcel Moolenaar <marcel@FreeBSD.org>

Refactor the NETSMBCRYPTO option so that it does the same on all
platforms. ARM is excluded as it doesn't yet have any crypto
sources.

Approved by: re (dwhite)
MFC after: 1 day

# f263522a 09-Jun-2005 Joseph Koshy <jkoshy@FreeBSD.org>

MFP4:

- Implement sampling modes and logging support in hwpmc(4).

- Separate MI and MD parts of hwpmc(4) and allow sharing of
PMC implementations across different architectures.
Add support for P4 (EMT64) style PMCs to the amd64 code.

- New pmcstat(8) options: -E (exit time counts) -W (counts
every context switch), -R (print log file).

- pmc(3) API changes, improve our ability to keep ABI compatibility
in the future. Add more 'alias' names for commonly used events.

- bug fixes & documentation.

# c6a37e84 04-Apr-2005 John Baldwin <jhb@FreeBSD.org>

Divorce critical sections from spinlocks. Critical sections as denoted by
critical_enter() and critical_exit() are now solely a mechanism for
deferring kernel preemptions. They no longer have any affect on
interrupts. This means that standalone critical sections are now very
cheap as they are simply unlocked integer increments and decrements for the
common case.

Spin mutexes now use a separate KPI implemented in MD code: spinlock_enter()
and spinlock_exit(). This KPI is responsible for providing whatever MD
guarantees are needed to ensure that a thread holding a spin lock won't
be preempted by any other code that will try to lock the same lock. For
now all archs continue to block interrupts in a "spinlock section" as they
did formerly in all critical sections. Note that I've also taken this
opportunity to push a few things into MD code rather than MI. For example,
critical_fork_exit() no longer exists. Instead, MD code ensures that new
threads have the correct state when they are created. Also, we no longer
try to fixup the idlethreads for APs in MI code. Instead, each arch sets
the initial curthread and adjusts the state of the idle thread it borrows
in order to perform the initial context switch.

This change is largely a big NOP, but the cleaner separation it provides
will allow for more efficient alternative locking schemes in other parts
of the kernel (bare critical sections rather than per-CPU spin mutexes
for per-CPU data for example).

Reviewed by: grehan, cognet, arch@, others
Tested on: i386, alpha, sparc64, powerpc, arm, possibly more

# c0763d37 16-Aug-2004 Suleiman Souhlal <ssouhlal@FreeBSD.org>

Add /dev/mem and /dev/kmem to powerpc.

Approved by: grehan (mentor)

# 26280d88 12-Aug-2004 Marius Strobl <marius@FreeBSD.org>

- Introduce an ofw_bus kobj-interface for retrieving the OFW node and a
subset ("compatible", "device_type", "model" and "name") of the standard
properties in drivers for devices on Open Firmware supported busses. The
standard properties "reg", "interrupts" und "address" are not covered by
this interface because they are only of interest in the respective bridge
code. There's a remaining standard property "status" which is unclear how
to support properly but which also isn't used in FreeBSD at present.
This ofw_bus kobj-interface allows to replace the various (ebus_get_node(),
ofw_pci_get_node(), etc.) and partially inconsistent (central_get_type()
vs. sbus_get_device_type(), etc.) existing IVAR ones with a common one.
This in turn allows to simplify and remove code-duplication in drivers for
devices that can hang off of more than one OFW supported bus.
- Convert the sparc64 Central, EBus, FHC, PCI and SBus bus drivers and the
drivers for their children to use the ofw_bus kobj-interface. The IVAR-
interfaces of the Central, EBus and FHC are entirely replaced by this. The
PCI bus driver used its own kobj-interface and now also uses the ofw_bus
one. The IVARs special to the SBus, e.g. for retrieving the burst size,
remain.
Beware: this causes an ABI-breakage for modules of drivers which used the
IVAR-interfaces, i.e. esp(4), hme(4), isp(4) and uart(4), which need to be
recompiled.
The style-inconsistencies introduced in some of the bus drivers will be
fixed by tmm@ in a generic clean-up of the respective drivers later (he
requested to add the changes in the "new" style).
- Convert the powerpc MacIO bus driver and the drivers for its children to
use the ofw_bus kobj-interface. This invloves removing the IVARs related
to the "reg" property which were unused and a leftover from the NetBSD
origini of the code. There's no ABI-breakage caused by this because none
of these driver are currently built as modules.
There are other powerpc bus drivers which can be converted to the ofw_bus
kobj-interface, e.g. the PCI bus driver, which should be done together
with converting powerpc to use the OFW PCI code from sparc64.
- Make the SBus and FHC front-end of zs(4) and the sparc64 eeprom(4) take
advantage of the ofw_bus kobj-interface and simplify them a bit.

Reviewed by: grehan, tmm
Approved by: re (scottl)
Discussed with: tmm
Tested with: Sun AX1105, AXe, Ultra 2, Ultra 60; PPC cross-build on i386

# cd445f61 12-Jul-2004 Peter Grehan <grehan@FreeBSD.org>

db_memrw.c has been subsumed into db_interface.c ala sparc64

# e700eaa0 10-Jul-2004 Peter Grehan <grehan@FreeBSD.org>

Fix build for non-WITNESS case

spotted by: Suleiman Souhlal <refugee@segfaulted.com>

# 010b69ba 23-Mar-2004 Alan Cox <alc@FreeBSD.org>

Add an implementation of uiomove_fromphys() for PowerPC. This
implementation uses the direct virtual-to-physical mapping.

Discussed with: grehan

# 321fd460 12-Feb-2004 Peter Grehan <grehan@FreeBSD.org>

Work-in-progress for the 'Kauai' ATA device in Mac notebooks. The
device seems to be the macio ATA cell with a PCI front-end, and
has no relation to PIIX-style ATA/PCI devices.

# db55e39a 28-Jan-2004 Peter Grehan <grehan@FreeBSD.org>

Implement UMA_MD_SMALL_ALLOC, since the BAT registers allow direct
addressing of memory. Makes a substantial improvement for apps that
stress the limited amount of KVM on PPC (e.g. untarring the ports tree).

uma_machdep.c stolen from amd64/ia64.

# 473795dc 20-Jan-2004 Peter Grehan <grehan@FreeBSD.org>

Add syscons files, and also generate a syscons font since Apple
SVGA adapters don't have one available in their ROMs.

# f8735aa3 15-Jan-2004 Peter Grehan <grehan@FreeBSD.org>

- add openpic macio and psim/iobus attachments
- alpha sort powermac files

# 1de30b60 13-Jan-2004 Dag-Erling Smørgrav <des@FreeBSD.org>

Add ffsl(), fls() flsl() to platforms that don't already have them.

# c8718f79 28-Jun-2003 Peter Grehan <grehan@FreeBSD.org>

Hook grackle system controller/heathrow interrupt controller to PPC build.

# 5d1b6a85 28-Feb-2003 Ruslan Ermilov <ru@FreeBSD.org>

Standardize handling of locore.[sS] etc. files.

Submitted by: jake, bde, ru

# 84188b7c 23-Feb-2003 Peter Grehan <grehan@FreeBSD.org>

Add apple partition map GEOM module

# d674899b 06-Feb-2003 Benno Rice <benno@FreeBSD.org>

Add a driver that attaches to the gpio node of macio and allows you to enter
DDB when the interrupt button (aka the "programmer's switch") is pressed.

This isn't unfortunately an NMI, but it's a handy way to get into DDB
quickly if needed.

# fb954d9d 04-Feb-2003 Benno Rice <benno@FreeBSD.org>

Add cpu.c. This contains one exported function, cpu_setup(), which handles
setup of and printing information about cpus.

Obtained from: NetBSD (parts)

# 308d2886 01-Feb-2003 Benno Rice <benno@FreeBSD.org>

Build glue for zs_macio.

# e263f030 28-Jan-2003 Poul-Henning Kamp <phk@FreeBSD.org>

NO_GEOM cleanup: remove subr_disklabel.c from powerpc and x86_64.

# e24f6473 21-Jan-2003 Peter Grehan <grehan@FreeBSD.org>

Convert remaining .s files to .S

Approved by: benno

# 03cb4028 17-Jan-2003 Poul-Henning Kamp <phk@FreeBSD.org>

Remove subr_diskslice.c and subr_diskmbr.c which I can find no trace of
why should be needed in the powerpc files. Not compile tested.

# 2a2c7962 17-Jan-2003 Poul-Henning Kamp <phk@FreeBSD.org>

Move subr_disklabel.c and subr_diskslice.c from being MI to MD files,
so that they can be left out where they are unneeded.

# a65a2806 08-Jan-2003 Benno Rice <benno@FreeBSD.org>

Add a pcib variant to allow us to fix up interrupt assignments.

We probably want to do something wrt bus enumeration as well at some point.

# e1f89bae 18-Sep-2002 Peter Grehan <grehan@FreeBSD.org>

- added macio and psim files
- removed unused extintr.c

Approved by: benno

# 99bc8c72 09-Jul-2002 Benno Rice <benno@FreeBSD.org>

Add setjmp (needed for DDB).

# 45b4eca5 09-Jul-2002 Benno Rice <benno@FreeBSD.org>

Add DDB support.

# 98f8e6c0 09-Jul-2002 Benno Rice <benno@FreeBSD.org>

Driver for the Apple UniNorth Host-PCI bridge.

This is in a PowerMac-specific subdirectory as it is hoped that we will support
more than just the PowerMac platform.

# 3008110e 09-Jul-2002 Benno Rice <benno@FreeBSD.org>

Add ofw_pci.c in the pci case.

# 25b60a3b 08-Jul-2002 Benno Rice <benno@FreeBSD.org>

1) Add busdma machdep code.
2) Add bus_pio.h and bus_memio.h (which do nothing).

Submitted by: Peter Grehan <peterg@ptree32.com.au> (1)

# ca019208 09-Jul-2002 Benno Rice <benno@FreeBSD.org>

Driver for OpenPIC compatible interrupt controllers.
It's fairly PowerMac specific at the moment, but that should be fixable.

# f6a7723d 09-Jul-2002 Benno Rice <benno@FreeBSD.org>

Add interrupt handling support code.

I've tried to make this fairly platform-independant as some PowerPC platforms
may not have openpic-style interrupt controllers. This may not have the best
performance but it works for now.

# 825467ca 29-Jun-2002 Benno Rice <benno@FreeBSD.org>

Add in_cksum.c

# 6c2a0625 29-Jun-2002 Benno Rice <benno@FreeBSD.org>

Many fixes to low-level trap and interrupt handling:

- Tidy up clock code. Don't repeatedly call hardclock().
- Remove intrnames, decrnest and intrcnt from locore.s
- Coalesce all trap handling into a single stub that then calls a dispatch
function.

Submitted by: Peter Grehan <peterg@ptree32.com.au>

# 289fc68d 13-May-2002 Benno Rice <benno@FreeBSD.org>

Build the fpu support routines.

# b23e18d6 30-Apr-2002 Benno Rice <benno@FreeBSD.org>

Add sigcode.S

# 2819d0ad 14-Apr-2002 Benno Rice <benno@FreeBSD.org>

Add ofwd to the GENERIC config for powerpc.

# d74ac681 26-Mar-2002 Matthew Dillon <dillon@FreeBSD.org>

Compromise for critical*()/cpu_critical*() recommit. Cleanup the interrupt
disablement assumptions in kern_fork.c by adding another API call,
cpu_critical_fork_exit(). Cleanup the td_savecrit field by moving it
from MI to MD. Temporarily move cpu_critical*() from <arch>/include/cpufunc.h
to <arch>/<arch>/critical.c (stage-2 will clean this up).

Implement interrupt deferral for i386 that allows interrupts to remain
enabled inside critical sections. This also fixes an IPI interlock bug,
and requires uses of icu_lock to be enclosed in a true interrupt disablement.

This is the stage-1 commit. Stage-2 will occur after stage-1 has stabilized,
and will move cpu_critical*() into its own header file(s) + other things.
This commit may break non-i386 architectures in trivial ways. This should
be temporary.

Reviewed by: core
Approved by: core

# bf76ba78 21-Mar-2002 Benno Rice <benno@FreeBSD.org>

Collect all functions for copying to and from userspace into the one file.

This allows me to reimplement [sf]u{byte,word} as separate functions and not
as calls to copy{in,out}.

# b5a8f767 05-Mar-2002 Hajimu UMEMOTO <ume@FreeBSD.org>

- Speedup 3DES by using assembly code for i386.
- Sync des/blowfish to more recent openssl.

Obtained from: KAME/NetBSD
MFC after: 2 weeks

# 7c629906 21-Oct-2001 Dag-Erling Smørgrav <des@FreeBSD.org>

Move procfs_* from procfs_machdep.c into sys_process.c, and rename them to
proc_* in the process; procfs_machdep.c is no longer needed.

Run-tested on i386, build-tested on Alpha, untested on other platforms.

# 00267919 26-Jun-2001 Benno Rice <benno@FreeBSD.org>

Add -msoft-float to COPTS to stop GCC attempting to be "smart" and using
floating point registers for various optimisation tweaks.

# c585bae1 17-Jun-2001 Benno Rice <benno@FreeBSD.org>

The final commit for the first phase of PowerPC support.

This adds the config stuff needed to build kernels.

Reviewed by: obrien

# 8923de59 13-Feb-2023 Piotr Kubaj <pkubaj@FreeBSD.org>

ice(4): Update to 1.37.7-k

Notable changes include:

- DSCP QoS Support (leveraging support added in
rG9c950139051298831ce19d01ea5fb33ec6ea7f89)
- Improved PFC handling and TC queue assignments (now all remaining
queues are assigned to TC 0 when more than one TC is enabled and the
number of available queues does not evenly divide between them)
- Support for dumping the internal FW state for additional debugging by
Intel support
- Support for allowing "No FEC" to be a valid state for the LESM to
negotiate when using non-standard compliant modules

Also includes various bug fixes and smaller enhancements, too.

Signed-off-by: Eric Joyner <erj@FreeBSD.org>

Reviewed by: erj@
Tested by: Jeff Pieper <jeffrey.pieper@intel.com>
MFC after: 3 days
Relnotes: yes
Sponsored by: Intel Corporation
Differential Revision: https://reviews.freebsd.org/D38109


# 2508da22 24-Jan-2023 Eric Joyner <erj@FreeBSD.org>

ice_ddp: Update package to 1.3.30.0

This updated DDP is intended to be used with the forthcoming ice(4)
driver update to 1.37.7-k. (But it will still work with the current
version.)

Co-authored-by: Piotr Kubaj <pkubaj@FreeBSD.org>
Signed-off-by: Eric Joyner <erj@FreeBSD.org>

MFC after: 1 week
Sponsored by: Intel Corporation


# 8c6e5d8c 07-Sep-2022 Andrew Turner <andrew@FreeBSD.org>

Import an optimized str{n}cmp on arm64

These are from the Arm Optimized Routines and don't use the VFP so are
safe to use in the kernel.

Sponsored by: The FreeBSD Foundation


# d1aefbc0 23-Jun-2022 Martin Matuska <mm@FreeBSD.org>

zfs: fix static module build broken in 1f1e2261e


# 8a13362d 01-Dec-2021 Eric Joyner <erj@FreeBSD.org>

ice(4): Add RDMA Client Interface

This allows the "irdma" driver to communicate with the ice(4)
driver to allow it access to the underlying device's hardware
resources as well as synchronize access to shared resources.

This interface already existed in the standalone out-of-tree
1.34.2 driver; this commit adds and enables it in the in-kernel
driver.

Note:

Adds hack to module Makefile to compile interface/.m files

These are required for the RDMA client interface, but they don't
build as-is like the normal .c files. The source directory doesn't
seem to be included by default, so add lines that specifically
add them as libraries so that ice_rdma.h can be found and the
interface files will compile.

Signed-off-by: Eric Joyner <erj@FreeBSD.org>

MFC after: 1 week
Sponsored by: Intel Corporation
Differential Revision: https://reviews.freebsd.org/D30889


# 56429dae 04-Mar-2022 Eric Joyner <erj@FreeBSD.org>

ice(4): Update to 1.34.2-k

- Adds FW logging support
- Once enabled, this lets the firmware print event and error messages
to the log, increasing the visibility into what the hardware is
doing; this is useful for debugging
- General bug fixes
- Adds inital DCB support to the driver
- Notably, this adds support for DCBX to the driver; now with the
fw_lldp sysctl set to 1, the driver and adapter will adopt a DCBX
configuration sent from a link partner
- Adds statistcs sysctls for priority flow control frames
- Adds new configuration sysctls for DCB-related features: (VLAN) user
priority to TC mapping; ETS bandwidth allocation; priority flow
control
- Remove unused SR-IOV files (until support gets added)

Signed-off-by: Eric Joyner <erj@FreeBSD.org>

Tested by: jeffrey.e.pieper@intel.com
MFC after: 3 days
MFC with: 213e91399b, e438f0a975
Relnotes: yes
Sponsored by: Intel Corporation
Differential Revision: https://reviews.freebsd.org/D34024


# 960ce3f7 20-Feb-2022 Michal Meloun <mmel@FreeBSD.org>

Fix a534b50e245d on powerpc.

MFC with: 1bd3e8ba696633ccd7525030d951b58ade167814


# e438f0a9 01-Dec-2021 Eric Joyner <erj@FreeBSD.org>

ice_ddp: Update to 1.3.27.0

This is intended to be used with forthcoming ice(4) driver version 1.34.2.

Signed-off-by: Eric Joyner <erj@FreeBSD.org>

Sponsored by: Intel Corporation


# a0f3abb0 20-Jan-2022 Piotr Kubaj <pkubaj@FreeBSD.org>

powerpc: enable ice in GENERIC64LE

Approved by: erj
Differential Revision: https://reviews.freebsd.org/D33974


# c583b025 23-Dec-2021 Brandon Bergren <bdragon@FreeBSD.org>

[PowerPC] PowerMac timebase sync for G4

Summary:
Disable timebase on (some) AIM platforms (tested on PowerMac G4) prior
to synchronization.

Some platforms use a GPIO to enable and disable timebase, while others
use a platform function.

This mirrors 0d69f00b on mpc85xx.

Todo:
* Implement various G5 timebase controls.
* Print out platform code on unknown G5s so we can collect it.
* Change API to be give/take pairs like Linux does so it's possible to
do a software sync protocol.

Reviewed By: #powerpc, jhibbits
Subscribers: mikael, markmi_dsl-only.net, luporl, alfredo
Tags: #powerpc
Differential Revision: https://reviews.freebsd.org/D29136


# ecbbe831 24-Nov-2021 Mark Johnston <markj@FreeBSD.org>

netinet: Deduplicate most in_cksum() implementations

in_cksum() and related routines are implemented separately for each
platform, but only i386 and arm have optimized versions. Other
platforms' copies of in_cksum.c are identical except for style
differences and support for big-endian CPUs.

Deduplicate the implementations for the rest of the platforms. This
will make it easier to implement in_cksum() for unmapped mbufs. On arm
and i386, define HAVE_MD_IN_CKSUM to mean that the MI implementation is
not to be compiled.

No functional change intended.

Reviewed by: kp, glebius
MFC after: 1 week
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D33095


# 451756d1 23-Aug-2021 Mateusz Guzik <mjg@FreeBSD.org>

powerpc: retire bcmp

Unused since ba96f37758412151 ("Use __builtin for various mem* and b* (e.g. bzero)
routines.")

Reviewed by: jhibbits
Sponsored by: Rubicon Communications, LLC ("Netgate")


# 24042910 19-May-2021 Marcin Wojtas <mw@FreeBSD.org>

Rename ofwpci.c to ofw_pcib.c

It's a class0 driver that implements some pcib methods and creates
a pci bus as its children.
The "ofw_pci" name will be used by a new driver that will be a subclass
of the pci bus.
No functional changes intended.

Submitted by: Kornel Duleba <mindal@semihalf.com>
Reviewed by: andrew
Obtained from: Semihalf
Sponsored by: Alstom Group
Differential Revision: https://reviews.freebsd.org/D30226


# 16e549eb 05-Apr-2021 Justin Hibbits <jhibbits@FreeBSD.org>

Merge the QorIQ GPIO drivers between arm and powerpc

Summary:
They're nearly identical, so don't use two copies. Merge the newer
driver into the older one, and move it to a common location.

Add the Semihalf and associated copyrights in addition to mine, since
it's a non-trivial amount of code merged.

Reviewed By: mw
Differential Revision: https://reviews.freebsd.org/D29520


# af366d35 08-Feb-2021 Mateusz Guzik <mjg@FreeBSD.org>

amd64: implement strlen in assembly

The C variant in libkern performs excessive branching to find the
non-zero byte instead of using the bsfq instruction. The same code
patched to use it is still slower than the routine implemented here
as the compiler keeps neglecting to perform certain optimizations
(like using leaq).

On top of that the routine can is a starting point for copyinstr
which operates on words instead of bytes.

Tested with glibc test suite.

Sample results (calls/s):

Haswell:
$(perl -e "print 'A' x 3"):
stock: 211198039
patched:338626619
asm: 465609618

$(perl -e "print 'A' x 100"):
stock: 83151997
patched: 98285919
asm: 120719888

AMD EPYC 7R32:
$(perl -e "print 'A' x 3"):
stock: 282523617
asm: 491498172

$(perl -e "print 'A' x 100"):
stock: 114857172
asm: 112082057


# 2e58ec01 18-Nov-2020 Mark Johnston <markj@FreeBSD.org>

Move kern_clocksource.c to sys/conf/files

Sponsored by: The FreeBSD Foundation


# 8b2133d4 06-Nov-2020 Leandro Lupori <luporl@FreeBSD.org>

Fix powerpc and LINT builds

Fix build errors introduced by r367417 and r367390:

- Guard label reached only by powerpc64
- Guard vm_reserv_level_iffullpop call, that is not defined on powerpc
variants that don't support superpages
- Add missing hwpmc file, for when hwpmc is built into kernel


# b75abea4 22-Sep-2020 Brandon Bergren <bdragon@FreeBSD.org>

[PowerPC64LE] Set up powerpc.powerpc64le architecture

This is the initial set up for PowerPC64LE.

The current plan is for this arch to remain experimental for FreeBSD 13.

This started as a weekend learning project for me and kinda snowballed from
there.

(More to follow momentarily.)

Reviewed by: imp (earlier version), emaste
Sponsored by: Tag1 Consulting, Inc.
Differential Revision: https://reviews.freebsd.org/D26399


# b4a7ce06 09-Jun-2020 Eric Joyner <erj@FreeBSD.org>

ixl(4): Add FW recovery mode support and other things

Update the iflib version of ixl driver based on the OOT version ixl-1.11.29.

Major changes:

- Extract iflib specific functions from ixl_pf_main.c to ixl_pf_iflib.c
to simplify code sharing between legacy and iflib version of driver

- Add support for most recent FW API version (1.10), which extends FW
LLDP Agent control by user to X722 devices

- Improve handling of device global reset

- Add support for the FW recovery mode

- Use virtchnl function to validate virtual channel messages instead of
using separate checks

- Fix MAC/VLAN filters accounting

Submitted by: Krzysztof Galazka <krzysztof.galazka@intel.com>
Reviewed by: erj@
Tested by: Jeffrey Pieper <jeffrey.e.pieper@intel.com>
MFC after: 1 week
Relnotes: yes
Sponsored by: Intel Corporation
Differential Revision: https://reviews.freebsd.org/D24564


# d3111144 05-Jun-2020 Justin Hibbits <jhibbits@FreeBSD.org>

powerpc: Use IFUNCs for copyin/copyout/etc

Summary:
Radix on AIM, and all of Book-E (currently), can do direct addressing of
user space, instead of needing to map user addresses into kernel space.
Take advantage of this to optimize the copy(9) functions for this
behavior, and avoid effectively NOP translations.

Test Plan: Tested on powerpcspe, powerpc64/booke, powerpc64/AIM

Reviewed by: bdragon
Differential Revision: https://reviews.freebsd.org/D25129


# 45b69dd6 26-May-2020 Justin Hibbits <jhibbits@FreeBSD.org>

powerpc/mmu: Convert PowerPC pmap drivers to ifunc from kobj

With IFUNC support in the kernel, we can finally get rid of our poor-man's
ifunc for pmap, utilizing kobj. Since moea64 uses a second tier kobj as
well, for its own private methods, this adds a second pmap install function
(pmap_mmu_init()) to perform pmap 'post-install pre-bootstrap'
initialization, before the IFUNCs get initialized.

Reviewed by: bdragon


# 852c303b 25-May-2020 Conrad Meyer <cem@FreeBSD.org>

copystr(9): Move to deprecate (attempt #2)

This reapplies logical r360944 and r360946 (reverting r360955), with fixed
copystr() stand-in replacement macro. Eventually the goal is to convert
consumers and kill the macro, but for a first step it helps if the macro is
correct.

Prior commit message:

Unlike the other copy*() functions, it does not serve to copy from one
address space to another or protect against potential faults. It's just
an older incarnation of the now-more-common strlcpy().

Add a coccinelle script to tools/ which can be used to mechanically
convert existing instances where replacement with strlcpy is trivial.
In the two cases which matched, fuse_vfsops.c and union_vfsops.c, the
code was further refactored manually to simplify.

Replace the declaration of copystr() in systm.h with a small macro
wrapper around strlcpy (with correction from brooks@ -- thanks).

Remove N redundant MI implementations of copystr. For MIPS, this
entailed inlining the assembler copystr into the only consumer,
copyinstr, and making the latter a leaf function.

Reviewed by: jhb (earlier version)
Discussed with: brooks (thanks!)
Differential Revision: https://reviews.freebsd.org/D24672


# 051fc58c 11-May-2020 Conrad Meyer <cem@FreeBSD.org>

Revert r360944 and r360946 until reported issues can be resolved

Reported by: cy


# 9cfae28e 11-May-2020 Conrad Meyer <cem@FreeBSD.org>

Remove deleted files from the build

Fix build break introduced in r360944.

Reported by: kevans


# 0e00c709 11-May-2020 John Baldwin <jhb@FreeBSD.org>

Remove support for DES and Triple DES from OCF.

It no longer has any in-kernel consumers via OCF. smbfs still uses
single DES directly, so sys/crypto/des remains for that use case.

Reviewed by: cem
Relnotes: yes
Sponsored by: Chelsio Communications
Differential Revision: https://reviews.freebsd.org/D24773


# 32075647 11-May-2020 John Baldwin <jhb@FreeBSD.org>

Remove support for the Blowfish algorithm from OCF.

It no longer has any in-kernel consumers.

Reviewed by: cem
Relnotes: yes
Sponsored by: Chelsio Communications
Differential Revision: https://reviews.freebsd.org/D24772


# 65bbba25 10-May-2020 Justin Hibbits <jhibbits@FreeBSD.org>

powerpc64: Implement Radix MMU for POWER9 CPUs

Summary:
POWER9 supports two MMU formats: traditional hashed page tables, and Radix
page tables, similar to what's presesnt on most other architectures. The
PowerISA also specifies a process table -- a table of page table pointers--
which on the POWER9 is only available with the Radix MMU, so we can take
advantage of it with the Radix MMU driver.

Written by Matt Macy.

Differential Revision: https://reviews.freebsd.org/D19516


# ccb1ebe0 03-Apr-2020 Justin Hibbits <jhibbits@FreeBSD.org>

powerpc/amigaone: Add CPLD driver for AmigaOne A1222 "Tabor"

Like the X5000, the main CPLD on the A1222 is the communication medium
between the CPU and the GPIO CPLD. It provides a mailbox communication
feature, along with dual-port RAM accessible from both the CPU and GPIO
CPLD, and 3 fan speed reporting registers.


# c5568ba0 11-Mar-2020 Leandro Lupori <luporl@FreeBSD.org>

Enable ixl device on PowerPC64

The ixl driver now works on PowerPC64 and may be compiled in-kernel and
as a module.

Reviewed by: alfredo, erj
Sponsored by: Eldorado Research Institute (eldorado.org.br)
Differential Revision: https://reviews.freebsd.org/D23974


# d8c51c6f 05-Mar-2020 Leandro Lupori <luporl@FreeBSD.org>

[aacraid] Port driver to big-endian

Port aacraid driver to big-endian (BE) hosts.

The immediate goal of this change is to make it possible to use the
aacraid driver on PowerPC64 machines that have Adaptec Series 8 SAS
controllers.

Adapters supported by this driver expect FIB contents in little-endian
(LE) byte order. All FIBs have a fixed header part as well as a data
part that depends on the command being issued to the controller.

In this way, on BE hosts, the FIB header and all FIB data structures
used in aacraid.c and aacraid_cam.c need to be converted to LE before
being sent to the adapter and converted to BE when coming from it.

The functions to convert each struct are on aacraid_endian.c.
For little-endian (LE) targets, they are macros that expand
to nothing.
In some cases, when only a few fields of a large structure are used,
the fields are converted inline, by the code using them.

PR: 237463
Reviewed by: jhibbits
Sponsored by: Eldorado Research Institute (eldorado.org.br)
Differential Revision: https://reviews.freebsd.org/D23887


# bb9c7e26 02-Feb-2020 Warner Losh <imp@FreeBSD.org>

Move font.h generation to conf/files from conf/files.*

Use ${SRCTOP} instead of /usr/share.
Prefer to depend on option sc_dflt_fnt instead of sc.
gc the 4 otherwise identical instances in the tree.
Platforms that don't need this won't included it.


# 2a05eb9f 19-Jan-2020 Justin Hibbits <jhibbits@FreeBSD.org>

PowerPC: Add CPLD driver for AmigaOne X5000

Summary:
The CPLD is the communications medium between the CPU and the XMOS
"Xena" event coprocessor. It provides a mailbox communication feature,
along with dual-port RAM to be used between the CPU and XMOS. Also, it
provides basic board stats as well, such as PCIe presence, JTAG signals,
and CPU fan speed reporting (in revolutions per second). Only fan speed
reading is handled, as a sysctl.

Reviewed by: bdragon
Differential Revision: https://reviews.freebsd.org/D23136


# 9aafc7c0 02-Jan-2020 Brandon Bergren <bdragon@FreeBSD.org>

[PowerPC] [MIPS] Implement 32-bit kernel emulation of atomic64 operations

This is a lock-based emulation of 64-bit atomics for kernel use, split off
from an earlier patch by jhibbits.

This is needed to unblock future improvements that reduce the need for
locking on 64-bit platforms by using atomic updates.

The implementation allows for future integration with userland atomic64,
but as that implies going through sysarch for every use, the current
status quo of userland doing its own locking may be for the best.

Submitted by: jhibbits (original patch), kevans (mips bits)
Reviewed by: jhibbits, jeff, kevans
Differential Revision: https://reviews.freebsd.org/D22976


# 1c8102d8 20-Dec-2019 Justin Hibbits <jhibbits@FreeBSD.org>

powerpc: Only build mpc85xx i2c driver for mpc85xx

No need to build it for every other platform.


# a16111e6 09-Dec-2019 Leandro Lupori <luporl@FreeBSD.org>

[PPC64] Enable opal console use as a GDB DBGPORT

This change makes it possible to use OPAL console as a GDB debug port.

Similar to uart and uart_phyp debug ports, it has to be enabled by
setting the hw.uart.dbgport variable to the serial console node
of the device tree.

Reviewed by: jhibbits
Differential Revision: https://reviews.freebsd.org/D22649


# 9e319462 07-Dec-2019 Justin Hibbits <jhibbits@FreeBSD.org>

powerpc: Use builtins for fls/flsl

Summary:
There's no need to use the fallback fls() and flsl() libkern functions
when the PowerISA includes instructions that already do the bulk of the
work. Take advantage of this through the GCC builtins __builtin_clz()
and __builtin_clzl().

Reviewed by: luporl
Differential Revision: https://reviews.freebsd.org/D22340


# 4ceaf951 25-Nov-2019 Leandro Lupori <luporl@FreeBSD.org>

[PPC64] Enable phyp vty use as a GDB DBGPORT

This change makes it possible to use a POWER Hypervisor virtual
terminal device (phyp vty) as a GDB debug port.

Similar to the uart debug port, it has to be enabled by setting
the hw.uart_phyp.dbgport variable to the vty node of the device
tree.

Reviewed by: jhibbits
Differential Revision: https://reviews.freebsd.org/D22205


# 34ed25a8 15-Oct-2019 Justin Hibbits <jhibbits@FreeBSD.org>

powerpc: Add AmigaOne platform, a subclass of MPC85xx

Summary:
The AmigaOne platform, encompassing the X5000 and A1222 at this time, is
based on the mpc85xx platform, but includes some things not listed in
the device tree. Some custom devices, like CPLD, could be added to the
device tree with an overlay, or other means. However, some cannot
easily be done, such as the power button interrupt.

The directory will also become a location to add AmigaOne platform drivers,
such as the aforementioned CPLD, and its children.

Reviewed by: bdragon
Differential Revision: https://reviews.freebsd.org/D21829


# 0ecc478b 14-Oct-2019 Leandro Lupori <luporl@FreeBSD.org>

[PPC64] Initial kernel minidump implementation

Based on POWER9BSD implementation, with all POWER9 specific code removed and
addition of new methods in PPC64 MMU interface, to isolate platform specific
code. Currently, the new methods are implemented on pseries and PowerNV
(D21643).

Reviewed by: jhibbits
Differential Revision: https://reviews.freebsd.org/D21551


# d0c0856f 10-Oct-2019 Andriy Gapon <avg@FreeBSD.org>

emulate illumos membar_producer with atomic_thread_fence_rel

membar_producer is supposed to be a store-store barrier.
Also, in the code that FreeBSD has ported from illumos membar_producer
is used only with regular stores to regular memory (with respect to
caching).

We do not have an MI primitive for the store-store barrier, so
atomic_thread_fence_rel is the closest we have as it provides
(load | store) -> store barrier.

Previously, membar_producer was an empty function call on all 32-bit
arm-s, 32-bit powerpc, riscv and all mips variants. I think that it was
inadequate.
On other platforms, such as amd64, arm64, i386, powerpc64, sparc64,
membar_producer was implemented using stronger primitives than required
for a store-store barrier with respect to regular memory access.
For example, it used sfence on amd64 and lock-ed nop in i386 (despite TSO).
On powerpc64 we now use recommended lwsync instead of eieio.
On sparc64 FreeBSD uses TSO mode.
On arm64/aarch64 we now use dmb sy instead of dmb ish. Not sure if this
is an improvement, actually.

After this change we can drop opensolaris_atomic.S for aarch64, amd64,
powerpc64 and sparc64 as all required atomic operations have either
direct or light-weight mapping to FreeBSD native atomic operations.

Discussed with: kib
MFC after: 4 weeks


# 1c56203b 13-Sep-2019 Justin Hibbits <jhibbits@FreeBSD.org>

powerpc64/powernv: Add opal NVRAM driver for PowerNV systems

Add a very basic NVRAM driver for OPAL which can be used by the IBM
powerpc-utils nvram utility, not to be confused with the base nvram utility,
which only operates on powermac_nvram.

The IBM utility handles all partitions itself, treating the nvram device as
a plain store.

An alternative would be to manage partitions in the kernel, and augment the
base nvram utility to deal with different backing stores, but that
complicates the driver significantly. Instead, present the same interface
IBM's utlity expects, and we get the usage for free.

Tested by: bdragon


# f5a95d9a 24-Jun-2019 Warner Losh <imp@FreeBSD.org>

Remove NAND and NANDFS support

NANDFS has been broken for years. Remove it. The NAND drivers that
remain are for ancient parts that are no longer relevant. They are
polled, have terrible performance and just for ancient arm
hardware. NAND parts have evolved significantly from this early work
and little to none of it would be relevant should someone need to
update to support raw nand. This code has been off by default for
years and has violated the vnode protocol leading to panics since it
was committed.

Numerous posts to arch@ and other locations have found no actual users
for this software.

Relnotes: Yes
No Objection From: arch@
Differential Revision: https://reviews.freebsd.org/D20745


# c363b16c 20-Jun-2019 Conrad Meyer <cem@FreeBSD.org>

sys: Remove DEV_RANDOM device option

Remove 'device random' from kernel configurations that reference it (most).
Replace perhaps mistaken 'nodevice random' in two MIPS configs with 'options
RANDOM_LOADABLE' instead. Document removal in UPDATING; update NOTES and
random.4.

Reviewed by: delphij, markm (previous version)
Approved by: secteam(delphij)
Differential Revision: https://reviews.freebsd.org/D19918


# 5ca5dfe9 31-May-2019 Conrad Meyer <cem@FreeBSD.org>

random(4): Fix RANDOM_LOADABLE build

I introduced an obvious compiler error in r346282, so this change fixes
that.

Unfortunately, RANDOM_LOADABLE isn't covered by our existing tinderbox, and
it seems like there were existing latent linking problems. I believe these
were introduced on accident in r338324 during reduction of the boolean
expression(s) adjacent to randomdev.c and hash.c. It seems the
RANDOM_LOADABLE build breakage has gone unnoticed for nine months.

This change correctly annotates randomdev.c and hash.c with !random_loadable
to match the pre-r338324 logic; and additionally updates the HWRNG drivers
in MD 'files.*', which depend on random_device symbols, with
!random_loadable (it is invalid for the kernel to depend on symbols from a
module).

(The expression for both randomdev.c and hash.c was the same, prior to
r338324: "optional random random_yarrow | random !random_yarrow
!random_loadable". I.e., "random && (yarrow || !loadable)." When Yarrow
was removed ("yarrow := False"), the expression was incorrectly reduced to
"optional random" when it should have retained "random && !loadable".)

Additionally, I discovered that virtio_random was missing a MODULE_DEPEND on
random_device, which breaks kld load/link of the driver on RANDOM_LOADABLE
kernels. Address that issue as well.

PR: 238223
Reported by: Eir Nym <eirnym AT gmail.com>
Reviewed by: delphij, markm
Approved by: secteam(delphij)
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D20466


# 9e774e53 17-May-2019 Brooks Davis <brooks@FreeBSD.org>

FCP-101: Remove bm(4).

Relnotes: yes
FCP: https://github.com/freebsd/fcp/blob/master/fcp-0101.md
Reviewed by: jhb, imp
Differential Revision: https://reviews.freebsd.org/D20230


# 50886464 29-Apr-2019 Leandro Lupori <luporl@FreeBSD.org>

[PPC64] Turn opal_flash.c into a device

This change makes it easier to enable/disable the inclusion of
OPAL flash in the kernel.

Reviewed by: jhibbits
Differential Revision: https://reviews.freebsd.org/D20098


# 8af4cc4d 22-Mar-2019 Justin Hibbits <jhibbits@FreeBSD.org>

powernv: Add Hypervisor Maintenance Interrupt handler

Attempting to build www/firefox on POWER9 resulted in a HMI exception being
thrown, a fatal trap currently. This is typically caused by timer facility
errors, but examination of the Hypervisor Maintenance Exception Register
(HMER) yielded only that an exception had recovered, with no information of
the actual exception cause.

When an HMI occurs, OPAL_HANDLE_HMI or OPAL_HANDLE_HMI2 must be called to
handle the exception at the firmware level. If the exception is handled, we
can continue.

This adds only the preliminary handler, enough to prevent package building
from panicking. An enhancement in the future is to use the flags returned
by OPAL_HANDLE_HMI2 to print more useful error messages, and log maintenance
events.

Reviewed by: luporl
MFC after: 1 week
Differential Revision: https://reviews.freebsd.org/D19634


# bc94b700 22-Mar-2019 Justin Hibbits <jhibbits@FreeBSD.org>

powerpc: Re-merge isa3 HPT with moea64 native HPT

r345402 fixed the bug that led to the split of the ISA 3.0 HPT handling from
the existing manager. The cause of the bug was gcc moving the register
holding VPN to a different register (not r0), which triggered bizarre
behaviors. With the fix, things work, so they can be re-merged. No
performance lost with the merge.


# 6775dfdf 28-Feb-2019 Justin Hibbits <jhibbits@FreeBSD.org>

powerpc/powernv: Add OPAL flash device driver

Firmware needed by petitboot, for example, GPU firmware, can be installed to
a partition in the flash filesystem. This driver exposes the full flash
given by the device tree, letting the user manage firmware, etc, from
FreeBSD.

To use the partitions provided by the flash module, the fdt_slicer module is
needed, but the module isn't needed for raw access, so there's no direct
dependency link in here.

MFC after: 2 weeks


# dac618a6 28-Feb-2019 Justin Hibbits <jhibbits@FreeBSD.org>

powerpc/powernv: Add asynchronous token management for powernv

The OPAL firmware only supports a finite number of in-flight asynchronous
operations. Rather than have each subsystem try to manage its own, use a
central management service to hand out tokens.

More work can be done to improve asynchronous behavior, such as funneling
things through a future OPAL heartbeat handler, but capabilities will be
added as needed.

Augment the existing consumers (i2c and sensors) to use this new API.

MFC after: 4 weeks


# 61ebc359 21-Feb-2019 Bruce Evans <bde@FreeBSD.org>

Move scterm_teken.c from 6 MD files lists to the MI files list so that it
is easier to configure. It is MI, unlike some of the other syscons files
already in the MI list.

Move scvtb.c similarly. It is needed whenever sc is configured, and is
more MI than most of the files already in the MI list.

This only changes the combined list for arm64 and mips. These arches
already cannot build sc or even NOTES.


# d49fc192 01-Feb-2019 Justin Hibbits <jhibbits@FreeBSD.org>

powerpc/powernv: Add a driver for the POWER9 XIVE interrupt controller

The XIVE (External Interrupt Virtualization Engine) is a new interrupt
controller present in IBM's POWER9 processor. It's a very powerful,
very complex device using queues and shared memory to improve interrupt
dispatch performance in a virtualized environment.

This yields a ~10% performance improvment over the XICS emulation mode,
measured in both buildworld, and 'dd' from nvme to /dev/null.

Currently, this only supports native access.

MFC after: 1 month


# 8763f217 14-Dec-2018 Justin Hibbits <jhibbits@FreeBSD.org>

powerpcspe: Don't require FPU_EMU for powerpcspe IEEE emulation

Build only the necessary fpu_emu files for supporting the SPE IEEE-754
emulation exception handler.

MFC after: 1 week


# a8e3f99e 27-Sep-2018 Mateusz Guzik <mjg@FreeBSD.org>

amd64: implement memcmp in assembly

Both the in-kernel C variant and libc asm variant have very poor performance.
The former compiles to a single byte comparison loop, which breaks down even
for small sizes. The latter uses rep cmpsq/b which turn out to have very poor
throughput and are slower than a hand-coded 32-byte comparison loop.

Depending on size this is about 3-4 times faster than the current routines.

Reviewed by: kib
Approved by: re (gjb)
Differential Revision: https://reviews.freebsd.org/D17328


# b14959da 16-Aug-2018 Justin Hibbits <jhibbits@FreeBSD.org>

random: Add PowerPC 'darn' instruction entropy source

Summary:
PowerISA 3.0 adds a 'darn' instruction to "deliver a random number". This
driver was modeled after (rather, copied and gutted of) the Ivy Bridge
rdrand driver.

This uses the "Conditional Random Number" behavior to remove input bias.

From the ISA reference the 'darn' instruction, and the random number
generator backing it, conforms to the NIST SP800-90B and SP800-90C
standards, compliant to the extent possible at the time the hardware was
designed, and guarantees a minimum 0.5 bits of entropy per bit returned.

Reviewed By: markm, secteam (delphij)
Approved by: secteam (delphij)
Differential Revision: https://reviews.freebsd.org/D16552


# 0bf0bb83 25-Jul-2018 Justin Hibbits <jhibbits@FreeBSD.org>

Support building IPMI as a module on powerpc64

This still only supports IPMI via OPAL on powerpc64, but now it can be tested
with a GENERIC kernel.


# 3ddc2cde 24-Jul-2018 Breno Leitao <leitao@FreeBSD.org>

ofw: Load initrd file

This is an OFW initrd module that would load the initrd from device tree
parameters and give the to the md driver.

With this patch, it is possible to pass a rootfs image through kexec in PowerNV
mode (powerpc64). In order to user it, you should set the MD_ROOT_MEM option in
your kernel configuration.

Reviewed by: jhibbits
Approved by: jhibbits (mentor)
Differential Revision: https://reviews.freebsd.org/D15705


# b99540b6 21-Jun-2018 Justin Hibbits <jhibbits@FreeBSD.org>

Add the rest of the files for r335481

Missed hooking PMCR cpufreq(4) to the build, and adding the SPR to the header.


# ebf95d96 14-Jun-2018 Justin Hibbits <jhibbits@FreeBSD.org>

Split the PowerISA 3.0 HPT implementation from historic

PowerISA 3.0 makes several changes to not only the format of the HPT but
also the behavior surrounding it. For instance, TLBIE no longer requires
serialization. Removing this lock cuts buildworld time in half on a
18-core/72-thread POWER9 system, demonstrating that this lock is highly
contended on such a system.

There was odd behavior observed trying to make this change in a
backwards-compatible manner in moea64_native.c, so the best option was to
fully split it, and largely revert the original changes adding POWER9
support to the original file.

Suggested by: nwhitehorn


# 1a3eaf6c 21-May-2018 Justin Hibbits <jhibbits@FreeBSD.org>

Add an IPMI attachment for PowerNV systems

IPMI access on PowerNV systems is done through the OPAL firmware. This adds a
simple attachment for communicating with the FSP/BMC on these machines. This
has been tested on a Talos POWER9 workstation, only in the bootup phase, noting
the successful attachment messages:

...
ipmi0: IPMI device rev. 0, firmware rev. 2.00, version 2.0, device support mask 0
ipmi0: Number of channels 2
...

The ipmi device has not been added to GENERIC64, but may be after further
testing. It may also eventually be added to the ipmi module at that point.


# 9c6ba29d 21-May-2018 Justin Hibbits <jhibbits@FreeBSD.org>

Basic OPAL sensor support for POWER9 platforms

Summary:
PowerNV architectures (in the test case POWER9) export sensors via the device
tree, which are accessed via OPAL calls. This adds sysctl nodes for each
device in a generic fashion. New sysctl nodes are:

dev.opal_sensor.N.sensor
dev.opal_sensor.N.sensor_min
dev.opal_sensor.N.sensor_max
dev.opal_sensor.N.type
dev.opal_sensor.N.label

These are rooted at a parent attachment under opal, called opalsens. This does
not add support for the "sensor groups" defined in the device tree.

Reviewed by: breno.leitao_gmail.com
Differential Revision: https://reviews.freebsd.org/D15362


# baaa3c4d 09-May-2018 Warner Losh <imp@FreeBSD.org>

Simplify things a little

Rather than include a copy for memmove to call bcopy to call memcpy
(which handles overlapping copies), make memmove a strong reference to
memcpy to save the two calls.

Differential Revision: https://reviews.freebsd.org/D15374


# 5aa07b05 09-May-2018 Warner Losh <imp@FreeBSD.org>

Move MI-ish bcopy routine to libkern

riscv and powerpc have nearly identical bcopy.c that's
supposed to be mostly MI. Move it to the MI libkern.

Differential Revision: https://reviews.freebsd.org/D15374


# 9c11d8d4 17-Apr-2018 Brooks Davis <brooks@FreeBSD.org>

Remove the unused fuwintr() and suiwintr() functions.

Half of implementations always failed (returned (-1)) and they were
previously used in only one place.

Reviewed by: kib, andrew
Obtained from: CheriBSD
Sponsored by: DARPA, AFRL
Differential Revision: https://reviews.freebsd.org/D15102


# 98b158d4 27-Mar-2018 Justin Hibbits <jhibbits@FreeBSD.org>

Fix another optional standard. Build openpic_ofw again.


# d9093074 15-Mar-2018 Wojciech Macek <wma@FreeBSD.org>

Reverting r330925 for now


# 7c95bf1e 14-Mar-2018 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Fix fat-fingering ("optional standard") and move all the OF code to
being marked "standard", which is less confusing than having it conditional
on AIM CPUs here, and then picked up through options FDT from conf/files
on Book-E.

Request by: jhibbits


# 94f513c8 14-Mar-2018 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

The expression (aim | fdt) is always true on PowerPC. The last PowerPC
platform that can run without a device tree (PS3) still uses the OF_*()
functions to check if one exists and OF_* is used unconditionally in
core parts of the system like powerpc/machdep.c. Reflect this reality
in files.powerpc, for example by changing occurrences of aim | fdt to
standard.


# 22eedd96 14-Mar-2018 Wojciech Macek <wma@FreeBSD.org>

PowerNV: Fix I2C to compile if FDT is disabled

Submitted by: Wojciech Macek <wma@semihalf.com>
Obtained from: Semihalf
Sponsored by: IBM, QCM Technologies


# 4ffd72e3 01-Mar-2018 Wojciech Macek <wma@FreeBSD.org>

PowerNV: Initial support for OPAL I2C transfers

Add I2C OPAL driver and a set of dummy-ones to allow
all I2C things on Power8 to attach.

TODO: better async token management

Submitted by: Wojciech Macek <wma@semihalf.com>
Obtained from: Semihalf
Sponsored by: IBM, QCM Technologies


# 6d13fd63 21-Feb-2018 Wojciech Macek <wma@FreeBSD.org>

PowerNV: Put processor to power-save state in idle thread

When processor enters power-save state it releases resources shared with other
cpu threads which makes other cores working much faster.

This patch also implements saving and restoring registers that might get
corrupted in power-save state.

Submitted by: Patryk Duda <pdk@semihalf.com>
Obtained from: Semihalf
Reviewed by: jhibbits, nwhitehorn, wma
Sponsored by: IBM, QCM Technologies
Differential revision: https://reviews.freebsd.org/D14330


# ed03d62a 12-Jan-2018 Justin Hibbits <jhibbits@FreeBSD.org>

Remove fdt fixups for powerpc, they are no longer needed.

If a fixup really is needed, it should be fixed in u-boot, not in FreeBSD.

Suggested by: nwhitehorn


# e9f96ff4 12-Jan-2018 Justin Hibbits <jhibbits@FreeBSD.org>

Enable L2 cache on supported PowerQUICC and QorIQ platforms

Some PowerQUICC and QorIQ platforms have a L2 cache managed via the
memory-mapped configuration registers, and appear as a node in the device
tree. This adds basic support to enable the cache.


# ac9b4325 12-Jan-2018 Wojciech Macek <wma@FreeBSD.org>

PowerNV: initial support for PCIe host controller

Provide initial support for PCIe host controller as
well as for IOMMU mapping. This commit allows proper
bus enumeration, but does not guarantee DMA operations
are working.

Created by: Nathan Whitehorn <nwhitehorn@freebsd.org>
Submitted by: Wojciech Macek <wma@semihalf.com>
Sponsored by: FreeBSD Foundation


# fb3855e0 11-Jan-2018 Wojciech Macek <wma@FreeBSD.org>

PowerNV: initial support for OPAL

OPAL is a dedicated firmware acting as a hypervisor.
Add generic functions to provide all access.

Created by: Nathan Whitehorn <nw@freebsd.org>
Submitted by: Wojciech Macek <wma@freebsd.org>


# 2ad33187 28-Dec-2017 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Remove ELF note for Open Firmware. It is marked optional in a single 1996
draft of a never-finalized standard (CHRP) and is irrelevant in practice
on FreeBSD since we load the kernel with loader(8) on Open Firmware
platforms anyway. Moreover, loader(8), which is directly loaded by Open
Firmware, has never had an equivalent note.

MFC after: 2 weeks


# 809cd50f 04-Nov-2017 Justin Hibbits <jhibbits@FreeBSD.org>

Add Freescale QorIQ SATA controller support.

The Freescale SATA controller has many similarities to AHCI controllers, so
this driver is a heavily modified AHCI driver. Currently it seems to only
do SATA 1.0 speeds (~100-150MB/s), so there is still room for improvement.

Still to be done:
* Address erratum SATA-A-006187 -- Spread Spectrum Support (intermittent
non-recoverable transient data integrity error seen when SSC enabled).
* Linux doesn't read the log page as it hangs on the P1022. See if that's
applicable to this, and address accordingly.
* Try to determine what's holding back performance, and address it.

MFC after: 3 weeks
Differential Revision: https://reviews.freebsd.org/D6071


# d99b73d8 20-Jul-2017 Justin Hibbits <jhibbits@FreeBSD.org>

Compile the atomic64 emulation for powerpcspe

With this, ZFS builds for and runs (not quite stablely) on powerpcspe.


# 452adeee 20-Jul-2017 Justin Hibbits <jhibbits@FreeBSD.org>

Add cpufreq support for P1022 and MPC8536

P1022 and MPC8536 include a 'jog' feature for clock control
(jog being a slower form of run mode). This is done by changing the
PLL multiplier, and cannot be done if any core is in doze or sleep mode.


# d139c624 01-Apr-2017 Justin Hibbits <jhibbits@FreeBSD.org>

Add Freescale eSPI driver found on QorIQ SoCs


# d9720179 19-Feb-2017 Justin Hibbits <jhibbits@FreeBSD.org>

Add a driver for the RouterBoard RB800 User LED

This may work on other RouterBoard PPC platforms, but I don't have any to test
with.


# fcf59617 06-Feb-2017 Andrey V. Elsukov <ae@FreeBSD.org>

Merge projects/ipsec into head/.

Small summary
-------------

o Almost all IPsec releated code was moved into sys/netipsec.
o New kernel modules added: ipsec.ko and tcpmd5.ko. New kernel
option IPSEC_SUPPORT added. It enables support for loading
and unloading of ipsec.ko and tcpmd5.ko kernel modules.
o IPSEC_NAT_T option was removed. Now NAT-T support is enabled by
default. The UDP_ENCAP_ESPINUDP_NON_IKE encapsulation type
support was removed. Added TCP/UDP checksum handling for
inbound packets that were decapsulated by transport mode SAs.
setkey(8) modified to show run-time NAT-T configuration of SA.
o New network pseudo interface if_ipsec(4) added. For now it is
build as part of ipsec.ko module (or with IPSEC kernel).
It implements IPsec virtual tunnels to create route-based VPNs.
o The network stack now invokes IPsec functions using special
methods. The only one header file <netipsec/ipsec_support.h>
should be included to declare all the needed things to work
with IPsec.
o All IPsec protocols handlers (ESP/AH/IPCOMP protosw) were removed.
Now these protocols are handled directly via IPsec methods.
o TCP_SIGNATURE support was reworked to be more close to RFC.
o PF_KEY SADB was reworked:
- now all security associations stored in the single SPI namespace,
and all SAs MUST have unique SPI.
- several hash tables added to speed up lookups in SADB.
- SADB now uses rmlock to protect access, and concurrent threads
can do SA lookups in the same time.
- many PF_KEY message handlers were reworked to reflect changes
in SADB.
- SADB_UPDATE message was extended to support new PF_KEY headers:
SADB_X_EXT_NEW_ADDRESS_SRC and SADB_X_EXT_NEW_ADDRESS_DST. They
can be used by IKE daemon to change SA addresses.
o ipsecrequest and secpolicy structures were cardinally changed to
avoid locking protection for ipsecrequest. Now we support
only limited number (4) of bundled SAs, but they are supported
for both INET and INET6.
o INPCB security policy cache was introduced. Each PCB now caches
used security policies to avoid SP lookup for each packet.
o For inbound security policies added the mode, when the kernel does
check for full history of applied IPsec transforms.
o References counting rules for security policies and security
associations were changed. The proper SA locking added into xform
code.
o xform code was also changed. Now it is possible to unregister xforms.
tdb_xxx structures were changed and renamed to reflect changes in
SADB/SPDB, and changed rules for locking and refcounting.

Reviewed by: gnn, wblock
Obtained from: Yandex LLC
Relnotes: yes
Sponsored by: Yandex LLC
Differential Revision: https://reviews.freebsd.org/D9352


# eecaab52 01-Nov-2016 Justin Hibbits <jhibbits@FreeBSD.org>

Merge i.MX and PowerPC SDHCI drivers

Summary:
i.MX5 and PowerPC use a very similar eSDHC controller, which is also
similar to the uSDHC controller used by i.MX6. The imx_sdhci driver works
almost completely with PowerPC, with some minor tweaks.

There is one caveat with this: reset currently does not work on PowerPC, so has
been #ifdef'd out until this can be tracked down and fixed. If resets are done
the controller will timeout all data transactions. Without a reset, it appears
to work just fine.

This is part 3, following up r308186 and r308187.

Test Plan:
This has been tested on a PowerPC QorIQ P1022 board. It has not been
tested on i.MX, but no regressions are expected.

Reviewed By: imp
Differential Revision: https://reviews.freebsd.org/D8407


# dc9b124d 21-Oct-2016 Justin Hibbits <jhibbits@FreeBSD.org>

Create a new MACHINE_ARCH for Freescale PowerPC e500v2

Summary:
The Freescale e500v2 PowerPC core does not use a standard FPU.
Instead, it uses a Signal Processing Engine (SPE)--a DSP-style vector processor
unit, which doubles as a FPU. The PowerPC SPE ABI is incompatible with the
stock powerpc ABI, so a new MACHINE_ARCH was created to deal with this.
Additionaly, the SPE opcodes overlap with Altivec, so these are mutually
exclusive. Taking advantage of this fact, a new file, powerpc/booke/spe.c, was
created with the same function set as in powerpc/powerpc/altivec.c, so it
becomes effectively a drop-in replacement. setjmp/longjmp were modified to save
the upper 32-bits of the now-64-bit GPRs (upper 32-bits are only accessible by
the SPE).

Note: This does _not_ support the SPE in the e500v1, as the e500v1 SPE does not
support double-precision floating point.

Also, without a new MACHINE_ARCH it would be impossible to provide binary
packages which utilize the SPE.

Additionally, no work has been done to support ports, work is needed for this.
This also means no newer gcc can yet be used. However, gcc's powerpc support
has been refactored which would make adding a powerpcspe-freebsd target very
easy.

Test Plan:
This was lightly tested on a RouterBoard RB800 and an AmigaOne A1222
(P1022-based) board, compiled against the new ABI. Base system utilities
(/bin/sh, /bin/ls, etc) still function appropriately, the system is able to boot
multiuser.

Reviewed By: bdrewery, imp
Relnotes: yes
Differential Revision: https://reviews.freebsd.org/D5683


# 1e6afa0e 26-Sep-2016 Justin Hibbits <jhibbits@FreeBSD.org>

Add NXP/Freescale DIU driver for PowerPC SoCs

Summary:
This enables some features of the DIU, using a static configuration,
specified either via a 'edid' property on the 'display' FDT node, or a
'video-mode' environment variable (bootarg). 'video-mode' was chosen because it
matches u-boot's naming, so it can be set with:

setenv bootargs video-mode=${video-mode}

at the u-boot CLI.

Mouse cursor is not supported currently, as a hardware cursor is not supported
by framebuffer VT yet. Currently it only supports a 32bpp ARGB (actually BGRA)
format, and only a single composite plane, at up to 1280x1024.

Differential Revision: https://reviews.freebsd.org/D8022


# 6cedae09 02-Aug-2016 Justin Hibbits <jhibbits@FreeBSD.org>

Merge MPC85XX and QorIQ config options

Summary:
MPC85XX and QorIQ are very similar. When the DPAA dTSEC driver was
added, QORIQ_DPAA was brought in as a config option to support the differences
in hardware register settings between QorIQ (e500mc-, e5500- based) SoCs and
QUICC (e500v1/e500v2-based) SoCs, particularly in the Local Access Window (LAW)
target settings.

Unify these settings using macros to hide details and ease porting, and use a
new function (mpc85xx_is_qoriq()) to distinguish between QorIQ and QUICC SoCs at
runtime.

An alternative to using the function could be to use a variable initialized at
platform attach time, which may incur less overhead at runtime. Since it's not
in the critical path once booted, this optimization doesn't seem necessary at
first pass.

Reviewed by: nwhitehorn
MFC after: 1 week
Differential Revision: https://reviews.freebsd.org/D7294


# 8ba8cb91 23-May-2016 Luiz Otavio O Souza <loos@FreeBSD.org>

Move the OFW iicbus code to dev/iicbus to stop polluting dev/ofw with
unrelated code.

Discussed with: nwhitehorn (a long time ago)


# d4faefae 01-Apr-2016 Zbigniew Bodek <zbb@FreeBSD.org>

Fix PowerPC LINT build after r297392

PowerPC has real Open Firmware and does not necessarily need FDT.
Make ofwpci.c only PCI dependent.

Pointed out by: emaste
Reviewed by: nwhitehorn
Obtained from: Semihalf


# c43a8674 29-Mar-2016 Zbigniew Bodek <zbb@FreeBSD.org>

Reduce OFW PCI code duplication - involves ARM, PPC and SPARC64

Import portions of the PowerPC OF PCI implementation into new file
"ofwpci.c", common for other platforms. The files ofw_pci.c and ofw_pci.h
from sys/powerpc/ofw no longer exist. All required declarations are moved
to sys/dev/ofw/ofwpci.h. This creates a new ofw_pci_write_ivar() function
and modifies some others methods. Most functions contain existing ppc
implementations in the majority unchanged. Now there is no need to have
multiple identical copies of methods for various architectures.

Requested by: jhibbits
Reviewed by: jhibbits, marius
Submitted by: Marcin Mazurek <mma@semihalf.com>
Obtained from: Semihalf
Sponsored by: Annapurna Labs
Differential Revision: https://reviews.freebsd.org/D4879


# bc7b9300 21-Dec-2015 Ian Lepore <ian@FreeBSD.org>

Implement OF_decode_addr() for arm. Move most of powerpc's implementation
into a new function that other platforms can share.

This creates a new ofw_reg_to_paddr() function (in a new ofw_subr.c file)
that contains most of the existing ppc implementation, mostly unchanged.
The ppc code now calls the new MI code from the MD code, then creates a
ppc-specific bus_space mapping from the results. The new arm implementation
does the same in an arm-specific way.

This also moves the declaration of OF_decode_addr() from ofw_machdep.h to
openfirm.h, except on sparc64 which uses a different function signature.

This will help all FDT platforms to set up early console access using
OF_decode_addr().


# 68a71d75 29-Nov-2015 Justin Hibbits <jhibbits@FreeBSD.org>

Add Freescale QorIQ GPIO driver.

Still missing interrupt support, to come later.

Sponsored by: Alex Perez/Inertial Computing


# 5d89896c 17-Nov-2015 Justin Hibbits <jhibbits@FreeBSD.org>

Add support for new LAW registers in QorIQ SoCs.

QorIQ SoCs (e5500 core, P5 family) have 2 BARs for local access windows, while
MPC85XX, and P1/P2 families use only a single BAR register.

This also adds the QORIQ_DPAA option, mutually exclusive to MPC85XX, to handle
this difference.

Obtained from: Semihalf
Sponsored by: Alex Perez/Inertial Computing


# 3d3e385e 22-Oct-2015 Conrad Meyer <cem@FreeBSD.org>

Add libkern ffsll() for parity with flsll()

Sponsored by: EMC / Isilon Storage Division
Differential Revision: https://reviews.freebsd.org/D3962


# 67da38c5 21-Sep-2015 Ed Maste <emaste@FreeBSD.org>

Move kbd.c to main sys/conf/files list

It is (optionally) used on all architectures.

Sponsored by: The FreeBSD Foundation


# 5d6961b0 26-Aug-2015 Justin Hibbits <jhibbits@FreeBSD.org>

Fix freescale sdhc driver, and add it to the files list.

Also, add it to the mmc DRIVER_MODULE attachment list.


# 6aabc119 21-Aug-2015 Justin Hibbits <jhibbits@FreeBSD.org>

Create a RouterBoard platform and use it to create a flash map

Summary:
The RouterBoard uses a predefined partition map which doesn't exist in the fdt.
This change allows overriding the fdt slicer with a custom slicer, and uses this
custom slicer to define the flash map on the RouterBoard RB800.
D3305 converts the mpc85xx platform into a base class, so that systems based on
the mpc85xx platform can add their own overrides. This change builds on D3305,
and creates a RouterBoard (RB800) platform to initialize the slicer override.

Reviewed By: nwhitehorn, imp
Differential Revision: https://reviews.freebsd.org/D3345


# 3f3cffed 05-Jul-2015 Justin Hibbits <jhibbits@FreeBSD.org>

Merge booke and aim interrupt.c files.

Summary:
Both booke and AIM interrupt.c files contain nearly identical code. This merges
the two files, to reduce duplication.

Reviewers: #powerpc, marcel

Reviewed By: marcel

Subscribers: imp

Differential Revision: https://reviews.freebsd.org/D2991


# 4f4d15f0 10-Jun-2015 Ruslan Bukin <br@FreeBSD.org>

Allow DTrace to be compiled-in to the kernel.
This will require for AArch64 as we dont have modules yet.

Sponsored by: HEIF5
Sponsored by: ARM Ltd.
Differential Revision: https://reviews.freebsd.org/D1997


# 809923ca 11-May-2015 Justin Hibbits <jhibbits@FreeBSD.org>

Add a PCI bridge for the Freescale PCIe Root Complex

Summary:
The Freescale PCIe Root Complex shows up as a Processor class device, PowerPC
subclass, so the generic PCI code ignores it for a bridge. This adds support
for it.

As part of this, update the Freescale PCI hostbridge driver, to allow probing
beyond the root complex, instead of only allowing "proper" PCI-PCI bridges.

Reviewers: #powerpc, marcel, nwhitehorn

Reviewed By: nwhitehorn

Subscribers: imp

Differential Revision: https://reviews.freebsd.org/D2442

Relnotes: yes


# 98be38e7 04-May-2015 Justin Hibbits <jhibbits@FreeBSD.org>

Implement a driver for the PowerPC-base RouterBoard (RB333/600/800/1100)

Summary:
This has been tested on the RB800, but should work on the RB333, RB600, and
RB1100 as well.

It's currently missing ECC support, but read and write are complete.

Reviewers: imp

Reviewed By: imp

Subscribers: imp

Differential Revision: https://reviews.freebsd.org/D2223


# f23bfc68 29-Apr-2015 Justin Hibbits <jhibbits@FreeBSD.org>

Also happened to miss this in r282264.


# a7452468 18-Apr-2015 Justin Hibbits <jhibbits@FreeBSD.org>

Implement hwpmc(4) for Freescale e500 core.

This supports e500v1, e500v2, and e500mc. Tested only on e500v2, but the
performance counters are identical across all, with e500mc having some
additional events.

Relnotes: Yes


# c4f9a741 04-Apr-2015 Justin Hibbits <jhibbits@FreeBSD.org>

Add file missed in r281096.


# a616b821 04-Apr-2015 Justin Hibbits <jhibbits@FreeBSD.org>

Fix whitespace.


# ca54502a 04-Apr-2015 Justin Hibbits <jhibbits@FreeBSD.org>

Add mpc85xx_gpio to the build conf.

Missed this in the previous commit.


# ecaecbc7 27-Mar-2015 Ian Lepore <ian@FreeBSD.org>

Make simplebus a base class of ofwbus. This allows the elimination of
duplicated code in the two classes, and also allows devices in FDT-based
systems to declare simplebus as their parent and still work correctly
when the FDT data describes the device at the root of the tree rather
than as a child of a simplebus (which is common for interrupt, clock,
and power controllers).

Differential Revision: https://reviews.freebsd.org/D1990
Submitted by: Michal Meloun


# 29d0137a 09-Feb-2015 Rui Paulo <rpaulo@FreeBSD.org>

Remove FreeBSD/wii.

This port failed to gain traction and probably only a couple Wii consoles
ran FreeBSD all the way to single user mode with an md(4). IPC
support was never implemented, so it was impossible to use any peripheral

Any further development, if any, will happen at https://github.com/rpaulo/wii.

Discussed with: nathanw (a long time ago), jhibbits


# 64b83a05 14-Jan-2015 Justin Hibbits <jhibbits@FreeBSD.org>

Add Altivec/VMX register support to ptrace.

MFC after: 2 weeks
Relnotes: yes


# 5cead939 14-Dec-2014 Rui Paulo <rpaulo@FreeBSD.org>

Move ofw_cpu.c to sys/dev/ofw so that it can be used by other
architectures.

Differential Revision: https://reviews.freebsd.org/D1307
Reviewed by: jhibbits


# e9152038 15-Oct-2014 Justin Hibbits <jhibbits@FreeBSD.org>

Move the adm1030 driver to the proper location, and rename it.

For compatibility, 'device windtunnel' is still supported, but one should use
'device adm1030' instead, and this has been updated in GENERIC and NOTES.


# c8d2ffd6 05-Aug-2014 Gleb Smirnoff <glebius@FreeBSD.org>

Merge all MD sf_buf allocators into one MI, residing in kern/subr_sfbuf.c
The MD allocators were very common, however there were some minor
differencies. These differencies were all consolidated in the MI allocator,
under ifdefs. The defines from machine/vmparam.h turn on features required
for a particular machine. For details look in the comment in sys/sf_buf.h.

As result no MD code left in sys/*/*/vm_machdep.c. Some arches still have
machine/sf_buf.h, which is usually quite small.

Tested by: glebius (i386), tuexen (arm32), kevlo (arm32)
Reviewed by: kib
Sponsored by: Netflix
Sponsored by: Nginx, Inc.


# 49588d0f 10-May-2014 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Move the PS3 framebuffer console to use vt instead of syscons and adjust
GENERIC64 for PowerPC to use vt with it.

Much to my chagrin, PS3 support seems to have bitrotted somewhat since the
last time I tried it. ehci panics on attach and interrupt handling seems
to be faulty. This should be fixed soon...


# f25e50cf 14-Feb-2014 Andriy Gapon <avg@FreeBSD.org>

provide fast versions of ffsl and flsl for i386; ffsll and flsll for amd64

Reviewed by: jhb
MFC after: 10 days
X-MFC note: consider thirdparty modules depending on these symbols
Sponsored by: HybridCluster


# 65d08437 05-Feb-2014 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Move Open Firmware device root on PowerPC, ARM, and MIPS systems to
a sub-node of nexus (ofwbus) rather than direct attach under nexus. This
fixes FDT on x86 and will make coexistence with ACPI on ARM systems easier.
SPARC is unchanged.

Reviewed by: imp, ian


# c017acc7 02-Feb-2014 Justin Hibbits <jhibbits@FreeBSD.org>

Add driver for the ADT7460/ADT7467 fan controller found in later PowerBooks
and iBooks. Original work by andreast.

MFC after: 1 month


# 169dd953 31-Jan-2014 Justin Hibbits <jhibbits@FreeBSD.org>

Add hwpmc(4) support for the PowerPC 970 class processors, direct events.
This also fixes asserts on removal of the module for the mpc74xx.

The PowerPC 970 processors have two different types of events: direct events
and indirect events. Thus far only direct events are supported. I included
some documentation in the driver on how indirect events work, but support is
for the future.

MFC after: 1 month


# e1c161e7 30-Jan-2014 Justin Hibbits <jhibbits@FreeBSD.org>

Unbreak non-SMP builds. This was broken by r259284. Also, reorganize the
code introduced in that revision a bit.

Reviewed by: nwhitehorn
MFC after: 3 weeks


# 4702d987 12-Dec-2013 Justin Hibbits <jhibbits@FreeBSD.org>

Add PMU-based CPU frequency scaling. This method is used on most Titanium
PowerBooks.

MFC after: 1 month


# 27cf7d04 05-Dec-2013 Aleksandr Rybalko <ray@FreeBSD.org>

Merge VT(9) project (a.k.a. newcons).

Reviewed by: nwhitehorn
MFC_to_10_after: re approval

Sponsored by: The FreeBSD Foundation


# 43fdca95 05-Dec-2013 John Baldwin <jhb@FreeBSD.org>

Fix debug printfs in FPU_EMU to compile on powerpc64 and enable it for
powerpc64. This fixes the LINT64 kernel config.

Approved by: nwhitehorn (the idea, not the actual patch)


# 49aba28a 01-Dec-2013 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Make uart_cpu_powerpc work on both FDT and OFW systems. This is the last
remaining modification required to build kernels that work with both on
PowerPC.


# debe4455 17-Nov-2013 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Split the function of the PCB_FPU flags into two: PCB_FPU now indicates that
the actual FPU is enabled, while PCB_FPREGS indicates that the FPU state
structure in the PCB is valid. This separation reflects the situation on
FPU-less systems in which the FP state is used by the emulator but we don't
actually want to try to turn on the non-existant FPU.

Use this flag to save and restore FP regs properly on both AIM and Book-E.
As a side effect, this sets up hard-FP and Altivec on Book-E CPUs with such
abilities except for a trap handler to call enable_fpu()/enable_altivec().


# 817ba5c0 12-Nov-2013 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Following the approach with ACPI DMAR on x86, split IOMMU handling into
a variant PCI bus instead of trying to shoehorn it into the PCI host bridge
adapter. Besides matching better the architecture on other platforms, this
also allows systems with multiple partitionable endpoints per PCI host
bridge to work correctly.


# e39c26a9 11-Nov-2013 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Use the same implementation of copyinout.c for both AIM and Book-E. This
fixes some bugs in both implementations related to validity checks on
mapping bounds.


# bdac4360 11-Nov-2013 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Follow up r223485, which made AIM use the ABI thread pointer instead of
PCPU fields for curthread, by doing the same to Book-E. This closes
some potential races switching between CPUs. As a side effect, it turns out
the AIM and Book-E swtch.S implementations were the same to within a few
registers, so move that to powerpc/powerpc.

MFC after: 3 months


# 302acc2e 11-Nov-2013 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Rename the "bare" platform "mpc85xx", which is what it actually is, and
add actual platform probing based on PVR. Still needs a little more work:
in particular, the CCRS setup should move here.

Also turn "bare" into a truly bare platform that doesn't pretend to know how
to do anything except get the memory map. This should also be enhanced to
process the FDT reserved memory list, but that is for another day.


# 629aa519 11-Nov-2013 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Make tsec work with the device tree present on the RB800. The previous code
assumed that the MDIO bus was a direct child of the Ethernet interface. It
may not be and indeed on many device trees is not. While here, add proper
locking for MII transactions, which may be on a bus shared by several MACs.

Hardware donated by: Benjamin Perrault


# 178cdf9a 25-Oct-2013 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Convert e500 PCI driver to use common PPC PCI bus glue. No functional
changes.


# a8126ae5 23-Oct-2013 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Factor out MI portions of the PowerPC nexus device into /sys/dev/ofw. The
sparc64 driver will be modified to use this shortly.


# 17593f86 22-Oct-2013 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Standards-conformance and code deduplication:
- Use bus reference phandles in place of FDT offsets as IRQ domain keys
- Unify the identical macio/fdt/mambo OpenPIC drivers into one
- Be more forgiving (following ePAPR) about what we need from the device
tree to identify an OpenPIC
- Correctly map all IRQs into an interrupt domain
- Set IRQ_*_CONFORM for interrupts on an unknown PIC type instead of
failing attachment for that device.


# e4cf0633 20-Oct-2013 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Since the PS3 port was committed, the AIM nexus device works perfectly fine
on all PowerPC platforms, whether or not they have Open Firmware. Remove
some more duplication and have there be only one nexus driver.


# 228f09b3 20-Oct-2013 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Replace the two almost-exactly-identical AIM and Book-E clock.c
implementations with a single one after the application of a very small
amount of #ifdef.


# 1cfdc971 20-Oct-2013 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Unify the AIM and Book-E vm_machdep.c implementations, which previously
differed only with respect to the AIM version not following style(9) and
some additional features for 64-bit systems and machines with direct maps
in the AIM implementation that are no-ops on Book-E (at least for now).


# 757e5b29 19-Oct-2013 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Add initial driver for POWER hypervisor interpartition ethernet. This is
sufficient to pass traffic but needs some more work before merging to
STABLE.


# 4f835517 02-Oct-2013 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Only build the POWER hypervisor UART driver if device uart is included in
the kernel config.

Approved by: re (gjb)


# 391dff86 28-Sep-2013 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Add driver for the PAPR VSCSI virtual SCSI controller. This lets FreeBSD
install directly into standard POWER LPARs, as found for example in
QEMU. The core of this device is the SCSI RDMA protocol as also found in
Infiniband. The SRP portions of the driver will be factored out and placed
/sys/cam in the future to allow them to be used for IB storage. Thanks to
Scott Long for a great deal of implementation help.

Reviewed by: scottl
Approved by: re (kib)


# 7a8d25c0 17-Sep-2013 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Merge in support for PAPR-compliant (Power Architecture Platform
Requirements) systems from the projects/pseries branch. This in principle
includes all IBM POWER hardware released in the last 15 years with the
exception of POWER3-based systems when run in 64-bit mode. The main
development target, however, has been the PAPR logical partition support
that is the default target in KVM on POWER and QEMU -- mileage may vary
on actual hardware at present. Much of the heavy lifting here was done
by Andreas Tobler.

Approved by: re (kib)


# 98fa0351 05-Sep-2013 Gleb Smirnoff <glebius@FreeBSD.org>

Fix build.


# 237abf0c 28-Jun-2013 Davide Italiano <davide@FreeBSD.org>

- Trim an unused and bogus Makefile for mount_smbfs.
- Reconnect with some minor modifications, in particular now selsocket()
internals are adapted to use sbintime units after recent'ish calloutng
switch.


# cb34ed44 20-May-2013 Marcel Moolenaar <marcel@FreeBSD.org>

Add basic support for FDT to i386 & amd64. This change includes:
1. Common headers for fdt.h and ofw_machdep.h under x86/include
with indirections under i386/include and amd64/include.
2. New modinfo for loader provided FDT blob.
3. Common x86_init_fdt() called from hammer_time() on amd64 and
init386() on i386.
4. Split-off FDT specific low-level console functions from FDT
bus methods for the uart(4) driver. The low-level console
logic has been moved to uart_cpu_fdt.c and is used for arm,
mips & powerpc only. The FDT bus methods are shared across
all architectures.
5. Add dev/fdt/fdt_x86.c to hold the fdt_fixup_table[] and the
fdt_pic_table[] arrays. Both are empty right now.

FDT addresses are I/O ports on x86. Since the core FDT code does
not handle different address spaces, adding support for both I/O
ports and memory addresses requires some thought and discussion.
It may be better to use a compile-time option that controls this.

Obtained from: Juniper Networks, Inc.


# b3caab66 30-Apr-2013 Brooks Davis <brooks@FreeBSD.org>

MFP4 changes 222065 and 222068:

Add a simplebus attachment for cfi(4)'s FDT support and move
cfi_bus_fdt.c to sys/conf/files so non-ppc architectures are supported.

Sponsored by: DARPA, AFRL


# 61e642bc 23-Apr-2013 Rui Paulo <rpaulo@FreeBSD.org>

wiigpio depends on options WII.


# d3576a3f 03-Nov-2012 Marcel Moolenaar <marcel@FreeBSD.org>

Add the bus attachment for the embedded EHCI HC.


# e3cdd5e1 24-Oct-2012 Warner Losh <imp@FreeBSD.org>

Hoist the MI compat_freebsd32 files up into files from files.*.


# 5d26cae7 24-Oct-2012 Warner Losh <imp@FreeBSD.org>

Move common fdt into files. Duplicate in files.powerpc the files
shared with aim. Config is smart enough to cope with multiple lines
of the same path with different options. This reduces the needless
duplication.


# 915f83e6 21-Oct-2012 Rui Paulo <rpaulo@FreeBSD.org>

Make the Wii GPIO driver a separate device.


# 2e564269 17-Oct-2012 Attilio Rao <attilio@FreeBSD.org>

Disconnect non-MPSAFE SMBFS from the build in preparation for dropping
GIANT from VFS. In addition, disconnect also netsmb, which is a base
requirement for SMBFS.

In the while SMBFS regular users can use FUSE interface and smbnetfs
port to work with their SMBFS partitions.

Also, there are ongoing efforts by vendor to support in-kernel smbfs,
so there are good chances that it will get relinked once properly locked.

This is not targeted for MFC.


# 31ec0f7a 21-Aug-2012 Adrian Chadd <adrian@FreeBSD.org>

Initial support for running FreeBSD on the Nintendo Wii. We're able to
reach single user mode using a memory disk device as the file system.

This port includes the framebuffer driver, the PIC driver, a platform
driver and the GPIO driver. The IPC driver (to talk to IOS kernels) is
not yet written but there's a placeholder for it.

There are still some MMU problems and to get a working system you need to
patch locore32.S. Since we haven't found the best way yet to address that
problem, we're not committing those changes yet. The problem is related to
the different BAT layout on the Wii and to the fact that the Homebrew
loader doesn't clean up the special registers (including the 8 BATs)
before passing control to us.

You'll need a Wii with Homebrew loader and a TV that can do NTSC (for now).

Submitted by: Margarida Gouveia


# 9c3fbfbd 19-Aug-2012 Andreas Tobler <andreast@FreeBSD.org>

Add a new sound driver for PowerMacs, found here on my Quad G5.
It allows simple playback and volume control like the other Mac drivers,
not more.


# a894f6a0 19-Aug-2012 Andreas Tobler <andreast@FreeBSD.org>

Add a new temperature driver for certain PowerMacs. Found here on my Quad G5.


# d0ec68d4 03-Aug-2012 Justin Hibbits <jhibbits@FreeBSD.org>

Add backlight support for nVidia-based PowerBooks/iBooks/iMacs.

Approved by: nwhitehorn (mentor)
MFC after: 9.1-RELEASE


# 7c45c9e4 02-Jul-2012 Marcel Moolenaar <marcel@FreeBSD.org>

Add a driver for the Freescale FCM module in the localbus controller.
This driver does not yet handle multiple chip selects properly.

Note that the NAND infrastructure does not perform full page
reads or writes, which means that this driver cannot make use
of the hardware ECC that is otherwise present.


# aea81038 22-Jun-2012 Konstantin Belousov <kib@FreeBSD.org>

Implement mechanism to export some kernel timekeeping data to
usermode, using shared page. The structures and functions have vdso
prefix, to indicate the intended location of the code in some future.

The versioned per-algorithm data is exported in the format of struct
vdso_timehands, which mostly repeats the content of in-kernel struct
timehands. Usermode reading of the structure can be lockless.
Compatibility export for 32bit processes on 64bit host is also
provided. Kernel also provides usermode with indication about
currently used timecounter, so that libc can fall back to syscall if
configured timecounter is unknown to usermode code.

The shared data updates are initiated both from the tc_windup(), where
a fast task is queued to do the update, and from sysctl handlers which
change timecounter. A manual override switch
kern.timecounter.fast_gettime allows to turn off the mechanism.

Only x86 architectures export the real algorithm data, and there, only
for tsc timecounter. HPET counters page could be exported as well, but
I prefer to not further glue the kernel and libc ABI there until
proper vdso-based solution is developed.

Minimal stubs neccessary for non-x86 architectures to still compile
are provided.

Discussed with: bde
Reviewed by: jhb
Tested by: flo
MFC after: 1 month


# aa6bc7dc 30-May-2012 Rafal Jaworowski <raj@FreeBSD.org>

Extract vendor specific Book-E pieces into separate files and have a common
skeleton (maybe we should kobj-tize this one day).

Note the PPC4xx bit is not connected to the build yet.

Obtained from: AppliedMicro, Semihalf.


# 17f4cae4 27-May-2012 Rafal Jaworowski <raj@FreeBSD.org>

Let us manage differences of Book-E PowerPC variations i.e. vendor /
implementation specific vs. the common architecture definition.

Bring PPC4XX defines (PSL, SPR, TLB). Note the new definitions under
BOOKE_PPC4XX are not used in the code yet.

This change set is not supposed to affect existing E500 support, it's just
another reorg step before bringing support for E500mc, E5500 and PPC465.

Obtained from: AppliedMicro, Freescale, Semihalf


# 0a67fa33 26-May-2012 Rafal Jaworowski <raj@FreeBSD.org>

Move OpenPIC FDT bus glue to a shared location, so that other PowerPC
platforms can use it, not only MPC85XX.

This is just reorg, no functional changes.


# a1f8f448 22-Apr-2012 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Remove dead code. The routines in atomic.S did not work properly anyway, and
were everywhere unused. If we turn out to need them, they should be
reimplemented.

MFC after: 2 weeks


# 88c7c434 27-Mar-2012 Peter Wemm <peter@FreeBSD.org>

Allow (with a license warning) "options ZFS" to work in static kernels.

The 'make depend' rules have to use custom -I paths for the special compat
includes for the opensolaris/zfs headers.

This option will pull in the couple of files that are shared with dtrace,
but they appear to correctly use the MODULE_VERSION/MODULE_DEPEND rules
so loader should do the right thing, as should kldload.

Reviewed by: pjd (glanced at)


# 3cc28bd9 26-Feb-2012 Justin Hibbits <jhibbits@FreeBSD.org>

Add backlight control to ATI-graphics PowerBooks and iBooks.

Approved by: nwhitehorn (mentor)
MFC after: 1 week


# b490f4d7 04-Feb-2012 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Missed file in r230993.


# b6faf3cf 16-Oct-2011 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Add support for special keys (volume/brightness/eject) on Apple laptops with
ADB keyboards.

Submitted by: Justin Hibbits <jrh29 at alumni dot cwru dot edu>
MFC after: 9.0-RELEASE


# 9f2c359f 13-Aug-2011 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Add support for the Blu-Ray drive found in the Sony Playstation 3 and fix
some realted minor bugs in PS3 internal storage support.

Submitted by: glevand <geoffrey.levand@mail.ru>
Approved by: re (bz)


# 9ba8a927 19-Jun-2011 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Add an OHCI driver to complement the EHCI one. The infrastructure to attach
both to the parent ps3bus was in r223313. This driver itself comes from the
ps3 project branch.


# 0d317057 19-Jun-2011 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Driver for PS3's internal hard disk. Hopefully this can be CAM-ified in
the future, but presents a set of simple block devices for now. With
(forthcoming) boot loader support or vfs.root.mountfrom, allows booting
PS3s from disk.

Submitted by: glevand <geoffrey.levand@mail.ru>


# 03c6aeca 04-Jun-2011 Andreas Tobler <andreast@FreeBSD.org>

Add new fan controller driver for the G4 MDD PowerMac. Submitted and tested
by Justin Hibbits.

Approved by: nwhitehorn (mentor)


# 0d7136ba 02-Jun-2011 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Missed file in r222613.


# d188174a 29-May-2011 Andreas Tobler <andreast@FreeBSD.org>

Add a new driver, the ad7417, to read temperatures and voltages on some
PowerMac's.

Approved by: nwhitehorn (mentor)


# 84d77676 28-May-2011 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Factor out the SMU fan management code into a new module (powermac_thermal)
that will connect all of the various sensors and fan control modules on
Apple hardware with software-controlled fans (e.g. all G5 systems).

MFC after: 1 month


# 70df4233 19-Apr-2011 Bjoern A. Zeeb <bz@FreeBSD.org>

Compile in in_cksum* implementations for both IPv6 and IPv6.
While in_pseudo() etc. is often used in offloading feature support,
in_cksum() is mostly used to fix some broken hardware.

Keeping both around for the moment allows us to compile NIC drivers
even in an IPv6 only environment without the need to mangle them
with #ifdef INETs in a way they are not prepared for. This will
leave some dead code paths that will not be exercised for IPv6.

Reviewed by: gnn
Sponsored by: The FreeBSD Foundation
Sponsored by: iXsystems
MFC after: 3 days


# 2fea6431 17-Jan-2011 Jung-uk Kim <jkim@FreeBSD.org>

Add reader/writer lock around mem_range_attr_get() and mem_range_attr_set().
Compile sys/dev/mem/memutil.c for all supported platforms and remove now
unnecessary dev_mem_md_init(). Consistently define mem_range_softc from
mem.c for all platforms. Add missing #include guards for machine/memdev.h
and sys/memrange.h. Clean up some nearby style(9) nits.

MFC after: 1 month


# 03479763 05-Jan-2011 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Import support for the Sony Playstation 3 using the OtherOS feature
available on firmwares 3.15 and earlier.

Caveats: Support for the internal SATA controller is currently missing,
as is support for framebuffer resolutions other than 720x480. These
deficiencies will be remedied soon.

Special thanks to Peter Grehan for providing the hardware that made this
port possible, and thanks to Geoff Levand of Sony Computer Entertainment
for advice on the LV1 hypervisor.


# bef5da7f 03-Dec-2010 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Add an abstraction layer to the 64-bit AIM MMU's page table manipulation
logic to support modifying the page table through a hypervisor. This
uses KOBJ inheritance to provide subclasses of the base 64-bit AIM MMU
class with additional methods for page table manipulation.

Many thanks to Peter Grehan for suggesting this design and implementing
the MMU KOBJ inheritance mechanism.


# e2326639 03-Dec-2010 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Provide a simple IOMMU framework on PowerPC, which is required to support
PPC hypervisors.


# fe3b4685 11-Nov-2010 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Remove use of a separate ofw_pmap on 32-bit CPUs. Many Open Firmware
mappings need to end up in the kernel anyway since the kernel begins
executing in OF context. Separating them adds needless complexity,
especially since the powerpc64 and mmu_oea64 code gave up on it a long
time ago.

As a side effect, the PPC ofw_machdep code is no longer AIM-specific,
so move it to powerpc/ofw.


# 50fd2a5b 31-Oct-2010 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Add a driver for the Apple Uninorth AGP host bridge found in all PowerPC
Macintoshes with an AGP bus.


# a7d5f7eb 19-Oct-2010 Jamie Gritton <jamie@FreeBSD.org>

A new jail(8) with a configuration file, to replace the work currently done
by /etc/rc.d/jail.


# da89fa28 15-Oct-2010 Andreas Tobler <andreast@FreeBSD.org>

Add three new drivers for fan control and temperature reading on the
PowerMac7,2.

- The fcu driver lets us read and write the fan RPMs for all fans in the
PowerMac7,2. This driver is PowerMac specific.
- The ds1775 is a driver to read the temperature for the drive bay sensor.
- The max6690 is another driver to read temperatures. Here it is used to
read the inlet, the backside and the U3 heatsink temperature.

An additional driver, the ad7417, will follow later.

Thanks to nwhitehorn for guiding me through this driver development.

Approved by: nwhitehorn (mentor)


# eecadc70 03-Oct-2010 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Add a memory-range interface to /dev/mem on PowerPC using PAT attributes.
Unlike actual MTRR, this only controls the mapping attributes for
subsequent mmap() of /dev/mem. Nonetheless, the support is sufficiently
MTRR-like that Xorg can use it, which translates into an enormous increase
in graphics performance on PowerPC.

MFC after: 2 weeks


# 707c2fb9 10-Sep-2010 Alexander Motin <mav@FreeBSD.org>

Update PowerPC event timer code to use new event timers infrastructure.

Reviewed by: nwitehorn
Tested by: andreast
H/W donated by: Gheorghe Ardelean


# b2a237be 31-Aug-2010 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Restructure how reset and poweroff are handled on PowerPC systems, since
the existing code was very platform specific, and broken for SMP systems
trying to reboot from KDB.

- Add a new PLATFORM_RESET() method to the platform KOBJ interface, and
migrate existing reset functions into platform modules.
- Modify the OF_reboot() routine to submit the request by hand to avoid
the IPIs involved in the regular openfirmware() routine. This fixes
reboot from KDB on SMP machines.
- Move non-KDB reset and poweroff functions on the Powermac platform
into the relevant power control drivers (cuda, pmu, smu), instead of
using them through the Open Firmware backdoor.
- Rename platform_chrp to platform_powermac since it has become
increasingly Powermac specific. When we gain support for IBM systems,
we will grow a new platform_chrp.


# 895051e3 19-Aug-2010 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

FPU EMU is 32-bit only for now, so mark it as a powerpc-only feature.
This fixes powerpc64 LINT.


# 2c16c8d7 31-Jul-2010 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Add support for the IBM Full-System Simulator (Mambo). This code has been
developed against the 970 and Cell simulators.


# c3e289e1 12-Jul-2010 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

MFppc64:

Kernel sources for 64-bit PowerPC, along with build-system changes to keep
32-bit kernels compiling (build system changes for 64-bit kernels are
coming later). Existing 32-bit PowerPC kernel configurations must be
updated after this change to specify their architecture.


# cc81c44d 12-Jul-2010 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Unify ABI-related bits of the Book-E and AIM machdep routines
(exec_setregs, etc.) in order to simplify the addition of 64-bit support,
and possible future extension of the Book-E code to handle hard floating
point and Altivec.

MFC after: 1 month


# d1d3233e 11-Jul-2010 Rafal Jaworowski <raj@FreeBSD.org>

Convert Freescale PowerPC platforms to FDT convention.

The following systems are affected:

- MPC8555CDS
- MPC8572DS

This overhaul covers the following major changes:

- All integrated peripherals drivers for Freescale MPC85XX SoC, which are
currently in the FreeBSD source tree are reworked and adjusted so they
derive config data out of the device tree blob (instead of hard coded /
tabelarized values).

- This includes: LBC, PCI / PCI-Express, I2C, DS1553, OpenPIC, TSEC, SEC,
QUICC, UART, CFI.

- Thanks to the common FDT infrastrucutre (fdtbus, simplebus) we retire
ocpbus(4) driver, which was based on hard-coded config data.

Note that world for these platforms has to be built WITH_FDT.

Reviewed by: imp
Sponsored by: The FreeBSD Foundation


# 9efb0787 05-Jun-2010 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Add a driver for the CPU temperature sensors attached over I2C on the
PowerMac 11,2.


# 502a50e4 22-May-2010 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

MFC r208149,208285:

Add support for the U4 PCI-Express bridge chipset used in late-generation
Powermac G5 systems. MSI and several other things are not presently
supported.

The U3/U4 internal device support portions of this change were contributed
by Andreas Tobler.


# ca2c1931 16-May-2010 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Add support for the U4 PCI-Express bridge chipset used in late-generation
Powermac G5 systems. MSI and several other things are not presently
supported.

The U3/U4 internal device support portions of this change were contributed
by Andreas Tobler.

MFC after: 1 week


# 9b934d09 03-Sep-2009 Ed Schouten <ed@FreeBSD.org>

Move libteken out of the syscons directory.

I initially committed libteken to sys/dev/syscons/teken, but now that
I'm working on a console driver myself, I noticed this was not a good
decision. Move it to sys/teken to make it easier for other drivers to
use a terminal emulator.

Also list teken.c in sys/conf/files, instead of listing it in all the
files.arch files separately.


# 1016f143 22-Jun-2009 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Add cpufreq support on the PowerPC G5, along with a skeleton SMU driver
in order to slew CPU voltage during frequency changes. The OpenBSD SMU
driver was an extremely helpful reference for this.


# f2396192 22-Jun-2009 Rafal Jaworowski <raj@FreeBSD.org>

Keep file list sorted.


# f07ef6e4 22-Jun-2009 Rafal Jaworowski <raj@FreeBSD.org>

DS1553 RTC module driver. On the MPC8555CDS system it hangs off of the LBC bus.

Obtained from: Semihalf


# 757cb6db 22-Jun-2009 Rafal Jaworowski <raj@FreeBSD.org>

Integrated I2C controller driver (found in MPC85xx and other SOC parts).

Obtained from: Freescale, Semihalf


# 02b553ca 06-Jun-2009 Rafal Jaworowski <raj@FreeBSD.org>

Initial version of the sec(4) driver for the integrated security engine found
in Freescale system-on-chip devices.

The following algorithms and schemes are currently supported:
- 3DES, AES, DES
- MD5, SHA1, SHA256, SHA384, SHA512

Reviewed by: philip
Obtained from: Freescale, Semihalf


# 9eb9db93 31-May-2009 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Introduce support for cpufreq on PowerPC with the dynamic frequency
switching capabilities of the MPC7447A and MPC7448.


# 28bb01e5 21-May-2009 Rafal Jaworowski <raj@FreeBSD.org>

Initial support for SMP on PowerPC MPC85xx.

Tested with Freescale dual-core MPC8572DS development system.

Obtained from: Freescale, Semihalf


# b40ce02a 13-May-2009 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Factor out platform dependent things unrelated to device drivers into a
new platform module. These are probed in early boot, and have the
responsibility of determining the layout of physical memory, determining
the CPU timebase frequency, and handling the zoo of SMP mechanisms
found on PowerPC.

Reviewed by: marcel, raj
Book-E parts by: raj


# ac741ae5 23-Apr-2009 Marcel Moolenaar <marcel@FreeBSD.org>

Add suppport for ISA and ISA interrupts to make the ATA
controller in the VIA southbridge functional in the CDS
(Configurable Development System) for MPC85XX.
The embedded USB controllers look operational but the
interrupt steering is still wrong.


# 8446b206 05-Apr-2009 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Add an Open Firmware access module for real-mode OF accesses to the PowerPC
build. This is required for the IBM Mambo simulator, as well as a variety
of non-Apple PowerPC hardware.


# 7bf5cfed 04-Apr-2009 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Modularize the Macintosh built-in ATA along the lines of the rest of the
ATA system as an optional atamacio device.

PR: powerpc/133161
Submitted by: Bruce Cran


# 27457a80 03-Apr-2009 Marcel Moolenaar <marcel@FreeBSD.org>

PowerPC, meet kernel core dumps. The support is based
on a generic dumper that creates an ELF core file and
uses PMAP functions to scan and iterate over memory
chunks, as well as handle memory mappings used during
dumping.
the PMAP layer can choose to return physical memory
chunks or virtual memory chunks. For minidumps, the
chunks should be virtual.

The default MMU I/F implementation for the scan_md()
method returns NULL. Thus, when a PMAP implementation
does not implement the required methods, an empty
core file is created. Here, empty means having an ELF
header only.

Obtained from: Juniper Networks


# 1c96bdd1 03-Apr-2009 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Add support for 64-bit PowerPC CPUs operating in the 64-bit bridge mode
provided, for example, on the PowerPC 970 (G5), as well as on related CPUs
like the POWER3 and POWER4.

This also adds support for various built-in hardware found on Apple G5
hardware (e.g. the IBM CPC925 northbridge).

Reviewed by: grehan


# 802cb57e 28-Feb-2009 Ed Schouten <ed@FreeBSD.org>

Add memmove() to the kernel, making the kernel compile with Clang.

When copying big structures, LLVM generates calls to memmove(), because
it may not be able to figure out whether structures overlap. This caused
linker errors to occur. memmove() is now implemented using bcopy().
Ideally it would be the other way around, but that can be solved in the
future. On ARM we don't do add anything, because it already has
memmove().

Discussed on: arch@
Reviewed by: rdivacky


# cd7a30c4 20-Feb-2009 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Include altivec.c, missed on previous commit r188860. This should unbreak the
build.


# 8486eb86 25-Jan-2009 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Add support for the I2S and davbus audio controllers found in Apple PowerPC
hardware.

Submitted by: Marco Trillo


# a9cade51 14-Jan-2009 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Driver for Apple Keywest I2C controllers found in MacIO ASICs. Used for
power and thermal control, as well as GPIOs on Xserves and controlling
sound codecs for Apple built-in audio.

Submitted by: Marco Trillo
Obtained from: NetBSD


# 3bb481ff 14-Jan-2009 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Import an Open Firmware I2C bus module. This attaches firmware device tree
indicated I2C devices, and provides an ofw_bus interface for driver probing.
This should be MI, but is currently provided only on PowerPC due to lack of
sparc64 hardware with an I2C controller.

Discussed on: freebsd-arch


# b2b734e7 13-Jan-2009 Rafal Jaworowski <raj@FreeBSD.org>

Rework BookE pmap towards multi-core support.

o Eliminate tlb0[] (a s/w copy of TLB0)
- The table contents cannot be maintained reliably in multiple MMU
environments, where asynchronous events (invalidations from other cores)
can change our local TLB0 contents underneath.
- Simplify and optimize TLB flushing: system wide invalidations are
performed using tlbivax instruction (propagates to other cores), for
local MMU invalidations a new optimized routine (assembly) is introduced.

o Improve and simplify TID allocation and management.
- Let each core keep track of its TID allocations.
- Simplify TID recycling, eliminate dead code.
- Drop the now unused powerpc/booke/support.S file.

o Improve page tables management logic.

o Simplify TLB1 manipulation routines.

o Other improvements and polishing.

Obtained from: Freescale, Semihalf


# b4b1c516 01-Jan-2009 Ed Schouten <ed@FreeBSD.org>

Replace syscons terminal renderer by a new renderer that uses libteken.

Some time ago I started working on a library called libteken, which is
terminal emulator. It does not buffer any screen contents, but only
keeps terminal state, such as cursor position, attributes, etc. It
should implement all escape sequences that are implemented by the
cons25 terminal emulator, but also a fair amount of sequences that are
present in VT100 and xterm.

A lot of random notes, which could be of interest to users/developers:

- Even though I'm leaving the terminal type set to `cons25', users can
do experiments with placing `xterm-color' in /etc/ttys. Because we
only implement a subset of features of xterm, this may cause
artifacts. We should consider extending libteken, because in my
opinion xterm is the way to go. Some missing features:

- Keypad application mode (DECKPAM)
- Character sets (SCS)

- libteken is filled with a fair amount of assertions, but unfortunately
we cannot go into the debugger anymore if we fail them. I've done
development of this library almost entirely in userspace. In
sys/dev/syscons/teken there are two applications that can be helpful
when debugging the code:

- teken_demo: a terminal emulator that can be started from a regular
xterm that emulates a terminal using libteken. This application can
be very useful to debug any rendering issues.

- teken_stress: a stress testing application that emulates random
terminal output. libteken has literally survived multiple terabytes
of random input.

- libteken also includes support for UTF-8, but unfortunately our input
layer and font renderer don't support this. If users want to
experiment with UTF-8 support, they can enable `TEKEN_UTF8' in
teken.h. If you recompile your kernel or the teken_demo application,
you can hold some nice experiments.

- I've left PC98 the way it is right now. The PC98 platform has a custom
syscons renderer, which supports some form of localised input. Maybe
we should port PC98 to libteken by the time syscons supports UTF-8?

- I've removed the `dumb' terminal emulator. It has been broken for
years. It hasn't survived the `struct proc' -> `struct thread'
conversion.

- To prevent confusion among people that want to hack on libteken:
unlike syscons, the state machines that parse the escape sequences are
machine generated. This means that if you want to add new escape
sequences, you have to add an entry to the `sequences' file. This will
cause new entries to be added to `teken_state.h'.

- Any rendering artifacts that didn't occur prior to this commit are by
accident. They should be reported to me, so I can fix them.

Discussed on: current@, hackers@
Discussed with: philip (at 25C3)


# 91416fb2 19-Dec-2008 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Modularize the Open Firmware client interface to allow run-time switching
of OFW access semantics, in order to allow future support for real-mode
OF access and flattened device frees. OF client interface modules are
implemented using KOBJ, in a similar way to the PPC PMAP modules.

Because we need Open Firmware to be available before mutexes can be used on
sparc64, changes are also included to allow KOBJ to be used very early in
the boot process by only using the mutex once we know it has been initialized.

Reviewed by: marius, grehan


# 33644623 01-Dec-2008 Sam Leffler <sam@FreeBSD.org>

Switch to ath hal source code. Note this removes the ath_hal
module; the ath module now brings in the hal support. Kernel
config files are almost backwards compatible; supplying

device ath_hal

gives you the same chip support that the binary hal did but you
must also include

options AH_SUPPORT_AR5416

to enable the extended format descriptors used by 11n parts.
It is now possible to control the chip support included in a
build by specifying exactly which chips are to be supported
in the config file; consult ath_hal(4) for information.


# b4dbc599 26-Oct-2008 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Add ADB support. This provides support for the external ADB bus on the PowerMac
G3 as well as the internal ADB keyboard and mice in PowerBooks and iBooks. This
also brings in Mac GPIO support, for which we should eventually have a better
interface.

Obtained from: NetBSD (CUDA and PMU drivers)


# e00251b7 25-Oct-2008 Marcel Moolenaar <marcel@FreeBSD.org>

Add a driver for flash memory that implements to the Common Flash
Memory Interface (CFI). The flash memory can be read and written
to through /dev/cfi# and an ioctl() exists so processes can read
the query information.
The driver supports the AMD and Intel command set, though only
the AMD command has been tested.

Obtained from: Juniper Networks, Inc.


# 08077f58 25-Oct-2008 Marcel Moolenaar <marcel@FreeBSD.org>

Add a driver for the Local Bus Controller.

Obtained from: Juniper Networks, Inc.


# d7f03759 19-Oct-2008 Ulf Lilleengen <lulf@FreeBSD.org>

- Import the HEAD csup code which is the basis for the cvsmode work.


# 51d163d3 14-Oct-2008 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Convert PowerPC AIM PCI and nexus busses to standard OFW bus interface. This
simplifies certain device attachments (Kauai ATA, for instance), and makes
possible others on new hardware.

On G5 systems, there are several otherwise standard PCI devices
(Serverworks SATA) that will not allow their interrupt properties to be
written, so this information must be supplied directly from Open Firmware.

Obtained from: sparc64


# b7382e09 27-Sep-2008 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Add DMA support for Apple built-in ATA controllers.

Tested by: grehan, marcotrillo@gmail.com
MFC after: 1 month


# 321e12c8 26-Aug-2008 Rafal Jaworowski <raj@FreeBSD.org>

tsec: Refactor driver's structure.

Split the driver into the core functionality part (sys/dev/tsec/if_tsec.c) and
the bus attachment (sys/dev/tsec/if_tsec_ocp.c).

This lets better integrate and maintain the driver in other environments with
different attachment abstractions (there is at least one other FreeBSD port --
MPC83xx -- which uses this TSEC driver, but with different local bus model
i.e. some OF derivative). While there, clean up and fix minor cosmetics.

Obtained from: Semihalf


# cf99524a 07-Jun-2008 Marcel Moolenaar <marcel@FreeBSD.org>

Add support for the Apple Big Mac (BMAC) Ethernet controller,
found on various Apple G3 models.

Submitted by: Nathan Whitehorn


# 7d8ccad7 07-Jun-2008 Marcel Moolenaar <marcel@FreeBSD.org>

Add support for Apple's Descriptor-Based DMA (DBDMA) engine. The DMA
engine is usful to various existing drivers, such as ata(4) and scc(4),
and is used bhy the soon to be added bm(4).

Submitted by: Nathan Whitehorn


# 1c17588f 29-Apr-2008 Marcel Moolenaar <marcel@FreeBSD.org>

mp_machdep.c is only conditional upon smp, not aim. If booke grows
support for smp, mp_machdep.c needs to be included as well.


# 12640815 27-Apr-2008 Marcel Moolenaar <marcel@FreeBSD.org>

MFp4: SMP support


# a1cd472a 26-Apr-2008 Rafal Jaworowski <raj@FreeBSD.org>

Introduce a dedicated file for MPC85xx-specific routines. Move cpu_reset()
there, as it's not relevant to Book-E specification, but is an implementation
detail, directly dependent on the given SoC version.


# 321578e3 03-Mar-2008 Rafal Jaworowski <raj@FreeBSD.org>

Connect MPC85XX to the PowerPC build.

The kernel config file is KERNCONF=MPC85XX, so the usual procedure applies:

1. make buildworld TARGET_ARCH=powerpc
2. make buildkernel TARGET_ARCH=powerpc TARGET_CPUTYPE=e500 KERNCONF=MPC85XX

This default config uses kernel-level FPU emulation. For the soft-float world
approach:

1. make buildworld TARGET_ARCH=powerpc TARGET_CPUTYPE=e500
2. disable FPU_EMU option in sys/powerpc/conf/MPC85XX
3. make buildkernel TARGET_ARCH=powerpc TARGET_CPUTYPE=e500 KERNCONF=MPC85XX

Approved by: cognet (mentor)
MFp4: e500


# 4bbf0886 23-Feb-2008 Marcel Moolenaar <marcel@FreeBSD.org>

Hook-up the FPU emulator. It's optional upon FPU_EMU.


# 104954fe 30-Jan-2008 Peter Grehan <grehan@FreeBSD.org>

Enable ofwdump on powerpc (finally). Tested on G3 & G4 machines.

Submitted by: Dan Stekloff <dsteklof at c i s c o dot com>
Discussed with: marcel


# de2fa7b8 19-Dec-2007 Marcel Moolenaar <marcel@FreeBSD.org>

Redefine bus_space_tag_t on PowerPC from a 32-bit integral to
a pointer to struct bus_space. The structure contains function
pointers that do the actual bus space access.

The reason for this change is that previously all bus space
accesses were little endian (i.e. had an explicit byte-swap
for multi-byte accesses), because all busses on Macs are little
endian.
The upcoming support for Book E, and in particular the E500
core, requires support for big-endian busses because all
embedded peripherals are in the native byte-order.

With this change, there's no distinction between I/O port
space and memory mapped I/O. PowerPC doesn't have I/O port
space. Busses assign tags based on the byte-order only.
For that purpose, two global structures exist (bs_be_tag and
bs_le_tag), of which the address can be taken to get a valid
tag.

Obtained from: Juniper, Semihalf


# bd71bd37 15-Dec-2007 Marcel Moolenaar <marcel@FreeBSD.org>

Make files under src/sys/powerpc/aim, as well as Open Firmware related
files dependent upon option/cpu AIM. This is in preparation of adding
support for Book-E (e500) support.

Obtained from: Juniper, Semihalf


# dd3456c0 14-Dec-2007 Marcel Moolenaar <marcel@FreeBSD.org>

Sort.


# 47abecea 14-Dec-2007 Marcel Moolenaar <marcel@FreeBSD.org>

Update file list after repocopying select files from
src/sys/powerpc/powerpc to src/sys/powerpc/aim.


# 3c90d1ea 02-Dec-2007 Robert Watson <rwatson@FreeBSD.org>

Break out stack(9) from ddb(4):

- Introduce per-architecture stack_machdep.c to hold stack_save(9).
- Introduce per-architecture machine/stack.h to capture any common
definitions required between db_trace.c and stack_machdep.c.
- Add new kernel option "options STACK"; we will build in stack(9) if it is
defined, or also if "options DDB" is defined to provide compatibility
with existing users of stack(9).

Add new stack_save_td(9) function, which allows the capture of a stacktrace
of another thread rather than the current thread, which the existing
stack_save(9) was limited to. It requires that the thread be neither
swapped out nor running, which is the responsibility of the consumer to
enforce.

Update stack(9) man page.

Build tested: amd64, arm, i386, ia64, powerpc, sparc64, sun4v
Runtime tested: amd64 (rwatson), arm (cognet), i386 (rwatson)


# a9d185b2 25-Oct-2007 David E. O'Brien <obrien@FreeBSD.org>

Align.


# b2630c29 02-Jul-2007 George V. Neville-Neil <gnn@FreeBSD.org>

Commit the change from FAST_IPSEC to IPSEC. The FAST_IPSEC
option is now deprecated, as well as the KAME IPsec code.
What was FAST_IPSEC is now IPSEC.

Approved by: re
Sponsored by: Secure Computing


# 9f94082e 06-Apr-2007 Yoshihiro Takahashi <nyan@FreeBSD.org>

sort.


# 89c40e5f 05-Apr-2007 Alexander Kabaev <kan@FreeBSD.org>

Be more conservative and compile libkern/memset.c only on architectures
than need it. These are i386, amd64 and powerpc so far.


# 1d3aed33 07-Feb-2007 Marcel Moolenaar <marcel@FreeBSD.org>

Evolve the ctlreq interface added to geom_gpt into a generic
partitioning class that supports multiple schemes. Current
schemes supported are APM (Apple Partition Map) and GPT.
Change all GEOM_APPLE anf GEOM_GPT options into GEOM_PART_APM
and GEOM_PART_GPT (resp).

The ctlreq interface supports verbs to create and destroy
partitioning schemes on a disk; to add, delete and modify
partitions; and to commit or undo changes made.


# 2c298b17 17-Dec-2006 Matt Jacob <mjacob@FreeBSD.org>

opt_ah.h ends up copied into a kernelcompile directory in some
aches as a read-only file. In a number of cases this has led to
compiles failing- usually due to some strange NFS drift which thinks
that the opt_ah.h in the compile directory is out of date wrt the
source it is copied from. When the copy is executed again, it fails
because the target is read-only. Oops. Modify the compile hooks
avoid this.

Discussed with a while back with: Sam Leffler


# 663cf7fe 23-Oct-2006 Ruslan Ermilov <ru@FreeBSD.org>

Move MI parts of syscons into MI "files".


# 9302d5e0 24-Aug-2006 Peter Grehan <grehan@FreeBSD.org>

Remove file that snuck in accidentally in Marcel's gdb commit.


# 512b2fb1 24-Aug-2006 Marcel Moolenaar <marcel@FreeBSD.org>

Add skeletal support for GDB. In particular gdb_cpu_getreg() needs
implementing to make GDB support usable.


# e5d34218 01-Aug-2006 Maxim Sobolev <sobomax@FreeBSD.org>

Add device to access and modify Open Firmware NVRAM settings in
PowerPC-based Apple's machines and small utility to do it from
userland modelled after the similar utility in Darwin/OSX.

Only tested on 1.25GHz G4 Mac Mini.

MFC after: 1 month


# b895d145 26-Jul-2006 Marcel Moolenaar <marcel@FreeBSD.org>

Remove zs(4). It has been replaced by scc(4) & uart(4).


# cd320bc9 26-Jul-2006 Marcel Moolenaar <marcel@FreeBSD.org>

Replace sio_iobus.c with uart_iobus.c.


# 1773f778 08-Jun-2006 Sam Leffler <sam@FreeBSD.org>

add glue for ath_hal

MFC after: 1 month


# d94607de 24-Apr-2006 Marcel Moolenaar <marcel@FreeBSD.org>

Revert previous commit. It's not part of the ppc(4) changes.


# cea4d875 24-Apr-2006 Marcel Moolenaar <marcel@FreeBSD.org>

o Move ISA specific code from ppc.c to ppc_isa.c -- a bus front-
end for isa(4).
o Add a seperate bus frontend for acpi(4) and allow ISA DMA for
it when ISA is configured in the kernel. This allows acpi(4)
attachments in non-ISA configurations, as is possible for ia64.
o Add a seperate bus frontend for pci(4) and detect known single
port parallel cards.
o Merge PC98 specific changes under pc98/cbus into the MI driver.
The changes are minor enough for conditional compilation and
in this form invites better abstraction.
o Have ppc(4) usabled on all platforms, now that ISA specifics
are untangled enough.


# 2825701d 31-Mar-2006 Marcel Moolenaar <marcel@FreeBSD.org>

Add the MacIO attachment for scc(4).


# ce8f0013 30-Mar-2006 Marcel Moolenaar <marcel@FreeBSD.org>

Allow uart(4) to be built on PowerPC.


# 8d96e455 05-Mar-2006 Yaroslav Tykhiy <ytykhiy@gmail.com>

Retire NETSMBCRYPTO as a kernel option and make its functionality
enabled by default in NETSMB and smbfs.ko.

With the most of modern SMB providers requiring encryption by
default, there is little sense left in keeping the crypto part
of NETSMB optional at the build time.

This will also return smbfs.ko to its former properties users
are rather accustomed to.

Discussed with: freebsd-stable, re (scottl)
Not objected by: bp, tjr (silence)
MFC after: 5 days


# a8e06f2a 27-Nov-2005 Ruslan Ermilov <ru@FreeBSD.org>

Make config(8) understand ORed dependecies in "files*" and
improve tracking of known devices. Bump config(8) version.


# d03dab65 22-Nov-2005 Marius Strobl <marius@FreeBSD.org>

Move zs.c from files to files.powerpc as zs(4) by now is only supported
on powerpc (more or less...). That way people updating from FreeBSD 5 to
FreeBSD 6 and beyond on sparc64 will get an error from config(8) rather
than a mysterious compile error when they have a stale 'device zs' in
their kernel config file.

MFC after: 2 weeks


# bba6f0a9 22-Nov-2005 Marius Strobl <marius@FreeBSD.org>

- Add a new method ofw_bus_default_get_devinfo() that allows to retrieve
a newly introduced struct ofw_bus_devinfo which can hold the OFW info
of a device recallable via the ofw_bus KOBJ interface. Introduce a set
of functions ofw_bus_gen_get_*() which use ofw_bus_default_get_devinfo()
to provide generic subroutines for implementing the rest of the ofw_bus
KOBJ interface in a bus driver.
This is inspired by bus_get_resource_list() and bus_generic_rl_*_resource()
and allows to reduce code duplication in bus drivers as they only have
to provide an ofw_bus_default_get_devinfo() implementation in order to
provide the ofw_bus KOBJ interface via ofw_bus_gen_get_*().
- While here add a comment to ofw_bus_if.m describing the intention of
the ofw_bus KOBJ interface.

Reviewed by: marcel


# f9c702db 07-Nov-2005 Peter Grehan <grehan@FreeBSD.org>

Insert a layer of indirection to the pmap code, using a kobj for
the interface. This allows run-time selection of MMU code, based
on CPU-type detection, or tunable-overrides when testing new code.

Pre-requisite for G5 support.

conf/files.powerpc
- remove pmap.c
- add mmu_if.h, mmu_oea.c, pmap_dispatch.c

powerpc/include/mmuvar.h
- definitions for MMU implementations

powerpc/include/pmap.h
- remove pmap_pte_spill declaration
- add pmap_mmu_install declaration
- size the phys_avail array
- pmap_bootstrapped is now global-scope

powerpc/powerpc/machdep.c
- call kobj_machdep_init early in the boot sequence to allow
kobj usage prior to SI_SUB_LOCK
- install the OEA pmap code. This will be moved to CPU-specific
init code in the future.

powerpc/powerpc/mmu_if.m
- Kobj MMU interface definitions

powerpc/powerpc/pmap_dispatch.c
- central dispatch for pmap calls
- contains the global mmu kobj and the routine to locate the
the mmu implementation and init the kobj


# b16d349f 11-Jun-2005 Marcel Moolenaar <marcel@FreeBSD.org>

Refactor the NETSMBCRYPTO option so that it does the same on all
platforms. ARM is excluded as it doesn't yet have any crypto
sources.

Approved by: re (dwhite)
MFC after: 1 day


# f263522a 09-Jun-2005 Joseph Koshy <jkoshy@FreeBSD.org>

MFP4:

- Implement sampling modes and logging support in hwpmc(4).

- Separate MI and MD parts of hwpmc(4) and allow sharing of
PMC implementations across different architectures.
Add support for P4 (EMT64) style PMCs to the amd64 code.

- New pmcstat(8) options: -E (exit time counts) -W (counts
every context switch), -R (print log file).

- pmc(3) API changes, improve our ability to keep ABI compatibility
in the future. Add more 'alias' names for commonly used events.

- bug fixes & documentation.


# c6a37e84 04-Apr-2005 John Baldwin <jhb@FreeBSD.org>

Divorce critical sections from spinlocks. Critical sections as denoted by
critical_enter() and critical_exit() are now solely a mechanism for
deferring kernel preemptions. They no longer have any affect on
interrupts. This means that standalone critical sections are now very
cheap as they are simply unlocked integer increments and decrements for the
common case.

Spin mutexes now use a separate KPI implemented in MD code: spinlock_enter()
and spinlock_exit(). This KPI is responsible for providing whatever MD
guarantees are needed to ensure that a thread holding a spin lock won't
be preempted by any other code that will try to lock the same lock. For
now all archs continue to block interrupts in a "spinlock section" as they
did formerly in all critical sections. Note that I've also taken this
opportunity to push a few things into MD code rather than MI. For example,
critical_fork_exit() no longer exists. Instead, MD code ensures that new
threads have the correct state when they are created. Also, we no longer
try to fixup the idlethreads for APs in MI code. Instead, each arch sets
the initial curthread and adjusts the state of the idle thread it borrows
in order to perform the initial context switch.

This change is largely a big NOP, but the cleaner separation it provides
will allow for more efficient alternative locking schemes in other parts
of the kernel (bare critical sections rather than per-CPU spin mutexes
for per-CPU data for example).

Reviewed by: grehan, cognet, arch@, others
Tested on: i386, alpha, sparc64, powerpc, arm, possibly more


# c0763d37 16-Aug-2004 Suleiman Souhlal <ssouhlal@FreeBSD.org>

Add /dev/mem and /dev/kmem to powerpc.

Approved by: grehan (mentor)


# 26280d88 12-Aug-2004 Marius Strobl <marius@FreeBSD.org>

- Introduce an ofw_bus kobj-interface for retrieving the OFW node and a
subset ("compatible", "device_type", "model" and "name") of the standard
properties in drivers for devices on Open Firmware supported busses. The
standard properties "reg", "interrupts" und "address" are not covered by
this interface because they are only of interest in the respective bridge
code. There's a remaining standard property "status" which is unclear how
to support properly but which also isn't used in FreeBSD at present.
This ofw_bus kobj-interface allows to replace the various (ebus_get_node(),
ofw_pci_get_node(), etc.) and partially inconsistent (central_get_type()
vs. sbus_get_device_type(), etc.) existing IVAR ones with a common one.
This in turn allows to simplify and remove code-duplication in drivers for
devices that can hang off of more than one OFW supported bus.
- Convert the sparc64 Central, EBus, FHC, PCI and SBus bus drivers and the
drivers for their children to use the ofw_bus kobj-interface. The IVAR-
interfaces of the Central, EBus and FHC are entirely replaced by this. The
PCI bus driver used its own kobj-interface and now also uses the ofw_bus
one. The IVARs special to the SBus, e.g. for retrieving the burst size,
remain.
Beware: this causes an ABI-breakage for modules of drivers which used the
IVAR-interfaces, i.e. esp(4), hme(4), isp(4) and uart(4), which need to be
recompiled.
The style-inconsistencies introduced in some of the bus drivers will be
fixed by tmm@ in a generic clean-up of the respective drivers later (he
requested to add the changes in the "new" style).
- Convert the powerpc MacIO bus driver and the drivers for its children to
use the ofw_bus kobj-interface. This invloves removing the IVARs related
to the "reg" property which were unused and a leftover from the NetBSD
origini of the code. There's no ABI-breakage caused by this because none
of these driver are currently built as modules.
There are other powerpc bus drivers which can be converted to the ofw_bus
kobj-interface, e.g. the PCI bus driver, which should be done together
with converting powerpc to use the OFW PCI code from sparc64.
- Make the SBus and FHC front-end of zs(4) and the sparc64 eeprom(4) take
advantage of the ofw_bus kobj-interface and simplify them a bit.

Reviewed by: grehan, tmm
Approved by: re (scottl)
Discussed with: tmm
Tested with: Sun AX1105, AXe, Ultra 2, Ultra 60; PPC cross-build on i386


# cd445f61 12-Jul-2004 Peter Grehan <grehan@FreeBSD.org>

db_memrw.c has been subsumed into db_interface.c ala sparc64


# e700eaa0 10-Jul-2004 Peter Grehan <grehan@FreeBSD.org>

Fix build for non-WITNESS case

spotted by: Suleiman Souhlal <refugee@segfaulted.com>


# 010b69ba 23-Mar-2004 Alan Cox <alc@FreeBSD.org>

Add an implementation of uiomove_fromphys() for PowerPC. This
implementation uses the direct virtual-to-physical mapping.

Discussed with: grehan


# 321fd460 12-Feb-2004 Peter Grehan <grehan@FreeBSD.org>

Work-in-progress for the 'Kauai' ATA device in Mac notebooks. The
device seems to be the macio ATA cell with a PCI front-end, and
has no relation to PIIX-style ATA/PCI devices.


# db55e39a 28-Jan-2004 Peter Grehan <grehan@FreeBSD.org>

Implement UMA_MD_SMALL_ALLOC, since the BAT registers allow direct
addressing of memory. Makes a substantial improvement for apps that
stress the limited amount of KVM on PPC (e.g. untarring the ports tree).

uma_machdep.c stolen from amd64/ia64.


# 473795dc 20-Jan-2004 Peter Grehan <grehan@FreeBSD.org>

Add syscons files, and also generate a syscons font since Apple
SVGA adapters don't have one available in their ROMs.


# f8735aa3 15-Jan-2004 Peter Grehan <grehan@FreeBSD.org>

- add openpic macio and psim/iobus attachments
- alpha sort powermac files


# 1de30b60 13-Jan-2004 Dag-Erling Smørgrav <des@FreeBSD.org>

Add ffsl(), fls() flsl() to platforms that don't already have them.


# c8718f79 28-Jun-2003 Peter Grehan <grehan@FreeBSD.org>

Hook grackle system controller/heathrow interrupt controller to PPC build.


# 5d1b6a85 28-Feb-2003 Ruslan Ermilov <ru@FreeBSD.org>

Standardize handling of locore.[sS] etc. files.

Submitted by: jake, bde, ru


# 84188b7c 23-Feb-2003 Peter Grehan <grehan@FreeBSD.org>

Add apple partition map GEOM module


# d674899b 06-Feb-2003 Benno Rice <benno@FreeBSD.org>

Add a driver that attaches to the gpio node of macio and allows you to enter
DDB when the interrupt button (aka the "programmer's switch") is pressed.

This isn't unfortunately an NMI, but it's a handy way to get into DDB
quickly if needed.


# fb954d9d 04-Feb-2003 Benno Rice <benno@FreeBSD.org>

Add cpu.c. This contains one exported function, cpu_setup(), which handles
setup of and printing information about cpus.

Obtained from: NetBSD (parts)


# 308d2886 01-Feb-2003 Benno Rice <benno@FreeBSD.org>

Build glue for zs_macio.


# e263f030 28-Jan-2003 Poul-Henning Kamp <phk@FreeBSD.org>

NO_GEOM cleanup: remove subr_disklabel.c from powerpc and x86_64.


# e24f6473 21-Jan-2003 Peter Grehan <grehan@FreeBSD.org>

Convert remaining .s files to .S

Approved by: benno


# 03cb4028 17-Jan-2003 Poul-Henning Kamp <phk@FreeBSD.org>

Remove subr_diskslice.c and subr_diskmbr.c which I can find no trace of
why should be needed in the powerpc files. Not compile tested.


# 2a2c7962 17-Jan-2003 Poul-Henning Kamp <phk@FreeBSD.org>

Move subr_disklabel.c and subr_diskslice.c from being MI to MD files,
so that they can be left out where they are unneeded.


# a65a2806 08-Jan-2003 Benno Rice <benno@FreeBSD.org>

Add a pcib variant to allow us to fix up interrupt assignments.

We probably want to do something wrt bus enumeration as well at some point.


# e1f89bae 18-Sep-2002 Peter Grehan <grehan@FreeBSD.org>

- added macio and psim files
- removed unused extintr.c

Approved by: benno


# 99bc8c72 09-Jul-2002 Benno Rice <benno@FreeBSD.org>

Add setjmp (needed for DDB).


# 45b4eca5 09-Jul-2002 Benno Rice <benno@FreeBSD.org>

Add DDB support.


# 98f8e6c0 09-Jul-2002 Benno Rice <benno@FreeBSD.org>

Driver for the Apple UniNorth Host-PCI bridge.

This is in a PowerMac-specific subdirectory as it is hoped that we will support
more than just the PowerMac platform.


# 3008110e 09-Jul-2002 Benno Rice <benno@FreeBSD.org>

Add ofw_pci.c in the pci case.


# 25b60a3b 08-Jul-2002 Benno Rice <benno@FreeBSD.org>

1) Add busdma machdep code.
2) Add bus_pio.h and bus_memio.h (which do nothing).

Submitted by: Peter Grehan <peterg@ptree32.com.au> (1)


# ca019208 09-Jul-2002 Benno Rice <benno@FreeBSD.org>

Driver for OpenPIC compatible interrupt controllers.
It's fairly PowerMac specific at the moment, but that should be fixable.


# f6a7723d 09-Jul-2002 Benno Rice <benno@FreeBSD.org>

Add interrupt handling support code.

I've tried to make this fairly platform-independant as some PowerPC platforms
may not have openpic-style interrupt controllers. This may not have the best
performance but it works for now.


# 825467ca 29-Jun-2002 Benno Rice <benno@FreeBSD.org>

Add in_cksum.c


# 6c2a0625 29-Jun-2002 Benno Rice <benno@FreeBSD.org>

Many fixes to low-level trap and interrupt handling:

- Tidy up clock code. Don't repeatedly call hardclock().
- Remove intrnames, decrnest and intrcnt from locore.s
- Coalesce all trap handling into a single stub that then calls a dispatch
function.

Submitted by: Peter Grehan <peterg@ptree32.com.au>


# 289fc68d 13-May-2002 Benno Rice <benno@FreeBSD.org>

Build the fpu support routines.


# b23e18d6 30-Apr-2002 Benno Rice <benno@FreeBSD.org>

Add sigcode.S


# 2819d0ad 14-Apr-2002 Benno Rice <benno@FreeBSD.org>

Add ofwd to the GENERIC config for powerpc.


# d74ac681 26-Mar-2002 Matthew Dillon <dillon@FreeBSD.org>

Compromise for critical*()/cpu_critical*() recommit. Cleanup the interrupt
disablement assumptions in kern_fork.c by adding another API call,
cpu_critical_fork_exit(). Cleanup the td_savecrit field by moving it
from MI to MD. Temporarily move cpu_critical*() from <arch>/include/cpufunc.h
to <arch>/<arch>/critical.c (stage-2 will clean this up).

Implement interrupt deferral for i386 that allows interrupts to remain
enabled inside critical sections. This also fixes an IPI interlock bug,
and requires uses of icu_lock to be enclosed in a true interrupt disablement.

This is the stage-1 commit. Stage-2 will occur after stage-1 has stabilized,
and will move cpu_critical*() into its own header file(s) + other things.
This commit may break non-i386 architectures in trivial ways. This should
be temporary.

Reviewed by: core
Approved by: core


# bf76ba78 21-Mar-2002 Benno Rice <benno@FreeBSD.org>

Collect all functions for copying to and from userspace into the one file.

This allows me to reimplement [sf]u{byte,word} as separate functions and not
as calls to copy{in,out}.


# b5a8f767 05-Mar-2002 Hajimu UMEMOTO <ume@FreeBSD.org>

- Speedup 3DES by using assembly code for i386.
- Sync des/blowfish to more recent openssl.

Obtained from: KAME/NetBSD
MFC after: 2 weeks


# 7c629906 21-Oct-2001 Dag-Erling Smørgrav <des@FreeBSD.org>

Move procfs_* from procfs_machdep.c into sys_process.c, and rename them to
proc_* in the process; procfs_machdep.c is no longer needed.

Run-tested on i386, build-tested on Alpha, untested on other platforms.


# 00267919 26-Jun-2001 Benno Rice <benno@FreeBSD.org>

Add -msoft-float to COPTS to stop GCC attempting to be "smart" and using
floating point registers for various optimisation tweaks.


# c585bae1 17-Jun-2001 Benno Rice <benno@FreeBSD.org>

The final commit for the first phase of PowerPC support.

This adds the config stuff needed to build kernels.

Reviewed by: obrien